Browse Source

fix:修改子页面

master
buaixuexideshitongxue 1 month ago
parent
commit
4caf69db07
  1. 160
      src/views/data/ComplaintCollection_12389ts.vue
  2. 161
      src/views/data/ComplaintCollection_gabxf.vue
  3. 156
      src/views/data/ComplaintCollection_gjxf.vue
  4. 182
      src/views/data/ComplaintCollection_jzxx.vue
  5. 160
      src/views/data/ComplaintCollection_ldxj.vue

160
src/views/data/ComplaintCollection_12389ts.vue

@ -59,6 +59,14 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="涉及三级机构" prop="thirdDepartId">
<depart-tree-select
v-model="query.thirdDepartId"
:check-strictly="true"
/>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理方式"> <el-form-item label="办理方式">
<el-select <el-select
@ -75,29 +83,17 @@
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理状态"> <el-form-item label="办理状态">
<el-select <el-select
v-model="query.status" v-model="query.processingStatus"
clearable
placeholder="办理状态"
>
<el-option value="0" label="未办理"/>
<el-option value="1" label="已办理"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable clearable
v-model="query.tags"
multiple multiple
collapse-tags collapse-tags
placeholder="办理状态"
> >
<el-option <el-option
v-for="item in dict.sfssTags" v-for="item in dict.processingStatus"
:key="item.id" :key="item.id"
:value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
:value="item.dictValue"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -163,7 +159,6 @@
:value="item.dictValue" :value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
> >
<!-- 复选框展示和你弹窗里一致 -->
<el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)"> <el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)">
{{ item.dictLabel }} {{ item.dictLabel }}
</el-checkbox> </el-checkbox>
@ -171,8 +166,40 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable
v-model="query.tags"
multiple
collapse-tags
>
<el-option
v-for="item in dict.sfssTags"
:key="item.id"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="录入时间">
<date-time-range-picker-ext
v-model="query.createTimeList"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="办理单位" prop="handleDepartId">
<depart-tree-select
v-model="query.handleDepartId"
placeholder="办理单位"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="mb-25 flex between"> <div class="mb-25 flex between">
<div> <div>
@ -210,7 +237,17 @@
:formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/> :formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/>
<el-table-column label="联系电话" width="100" prop="responderPhone" <el-table-column label="联系电话" width="100" prop="responderPhone"
:formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/> :formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/>
<el-table-column label="被投诉机构" width="130" prop="secondDepartName"/> <el-table-column label="被投诉机构" width="130" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span v-if="row.thirdDepartName"> {{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column label="办理单位" width="160" show-overflow-tooltip>
<template #default="{ row }">
{{ row.handleSecondDepartName || '' }}{{ row.handleThreeDepartName ? '/' + row.handleThreeDepartName : '' }}
</template>
</el-table-column>
<el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/> <el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/>
<el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/> <el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/>
<el-table-column label="是否重复件" width="100"> <el-table-column label="是否重复件" width="100">
@ -221,16 +258,20 @@
<el-table-column label="初核限时" width="150" align="center"> <el-table-column label="初核限时" width="150" align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 有状态显示状态文案 -->
<el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'"> <el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'">
{{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }} {{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }}
</el-tag> </el-tag>
<!-- 无状态显示倒计时 -->
<countdown v-else :time="Number(row.remainingDuration || 0)"/> <countdown v-else :time="Number(row.remainingDuration || 0)"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="录入时间"
width="170"
prop="createTime"
:formatter="(_, __, v) => v ? timeFormat(v, 'yyyy-mm-dd hh:MM:ss') : '/'"
show-overflow-tooltip
/>
<el-table-column label="标签" width="100" show-overflow-tooltip> <el-table-column label="标签" width="100" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.sfssTags, row.tag) }} {{ getDictLabel(dict.sfssTags, row.tag) }}
@ -263,23 +304,23 @@
<el-table-column label="业务类别" width="100" prop="businessTypeName"/> <el-table-column label="业务类别" width="100" prop="businessTypeName"/>
<el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip> <el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.checkStatus, row.checkStatus) }} {{ getDictLabel(dict.checkStatus, row.checkStatusCode) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" prop="status" width="100"> <el-table-column label="办理状态" prop="processingStatus" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span :style="row.status === '0' ? 'color: red' : ''"> <el-tag
{{ :type="row.processingStatus === 'completed' ? 'success' : 'primary'"
row.status === '0' ? '未办理' : v-if="row.processingStatus"
row.status === '1' ? '已办理' : >
'-' {{ getDictLabel(dict.processingStatus, row.processingStatus) }}
}} </el-tag>
</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="handleWatchDetail(row)">查看详情</el-button> <el-button type="primary" link @click="handleActionDetail(row)">办理详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -298,36 +339,53 @@
</div> </div>
</div> </div>
<negative-dialog
v-model="show"
:id="activeNegativeId"
@close="show = false"
ref="negativeDialogRef"
/>
<negative-mailbox-dialog
v-model="mailboxShow"
:id="activeNegativeId"
@close="mailboxShow = false"
/>
</template> </template>
<script setup> <script setup>
import { ref, watch, computed, onMounted } from 'vue'; import { ref, computed, onMounted } from 'vue';
import {timeFormat} from "@/utils/util"; import {timeFormat} from "@/utils/util";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
import { import {
exportData, exportData,
getComplaintCollectionPage getComplaintCollectionPage
} from "@/api/data/complaintCollection.ts"; } from "@/api/data/complaintCollection.ts";
import useCatchStore = useCatchStore();
const show = ref(false);
const mailboxShow = ref(false);
const activeNegativeId = ref("");
const query = ref({ const query = ref({
size: 10, size: 10,
current: 1, current: 1,
sourceTableList: ['17'], sourceTableList: ['17'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}); });
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
const loading = ref(false) const loading = ref(false)
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
//
if (!query.value.sourceTableList.includes('17')) { if (!query.value.sourceTableList.includes('17')) {
query.value.sourceTableList = ['17', ...query.value.sourceTableList]; query.value.sourceTableList = ['17', ...query.value.sourceTableList];
} }
@ -337,7 +395,7 @@ const getList = async () => {
} }
let res = await getComplaintCollectionPage(params); let res = await getComplaintCollectionPage(params);
list.value = res.complaintCollectionPageDTOS; list.value = res.records;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} }
@ -348,7 +406,11 @@ function reset() {
current: 1, current: 1,
sourceTableList: ['17'], sourceTableList: ['17'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}; };
getList(); getList();
} }
@ -369,14 +431,15 @@ const storeDict = computed(() =>
"checkStatus", "checkStatus",
"sfssSourceTable", "sfssSourceTable",
"sfssTags", "sfssTags",
"accountabilityTarget" "accountabilityTarget",
"processingStatus",
"handleMethodType"
]) || {} ]) || {}
); );
const ts12389SourceTableSubOneList = computed(() => { const ts12389SourceTableSubOneList = computed(() => {
const list = storeDict.value.sfssSourceTable || [] const list = storeDict.value.sfssSourceTable || []
// remark 12389dictValue
const children = list const children = list
.filter(d => d.remark === '17') .filter(d => d.remark === '17')
.sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0)) .sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0))
@ -431,11 +494,15 @@ function getDictLabel(list, value) {
return labels.length ? labels.join(',') : '/' return labels.length ? labels.join(',') : '/'
} }
const detailShow = ref(false) function handleActionDetail(row) {
const activeId = ref("") console.log('办理详情', row)
const handleWatchDetail = async (row) => { if (row.problemSources === '局长信箱') {
activeId.value = row.id mailboxShow.value = true;
detailShow.value = true activeNegativeId.value = row.originId;
} else {
show.value = true;
activeNegativeId.value = row.negativeId;
}
} }
const handleExport = async () => { const handleExport = async () => {
@ -470,4 +537,3 @@ p {
padding: 0 24px 16px; padding: 0 24px 16px;
} }
</style> </style>
// ai

161
src/views/data/ComplaintCollection_gabxf.vue

@ -59,6 +59,14 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="涉及三级机构" prop="thirdDepartId">
<depart-tree-select
v-model="query.thirdDepartId"
:check-strictly="true"
/>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理方式"> <el-form-item label="办理方式">
<el-select <el-select
@ -75,29 +83,17 @@
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理状态"> <el-form-item label="办理状态">
<el-select <el-select
v-model="query.status" v-model="query.processingStatus"
clearable
placeholder="办理状态"
>
<el-option value="0" label="未办理"/>
<el-option value="1" label="已办理"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable clearable
v-model="query.tags"
multiple multiple
collapse-tags collapse-tags
placeholder="办理状态"
> >
<el-option <el-option
v-for="item in dict.sfssTags" v-for="item in dict.processingStatus"
:key="item.id" :key="item.id"
:value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
:value="item.dictValue"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -163,7 +159,6 @@
:value="item.dictValue" :value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
> >
<!-- 复选框展示和你弹窗里一致 -->
<el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)"> <el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)">
{{ item.dictLabel }} {{ item.dictLabel }}
</el-checkbox> </el-checkbox>
@ -171,6 +166,39 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable
v-model="query.tags"
multiple
collapse-tags
>
<el-option
v-for="item in dict.sfssTags"
:key="item.id"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="录入时间">
<date-time-range-picker-ext
v-model="query.createTimeList"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="办理单位" prop="handleDepartId">
<depart-tree-select
v-model="query.handleDepartId"
placeholder="办理单位"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="mb-25 flex between"> <div class="mb-25 flex between">
@ -209,7 +237,17 @@
:formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/> :formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/>
<el-table-column label="联系电话" width="100" prop="responderPhone" <el-table-column label="联系电话" width="100" prop="responderPhone"
:formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/> :formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/>
<el-table-column label="被投诉机构" width="130" prop="secondDepartName"/> <el-table-column label="被投诉机构" width="130" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span v-if="row.thirdDepartName"> {{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column label="办理单位" width="160" show-overflow-tooltip>
<template #default="{ row }">
{{ row.handleSecondDepartName || '' }}{{ row.handleThreeDepartName ? '/' + row.handleThreeDepartName : '' }}
</template>
</el-table-column>
<el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/> <el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/>
<el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/> <el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/>
<el-table-column label="是否重复件" width="100"> <el-table-column label="是否重复件" width="100">
@ -220,16 +258,20 @@
<el-table-column label="初核限时" width="150" align="center"> <el-table-column label="初核限时" width="150" align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 有状态显示状态文案 -->
<el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'"> <el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'">
{{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }} {{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }}
</el-tag> </el-tag>
<!-- 无状态显示倒计时 -->
<countdown v-else :time="Number(row.remainingDuration || 0)"/> <countdown v-else :time="Number(row.remainingDuration || 0)"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="录入时间"
width="170"
prop="createTime"
:formatter="(_, __, v) => v ? timeFormat(v, 'yyyy-mm-dd hh:MM:ss') : '/'"
show-overflow-tooltip
/>
<el-table-column label="标签" width="100" show-overflow-tooltip> <el-table-column label="标签" width="100" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.sfssTags, row.tag) }} {{ getDictLabel(dict.sfssTags, row.tag) }}
@ -262,23 +304,23 @@
<el-table-column label="业务类别" width="100" prop="businessTypeName"/> <el-table-column label="业务类别" width="100" prop="businessTypeName"/>
<el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip> <el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.checkStatus, row.checkStatus) }} {{ getDictLabel(dict.checkStatus, row.checkStatusCode) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" prop="status" width="100"> <el-table-column label="办理状态" prop="processingStatus" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span :style="row.status === '0' ? 'color: red' : ''"> <el-tag
{{ :type="row.processingStatus === 'completed' ? 'success' : 'primary'"
row.status === '0' ? '未办理' : v-if="row.processingStatus"
row.status === '1' ? '已办理' : >
'-' {{ getDictLabel(dict.processingStatus, row.processingStatus) }}
}} </el-tag>
</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="handleWatchDetail(row)">查看详情</el-button> <el-button type="primary" link @click="handleActionDetail(row)">办理详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -297,37 +339,53 @@
</div> </div>
</div> </div>
<negative-dialog
v-model="show"
:id="activeNegativeId"
@close="show = false"
ref="negativeDialogRef"
/>
<negative-mailbox-dialog
v-model="mailboxShow"
:id="activeNegativeId"
@close="mailboxShow = false"
/>
</template> </template>
<script setup> <script setup>
import { ref, watch, computed, onMounted } from 'vue'; import { ref, computed, onMounted } from 'vue';
import {timeFormat} from "@/utils/util"; import {timeFormat} from "@/utils/util";
import feedback from "@/utils/feedback";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
import { import {
exportData, exportData,
getComplaintCollectionPage getComplaintCollectionPage
} from "@/api/data/complaintCollection.ts"; } from "@/api/data/complaintCollection.ts";
import useCatchStore = useCatchStore();
const show = ref(false);
const mailboxShow = ref(false);
const activeNegativeId = ref("");
const query = ref({ const query = ref({
size: 10, size: 10,
current: 1, current: 1,
sourceTableList: ['22'], sourceTableList: ['22'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}); });
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
const loading = ref(false) const loading = ref(false)
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
//
if (!query.value.sourceTableList.includes('22')) { if (!query.value.sourceTableList.includes('22')) {
query.value.sourceTableList = ['22', ...query.value.sourceTableList]; query.value.sourceTableList = ['22', ...query.value.sourceTableList];
} }
@ -337,7 +395,7 @@ const getList = async () => {
} }
let res = await getComplaintCollectionPage(params); let res = await getComplaintCollectionPage(params);
list.value = res.complaintCollectionPageDTOS; list.value = res.records;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} }
@ -348,7 +406,11 @@ function reset() {
current: 1, current: 1,
sourceTableList: ['22'], sourceTableList: ['22'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}; };
getList(); getList();
} }
@ -369,14 +431,15 @@ const storeDict = computed(() =>
"checkStatus", "checkStatus",
"sfssSourceTable", "sfssSourceTable",
"sfssTags", "sfssTags",
"accountabilityTarget" "accountabilityTarget",
"processingStatus",
"handleMethodType"
]) || {} ]) || {}
); );
const gabxfSourceTableSubOneList = computed(() => { const gabxfSourceTableSubOneList = computed(() => {
const list = storeDict.value.sfssSourceTable || [] const list = storeDict.value.sfssSourceTable || []
// remark 访dictValue
const children = list const children = list
.filter(d => d.remark === '22') .filter(d => d.remark === '22')
.sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0)) .sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0))
@ -431,11 +494,15 @@ function getDictLabel(list, value) {
return labels.length ? labels.join(',') : '/' return labels.length ? labels.join(',') : '/'
} }
const detailShow = ref(false) function handleActionDetail(row) {
const activeId = ref("") console.log('办理详情', row)
const handleWatchDetail = async (row) => { if (row.problemSources === '局长信箱') {
activeId.value = row.id mailboxShow.value = true;
detailShow.value = true activeNegativeId.value = row.originId;
} else {
show.value = true;
activeNegativeId.value = row.negativeId;
}
} }
const handleExport = async () => { const handleExport = async () => {
@ -470,5 +537,3 @@ p {
padding: 0 24px 16px; padding: 0 24px 16px;
} }
</style> </style>
// ai

156
src/views/data/ComplaintCollection_gjxf.vue

@ -59,6 +59,14 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="涉及三级机构" prop="thirdDepartId">
<depart-tree-select
v-model="query.thirdDepartId"
:check-strictly="true"
/>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理方式"> <el-form-item label="办理方式">
<el-select <el-select
@ -75,29 +83,17 @@
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理状态"> <el-form-item label="办理状态">
<el-select <el-select
v-model="query.status" v-model="query.processingStatus"
clearable clearable
placeholder="办理状态"
>
<el-option value="0" label="未办理"/>
<el-option value="1" label="已办理"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable
v-model="query.tags"
multiple multiple
collapse-tags collapse-tags
placeholder="办理状态"
> >
<el-option <el-option
v-for="item in dict.sfssTags" v-for="item in dict.processingStatus"
:key="item.id" :key="item.id"
:value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
:value="item.dictValue"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -163,7 +159,6 @@
:value="item.dictValue" :value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
> >
<!-- 复选框展示和你弹窗里一致 -->
<el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)"> <el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)">
{{ item.dictLabel }} {{ item.dictLabel }}
</el-checkbox> </el-checkbox>
@ -171,6 +166,39 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable
v-model="query.tags"
multiple
collapse-tags
>
<el-option
v-for="item in dict.sfssTags"
:key="item.id"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="录入时间">
<date-time-range-picker-ext
v-model="query.createTimeList"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="办理单位" prop="handleDepartId">
<depart-tree-select
v-model="query.handleDepartId"
placeholder="办理单位"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="mb-25 flex between"> <div class="mb-25 flex between">
@ -209,7 +237,17 @@
:formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/> :formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/>
<el-table-column label="联系电话" width="100" prop="responderPhone" <el-table-column label="联系电话" width="100" prop="responderPhone"
:formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/> :formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/>
<el-table-column label="被投诉机构" width="130" prop="secondDepartName"/> <el-table-column label="被投诉机构" width="130" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span v-if="row.thirdDepartName"> {{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column label="办理单位" width="160" show-overflow-tooltip>
<template #default="{ row }">
{{ row.handleSecondDepartName || '' }}{{ row.handleThreeDepartName ? '/' + row.handleThreeDepartName : '' }}
</template>
</el-table-column>
<el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/> <el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/>
<el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/> <el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/>
<el-table-column label="是否重复件" width="100"> <el-table-column label="是否重复件" width="100">
@ -220,16 +258,20 @@
<el-table-column label="初核限时" width="150" align="center"> <el-table-column label="初核限时" width="150" align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 有状态显示状态文案 -->
<el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'"> <el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'">
{{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }} {{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }}
</el-tag> </el-tag>
<!-- 无状态显示倒计时 -->
<countdown v-else :time="Number(row.remainingDuration || 0)"/> <countdown v-else :time="Number(row.remainingDuration || 0)"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="录入时间"
width="170"
prop="createTime"
:formatter="(_, __, v) => v ? timeFormat(v, 'yyyy-mm-dd hh:MM:ss') : '/'"
show-overflow-tooltip
/>
<el-table-column label="标签" width="100" show-overflow-tooltip> <el-table-column label="标签" width="100" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.sfssTags, row.tag) }} {{ getDictLabel(dict.sfssTags, row.tag) }}
@ -262,23 +304,23 @@
<el-table-column label="业务类别" width="100" prop="businessTypeName"/> <el-table-column label="业务类别" width="100" prop="businessTypeName"/>
<el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip> <el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.checkStatus, row.checkStatus) }} {{ getDictLabel(dict.checkStatus, row.checkStatusCode) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" prop="status" width="100"> <el-table-column label="办理状态" prop="processingStatus" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span :style="row.status === '0' ? 'color: red' : ''"> <el-tag
{{ :type="row.processingStatus === 'completed' ? 'success' : 'primary'"
row.status === '0' ? '未办理' : v-if="row.processingStatus"
row.status === '1' ? '已办理' : >
'-' {{ getDictLabel(dict.processingStatus, row.processingStatus) }}
}} </el-tag>
</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="handleWatchDetail(row)">查看详情</el-button> <el-button type="primary" link @click="handleActionDetail(row)">办理详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -297,6 +339,19 @@
</div> </div>
</div> </div>
<negative-dialog
v-model="show"
:id="activeNegativeId"
@close="show = false"
ref="negativeDialogRef"
/>
<negative-mailbox-dialog
v-model="mailboxShow"
:id="activeNegativeId"
@close="mailboxShow = false"
/>
</template> </template>
@ -305,25 +360,29 @@ import {computed, onMounted, ref} from 'vue';
import {timeFormat} from "@/utils/util"; import {timeFormat} from "@/utils/util";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
import {exportData, getComplaintCollectionPage} from "@/api/data/complaintCollection.ts"; import {exportData, getComplaintCollectionPage} from "@/api/data/complaintCollection.ts";
import useCatchStore = useCatchStore();
const show = ref(false);
const mailboxShow = ref(false);
const activeNegativeId = ref("");
const query = ref({ const query = ref({
size: 10, size: 10,
current: 1, current: 1,
sourceTableList: ['21'], sourceTableList: ['21'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}); });
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
const loading = ref(false) const loading = ref(false)
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
//
if (!query.value.sourceTableList.includes('21')) { if (!query.value.sourceTableList.includes('21')) {
query.value.sourceTableList = ['21', ...query.value.sourceTableList]; query.value.sourceTableList = ['21', ...query.value.sourceTableList];
} }
@ -333,7 +392,7 @@ const getList = async () => {
} }
let res = await getComplaintCollectionPage(params); let res = await getComplaintCollectionPage(params);
list.value = res.complaintCollectionPageDTOS; list.value = res.records;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} }
@ -344,7 +403,11 @@ function reset() {
current: 1, current: 1,
sourceTableList: ['21'], sourceTableList: ['21'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}; };
getList(); getList();
} }
@ -365,7 +428,9 @@ const storeDict = computed(() =>
"checkStatus", "checkStatus",
"sfssSourceTable", "sfssSourceTable",
"sfssTags", "sfssTags",
"accountabilityTarget" "accountabilityTarget",
"processingStatus",
"handleMethodType"
]) || {} ]) || {}
); );
@ -383,7 +448,6 @@ const localDict = {
const gjxfSourceTableSubOneList = computed(() => { const gjxfSourceTableSubOneList = computed(() => {
const list = storeDict.value.sfssSourceTable || [] const list = storeDict.value.sfssSourceTable || []
// remark 访dictValue
const children = list const children = list
.filter(d => d.remark === '21') .filter(d => d.remark === '21')
.sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0)) .sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0))
@ -427,11 +491,15 @@ function getDictLabel(list, value) {
return labels.length ? labels.join(',') : '/' return labels.length ? labels.join(',') : '/'
} }
const detailShow = ref(false) function handleActionDetail(row) {
const activeId = ref("") console.log('办理详情', row)
const handleWatchDetail = async (row) => { if (row.problemSources === '局长信箱') {
activeId.value = row.id mailboxShow.value = true;
detailShow.value = true activeNegativeId.value = row.originId;
} else {
show.value = true;
activeNegativeId.value = row.negativeId;
}
} }
const handleExport = async () => { const handleExport = async () => {

182
src/views/data/ComplaintCollection_jzxx.vue

@ -59,6 +59,14 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="涉及三级机构" prop="thirdDepartId">
<depart-tree-select
v-model="query.thirdDepartId"
:check-strictly="true"
/>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理方式"> <el-form-item label="办理方式">
<el-select <el-select
@ -73,32 +81,17 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理状态"> <el-form-item label="信件状态">
<el-select
v-model="query.status"
clearable
placeholder="办理状态"
>
<el-option value="0" label="未办理"/>
<el-option value="1" label="已办理"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select <el-select
v-model="query.processingStatus"
placeholder="全部" placeholder="全部"
clearable clearable
v-model="query.tags" style="width: 100%"
multiple
collapse-tags
> >
<el-option <el-option value="processing" label="办理中"/>
v-for="item in dict.sfssTags" <el-option value="completion" label="已办结"/>
:key="item.id" <el-option value="delayed" label="已延期"/>
:value="item.dictValue" <el-option value="terminated" label="已终止"/>
:label="item.dictLabel"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -163,7 +156,6 @@
:value="item.dictValue" :value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
> >
<!-- 复选框展示和你弹窗里一致 -->
<el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)"> <el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)">
{{ item.dictLabel }} {{ item.dictLabel }}
</el-checkbox> </el-checkbox>
@ -172,22 +164,39 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="信件状态"> <el-form-item label="标签">
<el-select <el-select
v-model="query.processingStatus"
placeholder="全部" placeholder="全部"
clearable clearable
style="width: 100%" v-model="query.tags"
multiple
collapse-tags
> >
<el-option value="processing" label="办理中"/> <el-option
<el-option value="completion" label="已办结"/> v-for="item in dict.sfssTags"
<el-option value="delayed" label="已延期"/> :key="item.id"
<el-option value="terminated" label="已终止"/> :value="item.dictValue"
:label="item.dictLabel"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="录入时间">
<date-time-range-picker-ext
v-model="query.createTimeList"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="办理单位" prop="handleDepartId">
<depart-tree-select
v-model="query.handleDepartId"
placeholder="办理单位"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="mb-25 flex between"> <div class="mb-25 flex between">
<div> <div>
@ -225,7 +234,17 @@
:formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/> :formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/>
<el-table-column label="联系电话" width="100" prop="responderPhone" <el-table-column label="联系电话" width="100" prop="responderPhone"
:formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/> :formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/>
<el-table-column label="被投诉机构" width="130" prop="secondDepartName"/> <el-table-column label="被投诉机构" width="130" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span v-if="row.thirdDepartName"> {{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column label="办理单位" width="160" show-overflow-tooltip>
<template #default="{ row }">
{{ row.handleSecondDepartName || '' }}{{ row.handleThreeDepartName ? '/' + row.handleThreeDepartName : '' }}
</template>
</el-table-column>
<el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/> <el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/>
<el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/> <el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/>
<el-table-column label="是否重复件" width="100"> <el-table-column label="是否重复件" width="100">
@ -236,16 +255,20 @@
<el-table-column label="初核限时" width="150" align="center"> <el-table-column label="初核限时" width="150" align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 有状态显示状态文案 -->
<el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'"> <el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'">
{{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }} {{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }}
</el-tag> </el-tag>
<!-- 无状态显示倒计时 -->
<countdown v-else :time="Number(row.remainingDuration || 0)"/> <countdown v-else :time="Number(row.remainingDuration || 0)"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="录入时间"
width="170"
prop="createTime"
:formatter="(_, __, v) => v ? timeFormat(v, 'yyyy-mm-dd hh:MM:ss') : '/'"
show-overflow-tooltip
/>
<el-table-column label="标签" width="100" show-overflow-tooltip> <el-table-column label="标签" width="100" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.sfssTags, row.tag) }} {{ getDictLabel(dict.sfssTags, row.tag) }}
@ -278,34 +301,29 @@
<el-table-column label="业务类别" width="100" prop="businessTypeName"/> <el-table-column label="业务类别" width="100" prop="businessTypeName"/>
<el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip> <el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.checkStatus, row.checkStatus) }} {{ getDictLabel(dict.checkStatus, row.checkStatusCode) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" prop="status" width="100"> <el-table-column label="信件状态" prop="processingStatus" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span :style="row.status === '0' ? 'color: red' : ''"> <el-tag
:type="row.processingStatus === 'completed' ? 'success' : 'primary'"
v-if="row.processingStatus"
>
{{ {{
row.status === '0' ? '未办理' : row.processingStatus === 'completion' ? '已办结' :
row.status === '1' ? '已办理' : row.processingStatus === 'processing' ? '办理中' :
'-' row.processingStatus === 'delayed' ? '已延期' :
row.processingStatus === 'terminated' ? '已终止' :
getDictLabel(dict.processingStatus, row.processingStatus)
}} }}
</span> </el-tag>
</template> <span v-else>-</span>
</el-table-column>
<el-table-column label="信件状态(局)" width="120" prop="processingStatus">
<template #default="{ row }">
{{
row.processingStatus === 'completion' ? '已办结' :
row.processingStatus === 'processing' ? '办理中' :
row.processingStatus === 'delayed' ? '已延期' :
row.processingStatus === 'terminated' ? '已终止' :
'/'
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="handleWatchDetail(row)">查看详情</el-button> <el-button type="primary" link @click="handleActionDetail(row)">办理详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -324,37 +342,54 @@
</div> </div>
</div> </div>
<negative-dialog
v-model="show"
:id="activeNegativeId"
@close="show = false"
ref="negativeDialogRef"
/>
<negative-mailbox-dialog
v-model="mailboxShow"
:id="activeNegativeId"
@close="mailboxShow = false"
/>
</template> </template>
<script setup> <script setup>
import { ref, watch, computed, onMounted } from 'vue'; import { ref, computed, onMounted } from 'vue';
import {timeFormat} from "@/utils/util"; import {timeFormat} from "@/utils/util";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
import { import {
exportData, exportData,
getComplaintCollectionPage getComplaintCollectionPage
} from "@/api/data/complaintCollection.ts"; } from "@/api/data/complaintCollection.ts";
import useCatchStore = useCatchStore();
const show = ref(false);
const mailboxShow = ref(false);
const activeNegativeId = ref("");
const query = ref({ const query = ref({
size: 10, size: 10,
current: 1, current: 1,
sourceTableList: ['23'], sourceTableList: ['23'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
processingStatus: '', processingStatus: '',
}); });
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
const loading = ref(false) const loading = ref(false)
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
//
if (!query.value.sourceTableList.includes('23')) { if (!query.value.sourceTableList.includes('23')) {
query.value.sourceTableList = ['23', ...query.value.sourceTableList]; query.value.sourceTableList = ['23', ...query.value.sourceTableList];
} }
@ -364,7 +399,7 @@ const getList = async () => {
} }
let res = await getComplaintCollectionPage(params); let res = await getComplaintCollectionPage(params);
list.value = res.complaintCollectionPageDTOS; list.value = res.records;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} }
@ -375,7 +410,11 @@ function reset() {
current: 1, current: 1,
sourceTableList: ['23'], sourceTableList: ['23'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
processingStatus: '', processingStatus: '',
}; };
getList(); getList();
@ -397,14 +436,15 @@ const storeDict = computed(() =>
"checkStatus", "checkStatus",
"sfssSourceTable", "sfssSourceTable",
"sfssTags", "sfssTags",
"accountabilityTarget" "accountabilityTarget",
"processingStatus",
"handleMethodType"
]) || {} ]) || {}
); );
const jzxxSourceTableSubOneList = computed(() => { const jzxxSourceTableSubOneList = computed(() => {
const list = storeDict.value.sfssSourceTable || [] const list = storeDict.value.sfssSourceTable || []
// remark dictValue
const children = list const children = list
.filter(d => d.remark === '23') .filter(d => d.remark === '23')
.sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0)) .sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0))
@ -459,11 +499,15 @@ function getDictLabel(list, value) {
return labels.length ? labels.join(',') : '/' return labels.length ? labels.join(',') : '/'
} }
const detailShow = ref(false) function handleActionDetail(row) {
const activeId = ref("") console.log('办理详情', row)
const handleWatchDetail = async (row) => { if (row.problemSources === '局长信箱') {
activeId.value = row.id mailboxShow.value = true;
detailShow.value = true activeNegativeId.value = row.originId;
} else {
show.value = true;
activeNegativeId.value = row.negativeId;
}
} }
const handleExport = async () => { const handleExport = async () => {
@ -498,5 +542,3 @@ p {
padding: 0 24px 16px; padding: 0 24px 16px;
} }
</style> </style>
// ai

160
src/views/data/ComplaintCollection_ldxj.vue

@ -59,6 +59,14 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="涉及三级机构" prop="thirdDepartId">
<depart-tree-select
v-model="query.thirdDepartId"
:check-strictly="true"
/>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理方式"> <el-form-item label="办理方式">
<el-select <el-select
@ -75,29 +83,17 @@
<el-col :span="6"> <el-col :span="6">
<el-form-item label="办理状态"> <el-form-item label="办理状态">
<el-select <el-select
v-model="query.status" v-model="query.processingStatus"
clearable
placeholder="办理状态"
>
<el-option value="0" label="未办理"/>
<el-option value="1" label="已办理"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable clearable
v-model="query.tags"
multiple multiple
collapse-tags collapse-tags
placeholder="办理状态"
> >
<el-option <el-option
v-for="item in dict.sfssTags" v-for="item in dict.processingStatus"
:key="item.id" :key="item.id"
:value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
:value="item.dictValue"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -163,7 +159,6 @@
:value="item.dictValue" :value="item.dictValue"
:label="item.dictLabel" :label="item.dictLabel"
> >
<!-- 复选框展示和你弹窗里一致 -->
<el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)"> <el-checkbox :model-value="(query.involveProblemIdList || []).includes(item.dictValue)">
{{ item.dictLabel }} {{ item.dictLabel }}
</el-checkbox> </el-checkbox>
@ -171,6 +166,39 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="标签">
<el-select
placeholder="全部"
clearable
v-model="query.tags"
multiple
collapse-tags
>
<el-option
v-for="item in dict.sfssTags"
:key="item.id"
:value="item.dictValue"
:label="item.dictLabel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="录入时间">
<date-time-range-picker-ext
v-model="query.createTimeList"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="办理单位" prop="handleDepartId">
<depart-tree-select
v-model="query.handleDepartId"
placeholder="办理单位"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="mb-25 flex between"> <div class="mb-25 flex between">
@ -209,7 +237,17 @@
:formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/> :formatter="row => row.responderIdCode ? row.responderIdCode : '无'" show-overflow-tooltip/>
<el-table-column label="联系电话" width="100" prop="responderPhone" <el-table-column label="联系电话" width="100" prop="responderPhone"
:formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/> :formatter="row => row.responderPhone ? row.responderPhone : '无'" show-overflow-tooltip/>
<el-table-column label="被投诉机构" width="130" prop="secondDepartName"/> <el-table-column label="被投诉机构" width="130" show-overflow-tooltip>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span v-if="row.thirdDepartName"> {{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column label="办理单位" width="160" show-overflow-tooltip>
<template #default="{ row }">
{{ row.handleSecondDepartName || '' }}{{ row.handleThreeDepartName ? '/' + row.handleThreeDepartName : '' }}
</template>
</el-table-column>
<el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/> <el-table-column label="来信内容" width="100" prop="thingDesc" show-overflow-tooltip/>
<el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/> <el-table-column label="涉嫌问题" width="100" prop="involveProblemStr" show-overflow-tooltip/>
<el-table-column label="是否重复件" width="100"> <el-table-column label="是否重复件" width="100">
@ -220,16 +258,20 @@
<el-table-column label="初核限时" width="150" align="center"> <el-table-column label="初核限时" width="150" align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 有状态显示状态文案 -->
<el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'"> <el-tag v-if="row.gwf3>=1" :type="row.gwf3 === '2' ? 'danger' : 'success'">
{{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }} {{ row.gwf3 === '2' ? '超时完成初核' : '按时完成初核' }}
</el-tag> </el-tag>
<!-- 无状态显示倒计时 -->
<countdown v-else :time="Number(row.remainingDuration || 0)"/> <countdown v-else :time="Number(row.remainingDuration || 0)"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="录入时间"
width="170"
prop="createTime"
:formatter="(_, __, v) => v ? timeFormat(v, 'yyyy-mm-dd hh:MM:ss') : '/'"
show-overflow-tooltip
/>
<el-table-column label="标签" width="100" show-overflow-tooltip> <el-table-column label="标签" width="100" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.sfssTags, row.tag) }} {{ getDictLabel(dict.sfssTags, row.tag) }}
@ -262,23 +304,23 @@
<el-table-column label="业务类别" width="100" prop="businessTypeName"/> <el-table-column label="业务类别" width="100" prop="businessTypeName"/>
<el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip> <el-table-column label="核查结论" width="140" prop="checkStatus" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
{{ getDictLabel(dict.checkStatus, row.checkStatus) }} {{ getDictLabel(dict.checkStatus, row.checkStatusCode) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" prop="status" width="100"> <el-table-column label="办理状态" prop="processingStatus" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span :style="row.status === '0' ? 'color: red' : ''"> <el-tag
{{ :type="row.processingStatus === 'completed' ? 'success' : 'primary'"
row.status === '0' ? '未办理' : v-if="row.processingStatus"
row.status === '1' ? '已办理' : >
'-' {{ getDictLabel(dict.processingStatus, row.processingStatus) }}
}} </el-tag>
</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="handleWatchDetail(row)">查看详情</el-button> <el-button type="primary" link @click="handleActionDetail(row)">办理详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -297,36 +339,53 @@
</div> </div>
</div> </div>
<negative-dialog
v-model="show"
:id="activeNegativeId"
@close="show = false"
ref="negativeDialogRef"
/>
<negative-mailbox-dialog
v-model="mailboxShow"
:id="activeNegativeId"
@close="mailboxShow = false"
/>
</template> </template>
<script setup> <script setup>
import { ref, watch, computed, onMounted } from 'vue'; import { ref, computed, onMounted } from 'vue';
import {timeFormat} from "@/utils/util"; import {timeFormat} from "@/utils/util";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
import { import {
exportData, exportData,
getComplaintCollectionPage getComplaintCollectionPage
} from "@/api/data/complaintCollection.ts"; } from "@/api/data/complaintCollection.ts";
import useCatchStore = useCatchStore();
const show = ref(false);
const mailboxShow = ref(false);
const activeNegativeId = ref("");
const query = ref({ const query = ref({
size: 10, size: 10,
current: 1, current: 1,
sourceTableList: ['leader_explain'], sourceTableList: ['leader_explain'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}); });
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
const loading = ref(false) const loading = ref(false)
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
//
if (!query.value.sourceTableList.includes('leader_explain')) { if (!query.value.sourceTableList.includes('leader_explain')) {
query.value.sourceTableList = ['leader_explain', ...query.value.sourceTableList]; query.value.sourceTableList = ['leader_explain', ...query.value.sourceTableList];
} }
@ -336,7 +395,7 @@ const getList = async () => {
} }
let res = await getComplaintCollectionPage(params); let res = await getComplaintCollectionPage(params);
list.value = res.complaintCollectionPageDTOS; list.value = res.records;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} }
@ -347,7 +406,11 @@ function reset() {
current: 1, current: 1,
sourceTableList: ['leader_explain'], sourceTableList: ['leader_explain'],
sourceTableSubOneList: [], sourceTableSubOneList: [],
secondDepartId: null,
thirdDepartId: null,
handleDepartId: null,
initialReviewFileList: [], initialReviewFileList: [],
createTimeList: [],
}; };
getList(); getList();
} }
@ -368,14 +431,15 @@ const storeDict = computed(() =>
"checkStatus", "checkStatus",
"sfssSourceTable", "sfssSourceTable",
"sfssTags", "sfssTags",
"accountabilityTarget" "accountabilityTarget",
"processingStatus",
"handleMethodType"
]) || {} ]) || {}
); );
const leaderSourceTableSubOneList = computed(() => { const leaderSourceTableSubOneList = computed(() => {
const list = storeDict.value.sfssSourceTable || [] const list = storeDict.value.sfssSourceTable || []
// remark dictValue
const children = list const children = list
.filter(d => d.remark === 'leader_explain') .filter(d => d.remark === 'leader_explain')
.sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0)) .sort((a, b) => (a.dictSort ?? 0) - (b.dictSort ?? 0))
@ -430,11 +494,15 @@ function getDictLabel(list, value) {
return labels.length ? labels.join(',') : '/' return labels.length ? labels.join(',') : '/'
} }
const detailShow = ref(false) function handleActionDetail(row) {
const activeId = ref("") console.log('办理详情', row)
const handleWatchDetail = async (row) => { if (row.problemSources === '局长信箱') {
activeId.value = row.id mailboxShow.value = true;
detailShow.value = true activeNegativeId.value = row.originId;
} else {
show.value = true;
activeNegativeId.value = row.negativeId;
}
} }
const handleExport = async () => { const handleExport = async () => {
@ -469,5 +537,3 @@ p {
padding: 0 24px 16px; padding: 0 24px 16px;
} }
</style> </style>
// ai
Loading…
Cancel
Save