Browse Source

251106

厅长信箱
wxc 3 weeks ago
parent
commit
67a31c9fae
  1. 5
      src/api/setting/dict.ts
  2. 28
      src/components/DictTreeSelect.vue
  3. 1
      src/permission.ts
  4. 5
      src/style/public.scss
  5. 8
      src/views/data/data.vue
  6. 30
      src/views/work/Query.vue
  7. 7
      src/views/work/components/ConfirmedCompletion.vue
  8. 43
      src/views/work/components/MailDialog.vue
  9. 8
      src/views/work/components/MailReturnDetail.vue
  10. 6
      src/views/work/components/templates/CompletionDetail.vue
  11. 103
      src/views/work/components/templates/ThreeHandling.vue
  12. 19
      src/views/work/components/templates/ThreeHandlingDetail.vue

5
src/api/setting/dict.ts

@ -59,3 +59,8 @@ export function dictDataEdit(params: any) {
export function dictDataDelete(params: any) {
return request.post({ url: '/setting/dict/data/del', params })
}
export function dictDataTree(type) {
return request.get({ url: '/setting/dict/data/tree?type=' + type })
}

28
src/components/DictTreeSelect.vue

@ -0,0 +1,28 @@
<template>
<el-tree-select
:data="list"
:props="{
value: 'id',
label: 'name',
}"
filterable
/>
</template>
<script setup>
import { dictDataTree } from "@/api/setting/dict";
const props = defineProps({
type: {
type: String,
default: ""
}
})
const list = ref([])
onMounted(() => {
dictDataTree(props.type).then(data => {
list.value = data
})
})
</script>

1
src/permission.ts

@ -57,7 +57,6 @@ router.beforeEach(async (to, from, next) => {
// 动态添加index路由
router.addRoute(INDEX_ROUTE)
console.log(routes)
routes.forEach((route: any) => {
// https 则不插入
if (isExternal(route.path)) {

5
src/style/public.scss

@ -298,17 +298,20 @@ svg+span {
.col {
display: flex;
gap: 16px;
--label-width: 60px;
&.short {
width: 140px;
}
label {
color: #888;
width: var(--label-width);
text-align: right;
}
> span {
color: #222;
width: calc(100% - var(--label-width) - 16px);
}
}

8
src/views/data/data.vue

@ -62,10 +62,16 @@
<el-table-column
prop="total"
align="center"
label="信件总数"
>
</el-table-column>
<el-table-column
prop="effectiveTotal"
align="center"
>
<template #header>
<div>
<span class="mr-4">总量</span>
<span class="mr-4">有效来信数</span>
<el-tooltip
effect="dark"
content="信件总量不包含无效类、终止类、感谢信类"

30
src/views/work/Query.vue

@ -54,19 +54,26 @@
<el-option v-for="item in dictData.police_type" :key="item.value" :label="item.name"
:value="item.value" />
</el-select>
<div class="w-200">
<DictTreeSelect type="case_incident" v-model="query.caseIncident" placeholder="案事件分类" multiple clearable check-strictly />
</div>
<div class="w-200">
<DictTreeSelect type="claim" v-model="query.claim" placeholder="诉求分类" multiple clearable check-strictly />
</div>
<el-select v-model="query.mailLabels" placeholder="信件标签" multiple clearable filterable class="w-200">
<el-option v-for="item in optionsData.labels" :key="item.id" :label="item.labelName"
:value="item.id" />
</el-select>
<el-select v-model="query.mailState" placeholder="信件状态" clearable class="w-200">
<el-option v-for="item in dictData.mail_state" :key="item.value" :label="item.name"
:value="item.value" />
</el-select>
</div>
</div>
<div class="form-row flex">
<label class="text-center">信件办理</label>
<div class="flex wrap query-box">
<el-select v-model="query.mailState" placeholder="信件状态" clearable class="w-200">
<el-option v-for="item in dictData.mail_state" :key="item.value" :label="item.name"
:value="item.value" />
</el-select>
<DeptTreeSelectAuth v-model="query.deptId" placeholder="办理单位" check-strictly class="w-200" />
<el-select v-model="query.flowKey" placeholder="流程阶段" clearable multiple collapse-tags filterable class="w-200">
@ -213,7 +220,13 @@
<mail-level :value="row.mailLevel" :list="dictData.mail_level" />
</template>
</el-table-column>
<el-table-column prop="mailLabels" label="信件标签" width="160" align="center" />
<el-table-column prop="mailLabels" label="信件标签" width="160" align="center" >
<template #default="{ row }">
<template v-if="row.mailLabels">
<el-tag v-for="item in row.mailLabels.split('、')" :key="item" size="small" style="margin-right: 5px;">{{ item }}</el-tag>
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleMail(row.id)" size="small">详情</el-button>
@ -399,15 +412,9 @@ function getList() {
if (useRouterParams.params.mailState)
query.value.mailState = useRouterParams.params.mailState
//
if (useRouterParams.params.signDeptId)
query.value.signDeptId = useRouterParams.params.signDeptId
if (useRouterParams.params.deptId) {
query.value.deptId = useRouterParams.params.deptId
}
if (useRouterParams.params.signRoleId)
query.value.signRoleId = useRouterParams.params.signRoleId
if (useRouterParams.params.mailCategory)
query.value.mailCategory = useRouterParams.params.mailCategory
@ -473,7 +480,6 @@ function getList() {
}
//
delete query.value.signDeptId
delete query.value.signRoleId
});
}

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

@ -344,12 +344,7 @@ h2 {
margin-bottom: 16px;
color: #333;
}
.col {
label {
width: 160px;
text-align: right;
}
}
.el-divider--horizontal {
margin: 10px 0;
}

43
src/views/work/components/MailDialog.vue

@ -105,8 +105,8 @@
<div ref="mailInfoRef" style="padding-bottom: 20px">
<template v-if="mail.mailCategory">
<div class="col mb-10">
<label style="width: 56px">信件分类</label>
<span style="width: calc(100% - 74px)">
<label>信件分类</label>
<span>
<mail-category-select
v-model="form.mailCategory"
@current-change="
@ -316,14 +316,15 @@
<div
class="col mb-8"
v-if="mail.distributeComment"
style="--label-width: 100px"
>
<label class="text-right w-100"
<label class="text-right"
>省厅下发意见</label
>
<span>{{ mail.distributeComment }}</span>
</div>
<div class="col" v-if="mail.distributeFiles">
<label class="text-right w-100"
<div class="col" v-if="mail.distributeFiles" style="--label-width: 100px">
<label class="text-right"
>附件材料</label
>
<file-list
@ -340,14 +341,15 @@
<div
class="col mb-8"
v-if="mail.firstDistributeComment"
style="--label-width: 100px"
>
<label class="text-right w-100"
<label class="text-right"
>市州下发意见</label
>
<span>{{ mail.firstDistributeComment }}</span>
</div>
<div class="col" v-if="mail.firstDistributeFiles">
<label class="text-right w-100"
<div class="col" v-if="mail.firstDistributeFiles" style="--label-width: 100px">
<label class="text-right"
>附件材料</label
>
<file-list
@ -357,9 +359,9 @@
/>
</div>
<div class="flex mb-8">
<div class="col" style="width: 33%">
<div class="col" style="width: 33%; --label-width: 100px">
<label
class="text-right w-100"
class="text-right"
>县市区主责单位</label
>
<span>{{
@ -368,7 +370,7 @@
</div>
<div
class="col"
style="width: 33%"
style="width: 33%; --label-width: 100px"
v-if="
mail.firstDistributeInfo?.secondDept1
?.name
@ -382,7 +384,7 @@
</div>
<div
class="col"
style="width: 33%"
style="width: 33%; --label-width: 100px"
v-if="
mail.firstDistributeInfo?.secondDept2
?.name
@ -397,21 +399,22 @@
</div>
</div>
<div
class="card-info mb-4"
class="card-info mb-20"
v-if="mail.secondDistributeInfo?.mainDept?.name || mail.secondDistributeComment"
>
<div
class="col"
v-if="mail.secondDistributeComment"
style="--label-width: 100px"
>
<label class="text-right w-100"
<label class="text-right"
>县市区下发意见</label
>
<span>{{ mail.secondDistributeComment }}</span>
</div>
<div class="col" v-if="mail.secondDistributeFiles">
<label class="text-right w-100"
<div class="col" v-if="mail.secondDistributeFiles" style="--label-width: 100px">
<label class="text-right"
>附件材料</label
>
<file-list
@ -421,9 +424,9 @@
/>
</div>
<div class="flex mb-8">
<div class="col" style="width: 33%">
<div class="col" style="width: 33%; --label-width: 100px">
<label
class="text-right w-100"
class="text-right"
>三级主责单位</label
>
<span>{{
@ -433,7 +436,7 @@
</div>
<div
class="col"
style="width: 33%"
style="width: 33% --label-width: 100px"
v-if="
mail.secondDistributeInfo?.secondDept1
?.name
@ -447,7 +450,7 @@
</div>
<div
class="col"
style="width: 33%"
style="width: 33%; --label-width: 100px"
v-if="
mail.secondDistributeInfo?.secondDept2
?.name

8
src/views/work/components/MailReturnDetail.vue

@ -6,8 +6,8 @@
<icon name="el-icon-Warning" :size="20" />
<span class="ml-4">信件已退回</span>
</div>
<div class="col">
<label class="ml-20">退回单位</label>
<div class="col ml-20">
<label>退回单位</label>
<span>{{ item.handlerDeptName }}</span>
</div>
</div>
@ -44,9 +44,7 @@ const props = defineProps({
const expand = ref(false);
</script>
<style lang="scss" scoped>
.col label {
width: 60px;
}
.box {
border: 1px solid #ffe3e3;
padding: 16px;

6
src/views/work/components/templates/CompletionDetail.vue

@ -87,11 +87,7 @@ const mail = inject('mail');
<style lang="scss" scoped>
.col {
width: 25%;
label {
width: 116px;
text-align: right;
}
--label-width: 116px;
.content {
max-width: calc(100% - 116px);
padding-top: 0;

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

@ -38,7 +38,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="联系民警" prop="contactPolice">
<div v-if="!mail.localProcessingFlag && !mail.localProcessing">
<div v-if="!mail.localProcessingFlag && !mail.localProcessing" style="width: 280px">
<police-select v-model:data="form.contactPolice" />
</div>
<div v-else>
@ -247,7 +247,7 @@
<template v-if="activeStep === 3">
<el-row>
<el-form-item
label="警种"
label="涉及警种"
prop="policeType"
>
<el-select
@ -263,6 +263,27 @@
</el-select>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label="案事件分类"
prop="caseIncident"
>
<div style="width: 450px">
<DictTreeSelect type="case_incident" v-model="form.caseIncident" placeholder="请选择案事件分类" @node-click="handleChangeCaseIncident" />
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label="诉求分类"
prop="claim"
>
<div style="width: 450px">
<DictTreeSelect type="claim" v-model="form.claim" placeholder="请选择诉求分类" @node-click="handleChangeClaim" />
</div>
</el-form-item>
</el-row>
<el-divider />
<el-row>
<el-form-item
label="核办结果"
@ -367,21 +388,15 @@
<div style="font-size: 12px" class="ml-20">
<span v-if="item.blameName">
<span class="mr-4">姓名</span>
<span class="mr-4">{{
item.blameName
}}</span>
<span class="mr-4">{{ item.blameName }}</span>
</span>
<span v-if="item.blameEmpNo">
<span class="mr-4">警号</span>
<span class="mr-4">{{
item.blameEmpNo
}}</span>
<span class="mr-4">{{ item.blameEmpNo }}</span>
</span>
<span v-if="item.blameIdCode">
<span class="mr-4">身份证</span>
<span class="mr-4">{{
item.blameIdCode
}}</span>
<span class="mr-4">{{ item.blameIdCode }}</span>
</span>
</div>
</div>
@ -425,9 +440,7 @@
</el-row>
</div>
<div class="text-center">
<el-button type="primary" plain @click="handleAdd"
>添加涉及人员</el-button
>
<el-button type="primary" plain @click="handleAdd">添加涉及人员</el-button>
</div>
<el-divider />
</div>
@ -524,6 +537,7 @@
:mailId="mail.id"
@submit="update"
/>
</template>
<script setup>
import CoHandlingPoliceEdit from "./CoHandlingPoliceEdit.vue";
@ -614,13 +628,6 @@ const rules = {
},
],
//
policeType: [
{
required: true,
message: "请选择警种",
},
],
//
verifyDetails: [
{
required: true,
@ -657,6 +664,18 @@ const rules = {
message: "请上传佐证",
},
],
caseIncident: [
{
required: true,
message: "请选择案事件分类",
},
],
claim: [
{
required: true,
message: "请选择诉求分类",
}
],
};
const props = defineProps({
@ -906,6 +925,18 @@ function initForm() {
verifyAttachments: props.mail.verifyAttachments || [],
//
mailBlames: props.mail.mailBlames || [],
//
policeType: props.mail.policeType,
//
caseIncident: props.mail.caseIncident,
caseIncidentName: props.mail.caseIncidentName,
caseIncidentName1: props.mail.caseIncidentName1,
caseIncidentName2: props.mail.caseIncidentName2,
//
claim: props.mail.claim,
claimName: props.mail.claimName,
claimName1: props.mail.claimName1,
claimName2: props.mail.claimName2
};
}
@ -969,6 +1000,36 @@ function goPolice() {
router.push('/setting/admin')
}
function handleChangeCaseIncident(data, node) {
if (node.childNodes.length > 0) {
return
}
if (data.parentId) {
form.value.caseIncidentName = data.name
form.value.caseIncidentName1 = node.parent.data.name
form.value.caseIncidentName2 = data.name
} else {
form.value.caseIncidentName = data.name
form.value.caseIncidentName1 = data.name
form.value.caseIncidentName2 = null
}
}
function handleChangeClaim(data, node) {
if (node.childNodes.length > 0) {
return
}
if (data.parentId) {
form.value.claimName = data.name
form.value.claimName1 = node.parent.data.name
form.value.claimName2 = data.name
} else {
form.value.claimName = data.name
form.value.claimName1 = data.name
form.value.claimName2 = null
}
}
defineExpose({
validate,
getData,

19
src/views/work/components/templates/ThreeHandlingDetail.vue

@ -100,6 +100,16 @@
name="3"
v-if="mail.verifyIsTrue !== null"
>
<div class="flex mb-12">
<div class="col" style="width: 50%">
<label>案事件分类</label>
<span>{{ mail.caseIncidentName1 }}{{ mail.caseIncidentName2 ? ' / ' + mail.caseIncidentName2 : '' }}</span>
</div>
<div class="col" style="width: 50%">
<label>诉求分类</label>
<span>{{ mail.claimName1 }}{{ mail.claimName2 ? ' / ' + mail.claimName2 : '' }}</span>
</div>
</div>
<div class="flex mb-12">
<div class="col">
<label>是否属实</label>
@ -111,6 +121,10 @@
mail.verifyNeedAccountability ? "是" : "否"
}}</span>
</div>
<div class="col">
<label>警种</label>
<span>{{ mail.policeType || '/' }}</span>
</div>
</div>
<div class="flex mb-12">
@ -252,10 +266,7 @@ function sumbitDetail() {
}
.col {
width: 25%;
label {
width: 144px;
text-align: right;
}
--label-width: 140px;
.content {
font-size: 14px;
padding: 0;

Loading…
Cancel
Save