Browse Source

信访 维权二级屏幕

main
不爱学习的石同学 11 months ago
parent
commit
9e33c04a4d
  1. 7
      src/api/screen/rightsComfort.ts
  2. 34
      src/api/screen/sub1.ts
  3. 47
      src/api/screen/subScreen/subOneGlobal.ts
  4. 21
      src/api/screen/subScreen/subOneMailVisits.ts
  5. 27
      src/api/screen/subScreen/subOneRightsConfort.ts
  6. 8
      src/router/routes.ts
  7. 160
      src/views/datav/Gobal.vue
  8. 7
      src/views/datav/MailVisits.vue
  9. 964
      src/views/datav/RightsComfort.vue
  10. 984
      src/views/datav/Sub1.vue
  11. 3
      src/views/datav/subonedatav/SubOneCaseVerif.vue
  12. 602
      src/views/datav/subonedatav/SubOneGlobal.vue
  13. 101
      src/views/datav/subonedatav/SubOneMailVisits.vue
  14. 987
      src/views/datav/subonedatav/SubOneRightsComfort.vue
  15. 2
      src/views/datav/subonedatav/SubOneSceneInsp.vue
  16. 2
      src/views/datav/subonedatav/SubOneVideoInsp.vue

7
src/api/screen/rightsComfort.ts

@ -26,6 +26,13 @@ export function getALlComfortCount(times) {
}); });
} }
export function getComfortMapIcon(times) {
return request.get({
url: `/datav/rightsComfort/getComfortMapIcon?beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getPunishmentSituation(times) { export function getPunishmentSituation(times) {
return request.get({ return request.get({

34
src/api/screen/sub1.ts

@ -1,34 +0,0 @@
import request from "../request";
export function getSubOneStreetMap(departPId) {
return request.get({
url: `/datav/sub1/getSubOneStreetMap?departPId=${departPId}`
});
}
export function getSubOneSupervisionRank(departPId, times) {
return request.get({
url: `/datav/sub1/getSubOneSupervisionRank?departPId=${departPId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneOverView(departPId, times) {
return request.get({
url: `/datav/sub1/getSubOneOverView?departPId=${departPId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneTrend(departPId, year) {
return request.get({
url: `/datav/sub1/getSubOneTrend?departPId=${departPId}&year=${year}`
});
}
export function getSubOneCaseVerifyRank(departPId, times) {
return request.get({
url: `/datav/sub1/getSubOneCaseVerifyRank?departPId=${departPId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}

47
src/api/screen/subScreen/subOneGlobal.ts

@ -0,0 +1,47 @@
import request from "@/api/request";
export function getSubOneStreetMap(departId) {
return request.get({
url: `/datav/sub1/getSubOneStreetMap?departId=${departId}`
});
}
export function getSubOneOrganizationRank(departId, times) {
return request.get({
url: `/datav/sub1/getSubOneOrganizationRank?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneBusinessRate(departId, times) {
return request.get({
url: `/datav/sub1/getSubOneBusinessRate?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneAllCount(departId, times) {
return request.get({
url: `/datav/sub1/getSubOneAllCount?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneGlobalTrend(departId, year) {
return request.get({
url: `/datav/sub1/getSubOneGlobalTrend?departId=${departId}&year=${year}`
});
}
export function getSubOneStrongProblemRate(departId, times) {
return request.get({
url: `/datav/sub1/getSubOneStrongProblemRate?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneProblemBusinessRate(departId, times) {
return request.get({
url: `/datav/sub1/getSubOneProblemBusinessRate?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}

21
src/api/screen/subScreen/subOneMailVisits.ts

@ -7,4 +7,25 @@ export function getSubOneFirstAndRepeatMail(departId, times) {
return request.get({ return request.get({
url: `/datav/sub1/mailVisits/getSubOneFirstAndRepeatMail?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}` url: `/datav/sub1/mailVisits/getSubOneFirstAndRepeatMail?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
}); });
}
export function getSubOneMailTrend(departId, year) {
return request.get({
url: `/datav/sub1/mailVisits/getSubOneMailTrend?departId=${departId}&year=${year}`
});
}
export function getSubOneAllMailCount(departId, times) {
return request.get({
url: `/datav/sub1/mailVisits/getSubOneAllMailCount?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneEntanglementAndMassMail(departId, times) {
return request.get({
url: `/datav/sub1/mailVisits/getSubOneEntanglementAndMassMail?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
} }

27
src/api/screen/subScreen/subOneRightsConfort.ts

@ -0,0 +1,27 @@
import request from "@/api/request";
export function getSubOneALlComfortCount(departId, times) {
return request.get({
url: `/datav/sub1/rightsComfort/getSubOneALlComfortCount?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOnePoliceHurtSituationAndHurtType(departId, times) {
return request.get({
url: `/datav/sub1/rightsComfort/getSubOnePoliceHurtSituationAndHurtType?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
export function getSubOneCaseAriseSituationRate(departId, times) {
return request.get({
url: `/datav/sub1/rightsComfort/getSubOneCaseAriseSituationRate?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}

8
src/router/routes.ts

@ -74,8 +74,8 @@ export const routes = [
}, },
{ {
path: '/datav/sub1', path: '/datav/subOneGlobal',
component: () => import('@/views/datav/Sub1.vue'), component: () => import('@/views/datav/subonedatav/SubOneGlobal.vue'),
}, },
{ {
path: '/datav/subOneVideoInsp', path: '/datav/subOneVideoInsp',
@ -93,6 +93,10 @@ export const routes = [
path: '/datav/subOneMailVisits', path: '/datav/subOneMailVisits',
component: () => import('@/views/datav/subonedatav/SubOneMailVisits.vue'), component: () => import('@/views/datav/subonedatav/SubOneMailVisits.vue'),
}, },
{
path: '/datav/subOneRightsComfort',
component: () => import('@/views/datav/subonedatav/SubOneRightsComfort.vue'),
},
{ {
path: '/datav/test', path: '/datav/test',
component: () => import('@/api/mv/VideoComponent.vue'), component: () => import('@/api/mv/VideoComponent.vue'),

160
src/views/datav/Gobal.vue

@ -415,8 +415,8 @@ const getAllGlobalCountData = async (timeValue = time.value) => {
const res = await getAllGlobalCount(timeValue); const res = await getAllGlobalCount(timeValue);
overview.value = res.overview; overview.value = res.overview;
} }
const getGlobalRecentlyTrendByMonthData = async (timeValue = time.value) => { const getGlobalRecentlyTrendByMonthData = async (year = selectedYear.value) => {
const res = await getGlobalRecentlyTrendByMonth(timeValue); const res = await getGlobalRecentlyTrendByMonth(year);
const globalRecentlyTrendList = res.globalRecentlyTrendList; const globalRecentlyTrendList = res.globalRecentlyTrendList;
const categories = globalRecentlyTrendList.map(item => item.name); const categories = globalRecentlyTrendList.map(item => item.name);
const values = globalRecentlyTrendList.map(item => item.value); const values = globalRecentlyTrendList.map(item => item.value);
@ -424,93 +424,83 @@ const getGlobalRecentlyTrendByMonthData = async (timeValue = time.value) => {
proTrend.value.xAxis.data = categories; proTrend.value.xAxis.data = categories;
proTrend.value.series[0].data = values; proTrend.value.series[0].data = values;
} }
const getStrongProblemRateData = async (timeValue = time.value) => {
const res = await getStrongProblemRate(timeValue);
tcwtlist.value = res.tcwtlist;
}
// const getStrongProblemRate const getProblemBusinessRateData=async (timeValue=time.value)=>{
const res =await getProblemBusinessRate(timeValue);
wtlxlist.value = res.wtlxlist;
}
const getGlobalMapData= async(timeValue=time.value)=>{
const res =await getGlobalMap(timeValue);
const mappedData = res.globalTempMapVoList.map(item => {
let name;
switch (item.name) {
case '长沙县局':
name = '长沙县';
break;
case '芙蓉分局':
name = '芙蓉区';
break;
case '天心分局':
name = '天心区';
break;
case '岳麓分局':
name = '岳麓区';
break;
case '开福分局':
name = '开福区';
break;
case '雨花分局':
name = '雨花区';
break;
case '望城分局':
name = '望城区';
break;
case '宁乡市局':
name = '宁乡市';
break;
case '浏阳市局':
name = '浏阳市';
break;
case '高新分局':
name = '高新区';
break;
default:
name = item.name;
break;
}
return {
...item,
originalName: item.name, //
name: name,
value: item.totalPro,
};
});
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
const range30Percent = avg * 0.3 //
globalTempMapVoList.value = mappedData;
option.value.series[0].data = globalTempMapVoList;
option.value.visualMap.pieces = [
{gte: 0, lte: avg - range30Percent, label: "低于平均问题30%", color: "#4987F6"},
{gte: avg - range30Percent, lte: avg + range30Percent + 0.1, label: "平均问题上下浮动30%内", color: "#F6A149"},
{gte: avg + range30Percent, label: "高于平均问题30%", color: "#D34343"},
];
}
// endregion // endregion
// region // region
function getData() { function getData() {
getOrganizationRank(time.value).then((res) => { getOrganizationRankData();
fxsjlist.value = res.fxsjlist; getBusinessRateData();
jsdwlist.value = res.jsdwlist; getAllGlobalCountData();
}); getGlobalRecentlyTrendByMonthData();
getBusinessRate(time.value).then((res) => { getStrongProblemRateData();
ywzblist.value = res.ywzblist; getProblemBusinessRateData();
}); getGlobalMapData();
getAllGlobalCount(time.value).then((res) => {
overview.value = res.overview;
});
getGlobalRecentlyTrendByMonth(new Date().getFullYear()).then((res) => {
const globalRecentlyTrendList = res.globalRecentlyTrendList;
const categories = globalRecentlyTrendList.map(item => item.name);
const values = globalRecentlyTrendList.map(item => item.value);
//
proTrend.value.xAxis.data = categories;
proTrend.value.series[0].data = values;
});
getStrongProblemRate(time.value).then((res) => {
tcwtlist.value = res.tcwtlist;
});
getProblemBusinessRate(time.value).then((res) => {
wtlxlist.value = res.wtlxlist;
});
getGlobalMap(time.value).then(res => {
//
const mappedData = res.globalTempMapVoList.map(item => {
let name;
switch (item.name) {
case '长沙县局':
name = '长沙县';
break;
case '芙蓉分局':
name = '芙蓉区';
break;
case '天心分局':
name = '天心区';
break;
case '岳麓分局':
name = '岳麓区';
break;
case '开福分局':
name = '开福区';
break;
case '雨花分局':
name = '雨花区';
break;
case '望城分局':
name = '望城区';
break;
case '宁乡市局':
name = '宁乡市';
break;
case '浏阳市局':
name = '浏阳市';
break;
case '高新分局':
name = '高新区';
break;
default:
name = item.name;
break;
}
return {
...item,
originalName: item.name, //
name: name,
value: item.totalPro,
};
});
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
const range30Percent = avg * 0.3 //
globalTempMapVoList.value = mappedData;
option.value.series[0].data = globalTempMapVoList;
option.value.visualMap.pieces = [
{gte: 0, lte: avg - range30Percent, label: "低于平均问题30%", color: "#4987F6"},
{gte: avg - range30Percent, lte: avg + range30Percent + 0.1, label: "平均问题上下浮动30%内", color: "#F6A149"},
{gte: avg + range30Percent, label: "高于平均问题30%", color: "#D34343"},
];
})
} }
onMounted(() => { onMounted(() => {
@ -537,7 +527,7 @@ watch(time, () => {
const handleClick = (params) => { const handleClick = (params) => {
const departId = params.data.departId; const departId = params.data.departId;
const url = router.resolve({ const url = router.resolve({
path: "/datav/sub1", path: "/datav/subOneGlobal",
query: {departId: departId}, query: {departId: departId},
}).href; }).href;
window.open(url, "_blank"); window.open(url, "_blank");

7
src/views/datav/MailVisits.vue

@ -608,7 +608,6 @@ const gobalTempMapVoList = [
const option = ref({ const option = ref({
geo: { geo: {
map: "changsha", map: "changsha",
}, },
tooltip: { tooltip: {
trigger: 'item', trigger: 'item',
@ -646,7 +645,6 @@ const option = ref({
}, },
}, },
visualMap: { visualMap: {
type: "piecewise", type: "piecewise",
bottom: 10, bottom: 10,
pieces: [ pieces: [
@ -687,10 +685,7 @@ const option = ref({
borderColor: "#FF0000", // borderColor: "#FF0000", //
borderWidth: 4 // borderWidth: 4 //
}, },
data: gobalTempMapVoList.map(item => ({ data:[]
name: item.name,
value: item.totalPro // totalPro value
}))
} }
], ],
}) })

964
src/views/datav/RightsComfort.vue

File diff suppressed because it is too large Load Diff

984
src/views/datav/Sub1.vue

@ -1,984 +0,0 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<!-- <img src="/imgs/datav/sub1.png" alt="" class="relative pointer" @click="go">-->
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="督察问题">
<datav-tabs
v-model="activeOrgTab"
type="bottom-button"
>
<datav-tab-item label="派出所" name="1">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionPrecinctOverView.one }}
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionPrecinctOverView.two }}
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionPrecinctOverView.three }}
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionPrecinctOverView.four }}
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
title="整改率排名"
sub-title="完成数/问题数"
:data="supervisionPrecinctRank"
unit="%"
labelWidth="110"
remarkFontSize="14px"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="大队" name="2">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionTeamOverView.one }}
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionTeamOverView.two }}
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionTeamOverView.three }}
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ supervisionTeamOverView.four }}
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
title="整改率排名"
sub-title="完成数/问题数"
unit="%"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card title="警务评议">
<datav-tabs
v-model="activeOrgTab"
type="bottom-button"
>
<datav-tab-item label="派出所" name="1">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
title="整改率排名"
sub-title="已整改/问题数"
unit="%"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="大队" name="2">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
title="整改率排名"
sub-title="已整改/问题数"
unit="%"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
<el-col :span="12">
<datav-date-picker v-model="time"/>
<div class="flex gap-42">
<datav-statistic
:value="overview.one"
title="问题总数"
style="width: 20%"
/>
<datav-statistic
:value="overview.two"
title="处理中"
style="width: 20%"
/>
<datav-statistic
:value="overview.three"
title="涉及单位"
style="width: 20%"
/>
<datav-statistic
:value="overview.four"
title="涉及人员"
style="width: 20%"
/>
<datav-statistic
:value="overview.five"
title="办结率"
style="width: 20%"
/>
</div>
<v-charts
style="height: 360px"
:option="option"
autoresize
ref="chart"
/>
<datav-card title="问题趋势">
<datav-tabs v-model="activeMailTrend" @change="handleTabChange">
<datav-tab-item label="督察问题趋势" name="1">
<v-charts
style="width: 105%; height: 300px;"
:option="superviseProTrend"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="案件核查趋势" name="2">
<v-charts
style="width: 105%; height: 300px;"
:option="caseVerifyTrend"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="警务评议趋势" name="3">
<v-charts
style="width: 105%; height: 300px;"
:option="policeCommentTrend"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="信访投诉趋势" name="4">
<v-charts
style="width: 105%; height: 300px;"
:option="mailTrend"
autoresize
/>
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
<el-col :span="6">
<datav-card title="局长信箱">
<datav-tabs
v-model="activeOrgTab"
type="bottom-button"
>
<datav-tab-item label="派出所" name="1">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
title="整改率排名"
sub-title="已整改/问题数"
unit="%"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="大队" name="2">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
22%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
title="整改率排名"
sub-title="已整改/问题数"
unit="%"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card title="案件核查">
<datav-tabs
v-model="activeOrgTab"
type="bottom-button"
>
<datav-tab-item label="派出所" name="1">
<el-row class="mb-32">
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ caseVerifyPrecinctOverView.one }}
</div>
<div class="descriptions_label">
案件数
</div>
</div>
</el-col>
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ caseVerifyPrecinctOverView.two }}
</div>
<div class="descriptions_label">
查实数
</div>
</div>
</el-col>
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ caseVerifyPrecinctOverView.three }}
</div>
<div class="descriptions_label">
查实率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
:data="caseVerifyPrecinctRank"
:labelWidth="110"
title="整改率排名"
sub-title="问题数/查实数"
:show-value="false"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="大队" name="2">
<el-row class="mb-32">
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ caseVerifyTeamOverView.one }}
</div>
<div class="descriptions_label">
案件数
</div>
</div>
</el-col>
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ caseVerifyTeamOverView.two }}
</div>
<div class="descriptions_label">
查实数
</div>
</div>
</el-col>
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ caseVerifyTeamOverView.three }}
</div>
<div class="descriptions_label">
查实率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="275px">
<datav-chart-bar
:size="small"
:data="caseVerifyTeamRank"
title="整改率排名"
sub-title="问题数/查实数"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
</el-row>
</main>
</div>
</el-scrollbar>
</template>
<script setup>
import vCharts from "vue-echarts";
import moment from "moment";
import * as echarts from "echarts/core";
import {
getSubOneCaseVerifyRank, getSubOneOverView,
getSubOneStreetMap,
getSubOneSupervisionRank,
getSubOneTrend
} from "@/api/screen/sub1.ts";
import changshaMap from "@/assets/data/changsha.json";
const router = useRouter()
const route = useRoute();
const currentDepartId = route.query.departId;
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
]); //
const currentMapData = ref({})
const chart = ref(null); //
const currentYear = new Date().getFullYear(); //
const superviseProTrend = ref({
grid: {
left: '5%', //
right: '2%', //
top: '10%', //
bottom: '20%', //
containLabel: false //
},
xAxis: {
type: "category",
data: [],
boundaryGap: true,
axisTick: {
// X线
show: false
},
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [],
},
],
}); //
const caseVerifyTrend = ref({
grid: {
left: '5%', //
right: '2%', //
top: '10%', //
bottom: '20%', //
containLabel: false //
},
xAxis: {
type: "category",
data: [],
boundaryGap: true,
axisTick: {
// X线
show: false
},
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [],
},
],
}); //
const policeCommentTrend = ref({
grid: {
left: '5%', //
right: '2%', //
top: '10%', //
bottom: '20%', //
containLabel: false //
},
xAxis: {
type: "category",
data: [],
boundaryGap: true,
axisTick: {
// X线
show: false
},
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [],
},
],
}); //
const mailTrend = ref({
grid: {
left: '5%', //
right: '2%', //
top: '10%', //
bottom: '20%', //
containLabel: false //
},
xAxis: {
type: "category",
data: [],
boundaryGap: true,
axisTick: {
// X线
show: false
},
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [],
},
],
}); // 访
echarts.registerMap("changsha", changshaMap);
const option = ref({
tooltip: {
trigger: 'item',
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{min: 0, max: 500, label: "问题数低于500", color: "#4987F6"},
{min: 501, max: 1000, label: "问题数介于500-1000", color: "#F6A149"},
{min: 1001, label: "问题数高于1000", color: "#D34343"},
],
right: 10,
realtime: false,
orient: "horizontal",
textStyle: {
color: "#fff",
},
calculable: true,
},
series: [
{
type: "map",
map: "changsha",
hoverAnimation: true,
roam:true,
label: {
show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E",
borderColor: "#1773c3",
},
},
emphasis: {
areaColor: "#FFD700", //
borderColor: "#FF0000", //
borderWidth: 4 //
},
data: []
}
],
})
const option1 = ref({
xAxis: {
type: "category",
boundaryGap: false,
data: [],
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [],
},
],
});
const caseVerifyPrecinctOverView = ref({})
const caseVerifyTeamOverView = ref({})
const caseVerifyPrecinctRank = ref([])
const caseVerifyTeamRank = ref([])
const supervisionPrecinctOverView = ref({})
const supervisionTeamOverView = ref({})
const supervisionPrecinctRank = ref([])
const supervisionTeamRank = ref([])
const overview = ref({
one: 0,
two: 0,
three: 0,
four: 0,
five: 0,
})
const getMapJSON = async (departId) => {
const res = await getSubOneStreetMap(departId);
currentMapData.value = res;
echarts.registerMap("changsha", res);
chart.value.chart.setOption(option.value);
}
const getTrendData = async (currentDepartId, currentYear) => {
const res = await getSubOneTrend(currentDepartId, currentYear);
const superviseProTrendList = res.superviseProTrend;
const caseVerifyTrendList = res.caseVerifyTrend;
const policeCommentTrendList = res.policeCommentTrend;
const mailTrendList = res.mailTrend;
const superviseCategories = superviseProTrendList.map(item => item.name);
const superviseValues = superviseProTrendList.map(item => item.value);
const caseVerifyCategories = caseVerifyTrendList.map(item => item.name);
const caseVerifyValues = caseVerifyTrendList.map(item => item.value);
const policeCommentCategories = policeCommentTrendList.map(item => item.name);
const policeCommentValues = policeCommentTrendList.map(item => item.value);
const mailCategories = mailTrendList.map(item => item.name);
const mailValues = mailTrendList.map(item => item.value);
//
superviseProTrend.value.xAxis.data = superviseCategories;
superviseProTrend.value.series[0].data = superviseValues;
caseVerifyTrend.value.xAxis.data = caseVerifyCategories;
caseVerifyTrend.value.series[0].data = caseVerifyValues;
policeCommentTrend.value.xAxis.data = policeCommentCategories;
policeCommentTrend.value.series[0].data = policeCommentValues;
mailTrend.value.xAxis.data = mailCategories;
mailTrend.value.series[0].data = mailValues;
}
const getSubOneCaseVerifyRankList = async (currentDepartId, times) => {
const res = await getSubOneCaseVerifyRank(currentDepartId, times);
// console.log(res)
caseVerifyPrecinctRank.value = res.caseVerifyPrecinctList;
caseVerifyTeamRank.value = res.caseVerifyTeamList;
caseVerifyPrecinctOverView.value = res.caseVerifyPrecinctOverView;
caseVerifyTeamOverView.value = res.caseVerifyTeamOverView;
}
const getSubOneSupervisionRankList = async (currentDepartId, times) => {
const res = await getSubOneSupervisionRank(currentDepartId, times);
// console.log(res)
supervisionPrecinctRank.value = res.supervisionPrecinctList;
supervisionTeamRank.value = res.supervisionTeamList;
supervisionPrecinctOverView.value = res.supervisionPrecinctOverView;
supervisionTeamOverView.value = res.supervisionTeamOverView;
// console.log(supervisionPrecinctOverView.value)
}
const getSubOneOverViewData = async (currentDepartId, times) => {
const res = await getSubOneOverView(currentDepartId, times);
overview.value = res.subOneOverViewVo;
// console.log(overview.value)
}
onMounted(() => {
getMapJSON(currentDepartId);
getSubOneSupervisionRankList(currentDepartId, time.value);
getSubOneOverViewData(currentDepartId, time.value);
getTrendData(currentDepartId, currentYear);
getSubOneCaseVerifyRankList(currentDepartId, time.value);
})
function go() {
router.push('/datav/sub2')
}
</script>
<style lang="scss" scoped>
@import "@/style/datav.scss";
</style>

3
src/views/datav/subonedatav/SubOneCaseVerif.vue

@ -174,8 +174,7 @@ import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json"; import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core"; import * as echarts from "echarts/core";
import moment from "moment"; import moment from "moment";
import {getCaseVerificationMap } from "@/api/screen/CaseVerif.ts"; import {getSubOneStreetMap} from "@/api/screen/subScreen/subOneGlobal.ts";
import {getSubOneStreetMap} from "@/api/screen/sub1.ts";
import { import {
getSubOneAllCaseVerificationCount, getSubOneAllCaseVerificationCount,
getSubOneCaseProblemProperty, getSubOneCaseSourceRateAndDealSituation, getSubOneCaseProblemProperty, getSubOneCaseSourceRateAndDealSituation,

602
src/views/datav/subonedatav/SubOneGlobal.vue

@ -0,0 +1,602 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="机构问题排名" sub-title="问题数">
<datav-tabs
v-model="activeOrgTab"
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="340px">
<datav-chart-bar
:data="fxsjlist"
size="large"
:max="11"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="340px">
<datav-chart-bar
:data="jsdwlist"
:max="11"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card title="业务类型占比">
<v-charts
style="height: 360px;"
:option="zfbaPieOption"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="12">
<datav-date-picker v-model="time"/>
<div class="flex gap-42">
<datav-statistic
:value="overview.totalPro"
title="问题总数"
style="width: 13.66%; margin-left: 20px"
/>
<datav-statistic
:value="overview.supervisionPro"
title="督察问题"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.caseVerificationPro"
title="案件核查问题"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.complaintPro"
title="信访投诉问题"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.talkPro"
title="民意感知问题"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.auditPro"
title="审计监督问题"
style="width: 13.66%; margin-left: 10px"
/>
</div>
<v-charts
style="height: 360px"
:option="option"
autoresize
ref="chart"
/>
<div>
<datav-card title="问题趋势">
<v-charts
style="height: 280px;"
:option="proTrend"
autoresize
/>
<div class="gobal-dropdown-container">
<el-dropdown class="test" @command="handleCommand">
<span class="el-dropdown-link my-gobal-yearselect">
{{ selectedYear + " 年" }}
</span>
<template #dropdown>
<el-dropdown-menu style="width: 90px">
<el-dropdown-item v-for="year in years" :key="year" :command="year">{{ year + " " }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</datav-card>
</div>
</el-col>
<el-col :span="6">
<datav-card title="突出问题排名" sub-title="问题数">
<el-scrollbar height="390px">
<datav-chart-bar-pro
:data="tcwtlist"
size="small"
:color="colors"
/>
</el-scrollbar>
</datav-card>
<datav-card title="问题类型占比">
<v-charts
style="height: 370px;"
:option="wtlxPieOption"
autoresize
/>
</datav-card>
</el-col>
</el-row>
</main>
</div>
</el-scrollbar>
</template>
<script setup>
import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core";
import moment from "moment/moment";
import {
getGlobalRecentlyTrendByMonth,
} from "@/api/data/basicScreen.ts";
import {getSubOneStreetMap} from "@/api/screen/subScreen/subOneGlobal.ts";
import {
getSubOneAllCount,
getSubOneBusinessRate,
getSubOneOrganizationRank, getSubOneProblemBusinessRate, getSubOneStrongProblemRate,getSubOneGlobalTrend
} from "@/api/screen/subScreen/subOneGlobal.ts";
// region
const router = useRouter();
const route = useRoute();
const currentMapData = ref({})
const chart = ref(null); //
const currentDepartId = route.query.departId;
const activeOrgTab = ref("1");
const fxsjlist = ref([]); //
const jsdwlist = ref([]); //
const ywzblist = ref([]); //
const wtlxlist = ref([]); //
const tcwtlist = ref([]); //
const overview = ref({
totalPro: 0,
supervisionPro: 0,
caseVerificationPro: 0,
complaintPro: 0,
talkPro: 0,
auditPro: 0,
}); //
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
]); //
const globalTempMapVoList = ref([
{
"name": "天心分局",
"totalPro": 11,
"supervisePro": 11,
"caseVerifyPro": 11,
"mailPro": 11,
"policePro": 11,
"reviewPro": 11,
"value": 200
}
]); //
const currentYear = new Date().getFullYear();
const years = ref([currentYear.toString(), (currentYear - 1).toString(), (currentYear - 2).toString()]); //
const selectedYear = ref('2024'); //
// endregion
// region
//
const zfbaPieOption = computed(() => {
return {
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: ywzblist.value,
},
],
};
});
//
const wtlxPieOption = computed(() => {
return {
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: wtlxlist.value,
},
],
};
});
//
echarts.registerMap("changsha", changshaMap);
const option = ref({
geo: {
map: "changsha",
itemStyle: {
normal: {
opacity: 0 //
},
}
},
tooltip: {
trigger: 'item',
formatter: function (params) {
// console.log(params);
const dataItem = globalTempMapVoList.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-content">
<ul class="tooltip-ul" >
<li>问题总数 <span>${dataItem.totalPro}</span></li>
<li>督察问题 <span>${dataItem.supervisePro}</span></li>
<li>案件核查问题 <span>${dataItem.caseVerifyPro}</span></li>
<li>信访投诉问题 <span>${dataItem.mailPro}</span></li>
<li>民意感知问题 <span>${dataItem.policePro}</span></li>
<li>审计督察问题 <span>${dataItem.reviewPro}</span></li>
</ul>
</div>
</div>`;
} else {
return `
<div class="tooltip">
<div class="tooltip-title">${dataItem.originalName}</div>
<div class="tooltip-content">
<ul class="tooltip-ul"">
<li>问题总数 <span>0000</span></li>
<li>督察问题 <span>0000</span></li>
<li>案件核查问题 <span>0000</span></li>
<li>信访投诉问题 <span>0000</span></li>
<li>民意感知问题 <span>0000</span></li>
<li>审计督察问题 <span>0000</span></li>
</ul>
</div>
</div>`;
}
},
// backgroundColor: "#031577", //
// borderColor: "#0A2F86",
borderWidth: 0, // 1
borderRadius: 3, // 3
shadowBlur: 0, // 8
shadowOffsetX: 0, // 0
shadowOffsetY: 0, // 6
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{gte: 0, lte: 200, label: "低于平均问题30%", color: "#4987F6"},
{gte: 200, lte: 400, label: "平均问题上下浮动30%内", color: "#F6A149"},
{gte: 400, label: "高于平均问题30%", color: "#D34343"},],
right: 10,
realtime: false,
orient: "horizontal",
textStyle: {
color: "#fff",
},
calculable: true,
inRange: {
color: ["#4987F6", "#F6A149", "#D34343"],
},
},
series: [
{
name: "长沙",
type: "map",
map: "changsha",
hoverAnimation: true,
roam: true,
label: {
show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E",
borderColor: "#24D2EE",
borderWidth: 1, //
opacity: 1 //
},
},
emphasis: {
areaColor: "#FFD700", //
borderColor: "#FF0000", //
borderWidth: 4 //
},
data: []
}
],
})
// 线
const proTrend = ref({
grid: {
left: '5%', //
right: '2%', //
top: '10%', //
bottom: '20%', //
containLabel: false //
},
xAxis: {
type: "category",
data: [],
boundaryGap: true,
axisTick: {
// X线
show: false
},
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [],
},
],
});
// endregion
// region
const getMapJSON = async (departId) => {
const res = await getSubOneStreetMap(departId);
currentMapData.value = res;
echarts.registerMap("changsha", res);
chart.value.chart.setOption(option.value);
}
const getOrganizationProRankData = async (departId, timeValue = time.value) => {
const res = await getSubOneOrganizationRank(departId, timeValue);
fxsjlist.value = res.fxsjlist;
jsdwlist.value = res.jsdwlist;
}
const getBusinessRateData = async (departId, timeValue = time.value) => {
const res = await getSubOneBusinessRate(departId, timeValue);
ywzblist.value = res.ywzblist;
}
const getAllGlobalCountData = async (departId, timeValue = time.value) => {
const res = await getSubOneAllCount(departId, timeValue);
overview.value = res.overview;
}
const getSubOneGlobalTrendData =async (departId, year)=>{
const res = await getSubOneGlobalTrend(departId, year);
const categories = res.globalRecentlyTrendList.map(item => item.name);
const values = res.globalRecentlyTrendList.map(item => item.value);
//
proTrend.value.xAxis.data = categories;
proTrend.value.series[0].data = values;
}
const getSubOneStrongProblemRateData = async (departId, timeValue = time.value) => {
const res = await getSubOneStrongProblemRate(departId, timeValue);
tcwtlist.value = res.tcwtlist;
}
const getSubOneProblemBusinessRateData = async (departId, timeValue = time.value) => {
const res = await getSubOneProblemBusinessRate(departId,timeValue);
wtlxlist.value = res.wtlxlist;
}
// endregion
// region
onMounted(() => {
getOrganizationProRankData(currentDepartId, time.value);
getBusinessRateData(currentDepartId, time.value);
getAllGlobalCountData(currentDepartId, time.value);
getSubOneGlobalTrendData(currentDepartId, selectedYear.value);
getSubOneStrongProblemRateData(currentDepartId, time.value);
getSubOneProblemBusinessRateData(currentDepartId, time.value);
getMapJSON(currentDepartId);
});
// endregion
// region ||
const handleCommand = (year) => {
selectedYear.value = year; //
getGlobalRecentlyTrendByMonth(year).then(res => {
const globalRecentlyTrendList = res.globalRecentlyTrendList;
const categories = globalRecentlyTrendList.map(item => item.name);
const values = globalRecentlyTrendList.map(item => item.value);
//
proTrend.value.xAxis.data = categories;
proTrend.value.series[0].data = values;
});
};
watch(time, () => {
getData();
});
const handleClick = (params) => {
const departId = params.data.departId;
const url = router.resolve({
path: "/datav/sub1",
query: {departId: departId},
}).href;
window.open(url, "_blank");
}
// endregion
const colors = [
{
color: "linear-gradient( 270deg, #FB002D 0%, #822232 100%)",
percentage: 80,
},
{
color: "linear-gradient( 270deg, #FFB90E 0%, #71501D 100%)",
percentage: 60,
},
{
color: "linear-gradient( 270deg, #63E700 0%, #19674C 100%)",
percentage: 40,
},
];
</script>
<style lang="scss" scoped>
@import "@/style/datav.scss";
:deep() {
//
.tooltip {
position: relative;
width: 160px;
height: 194px;
background: linear-gradient(180deg, rgba(1, 4, 87, 0.8) 0%, rgba(3, 21, 119, 0.8) 100%);
border: 1px solid #4E8FFF;
margin: -10px -10px -10px -10px;
}
////
.tooltip-title {
width: 160px;
height: 43px;
background: linear-gradient(180deg, #0A2F86 0%, #04154E 100%);
box-shadow: inset 0px -1px 0px 0px #253755;
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
font-weight: 400;
font-size: 16px;
color: #FFFFFF;
border-bottom: 1px solid #253755; /* 设置下边框 */
}
.tooltip-content {
width: 160px;
height: 150px;
background: linear-gradient(180deg, #010457 0%, #031577 100%)
}
.tooltip-content ul {
list-style-type: none; /* 移除默认的小圆点 */
padding-left: 5px;
margin: 0;
}
.tooltip-content ul li {
height: 24px;
color: #597AE9;
font-weight: 400;
font-size: 14px;
}
//// span
.tooltip-ul span {
float: right;
width: 55px;
color: #fff;
font-size: 14px;
text-align: center; /* 水平居中 */
}
///* */
//.tooltip::before {
// content: '';
// position: absolute;
// top: 90px; /* */
// left: -10px; /* */
// width: 0;
// height: 0;
// //border-top: 10px solid red; /* */
// //border-bottom: 10px solid green; /* */
// //border-right: 10px solid blue; /* */
//}
}
.test {
width: 95px;
height: 25px;
background: #1C3472;
}
.gobal-dropdown-container {
position: absolute;
right: 20px;
top: 15px;
}
.my-gobal-yearselect {
font-size: 14px;
padding-top: 6px;
padding-left: 20px;
width: 90px;
color: #fff;
}
</style>

101
src/views/datav/subonedatav/SubOneMailVisits.vue

@ -10,7 +10,7 @@
<el-col :span="8"> <el-col :span="8">
<div class="descriptions_cell text-center"> <div class="descriptions_cell text-center">
<div class="descriptions_content"> <div class="descriptions_content">
{{ firstAndRepeatOverview.firstMail }} {{ currentOverview.firstMail }}
</div> </div>
<div class="descriptions_label"> <div class="descriptions_label">
初信初访 初信初访
@ -20,7 +20,7 @@
<el-col :span="8"> <el-col :span="8">
<div class="descriptions_cell text-center"> <div class="descriptions_cell text-center">
<div class="descriptions_content"> <div class="descriptions_content">
{{ firstAndRepeatOverview.repeatMail }} {{ currentOverview.repeatMail }}
</div> </div>
<div class="descriptions_label"> <div class="descriptions_label">
重复信访 重复信访
@ -30,7 +30,7 @@
<el-col :span="8"> <el-col :span="8">
<div class="descriptions_cell text-center"> <div class="descriptions_cell text-center">
<div class="descriptions_content"> <div class="descriptions_content">
{{ firstAndRepeatOverview.leaderMail }} {{ currentOverview.leaderMail }}
</div> </div>
<div class="descriptions_label"> <div class="descriptions_label">
领导接访数 领导接访数
@ -216,7 +216,7 @@
<el-col :span="8"> <el-col :span="8">
<div class="descriptions_cell text-center"> <div class="descriptions_cell text-center">
<div class="descriptions_content"> <div class="descriptions_content">
{{ mailEntanglementMassOverview.leaderReview }} {{ currentRightOverview.leaderReview }}
</div> </div>
<div class="descriptions_label"> <div class="descriptions_label">
领导督办 领导督办
@ -226,7 +226,7 @@
<el-col :span="8"> <el-col :span="8">
<div class="descriptions_cell text-center"> <div class="descriptions_cell text-center">
<div class="descriptions_content"> <div class="descriptions_content">
{{ mailEntanglementMassOverview.entanglement }} {{ currentRightOverview.entanglement }}
</div> </div>
<div class="descriptions_label"> <div class="descriptions_label">
缠访闹访 缠访闹访
@ -236,7 +236,7 @@
<el-col :span="8"> <el-col :span="8">
<div class="descriptions_cell text-center"> <div class="descriptions_cell text-center">
<div class="descriptions_content"> <div class="descriptions_content">
{{ mailEntanglementMassOverview.mass }} {{ currentRightOverview.mass }}
</div> </div>
<div class="descriptions_label"> <div class="descriptions_label">
群体集访 群体集访
@ -245,7 +245,7 @@
</el-col> </el-col>
</el-row> </el-row>
<datav-card> <datav-card>
<datav-tabs> <datav-tabs v-model="activeTabRight">
<datav-tab-item label="派出所" name="1"> <datav-tab-item label="派出所" name="1">
<datav-tabs <datav-tabs
type="bottom-button" type="bottom-button"
@ -347,12 +347,15 @@ import moment from "moment/moment.js";
import { import {
getAllMailCount, getAllMailCount,
getEntanglementAndMassMail, getEntanglementAndMassMail,
getFirstAndRepeatMail,
getMailMapIcon, getMailMapIcon,
getMailTrend getMailTrend
} from "@/api/screen/mail.ts"; } from "@/api/screen/mail.ts";
import {getSubOneStreetMap} from "@/api/screen/sub1.ts"; import {getSubOneStreetMap} from "@/api/screen/subScreen/subOneGlobal.ts";
import {getSubOneFirstAndRepeatMail} from "@/api/screen/subScreen/subOneMailVisits.ts"; import {
getSubOneEntanglementAndMassMail,
getSubOneFirstAndRepeatMail,
getSubOneAllMailCount, getSubOneMailTrend
} from "@/api/screen/subScreen/subOneMailVisits.ts";
//region //region
@ -361,7 +364,7 @@ const activeTab = ref("1");
const bwzdActiveTab = ref("1"); // tab const bwzdActiveTab = ref("1"); // tab
const activeMailTrend = ref("1"); // 访tab const activeMailTrend = ref("1"); // 访tab
const activeMailTab = ref("1"); const activeMailTab = ref("1");
const activeTabRight = ref("1");
const overview = ref({ const overview = ref({
totalMail: 0, totalMail: 0,
countryMail: 0, countryMail: 0,
@ -369,8 +372,12 @@ const overview = ref({
numberMail: 0, numberMail: 0,
manageMail: 0, manageMail: 0,
}); // }); //
const fxjsFirstAndRepeatOverview = ref({
const firstAndRepeatOverview = ref({ firstMail: 0,
repeatMail: 0,
leaderMail: 0
});
const bwzdFirstAndRepeatOverview = ref({
firstMail: 0, firstMail: 0,
repeatMail: 0, repeatMail: 0,
leaderMail: 0 leaderMail: 0
@ -381,7 +388,12 @@ const fxsjLeaderViewMailList = ref([]); // 分局领导接访
const bwzdFirstMailList = ref([]); // const bwzdFirstMailList = ref([]); //
const bwzdRepeatMailList = ref([]); // 访 const bwzdRepeatMailList = ref([]); // 访
const bwzdLeaderViewMailList = ref([]); // 访 const bwzdLeaderViewMailList = ref([]); // 访
const mailEntanglementMassOverview = ref({ const fxsjMailEntanglementMassOverview = ref({
entanglement: 0,
mass: 0,
leaderReview: 0,
})
const bwzdMailEntanglementMassOverview = ref({
entanglement: 0, entanglement: 0,
mass: 0, mass: 0,
leaderReview: 0, leaderReview: 0,
@ -392,7 +404,6 @@ const fxsjMassMailList = ref([]); // 分局集访
const bwzdLeaderReviewMailList = ref([]); // const bwzdLeaderReviewMailList = ref([]); //
const bwzdEntanglementMailList = ref([]); // const bwzdEntanglementMailList = ref([]); //
const bwzdMassMailList = ref([]); // 访 const bwzdMassMailList = ref([]); // 访
const time = ref([ const time = ref([
moment().startOf("year").format("YYYY-MM-DD"), moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"), moment().format("YYYY-MM-DD"),
@ -401,23 +412,23 @@ const currentYear = new Date().getFullYear();
const years = ref([currentYear.toString(), (currentYear - 1).toString(), (currentYear - 2).toString()]); // const years = ref([currentYear.toString(), (currentYear - 1).toString(), (currentYear - 2).toString()]); //
const selectedYear = ref(currentYear); // const selectedYear = ref(currentYear); //
const route = useRoute(); const route = useRoute();
const currentDepartId = route.query.departId; const currentMapData = ref({})
const chart = ref(null); // const chart = ref(null); //
const currentMapData = ref({}) // const currentDepartId = route.query.departId;
//endregion //endregion
// region // region
const getMapJSON = async (departId = currentDepartId) => {
const getMapJSON = async (departId) => {
const res = await getSubOneStreetMap(departId); const res = await getSubOneStreetMap(departId);
currentMapData.value = res; currentMapData.value = res;
echarts.registerMap("changsha", res); echarts.registerMap("changsha", res);
chart.value.chart.setOption(option.value); chart.value.chart.setOption(option.value);
} }
const getFirstAndRepeatMailRank = async (timeValue = time.value) => { const getSubOneFirstAndRepeatMailRankData = async (depart = currentDepartId, timeValue = time.value) => {
const res = await getSubOneFirstAndRepeatMail(timeValue) const res = await getSubOneFirstAndRepeatMail(depart, timeValue)
firstAndRepeatOverview.value = res.firstAndRepeatOverview; fxjsFirstAndRepeatOverview.value = res.fxjsFirstAndRepeatOverview;
bwzdFirstAndRepeatOverview.value = res.bwzdFirstAndRepeatOverview
fxsjFirstMailList.value = res.fxsjFirstRankList; fxsjFirstMailList.value = res.fxsjFirstRankList;
fxsjRepeatMailList.value = res.fxsjRepeatRankList; fxsjRepeatMailList.value = res.fxsjRepeatRankList;
fxsjLeaderViewMailList.value = res.fxsjLeaderViewRankList; fxsjLeaderViewMailList.value = res.fxsjLeaderViewRankList;
@ -427,12 +438,12 @@ const getFirstAndRepeatMailRank = async (timeValue = time.value) => {
bwzdLeaderViewMailList.value = res.bwzdLeaderViewRankList; bwzdLeaderViewMailList.value = res.bwzdLeaderViewRankList;
} }
const getOverview = async (timeValue = time.value) => { const getOverviewData = async (depart = currentDepartId, timeValue = time.value) => {
const res = await getAllMailCount(timeValue) const res = await getSubOneAllMailCount(depart, timeValue)
overview.value = res.overview; overview.value = res.overview;
} }
const getTrend = async (year = selectedYear.value) => { const getTrendData = async (departId = currentDepartId, year = selectedYear.value) => {
const res = await getMailTrend(year); const res = await getSubOneMailTrend(departId, year);
const policeList = res.policeList; const policeList = res.policeList;
const manageList = res.manageList; const manageList = res.manageList;
const numberList = res.numberList; const numberList = res.numberList;
@ -455,9 +466,10 @@ const getTrend = async (year = selectedYear.value) => {
countryTrend.value.xAxis.data = countrycategories; countryTrend.value.xAxis.data = countrycategories;
countryTrend.value.series[0].data = countryvalues; countryTrend.value.series[0].data = countryvalues;
} }
const getEntangleMassRank = async (timeValue = time.value) => { const getSubOneEntangleMassRankData = async (depart = currentDepartId, timeValue = time.value) => {
const res = await getEntanglementAndMassMail(timeValue) const res = await getSubOneEntanglementAndMassMail(depart, timeValue)
mailEntanglementMassOverview.value = res.mailEntanglementMassOverview; fxsjMailEntanglementMassOverview.value = res.fxsjMailEntanglementMassOverview;
bwzdMailEntanglementMassOverview.value = res.bwzdMailEntanglementMassOverview;
fxsjEntanglementMailList.value = res.fxsjEntanglementList; fxsjEntanglementMailList.value = res.fxsjEntanglementList;
fxsjMassMailList.value = res.fxsjMassList; fxsjMassMailList.value = res.fxsjMassList;
fxsjLeaderReviewMailList.value = res.fxsjLeaderReviewList; fxsjLeaderReviewMailList.value = res.fxsjLeaderReviewList;
@ -518,21 +530,33 @@ const getMailMapIconList = async (timeValue = time.value) => {
console.log(mailMapIconList) console.log(mailMapIconList)
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0); const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; // const avg = total / mappedData.length; //
const range30Percent = avg*0.3 // const range30Percent = avg * 0.3 //
option.value.series[0].data = mappedData; option.value.series[0].data = mappedData;
option.value.visualMap.pieces = [ option.value.visualMap.pieces = [
{gte: 0, lte: avg - range30Percent, label: "低于平均问题30%", color: "#4987F6"}, {gte: 0, lte: avg - range30Percent, label: "低于平均问题30%", color: "#4987F6"},
{gte: avg - range30Percent, lte: avg + range30Percent+0.1, label: `平均问题上下浮动30%内`, color: "#F6A149"}, {gte: avg - range30Percent, lte: avg + range30Percent + 0.1, label: `平均问题上下浮动30%内`, color: "#F6A149"},
{gte: avg + range30Percent, label: "高于平均问题30%", color: "#D34343"}, {gte: avg + range30Percent, label: "高于平均问题30%", color: "#D34343"},
]; ];
} }
const getData = () => { const getData = () => {
getFirstAndRepeatMailRank(); getMapJSON();
getOverview(); getSubOneFirstAndRepeatMailRankData();
getMailMapIconList() getOverviewData();
getTrend(); getTrendData();
getEntangleMassRank(); getSubOneEntangleMassRankData();
// getOverview();
// getMailMapIconList()
// getTrend();
// getEntangleMassRank();
} }
const currentOverview = computed(() => {
return activeTab.value === '1' ? fxjsFirstAndRepeatOverview.value : bwzdFirstAndRepeatOverview.value;
});
const currentRightOverview = computed(() => {
return activeTabRight.value === '1' ? fxsjMailEntanglementMassOverview.value : bwzdMailEntanglementMassOverview.value;
});
// endregion // endregion
@ -595,6 +619,8 @@ const gobalTempMapVoList = [
"numTotal": 44, "numTotal": 44,
} }
]; ];
// const gobalTempMapVoList=[]
const option = ref({ const option = ref({
geo: { geo: {
map: "changsha", map: "changsha",
@ -982,14 +1008,13 @@ const option3 = {
const handleCommand = (year) => { const handleCommand = (year) => {
selectedYear.value = year; selectedYear.value = year;
getTrend() getTrendData()
}; };
// 访tab // 访tab
watch(time, () => { watch(time, () => {
getData(); getData();
}) })
onMounted(() => { onMounted(() => {
getMapJSON(currentDepartId)
getData(); getData();
// timer = setInterval(() => { // timer = setInterval(() => {
// activeMailTab.value = (parseInt(activeMailTab.value) % 3 + 1).toString(); // activeMailTab.value = (parseInt(activeMailTab.value) % 3 + 1).toString();

987
src/views/datav/subonedatav/SubOneRightsComfort.vue

File diff suppressed because it is too large Load Diff

2
src/views/datav/subonedatav/SubOneSceneInsp.vue

@ -792,7 +792,7 @@ import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core"; import * as echarts from "echarts/core";
import moment from "moment"; import moment from "moment";
import {getSubOneStreetMap} from "@/api/screen/sub1.ts"; import {getSubOneStreetMap} from "@/api/screen/subScreen/subOneGlobal.ts";
import { import {
getAllSubOneSupervisionNotifyCount, getAllSubOneSupervisionNotifyCount,
getSubOneChangedRank, getSubOneCheckBeer, getSubOneCompanyProblem, getSubOneGunController, getSubOneHandleCase, getSubOneChangedRank, getSubOneCheckBeer, getSubOneCompanyProblem, getSubOneGunController, getSubOneHandleCase,

2
src/views/datav/subonedatav/SubOneVideoInsp.vue

@ -195,7 +195,7 @@ import {
getVideoSuperviseMap getVideoSuperviseMap
} from "@/api/screen/videoSupervise.ts"; } from "@/api/screen/videoSupervise.ts";
import moment from "moment/moment.js"; import moment from "moment/moment.js";
import {getSubOneStreetMap} from "@/api/screen/sub1.ts"; import {getSubOneStreetMap} from "@/api/screen/subScreen/subOneGlobal.ts";
import { import {
getSubOneAllVideoSuperviseCount, getSubOneAllVideoSuperviseCount,
getSubOneVideoSuperviseProblemRank, getSubOneVideoSuperviseProblemTypeRate, getSubOneVideoSuperviseTrend getSubOneVideoSuperviseProblemRank, getSubOneVideoSuperviseProblemTypeRate, getSubOneVideoSuperviseTrend

Loading…
Cancel
Save