数字督察一体化平台-前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1797 lines
95 KiB

<template>
<div class="wrapper">
<div class="container" v-loading="loading">
<template v-if="step === 0">
<div class="message flex gap">
<icon
name="el-icon-WarningFilled"
:size="22"
class="text-primary"
/>
<div>
<div class="message-title">补充内容</div>
<div>
请在提交办结时,填写以下数据,以便完成长沙公安数字督察一体化平台数据上传
</div>
</div>
</div>
<negative-description />
<h5>核查办理</h5>
<el-form :label-width="146" :model="form" ref="formRef">
<el-row>
<el-col :span="12">
<el-form-item
label="涉及案件/警情编号"
prop="caseNumber"
>
<el-input
v-model="form.caseNumber"
placeholder="请输入"
style="width: 280px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及单位"
prop="involveDepartId"
:rules="{
required: true,
message: '请选择涉及单位',
trigger: ['blur'],
}"
>
<div style="width: 280px">
<depart-tree-select
v-model="form.involveDepartId"
:auth="false"
/>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="核查情况"
prop="checkStatus"
:rules="{
required: true,
message: '请选择核查情况',
trigger: ['blur'],
}"
>
<el-radio-group
v-model="form.checkStatus"
@change="
(val) =>
handleChangeCheckStatus(val, item)
"
>
<el-radio
v-for="item in dict.inspectCase"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="是否整改"
prop="isRectifyCode"
:rules="{
required: true,
message: '请选择是否整改',
trigger: ['blur'],
}"
v-if="form.checkStatus !== InspectCase.FALSE"
>
<el-radio-group
v-model="form.isRectifyCode"
@change="
(val) =>
(form.isRectifyName =
dict.isRectify.filter(
(item) =>
item.dictValue === val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.isRectify"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
negative.problemSourcesCode !==
ProblemSources.JWDC
"
>
<el-form-item
label="涉及对象"
prop="accountabilityTarget"
:rules="{
required: true,
message: '请选择追责对象',
trigger: ['blur'],
}"
>
<el-radio-group
v-model="form.accountabilityTarget"
>
<el-radio
v-for="item in dict.accountabilityTarget"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
form.checkStatus !== InspectCase.FALSE &&
form.isRectifyCode === IsRectify.NOT
"
>
<el-form-item
label="整改限制"
prop="rectifyRestrictionDays"
:rules="{
required: true,
message: '请选择整改限制',
trigger: ['blur'],
}"
>
<el-input-number
v-model="form.rectifyRestrictionDays"
/>
<span class="ml-8">天</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label="问题核查情况"
prop="checkStatusDesc"
:rules="{
required: true,
message: '请输入问题核查情况',
trigger: ['blur'],
}"
>
<el-input
type="textarea"
placeholder="请输入问题核查情况"
v-model="form.checkStatusDesc"
:autosize="{ minRows: 4 }"
/>
</el-form-item>
<el-form-item
label="未整改原因"
prop="unrectifyReason"
:rules="{
required: true,
message: '请输入未整改原因',
trigger: ['blur'],
}"
v-if="
form.isRectifyCode === '0' ||
form.isRectifyCode === '2'
"
>
<el-input
type="textarea"
placeholder="请输入未整改原因"
v-model="form.unrectifyReason"
:autosize="{ minRows: 4 }"
/>
</el-form-item>
<el-form-item
label="问题整改情况"
prop="rectifyDesc"
v-if="
form.checkStatus !== InspectCase.FALSE &&
form.isRectifyCode === InspectCase.TRUE
"
:rules="{
required: true,
message: '请输入问题整改情况',
trigger: ['blur'],
}"
>
<el-input
type="textarea"
placeholder="请输入问题整改情况"
v-model="form.rectifyDesc"
:autosize="{ minRows: 4 }"
/>
</el-form-item>
<div
v-if="
form.accountabilityTarget !==
AccountabilityTarget.DEPARTMENT
"
>
<el-form-item
label-position="top"
prop="blames"
:rules="{
required: true,
message: '请添加涉及人员',
trigger: ['change'],
}"
>
<div
v-for="(item, index) in form.blames.filter(
(obj) => obj.type === BlameType.PERSONAL
)"
:key="index"
>
<div class="flex v-center">
<h5>
涉及人员{{
form.blames
.filter(
(blame) =>
blame.type ===
BlameType.PERSONAL
)
.indexOf(item) + 1
}}
</h5>
<el-button
type="danger"
plain
size="small"
@click="handleRemovePersonal(item)"
text
class="ml-10"
>删除
</el-button>
</div>
<el-row>
<el-col :span="12">
<el-form-item
label="涉及人员姓名"
:prop="`blames.${index}.blameEmpNo`"
:rules="{
required: true,
message: '请选择涉及人员',
trigger: ['blur'],
}"
>
<police-select
:host-level="negative.hostLevel"
:depart-id="
negative.hostLevel ===
HostLevel.SECOND
? negative.handleSecondDepartId
: negative.handleThreeDepartId
"
v-model="item.blameEmpNo"
:disabldKeys="
form.blames
.filter(
(obj) =>
obj.blameEmpNo
)
.map(
(obj) =>
obj.blameEmpNo
)
"
@change="
(police) =>
handleChangePolice(
police,
item
)
"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="警号"
:prop="`blames.${index}.blameEmpNo`"
:rules="{
required: true,
message: '请输入警号',
trigger: ['blur'],
}"
>
<el-input
placeholder="请输入警号"
v-model="item.blameEmpNo"
style="width: 240px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="身份证号码"
:prop="`blames.${index}.blameIdCode`"
:rules="{
required: true,
message: '请输入身份证号码',
trigger: ['blur'],
}"
>
<el-input
placeholder="请输入身份证号码"
v-model="item.blameIdCode"
style="width: 240px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="人员属性"
:prop="`blames.${index}.ivPersonTypeCode`"
:rules="{
required: true,
message: '请选择人员属性',
trigger: ['blur'],
}"
>
<el-radio-group
v-model="item.ivPersonTypeCode"
@change="
(val) =>
(item.ivPersonType =
dict.personType.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.personType"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item
:prop="`blames.${index}.problems`"
:rules="{
required: true,
message: '请添加问题类型',
trigger: ['blur'],
}"
v-if="
form.checkStatus !== InspectCase.FALSE
"
style="margin-bottom: 0"
>
<div
v-for="(problem, j) in item.problems"
:key="j"
style="width: 98%"
>
<el-form-item
:label="`问题类型${j + 1}`"
:prop="`blames.${index}.problems.${j}.threeLevelCode`"
:rules="{
required: true,
message: '请选择问题类型',
trigger: ['blur'],
}"
>
<div
class="flex between"
style="width: 100%"
>
<div class="flex gap">
<problem-type-select
v-model="
problem.threeLevelCode
"
@change="
(node) =>
handleChangeProblem(
node,
problem
)
"
/>
<div style="width: 140px">
<el-form-item
label-position="top"
:prop="`blames.${index}.problems.${j}.threeLevelContentOther`"
:rules="{
required: true,
message:
'请输入',
trigger: [
'blur',
],
}"
style="
margin-bottom: 0;
"
v-if="
problem.threeLevelContent ===
'其他'
"
>
<el-input
placeholder="其他类型详细描述"
v-model="
problem.threeLevelContentOther
"
/>
</el-form-item>
</div>
<div>
<span>{{
problem.oneLevelContent
? problem.oneLevelContent +
" / "
: ""
}}</span>
<span>{{
problem.twoLevelContent
? problem.twoLevelContent +
" / "
: ""
}}</span>
<span>{{
problem.threeLevelContent
}}</span>
</div>
</div>
<div
class="flex center v-center"
>
<el-button
type="danger"
plain
@click="
item.problems.splice(
j,
1
)
"
v-if="j !== 0"
size="small"
>
<template #icon>
<icon
name="el-icon-Delete"
/>
</template>
删除问题
</el-button>
<el-button
@click="
handleAddProblem(
item
)
"
plain
type="primary"
v-if="j === 0"
size="small"
>
<template #icon>
<icon
name="el-icon-Plus"
/>
</template>
添加问题
</el-button>
</div>
</div>
</el-form-item>
</div>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item
label="责任类别"
:prop="`blames.${index}.responsibilityTypeCode`"
:rules="{
required: true,
message: '请选择责任类别',
trigger: ['blur'],
}"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-radio-group
v-model="
item.responsibilityTypeCode
"
@change="
(val) =>
(item.responsibilityTypeName =
dict.responsibilityType.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.responsibilityType"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-form-item
label="主观方面"
:prop="`blames.${index}.subjectiveAspectCode`"
:rules="{
required: true,
message: '请选择主观方面',
trigger: ['blur'],
}"
>
<div class="flex gap">
<el-radio-group
v-model="
item.subjectiveAspectCode
"
@change="
(val) =>
handleChangeSubjectiveAspect(
val,
item
)
"
>
<el-radio
v-for="item in dict.subjectiveAspect"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
<el-form-item
:prop="`blames.${index}.subjectiveAspectName`"
:rules="{
required: true,
message:
'请输入其他主观方面',
trigger: ['blur'],
}"
v-if="
item.subjectiveAspectCode ===
SubjectiveAspect.OTHER
"
>
<el-input
v-model="
item.subjectiveAspectName
"
placeholder="请输入其他主观方面"
style="width: 120px"
/>
</el-form-item>
</div>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-form-item
label="处理结果"
:prop="`blames.${index}.handleResultCode`"
:rules="{
required: true,
message: '请选择处理结果',
trigger: ['blur'],
}"
>
<el-select
v-model="item.handleResultCode"
style="width: 240px"
@change="
(val) =>
(item.handleResultName =
dict.handleResult.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-option
v-for="item in dict.handleResult"
:key="item.dictCode"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
<template
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-col :span="12">
<el-form-item
label="督察措施"
:prop="`blames[${index}].superviseMeasuresCode`"
>
<el-radio-group
v-model="
item.superviseMeasuresCode
"
clearabled
>
<el-radio
v-for="dictItem in dict.superviseMeasures"
:key="dictItem.dictCode"
:value="
dictItem.dictValue
"
@click.native.prevent="
() => {
if (
item.superviseMeasuresCode ===
dictItem.dictValue
) {
item.superviseMeasuresCode =
'';
item.superviseMeasuresName =
'';
} else {
item.superviseMeasuresCode =
dictItem.dictValue;
item.superviseMeasuresName =
dictItem.dictLabel;
}
}
"
>{{
dictItem.dictLabel
}}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="维权容错"
:prop="`blames.${index}.protectRightsCode`"
v-if="
negative.problemSourcesCode !==
ProblemSources.JWDC
"
>
<el-radio-group
v-model="
item.protectRightsCode
"
@change="
(val) =>
(item.protectRightsName =
dict.protectRights.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.protectRights"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
</el-row>
</div>
<div class="flex center" style="width: 100%">
<el-button
type="primary"
plain
@click="handleAddPersonal"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
添加涉及人员
</el-button>
</div>
</el-form-item>
<el-divider />
<el-form-item
label-position="top"
prop="blameLeaders"
:rules="{
required: true,
message: '请添加涉及领导',
}"
>
<div
v-for="(item, index) in form.blameLeaders"
:key="index"
>
<div class="flex v-center">
<h5>涉及领导{{ index + 1 }}</h5>
<el-button
type="danger"
plain
size="small"
@click="handleRemoveBlameLeader(index)"
text
class="ml-10"
>删除
</el-button>
</div>
<el-row style="background: #f9faff">
<el-col :span="24">
<el-form-item
label="涉及人员"
:prop="`blameLeaders.${index}.blameIdCodes`"
:rules="{
required: true,
message:
'请选择涉及领导关联的涉及人员',
trigger: ['blur'],
}"
>
<el-checkbox
border
v-for="(
obj, j
) in form.blames.filter(
(obj) =>
obj.type ===
BlameType.PERSONAL &&
obj.blameIdCode
)"
:key="obj.blameIdCode"
:label="obj.blameName"
:value="obj.blameIdCode"
:checked="
item.blameIdCodes.includes(
obj.blameIdCode
)
"
@change="
(bool) =>
handleCheckboxChange(
item,
bool,
obj.blameIdCode
)
"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及领导姓名"
:prop="`blameLeaders.${index}.leadName`"
:rules="{
required: true,
message: '请选择涉及领导',
trigger: ['blur'],
}"
>
<police-select
:host-level="negative.hostLevel"
:depart-id="
negative.hostLevel ===
HostLevel.SECOND
? negative.handleSecondDepartId
: negative.handleThreeDepartId
"
v-model="item.leadEmpNo"
@change="
(police) => {
item.leadName =
police.name;
item.leadIdCode =
police.idCode;
}
"
:isLeader="true"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="警号"
:prop="`blameLeaders.${index}.leadEmpNo`"
:rules="{
required: true,
message: '请输入警号',
trigger: ['blur'],
}"
>
<el-input
placeholder="请输入警号"
v-model="item.leadEmpNo"
style="width: 240px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="身份证号码"
:prop="`blameLeaders.${index}.leadIdCode`"
:rules="{
required: true,
message: '请输入身份证号码',
trigger: ['blur'],
}"
>
<el-input
placeholder="请输入身份证号码"
style="width: 240px"
v-model="item.leadIdCode"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="责任类别"
:prop="`blameLeaders.${index}.leadResponsibilityTypeCode`"
:rules="{
required: true,
message: '请选择责任类别',
trigger: ['blur'],
}"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-radio-group
v-model="
item.leadResponsibilityTypeCode
"
@change="
(val) =>
(item.leadResponsibilityTypeName =
dict.leadResponsibilityType.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.leadResponsibilityType"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="处理结果"
:prop="`blameLeaders.${index}.leadHandleResultCode`"
:rules="{
required: true,
message: '请选择处理结果',
trigger: ['blur'],
}"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-select
v-model="
item.leadHandleResultCode
"
style="width: 240px"
@change="
(val) =>
(item.leadHandleResultName =
dict.handleResult.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-option
v-for="item in dict.handleResult"
:key="item.dictCode"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-form-item
label="督察措施"
:prop="`blameLeaders.${index}.leadMeasuresCode`"
>
<el-radio-group
v-model="item.leadMeasuresCode"
>
<el-radio
v-for="dictItem in dict.superviseMeasures"
:key="dictItem.dictCode"
:value="dictItem.dictValue"
@click.native.prevent="
() => {
if (
item.leadMeasuresCode ===
dictItem.dictValue
) {
item.leadMeasuresCode =
'';
item.leadMeasuresName =
'';
} else {
item.leadMeasuresCode =
dictItem.dictValue;
item.leadMeasuresName =
dictItem.dictLabel;
}
}
"
>{{ dictItem.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-form-item
label="维权容错"
:prop="`blameLeaders.${index}.leadProtectRightsCode`"
>
<el-radio-group
v-model="
item.leadProtectRightsCode
"
@change="
(val) =>
(item.leadProtectRightsName =
dict.protectRights.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.protectRights"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</div>
<div
class="flex center"
style="width: 100%"
v-if="
form.accountabilityTarget !==
AccountabilityTarget.DEPARTMENT
"
>
<el-button
type="primary"
plain
@click="handleAddBlameLeader"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
添加涉及领导
</el-button>
</div>
</el-form-item>
<el-divider />
</div>
<el-form-item
label-position="top"
v-if="
form.accountabilityTarget !==
AccountabilityTarget.PERSONAL
"
>
<div v-for="(item, index) in form.blames" :key="index">
<template v-if="item.type === BlameType.DEPARTMENT">
<div class="flex between v-center">
<h5>涉及单位</h5>
</div>
<el-row>
<el-col :span="12">
<el-form-item
label="涉及班子成员"
:prop="`blames.${index}.blameEmpNo`"
:rules="{
required: true,
message: '请选择涉及班子成员',
trigger: ['blur'],
}"
>
<police-select
:host-level="negative.hostLevel"
:depart-id="
negative.hostLevel ===
HostLevel.SECOND
? negative.handleSecondDepartId
: negative.handleThreeDepartId
"
v-model="item.blameEmpNo"
@change="
(police) => {
item.blameName =
police.name;
item.blameIdCode =
police.idCode;
}
"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="身份证号码"
:prop="`blames.${index}.blameIdCode`"
:rules="{
required: true,
message: '请输入身份证号码',
trigger: ['blur'],
}"
>
<el-input
placeholder="请输入身份证号码"
v-model="item.blameIdCode"
style="width: 240px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="人员属性"
:prop="`blames.${index}.ivPersonTypeCode`"
:rules="{
required: true,
message: '请选择人员属性',
trigger: ['blur'],
}"
>
<el-radio-group
v-model="item.ivPersonTypeCode"
>
<el-radio
:value="PersonType.POLICE"
>民警
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-form-item
label="督察措施"
:prop="`blames.${index}.superviseMeasuresCode`"
>
<el-radio-group
v-model="
item.superviseMeasuresCode
"
@change="
(val) =>
(item.superviseMeasuresName =
dict.superviseMeasures.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.superviseMeasures"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item
:prop="`blames.${index}.problems`"
:rules="{
required: true,
message: '请添加问题类型',
trigger: ['blur'],
}"
v-if="
form.checkStatus !== InspectCase.FALSE
"
style="margin-bottom: 0"
>
<div
v-for="(problem, j) in item.problems"
:key="j"
style="width: 98%"
>
<el-form-item
:label="`问题类型${j + 1}`"
:prop="`blames.${index}.problems.${j}.threeLevelCode`"
:rules="{
required: true,
message: '请选择问题类型',
trigger: ['blur'],
}"
>
<div
class="flex between"
style="width: 100%"
>
<div class="flex gap">
<problem-type-select
v-model="
problem.threeLevelCode
"
@change="
(node) =>
handleChangeProblem(
node,
problem
)
"
/>
<div style="width: 140px">
<el-form-item
label-position="top"
:prop="`blames.${index}.problems.${j}.threeLevelContentOther`"
:rules="{
required: true,
message:
'请输入',
trigger: [
'blur',
],
}"
style="
margin-bottom: 0;
"
v-if="
problem.threeLevelContent ===
'其他'
"
>
<el-input
placeholder="其他类型详细描述"
v-model="
problem.threeLevelContentOther
"
/>
</el-form-item>
</div>
<div>
<span>{{
problem.oneLevelContent
? problem.oneLevelContent +
" / "
: ""
}}</span>
<span>{{
problem.twoLevelContent
? problem.twoLevelContent +
" / "
: ""
}}</span>
<span>{{
problem.threeLevelContent
}}</span>
</div>
</div>
<div
class="flex center v-center"
>
<el-button
type="danger"
plain
@click="
item.problems.splice(
j,
1
)
"
v-if="j !== 0"
size="small"
>
<template #icon>
<icon
name="el-icon-Delete"
/>
</template>
删除问题
</el-button>
<el-button
@click="
handleAddProblem(
item
)
"
plain
type="primary"
v-if="j === 0"
size="small"
>
<template #icon>
<icon
name="el-icon-Plus"
/>
</template>
添加问题
</el-button>
</div>
</div>
</el-form-item>
</div>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item
label="主观方面"
:prop="`blames.${index}.subjectiveAspectCode`"
:rules="{
required: true,
message: '请选择主观方面',
trigger: ['blur'],
}"
>
<el-radio-group
v-model="
item.subjectiveAspectCode
"
@change="
(val) =>
(item.subjectiveAspectName =
dict.subjectiveAspect.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.subjectiveAspect"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="责任类别"
:prop="`blames.${index}.responsibilityTypeCode`"
:rules="{
required: true,
message: '请选择责任类别',
trigger: ['blur'],
}"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-radio-group
v-model="
item.responsibilityTypeCode
"
@change="
(val) =>
(item.responsibilityTypeName =
dict.responsibilityType.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-radio
v-for="item in dict.responsibilityType"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="处理结果"
:prop="`blames.${index}.handleResultCode`"
:rules="{
required: true,
message: '请选择处理结果',
trigger: ['blur'],
}"
v-if="
form.checkStatus !==
InspectCase.FALSE
"
>
<el-select
v-model="item.handleResultCode"
style="width: 240px"
@change="
(val) =>
(item.handleResultName =
dict.handleResult.filter(
(item) =>
item.dictValue ===
val
)[0].dictLabel)
"
>
<el-option
v-for="item in dict.handleResult"
:key="item.dictCode"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</template>
</div>
</el-form-item>
<el-form-item
prop="files"
label-position="top"
:rules="{
required: true,
message: '请上传佐证材料',
}"
>
<template #label>
<h5
class="inline-block mb-0"
style="text-align: left"
>
佐证材料
</h5>
</template>
<div
v-if="
negative.problemSourcesCode ===
ProblemSources.JWDC
"
>
请提供以下佐证材料:
<p>
1、《处理反馈表》(必提供)
<a
class="link"
:href="`${BASE_PATH}/templates/《处理反馈表》.doc`"
target="__blank"
>下载链接</a
>
</p>
<p>
2、如申请容错免责,请提供《容错免责申请表》
<a
class="link"
:href="`${BASE_PATH}/templates/《警务评议容错免责申请表》.docx`"
target="__blank"
>下载链接</a
>
</p>
<p>
3、针对群众不满意的原因,请提交无过错的音视频、微信或短信截图等证明材料;
</p>
<p>
4、针对110、122接处警情况,请提供处警开始、结束及处置过程中的视频截图;
</p>
<p>
5、自动回访结果不满意时,请提供所队的回访录音;
</p>
<p>6、单位或个人所开展的其他相关工作证明材料。</p>
</div>
<div
v-if="
negative.problemSourcesCode ===
ProblemSources.JDGL
"
></div>
<div style="width: 100%" class="mb-10 mt-10">
<file-upload-group
v-model:files="form.files"
:problemSourcesCode="
negative.problemSourcesCode
"
/>
</div>
<file-list
v-model:files="form.files"
:removeEnable="true"
/>
</el-form-item>
</el-form>
<footer class="flex end">
<el-button
type="primary"
size="large"
@click="submit"
:disabled="loading"
>提交上传</el-button
>
</footer>
</template>
<template v-else>
<el-result
icon="success"
title="提交成功"
sub-title="请关闭浏览器插件"
></el-result>
</template>
</div>
</div>
</template>
<script lang="ts" setup>
import { BASE_PATH } from "@/api/request";
import {
InspectCase,
IsRectify,
AccountabilityTarget,
BlameType,
ProblemSources,
PersonType,
HostLevel,
SubjectiveAspect,
} from "@/enums/dictEnums";
import feedback from "@/utils/feedback";
import {
getNegativeDetailsByOuter,
verifySubmitNegative,
} from "@/api/work/negative";
import useCatchStore from "@/stores/modules/catch";
import { setToken } from "@/utils/token";
const route = useRoute();
const router = useRouter();
if (!route.query.outerId || !route.query.token) {
router.push("/401");
}
const id = route.query.outerId;
setToken(route.query.token)
const catchSotre = useCatchStore();
const dict = catchSotre.getDicts([
"inspectCase",
"isRectify",
"personType",
"superviseMeasures",
"subjectiveAspect",
"responsibilityType",
"handleResult",
"protectRights",
"accountabilityTarget",
"leadResponsibilityType",
]);
const negative = ref({});
const loading = ref(false);
const form = ref({
blames: [],
});
provide("negative", negative);
async function getDetails() {
loading.value = true;
const data = await getNegativeDetailsByOuter(id);
negative.value = data.negative;
loading.value = false;
}
onMounted(async () => {
document.body.style.fontSize = '14px'
await getDetails();
getFormData();
});
function getFormData() {
form.value = {
involveDepartId: negative.value.involveDepartId,
caseNumber: negative.value.caseNumber,
checkStatus: negative.value.checkStatus,
checkStatusName: negative.value.checkStatusName,
isRectifyName: negative.value.isRectifyName,
isRectifyCode: negative.value.isRectifyCode,
checkStatusDesc: negative.value.checkStatusDesc,
rectifyDesc: negative.value.rectifyDesc,
rectifyRestrictionDays: negative.value.rectifyRestrictionDays,
accountabilityTarget: "",
blames: negative.value.blames || [],
blameLeaders: negative.value.blameLeaders,
files: negative.value.files || [],
};
if (negative.value.accountabilityTarget != undefined) {
form.value.accountabilityTarget = negative.value.accountabilityTarget;
return;
}
if (negative.value.problemSourcesCode === ProblemSources.JWDC) {
form.value.accountabilityTarget = AccountabilityTarget.PERSONAL;
}
}
function handleAddPersonal() {
form.value.blames.push({
type: BlameType.PERSONAL,
problems: [{}],
});
}
function handleRemovePersonal(item) {
form.value.blames.splice(form.value.blames.indexOf(item), 1);
}
function handleAddProblem(blame) {
blame.problems.push({});
}
function handleAddBlameLeader() {
form.value.blameLeaders.push({
blameIdCodes: [],
});
}
function handleRemoveBlameLeader(index) {
form.value.blameLeaders.splice(index, 1);
}
// 更改追责对象
watch(
() => form.value.accountabilityTarget,
(val) => {
if (val === AccountabilityTarget.PERSONAL) {
if (
form.value.blames.filter(
(item) => item.type === BlameType.PERSONAL
).length === 0
) {
handleAddPersonal();
}
form.value.blames.forEach((item) => {
if (item.type === BlameType.DEPARTMENT) {
handleRemovePersonal(item);
}
});
}
if (val === AccountabilityTarget.DEPARTMENT) {
form.value.blames.forEach((item) => {
if (item.type === BlameType.PERSONAL) {
handleRemovePersonal(item);
}
});
if (
form.value.blames.filter(
(item) => item.type === BlameType.DEPARTMENT
).length === 0
) {
form.value.blames.push({
type: BlameType.DEPARTMENT,
problems: [{}],
});
}
form.value.blameLeaders = [];
}
if (val === AccountabilityTarget.PERSONAL_AND_DEPARTMENT) {
if (
form.value.blames.filter(
(item) => item.type === BlameType.PERSONAL
).length === 0
) {
handleAddPersonal();
}
if (
form.value.blames.filter(
(item) => item.type === BlameType.DEPARTMENT
).length === 0
) {
form.value.blames.push({
type: BlameType.DEPARTMENT,
problems: [{}],
});
}
}
}
);
function handleChangeCheckStatus(val, item) {
form.value.checkStatusName = dict.inspectCase.filter(
(item) => item.dictValue === val
)[0].dictLabel;
if (
form.value.accountabilityTarget !== AccountabilityTarget.DEPARTMENT &&
form.value.blames.length === 0
) {
handleAddPersonal();
}
}
function handleChangePolice(police, item) {
item.blameName = police.name;
item.blameIdCode = police.idCode;
item.ivPersonTypeCode = police.personType;
}
function handleChangeSubjectiveAspect(val, item) {
if (val === SubjectiveAspect.OTHER) {
item.subjectiveAspectName = "";
return;
}
item.subjectiveAspectName = dict.subjectiveAspect.filter(
(item) => item.dictValue === val
)[0].dictLabel;
}
function handleChangeProblem(node, problem) {
if (node.level === 3) {
problem.threeLevelContent = node.label;
problem.oneLevelCode = node.parent.parent.key;
problem.oneLevelContent = node.parent.parent.label;
problem.twoLevelCode = node.parent.key;
problem.twoLevelContent = node.parent.label;
}
}
function handleCheckboxChange(blameLeader, bool, val) {
if (bool) {
blameLeader.blameIdCodes.push(val);
} else {
blameLeader.blameIdCodes.splice(
blameLeader.blameIdCodes.indexOf(val),
1
);
}
}
const formRef = ref(null);
async function validate() {
const flag = await formRef.value.validate();
if (flag) {
if (
form.value.accountabilityTarget !== AccountabilityTarget.DEPARTMENT
) {
let arr = [];
form.value.blameLeaders.forEach((item) => {
arr = arr.concat(item.blameIdCodes);
});
const blame = form.value.blames.filter(
(item) =>
item.type === BlameType.PERSONAL &&
!arr.includes(item.blameIdCode)
);
if (blame.length) {
throw new Error(
`涉及人员【${blame
.map((item) => item.blameName)
.join("、")}】未关联领导`
);
}
}
return form.value;
}
}
const step = ref(0);
async function submit() {
try {
await validate();
} catch (e) {
feedback.msgWarning("请检查输入项");
throw e;
}
loading.value = true;
await verifySubmitNegative(negative.value.id, form.value);
loading.value = false;
step.value = 1;
}
</script>
<style lang="scss" scoped>
.el-form-item .el-form-item {
margin-bottom: 18px;
}
:deep() {
.el-form-item--label-right .el-form-item__label {
text-align: right;
line-height: 32px;
margin-bottom: 0;
}
}
p {
margin: 0;
line-height: 1.4;
}
.wrapper {
overflow: auto;
height: 100vh;
}
.container {
margin: auto;
}
.message {
padding: 20px;
background: #f2f3ff;
border-radius: 8px;
border: 1px solid #929fff;
margin-bottom: 35px;
}
.message-title {
font-size: 16px;
margin-bottom: 4px;
}
</style>