Browse Source

fix:1、禁闭管理涉及问题下发; 2、信访大屏数字布局调整;3、信访大屏湖南地图数据展示

main
pengwei 9 months ago
parent
commit
69f37c5750
  1. 10
      src/api/work/confinement.ts
  2. 3
      src/components/datav/tabs.vue
  3. 11
      src/components/negative/dialog.vue
  4. 155
      src/components/negative/verify.vue
  5. 105
      src/views/datav/MailVisits.vue

10
src/api/work/confinement.ts

@ -6,6 +6,16 @@ export const getConfinementList = (query)=>{
query
})
}
//无权限判断的分页查询
export const getConfinementListAll =(query)=>{
return request.get({
url:'/confinement/listALl',
query
})
}
//新增
export const InsertConfinement = (body) =>{
return request.post({

3
src/components/datav/tabs.vue

@ -114,6 +114,9 @@ function handleChangeActiveTab(item) {
}
}
}
.tabs-content{
min-width: 300px;
}
.tab-title {
margin-bottom: 4px;
cursor: pointer;

11
src/components/negative/dialog.vue

@ -136,8 +136,11 @@
</el-col>
<el-col :span="19" style="height: 100%">
<el-scrollbar max-height="100%" class="main-container">
<!--提回-->
<negative-sign-return-description />
<!-- 延期-->
<negative-apply-extension-description />
<!-- 问题信息-->
<negative-description />
<div
class="row mt-10"
@ -161,6 +164,7 @@
verifyEditFlag
"
>
<!-- 核查办理-->
<negative-verify
ref="componentRef"
@submit="handleSubmitExecute"
@ -174,9 +178,11 @@
) > -1 && !verifyEditFlag
"
>
<!-- 核查办理查看-->
<negative-verify-description />
</template>
<template v-if="approves.length">
<!-- 审批意见-->
<negative-approve-description />
</template>
<div
@ -208,15 +214,18 @@
-1
"
>
<!-- 办理单位-->
<negative-distribute ref="componentRef" />
</template>
</template>
<!-- 会签-->
<negative-countersign-description />
<template
v-if="
components.indexOf('negative-countersign') > -1
"
>
<!-- 会签意见-->
<negative-countersign
ref="componentRef"
@submit="handleSubmitExecute"
@ -250,6 +259,7 @@
</div>
</div>
</div>
<!-- 抽检-->
<el-form
class="mt-20"
:model="formData"
@ -362,6 +372,7 @@
/>
</template>
<template v-if="item.actionKey.includes('apply_extension')">
<!-- 申请延期-->
<negative-apply-extension
:ref="(el) => setActionItemRef(item.actionKey, el)"
@submit="handleSubmitExecute"

155
src/components/negative/verify.vue

@ -52,7 +52,8 @@
negative.problemSourcesCode ===
ProblemSources.XF12337
"
>无法办理</el-radio
>无法办理
</el-radio
>
</el-radio-group>
</el-form-item>
@ -132,7 +133,7 @@
trigger: ['blur'],
}"
>
<el-input-number v-model="form.rectifyRestrictionDays" />
<el-input-number v-model="form.rectifyRestrictionDays"/>
<span class="ml-8"></span>
</el-form-item>
</el-col>
@ -441,7 +442,7 @@
size="small"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加问题
</el-button>
@ -463,7 +464,7 @@
size="small"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加问题
</el-button>
@ -606,6 +607,7 @@
/>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="item.handleResultCode?.includes('11')"
@ -657,6 +659,7 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="督察措施"
@ -694,7 +697,43 @@
</el-form-item>
</el-col>
</template>
</el-row>
<el-row>
<el-col>
<el-form-item label="禁闭关联">
<el-select v-model="item.confinementId" filterable popper-class="widthClass" :filter-method="fileConfinement">
<template #header>
<el-row>
<el-col :span="2">姓名</el-col>
<el-col :span="2">警号</el-col>
<el-col :span="3">部门</el-col>
<el-col :span="8">事由</el-col>
<el-col :span="4">禁闭时间</el-col>
</el-row>
</template>
<el-option v-for="(val,key) in confinementOpens" :key="key" :label="val.matter" :value="val.id">
<el-row>
<el-col :span="2">{{ val.name }}</el-col>
<el-col :span="2">{{ val.empNo }}</el-col>
<el-col :span="3">
<div class="flex gap-4">
<span>{{ val.departShortName ||'/' }}</span>
</div>
</el-col>
<el-col :span="8">
<el-tooltip :content="val.matter" placement="top">
<el-text truncated> {{val.matter}}</el-text>
</el-tooltip>
</el-col>
<el-col :span="4">
{{val.startTime + "-" +val.endTime}}
</el-col>
</el-row>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="flex center" style="width: 100%">
@ -704,13 +743,13 @@
@click="handleAddPersonalBlame"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加涉及人员
</el-button>
</div>
</el-form-item>
<el-divider />
<el-divider/>
<el-form-item
label-position="top"
prop="blameLeaders"
@ -906,6 +945,45 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="禁闭关联">
<el-select
filterable
:filter-method="fileConfinement"
:prop="`blameLeaders.${index}.leadonfinementId`"
popper-class="widthClass" >
<template #header>
<el-row>
<el-col :span="2">姓名</el-col>
<el-col :span="2">警号</el-col>
<el-col :span="3">部门</el-col>
<el-col :span="8">事由</el-col>
<el-col :span="4">禁闭时间</el-col>
</el-row>
</template>
<el-option v-for="(val,key) in confinementOpens" :key="key" :label="val.matter" :value="val.id">
<el-row>
<el-col :span="2">{{ val.name }}</el-col>
<el-col :span="2">{{ val.empNo }}</el-col>
<el-col :span="3">
<div class="flex gap-4">
<span>{{ val.departShortName ||'/' }}</span>
</div>
</el-col>
<el-col :span="8">
<el-tooltip :content="val.matter" placement="top">
<el-text truncated> {{val.matter}}</el-text>
</el-tooltip>
</el-col>
<el-col :span="4">
{{val.startTime + "-" +val.endTime}}
</el-col>
</el-row>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="item.leadHandleResultCode?.includes('11')"
@ -941,7 +1019,7 @@
@click="handleAddBlameLeader"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加涉及领导
</el-button>
@ -1176,7 +1254,7 @@
size="small"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加问题
</el-button>
@ -1197,7 +1275,7 @@
size="small"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加问题
</el-button>
@ -1316,7 +1394,7 @@
negative.problemSourcesCode === ProblemSources.XF12337
"
>
<el-divider />
<el-divider/>
<h5>信访办理</h5>
<el-form-item
prop="handlePolices"
@ -1356,7 +1434,7 @@
@click="form.handlePolices.push({})"
>
<template #icon>
<icon name="el-icon-Plus" />
<icon name="el-icon-Plus"/>
</template>
添加经办人
</el-button>
@ -1367,7 +1445,7 @@
@click="form.handlePolices.splice(index, 1)"
>
<template #icon>
<icon name="el-icon-Delete" />
<icon name="el-icon-Delete"/>
</template>
删除经办人
</el-button>
@ -1400,7 +1478,7 @@
:isLeader="true"
/>
<span class="ml-20 text-right" style="width: 80px">警号</span>
<el-input v-model="form.visitingLeaderEmpNo" placeholder="接访领导警号" style="width: 240px" />
<el-input v-model="form.visitingLeaderEmpNo" placeholder="接访领导警号" style="width: 240px"/>
</div>
</el-form-item>
<el-form-item
@ -1510,12 +1588,12 @@
:problemSourcesCode="negative.problemSourcesCode"
/>
</div>
<file-list v-model:files="form.files" :removeEnable="true" />
<file-list v-model:files="form.files" :removeEnable="true"/>
</el-form-item>
</el-form>
</template>
<script lang="ts" setup>
import { BASE_PATH } from "@/api/request";
import {BASE_PATH} from "@/api/request";
import {
InspectCase,
IsRectify,
@ -1529,7 +1607,10 @@ import {
} from "@/enums/dictEnums";
import useCatchStore from "@/stores/modules/catch";
import feedback from "@/utils/feedback";
import {
getConfinementListAll
} from "@/api/work/confinement";
//
const catchSotre = useCatchStore();
const dict = catchSotre.getDicts([
"inspectCase",
@ -1551,11 +1632,47 @@ const negative = inject("negative");
const form = ref({
handlePolices: [{}],
});
//
let confinementList = ref([])
let confinementOpens = ref([])
/**
* 禁闭信息入参
* */
let confinementQuery = ref({
current: 1,
size: 10000,
departBranch: false
})
/**
* 获取禁闭信息
* */
const getConfinementData = async () => {
const res = await getConfinementListAll(confinementQuery.value);
confinementList.value = res.records
confinementOpens.value=res.records
}
/**
* 下拉搜索过滤数据(姓名警号)
* @param query 输入参数
*
* */
const fileConfinement = (query)=>{
if(query){
confinementOpens.value = confinementList.value.filter(s => s.name.includes(query) || s.empNo.includes(query))
}else{
confinementOpens.value=confinementList.value
}
}
const problemIsTrue = computed(() => {
return form.value.checkStatus !== InspectCase.FALSE;
});
getConfinementData();
getFormData();
watch(negative, () => {
@ -1829,7 +1946,13 @@ defineExpose({
getData,
});
</script>
<style>
.widthClass{
min-width: 50% !important;
}
</style>
<style lang="scss" scoped>
.el-form-item .el-form-item {
margin-bottom: 18px;
}

105
src/views/datav/MailVisits.vue

@ -7,7 +7,7 @@
<el-col :span="6">
<datav-card title="初访重访情况">
<el-row class="mb-32">
<el-col :span="8">
<el-col :span="12">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentLeftOverview.firstMail }}
@ -17,7 +17,7 @@
</div>
</div>
</el-col>
<el-col :span="8">
<el-col :span="12">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentLeftOverview.repeatMail }}
@ -27,16 +27,7 @@
</div>
</div>
</el-col>
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentLeftOverview.leaderMail }}
</div>
<div class="descriptions_label">
领导接访数
</div>
</div>
</el-col>
</el-row>
<datav-card>
<datav-tabs v-model="activeTab" ref="firstAndRepeat">
@ -44,6 +35,7 @@
<datav-tabs
v-model="fxsjFirstAndRepeatTab"
type="bottom-button"
>
<datav-tab-item label="初信初访" name="1">
<el-scrollbar height="300px">
@ -52,6 +44,7 @@
size="large"
:max="11"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
@ -65,16 +58,7 @@
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="领导接访" name="3">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjLeaderViewMailList"
:max="11"
size="large"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
@ -99,16 +83,7 @@
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="领导接访" name="3">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdLeaderViewMailList"
:max="11"
size="large"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
</datav-tabs>
@ -227,8 +202,7 @@
<el-col :span="6">
<datav-card title="群众集访情况">
<el-row class="mb-32">
<el-col >
<el-col :span="12">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentRightOverview.mass }}
@ -238,7 +212,18 @@
</div>
</div>
</el-col>
<el-col :span="12">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentLeftOverview.leaderMail }}
</div>
<div class="descriptions_label">
领导接访数
</div>
</div>
</el-col>
</el-row>
<datav-card>
<datav-tabs v-model="activeTabRight" ref="entanglement">
<datav-tab-item label="分县市局" name="1">
@ -246,8 +231,17 @@
type="bottom-button"
v-model="fxsjEntanglementTab"
>
<datav-tab-item label="群体集访" name="3">
<datav-tab-item label="领导接访" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjLeaderViewMailList"
:max="11"
size="large"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="群体集访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjMassMailList"
@ -262,9 +256,19 @@
<datav-tab-item label="局属单位" name="2">
<datav-tabs
type="bottom-button"
>
<datav-tab-item label="群体集访" name="3">
>
<datav-tab-item label="领导接访" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdLeaderViewMailList"
:max="11"
size="large"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="群体集访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdMassMailList"
@ -441,20 +445,19 @@ const option = ref({
trigger: 'item',
position: 'bottom',
formatter: function (params) {
console.log(params)
const dataItem = mailMapIconList.value.find(item => item.name.includes(params.name.substring(0, 2)));
//
if (dataItem) {
return `
<div class="tooltip">
<div class="tooltip-title">${dataItem.originalName}</div>
<div class="tooltip-title">${dataItem.originalName} </div>
<div class="tooltip-content">
<ul class="tooltip-ul" >
<li>信访总件数 <span>${dataItem.total}</span></li>
<li>国家信访 <span>${dataItem.countryTotal}</span></li>
<li>公安部信访 <span>${dataItem.policeTotal}</span></li>
<li>局长信箱 <span>${dataItem.commissionerTotal}</span></li>
<li>12337信访 <span>${dataItem.numTotal}</span></li>
<li>国家信访 <span> ${dataItem.countryTotal }</span></li>
<li>公安部信访 <span> ${dataItem.policeTotal }</span></li>
<li>局长信箱 <span> ${dataItem.commissionerTotal }</span></li>
<li>12337信访 <span>${dataItem.numTotal }</span></li>
</ul>
</div>
</div>`;
@ -840,9 +843,11 @@ const getAllMailCountData = async (timeValue = time.value) => {
const getMailMapIconData = async (timeValue = time.value) => {
console.log('-------执行')
const res = await getMailMapIcon(timeValue);
const mappedData = mapOrgNameMapping(res.mailMapIconList, "total");
mailMapIconList.value = mappedData;
console.log('-------执行2')
console.log(mailMapIconList)
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
@ -921,7 +926,7 @@ const currentRightOverview = computed(() => {
// region
const fxsjFirstAndRepeatAnimation = () => {
fxsjFirstAndRepeatTab.value = (parseInt(fxsjFirstAndRepeatTab.value) % 3 + 1).toString();
fxsjFirstAndRepeatTab.value = (parseInt(fxsjFirstAndRepeatTab.value) % 2 + 1).toString();
};
fxsjFirstAndRepeatIntervalId = setInterval(fxsjFirstAndRepeatAnimation, 3000);
//
@ -966,7 +971,7 @@ const mailTrendAnimation = () => {
mailTrendIntervalId = setInterval(mailTrendAnimation, 2000);
// 访访
const fxsjEntanglementAnimation = () => {
fxsjEntanglementTab.value = (parseInt(fxsjEntanglementTab.value) % 3 + 1).toString();
fxsjEntanglementTab.value = (parseInt(fxsjEntanglementTab.value) % 2 + 1).toString();
};
fxsjEntanglementIntervalId = setInterval(fxsjEntanglementAnimation, 3000);
// //
@ -1116,6 +1121,8 @@ function open(path) {
}
.tooltip-content ul li {
display: flex;
justify-content: space-around;
height: 26px;
color: #597AE9;
font-weight: 400;
@ -1123,11 +1130,11 @@ function open(path) {
}
.tooltip-ul span {
display: inline-block;
float: right;
width: 55px;
color: #fff;
font-size: 14px;
text-align: center; /* 水平居中 */
//text-align: center; /* */
}
}

Loading…
Cancel
Save