Browse Source

信访投诉问题趋势重构

main
parent
commit
57165c953d
  1. 32
      src/views/datav/CaseVerif.vue
  2. 60
      src/views/datav/Gobal.vue
  3. 26
      src/views/datav/MailVisits.vue
  4. 73
      src/views/datav/SceneInsp.vue
  5. 47
      src/views/datav/VideoInsp.vue

32
src/views/datav/CaseVerif.vue

@ -196,17 +196,7 @@ const overview = ref({
punishOrg: 0, //
Rate: 0, //
});
let gobalTempMapVoList = ref([
{
"name": "浏阳市局",
"total": 93,
"confirmed": 11,
"dealCasePro": 8,
"punishPre": 7,
"punishOrg": 9,
"rate": "12%"
}
]);
let gobalTempMapVoList = ref([]);
const jjjgPieList = ref([]);
@ -287,8 +277,15 @@ const getMapIcon = async(timeValue)=> {
};
});
gobalTempMapVoList.value = mappedData
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
const range30Percent = avg*0.3 //
option.value.series[0].data = mappedData;
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"},
];
}
const getProTrendList= async(year) => {
const res = await getCaseVerificationTrend(year);
@ -381,7 +378,7 @@ const option = ref({
</div>`;
} else {
return `<div class="tooltip">
<div class="tooltip-title">${dataItem.name}</div>
<div class="tooltip-title">${params.name}</div>
<div class="tooltip-content">
<ul class="tooltip-ul"">
<li>案件总数 <span>-</span></li>
@ -407,10 +404,9 @@ const option = ref({
type: "piecewise",
bottom: 10,
pieces: [
{gte: 0, lte: 65, label: "问题数低于500"},
{gte: 65, lte: 85, label: "问题数介于500-1000"},
{gte: 85, lte: 100, label: "问题数高于1000"},
],
{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", //
@ -435,7 +431,7 @@ const option = ref({
itemStyle: {
areaColor: "#02215E", //
},
data: gobalTempMapVoList.value,
data: [],
},
],
});

60
src/views/datav/Gobal.vue

@ -281,18 +281,23 @@ const option = ref({
shadowOffsetY: 0, // 6
},
visualMap: {
min: 1,
max: 200,
text: ['最高问题数', '最低问题数'],
left: 'right',
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',
color: "#fff",
},
realtime: false,
calculable: true,
inRange: {
color: ['#4987F6', '#F6A149', '#D34343']
}
color: ["#4987F6", "#F6A149", "#D34343"],
},
},
series: [
{
@ -384,6 +389,32 @@ const proTrend = ref({
});
// endregion
// region
const getOrganizationRankData = async (timeValue=time.value)=>{
const res = await getOrganizationRank(timeValue);
fxsjlist.value = res.fxsjlist;
jsdwlist.value = res.jsdwlist;
}
const getBusinessRateData=async (timeValue=time.value)=>{
const res=await getBusinessRate(timeValue);
ywzblist.value = res.ywzblist;
}
const getAllGobalCountData = async(timeValue=time.value)=>{
overview.value = res.overview;
}
const getGobalRecentlyTrendByMonthData=async(timeValue=time.value)=>{
const gobalRecentlyTrendList = res.gobalRecentlyTrendList;
const categories = gobalRecentlyTrendList.map(item => item.name);
const values = gobalRecentlyTrendList.map(item => item.value);
//
proTrend.value.xAxis.data = categories;
proTrend.value.series[0].data = values;
}
// const getStrongProblemRate
// endregion
// region
function getData() {
getOrganizationRank(time.value).then((res) => {
@ -456,14 +487,19 @@ function getData() {
value: item.totalPro,
};
});
const maxItem = mappedData.reduce((prev, current) => (prev.value > current.value) ? prev : current);
const minItem = mappedData.reduce((prev, current) => (prev.value < current.value) ? prev : current);
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
const range30Percent = avg * 0.3 //
gobalTempMapVoList.value = mappedData;
option.value.series[0].data = gobalTempMapVoList;
option.value.visualMap.max = maxItem.value;
option.value.visualMap.min = minItem.value;
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(() => {
getData();
});

26
src/views/datav/MailVisits.vue

@ -71,7 +71,6 @@
:data="fxsjLeaderViewMailList"
:max="11"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
@ -105,7 +104,6 @@
:data="bwzdLeaderViewMailList"
:max="11"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
@ -186,13 +184,7 @@
autoresize
/>
</datav-tab-item>
<datav-tab-item label="局长信箱" name="3">
<v-charts
style="width: 105%; height: 300px; "
:option="manageTrend"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="12337信访" name="4">
<v-charts
style="width: 105%; height: 300px; "
@ -418,7 +410,7 @@ const getFirstAndRepeatMailRank = async (timeValue = time.value) => {
bwzdFirstMailList.value = res.bwzdFirstRankList;
bwzdRepeatMailList.value = res.bwzdRepeatRankList;
bwzdLeaderViewMailList.value = -res.bwzdLeaderViewRankList;
bwzdLeaderViewMailList.value = res.bwzdLeaderViewRankList;
}
const getOverview = async (timeValue = time.value) => {
@ -471,7 +463,7 @@ const getData = async () => {
// region
echarts.registerMap("changsha", changshaMap);
let gobalTempMapVoList = [
const gobalTempMapVoList = [
{
"name": "芙蓉分局",
"total": 704,
@ -528,6 +520,7 @@ let gobalTempMapVoList = [
"numTotal": 44,
}
];
// const gobalTempMapVoList=[]
const option = ref({
geo: {
map: "changsha",
@ -560,7 +553,7 @@ const option = ref({
<li>信访总件数 <span>0</span></li>
<li>国家信访 <span>0</span></li>
<li>公安部信访 <span>0</span></li>
<li>局长信箱 <span>0</span></li>
<li>12337信访 <span>0</span></li>
</ul>
</div>
@ -1044,3 +1037,12 @@ const colors = [
</style>
<!--
<datav-tab-item label="局长信箱" name="3">
<v-charts
style="width: 105%; height: 300px; "
:option="manageTrend"
autoresize
/>
</datav-tab-item>-->

73
src/views/datav/SceneInsp.vue

@ -915,6 +915,7 @@ const messages = ref([
const currentYear = new Date().getFullYear();
const years = ref([currentYear.toString(), (currentYear - 1).toString(), (currentYear - 2).toString()]); //
const selectedYear = ref('2024'); //
const avg = 1000
// endregion
@ -964,35 +965,38 @@ const option = ref({
</div>`;
} else {
return `<div class="tooltip">
<div class="tooltip-title">未知</div>
<div class="tooltip-title">${params.name}</div>
<div class="tooltip-content">
<ul class="tooltip-ul"">
<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>
<li>已整改 <span>-</span></li>
<li>涉及单位数 <span>-</span></li>
<li>涉及人数 <span>-</span></li>
<li>整改率 <span>-</span></li>
</ul>
</div>
</div>`;
}
},
},
visualMap: {
min: 1,
max: 200,
text: ['最高问题数', '最低问题数'],
left: 'right',
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',
color: "#fff",
},
realtime: false,
calculable: true,
inRange: {
color: ['#4987F6', '#F6A149', '#D34343']
}
// inRange: {
// color: ['#4987F6', '#F6A149', '#D34343']
// }
},
series: [
{
@ -1084,8 +1088,6 @@ const proTrend = ref({
// endregion
const handleCommand = (year) => {
selectedYear.value = year; //
getSupervisionTrend(year).then(res => {
@ -1099,7 +1101,6 @@ const handleCommand = (year) => {
};
// region
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
@ -1108,7 +1109,7 @@ const time = ref([
//
const getData = async () => {
await getAllSupervisionNotifyCount(time.value).then((res) => {
getAllSupervisionNotifyCount(time.value).then((res) => {
Object.assign(overview.value, {
correctionRate: Number(res.overview.correctionRate),
supervisionNotifyPreTotal: Number(res.overview.supervisionNotifyPreTotal),
@ -1120,7 +1121,7 @@ const getData = async ()=> {
});
});
await getChangedRank(time.value, 3).then((res) => {
getChangedRank(time.value, 3).then((res) => {
fxsjRankOverview.value = res.fxsjRankOverview;
jsdwRankOverview.value = res.jsdwRankOverview;
fxsjChangedRankList.value = res.fxsjChangedRankList;
@ -1129,7 +1130,7 @@ const getData = async ()=> {
// data1.value = res.changedRankList;
});
await getSupervisionTrend(new Date().getFullYear()).then((res) => {
getSupervisionTrend(new Date().getFullYear()).then((res) => {
const supervisionTrend = res.supervisionTrend;
const categories = supervisionTrend.map(item => item.name);
const values = supervisionTrend.map(item => item.value);
@ -1138,7 +1139,7 @@ const getData = async ()=> {
proTrend.value.series[0].data = values;
});
await getMap(time.value).then((res) => {
getMap(time.value).then((res) => {
//
const mappedData = res.superviseTempMapVoList.map(item => {
let name;
@ -1184,19 +1185,23 @@ const getData = async ()=> {
value: item.totalPro,
};
});
const maxItem = mappedData.reduce((prev, current) => (prev.value > current.value) ? prev : current);
const minItem = mappedData.reduce((prev, current) => (prev.value < current.value) ? prev : current);
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"},
];
superviseTempMapVoList.value = mappedData;
option.value.series[0].data = mappedData;
option.value.visualMap.max = maxItem.value;
option.value.visualMap.min = minItem.value;
})
await getProblemTypeRate(time.value).then((res) => {
getProblemTypeRate(time.value).then((res) => {
wtlxList.value = res.wtlxList
});
await getYellowBetDrug(time.value).then((res) => {
getYellowBetDrug(time.value).then((res) => {
fxsjYellowBetOverview.value = res.fxsjYellowBetOverview
jsdwYellowBetOverview.value = res.jsdwYellowBetOverview
fxsjYellowBetRankList.value = res.fxsjYellowBetRankList
@ -1206,28 +1211,28 @@ const getData = async ()=> {
// hddList.value = res.hddList
});
await getGunController(time.value).then((res) => {
getGunController(time.value).then((res) => {
fxsjGunControllerOverview.value = res.fxsjGunControllerOverview
jsdwGunControllerOverview.value = res.jsdwGunControllerOverview
fxsjGunControllerRankList.value = res.fxsjGunControllerRankList
jsdwGunControllerRankList.value = res.jsdwGunControllerRankList
})
await getCompanyProblem(time.value).then((res) => {
getCompanyProblem(time.value).then((res) => {
fxsjCompanyProblemOverview.value = res.fxsjCompanyProblemOverview
jsdwCompanyProblemOverview.value = res.jsdwCompanyProblemOverview
fxsjCompanyProblemRankList.value = res.fxsjCompanyProblemRankList
jsdwCompanyProblemRankList.value = res.jsdwCompanyProblemRankList
})
await getHandleCase(time.value).then((res) => {
getHandleCase(time.value).then((res) => {
fxsjHandleCaseOverview.value = res.fxsjHandleCaseOverview
jsdwHandleCaseOverview.value = res.jsdwHandleCaseOverview
fxsjHandleCaseRankList.value = res.fxsjHandleCaseRankList
jsdwHandleCaseRankList.value = res.jsdwHandleCaseRankList
})
await getCheckBeer(time.value).then((res) => {
getCheckBeer(time.value).then((res) => {
fxsjCheckBeerOverview.value = res.fxsjCheckBeerOverview
jsdwCheckBeerOverview.value = res.jsdwCheckBeerOverview
fxsjCheckBeerRankList.value = res.fxsjCheckBeerRankList

47
src/views/datav/VideoInsp.vue

@ -232,7 +232,7 @@ const getOverview = async (timeValue) => {
}
const getMap = async (timeValue) => {
const res = await getVideoSuperviseMap(timeValue);
console.log(res.videoSuperviseMapIconVoList)
// console.log(res.videoSuperviseMapIconVoList)
const mappedData = res.videoSuperviseMapIconVoList.map(item => {
let name;
switch (item.name) {
@ -277,13 +277,16 @@ const getMap = async (timeValue) => {
value: item.discoverProblem,
};
});
const maxItem = mappedData.reduce((prev, current) => (prev.value > current.value) ? prev : current);
const minItem = mappedData.reduce((prev, current) => (prev.value < current.value) ? prev : current);
const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const avg = total / mappedData.length; //
const range30Percent = avg*0.3 //
mapIconList.value = mappedData
option.value.series[0].data = mapIconList
option.value.visualMap.max = maxItem.value;
option.value.visualMap.min = minItem.value;
// console.log(mapIconList.value)
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"},
];
}
@ -419,31 +422,35 @@ const option = ref({
<div class="tooltip-title">${params.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>
<li>发现问题数 <span>-</span></li>
<li>整改问题数 <span>-</span></li>
<li>涉及单位数 <span>-</span></li>
<li>涉及人数 <span>-</span></li>
<li>整改率 <span>-</span></li>
</ul>
</div>
</div>`;
}
},
},
visualMap: {
min: 1,
max: 200,
text: ['最高问题数', '最低问题数'],
left: 'right',
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',
color: "#fff",
},
realtime: false,
calculable: true,
inRange: {
color: ['#4987F6', '#F6A149', '#D34343']
}
color: ["#4987F6","#F6A149", "#D34343" ],
},
},
series: [
{

Loading…
Cancel
Save