Browse Source

fit:信访投诉、局长信箱改造

main
pengwei 7 months ago
parent
commit
e989c1848f
  1. 29
      src/api/data/dataThread.ts
  2. 6
      src/components/negative/add.vue
  3. 80
      src/views/data/Gabxf.vue
  4. 79
      src/views/data/Gjxf.vue
  5. 84
      src/views/data/Mailbox.vue
  6. 45
      src/views/data/PetitionComplaint.vue

29
src/api/data/dataThread.ts

@ -0,0 +1,29 @@
import request from "@/api/request";
export function listDataThread(query) {
return request.get({
url: '/books/dataThread',
query
});
}
/**
*
* */
export function replenishInvolvedIssueDataFun(query){
return request.get({
url:'/books/dataThread/replenishInvolvedIssue',
query
})
}
/**
*
* */
export function delDataThreadFun(query){
return request.del({
url:'/books/dataThread/delDataThread',
query
})
}

6
src/components/negative/add.vue

@ -102,8 +102,10 @@
form.problemSourcesCode === ProblemSources.XCDC form.problemSourcesCode === ProblemSources.XCDC
" "
> >
<el-form-item
<el-form-item-ext
label="通报期数" label="通报期数"
content="如未下拉项中找到对应的通报期数,请前往通报管理中补充对应的通报"
prop="reportNumber" prop="reportNumber"
:rules="{ :rules="{
required: form.specialSupervision !== '2', required: form.specialSupervision !== '2',
@ -130,7 +132,7 @@
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item-ext>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>

80
src/views/data/Gabxf.vue

@ -95,6 +95,7 @@
> >
<el-button type="primary" @click="handleShowImportReplenish">集访导入</el-button> <el-button type="primary" @click="handleShowImportReplenish">集访导入</el-button>
<el-button type="primary" @click="handleShowldjfReplenish">领导接访导入</el-button> <el-button type="primary" @click="handleShowldjfReplenish">领导接访导入</el-button>
<el-button type="primary" @click="handleInvolvedIssue" >涉及问题导入</el-button>
<el-button type="primary" @click="handleExport">数据导出</el-button> <el-button type="primary" @click="handleExport">数据导出</el-button>
<el-badge <el-badge
:value="distributeList.length" :value="distributeList.length"
@ -368,6 +369,56 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="涉及问题导入" v-model="involvedIssueShow" width="60vw" :lock-scroll="false">
<div v-loading="involvedIssueLoading">
<el-upload
drag
:multiple="false"
:auto-upload="false"
:show-file-list="false"
v-model:file-list="fileList"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
class="mt-20"
>
<template v-if="fileList.length == 0">
<el-icon class="el-icon--upload">
<upload-filled/>
</el-icon>
<div class="el-upload__text">
<p>点击或拖拽文件到此区域上传</p>
</div>
</template>
<template v-else>
<el-icon class="el-icon--upload"
><Select
/></el-icon>
<div class="el-upload__text">
已选择文件{{
fileList[fileList.length - 1].name
}}
</div>
</template>
</el-upload>
<div class="mt-20">
<span>文件模板</span>
<a
class="link"
:href="`${BASE_PATH}/templates/涉及问题导入模板.xlsx`"
target="__blank"
>涉及问题导入模板.xlsx 下载</a
>
</div>
<footer class="flex end mt-20 v-center">
<el-button type="primary"
size="large"
@click="handleInvolvedIssueNext"
:disabled="involvedIssueLoading">
确认
</el-button>
</footer>
</div>
</el-dialog>
</template> </template>
<script setup> <script setup>
@ -375,6 +426,7 @@ import {
importPetitionComplaint, importPetitionComplaint,
listPetitionComplaint, listPetitionComplaint,
delPetitionComplaint, delPetitionComplaint,
replenishInvolvedIssueFun
} from "@/api/data/petitionComplaint"; } from "@/api/data/petitionComplaint";
import { ProblemSources, DistributionState } from "@/enums/dictEnums"; import { ProblemSources, DistributionState } from "@/enums/dictEnums";
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
@ -488,6 +540,34 @@ function successFun(){
replenishShow.value=false replenishShow.value=false
getList() getList()
} }
const involvedIssueShow = ref(false)
const involvedIssueLoading = ref(false)
const fileList= ref([])
/**
* 涉及问题导入
* */
function handleInvolvedIssue(){
involvedIssueShow.value=true;
}
const handleInvolvedIssueNext =async ()=>{
const formData = new FormData();
formData.append("file", fileList.value[fileList.value.length - 1].raw);
involvedIssueLoading.value = true;
try {
await replenishInvolvedIssueFun(formData);
feedback.msgSuccess("操作成功");
involvedIssueShow.value=false;
involvedIssueLoading.value=false;
} catch (e) {
involvedIssueLoading.value = false;
involvedIssueShow.value=false;
throw e;
}
}
/** /**
* 导出数据 * 导出数据
* */ * */

79
src/views/data/Gjxf.vue

@ -92,6 +92,7 @@
> >
<el-button type="primary" @click="handleShowImportReplenish">集访导入</el-button> <el-button type="primary" @click="handleShowImportReplenish">集访导入</el-button>
<el-button type="primary" @click="handleShowldjfReplenish">领导接访导入</el-button> <el-button type="primary" @click="handleShowldjfReplenish">领导接访导入</el-button>
<el-button type="primary" @click="handleInvolvedIssue" >涉及问题导入</el-button>
<el-button type="primary" @click="handleExport">数据导出</el-button> <el-button type="primary" @click="handleExport">数据导出</el-button>
<el-badge <el-badge
:value="distributeList.length" :value="distributeList.length"
@ -357,11 +358,62 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="涉及问题导入" v-model="involvedIssueShow" width="60vw" :lock-scroll="false">
<div v-loading="involvedIssueLoading">
<el-upload
drag
:multiple="false"
:auto-upload="false"
:show-file-list="false"
v-model:file-list="fileList"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
class="mt-20"
>
<template v-if="fileList.length == 0">
<el-icon class="el-icon--upload">
<upload-filled/>
</el-icon>
<div class="el-upload__text">
<p>点击或拖拽文件到此区域上传</p>
</div>
</template>
<template v-else>
<el-icon class="el-icon--upload"
><Select
/></el-icon>
<div class="el-upload__text">
已选择文件{{
fileList[fileList.length - 1].name
}}
</div>
</template>
</el-upload>
<div class="mt-20">
<span>文件模板</span>
<a
class="link"
:href="`${BASE_PATH}/templates/涉及问题导入模板.xlsx`"
target="__blank"
>涉及问题导入模板.xlsx 下载</a
>
</div>
<footer class="flex end mt-20 v-center">
<el-button type="primary"
size="large"
@click="handleInvolvedIssueNext"
:disabled="involvedIssueLoading">
确认
</el-button>
</footer>
</div>
</el-dialog>
</template> </template>
<script setup> <script setup>
import { import {
listPetitionComplaint, listPetitionComplaint,
delPetitionComplaint, delPetitionComplaint,
replenishInvolvedIssueFun
} from "@/api/data/petitionComplaint"; } from "@/api/data/petitionComplaint";
import { ProblemSources, DistributionState } from "@/enums/dictEnums"; import { ProblemSources, DistributionState } from "@/enums/dictEnums";
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
@ -382,8 +434,9 @@ const query = ref({
responderKey: "name", responderKey: "name",
problemSourcesCode: ProblemSources.GJXFPT, problemSourcesCode: ProblemSources.GJXFPT,
}); });
const involvedIssueShow = ref(false)
const involvedIssueLoading = ref(false)
const fileList= ref([])
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
@ -408,6 +461,28 @@ function handleShowldjfReplenish(){
replenishType2.value='2' replenishType2.value='2'
replenishShow2.value=true replenishShow2.value=true
} }
/**
* 涉及问题导入
* */
function handleInvolvedIssue(){
involvedIssueShow.value=true;
}
const handleInvolvedIssueNext =async ()=>{
const formData = new FormData();
formData.append("file", fileList.value[fileList.value.length - 1].raw);
involvedIssueLoading.value = true;
try {
await replenishInvolvedIssueFun(formData);
feedback.msgSuccess("操作成功");
involvedIssueShow.value=false;
involvedIssueLoading.value=false;
} catch (e) {
involvedIssueLoading.value = false;
involvedIssueShow.value=false;
throw e;
}
}
/** /**
* 导出数据 * 导出数据
* */ * */

84
src/views/data/Mailbox.vue

@ -47,7 +47,10 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="mb-25 flex end"> <div class="mb-25 flex between">
<div>
<el-button type="primary" @click="handleInvolvedIssue" >涉及问题导入</el-button>
</div>
<div> <div>
<el-button type="primary" @click="getList"> <el-button type="primary" @click="getList">
<template #icon> <template #icon>
@ -116,6 +119,7 @@
<el-table-column label="操作" width="200"> <el-table-column label="操作" width="200">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button
v-if="row.checkStatus != 3"
type="primary" type="primary"
link link
@click="handleAction(row)" @click="handleAction(row)"
@ -144,6 +148,56 @@
:id="activeNegativeId" :id="activeNegativeId"
@close="show = false" @close="show = false"
/> />
<el-dialog title="涉及问题导入" v-model="involvedIssueShow" width="60vw" :lock-scroll="false">
<div v-loading="involvedIssueLoading">
<el-upload
drag
:multiple="false"
:auto-upload="false"
:show-file-list="false"
v-model:file-list="fileList"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
class="mt-20"
>
<template v-if="fileList.length == 0">
<el-icon class="el-icon--upload">
<upload-filled/>
</el-icon>
<div class="el-upload__text">
<p>点击或拖拽文件到此区域上传</p>
</div>
</template>
<template v-else>
<el-icon class="el-icon--upload"
><Select
/></el-icon>
<div class="el-upload__text">
已选择文件{{
fileList[fileList.length - 1].name
}}
</div>
</template>
</el-upload>
<div class="mt-20">
<span>文件模板</span>
<a
class="link"
:href="`${BASE_PATH}/templates/涉及问题导入模板.xlsx`"
target="__blank"
>涉及问题导入模板.xlsx 下载</a
>
</div>
<footer class="flex end mt-20 v-center">
<el-button type="primary"
size="large"
@click="handleInvolvedIssueNext"
:disabled="involvedIssueLoading">
确认
</el-button>
</footer>
</div>
</el-dialog>
</template> </template>
<script setup> <script setup>
import { ProcessingStatus } from "@/enums/flowEnums"; import { ProcessingStatus } from "@/enums/flowEnums";
@ -153,6 +207,8 @@ import {
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
import { getDictLable, getYearTime} from "@/utils/util"; import { getDictLable, getYearTime} from "@/utils/util";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
import {replenishInvolvedIssueDataFun} from "@/api/data/dataThread";
import {BASE_PATH} from "@/api/request";
const route = useRoute() const route = useRoute()
const catchStore = useCatchStore(); const catchStore = useCatchStore();
const dict = catchStore.getDicts(["distributionState"]); const dict = catchStore.getDicts(["distributionState"]);
@ -201,6 +257,32 @@ function handleAction(row) {
activeNegativeId.value = row.id; activeNegativeId.value = row.id;
} }
const involvedIssueShow =ref(false);
const involvedIssueLoading =ref(false);
const fileList = ref([])
/**
* 涉及问题导入
* */
function handleInvolvedIssue(){
console.log('involvedIssueShow',involvedIssueShow.value)
involvedIssueShow.value=true;
}
const handleInvolvedIssueNext =async ()=>{
const formData = new FormData();
formData.append("file", fileList.value[fileList.value.length - 1].raw);
involvedIssueLoading.value = true;
try {
await replenishInvolvedIssueDataFun(formData);
feedback.msgSuccess("操作成功");
involvedIssueShow.value=false;
involvedIssueLoading.value=false;
} catch (e) {
involvedIssueLoading.value = false;
involvedIssueShow.value=false;
throw e;
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
</style> </style>

45
src/views/data/PetitionComplaint.vue

@ -93,6 +93,7 @@
> >
<el-option label="国家信访" value="21"></el-option> <el-option label="国家信访" value="21"></el-option>
<el-option label="公安部信访" value="22"></el-option> <el-option label="公安部信访" value="22"></el-option>
<el-option label="局长信箱" value="23"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -125,7 +126,13 @@
prop="channelForFilingComplaints" prop="channelForFilingComplaints"
width="90" width="90"
show-overflow-tooltip show-overflow-tooltip
/> >
<template #default="{row}">
{{
(row.tableName === 'gabxf')?(row.problemSourcesCode==='21'?'国家信访':'公安部信访'):'局长信箱'
}}
</template>
</el-table-column>
<el-table-column <el-table-column
label="信访方式" label="信访方式"
prop="petitionType" prop="petitionType"
@ -136,7 +143,20 @@
label="登记时间" label="登记时间"
prop="discoveryTime" prop="discoveryTime"
width="150" width="150"
/> >
<template #default="{row}">
{{timeFormat(row.discoveryTime)}}
</template>
</el-table-column>
<el-table-column
label="创建时间"
prop="discoveryTime"
width="150"
>
<template #default="{row}">
{{timeFormat(row.crtTime)}}
</template>
</el-table-column>
<el-table-column <el-table-column
label="信访人" label="信访人"
prop="responderName" prop="responderName"
@ -144,7 +164,7 @@
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column label="电话" prop="responderPhone" width="116" /> <el-table-column label="电话" prop="responderPhone" width="116" />
<el-table-column label="身份证号码" prop="responderIdCode" width="180" /> <!-- <el-table-column label="身份证号码" prop="responderIdCode" width="180" />-->
<el-table-column label="初重信访" align="center" width="60"> <el-table-column label="初重信访" align="center" width="60">
<template #default="{ row }"> <template #default="{ row }">
<span>{{ <span>{{
@ -247,8 +267,8 @@
</div> </div>
<div class="col col-12"> <div class="col col-12">
<label>投诉渠道</label> <label>投诉渠道</label>
<span>{{ <span> {{
activeRow.channelForFilingComplaints || "/" (activeRow.tableName === 'gabxf')?(activeRow.problemSourcesCode==='21'?'国家信访':'公安部信访'):'局长信箱'
}}</span> }}</span>
</div> </div>
<div class="col col-12"> <div class="col col-12">
@ -325,12 +345,19 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import {timeFormat} from '@/utils/util'
import { import {
listPetitionComplaint, listPetitionComplaint,
delPetitionComplaint, delPetitionComplaint,
} from "@/api/data/petitionComplaint"; } from "@/api/data/petitionComplaint";
import {
listDataThread,
delDataThreadFun
} from "@/api/data/dataThread";
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
import { getDictLable } from "@/utils/util"; import { getDictLable } from "@/utils/util";
@ -353,7 +380,7 @@ const query = ref({
const list = ref([]); const list = ref([]);
const total = ref(0); const total = ref(0);
function getList() { function getList() {
listPetitionComplaint(query.value).then((data) => { listDataThread(query.value).then((data) => {
list.value = data.records; list.value = data.records;
total.value = data.total; total.value = data.total;
}); });
@ -373,11 +400,12 @@ getList();
* 导出数据 * 导出数据
* */ * */
function handleExport() { function handleExport() {
window.open(`${BASE_PATH}/data/petitionComplaint/export/xf/xfts?` + new URLSearchParams(query.value).toString()) window.open(`${BASE_PATH}/books/dataThread/export?` + new URLSearchParams(query.value).toString())
} }
async function handleDel(row) { async function handleDel(row) {
await feedback.confirm("确定要删除该数据?"); await feedback.confirm("确定要删除该数据?");
await delPetitionComplaint(row.originId); console.log('originId:row.originId,tableName:row.tableName',row.tableName)
await delDataThreadFun({originId:row.originId,tableName:row.tableName});
getList(); getList();
} }
@ -395,6 +423,7 @@ const activeRow = ref({});
function handleDetail(row) { function handleDetail(row) {
activeRow.value = row; activeRow.value = row;
console.log(activeRow.value)
detailShow.value = true; detailShow.value = true;
} }
</script> </script>

Loading…
Cancel
Save