Browse Source

审计大屏 11/17/ 1:08 现场督察 审计监督

main
parent
commit
b3734bfaa0
  1. 8
      src/api/data/supervisionNotify.ts
  2. 2
      src/api/datav.ts
  3. 5
      src/components/datav/chart-bar.vue
  4. 10
      src/views/datav/AuditSuper.vue
  5. 5
      src/views/datav/Gobal.vue
  6. 16
      src/views/datav/MailVisits.vue
  7. 346
      src/views/datav/RightsComfort.vue
  8. 651
      src/views/datav/SceneInsp.vue

8
src/api/data/supervisionNotify.ts

@ -15,3 +15,11 @@ export function getChangedRank(times, groupType) {
url: `/datav/supervisonNotify/rank?beginTime=${times[0]}&endTime=${times[1]}&groupType=${groupType}` url: `/datav/supervisonNotify/rank?beginTime=${times[0]}&endTime=${times[1]}&groupType=${groupType}`
}); });
} }
/**
*
*/
export function getSupervisionTrend(year) {
return request.get({
url: `/datav/supervisonNotify/getSupervisionTrend?year=${year}`
});
}

2
src/api/datav.ts

@ -38,3 +38,5 @@ export function getRecentlyMailTrend12337(query) {

5
src/components/datav/chart-bar.vue

@ -23,7 +23,7 @@
}" }"
></div> ></div>
</div> </div>
<span>{{ item.value }}</span> <span >{{ item.value + props.unit }}</span>
<span <span
class="bar-item_remark text-right ml-8" class="bar-item_remark text-right ml-8"
v-if="item.denominator" v-if="item.denominator"
@ -72,6 +72,7 @@ const props = defineProps({
type: String, type: String,
default: "left", default: "left",
}, },
}); });
const max = ref(100); const max = ref(100);
@ -82,6 +83,8 @@ watch(
} }
); );
function getMax() { function getMax() {
if (props.unit !== "%") { if (props.unit !== "%") {
max.value = Math.max(...props.data.map((item) => item.value)); max.value = Math.max(...props.data.map((item) => item.value));

10
src/views/datav/AuditSuper.vue

@ -33,29 +33,29 @@
</div> </div>
<div class="flex gap-42"> <div class="flex gap-42">
<datav-statistic <datav-statistic
:value="86" :value="462"
title="审计单位/项目" title="审计单位/项目"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="437" :value="79224.59"
:title="`审计总金额\n(万元)`" :title="`审计总金额\n(万元)`"
:isDecimal="true" :isDecimal="true"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="54" :value="3544.01"
:title="`审减金额\n(万元)`" :title="`审减金额\n(万元)`"
:isDecimal="true" :isDecimal="true"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="21" :value="1192"
title="查出问题数" title="查出问题数"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="10" :value="389"
title="追责问责数" title="追责问责数"
style="width: 20%" style="width: 20%"
/> />

5
src/views/datav/Gobal.vue

@ -216,13 +216,10 @@ const option = ref({
// shadowOffsetY: 0, // 6 // shadowOffsetY: 0, // 6
}, },
visualMap: { visualMap: {
type: "piecewise", type: "piecewise",
bottom: 10, bottom: 10,
pieces: [ pieces: [
{gte: 0, lte: 10, label: "问题数低于500"}, { min: 0, max: 500, label: "问题数低于500" }, { min: 501, max: 1000, label: "问题数介于500-1000" }, { min: 1001, label: "问题数高于1000" },
{gte: 10, lte: 20, label: "问题数介于500-1000"},
{gte: 30, label: "问题数高于1000"},
], ],
right: 10, right: 10,
realtime: false, realtime: false,

16
src/views/datav/MailVisits.vue

@ -183,13 +183,7 @@
autoresize autoresize
/> />
</datav-tab-item> </datav-tab-item>
<datav-tab-item label="局长信箱" name="3">
<v-charts
style="width: 105%; height: 300px; "
:option="option1"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="12337信访" name="4"> <datav-tab-item label="12337信访" name="4">
<v-charts <v-charts
style="width: 105%; height: 300px; " style="width: 105%; height: 300px; "
@ -805,5 +799,13 @@ const colors = [
} }
/*
<!-- <datav-tab-item label="局长信箱" name="3">-->
<!-- <v-charts-->
<!-- style="width: 105%; height: 300px; "-->
<!-- :option="option1"-->
<!-- autoresize-->
<!-- />-->
<!-- </datav-tab-item>-->*/
</style> </style>

346
src/views/datav/RightsComfort.vue

@ -5,82 +5,70 @@
<main> <main>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="6"> <el-col :span="6">
<!-- <datav-card title="维权案件情况">-->
<!-- <datav-chart-bar-->
<!-- sub-title="案件数"-->
<!-- :data="data1"-->
<!-- :max="31"-->
<!-- size="large"-->
<!-- />-->
<!-- <div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">-->
<!-- <div class="tab-title-item active">-->
<!--&lt;!&ndash; 分县市局&ndash;&gt;-->
<!-- 暂无数据-->
<!-- </div>-->
<!--&lt;!&ndash; <div class="tab-title-item">局属单位</div>&ndash;&gt;-->
<!-- </div>-->
<!-- </datav-card>-->
<datav-card title="维权案件情况"> <datav-card title="维权案件情况">
<v-charts <datav-chart-bar
style="height: 300px" sub-title="案件数"
:option="option6" :data="data1"
autoresize :max="31"
size="large"
:color="colors"
/> />
<div class="flex tab-title flex center mt-20" style="margin-bottom: 20px"> <div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">
<div class="tab-title-item active"> <div class="tab-title-item active">
<!-- 受伤人数--> <!-- 分县市局-->
暂无数据
</div> </div>
<!-- <div class="tab-title-item">受伤类别</div>--> <!-- <div class="tab-title-item">局属单位</div>-->
</div> </div>
</datav-card> </datav-card>
<datav-card title="案件类别占比"> <datav-card title="案件类别占比">
<v-charts <v-charts
style="height: 300px" style="height: 350px"
:option="option2" :option="option2"
autoresize autoresize
/> />
<div class="flex tab-title flex center mt-20" style="margin-bottom: 20px"> <!-- <div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">-->
<div class="tab-title-item active"> <!-- <div class="tab-title-item active">-->
<!-- 刑事案件--> <!-- &lt;!&ndash; 刑事案件&ndash;&gt;-->
暂无数据 <!-- 暂无数据-->
</div> <!-- </div>-->
<!-- <div class="tab-title-item">行政案件</div>--> <!-- &lt;!&ndash; <div class="tab-title-item">行政案件</div>&ndash;&gt;-->
</div> <!-- </div>-->
</datav-card> </datav-card>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<datav-date-picker v-model="time"/> <datav-date-picker v-model="time"/>
<div class="flex gap-42"> <div class="flex gap-42">
<datav-statistic <datav-statistic
:value="136" :value="171"
title="维权案件总数" title="维权案件总数"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="112" :value="121"
title="受侵害人数" title="受侵害人数"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="comfortPersonNumber" :value="114"
title="抚慰人数" title="抚慰人数"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="hitPersonNumber" :value="205"
title="打击处理人数" title="打击处理人数"
style="width: 20%" style="width: 20%"
/> />
<datav-statistic <datav-statistic
:value="comfortMoney" :value="28.1"
:title="`抚慰金额\n(万元)`" :title="`抚慰金额\n(万元)`"
:isDecimal="true" :isDecimal="true"
style="width: 20%" style="width: 20%"
/> />
</div> </div>
<v-charts <v-charts
style="height: 450px" style="height: 360px"
:option="option" :option="option"
autoresize autoresize
/> />
@ -89,7 +77,7 @@
<datav-card title="打处情况"> <datav-card title="打处情况">
<v-charts <v-charts
style="height: 300px" style="height: 300px"
:option="option3" :option="data10"
autoresize autoresize
/> />
</datav-card> </datav-card>
@ -105,35 +93,37 @@
</el-col> </el-col>
</el-row> </el-row>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<datav-card title="民辅警受伤情况"> <datav-card title="民辅警受伤情况">
<v-charts <v-charts
style="height: 300px" style="height: 400px"
:option="option6" :option="option6"
autoresize autoresize
/> />
<div class="flex tab-title flex center mt-20" style="margin-bottom: 20px"> <!-- <div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">-->
<div class="tab-title-item active"> <!-- <div class="tab-title-item active">-->
<!-- 受伤人数--> <!-- &lt;!&ndash; 受伤人数&ndash;&gt;-->
暂无数据 <!-- 暂无数据-->
</div> <!-- </div>-->
<!-- <div class="tab-title-item">受伤类别</div>--> <!-- &lt;!&ndash; <div class="tab-title-item">受伤类别</div>&ndash;&gt;-->
</div> <!-- </div>-->
</datav-card> </datav-card>
<datav-card title="发案情况占比"> <datav-card title="发案情况占比">
<v-charts <v-charts
style="height: 300px" style="height: 350px"
:option="option5" :option="option5"
autoresize autoresize
/> />
<div class="flex tab-title flex center mt-20" style="margin-bottom: 20px"> <!-- <div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">-->
<div class="tab-title-item active"> <!-- <div class="tab-title-item active">-->
暂无数据 <!-- 暂无数据-->
<!-- 发案环节--> <!-- &lt;!&ndash; 发案环节&ndash;&gt;-->
</div> <!-- </div>-->
<!-- <div class="tab-title-item">发案警种</div>--> <!-- &lt;!&ndash; <div class="tab-title-item">发案警种</div>&ndash;&gt;-->
<!-- <div class="tab-title-item">发案单位</div>--> <!-- &lt;!&ndash; <div class="tab-title-item">发案单位</div>&ndash;&gt;-->
</div> <!-- </div>-->
</datav-card> </datav-card>
</el-col> </el-col>
</el-row> </el-row>
@ -141,6 +131,7 @@
</div> </div>
</el-scrollbar> </el-scrollbar>
</template> </template>
<script setup> <script setup>
import vCharts from "vue-echarts"; import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json"; import changshaMap from "@/assets/data/changsha.json";
@ -153,22 +144,23 @@ 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"),
]); ]);
const comfortPersonNumber = ref(0); const comfortPersonNumber = ref(114);
const hitPersonNumber = ref(0); const hitPersonNumber = ref(28.1);
const comfortMoney = ref(0.0); const comfortMoney = ref(0.0);
const punishmentSituationList = ref([]); const punishmentSituationList = ref([]);
const comfortSituationList = ref([]); const comfortSituationList = ref([]);
function getData() { function getData() {
getRightsComfortData(time.value).then((data) => { // getRightsComfortData(time.value).then((data) => {
console.log('Received data:', data); // // console.log('Received data:', data); //
comfortPersonNumber.value = data.comfortPersonNumber; // comfortPersonNumber.value = data.comfortPersonNumber;
hitPersonNumber.value = data.hitPersonNumber; // hitPersonNumber.value = data.hitPersonNumber;
comfortMoney.value = data.comfortMoney; // comfortMoney.value = data.comfortMoney;
punishmentSituationList.value = data.punishmentSituation; // punishmentSituationList.value = data.punishmentSituation;
comfortSituationList.value = data.comfortSituation; // comfortSituationList.value = data.comfortSituation;
}); // });
} }
watch(time, () => { watch(time, () => {
getData(); getData();
}) })
@ -185,9 +177,9 @@ const option = {
type: "piecewise", type: "piecewise",
bottom: 10, bottom: 10,
pieces: [ pieces: [
{ gte: 85, lte: 100, label: "问题数低于500" }, {gte: 85, lte: 100, label: "数据数高于1000"},
{gte: 65, lte: 85, label: "问题数低于1000"}, {gte: 65, lte: 85, label: "问题数低于1000"},
{ gte: 0, lte: 65, label: "问题数低于1000" }, {gte: 0, lte: 65, label: "问题数低于500"},
], ],
right: 10, // right: 10, //
realtime: false, realtime: false,
@ -197,7 +189,7 @@ const option = {
}, },
calculable: true, calculable: true,
inRange: { inRange: {
color: ["#D34343", "#F6A149", "#4987F6"], color: ["#4987F6", "#F6A149", "#D34343"],
}, },
}, },
series: [ series: [
@ -206,7 +198,11 @@ const option = {
type: "map", type: "map",
map: "changsha", map: "changsha",
hoverAnimation: true, hoverAnimation: true,
emphasis: {
areaColor: "#FFD700", //
borderColor: "#FF0000", //
borderWidth: 4 //
},
label: { label: {
show: true, show: true,
color: "white", color: "white",
@ -282,34 +278,48 @@ const option1 = ref({
}); });
const data1 = [ const data1 = [
// { {
// name: "", label: "岳麓分局",
// value: 31 value: 23
// }, },
// { {
// name: "", label: "芙蓉分局",
// value: 30 value: 20
// }, },
// { {
// name: "", label: "天心分局",
// value: 22 value: 20
// }, },
// { {
// name: "", label: "雨花分局",
// value: 20 value: 19
// }, },
// { {
// name: "", label: "浏阳市局",
// value: 15 value: 17
// }, },
// { {
// name: "", label: "宁乡市局",
// value: 9 value: 11
// }, },
// { {
// name: "", label: "开福分局",
// value: 9 value: 11
// }, },
{
label: "望城分局",
value: 9
},
{
label: "长沙县局",
value: 9
},
{
label: "高新分局",
value: 4
},
]; ];
const data2 = [ const data2 = [
@ -344,21 +354,24 @@ const data2 = [
]; ];
const option2 = { const option2 = {
// series: [ series: [
// { {
// type: "pie", type: "pie",
// radius: ["40%", "70%"], radius: ["40%", "70%"],
// label: { label: {
// color: "#fff", color: "#fff",
// }, },
// data: [ data: [
// { value: 311, name: "" }, {value: 2, name: "故意伤害"},
// { value: 735, name: "" }, {value: 42, name: "袭警罪"},
// { value: 580, name: "" }, {value: 2, name: "寻衅滋事"},
// { value: 484, name: "" } {value: 28, name: "妨碍公务"}
// ], ],
// }, },
// ], ],
tooltip: {
trigger: "item",
},
}; };
const option3 = computed(() => { const option3 = computed(() => {
@ -388,7 +401,12 @@ const option4 = computed(() => {
label: { label: {
color: "#fff", color: "#fff",
}, },
data: comfortSituationList.value, // data: comfortSituationList.value,
data: [
{value: 61, name: "民警"},
{value: 51, name: "辅警"},
{value: 2, name: "协警"},
]
}, },
], ],
tooltip: { tooltip: {
@ -399,41 +417,89 @@ const option4 = computed(() => {
const option6 = { const option6 = {
series: [ series: [
// { {
// type: "pie", type: "pie",
// radius: ["40%", "70%"], radius: ["40%", "70%"],
// label: { label: {
// color: "#fff", color: "#fff",
// }, },
// data: [ tooltip: {
// { value: 211, name: "" }, trigger: "item",
// { value: 655, name: "" }, },
// { value: 666, name: "" }, data: [
// { value: 312, name: "" } {value: 68, name: "民警"},
// ], {value: 50, name: "辅警"},
// }, {value: 3, name: "协警"},
], ],
},
],
tooltip: {
trigger: "item",
},
}; };
const option5 = { const option5 = {
series: [ series: [
// { {
// type: "pie", type: "pie",
// radius: ["40%", "70%"], radius: ["40%", "70%"],
// label: { label: {
// color: "#fff", color: "#fff",
// }, },
// data: [ data: [
// { value: 211, name: "" }, {value: 127, name: "110警情"},
// { value: 655, name: "" }, {value: 32, name: "执勤处室"},
// { value: 666, name: "110" }, {value: 2, name: "组织调解"},
// { value: 321, name: "" }, {value: 3, name: "传唤抓捕"},
// { value: 211, name: "" }, {value: 2, name: "安保维稳"},
// { value: 421, name: "" }, {value: 2, name: "网络侵权"},
// ], {value: 2, name: "医闹纠纷"},
// }, {value: 1, name: "其它"},
],
},
],
tooltip: {
trigger: "item",
},
};
const data10 = {
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: [
{value: 71, name: "刑事追究"},
{value: 97, name: "行政处理"},
], ],
},
],
tooltip: {
trigger: "item",
},
}; };
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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/style/datav.scss"; @import "@/style/datav.scss";

651
src/views/datav/SceneInsp.vue

@ -63,13 +63,14 @@
:size="small" :size="small"
title="整改率排名" title="整改率排名"
sub-title="已整改/问题数" sub-title="已整改/问题数"
unit="%"
/> />
</el-scrollbar> </el-scrollbar>
</datav-tab-item> </datav-tab-item>
<datav-tab-item label="局属单位" name="4"> <datav-tab-item label="局属单位" name="4">
<el-scrollbar height="350px"> <el-scrollbar height="350px">
<datav-chart-bar <datav-chart-bar
:data="jsdwBarList" :data="data1"
:max="11" :max="11"
size="large" size="large"
:color="colors" :color="colors"
@ -85,7 +86,7 @@
<datav-card title="问题类型占比"> <datav-card title="问题类型占比">
<v-charts <v-charts
style="height: 300px" style="height: 300px"
:option="option2" :option="wtlxPieOption"
autoresize autoresize
/> />
</datav-card> </datav-card>
@ -134,106 +135,28 @@
<datav-card title="问题趋势"> <datav-card title="问题趋势">
<v-charts <v-charts
style="height: 280px" style="height: 280px"
:option="option1" :option="proTrend"
autoresize 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> </datav-card>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<datav-card> <datav-card>
<!-- <datav-tabs v-model="activeTabRight" size="small"> <datav-tabs v-model="activeTabRight" size="small">
<datav-tab-item label="枪支管理" name="1">
<datav-tabs
v-model="activeMailTabRight"
type="bottom-button"
>
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
42
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
2
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
40
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
95%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="涉企问题" name="2">
<datav-tabs
v-model="activeMailTabRight"
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="黄赌毒" name="3"> <datav-tab-item label="黄赌毒" name="3">
<datav-tabs <datav-tabs
v-model="activeMailTabRight" v-model="activeMailTabRight"
@ -241,75 +164,16 @@
> >
<datav-tab-item label="分县市局" name="1"> <datav-tab-item label="分县市局" name="1">
<el-scrollbar height="300px"> <el-scrollbar height="300px">
<datav-chart-bar-mail <datav-chart-bar
:data="xx" :data="hddList"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="执法办案" name="4">
<datav-tabs
v-model="activeMailTabRight"
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
size="large" size="large"
/> />
</el-scrollbar> </el-scrollbar>
</datav-tab-item> </datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs> </datav-tabs>
</datav-tab-item> </datav-tab-item>
<datav-tab-item label="工作日测酒" name="5">
<datav-tabs
v-model="activeMailTabRight"
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs> </datav-tabs>
</datav-tab-item>
</datav-tabs>-->
<!-- <datav-chart-bar <!-- <datav-chart-bar
title="问题数排名" title="问题数排名"
@ -366,74 +230,45 @@ 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 {getAllSupervisionNotifyCount, getChangedRank} from "@/api/data/supervisionNotify.ts"; import {getAllSupervisionNotifyCount, getChangedRank, getSupervisionTrend} from "@/api/data/supervisionNotify.ts";
import {getGobalRecentlyTrendByMonth} from "@/api/data/basicScreen.ts";
const data1= ref([]);
const activeTabLeft = ref("3");
const overview = ref({
supervisionNotifyTotal: 0,
supervisionNotifyOrgTotal: 0,
supervisionNotifyPreTotal: 0,
supervisionNotifyChangingTotal: 0,
supervisionNotifyChangedTotal: 0,
correctionRate: 0,
});
const rankOverview = ref({
proTotal: 0,
changing: 0,
changed: 0,
correctionRate: 0,
});
const wtlxList = ref([])
const hddList = ref([])
echarts.registerMap("changsha", changshaMap); echarts.registerMap("changsha", changshaMap);
const option = {
geo: {
// registerMap''
map: "changsha",
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{gte: 85, lte: 100, label: "问题数低于500"},
{gte: 65, lte: 85, label: "问题数低于1000"},
{gte: 0, lte: 65, label: "问题数低于1000"},
],
right: 10, //
realtime: false,
orient: "horizontal", //
textStyle: {
color: "#fff", //
},
calculable: true,
inRange: {
color: ["#D34343", "#F6A149", "#4987F6"],
},
},
series: [
{
name: "长沙",
type: "map",
map: "changsha",
hoverAnimation: true,
label: { // region 线
show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E", //
},
},
},
],
};
const option1 = ref({ const proTrend = ref({
grid: {
left: '10%', //
right: '10%', //
top: '10%', //
bottom: '20%', //
containLabel: false //
},
xAxis: { xAxis: {
type: "category", type: "category",
boundaryGap: false, boundaryGap: false,
data: [ data: [],
"9/10",
"9/11",
"9/12",
"9/13",
"9/14",
"9/15",
"9/16",
"9/17",
"9/18",
"9/19",
"9/20",
"9/21",
"9/22",
"9/23",
],
}, },
yAxis: { yAxis: {
type: "value", type: "value",
@ -476,166 +311,202 @@ const option1 = ref({
}, },
]), ]),
}, },
data: [ data: [],
2000, 1160, 2310, 3000, 3100, 3100, 3100, 2000, 1160, 2310,
3000, 3100, 3100, 3100,
],
}, },
], ],
}); });
const data1 = ref([ const years = ref(['2024', '2023', '2022']); //
/*{ const selectedYear = ref('2024'); //
label: "开福分局", const handleCommand = (year) => {
value: 90, selectedYear.value = year; //
unit: "%", getSupervisionTrend(year).then(res => {
numerator: 16, const supervisionTrend = res.supervisionTrend;
denominator: 17, const categories = supervisionTrend.map(item => item.name);
}, const values = supervisionTrend.map(item => item.value);
{ //
label: "芙蓉分局", proTrend.value.xAxis.data = categories;
value: 90, proTrend.value.series[0].data = values;
unit: "%", });
numerator: 11, };
denominator: 11, // endregion
},
{
label: "岳麓分局", // region
value: 80, const wtlxPieOption = computed(() => {
unit: "%", return {
numerator: 10, tooltip: {
denominator: 10, trigger: "item",
},
{
label: "雨花分局",
value: 70,
unit: "%",
numerator: 9,
denominator: 9,
},
{
label: "望城分局",
value: 60,
unit: "%",
numerator: 4,
denominator: 4,
}, },
series: [
{ {
label: "浏阳市局", type: "pie",
value: 50, radius: ["40%", "70%"],
unit: "%", label: {
numerator: 3, color: "#fff",
denominator: 3,
}, },
{ data: wtlxList.value,
label: "长沙县局",
value: 40,
unit: "%",
numerator: 3,
denominator: 3,
},*/
]);
const data2 = [
{
name: "开福分局",
value: 9700
},
{
name: "芙蓉分局",
value: 9021
}, },
],
};
});
// endregion
// region
let superviseTempMapVoList = [
{ {
name: "岳麓分局", "name": "天心分局",
value: 8512 "totalPro": 11,
"changing": 11,
"changed": 11,
"relationOrg": 11,
"changedRate": 11
}
];
echarts.registerMap("changsha", changshaMap);
const option = ref({
geo: {
map: "changsha",
}, },
{ tooltip: {
name: "雨花分局", trigger: 'item',
value: 8021 formatter: function (params) {
console.log(params)
const dataItem = superviseTempMapVoList.find(item => item.name.includes(params.name.substring(0, 2)));
if (dataItem) {
return `
<div class="tooltip">
<div class="tooltip-title">${dataItem.name}</div>
<div class="tooltip-content">
<ul class="tooltip-ul" >
<li>通报问题数 <span>${dataItem.totalPro}</span></li>
<li>整改中 <span>${dataItem.changing}</span></li>
<li>已整改 <span>${dataItem.changed}</span></li>
<li>涉及单位数 <span>${dataItem.relationOrg}</span></li>
<li>整改率 <span>${dataItem.changedRate}</span></li>
</ul>
</div>
</div>`;
} else {
return `<div class="tooltip">
<div class="tooltip-title">${dataItem.name}</div>
<div class="tooltip-content">
<ul class="tooltip-ul"">
<li>通报问题数 <span>0</span></li>
<li>整改中 <span>0</span></li>
<li>已整改 <span>0</span></li>
<li>涉及单位数 <span>0</span></li>
<li>整改率 <span>0</span></li>
</ul>
</div>
</div>`;
}
}, },
{ // backgroundColor: "#031577", //
name: "望城分局", // borderColor: "#0A2F86",
value: 7111 // borderWidth: 0, // 1
// borderRadius: 3, // 3
// shadowBlur: 0, // 8
// shadowOffsetX: 0, // 0
// shadowOffsetY: 0, // 6
}, },
{ visualMap: {
name: "浏阳市局",
value: 6622 type: "piecewise",
bottom: 10,
pieces: [
{gte: 0, lte: 10, label: "问题数低于500"},
{gte: 10, lte: 20, label: "问题数介于500-1000"},
{gte: 30, label: "问题数高于1000"},
],
right: 10,
realtime: false,
orient: "horizontal",
textStyle: {
color: "#fff",
}, },
{ calculable: true,
name: "长沙县局", inRange: {
value: 6221 color: ["#4987F6", "#F6A149", "#D34343",],
}, },
];
const option2 = {
tooltip: {
trigger: "item",
}, },
series: [ series: [
{ {
type: "pie", name: "长沙",
radius: ["40%", "70%"], type: "map",
map: "changsha",
hoverAnimation: true,
label: { label: {
color: "#fff", show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E",
borderColor: "#1773c3",
}, },
data: [
{value: 18.6, name: "执法办案"},
{value: 15.5, name: "训练执勤"},
{value: 1.9, name: "纪律作风"},
{value: 2.5, name: "专项工作"},
{value: 30, name: "整改核查"},
{value: 31, name: "其他类型"},
],
}, },
emphasis: {
areaColor: "#FFD700", //
borderColor: "#FF0000", //
borderWidth: 4 //
},
data: []
}
], ],
}; })
// endregion
// region
const activeTabLeft = ref("3");
const overview = ref({
supervisionNotifyTotal: 0,
supervisionNotifyOrgTotal: 0,
supervisionNotifyPreTotal: 0,
supervisionNotifyChangingTotal: 0,
supervisionNotifyChangedTotal: 0,
correctionRate: 0,
});
const rankOverview = ref({
proTotal: 0,
changing: 0,
changed: 0,
correctionRate: 0,
});
// region
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"),
]); ]);
//
function getData() { function getData() {
getAllSupervisionNotifyCount(time.value).then((res) => { getAllSupervisionNotifyCount(time.value).then((res) => {
overview.value = res.overview; overview.value = res.overview;
wtlxList.value = res.wtlxList
hddList.value = res.hddList;
superviseTempMapVoList = res.superviseTempMapVoList;
}); });
getChangedRank(time.value, 3).then((res) => { getChangedRank(time.value, 3).then((res) => {
rankOverview.value = res.rankOverview; rankOverview.value = res.rankOverview;
data1.value = res.changedRankList; data1.value = res.changedRankList;
option2.series[0].data = res.wtlxList;
}); });
getSupervisionTrend(new Date().getFullYear()).then((res) => {
const supervisionTrend = res.supervisionTrend;
const categories = supervisionTrend.map(item => item.name);
const values = supervisionTrend.map(item => item.value);
//
proTrend.value.xAxis.data = categories;
proTrend.value.series[0].data = values;
});
} }
watch(time, () => { watch(time, () => {
getData(); getData();
}); });
watch(activeTabLeft, () => { watch(activeTabLeft, () => {
alert(activeTabLeft.value) // alert(activeTabLeft.value)
getChangedRank(time.value, activeTabLeft.value).then((res) => { getChangedRank(time.value, activeTabLeft.value).then((res) => {
rankOverview.value = res.rankOverview; rankOverview.value = res.rankOverview;
data1.value = res.changedRankList;
}); });
}); });
onMounted(() => { onMounted(() => {
getData(); getData();
}); });
@ -657,6 +528,37 @@ const colors = [
// endregion // endregion
const data2 = [
{
name: "开福分局",
value: 9700
},
{
name: "芙蓉分局",
value: 9021
},
{
name: "岳麓分局",
value: 8512
},
{
name: "雨花分局",
value: 8021
},
{
name: "望城分局",
value: 7111
},
{
name: "浏阳市局",
value: 6622
},
{
name: "长沙县局",
value: 6221
},
];
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -684,4 +586,103 @@ const colors = [
margin-bottom: 10px; margin-bottom: 10px;
} }
} }
:deep() {
//
.tooltip {
position: relative;
width: 169.88px;
height: 198px;
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: 169.88px;
height: 43px;
background: linear-gradient(180deg, rgba(1, 4, 87, 0.8) 0%, rgba(3, 21, 119, 0.8) 100%);
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
text-align: center; /* 水平居中 */
font-weight: 400;
font-size: 16px;
color: #FFFFFF;
line-height: 22px;
border-bottom: 1px solid #253755; /* 设置下边框 */
}
.tooltip-content {
width: 170px;
height: 155.8px;
//font-size: 11px;
margin-top: -12px;
background: linear-gradient(180deg, #010457 0%, #031577 100%);
}
.tooltip-content ul {
list-style-type: none; /* 移除默认的小圆点 */
padding: 0;
}
.tooltip-content ul li {
margin-left: 5px;
height: 25px;
color: #597AE9;
font-size: 13px;
}
// span
.tooltip-ul span {
float: right;
width: 50px;
text-align: right;
margin-right: 35px;
color: #fff;
font-size: 13px;
}
/* 小尖角 */
.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> </style>
Loading…
Cancel
Save