15 changed files with 2450 additions and 349 deletions
@ -0,0 +1,43 @@ |
|||||||
|
<template> |
||||||
|
<div class="loading-wrapper flex center v-center" v-show="loading"> |
||||||
|
<div class="loading-box flex column v-center center"> |
||||||
|
<icon name="el-icon-Loading" :size="100" /> |
||||||
|
<div class="mt-8 loading-text">{{ loadingText }}</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
|
||||||
|
defineProps({ |
||||||
|
loading: { |
||||||
|
type: Boolean, |
||||||
|
defalut: true |
||||||
|
}, |
||||||
|
loadingText: { |
||||||
|
type: String, |
||||||
|
defalut: '' |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
.loading-wrapper { |
||||||
|
position: fixed; |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
bottom: 0; |
||||||
|
z-index: 99999; |
||||||
|
} |
||||||
|
.loading-box { |
||||||
|
width: 162px; |
||||||
|
height: 162px; |
||||||
|
background: #9D9DA0; |
||||||
|
border-radius: 16px; |
||||||
|
color: #ccc; |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
.loading-text { |
||||||
|
color: #fff; |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,316 @@ |
|||||||
|
<template> |
||||||
|
<div class="container"> |
||||||
|
<header> |
||||||
|
<el-form :label-width="80"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="6"> </el-col> |
||||||
|
</el-row> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">基本信息</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 340px"> |
||||||
|
<el-form-item label="报警时间"> |
||||||
|
<date-time-range-picker-ext |
||||||
|
v-model="query.discoveryTime" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="期数" |
||||||
|
style="width: 146px" |
||||||
|
v-model="query.reportNumber" |
||||||
|
clearable |
||||||
|
/> |
||||||
|
<el-input |
||||||
|
placeholder="具体问题情况" |
||||||
|
v-model="query.thingDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<el-input |
||||||
|
placeholder="警情编号" |
||||||
|
v-model="query.caseNumber" |
||||||
|
clearable |
||||||
|
style="width: 200px" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">核查情况</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 160px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.involveDepartId" |
||||||
|
placeholder="涉及单位" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<div style="width: 160px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.handleDepartId" |
||||||
|
placeholder="办理单位" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<el-select |
||||||
|
style="width: 146px" |
||||||
|
placeholder="是否整改" |
||||||
|
clearable |
||||||
|
v-model="query.isRectifyCode" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.isRectify" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
<el-input |
||||||
|
placeholder="回复情况" |
||||||
|
v-model="query.checkStatusDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<div class="flex gap-4"> |
||||||
|
<el-select |
||||||
|
v-model="query.blameKey" |
||||||
|
style="width: 90px" |
||||||
|
@change="delete query.blameValue" |
||||||
|
> |
||||||
|
<el-option value="name" label="姓名" /> |
||||||
|
<el-option value="empNo" label="警号" /> |
||||||
|
<el-option value="idCode" label="身份证" /> |
||||||
|
</el-select> |
||||||
|
<el-input |
||||||
|
placeholder="问责人员(民警、辅警)" |
||||||
|
v-model="query.blameValue" |
||||||
|
clearable |
||||||
|
style="width: 190px" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">其他选项</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="自查或他查" |
||||||
|
clearable |
||||||
|
v-model="query.crtDepartLevel" |
||||||
|
> |
||||||
|
<el-option label="他查" :value="0" /> |
||||||
|
<el-option label="自查" :value="2" /> |
||||||
|
</el-select> |
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="办理状态" |
||||||
|
clearable |
||||||
|
v-model="query.processingStatus" |
||||||
|
multiple |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.processingStatus" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-form> |
||||||
|
<div class="flex between mt-20 mb-26"> |
||||||
|
<div> |
||||||
|
<!-- <el-button type="primary" @click="handleExport" |
||||||
|
>数据导出</el-button |
||||||
|
> --> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<el-button type="primary" @click="getList"> |
||||||
|
<template #icon |
||||||
|
><icon name="el-icon-Search" |
||||||
|
/></template> |
||||||
|
查询</el-button |
||||||
|
> |
||||||
|
<el-button @click="reset">重置</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<div class="table-container" v-loading="loading"> |
||||||
|
<el-table :data="list" ref="tableRef"> |
||||||
|
<el-table-column |
||||||
|
label="期数" |
||||||
|
prop="reportNumber" |
||||||
|
width="80" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉及单位" |
||||||
|
prop="involveDepartName" |
||||||
|
width="160" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="办理单位" |
||||||
|
show-overflow-tooltip |
||||||
|
width="160" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
>{{ row.handleSecondDepartName |
||||||
|
}}{{ row.handleThreeDepartName }}</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="报警时间" |
||||||
|
prop="discoveryTime" |
||||||
|
width="150" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="警情编号" |
||||||
|
prop="caseNumber" |
||||||
|
width="220" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="自查或他查" |
||||||
|
width="100" |
||||||
|
align="center" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
row.crtDepartLevel === 0 ? "他查" : "自查" |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="具体问题情况" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="核查情况" |
||||||
|
prop="checkStatusDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="整改情况" |
||||||
|
prop="rectifyDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column label="办理状态" width="100"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tag |
||||||
|
:type=" |
||||||
|
row.processingStatus === |
||||||
|
ProcessingStatus.COMPLETED |
||||||
|
? 'success' |
||||||
|
: 'primary' |
||||||
|
" |
||||||
|
v-if="row.processingStatus" |
||||||
|
>{{ |
||||||
|
getDictLable( |
||||||
|
dict.processingStatus, |
||||||
|
row.processingStatus |
||||||
|
) |
||||||
|
}}</el-tag |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="操作" width="80" fixed="right"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleAction(row)" |
||||||
|
>详情</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
<div class="flex end mt-8"> |
||||||
|
<el-pagination |
||||||
|
@size-change="getList" |
||||||
|
@current-change="getList" |
||||||
|
:current-page="query.current" |
||||||
|
:page-sizes="[10, 20, 50]" |
||||||
|
:page-size="query.size" |
||||||
|
v-model:current-page="query.current" |
||||||
|
layout="total, sizes, prev, pager, next" |
||||||
|
:total="total" |
||||||
|
> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<negative-dialog |
||||||
|
v-model="show" |
||||||
|
:id="activeNegativeId" |
||||||
|
@close="show = false" |
||||||
|
ref="negativeDialogRef" |
||||||
|
/> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { ProcessingStatus } from "@/enums/flowEnums"; |
||||||
|
import { listNegativeHdjq } from "@/api/books"; |
||||||
|
import { getDictLable } from "@/utils/util"; |
||||||
|
|
||||||
|
import useCatchStore from "@/stores/modules/catch"; |
||||||
|
|
||||||
|
const catchStore = useCatchStore(); |
||||||
|
const dict = catchStore.getDicts([ |
||||||
|
"businessType", |
||||||
|
"inspectCase", |
||||||
|
"isRectify", |
||||||
|
"processingStatus", |
||||||
|
"suspectProblem", |
||||||
|
"policeType", |
||||||
|
"specialSupervision", |
||||||
|
]); |
||||||
|
|
||||||
|
const query = ref({ |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}); |
||||||
|
|
||||||
|
const list = ref([]); |
||||||
|
const total = ref(0); |
||||||
|
|
||||||
|
const loading = ref(false); |
||||||
|
function getList() { |
||||||
|
loading.value = true; |
||||||
|
listNegativeHdjq(query.value).then((data) => { |
||||||
|
list.value = data.records; |
||||||
|
total.value = data.total; |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function reset() { |
||||||
|
query.value = { |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}; |
||||||
|
getList(); |
||||||
|
} |
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
getList(); |
||||||
|
}); |
||||||
|
|
||||||
|
const show = ref(false); |
||||||
|
const activeNegativeId = ref(""); |
||||||
|
|
||||||
|
function handleAction(row) { |
||||||
|
show.value = true; |
||||||
|
activeNegativeId.value = row.id; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -0,0 +1,316 @@ |
|||||||
|
<template> |
||||||
|
<div class="container"> |
||||||
|
<header> |
||||||
|
<el-form :label-width="80"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="6"> </el-col> |
||||||
|
</el-row> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">基本信息</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 340px"> |
||||||
|
<el-form-item label="受理时间"> |
||||||
|
<date-time-range-picker-ext |
||||||
|
v-model="query.discoveryTime" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="具体问题情况" |
||||||
|
v-model="query.thingDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="初访重访" |
||||||
|
clearable |
||||||
|
v-model="query.initialPetition" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.initialPetition" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">核查情况</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 160px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.involveDepartId" |
||||||
|
placeholder="涉及单位" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<div style="width: 160px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.handleDepartId" |
||||||
|
placeholder="办理单位" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="处理情况简要描述" |
||||||
|
v-model="query.checkStatusDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<div class="flex gap-4"> |
||||||
|
<el-select |
||||||
|
v-model="query.blameKey" |
||||||
|
style="width: 90px" |
||||||
|
@change="delete query.blameValue" |
||||||
|
> |
||||||
|
<el-option value="name" label="姓名" /> |
||||||
|
<el-option value="empNo" label="警号" /> |
||||||
|
<el-option value="idCode" label="身份证" /> |
||||||
|
</el-select> |
||||||
|
<el-input |
||||||
|
placeholder="问责人员(民警、辅警)" |
||||||
|
v-model="query.blameValue" |
||||||
|
clearable |
||||||
|
style="width: 190px" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="办理状态" |
||||||
|
clearable |
||||||
|
v-model="query.processingStatus" |
||||||
|
multiple |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.processingStatus" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-form> |
||||||
|
<div class="flex between mt-20 mb-26"> |
||||||
|
<div> |
||||||
|
<!-- <el-button type="primary" @click="handleExport" |
||||||
|
>数据导出</el-button |
||||||
|
> --> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<el-button type="primary" @click="getList"> |
||||||
|
<template #icon |
||||||
|
><icon name="el-icon-Search" |
||||||
|
/></template> |
||||||
|
查询</el-button |
||||||
|
> |
||||||
|
<el-button @click="reset">重置</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<div class="table-container" v-loading="loading"> |
||||||
|
<el-table :data="list" ref="tableRef"> |
||||||
|
<el-table-column |
||||||
|
label="投诉渠道" |
||||||
|
prop="channelForFilingComplaints" |
||||||
|
width="90" |
||||||
|
align="center" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理层级" |
||||||
|
prop="acceptanceLevel" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理时间" |
||||||
|
prop="discoveryTime" |
||||||
|
width="160" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人" |
||||||
|
prop="responderName" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人电话" |
||||||
|
prop="responderPhone" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="被投诉单位" |
||||||
|
prop="involveDepartName" |
||||||
|
width="160" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="办理单位" |
||||||
|
show-overflow-tooltip |
||||||
|
width="160" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
>{{ row.handleSecondDepartName |
||||||
|
}}{{ row.handleThreeDepartName }}</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题类别" |
||||||
|
prop="involveProblem" |
||||||
|
width="200" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
getInvolveProblem( |
||||||
|
row.involveProblem, |
||||||
|
dict.suspectProblem |
||||||
|
) || "/" |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="业务类别" |
||||||
|
prop="businessTypeName" |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="处理情况简要描述" |
||||||
|
prop="checkStatusDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column label="初重信访" align="center" width="85"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
getDictLable( |
||||||
|
dict.initialPetition, |
||||||
|
row.initialPetition |
||||||
|
) |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="群众集访" width="85" align="center"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span v-if="row.massVisits === true">是</span> |
||||||
|
<span v-if="row.massVisits === false">否</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="办理状态" width="100"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tag |
||||||
|
:type=" |
||||||
|
row.processingStatus === |
||||||
|
ProcessingStatus.COMPLETED |
||||||
|
? 'success' |
||||||
|
: 'primary' |
||||||
|
" |
||||||
|
v-if="row.processingStatus" |
||||||
|
>{{ |
||||||
|
getDictLable( |
||||||
|
dict.processingStatus, |
||||||
|
row.processingStatus |
||||||
|
) |
||||||
|
}}</el-tag |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="操作" width="80" fixed="right"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleAction(row)" |
||||||
|
v-if="row.id" |
||||||
|
>详情</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
<div class="flex end mt-8"> |
||||||
|
<el-pagination |
||||||
|
@size-change="getList" |
||||||
|
@current-change="getList" |
||||||
|
:current-page="query.current" |
||||||
|
:page-sizes="[10, 20, 50]" |
||||||
|
:page-size="query.size" |
||||||
|
v-model:current-page="query.current" |
||||||
|
layout="total, sizes, prev, pager, next" |
||||||
|
:total="total" |
||||||
|
> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<negative-dialog |
||||||
|
v-model="show" |
||||||
|
:id="activeNegativeId" |
||||||
|
@close="show = false" |
||||||
|
ref="negativeDialogRef" |
||||||
|
/> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { ProcessingStatus } from "@/enums/flowEnums"; |
||||||
|
import { ProblemSources } from "@/enums/dictEnums"; |
||||||
|
import { listNegativeXf } from "@/api/books"; |
||||||
|
import { getDictLable, getInvolveProblem } from "@/utils/util"; |
||||||
|
|
||||||
|
import useCatchStore from "@/stores/modules/catch"; |
||||||
|
|
||||||
|
const catchStore = useCatchStore(); |
||||||
|
const dict = catchStore.getDicts([ |
||||||
|
"initialPetition", |
||||||
|
"processingStatus", |
||||||
|
"suspectProblem" |
||||||
|
]); |
||||||
|
|
||||||
|
const query = ref({ |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}); |
||||||
|
|
||||||
|
const list = ref([]); |
||||||
|
const total = ref(0); |
||||||
|
|
||||||
|
const loading = ref(false); |
||||||
|
function getList() { |
||||||
|
loading.value = true; |
||||||
|
listNegativeXf(query.value, ProblemSources.GABXF).then((data) => { |
||||||
|
list.value = data.records; |
||||||
|
total.value = data.total; |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function reset() { |
||||||
|
query.value = { |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}; |
||||||
|
getList(); |
||||||
|
} |
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
getList(); |
||||||
|
}); |
||||||
|
|
||||||
|
const show = ref(false); |
||||||
|
const activeNegativeId = ref(""); |
||||||
|
|
||||||
|
function handleAction(row) { |
||||||
|
show.value = true; |
||||||
|
activeNegativeId.value = row.id; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -0,0 +1,316 @@ |
|||||||
|
<template> |
||||||
|
<div class="container"> |
||||||
|
<header> |
||||||
|
<el-form :label-width="80"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="6"> </el-col> |
||||||
|
</el-row> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">基本信息</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 340px"> |
||||||
|
<el-form-item label="受理时间"> |
||||||
|
<date-time-range-picker-ext |
||||||
|
v-model="query.discoveryTime" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="具体问题情况" |
||||||
|
v-model="query.thingDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="初访重访" |
||||||
|
clearable |
||||||
|
v-model="query.initialPetition" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.initialPetition" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">核查情况</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 160px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.involveDepartId" |
||||||
|
placeholder="涉及单位" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<div style="width: 160px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.handleDepartId" |
||||||
|
placeholder="办理单位" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="处理情况简要描述" |
||||||
|
v-model="query.checkStatusDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<div class="flex gap-4"> |
||||||
|
<el-select |
||||||
|
v-model="query.blameKey" |
||||||
|
style="width: 90px" |
||||||
|
@change="delete query.blameValue" |
||||||
|
> |
||||||
|
<el-option value="name" label="姓名" /> |
||||||
|
<el-option value="empNo" label="警号" /> |
||||||
|
<el-option value="idCode" label="身份证" /> |
||||||
|
</el-select> |
||||||
|
<el-input |
||||||
|
placeholder="问责人员(民警、辅警)" |
||||||
|
v-model="query.blameValue" |
||||||
|
clearable |
||||||
|
style="width: 190px" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="办理状态" |
||||||
|
clearable |
||||||
|
v-model="query.processingStatus" |
||||||
|
multiple |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.processingStatus" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-form> |
||||||
|
<div class="flex between mt-20 mb-26"> |
||||||
|
<div> |
||||||
|
<!-- <el-button type="primary" @click="handleExport" |
||||||
|
>数据导出</el-button |
||||||
|
> --> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<el-button type="primary" @click="getList"> |
||||||
|
<template #icon |
||||||
|
><icon name="el-icon-Search" |
||||||
|
/></template> |
||||||
|
查询</el-button |
||||||
|
> |
||||||
|
<el-button @click="reset">重置</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<div class="table-container" v-loading="loading"> |
||||||
|
<el-table :data="list" ref="tableRef"> |
||||||
|
<el-table-column |
||||||
|
label="投诉渠道" |
||||||
|
prop="channelForFilingComplaints" |
||||||
|
width="90" |
||||||
|
align="center" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理层级" |
||||||
|
prop="acceptanceLevel" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理时间" |
||||||
|
prop="discoveryTime" |
||||||
|
width="160" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人" |
||||||
|
prop="responderName" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人电话" |
||||||
|
prop="responderPhone" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="被投诉单位" |
||||||
|
prop="involveDepartName" |
||||||
|
width="160" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="办理单位" |
||||||
|
show-overflow-tooltip |
||||||
|
width="160" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
>{{ row.handleSecondDepartName |
||||||
|
}}{{ row.handleThreeDepartName }}</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题类别" |
||||||
|
prop="involveProblem" |
||||||
|
width="200" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
getInvolveProblem( |
||||||
|
row.involveProblem, |
||||||
|
dict.suspectProblem |
||||||
|
) || "/" |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="业务类别" |
||||||
|
prop="businessTypeName" |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="处理情况简要描述" |
||||||
|
prop="checkStatusDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
width="200" |
||||||
|
/> |
||||||
|
<el-table-column label="初重信访" align="center" width="85"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
getDictLable( |
||||||
|
dict.initialPetition, |
||||||
|
row.initialPetition |
||||||
|
) |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="群众集访" width="85" align="center"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span v-if="row.massVisits === true">是</span> |
||||||
|
<span v-if="row.massVisits === false">否</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="办理状态" width="100"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tag |
||||||
|
:type=" |
||||||
|
row.processingStatus === |
||||||
|
ProcessingStatus.COMPLETED |
||||||
|
? 'success' |
||||||
|
: 'primary' |
||||||
|
" |
||||||
|
v-if="row.processingStatus" |
||||||
|
>{{ |
||||||
|
getDictLable( |
||||||
|
dict.processingStatus, |
||||||
|
row.processingStatus |
||||||
|
) |
||||||
|
}}</el-tag |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="操作" width="80" fixed="right"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleAction(row)" |
||||||
|
v-if="row.id" |
||||||
|
>详情</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
<div class="flex end mt-8"> |
||||||
|
<el-pagination |
||||||
|
@size-change="getList" |
||||||
|
@current-change="getList" |
||||||
|
:current-page="query.current" |
||||||
|
:page-sizes="[10, 20, 50]" |
||||||
|
:page-size="query.size" |
||||||
|
v-model:current-page="query.current" |
||||||
|
layout="total, sizes, prev, pager, next" |
||||||
|
:total="total" |
||||||
|
> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<negative-dialog |
||||||
|
v-model="show" |
||||||
|
:id="activeNegativeId" |
||||||
|
@close="show = false" |
||||||
|
ref="negativeDialogRef" |
||||||
|
/> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { ProcessingStatus } from "@/enums/flowEnums"; |
||||||
|
import { ProblemSources } from "@/enums/dictEnums"; |
||||||
|
import { listNegativeXf } from "@/api/books"; |
||||||
|
import { getDictLable, getInvolveProblem } from "@/utils/util"; |
||||||
|
|
||||||
|
import useCatchStore from "@/stores/modules/catch"; |
||||||
|
|
||||||
|
const catchStore = useCatchStore(); |
||||||
|
const dict = catchStore.getDicts([ |
||||||
|
"initialPetition", |
||||||
|
"processingStatus", |
||||||
|
"suspectProblem", |
||||||
|
]); |
||||||
|
|
||||||
|
const query = ref({ |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}); |
||||||
|
|
||||||
|
const list = ref([]); |
||||||
|
const total = ref(0); |
||||||
|
|
||||||
|
const loading = ref(false); |
||||||
|
function getList() { |
||||||
|
loading.value = true; |
||||||
|
listNegativeXf(query.value, ProblemSources.GJXFPT).then((data) => { |
||||||
|
list.value = data.records; |
||||||
|
total.value = data.total; |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function reset() { |
||||||
|
query.value = { |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}; |
||||||
|
getList(); |
||||||
|
} |
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
getList(); |
||||||
|
}); |
||||||
|
|
||||||
|
const show = ref(false); |
||||||
|
const activeNegativeId = ref(""); |
||||||
|
|
||||||
|
function handleAction(row) { |
||||||
|
show.value = true; |
||||||
|
activeNegativeId.value = row.id; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -0,0 +1,258 @@ |
|||||||
|
<template> |
||||||
|
<div class="container"> |
||||||
|
<header> |
||||||
|
<el-form :label-width="140"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="6"> </el-col> |
||||||
|
</el-row> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">基本信息</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 400px"> |
||||||
|
<el-form-item label="监督发现问题时间"> |
||||||
|
<date-time-range-picker-ext |
||||||
|
v-model="query.discoveryTime" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="问题内容" |
||||||
|
v-model="query.thingDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
|
||||||
|
<el-select |
||||||
|
style="width: 160px" |
||||||
|
placeholder="办理状态" |
||||||
|
clearable |
||||||
|
v-model="query.processingStatus" |
||||||
|
multiple |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.processingStatus" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="form-row flex"> |
||||||
|
<label class="text-center">核查情况</label> |
||||||
|
<div class="flex wrap query-box"> |
||||||
|
<div style="width: 190px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.handleDepartId" |
||||||
|
placeholder="监督机构" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<div style="width: 190px"> |
||||||
|
<depart-tree-select |
||||||
|
v-model="query.involveDepartId" |
||||||
|
placeholder="被监督机构" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<el-input |
||||||
|
placeholder="回复情况" |
||||||
|
v-model="query.checkStatusDesc" |
||||||
|
clearable |
||||||
|
style="width: 260px" |
||||||
|
/> |
||||||
|
<div class="flex gap-4"> |
||||||
|
<el-select |
||||||
|
v-model="query.blameKey" |
||||||
|
style="width: 90px" |
||||||
|
@change="delete query.blameValue" |
||||||
|
> |
||||||
|
<el-option value="name" label="姓名" /> |
||||||
|
<el-option value="empNo" label="警号" /> |
||||||
|
<el-option value="idCode" label="身份证" /> |
||||||
|
</el-select> |
||||||
|
<el-input |
||||||
|
placeholder="问责人员(民警、辅警)" |
||||||
|
v-model="query.blameValue" |
||||||
|
clearable |
||||||
|
style="width: 190px" |
||||||
|
/> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-form> |
||||||
|
<div class="flex between mt-20 mb-26"> |
||||||
|
<div> |
||||||
|
<!-- <el-button type="primary" @click="handleExport" |
||||||
|
>数据导出</el-button |
||||||
|
> --> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<el-button type="primary" @click="getList"> |
||||||
|
<template #icon |
||||||
|
><icon name="el-icon-Search" |
||||||
|
/></template> |
||||||
|
查询</el-button |
||||||
|
> |
||||||
|
<el-button @click="reset">重置</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<div class="table-container" v-loading="loading"> |
||||||
|
<el-table :data="list" ref="tableRef"> |
||||||
|
<el-table-column type="index" width="50" /> |
||||||
|
<el-table-column |
||||||
|
label="监督机构" |
||||||
|
show-overflow-tooltip |
||||||
|
width="160" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
>{{ row.handleSecondDepartName |
||||||
|
}}{{ row.handleThreeDepartName }}</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="被监督机构" |
||||||
|
prop="involveDepartName" |
||||||
|
width="160" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
|
||||||
|
<el-table-column |
||||||
|
label="监督发现问题时间" |
||||||
|
prop="discoveryTime" |
||||||
|
width="150" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
|
||||||
|
<el-table-column |
||||||
|
label="回复情况" |
||||||
|
prop="checkStatusDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="是否属实" |
||||||
|
prop="checkStatusName" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
|
||||||
|
<el-table-column label="办理状态" width="100"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tag |
||||||
|
:type=" |
||||||
|
row.processingStatus === |
||||||
|
ProcessingStatus.COMPLETED |
||||||
|
? 'success' |
||||||
|
: 'primary' |
||||||
|
" |
||||||
|
v-if="row.processingStatus" |
||||||
|
>{{ |
||||||
|
getDictLable( |
||||||
|
dict.processingStatus, |
||||||
|
row.processingStatus |
||||||
|
) |
||||||
|
}}</el-tag |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="操作" width="80" fixed="right"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleAction(row)" |
||||||
|
>详情</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
<div class="flex end mt-8"> |
||||||
|
<el-pagination |
||||||
|
@size-change="getList" |
||||||
|
@current-change="getList" |
||||||
|
:current-page="query.current" |
||||||
|
:page-sizes="[10, 20, 50]" |
||||||
|
:page-size="query.size" |
||||||
|
v-model:current-page="query.current" |
||||||
|
layout="total, sizes, prev, pager, next" |
||||||
|
:total="total" |
||||||
|
> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<negative-dialog |
||||||
|
v-model="show" |
||||||
|
:id="activeNegativeId" |
||||||
|
@close="show = false" |
||||||
|
ref="negativeDialogRef" |
||||||
|
/> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { ProcessingStatus } from "@/enums/flowEnums"; |
||||||
|
import { listNegativeXcdc } from "@/api/books"; |
||||||
|
import { getDictLable } from "@/utils/util"; |
||||||
|
|
||||||
|
import useCatchStore from "@/stores/modules/catch"; |
||||||
|
|
||||||
|
const catchStore = useCatchStore(); |
||||||
|
const dict = catchStore.getDicts([ |
||||||
|
"businessType", |
||||||
|
"inspectCase", |
||||||
|
"isRectify", |
||||||
|
"processingStatus", |
||||||
|
"suspectProblem", |
||||||
|
"policeType", |
||||||
|
"specialSupervision", |
||||||
|
]); |
||||||
|
|
||||||
|
const query = ref({ |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}); |
||||||
|
|
||||||
|
const list = ref([]); |
||||||
|
const total = ref(0); |
||||||
|
|
||||||
|
const loading = ref(false); |
||||||
|
function getList() { |
||||||
|
loading.value = true; |
||||||
|
listNegativeXcdc(query.value).then((data) => { |
||||||
|
list.value = data.records; |
||||||
|
total.value = data.total; |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function reset() { |
||||||
|
query.value = { |
||||||
|
current: 1, |
||||||
|
size: 10, |
||||||
|
blameKey: "name", |
||||||
|
}; |
||||||
|
getList(); |
||||||
|
} |
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
getList(); |
||||||
|
}); |
||||||
|
|
||||||
|
const show = ref(false); |
||||||
|
const activeNegativeId = ref(""); |
||||||
|
|
||||||
|
function handleAction(row) { |
||||||
|
show.value = true; |
||||||
|
activeNegativeId.value = row.id; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
Loading…
Reference in new issue