Browse Source

fix:区县视频督察:1、隐藏“办结率” 2、右上角新增“登录客户端”入口,链接参考首页的视频督察 3、视频做轮播效果 4、总览数据参考市局大屏 5、解决右上左上无数据问题 6、其它统计图统一维度

main
pengwei 6 months ago
parent
commit
56b65acc75
  1. 8
      src/api/screen/subScreen/subOneMailVisits.ts
  2. 25
      src/api/screen/subScreen/subOneRightsConfort.ts
  3. 3
      src/api/screen/subScreen/subOneSupervisionNotify.ts
  4. 137
      src/components/datav/subOne/subOneHeader.vue
  5. 5
      src/views/datav/Global.vue
  6. 12
      src/views/datav/SceneInsp.vue
  7. 3
      src/views/datav/subonedatav/SubOneAuditSuper.vue
  8. 25
      src/views/datav/subonedatav/SubOneCaseVerif.vue
  9. 21
      src/views/datav/subonedatav/SubOneGlobal.vue
  10. 176
      src/views/datav/subonedatav/SubOneMailVisits.vue
  11. 138
      src/views/datav/subonedatav/SubOneRightsComfort.vue
  12. 294
      src/views/datav/subonedatav/SubOneSceneInsp.vue
  13. 16
      src/views/datav/subonedatav/SubOneVideoInsp.vue

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

@ -34,4 +34,10 @@ export function getSubOneEntanglementAndMassMail(departId, times) {
return request.get({
url: `/datav/sub1/mailVisits/getSubOneEntanglementAndMassMail?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
});
}
}
//追责问责情况
export function getSubOneResultCountFun(departId,times){
return request.get({
url: `/datav/sub1/mailVisits/getSubOneResultCount?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
})
}

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

@ -24,4 +24,27 @@ export function getSubOneCaseAriseSituationRate(departId, times) {
});
}
//抚慰情况
export function getComfortSituation(departId,times){
return request.get({
url:`/datav/sub1/rightsComfort/getComfortSituation?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
})
}
//案件类别占比
export function getSubCaseType(departId,times){
return request.get({
url:`/datav/sub1/rightsComfort/getSubCaseType?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
})
}
//打处情况
export function getPunishmentSituation(departId,times){
return request.get({
url:`/datav/sub1/rightsComfort/getPunishmentSituation?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
})
}
//获取地图数据
export function getSubComfortMapIcon(departId,times){
return request.get({
url:`/datav/sub1/rightsComfort/getComfortMapIcon?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
})
}

3
src/api/screen/subScreen/subOneSupervisionNotify.ts

@ -1,6 +1,7 @@
import request from "@/api/request";
//监督管理-整改率排名
export function getSubOneChangedRank(departId, times) {
return request.get({
url: `/datav/sub1/supervisonNotify/getSubOneChangedRank?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`
@ -19,7 +20,7 @@ export function getSubOneSupervisionTrend(departId, year) {
url: `/datav/sub1/supervisonNotify/getSubOneSupervisionTrend?departId=${departId}&year=${year}`
});
}
//监督管理-中央数据
export function getSubOneSupervisionNotifyCount(departId, times) {
return request.get({
url: `/datav/sub1/supervisonNotify/getSubOneSupervisionNotifyCount?departId=${departId}&beginTime=${times[0]}&endTime=${times[1]}`

137
src/components/datav/subOne/subOneHeader.vue

@ -0,0 +1,137 @@
<template>
<header>
<div class="flex flex v-center between relative">
<nav class="flex">
<router-link :to="`/datav/subOneVideoInsp?departId=`+ deptId" v-slot="{ isActive }">
<span>视频督察</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link :to="`/datav/subOneSceneInsp?departId=`+deptId" v-slot="{ isActive }">
<span>监督管理</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link :to="`/datav/subOneCaseVerif?departId=`+ deptId" v-slot="{ isActive }">
<span>案件核查</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
</nav>
<h1>
<router-link :to="`/datav/subOneGlobal?departId=`+ deptId" >
<span>{{ departName }}数字督察一体化平台</span>
</router-link>
</h1>
<nav class="flex right">
<router-link :to="`/datav/sceneInsp?departId=`+ deptId" v-slot="{ isActive }">
<span>民意感知</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link :to="`/datav/subOneMailVisits?departId=`+ deptId" v-slot="{ isActive }">
<span>信访投诉</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link :to="`/datav/subOneRightsComfort?departId=`+ deptId" v-slot="{ isActive }">
<span>维权抚慰</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
</nav>
</div>
</header>
</template>
<script setup>
import Img1 from '/imgs/datav/base.png'
import Img2 from '/imgs/datav/base_active.png'
import useUserStore from "@/stores/modules/user";
const props =defineProps({
departId:{
default:null
},
departName:{
type:String,
default:'长沙公安'
}
})
const userStore = useUserStore();
let deptId = ref();
let departName = ref()
watch(()=>props.departId,(newVal)=>{
console.log('new',newVal)
if(newVal == null){
console.log(userStore.user)
deptId.value= userStore.user.departId;
departName.value =userStore.user.departName;
}else{
deptId.value = newVal;
departName.value = props.departName
}
},{deep:true,immediate:true})
</script>
<style lang="scss" scoped>
header {
color: #fff;
margin-bottom: 20px;
position: relative;
&::before {
display: block;
content: "";
position: absolute;
width: 73.5%;
height: 213px;
top: 0;
left: 50%;
transform: translateX(-50%);
background-image: url("/imgs/datav/bg-1.png");
z-index: 0;
}
h1 {
font-family: PangMenZhengDao;
font-size: 48px;
line-height: 1;
letter-spacing: 2px;
margin: 0;
white-space: nowrap;
}
nav {
a {
color: inherit;
text-decoration: none;
text-align: center;
font-size: 19px;
}
span {
display: block;
}
img {
display: block;
margin-top: -12px;
}
&.right {
img {
transform: scaleX(-1);
}
}
}
}
:deep() {
a {
color: inherit;
text-decoration: none;
}
}
</style>

5
src/views/datav/Global.vue

@ -173,6 +173,11 @@ import {
getGlobalTrend,
} from "@/api/screen/gobal.ts";
import { mapOrgNameMapping, orgMapping } from "@/enums/orgMapping.js";
import useUserStore from "@/stores/modules/user";
const userStore =useUserStore();
console.log('user',userStore.user)
// region
const router = useRouter();

12
src/views/datav/SceneInsp.vue

@ -645,12 +645,11 @@ const option = ref({
<div class="tooltip-title">${dataItem.originalName}</div>
<div class="tooltip-content">
<ul class="tooltip-ul" >
<li>通报问题数 <span>${dataItem.totalPro}</span></li>
<li>通报问题数 <span>${dataItem.totalPro}</span></li>
<li>办理中 <span>${dataItem.processingNumber}</span></li>
<li>已办结 <span>${dataItem.completedNumber}</span></li>
<li>涉及单位数 <span>${dataItem.relationOrg}</span></li>
<li>涉及人数 <span>${dataItem.personNum}</span></li>
<li>问责单位数 <span>${dataItem.relationOrg}</span></li>
<li>问责人次 <span>${dataItem.personNum}</span></li>
</ul>
</div>
</div>`;
@ -662,9 +661,8 @@ const option = ref({
<li>通报问题数 <span>-</span></li>
<li>办理中 <span>-</span></li>
<li>已办结 <span>-</span></li>
<li>涉及单位数 <span>-</span></li>
<li>涉及人数 <span>-</span></li>
<li>问责单位数 <span>-</span></li>
<li>问责人次 <span>-</span></li>
</ul>
</div>
</div>`;

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

@ -1,7 +1,7 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<!-- <sub-one-header />-->
<main>
<el-row :gutter="16">
<el-col :span="6">
@ -161,6 +161,7 @@ import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core";
import moment from "moment/moment.js";
import SubOneHeader from "../../../components/datav/subOne/subOneHeader.vue";
const time = ref([

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

@ -1,7 +1,7 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<sub-one-header :depart-id="currentDepartId"/>
<main>
<el-row :gutter="16">
<el-col :span="6">
@ -77,15 +77,16 @@
style="width: 16.66%"
/>
<datav-statistic
:value="overview.punishPre"
title="问责人次"
:value="overview.punishOrg"
title="问责单位数"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.punishOrg"
title="问责单位数"
:value="overview.punishPre"
title="问责人次"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.rate"
value-unit="%"
@ -158,7 +159,7 @@
/>
</div>
</datav-tab-item>
<datav-tab-item label="停职处理情况" name="2">
<datav-tab-item label="停职处理情况" name="2" style="display: none">
<div class="mb-40">
<v-charts
style="height: 340px"
@ -192,6 +193,7 @@ import {
getSubOneCaseVerificationTrend
} from "@/api/screen/subScreen/subOneCaseVerif.ts";
import {circularChart} from "@/views/datav/simulateData/AnimationTestData.js";
import SubOneHeader from "@/components/datav/subOne/subOneHeader.vue";
// region
const currentYear = new Date().getFullYear();
@ -202,7 +204,16 @@ const time = ref([
moment().format("YYYY-MM-DD"),
]);
const route = useRoute();
const currentDepartId = route.query.departId;
let currentDepartId = route.query.departId;
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
watch(()=>route.query.departId,(newVal)=>{
if(newVal!= null){
currentDepartId = newVal
}else{
currentDepartId=userStore.user.departId;
}
},{immediate:true})
const currentMapData = ref({}) //
const fxsjBarList = ref([]);
const jsdwBarList = ref([]);

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

@ -1,7 +1,7 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<sub-one-header :depart-id="currentDepartId"></sub-one-header>
<main>
<el-row :gutter="16">
<el-col :span="6">
@ -156,6 +156,8 @@ import {
getSubOneStrongProblemRate,
getSubOneGlobalTrend, getSubOneGlobalMap
} from "@/api/screen/subScreen/subOneGlobal.ts";
import SubOneHeader from "@/components/datav/subOne/subOneHeader.vue";
// region
const showDialog = ref(false); //
@ -167,7 +169,22 @@ const tempPolice = ref(0)
const route = useRoute();
const currentMapData = ref({})
const subOneGlobalMap = ref(null); //
const currentDepartId = route.query.departId;
let currentDepartId = route.query.departId;
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
watch(()=>route.query.departId,(newVal)=>{
console.log('newValue',newVal)
if(newVal!= null){
currentDepartId = newVal
}else{
currentDepartId=userStore.user.departId;
}
},{immediate:true})
const fxsjlist = ref([]); //
const jsdwlist = ref([]); //
const ywzblist = ref([]); //

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

@ -1,13 +1,13 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<sub-one-header :depart-id="currentDepartId"/>
<main>
<el-row :gutter="16">
<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="subOneFirstAndRepeat">
@ -67,17 +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"
label-width="110"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="大队" name="2">
@ -104,23 +85,13 @@
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="领导接访" name="3">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdLeaderViewMailList"
:max="11"
size="large"
label-width="110"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
</datav-tabs>
</datav-card>
</datav-card>
<datav-card title="信访问题类型">
<datav-card title="信访投诉占比">
<v-charts
style="height: 300px"
:option="option2"
@ -224,35 +195,26 @@
</el-col>
<el-col :span="6">
<datav-card title="缠访集访情况">
<datav-card title="集访情况">
<el-row class="mb-32">
<el-col :span="8">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentRightOverview.leaderReview }}
</div>
<div class="descriptions_label">
领导督办
</div>
</div>
</el-col>
<el-col :span="8">
<el-col :span="12">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentRightOverview.entanglement }}
{{ currentRightOverview.mass }}
</div>
<div class="descriptions_label">
缠访闹访
群体集访
</div>
</div>
</el-col>
<el-col :span="8">
<!-- 领导接访-->
<el-col :span="12">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ currentRightOverview.mass }}
{{ currentLeftOverview.leaderMail }}
</div>
<div class="descriptions_label">
群体集访
领导接访数
</div>
</div>
</el-col>
@ -264,21 +226,11 @@
type="bottom-button"
v-model="subOneFxsjEntanglementTab"
>
<datav-tab-item label="领导督办" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjLeaderReviewMailList"
size="large"
:max="11"
:color="leaderViewColors"
label-width="110"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="缠访闹访" name="2">
<datav-tab-item label="群体集访" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjEntanglementMailList"
:data="fxsjMassMailList"
:max="11"
size="large"
:color="colors"
@ -286,14 +238,15 @@
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="群体集访" name="3">
<!--派出所-领导接访-->
<datav-tab-item label="领导接访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjMassMailList"
:data="fxsjLeaderViewMailList"
:max="11"
size="large"
:color="colors"
label-width="110"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
@ -303,34 +256,25 @@
<datav-tabs
type="bottom-button"
>
<datav-tab-item label="领导督办" name="1">
<datav-tab-item label="群体集访" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdLeaderReviewMailList"
size="large"
label-width="110"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="缠访闹访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdEntanglementMailList"
:data="bwzdMassMailList"
:max="11"
size="large"
:color="colors"
label-width="110"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="群体集访" name="3">
<datav-tab-item label="领导接访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="bwzdMassMailList"
:data="bwzdLeaderViewMailList"
:max="11"
size="large"
:color="colors"
label-width="110"
:color="leaderViewColors"
/>
</el-scrollbar>
</datav-tab-item>
@ -371,9 +315,12 @@ import {
getSubOneFirstAndRepeatMail,
getSubOneAllMailCount,
getSubOneMailTrend,
getSubOneMailMapIcon
getSubOneMailMapIcon,
getSubOneResultCountFun
} from "@/api/screen/subScreen/subOneMailVisits.ts";
import SubOneHeader from "@/components/datav/subOne/subOneHeader.vue";
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
//region
const activeTab = ref("1");
const bwzdActiveTab = ref("1");
@ -426,7 +373,9 @@ const years = ref([currentYear.toString(), (currentYear - 1).toString(), (curren
const selectedYear = ref(currentYear); //
const route = useRoute();
const currentMapData = ref({})
const currentDepartId = route.query.departId;
let currentDepartId = route.query.departId;
const colors = [
{
color: "linear-gradient( 270deg, #FB002D 0%, #822232 100%)",
@ -497,9 +446,21 @@ const getSubOneFirstAndRepeatMailData = async (depart = currentDepartId, timeVal
const getSubOneAllMailCountData = async (depart = currentDepartId, timeValue = time.value) => {
const res = await getSubOneAllMailCount(depart, timeValue)
overview.value = res.overview;
option2.value.series[0].data= [{value:overview.value.manageMail,name:"局长信箱"},
{value:overview.value.countryMail,name:"国家信访"},
{value:overview.value.policeMail,name:"公安部信访"},
{value:overview.value.numberMail,name:"12337信访"},]
}
const getSubOneMailMapIconData = async (departId = currentDepartId, timeValue = time.value) => {
const res = await getSubOneMailMapIcon(departId, timeValue);
const mappedData = res.mailMapIconList.map(item => {
@ -907,7 +868,7 @@ const countryTrend = ref({
},
],
});
const option2 = {
const option2 =ref( {
series: [
{
type: "pie",
@ -931,8 +892,8 @@ const option2 = {
tooltip: {
trigger: "item",
},
};
const option3 = {
});
const option3 =ref( {
tooltip: {
trigger: "item",
},
@ -951,12 +912,27 @@ const option3 = {
],
},
],
};
});
// endregion
//
const getResultCountData = async (departId = currentDepartId,timeValue = time.value)=>{
const res = await getSubOneResultCountFun(departId,timeValue);
console.log('追责问责情况--------')
let resultCountArray = []
Object.keys(res).forEach(s=>{
resultCountArray.push({name:s,value:res[s]})
})
console.log('resultCountArray',resultCountArray)
option3.value.series[0].data=resultCountArray;
}
getResultCountData();
// region
const subOneFxsjFirstAndRepeatAnimation = () => {
subOneFxsjFirstAndRepeatTab.value = (parseInt(subOneFxsjFirstAndRepeatTab.value) % 3 + 1).toString();
subOneFxsjFirstAndRepeatTab.value = (parseInt(subOneFxsjFirstAndRepeatTab.value) % 2 + 1).toString();
};
subOneFxsjFirstAndRepeatIntervalId = setInterval(subOneFxsjFirstAndRepeatAnimation, 3000);
//
@ -989,7 +965,7 @@ const subOneMailTrendAnimation = () => {
subOneMailTrendIntervalId = setInterval(subOneMailTrendAnimation, 2000);
// 访访
const subOneFxsjEntanglementAnimation = () => {
subOneFxsjEntanglementTab.value = (parseInt(subOneFxsjEntanglementTab.value) % 3 + 1).toString();
subOneFxsjEntanglementTab.value = (parseInt(subOneFxsjEntanglementTab.value) % 2 + 1).toString();
};
subOneFxsjEntanglementIntervalId = setInterval(subOneFxsjEntanglementAnimation, 3000);
// //
@ -1014,6 +990,14 @@ const handleCommand = (year) => {
watch(time, () => {
getData();
})
watch(()=>route.query.departId,(newVal)=>{
if(newVal!= null){
currentDepartId = newVal
}else{
currentDepartId=userStore.user.departId;
}
},{immediate:true})
onMounted(() => {
getData();
setupEventListeners();
@ -1137,6 +1121,8 @@ const subOneFxsjEntanglementAnimationStop = () => {
}
.tooltip-content ul li {
display: flex;
justify-content: space-around;
height: 26px;
color: #597AE9;
font-weight: 400;
@ -1144,11 +1130,11 @@ const subOneFxsjEntanglementAnimationStop = () => {
}
.tooltip-ul span {
display: inline-block;
float: right;
width: 55px;
color: #fff;
font-size: 14px;
text-align: center; /* 水平居中 */
//text-align: center; /* */
}
}

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

@ -1,7 +1,7 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<sub-one-header :depart-id="currentDepartId"/>
<main>
<el-row :gutter="16">
<el-col :span="6">
@ -13,7 +13,7 @@
type="bottom-button"
title="案件数"
>
<datav-tab-item label="分县市局" name="1">
<datav-tab-item label="派出所" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjRightsRank"
@ -23,7 +23,7 @@
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<datav-tab-item label="大队" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="jsdwRightsRank"
@ -40,7 +40,7 @@
v-model="activeMailTab"
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<datav-tab-item label="派出所" name="1">
<el-scrollbar height="300px">
<datav-chart-bar
:data="fxsjComfortMoneyRank"
@ -50,7 +50,7 @@
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<datav-tab-item label="大队" name="2">
<el-scrollbar height="300px">
<datav-chart-bar
:data="jsdwComfortMoneyRank"
@ -102,14 +102,15 @@
title="受侵害人数"
style="width: 20%"
/>
<datav-statistic
:value="comfortOverview.comfortTotal"
title="抚慰人数"
:value="comfortOverview.hitTotal"
title="打击处理人数"
style="width: 20%"
/>
<datav-statistic
:value="comfortOverview.hitTotal"
title="打击处理人数"
:value="comfortOverview.comfortTotal"
title="抚慰人数"
style="width: 20%"
/>
<datav-statistic
@ -155,14 +156,14 @@
v-model="activeMailTab"
type="bottom-button"
>
<datav-tab-item label="受伤人数" name="1">
<v-charts
style="height: 310px;"
:option="hurtNumOption"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="受伤类別" name="2">
<!-- <datav-tab-item label="受伤人数" name="1">-->
<!-- <v-charts-->
<!-- style="height: 310px;"-->
<!-- :option="hurtNumOption"-->
<!-- autoresize-->
<!-- />-->
<!-- </datav-tab-item>-->
<datav-tab-item label="受伤类別" name="1">
<v-charts
style="height: 310px;"
:option="hurtTypeOption"
@ -201,8 +202,6 @@
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
</el-row>
@ -217,25 +216,29 @@ import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core";
import moment from "moment";
import {
getALlComfortCount,
getPunishmentSituation,
getComfortSituation,
getRightsAndComfortRank, getPoliceHurtSituationAndHurtType, getCaseAriseSituationRate, getComfortMapIcon
} from "@/api/screen/rightsComfort.ts";
import {getSubOneStreetMap} from "@/api/screen/subScreen/subOneGlobal.ts";
import {
getSubOneALlComfortCount, getSubOneCaseAriseSituationRate,
getSubOnePoliceHurtSituationAndHurtType
getSubOnePoliceHurtSituationAndHurtType,
getComfortSituation,
getSubCaseType,
getPunishmentSituation,
getSubComfortMapIcon
} from "@/api/screen/subScreen/subOneRightsConfort.ts";
import SubOneHeader from "@/components/datav/subOne/subOneHeader.vue";
import useUserStore from "@/stores/modules/user";
// region
const userStore = useUserStore();
const router = useRouter();
const route = useRoute();
const currentMapData = ref({})
const chart = ref(null); //
const currentDepartId = route.query.departId;
let currentDepartId = route.query.departId;
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
@ -437,6 +440,7 @@ const getRightsRankList = async (departId, timeValue) => {
const res = await getSubOneALlComfortCount(departId, timeValue);
fxsjRightsRank.value = res.fxsjRightsRankList;
jsdwRightsRank.value = res.jsdwRightsRankList;
comfortOverview.value=res.comfortOverview;
}
//
// const getComfortOverview = async (timeValue) => {
@ -528,14 +532,63 @@ const getCaseAriseSituationRateList = async (departId, timeValue) => {
}
//
const getComfortSituationFun =async (departId, timeValue)=>{
const res = await getComfortSituation(departId,timeValue);
console.log("获取抚慰情况",res)
comfortSituationOption.value.series[0].data = res.comfortSituationList;
}
//
const getSubCaseTypeFun = async (departId,timeValue)=>{
const res = await getSubCaseType(departId,timeValue);
console.log("获取案件类别占比",res)
xsajCaseTypeOption.value.series[0].data=res.crownCaseBar
xzajCaseTypeOption.value.series[0].data=res.administrativeCase
}
//
const getPunishmentSituationFun = async (departId,timeValue) =>{
const res = await getPunishmentSituation(departId,timeValue);
console.log("打处情况",res)
punishmentSituationOption.value.series[0].data = res.PunishmentSituation
}
//
const getMapData = async (departId, times) => {
const res = await getSubComfortMapIcon(departId, times);
console.log('getMapData',res)
if(res && res.comfortMapVoList){
const mappedData = res.comfortMapVoList.map(item => {
return {
...item,
value: item.totalPro,
};
});
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
const range30Percent = avg * 0.3 //
option.value.visualMap.pieces = [
{gte: 0, lte: avg - range30Percent, label: "低于平均问题30%", color: "#4987F6"},
{gte: avg - range30Percent, lte: avg + range30Percent, label: "平均问题上下浮动30%内", color: "#F6A149"},
{gte: avg + range30Percent, label: "高于平均问题30%", color: "#D34343"},
];
globalTempMapVoList.value = mappedData;
option.value.series[0].data = mappedData;
}
}
// endregion
function getData() {
getRightsRankList(currentDepartId, time.value);
// getComfortOverview(time.value);
// getMapData(time.value)
getMapData(currentDepartId,time.value)
// getPunishmentSituationList(time.value);
// getComfortSituationList(time.value);
getPunishmentSituationFun(currentDepartId,time.value);
getComfortSituationFun(currentDepartId,time.value)
getSubCaseTypeFun(currentDepartId,time.value);
getPoliceHurtSituationList(currentDepartId, time.value);
getCaseAriseSituationRateList(currentDepartId, time.value);
}
@ -543,6 +596,13 @@ function getData() {
watch(time, () => {
getData();
})
watch(()=>route.query.departId,(newVal)=>{
if(newVal!= null){
currentDepartId = newVal
}else{
currentDepartId=userStore.user.departId;
}
},{immediate:true})
onMounted(() => {
getMapJSON(currentDepartId);
getData();
@ -574,11 +634,11 @@ const option = ref({
<div class="tooltip-title">${dataItem.name}</div>
<div class="tooltip-content">
<ul class="tooltip-ul" >
<li>维权案件总数 <span>${dataItem.totalCase}</span></li>
<li>受侵害人数 <span>${dataItem.victimPer}</span></li>
<li>抚慰人数 <span>${dataItem.comfortPer}</span></li>
<li>打击处理人数 <span>${dataItem.hitPro}</span></li>
<li>抚慰金额 <span>${dataItem.comfortMon}</span></li>
<li>维权案件总数 <span>${dataItem.rightsNumber || '-'}</span></li>
<li>受侵害人数 <span>${dataItem.victimNumber|| '-'}</span></li>
<li>抚慰人数 <span>${dataItem.comfortPersonNumber|| '-'}</span></li>
<li>打击处理人数 <span>${dataItem.hitPersonNumber|| '-'}</span></li>
<li>抚慰金额 <span>${dataItem.comfortMoney|| '-'}</span></li>
</ul>
</div>
</div>`;
@ -679,7 +739,7 @@ const xzajCaseTypeOption = ref({
trigger: "item",
},
});
const punishmentSituationOption = {
const punishmentSituationOption = ref({
series: [
{
type: "pie",
@ -696,8 +756,8 @@ const punishmentSituationOption = {
tooltip: {
trigger: "item",
},
};
const comfortSituationOption = {
});
const comfortSituationOption =ref( {
series: [
{
type: "pie",
@ -714,7 +774,7 @@ const comfortSituationOption = {
tooltip: {
trigger: "item",
},
};
});
const hurtNumOption = ref({
series: [
{
@ -949,4 +1009,4 @@ const colors = [
}
</style>
</style>

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

@ -1,12 +1,12 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<sub-one-header :depart-id="currentDepartId"/>
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="日常督察情况">
<datav-card title="现场督察">
<datav-tabs
v-model="subOneRcdcProRankTab"
type="bottom-button"
@ -142,33 +142,27 @@
<datav-statistic
:value="overview.supervisionNotifyTotal"
title="通报问题数"
style="width: 16.66%"
style="width: 20%"
/>
<datav-statistic
:value="overview.supervisionNotifyChangingTotal"
title="办理中"
style="width: 16.66%"
style="width: 20%"
/>
<datav-statistic
:value="overview.supervisionNotifyChangedTotal"
title="已办结"
style="width: 16.66%"
style="width: 20%"
/>
<datav-statistic
:value="overview.supervisionNotifyOrgTotal"
title="涉及单位数"
style="width: 16.66%"
title="问责单位数"
style="width: 20%"
/>
<datav-statistic
:value="overview.supervisionNotifyPreTotal"
title="涉及人数"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.correctionRate"
value-unit="%"
title="整改率"
style="width: 16.66%"
title="问责人次"
style="width: 20%"
/>
</div>
<v-charts
@ -316,119 +310,119 @@
</datav-tab-item>
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="枪支管理" name="2">
<datav-tabs
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">
{{ fxsjGunControllerOverview.proTotal }}
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ fxsjGunControllerOverview.changing }}
</div>
<div class="descriptions_label">
办理中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ fxsjGunControllerOverview.changed }}
</div>
<div class="descriptions_label">
已办结
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ fxsjGunControllerOverview.correctionRate }}%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="330px">
<datav-chart-bar
:data="fxsjGunControllerRankList"
size="large"
title="问题数排名"
sub-title="问题数"
:color="colors"
/>
</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">
{{ jsdwGunControllerOverview.proTotal }}
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ jsdwGunControllerOverview.changing }}
</div>
<div class="descriptions_label">
办理中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ jsdwGunControllerOverview.changed }}
</div>
<div class="descriptions_label">
已办结
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
{{ jsdwGunControllerOverview.correctionRate }}%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<el-scrollbar height="330px">
<datav-chart-bar
:data="jsdwGunControllerRankList"
size="large"
title="问题数排名"
sub-title="问题数"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
<!-- <datav-tab-item label="枪支管理" name="2">-->
<!-- <datav-tabs-->
<!-- 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">-->
<!-- {{ fxsjGunControllerOverview.proTotal }}-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 问题数-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <div class="descriptions_cell text-center">-->
<!-- <div class="descriptions_content">-->
<!-- {{ fxsjGunControllerOverview.changing }}-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 办理中-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <div class="descriptions_cell text-center">-->
<!-- <div class="descriptions_content">-->
<!-- {{ fxsjGunControllerOverview.changed }}-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 已办结-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <div class="descriptions_cell text-center">-->
<!-- <div class="descriptions_content">-->
<!-- {{ fxsjGunControllerOverview.correctionRate }}%-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 整改率-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-scrollbar height="330px">-->
<!-- <datav-chart-bar-->
<!-- :data="fxsjGunControllerRankList"-->
<!-- size="large"-->
<!-- title="问题数排名"-->
<!-- sub-title="问题数"-->
<!-- :color="colors"-->
<!-- />-->
<!-- </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">-->
<!-- {{ jsdwGunControllerOverview.proTotal }}-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 问题数-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <div class="descriptions_cell text-center">-->
<!-- <div class="descriptions_content">-->
<!-- {{ jsdwGunControllerOverview.changing }}-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 办理中-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <div class="descriptions_cell text-center">-->
<!-- <div class="descriptions_content">-->
<!-- {{ jsdwGunControllerOverview.changed }}-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 已办结-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <div class="descriptions_cell text-center">-->
<!-- <div class="descriptions_content">-->
<!-- {{ jsdwGunControllerOverview.correctionRate }}%-->
<!-- </div>-->
<!-- <div class="descriptions_label">-->
<!-- 整改率-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-scrollbar height="330px">-->
<!-- <datav-chart-bar-->
<!-- :data="jsdwGunControllerRankList"-->
<!-- size="large"-->
<!-- title="问题数排名"-->
<!-- sub-title="问题数"-->
<!-- :color="colors"-->
<!-- />-->
<!-- </el-scrollbar>-->
<!-- </datav-tab-item>-->
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="涉企问题" name="3">
<!-- </datav-tabs>-->
<!-- </datav-tab-item>-->
<datav-tab-item label="涉企问题" name="2">
<datav-tabs
type="bottom-button">
<datav-tab-item label="派出所" name="1">
@ -540,7 +534,7 @@
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="执法办案" name="4">
<datav-tab-item label="执法办案" name="3">
<datav-tabs
type="bottom-button">
<datav-tab-item label="派出所" name="1">
@ -652,7 +646,7 @@
</datav-tabs>
</datav-tab-item>
<datav-tab-item label="工作日测酒" name="5">
<datav-tab-item label="工作日测酒" name="4">
<datav-tabs
type="bottom-button">
<datav-tab-item label="派出所" name="1">
@ -802,14 +796,18 @@ import {
getSubOneSupervisionTrend, getSubOneWorkDynamics, getSubOneYellowBetDrug
} from "@/api/screen/subScreen/subOneSupervisionNotify.ts";
import {workDynamicColorMapping} from "@/enums/workDynamicColorMapping.js";
import SubOneHeader from "@/components/datav/subOne/subOneHeader.vue";
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
// region
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
]);
const route = useRoute();
const currentDepartId = route.query.departId;
let currentDepartId = route.query.departId;
const currentYear = new Date().getFullYear();
const years = ref([currentYear.toString(), (currentYear - 1).toString(), (currentYear - 2).toString()]); //
const selectedYear = ref(currentYear); //
@ -972,11 +970,10 @@ const option = ref({
<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.personNum}</span></li>
<li>整改率 <span>${dataItem.changedRate}%</span></li>
<li>办理中 <span>${dataItem.processingNumber}</span></li>
<li>已办结 <span>${dataItem.completedNumber}</span></li>
<li>问责单位数 <span>${dataItem.relationOrg}</span></li>
<li>问责人次 <span>${dataItem.personNum}</span></li>
</ul>
</div>
</div>`;
@ -988,9 +985,9 @@ const option = ref({
<li>通报问题数 <span>-</span></li>
<li>办理中 <span>-</span></li>
<li>已办结 <span>-</span></li>
<li>涉及单位数 <span>-</span></li>
<li>涉及人数 <span>-</span></li>
<li>整改率 <span>-</span></li>
<li>问责单位数 <span>-</span></li>
<li>问责人次 <span>-</span></li>
</ul>
</div>
</div>`;
@ -1293,7 +1290,7 @@ const subOneSceneInspTrendAnimation = () => {
subOneSceneInspTrendIntervalId = setInterval(subOneSceneInspTrendAnimation, 2000);
// // tab
const subOneSceneInspZxdxRankAnimation = () => {
subOneZxdcProRankTab.value = (parseInt(subOneZxdcProRankTab.value) % 5 + 1).toString();
subOneZxdcProRankTab.value = (parseInt(subOneZxdcProRankTab.value) % 4 + 1).toString();
};
subOneSceneInspZxdxIntervalId = setInterval(subOneSceneInspZxdxRankAnimation, 3000);
//
@ -1314,6 +1311,13 @@ subOneSceneWorkDynamicsIntervalId = setInterval(subOneSceneWorkDynamicsAnimation
watch(time, () => {
getData();
});
watch(()=>route.query.departId,(newVal)=>{
if(newVal!= null){
currentDepartId = newVal
}else{
currentDepartId=userStore.user.departId;
}
},{immediate:true})
onMounted(() => {
getData();
setupEventListeners();
@ -1477,18 +1481,20 @@ const subOneSceneWorkDynamicsAnimationStop = () => {
}
.tooltip-content ul li {
height: 24px;
display: flex;
justify-content: space-around;
height: 26px;
color: #597AE9;
font-weight: 400;
font-size: 14px;
}
.tooltip-ul span {
display: inline-block;
float: right;
width: 55px;
color: #fff;
font-size: 14px;
text-align: center; /* 水平居中 */
//text-align: center; /* */
}
//.tooltip::before {
@ -1526,4 +1532,4 @@ const subOneSceneWorkDynamicsAnimationStop = () => {
}
</style>
</style>

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

@ -1,7 +1,7 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header />
<sub-one-header :depart-id="currentDepartId"/>
<main>
<el-row :gutter="16">
<el-col :span="6">
@ -205,9 +205,12 @@ import {
getVideoStatus,
} from "@/api/screen/videoSupervise.ts";
import { listVideoInspection } from "@/api/data/videoInspection";
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
// region
const route = useRoute();
const currentDepartId = route.query.departId;
let currentDepartId = route.query.departId;
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
@ -606,6 +609,14 @@ onMounted(() => {
watch(time, () => {
getData();
});
watch(()=>route.query.departId,(newVal)=>{
if(newVal!= null){
currentDepartId = newVal
}else{
currentDepartId=userStore.user.departId;
}
},{immediate:true})
const handleCommand = (year) => {
selectedYear.value = year; //
getSubOneVideoSuperviseTrendData(currentDepartId, selectedYear.value);
@ -705,6 +716,7 @@ const handleClick = (params) => {
// endregion
import { listVideoConfigByDepartId } from '@/api/system/videoConfig'
import SubOneHeader from "@/components/datav/subOne/subOneHeader.vue";
const videos = ref([]);
const activeUrl = ref('');

Loading…
Cancel
Save