Browse Source

fit: 模型超市-新增/编辑模型时,新增指定下发单位、新增业务类型、涉嫌问题、涉及警种、问题类型的选项;

fit: 人工核验-任务下发,新增指定下发单位、新增业务类型、涉嫌问题、涉及警种、问题类型的选项;
fit: 问题流程办理新增“修改核查内容”功能,二级机构、市局专班可对派出所提交情况进行修改
main
wxc 1 year ago
parent
commit
d4088fbf3e
  1. 12
      src/components/negative/dialog.vue
  2. 171
      src/views/sensitivePerception/Model.vue
  3. 121
      src/views/sensitivePerception/ModelClueManual.vue

12
src/components/negative/dialog.vue

@ -110,7 +110,7 @@
v-if=" v-if="
components.indexOf( components.indexOf(
'negative-verify-description' 'negative-verify-description'
) > -1 ) > -1 && !verifyEditFlag
" "
> >
<negative-verify-description /> <negative-verify-description />
@ -126,7 +126,7 @@
</template> </template>
<template <template
v-if=" v-if="
components.indexOf('negative-verify') > -1 components.indexOf('negative-verify') > -1 || verifyEditFlag
" "
> >
<negative-verify <negative-verify
@ -310,7 +310,12 @@ const setActionItemRef = (actionKey, el) => {
const confirmationCompletionRef = ref(null); const confirmationCompletionRef = ref(null);
const activeAction = ref({}); const activeAction = ref({});
const verifyEditFlag = ref(false)
async function handleExecute(action, data) { async function handleExecute(action, data) {
if (action.actionKey === 'update_verify' && !verifyEditFlag.value) {
verifyEditFlag.value = true;
return
}
if (action.validateForm) { if (action.validateForm) {
if (action.actionKey !== FlowActionEnum.SAVE) { if (action.actionKey !== FlowActionEnum.SAVE) {
try { try {
@ -342,6 +347,9 @@ async function handleExecute(action, data) {
return; return;
} }
loading.value = true; loading.value = true;
if (action.actionKey === 'update_verify') {
verifyEditFlag.value = false;
}
await negativeExecute(props.id, { await negativeExecute(props.id, {
workId: work?.value.workId, workId: work?.value.workId,
actionKey: action.actionKey, actionKey: action.actionKey,

171
src/views/sensitivePerception/Model.vue

@ -141,61 +141,45 @@
> >
<el-form label-width="120" ref="formRef" :model="form"> <el-form label-width="120" ref="formRef" :model="form">
<el-form-item <el-form-item
label="模型类型" label="模型名称"
prop="classId" prop="modelName"
:rules="{ :rules="{
required: true, required: true,
message: '请选择模型类型', message: '请输入模型名称',
trigger: ['blur'],
}" }"
> >
<el-select v-model="form.classId" style="width: 340px"> <el-input
<el-option placeholder="请输入模型名称"
v-for="item in classes" style="width: 340px"
:key="item.id" v-model="form.modelName"
:label="item.name"
:value="item.id"
/> />
</el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="风险因素" label="模型图标"
prop="icon"
:rules="{ :rules="{
required: true, required: true,
message: '请选择风险因素', message: '请选择模型图标',
}" }"
prop="riskScoreRuleId"
v-if="form.classId === GRJDBLFX_CLASS_ID"
> >
<el-tree-select <model-icon-picker v-model="form.icon" />
class="flex-1"
v-model="form.riskScoreRuleId"
:data="treeOptions"
clearable
node-key="id"
:props="{
label: 'riskName',
}"
placeholder="请选择风险因素"
filterable
style="width: 340px"
/>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="模型名称" label="模型描述"
prop="modelName" prop="remarks"
:rules="{ :rules="{
required: true, required: true,
message: '请输入模型名称', message: '请输入模型描述',
trigger: ['blur'],
}" }"
> >
<el-input <el-input
placeholder="请输入模型名称" type="textarea"
style="width: 340px" :autosize="{ minRows: 4 }"
v-model="form.modelName" v-model="form.remarks"
placeholder="请输入"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="建模方式" label="建模方式"
prop="modelingMethod" prop="modelingMethod"
@ -214,21 +198,44 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="模型图标" label="模型类型"
prop="icon" prop="classId"
:rules="{ :rules="{
required: true, required: true,
message: '请选择模型图标', message: '请选择模型类型',
}" }"
> >
<model-icon-picker v-model="form.icon" /> <el-select v-model="form.classId" style="width: 340px">
<el-option
v-for="item in classes"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="数据类型" label="风险因素"
prop="modelDataType" :rules="{
required: true,
message: '请选择风险因素',
}"
prop="riskScoreRuleId"
v-if="form.classId === GRJDBLFX_CLASS_ID" v-if="form.classId === GRJDBLFX_CLASS_ID"
> >
<el-checkbox value="2" label="预警通知" /> <el-tree-select
class="flex-1"
v-model="form.riskScoreRuleId"
:data="treeOptions"
clearable
node-key="id"
:props="{
label: 'riskName',
}"
placeholder="请选择风险因素"
filterable
style="width: 340px"
/>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="数据类型" label="数据类型"
@ -358,6 +365,19 @@
</el-form-item> </el-form-item>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item
label="指定办理单位"
prop="departId"
>
<div class="flex gap">
<div style="width: 280px">
<depart-tree-select v-model="form.handleDepartId" />
</div>
<div class="tips mt-10">
<p>指定具体办理单位 指将问题分派给哪个单位办理</p>
</div>
</div>
</el-form-item>
<el-form-item <el-form-item
label="业务类别" label="业务类别"
prop="businessTypeCode" prop="businessTypeCode"
@ -367,7 +387,10 @@
trigger: ['blur'], trigger: ['blur'],
}" }"
> >
<el-select v-model="form.businessTypeCode" style="width: 280px"> <el-select
v-model="form.businessTypeCode"
style="width: 280px"
>
<el-option <el-option
v-for="item in dict.businessType" v-for="item in dict.businessType"
:key="item.id" :key="item.id"
@ -414,9 +437,31 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="问题类型" prop=""> <div class="flex center mb-12">
<problem-type-select /> <el-button
@click="handleAddProblem()"
plain
type="primary"
size="small"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
添加问题
</el-button>
</div>
<el-form-item label="问题类型" prop="" v-for="(item, index) in form.problems" :key="index">
<div class="flex v-center">
<problem-type-select v-model="item.threeLevelCode" />
<el-button plain type="danger" size="small" class="ml-20" @click="handleRemoveProblem(index)">
<template #icon>
<icon name="el-icon-Delete" />
</template>
删除问题
</el-button>
</div>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="办理时限" label="办理时限"
prop="timeLimit" prop="timeLimit"
@ -476,21 +521,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</template> </template>
<el-form-item
label="模型描述"
prop="remarks"
:rules="{
required: true,
message: '请输入模型描述',
}"
>
<el-input
type="textarea"
:autosize="{ minRows: 4 }"
v-model="form.remarks"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="提示"> <el-form-item label="提示">
<div style="line-height: 1.4"> <div style="line-height: 1.4">
预警数据将以任务形式分批下发至相关单位处理每次下发的预警数据都会在任务分发模块中生成一条记录任务名称将按照模型名称_下发时间的格式命名例如取保候审期间未按要求传讯犯罪嫌疑人_20240919 预警数据将以任务形式分批下发至相关单位处理每次下发的预警数据都会在任务分发模块中生成一条记录任务名称将按照模型名称_下发时间的格式命名例如取保候审期间未按要求传讯犯罪嫌疑人_20240919
@ -707,6 +738,9 @@ const dict = catchStore.getDicts([
"approvalFlow", "approvalFlow",
"modelingMethod", "modelingMethod",
"modelDataType", "modelDataType",
"businessType",
"suspectProblem",
"policeType",
]); ]);
// //
@ -755,6 +789,7 @@ const show = ref(false);
const mode = ref("add"); const mode = ref("add");
const form = ref({ const form = ref({
distributionMethod: "1", distributionMethod: "1",
problems: []
}); });
watch(mode, (val) => { watch(mode, (val) => {
@ -764,7 +799,10 @@ watch(mode, (val) => {
}); });
function initForm() { function initForm() {
form.value = { distributionMethod: "1" }; form.value = {
distributionMethod: "1",
problems: []
};
} }
const formRef = ref(null); const formRef = ref(null);
@ -777,6 +815,15 @@ function handleEdit() {
show.value = true; show.value = true;
mode.value = "edit"; mode.value = "edit";
form.value = { ...activeModel.value }; form.value = { ...activeModel.value };
form.value.problems = []
}
function handleAddProblem() {
form.value.problems.push({})
}
function handleRemoveProblem(index) {
form.value.problems.splice(index, 1)
} }
async function handleSubmit() { async function handleSubmit() {
@ -856,6 +903,8 @@ function handleSelectInvolveProblem(vals) {
}; };
}); });
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.menu { .menu {

121
src/views/sensitivePerception/ModelClueManual.vue

@ -290,6 +290,107 @@
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
<el-form-item label="指定办理单位" prop="departId">
<div class="flex gap">
<div style="width: 280px">
<depart-tree-select v-model="form.handleDepartId" />
</div>
<div class="tips mt-10">
<p>指定具体办理单位 指将问题分派给哪个单位办理</p>
</div>
</div>
</el-form-item>
<el-form-item
label="业务类别"
prop="businessTypeCode"
:rules="{
required: true,
message: '请选择业务类别',
trigger: ['blur'],
}"
>
<el-select v-model="form.businessTypeCode" style="width: 280px">
<el-option
v-for="item in dict.businessType"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item
label="涉嫌问题"
prop="involveProblem"
:rules="{
required: true,
message: '请选择涉嫌问题',
trigger: ['blur'],
}"
>
<el-select
v-model="form.involveProblemCode"
multiple
@change="handleSelectInvolveProblem"
clearable
style="width: 280px"
>
<el-option
v-for="item in dict.suspectProblem"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="涉及警种" prop="policeType">
<el-select
v-model="form.policeType"
clearable
style="width: 280px"
>
<el-option
v-for="item in dict.policeType"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
<div class="flex center mb-12">
<el-button
@click="handleAddProblem()"
plain
type="primary"
size="small"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
添加问题
</el-button>
</div>
<el-form-item
label="问题类型"
prop=""
v-for="(item, index) in form.problems"
:key="index"
>
<div class="flex v-center">
<problem-type-select v-model="item.threeLevelCode" />
<el-button
plain
type="danger"
size="small"
class="ml-20"
@click="handleRemoveProblem(index)"
>
<template #icon>
<icon name="el-icon-Delete" />
</template>
删除问题
</el-button>
</div>
</el-form-item>
<el-form-item <el-form-item
label="办理时限" label="办理时限"
prop="timeLimit" prop="timeLimit"
@ -305,6 +406,7 @@
v-model:maxExtensionDuration="form.maxExtensionDuration" v-model:maxExtensionDuration="form.maxExtensionDuration"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="下发流程" label="下发流程"
prop="distributionFlow" prop="distributionFlow"
@ -410,6 +512,9 @@ const dict = catchStore.getDicts([
"timeLimit", "timeLimit",
"approvalFlow", "approvalFlow",
"distributionFlow", "distributionFlow",
"businessType",
"suspectProblem",
"policeType",
]); ]);
const query = ref({ const query = ref({
@ -488,7 +593,7 @@ const filterManualList = computed(() => {
}); });
const modelOptions = computed(() => { const modelOptions = computed(() => {
const items = filterManualList.value.map((item) => { const items = manualList.value.map((item) => {
return { return {
value: item.modelId, value: item.modelId,
label: item.modelName, label: item.modelName,
@ -515,10 +620,19 @@ function handleShowDistributeDialog() {
const form = ref({ const form = ref({
modelClues: [], modelClues: [],
thingFiles: [], thingFiles: [],
problems: []
}); });
const formRef = ref(null); const formRef = ref(null);
const distributeShow = ref(false); const distributeShow = ref(false);
function handleAddProblem() {
form.value.problems.push({})
}
function handleRemoveProblem(index) {
form.value.problems.splice(index, 1)
}
async function handleSubmitManuelModelClueTask() { async function handleSubmitManuelModelClueTask() {
await formRef.value.validate(); await formRef.value.validate();
form.value.modelClues = filterManualList.value; form.value.modelClues = filterManualList.value;
@ -527,6 +641,7 @@ async function handleSubmitManuelModelClueTask() {
form.value = { form.value = {
modelClues: [], modelClues: [],
thingFiles: [], thingFiles: [],
problems: []
}; };
distributeShow.value = false; distributeShow.value = false;
manualShow.value = false; manualShow.value = false;
@ -551,7 +666,9 @@ const tableRef = ref();
function handleBathJoin() { function handleBathJoin() {
const rows = tableRef.value.getSelectionRows(); const rows = tableRef.value.getSelectionRows();
rows.forEach((row) => { rows.forEach((row) => {
if (manualList.value.filter((item) => item.id === row.id).length === 0) { if (
manualList.value.filter((item) => item.id === row.id).length === 0
) {
manualList.value.push(row); manualList.value.push(row);
} }
}); });

Loading…
Cancel
Save