Browse Source

feat:所有信息到negative表

feature/tsjb-1.0
parent
commit
118cba3370
  1. 312
      src/components/data/complaintformdialog.vue
  2. 192
      src/views/data/ComplaintCollection.vue

312
src/components/data/complaintformdialog.vue

@ -9,7 +9,7 @@
<el-scrollbar max-height="76vh">
<el-form
ref="formRef"
:model="model"
:model="formData"
:label-width="150"
class="form-layout"
style="min-height: 66vh"
@ -23,7 +23,7 @@
<el-col :span="12">
<el-form-item label="来源" prop="sourcePath">
<el-cascader
v-model="model.sourcePath"
v-model="formData.sourcePath"
:options="dict.sourceTableAndLevel"
:props="{ emitPath: true, checkStrictly: false }"
clearable
@ -38,7 +38,7 @@
<el-col :span="12">
<el-form-item label="业务类别" prop="handleMethod">
<el-select
v-model="model.businessTypeCode"
v-model="formData.businessTypeCode"
placeholder="业务类别"
clearable
>
@ -59,14 +59,14 @@
<el-col :span="12">
<el-form-item label="编号" prop="originId">
<el-input
v-model="model.originId"
:placeholder="model.originIdSkip ? '无' : '请输入编号'"
:disabled="mode === 'edit' || model.originIdSkip"
v-model="formData.originId"
:placeholder="formData.originIdSkip ? '无' : '请输入编号'"
:disabled="mode === 'edit' || formData.originIdSkip"
>
<template #append>
<el-checkbox
v-model="model.originIdSkip"
@change="(v) => v && (model.originId = '')"
v-model="formData.originIdSkip"
@change="(v) => v && (formData.originId = '')"
:disabled="mode=== 'edit'"
>
@ -79,7 +79,7 @@
<el-col :span="12">
<el-form-item label="登记/受理时间" prop="discoveryTime">
<el-date-picker
v-model="model.discoveryTime"
v-model="formData.discoveryTime"
type="datetime"
placeholder="请选择"
value-format="YYYY-MM-DDTHH:mm:ss"
@ -95,15 +95,15 @@
<el-col :span="12">
<el-form-item label="来件人姓名" prop="responderName">
<el-input
v-model="model.responderName"
:placeholder="model.responderNameSkip ? '无' : '请输入来件人姓名'"
:disabled="model.responderNameSkip"
v-model="formData.responderName"
:placeholder="formData.responderNameSkip ? '无' : '请输入来件人姓名'"
:disabled="formData.responderNameSkip"
@blur="onAutoCheckDuplicate"
>
<template #append>
<el-checkbox
v-model="model.responderNameSkip"
@change="(v) => v && (model.responderName = '')"
v-model="formData.responderNameSkip"
@change="(v) => v && (formData.responderName = '')"
>
</el-checkbox>
@ -116,15 +116,15 @@
<div style="display: flex; align-items: flex-start; gap: 8px;">
<el-form-item label="身份证号码" prop="responderIdCode" style="flex: 1; margin-bottom: 0;">
<el-input
v-model="model.responderIdCode"
:placeholder="model.responderIdCodeSkip ? '无' : '请输入身份证号码'"
:disabled="model.responderIdCodeSkip"
v-model="formData.responderIdCode"
:placeholder="formData.responderIdCodeSkip ? '无' : '请输入身份证号码'"
:disabled="formData.responderIdCodeSkip"
@blur="onAutoCheckDuplicate"
>
<template #append>
<el-checkbox
v-model="model.responderIdCodeSkip"
@change="(v) => v && (model.responderIdCode = '')"
v-model="formData.responderIdCodeSkip"
@change="(v) => v && (formData.responderIdCode = '')"
>
</el-checkbox>
@ -159,15 +159,15 @@
<el-col :span="12">
<el-form-item label="联系电话" prop="responderPhone">
<el-input
v-model="model.responderPhone"
:placeholder="model.responderPhoneSkip ? '无' : '请输入联系电话'"
:disabled="model.responderPhoneSkip"
v-model="formData.responderPhone"
:placeholder="formData.responderPhoneSkip ? '无' : '请输入联系电话'"
:disabled="formData.responderPhoneSkip"
@blur="onAutoCheckDuplicate"
>
<template #append>
<el-checkbox
v-model="model.responderPhoneSkip"
@change="(v) => v && (model.responderPhone = '')"
v-model="formData.responderPhoneSkip"
@change="(v) => v && (formData.responderPhone = '')"
>
</el-checkbox>
@ -179,9 +179,9 @@
<el-col :span="12">
<el-form-item label="被投诉二级机构" prop="secondDepartId" >
<depart-tree-select
v-model="model.secondDepartId"
v-model="formData.secondDepartId"
:check-strictly="true"
@node-click="(row) => (model.secondDepartName = row.shortName)"
@node-click="(row) => (formData.secondDepartName = row.shortName)"
/>
</el-form-item>
</el-col>
@ -191,7 +191,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="来件内容" prop="thingDesc">
<el-input v-model="model.thingDesc" type="textarea" :autosize="{ minRows: 4 }" />
<el-input v-model="formData.thingDesc" type="textarea" :autosize="{ minRows: 4 }" />
</el-form-item>
</el-col>
</el-row>
@ -200,7 +200,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="涉嫌问题" prop="involveProblemIdList">
<el-select v-model="model.involveProblemIdList" multiple clearable style="width: 100%">
<el-select v-model="formData.involveProblemIdList" multiple clearable style="width: 100%">
<el-option
v-for="item in dict.suspectProblem"
:key="item.dictValue"
@ -208,7 +208,7 @@
:label="item.dictLabel"
>
<!-- 复选框展示 -->
<el-checkbox :model-value="(model.involveProblemIdList || []).includes(item.dictValue)">
<el-checkbox :model-value="(formData.involveProblemIdList || []).includes(item.dictValue)">
{{ item.dictLabel }}
</el-checkbox>
</el-option>
@ -218,7 +218,7 @@
<el-col :span="12">
<el-form-item label="是否重复件" prop="repeatt">
<el-radio-group v-model="model.repeatt" clearable>
<el-radio-group v-model="formData.repeatt" clearable>
<el-radio v-for="item in dict.yesNo" :key="item.id" :label="item.dictValue">
{{ item.dictLabel }}
</el-radio>
@ -231,7 +231,7 @@
<el-row>
<el-col :span="18">
<el-form-item label="标签" prop="tags">
<el-checkbox-group v-model="model.tags">
<el-checkbox-group v-model="formData.tags">
<el-checkbox v-for="item in dict.sfssTags" :key="item.id" :label="item.dictValue">
{{ item.dictLabel }}
</el-checkbox>
@ -244,7 +244,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="办理方式" prop="handleMethod">
<el-radio-group v-model="model.handleMethod" clearable>
<el-radio-group v-model="formData.handleMethod" clearable>
<el-radio v-for="item in dict.handleMethodType" :key="item.id" :label="item.dictValue">
{{ item.dictLabel }}
</el-radio>
@ -255,7 +255,7 @@
<el-form-item v-if="mode === 'add'" label="附件" prop="thingFiles">
<file-upload
v-model:files="model.thingFiles"
v-model:files="formData.thingFiles"
tips="为便于“办理单位”更全面了解问题详情,请上传相关附件,如现场督察、数字督察等相关照片、视频及其他佐证材料。"
/>
</el-form-item>
@ -266,24 +266,24 @@
<h2 v-if="mode === 'add'">办理单位</h2>
<div v-if="mode === 'add'" class="add-negation-container">
<el-form-item label="主办层级" prop="hostLevel" :rules="{ required: true, message: '请选择主办层级', trigger: ['blur'] }">
<el-select style="width: 280px" v-model="model.hostLevel" @change="handleChangeHostLevel">
<el-select style="width: 280px" v-model="formData.hostLevel" @change="handleChangeHostLevel">
<el-option v-for="item in dict.hostLevel" :key="item.id" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
<div class="tips mt-10">
<p>如主办层级 市局主办 则由<span :data-active="model.hostLevel === HostLevel.FIRST">督察支队</span>办理</p>
<p>如主办层级为 二级机构主办则由<span :data-active="model.hostLevel === HostLevel.SECOND">督察部门</span>办理可进一步下发</p>
<p>如主办层级为 三级机构主办则由<span :data-active="model.hostLevel === HostLevel.THREE">所队</span>办理</p>
<p>如主办层级 市局主办 则由<span :data-active="formData.hostLevel === HostLevel.FIRST">督察支队</span>办理</p>
<p>如主办层级为 二级机构主办则由<span :data-active="formData.hostLevel === HostLevel.SECOND">督察部门</span>办理可进一步下发</p>
<p>如主办层级为 三级机构主办则由<span :data-active="formData.hostLevel === HostLevel.THREE">所队</span>办理</p>
</div>
</el-form-item>
<el-form-item label="指定办理单位" prop="departId" :rules="{ required: true, message: '请选择办理单位', trigger: ['blur'] }">
<div class="flex gap">
<div style="width: 280px">
<template v-if="model.hostLevel === HostLevel.THREE">
<depart-tree-select v-model="model.departId" v-loading="departLoading" />
<template v-if="formData.hostLevel === HostLevel.THREE">
<depart-tree-select v-model="formData.departId" v-loading="departLoading" />
</template>
<el-tree-select v-else :data="departs" :props="{ label: 'shortName', value: 'id' }" node-key="id" clearable filterable v-model="model.departId" @node-click="handleSelectDepart" check-strictly style="width: 280px" v-loading="departLoading" />
<el-tree-select v-else :data="departs" :props="{ label: 'shortName', value: 'id' }" node-key="id" clearable filterable v-model="formData.departId" @node-click="handleSelectDepart" check-strictly style="width: 280px" v-loading="departLoading" />
</div>
<el-button type="primary" @click="handleLinkDepart" text v-if="model.hostLevel !== HostLevel.FIRST">关联问题涉及单位</el-button>
<el-button type="primary" @click="handleLinkDepart" text v-if="formData.hostLevel !== HostLevel.FIRST">关联问题涉及单位</el-button>
</div>
<div class="tips mt-10">
<p>问题涉及单位 指与该问题相关的单位</p>
@ -302,7 +302,7 @@
<h2 v-if="mode === 'add'">办理时限</h2>
<div v-if="mode === 'add'" class="add-negation-container">
<el-form-item label="办理时限" prop="timeLimit" :rules="{ required: true, message: '请选择办理时限', trigger: ['blur'] }">
<time-limit-select v-model="model.timeLimit" v-model:maxSignDuration="model.maxSignDuration" v-model:maxHandleDuration="model.maxHandleDuration" v-model:maxExtensionDuration="model.maxExtensionDuration" />
<time-limit-select v-model="formData.timeLimit" v-model:maxSignDuration="formData.maxSignDuration" v-model:maxHandleDuration="formData.maxHandleDuration" v-model:maxExtensionDuration="formData.maxExtensionDuration" />
</el-form-item>
</div>
@ -310,10 +310,10 @@
<h2 v-if="mode === 'add'">审批流程</h2>
<div v-if="mode === 'add'" class="add-negation-container">
<el-form-item label="审批流程" prop="approvalFlow" :rules="{ required: true, message: '请选择审批流程', trigger: ['blur'] }">
<el-radio-group v-model="model.approvalFlow" v-if="userStore.user.roleCodes.includes('admin_1')">
<el-radio-group v-model="formData.approvalFlow" v-if="userStore.user.roleCodes.includes('admin_1')">
<el-radio v-for="item in dict.approvalFlow" :key="item.dictCode" :value="item.dictValue">{{ item.dictLabel }}{{ item.remark ? `(${item.remark})` : "" }}</el-radio>
</el-radio-group>
<el-radio-group v-model="model.approvalFlow" v-else>
<el-radio-group v-model="formData.approvalFlow" v-else>
<el-radio value="2">二级审批(所队一>二级机构)</el-radio>
</el-radio-group>
<div class="tips mt-10">
@ -339,20 +339,19 @@
v-model="duplicateDrawerVisible"
:dict="dict"
:query="{
responderIdCode: model.responderIdCode,
responderName: model.responderName,
responderPhone: model.responderPhone
responderIdCode: formData.responderIdCode,
responderName: formData.responderName,
responderPhone: formData.responderPhone
}"
:requestFn="maileRepeatt"
detailIdKey="complaintId"
/>
</template>
<script setup>
import {computed, ref, watch} from "vue";
import {maileRepeatt, getComplaintCollectionDetail, updateComplaintCollection} from "@/api/data/complaintCollection.ts";
import {maileRepeatt, getComplaintCollectionDetail, updateComplaintCollection, addComplaintCollection} from "@/api/data/complaintCollection.ts";
import dayjs from "dayjs";
import feedback from "@/utils/feedback.ts";
import DuplicateDrawerWithDetail from "@/views/data/DuplicateDrawerWithDetail.vue";
@ -361,6 +360,71 @@ import {secondList, listByFirstHost} from "@/api/system/depart";
import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore();
//
const formData = ref(createEmptyForm());
function createEmptyForm() {
return {
//
sourcePath: [],
sourceTable: '',
sourceTableSubOne: '',
//
originId: '',
originIdSkip: false,
//
discoveryTime: '',
//
responderName: '',
responderNameSkip: false,
responderIdCode: '',
responderIdCodeSkip: false,
responderPhone: '',
responderPhoneSkip: false,
//
secondDepartId: '',
secondDepartName: '',
//
thingDesc: '',
involveProblemIdList: [],
repeatt: '',
handleMethod: '',
//
tags: [],
businessTypeCode: '',
businessTypeName: '',
//
thingFiles: [],
//
hostLevel: '3',
departId: '',
departName: '',
timeLimit: '',
maxSignDuration: null,
maxHandleDuration: null,
maxExtensionDuration: null,
approvalFlow: '',
// id
id: '',
negativeId: '',
};
}
//
const rules = {
sourcePath: [
{required: true, message: "请选择来源(一级/二级)", trigger: "change"},
],
discoveryTime: [{required: true, message: '请选择受理时间', trigger: 'change'}],
secondDepartId: [{required: true, message: '请选择被投诉二级机构', trigger: 'change'}],
thingDesc: [{required: true, message: '请输入来件内容', trigger: 'blur'}],
involveProblemIdList: [{required: true, message: '请选择涉嫌问题', trigger: 'change'}],
repeatt: [{required: true, message: '请选择是否重复件', trigger: 'change'}],
hostLevel: [{required: true, message: '请选择主办层级', trigger: 'change'}],
departId: [{required: true, message: '请选择办理单位', trigger: 'change'}],
timeLimit: [{required: true, message: '请选择办理时限', trigger: 'change'}],
approvalFlow: [{required: true, message: '请选择审批流程', trigger: 'change'}],
};
// 1. computed storeDict
const storeDict = computed(() =>
@ -427,14 +491,12 @@ const userStore = useUserStore();
const props = defineProps({
modelValue: Boolean,
mode: { type: String, default: "add" },
model: { type: Object, required: true },
rules: { type: Object, required: true },
id: { type: String, default: "" },
loading: { type: Boolean, default: false },
negativeId: { type: String, default: "" },
loading: { type: Boolean, default: false },
});
const emit = defineEmits(["update:modelValue", "submit", "updateSuccess"]);
const emit = defineEmits(["update:modelValue", "updateSuccess"]);
const formRef = ref();
const submitLoading = ref(false);
@ -448,10 +510,8 @@ watch(
() => visibleProxy.value,
async (v) => {
if (v) {
props.model.originIdSkip = false
props.model.responderNameSkip = false
props.model.responderIdCodeSkip = false
props.model.responderPhoneSkip = false
//
formData.value = createEmptyForm();
duplicateDrawerVisible.value = false
duplicateLoading.value = false
@ -468,35 +528,34 @@ watch(
const res = await getComplaintCollectionDetail({ id: props.id, negativeId: props.negativeId });
const r = res?.data ?? res ?? {};
props.model.id = r.id ?? '';
props.model.sourceTable = r.sourceTable ?? '';
props.model.sourceTableSubOne = r.sourceTableSubOne ?? '';
props.model.sourcePath = [r.sourceTable, r.sourceTableSubOne].filter(Boolean);
props.model.originId = r.originId ?? '';
props.model.discoveryTime = r.discoveryTime ?? '';
props.model.responderName = r.responderName ?? '';
props.model.responderIdCode = r.responderIdCode ?? '';
props.model.responderPhone = r.responderPhone ?? '';
props.model.secondDepartId = r.secondDepartId ?? '';
props.model.secondDepartName = r.secondDepartName ?? '';
props.model.thingDesc = r.thingDesc ?? '';
props.model.repeatt = r.repeatt ?? '';
props.model.leadApproval = r.leadApproval ?? '';
props.model.handleMethod = r.handleMethod ?? '';
props.model.involveProblemIdList = splitToArray(r.involveProblemIdList ?? r.involveProblem);
props.model.tags = splitToArray(r.tags ?? r.tag);
props.model.businessTypeName = r.businessTypeName ?? '';
props.model.businessTypeCode = r.businessTypeCode ?? '';
props.model.thingFiles = normalizeThingFiles(r.thingFiles);
props.model.hostLevel = r.hostLevel ?? '3';
props.model.departId = r.departId ?? '';
props.model.departName = r.departName ?? '';
props.model.timeLimit = r.timeLimit ?? '';
props.model.maxSignDuration = r.maxSignDuration ?? null;
props.model.maxHandleDuration = r.maxHandleDuration ?? null;
props.model.maxExtensionDuration = r.maxExtensionDuration ?? null;
props.model.approvalFlow = r.approvalFlow ?? '';
props.model.negativeId = r.negativeId ?? '';
formData.value.id = r.id ?? '';
formData.value.sourceTable = r.sourceTable ?? '';
formData.value.sourceTableSubOne = r.sourceTableSubOne ?? '';
formData.value.sourcePath = [r.sourceTable, r.sourceTableSubOne].filter(Boolean);
formData.value.originId = r.originId ?? '';
formData.value.discoveryTime = r.discoveryTime ?? '';
formData.value.responderName = r.responderName ?? '';
formData.value.responderIdCode = r.responderIdCode ?? '';
formData.value.responderPhone = r.responderPhone ?? '';
formData.value.secondDepartId = r.secondDepartId ?? '';
formData.value.secondDepartName = r.secondDepartName ?? '';
formData.value.thingDesc = r.thingDesc ?? '';
formData.value.repeatt = r.repeatt ?? '';
formData.value.handleMethod = r.handleMethod ?? '';
formData.value.involveProblemIdList = splitToArray(r.involveProblemIdList ?? r.involveProblem);
formData.value.tags = splitToArray(r.tags ?? r.tag);
formData.value.businessTypeName = r.businessTypeName ?? '';
formData.value.businessTypeCode = r.businessTypeCode ?? '';
formData.value.thingFiles = normalizeThingFiles(r.thingFiles);
formData.value.hostLevel = r.hostLevel ?? '3';
formData.value.departId = r.departId ?? '';
formData.value.departName = r.departName ?? '';
formData.value.timeLimit = r.timeLimit ?? '';
formData.value.maxSignDuration = r.maxSignDuration ?? null;
formData.value.maxHandleDuration = r.maxHandleDuration ?? null;
formData.value.maxExtensionDuration = r.maxExtensionDuration ?? null;
formData.value.approvalFlow = r.approvalFlow ?? '';
formData.value.negativeId = r.negativeId ?? '';
} catch (e) {
console.error("获取详情失败", e);
feedback.notifyError("获取数据失败,请重试");
@ -508,7 +567,7 @@ watch(
);
watch(
() => props.model.hostLevel,
() => formData.value.hostLevel,
() => {
getDeparts();
}
@ -517,12 +576,12 @@ watch(
const departs = ref([]);
const departLoading = ref(false);
async function getDeparts() {
if (!props.model.hostLevel) return;
if (!formData.value.hostLevel) return;
departLoading.value = true;
try {
if (props.model.hostLevel === HostLevel.FIRST) {
if (formData.value.hostLevel === HostLevel.FIRST) {
departs.value = await listByFirstHost();
} else if (props.model.hostLevel === HostLevel.SECOND) {
} else if (formData.value.hostLevel === HostLevel.SECOND) {
departs.value = await secondList();
} else {
departs.value = [];
@ -535,44 +594,44 @@ async function getDeparts() {
}
function handleSelectDepart(row) {
props.model.departName = row.shortName;
formData.value.departName = row.shortName;
}
function handleLinkDepart() {
if (props.model.hostLevel === HostLevel.SECOND) {
if (formData.value.hostLevel === HostLevel.SECOND) {
feedback.msgWarning("当前选择二级机构主办,指定办理单位请选择二级机构!");
return;
}
props.model.departId = props.model.secondDepartId;
props.model.departName = props.model.secondDepartName;
formData.value.departId = formData.value.secondDepartId;
formData.value.departName = formData.value.secondDepartName;
}
function handleChangeHostLevel(val) {
if (val === HostLevel.FIRST) {
props.model.departId = "";
formData.value.departId = "";
}
if (val === HostLevel.SECOND) {
props.model.approvalFlow = "3";
formData.value.approvalFlow = "3";
}
}
watch(
() => props.model.sourcePath,
() => formData.value.sourcePath,
(path) => {
if (!path || path.length === 0) return;
props.model.sourceTable = (path && path[0]) || "";
props.model.sourceTableSubOne = (path && path[1]) || "";
formData.value.sourceTable = (path && path[0]) || "";
formData.value.sourceTableSubOne = (path && path[1]) || "";
},
{ deep: true }
);
function fillFiledName() {
const code = props.model.businessTypeCode;
const hit = dict.value?.businessType?.find( //
const code = formData.value.businessTypeCode;
const hit = dict.value?.businessType?.find(
(d) => String(d.dictValue) === String(code)
);
props.model.businessTypeName = hit?.dictLabel || "";
formData.value.businessTypeName = hit?.dictLabel || "";
}
function splitToArray(val) {
@ -606,41 +665,26 @@ function normalizeThingFiles(val) {
async function onSubmit() {
fillFiledName();
// emit
// API
if (props.mode === 'add') {
emit("submit");
submitLoading.value = true;
try {
await addComplaintCollection({...formData.value});
feedback.msgSuccess("添加成功");
visibleProxy.value = false;
emit("updateSuccess");
} catch (e) {
console.error("添加失败", e);
} finally {
submitLoading.value = false;
}
return;
}
// API
submitLoading.value = true;
try {
const body = {
id: props.model.id,
sourceTable: props.model.sourceTable,
sourceTableSubOne: props.model.sourceTableSubOne,
originId: props.model.originId,
originIdSkip: props.model.originIdSkip,
discoveryTime: props.model.discoveryTime,
responderName: props.model.responderName,
responderNameSkip: props.model.responderNameSkip,
responderIdCode: props.model.responderIdCode,
responderIdCodeSkip: props.model.responderIdCodeSkip,
responderPhone: props.model.responderPhone,
responderPhoneSkip: props.model.responderPhoneSkip,
secondDepartId: props.model.secondDepartId,
secondDepartName: props.model.secondDepartName,
thingDesc: props.model.thingDesc,
repeatt: props.model.repeatt,
handleMethod: props.model.handleMethod,
involveProblemIdList: props.model.involveProblemIdList || [],
tags: props.model.tags || [],
businessTypeCode: props.model.businessTypeCode,
businessTypeName: props.model.businessTypeName,
negativeId: props.model.negativeId
};
await updateComplaintCollection(body);
await updateComplaintCollection({...formData.value});
feedback.msgSuccess("修改成功");
visibleProxy.value = false;
emit("updateSuccess");
@ -667,9 +711,9 @@ const duplicateHintVisible = ref(false)
const fetchDuplicate = async () => {
const body = {
responderIdCode: props.model.responderIdCode,
responderName: props.model.responderName,
responderPhone: props.model.responderPhone,
responderIdCode: formData.value.responderIdCode,
responderName: formData.value.responderName,
responderPhone: formData.value.responderPhone,
}
const res = await maileRepeatt(body)
@ -677,7 +721,7 @@ const fetchDuplicate = async () => {
}
const onAutoCheckDuplicate = async () => {
const { responderIdCode, responderName, responderPhone } = props.model
const { responderIdCode, responderName, responderPhone } = formData.value
if (!responderIdCode && !responderName && !responderPhone) {
duplicateCount.value = 0

192
src/views/data/ComplaintCollection.vue

@ -77,13 +77,18 @@
<el-col :span="6">
<el-form-item label="办理状态">
<el-select
v-model="query.status"
v-model="query.processingStatus"
clearable
multiple
collapse-tags
placeholder="办理状态"
>
<el-option value="0" label="未办结"/>
<el-option value="1" label="已办结"/>
<el-option value="2" label="强制终结"/>
<el-option
v-for="item in dict.processingStatus"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
@ -182,6 +187,7 @@
/>
</el-form-item>
</el-col>
<!-- 局长信箱专属搜索框 - 注释 by Claude
<el-col :span="6"
v-if=" query.sourceTableList?.length === 1 && String(query.sourceTableList[0]) === '23'">
<el-form-item label="信件状态">
@ -198,6 +204,7 @@
</el-select>
</el-form-item>
</el-col>
-->
</el-row>
</el-form>
<div class="mb-25 flex between">
@ -329,32 +336,31 @@
<el-table-column label="业务类别Code" width="100" prop="businessTypeCode" v-if="false"/>
<el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip>
<template #default="{ row }">
{{ getDictLabel(dict.checkStatus, row.checkStatus) }}
</template>
</el-table-column>
<el-table-column label="状态" prop="status" width="100">
<template #default="{ row }">
<span :style="row.status === '0' ? 'color: red' : ''">
{{
row.status === '0' ? '未办结' :
row.status === '1' ? '已办结' :
row.status === '2' ? '强制终结' :
'-'
}}
</span>
{{ getDictLabel(dict.checkStatus, row.checkStatusCode) }}
</template>
</el-table-column>
<el-table-column label="信件状态(局)" width="120" prop="processingStatus">
<el-table-column label="办理状态" prop="processingStatus" width="100">
<template #default="{ row }">
{{
row.processingStatus === 'completion' ? '已办结' :
row.processingStatus === 'processing' ? '办理中' :
row.processingStatus === 'delayed' ? '已延期' :
row.processingStatus === 'terminated' ? '已终止' :
'/'
}}
<el-tag
:type="row.processingStatus === 'completed' ? 'success' : 'primary'"
v-if="row.processingStatus"
>
{{ getDictLabel(dict.processingStatus, row.processingStatus) }}
</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<!-- <el-table-column label="信件状态(局)" width="120" prop="processingStatus">-->
<!-- <template #default="{ row }">-->
<!-- <el-tag-->
<!-- :type="row.processingStatus === 'completed' ? 'success' : 'primary'"-->
<!-- v-if="row.processingStatus"-->
<!-- >-->
<!-- {{ getDictLabel(dict.processingStatus, row.processingStatus) }}-->
<!-- </el-tag>-->
<!-- <span v-else>/</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="操作" width="240" fixed="right">
<template #default="{ row }">
<!-- <el-button type="primary" v-if="row.status === '0'" link @click="handleAction(row)">办理</el-button>-->
@ -364,8 +370,8 @@
@click="handleActionDetail(row)"
>办理详情</el-button
>
<el-button type="primary" v-if="row.status === '0'" link @click="handleUpdate(row)">修改</el-button>
<el-button type="danger" v-if="row.status === '0'" link @click="handleDel(row)">删除</el-button>
<el-button type="primary" v-if="row.processingStatus !== 'completed'" link @click="handleUpdate(row)">修改</el-button>
<el-button type="danger" v-if="row.processingStatus !== 'completed'" link @click="handleDel(row)">删除</el-button>
<!-- <el-button type="primary" v-if="row.status === '1' || row.status === '2'" link @click="handleWatchDetail(row)">查看详情</el-button>-->
</template>
</el-table-column>
@ -390,21 +396,17 @@
<data-complaintformdialog
v-model="addShow"
mode="add"
:model="addForm"
:rules="addRules"
:loading="submitting"
@submit="submitAdd"
@updateSuccess="getList"
/>
<!-- 修改 -->
<data-complaintformdialog
v-model="updateShow"
mode="edit"
:model="updateForm"
:rules="addRules"
:id="updateId"
:negativeId="activeNegativeId"
:loading="updateLoading"
@submit="submitUpdate"
@updateSuccess="getList"
/>
<!-- 查看详情 -->
@ -521,134 +523,31 @@ onMounted(() => {
// endregion
// region
const addShow = ref(false);
const add = () => {
addShow.value = true;
};
//
//
function hasPermission() {
console.log("=================userStore===================")
console.log(userStore.user)
const roles = userStore.user?.roleCodes || []
const allow = new Set(['admin_1', 'admin_1_12337'])
return roles.some(r => allow.has(r))
}
const canAdd = computed(() => hasPermission())
const createEmptyAddForm = () => ({
//
sourcePath: [],
// watch
sourceTable: '',
sourceTableSubOne: '',
originId: '',
discoveryTime: '',
responderName: '',
responderIdCode: '',
responderPhone: '',
secondDepartId: '',
secondDepartName: '',
thingDesc: '',
involveProblemIdList: [],
repeatt: '',
leadApproval: '',
tags: [],
handleMethod: '',
thingFiles: [],
//
hostLevel: '3',
departId: '',
departName: '',
//
timeLimit: '',
maxSignDuration: null,
maxHandleDuration: null,
maxExtensionDuration: null,
//
approvalFlow: '',
});
const addShow = ref(false);
const submitting = ref(false); //
const addForm = ref(createEmptyAddForm());
//
const add = async () => {
addForm.value = createEmptyAddForm()
addShow.value = true
}
//
const submitAdd = async () => {
if (submitting.value) return //
submitting.value = true
try {
const body = {...addForm.value}
let res = await addComplaintCollection(body);
if (res === true) {
feedback.msgSuccess("操作成功");
} else {
feedback.notifyError("操作失败");
}
addShow.value = false;
addForm.value = createEmptyAddForm();
} catch (e) {
console.error(e);
feedback.notifyError("操作失败");
} finally {
submitting.value = false
getList()
}
}
//
const addRules = {
sourcePath: [
{required: true, message: "请选择来源(一级/二级)", trigger: "change"},
],
discoveryTime: [{required: true, message: '请选择受理时间', trigger: 'change'}],
secondDepartId: [{required: true, message: '请选择被投诉二级机构', trigger: 'change'}],
thingDesc: [{required: true, message: '请输入来件内容', trigger: 'blur'}],
involveProblemIdList: [{required: true, message: '请选择涉嫌问题', trigger: 'change'}],
repeatt: [{required: true, message: '请选择是否重复件', trigger: 'change'}],
hostLevel: [{required: true, message: '请选择主办层级', trigger: 'change'}],
departId: [{required: true, message: '请选择办理单位', trigger: 'change'}],
timeLimit: [{required: true, message: '请选择办理时限', trigger: 'change'}],
approvalFlow: [{required: true, message: '请选择审批流程', trigger: 'change'}],
}
watch(
() => addForm.value.sourcePath,
(path) => {
addForm.value.sourceTable = path?.[0] ?? "";
addForm.value.sourceTableSubOne = path?.[1] ?? "";
},
{deep: true}
);
// endregion
// region
const updateShow = ref(false);
const updateId = ref("");
const updateLoading = ref(false);
const updateForm = ref({
id: "",
});
//
const handleUpdate = (row) => {
debugger
updateId.value = row.id;
updateId.value = row.id || '';
activeNegativeId.value = row.negativeId || '';
updateShow.value = true;
}
const submitUpdate = async () => {
const body = {
...updateForm.value,
}
let res = await updateComplaintCollection(body)
if (res === true) {
feedback.msgSuccess("操作成功");
updateShow.value = false
getList()
}
}
// endregion
@ -678,7 +577,10 @@ const storeDict = computed(() =>
"checkStatus",
"sfssSourceTable",
"sfssTags",
"accountabilityTarget"
"accountabilityTarget",
"processingStatus",
"handleMethodType",
"yesNo"
]) || {}
);

Loading…
Cancel
Save