Browse Source

修复审批、无效类组件缓存问题;修复三级机构立即处理的步骤缓存问题

master
21819 2 years ago
parent
commit
1fc12b319e
  1. 1
      src/views/work/components/ConfirmedCompletion.vue
  2. 30
      src/views/work/components/ReviewComments.vue
  3. 125
      src/views/work/components/templates/MailTypeForm.vue
  4. 263
      src/views/work/components/templates/ThreeHandling.vue

1
src/views/work/components/ConfirmedCompletion.vue

@ -211,6 +211,7 @@ function submit() {
emits("update:data", data); emits("update:data", data);
emits("submit", "confirmedCompletion"); emits("submit", "confirmedCompletion");
visible.value = false; visible.value = false;
mail.verifyFollowupPolice.name = ''
} }
}); });
} }

30
src/views/work/components/ReviewComments.vue

@ -1,28 +1,15 @@
<template> <template>
<el-dialog width="50vw" title="提交审批"> <el-dialog width="50vw" title="提交审批">
<el-form <el-form label-position="top" :model="form" :rules="rules" ref="formRef" style="height: 50vh">
label-position="top"
:model="form"
:rules="rules"
ref="formRef"
style="height: 50vh"
>
<el-form-item label="请选择上级领导" prop="leaderEmpNo" v-if="selectLeaderVisible"> <el-form-item label="请选择上级领导" prop="leaderEmpNo" v-if="selectLeaderVisible">
<LeaderSelect v-model="form.leaderEmpNo" :leader-type="leaderType" /> <LeaderSelect v-model="form.leaderEmpNo" :leader-type="leaderType" />
</el-form-item> </el-form-item>
<el-form-item label="审批意见" prop="approvalComment"> <el-form-item label="审批意见" prop="approvalComment">
<el-input <el-input v-model="form.approvalComment" type="textarea" :rows="3" placeholder="请输入审批意见"></el-input>
v-model="form.approvalComment"
type="textarea"
:rows="3"
placeholder="请输入审批意见"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<footer class="flex end"> <footer class="flex end">
<el-button type="primary" size="large" @click="submit" <el-button type="primary" size="large" @click="submit">审批通过</el-button>
>审批通过</el-button
>
</footer> </footer>
</el-dialog> </el-dialog>
</template> </template>
@ -57,9 +44,15 @@ const props = defineProps({
}, },
}); });
watch(() => props.mail.id, () => { watch(() => props.mail.id, () => {
resetFormData()
formRef.value?.resetFields(); formRef.value?.resetFields();
}) })
const resetFormData = () => {
form.leaderEmpNo = ''
form.approvalComment = ''
}
const selectLeaderVisible = ref(false) const selectLeaderVisible = ref(false)
const leaderType = ref('all') const leaderType = ref('all')
watch(() => props.mail.flowKey, (val) => { watch(() => props.mail.flowKey, (val) => {
@ -97,5 +90,4 @@ function submit() {
}); });
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
</style>

125
src/views/work/components/templates/MailTypeForm.vue

@ -5,107 +5,49 @@
<div class="flex gap-20"> <div class="flex gap-20">
<div style="width: 50%"> <div style="width: 50%">
<el-form-item label="信件分类" prop="mailCategory"> <el-form-item label="信件分类" prop="mailCategory">
<mail-category-select <mail-category-select v-model="form.mailCategory" @current-change="handleCategoryChange" />
v-model="form.mailCategory"
@current-change="handleCategoryChange"
/>
</el-form-item> </el-form-item>
</div> </div>
<div style="width: 50%"> <div style="width: 50%">
<el-form-item <el-form-item label="信件等级" prop="mailLevel" v-if="form.mailCategory !== '感谢信类' &&
label="信件等级" form.mailCategory !== '无效类' &&
prop="mailLevel" form.mailCategory !== '终止类'
v-if=" ">
form.mailCategory !== '感谢信类' && <el-select v-model="form.mailLevel" placeholder="" clearable>
form.mailCategory !== '无效类' && <el-option v-for="item in dictData.mail_level" :key="item.value" :label="item.name"
form.mailCategory !== '终止类' :value="item.value" />
"
>
<el-select
v-model="form.mailLevel"
placeholder=""
clearable
>
<el-option
v-for="item in dictData.mail_level"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
</div> </div>
<el-form-item <el-form-item label="处理流程" prop="simpleFlowFlag" v-if="form.mailFirstCategory === '工作建议类' ||
label="处理流程" form.mailFirstCategory === '咨询求助类'
prop="simpleFlowFlag" ">
v-if="
form.mailFirstCategory === '工作建议类' ||
form.mailFirstCategory === '咨询求助类'
"
>
<el-radio-group v-model="form.simpleFlowFlag" class="ml-4"> <el-radio-group v-model="form.simpleFlowFlag" class="ml-4">
<div> <div>
<el-radio :label="false" size="large" <el-radio :label="false" size="large">正常流程</el-radio>
>正常流程</el-radio
>
<p class="radio-tips">正常流程包含接访群众步骤</p> <p class="radio-tips">正常流程包含接访群众步骤</p>
</div> </div>
<div> <div>
<el-radio :label="true" size="largdie" <el-radio :label="true" size="largdie">简易流程</el-radio>
>简易流程</el-radio
>
<p class="radio-tips">简化流程不包含接访群众步骤</p> <p class="radio-tips">简化流程不包含接访群众步骤</p>
</div> </div>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="判定理由" prop="invalidationReason" v-if="form.mailCategory === '无效类' ||
label="判定理由" form.mailCategory === '终止类'
prop="invalidationReason" ">
v-if=" <el-input type="textarea" placeholder="请输入判定理由" v-model="form.invalidationReason" />
form.mailCategory === '无效类' ||
form.mailCategory === '终止类'
"
>
<el-input
type="textarea"
placeholder="请输入判定理由"
v-model="form.invalidationReason"
/>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="下发单位" v-if="form.mailCategory === '感谢信类'">
label="下发单位"
v-if="form.mailCategory === '感谢信类'"
>
<div class="flex gap" style="width: 100%"> <div class="flex gap" style="width: 100%">
<el-select <el-select v-model="form.secondDeptId" placeholder="请选择二级办理单位" filterable clearable
v-model="form.secondDeptId" style="width: 50%" @change="handleChangeDept">
placeholder="请选择二级办理单位" <el-option v-for="item in secondDepts" :key="item.id" :label="item.name" :value="item.id" />
filterable
clearable
style="width: 50%"
@change="handleChangeDept"
>
<el-option
v-for="item in secondDepts"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select> </el-select>
<el-select <el-select v-model="form.threeDeptId" placeholder="请选择三级办理单位" filterable clearable
v-model="form.threeDeptId" style="width: 50%">
placeholder="请选择三级办理单位" <el-option v-for="item in threeDepts" :key="item.id" :label="item.name" :value="item.id" />
filterable
clearable
style="width: 50%"
>
<el-option
v-for="item in threeDepts"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
@ -132,12 +74,24 @@ let form = reactive({});
watch( watch(
() => props.mailId, () => props.mailId,
(val) => { (val) => {
form.mailFirstCategory = null; resetFormData()
form.mailSecondCategory = null;
form.mailThreeCategory = null;
} }
); );
const resetFormData = () => {
form.mailCategory = ''
form.mailLevel = ''
form.simpleFlowFlag = ''
form.invalidationReason = ''
form.secondDeptId = ''
form.threeDeptId = ''
form.mailFirstCategory = null
form.mailSecondCategory = null
form.mailThreeCategory = null
formRef.value?.resetFields();
};
const formRef = ref(); const formRef = ref();
const rules = { const rules = {
@ -232,6 +186,7 @@ defineExpose({
.el-form { .el-form {
color: #333; color: #333;
} }
.radio-tips { .radio-tips {
font-size: 14px; font-size: 14px;
color: #666; color: #666;

263
src/views/work/components/templates/ThreeHandling.vue

@ -1,32 +1,18 @@
<template> <template>
<div class="flex between mb-20 card"> <div class="flex between mb-20 card">
<div class="flex gap-20"> <div class="flex gap-20">
<div <div class="flex gap v-center" v-for="item in data.coHandlingPolices" :key="item.empNo">
class="flex gap v-center"
v-for="item in data.coHandlingPolices"
:key="item.empNo"
>
<icon name="local-icon-police" :size="20" /> <icon name="local-icon-police" :size="20" />
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
<span>{{ item.phone }}</span> <span>{{ item.phone }}</span>
</div> </div>
</div> </div>
<el-button <el-button type="primary" size="small" @click="coHandlingPoliceShow = true">编辑协办民警</el-button>
type="primary"
size="small"
@click="coHandlingPoliceShow = true"
>编辑协办民警</el-button
>
</div> </div>
<header class="flex mb-20"> <header class="flex mb-20">
<template v-for="(item, index) in threeSteps" :key="item.index"> <template v-for="(item, index) in threeSteps" :key="item.index">
<div <div class="step flex center v-center" :active="activeStep === item.index" :completed="item.index < step"
class="step flex center v-center" :diabled="item.index > step" @click="handleChangeTab(item.index)">
:active="activeStep === item.index"
:completed="item.index < step"
:diabled="item.index > step"
@click="handleChangeTab(item.index)"
>
<span class="mr-8">{{ index + 1 }}</span> <span class="mr-8">{{ index + 1 }}</span>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</div> </div>
@ -50,24 +36,15 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否取得联系" prop="contactFlag"> <el-form-item label="是否取得联系" prop="contactFlag">
<el-radio-group v-model="form.contactFlag"> <el-radio-group v-model="form.contactFlag">
<el-radio :label="true" size="large" <el-radio :label="true" size="large">取得联系</el-radio>
>取得联系</el-radio <el-radio :label="false" size="large">未取得联系</el-radio>
>
<el-radio :label="false" size="large"
>未取得联系</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="联系时间" prop="contactTime"> <el-form-item label="联系时间" prop="contactTime">
<el-date-picker <el-date-picker type="datetime" v-model="form.contactTime" value-format="YYYY-MM-DD HH:mm:ss"
type="datetime" @change="handleTimeChange" style="width: 100%" />
v-model="form.contactTime"
value-format="YYYY-MM-DD HH:mm:ss"
@change="handleTimeChange"
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -75,16 +52,11 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="联系时长"> <el-form-item label="联系时长">
<span>{{ formatTimeText(form.contactDuration) }}</span> <span>{{ formatTimeText(form.contactDuration) }}</span>
<span <span v-if="form.contactDuration" :danger="form.contactDuration > limitedTime" class="ml-4">({{
v-if="form.contactDuration" form.contactDuration > limitedTime
:danger="form.contactDuration > limitedTime" ? "已超时"
class="ml-4" : "未超时"
>({{ }})</span>
form.contactDuration > limitedTime
? "已超时"
: "未超时"
}})</span
>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -92,16 +64,9 @@
<template v-if="activeStep === 2"> <template v-if="activeStep === 2">
<el-row> <el-row>
<el-form-item label="接访形式" prop="interviewType"> <el-form-item label="接访形式" prop="interviewType">
<el-select <el-select v-model="form.interviewType" style="width: 450px">
v-model="form.interviewType" <el-option v-for="item in dictData.interview_type" :key="item.value" :label="item.name"
style="width: 450px" :value="item.value" />
>
<el-option
v-for="item in dictData.interview_type"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-row> </el-row>
@ -116,26 +81,13 @@
</el-col> </el-col>
<el-col :span="12" prop="interviewPoliceEmpNo"> <el-col :span="12" prop="interviewPoliceEmpNo">
<el-form-item label="接访领导" prop="interviewPoliceEmpNo"> <el-form-item label="接访领导" prop="interviewPoliceEmpNo">
<LeaderSelect <LeaderSelect v-model="form.interviewPoliceEmpNo" @change="handleSelect" leader-type="all" />
v-model="form.interviewPoliceEmpNo"
@change="handleSelect"
leader-type="all"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-form-item <el-form-item label="接访情况" prop="interviewDetails" style="width: 100%">
label="接访情况" <el-input type="textarea" v-model="form.interviewDetails" :rows="5" style="width: 100%" />
prop="interviewDetails"
style="width: 100%"
>
<el-input
type="textarea"
v-model="form.interviewDetails"
:rows="5"
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
@ -156,130 +108,73 @@
</template> </template>
<template v-if="activeStep === 3"> <template v-if="activeStep === 3">
<el-row> <el-row>
<el-form-item <el-form-item label="核办结果" prop="verifyDetails" style="width: 100%">
label="核办结果" <el-input type="textarea" v-model="form.verifyDetails" :rows="5" style="width: 100%" />
prop="verifyDetails"
style="width: 100%"
>
<el-input
type="textarea"
v-model="form.verifyDetails"
:rows="5"
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<el-form-item label="是否属实" prop="verifyIsTrue"> <el-form-item label="是否属实" prop="verifyIsTrue">
<el-radio-group v-model="form.verifyIsTrue"> <el-radio-group v-model="form.verifyIsTrue">
<el-radio <el-radio v-for="item in dictData.verify_is_true" :key="item.name" :label="item.value"
v-for="item in dictData.verify_is_true" size="large">{{ item.name }}</el-radio>
:key="item.name"
:label="item.value"
size="large"
>{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-divider /> <el-divider />
<div <div v-if="form.verifyIsTrue === '属实' ||
v-if=" form.verifyIsTrue === '基本属实'
form.verifyIsTrue === '属实' || ">
form.verifyIsTrue === '基本属实'
"
>
<el-row> <el-row>
<el-form-item label="被举报人"> <el-form-item label="被举报人">
<div> <div>
<div <div class="flex between gap mb-10" v-for="(item, index) in reportedPolices" :key="index">
class="flex between gap mb-10" <el-tree-select v-model="item.deptId" :data="depts" clearable filterable node-key="id"
v-for="(item, index) in reportedPolices"
:key="index"
>
<el-tree-select
v-model="item.deptId"
:data="depts"
clearable
filterable
node-key="id"
:props="{ :props="{
value: 'id', value: 'id',
label: 'name', label: 'name',
}" }" check-strictly placeholder="请选择部门" @change="handleChangeDept" />
check-strictly
placeholder="请选择部门" <el-select v-model="item.empNo" style="width: 280px" @change="(val) => handleChangePolice(val, index)
@change="handleChangeDept" ">
/> <el-option v-for="item in polices" :key="item.id" :value="item.empNo"
:label="item.name"></el-option></el-select>
<el-select
v-model="item.empNo"
style="width: 280px"
@change="
(val) => handleChangePolice(val, index)
"
>
<el-option
v-for="item in polices"
:key="item.id"
:value="item.empNo"
:label="item.name"
></el-option
></el-select>
<div style="font-size: 12px; min-width: 200px"> <div style="font-size: 12px; min-width: 200px">
<span v-if="item.empNo"> <span v-if="item.empNo">
<span class="mr-4">警号</span> <span class="mr-4">警号</span>
<span class="mr-4">{{ <span class="mr-4">{{
item.empNo item.empNo
}}</span> }}</span>
</span> </span>
<span v-if="item.gender"> <span v-if="item.gender">
<span class="mr-4">性别</span> <span class="mr-4">性别</span>
<span class="mr-4">{{ <span class="mr-4">{{
item.gender item.gender
}}</span> }}</span>
</span> </span>
<span v-if="item.birthday"> <span v-if="item.birthday">
<span class="mr-4">出生年月</span> <span class="mr-4">出生年月</span>
<span>{{ item.birthday }}</span> <span>{{ item.birthday }}</span>
</span> </span>
</div> </div>
<el-button <el-button type="danger" plain @click="reportedPolices.splice(index, 1)">删除</el-button>
type="danger"
plain
@click="reportedPolices.splice(index, 1)"
>删除</el-button
>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
</el-row> </el-row>
<div class="text-center"> <div class="text-center">
<el-button <el-button type="primary" plain @click="reportedPolices.push({})">添加被举报人</el-button>
type="primary"
plain
@click="reportedPolices.push({})"
>添加被举报人</el-button
>
</div> </div>
<el-divider /> <el-divider />
<el-row> <el-row>
<el-form-item label="查证属实问题" prop="verifyProblem"> <el-form-item label="查证属实问题" prop="verifyProblem">
<el-checkbox-group v-model="form.verifyProblem"> <el-checkbox-group v-model="form.verifyProblem">
<el-checkbox <el-checkbox v-for="item in dictData.verify_problem" :key="item.value" :label="item.name"
v-for="item in dictData.verify_problem" :value="item.value" />
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<el-form-item <el-form-item label="是否需要问责" prop="verifyNeedAccountability">
label="是否需要问责"
prop="verifyNeedAccountability"
>
<el-radio-group v-model="form.verifyNeedAccountability"> <el-radio-group v-model="form.verifyNeedAccountability">
<el-radio :label="true" size="large"></el-radio> <el-radio :label="true" size="large"></el-radio>
<el-radio :label="false" size="large"></el-radio> <el-radio :label="false" size="large"></el-radio>
@ -289,21 +184,14 @@
<el-row v-if="form.verifyNeedAccountability"> <el-row v-if="form.verifyNeedAccountability">
<el-form-item label="责任追究"> <el-form-item label="责任追究">
<el-checkbox-group v-model="form.verifyPunish"> <el-checkbox-group v-model="form.verifyPunish">
<el-checkbox <el-checkbox v-for="item in dictData.verify_punish" :key="item.value" :label="item.name"
v-for="item in dictData.verify_punish" :value="item.value" />
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
</el-row> </el-row>
</div> </div>
<el-row> <el-row>
<el-form-item <el-form-item label="群众反应事项解决情况" prop="verifyIsResolved">
label="群众反应事项解决情况"
prop="verifyIsResolved"
>
<el-radio-group v-model="form.verifyIsResolved"> <el-radio-group v-model="form.verifyIsResolved">
<el-radio :label="true" size="large">已解决</el-radio> <el-radio :label="true" size="large">已解决</el-radio>
<el-radio :label="false" size="large">未解决</el-radio> <el-radio :label="false" size="large">未解决</el-radio>
@ -313,25 +201,15 @@
<el-row> <el-row>
<el-form-item label="办理反馈情况" prop="verifyFeedback"> <el-form-item label="办理反馈情况" prop="verifyFeedback">
<el-radio-group v-model="form.verifyFeedback"> <el-radio-group v-model="form.verifyFeedback">
<el-radio <el-radio v-for="item in dictData.satisfaction_status" :key="item.name" :label="item.value"
v-for="item in dictData.satisfaction_status" size="large">{{ item.name }}</el-radio>
:key="item.name"
:label="item.value"
size="large"
>{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item label="回访人姓名" prop="verifyFollowupPolice">
label="回访人姓名" <police-select v-model:data="form.verifyFollowupPolice" />
prop="verifyFollowupPolice"
>
<police-select
v-model:data="form.verifyFollowupPolice"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -357,18 +235,10 @@
请上传核查办理报告处理反馈表及相关的法律文件比如受案回执立案决定书不予立案决定书等和佐证材料比如谈话笔录调解协议等 请上传核查办理报告处理反馈表及相关的法律文件比如受案回执立案决定书不予立案决定书等和佐证材料比如谈话笔录调解协议等
</div> </div>
<div> <div>
<a <a :href="`${VITE_API_URL}/api/file/download/template/《核查办理报告》.doc`" target="_blank"
:href="`${VITE_API_URL}/api/file/download/template/《核查办理报告》.doc`" class="link">核查办理报告 下载</a>
target="_blank" <a :href="`${VITE_API_URL}/api/file/download/template/《处理反馈表》.doc`" target="_blank"
class="link" class="link">处理反馈表 下载</a>
>核查办理报告 下载</a
>
<a
:href="`${VITE_API_URL}/api/file/download/template/《处理反馈表》.doc`"
target="_blank"
class="link"
>处理反馈表 下载</a
>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -376,10 +246,7 @@
</template> </template>
</el-form> </el-form>
<CoHandlingPoliceEdit <CoHandlingPoliceEdit v-model:show="coHandlingPoliceShow" v-model:data="data.coHandlingPolices" />
v-model:show="coHandlingPoliceShow"
v-model:data="data.coHandlingPolices"
/>
</template> </template>
<script setup> <script setup>
import CoHandlingPoliceEdit from "./CoHandlingPoliceEdit.vue"; import CoHandlingPoliceEdit from "./CoHandlingPoliceEdit.vue";
@ -559,9 +426,21 @@ watch(
() => { () => {
formRef.value.resetFields(); formRef.value.resetFields();
initForm() initForm()
//
resetStep()
} }
); );
const resetStep = () => {
if (props.mail.flowKey === "interview_writer") {
step.value = 2;
}
else if (props.mail.flowKey === "verify") {
step.value = 3;
} else
step.value = 1;
};
watch( watch(
() => props.mail.flowKey, () => props.mail.flowKey,
() => { () => {
@ -716,18 +595,22 @@ defineExpose({
.step { .step {
width: 100%; width: 100%;
&[active="true"] { &[active="true"] {
--setp-background-color: #edf0ff; --setp-background-color: #edf0ff;
--setp-border-color: rgba(195, 202, 245, 1); --setp-border-color: rgba(195, 202, 245, 1);
--setp-font-color: #162582; --setp-font-color: #162582;
} }
&[completed="true"] { &[completed="true"] {
--setp-font-color: #666; --setp-font-color: #666;
&::after { &::after {
--setp-border-color: #8191f1; --setp-border-color: #8191f1;
background-color: var(--primary-color); background-color: var(--primary-color);
} }
} }
&[diabled="false"] { &[diabled="false"] {
&:hover { &:hover {
cursor: pointer; cursor: pointer;

Loading…
Cancel
Save