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, // punishOrg: 0, //
Rate: 0, // Rate: 0, //
}); });
let gobalTempMapVoList = ref([ let gobalTempMapVoList = ref([]);
{
"name": "浏阳市局",
"total": 93,
"confirmed": 11,
"dealCasePro": 8,
"punishPre": 7,
"punishOrg": 9,
"rate": "12%"
}
]);
const jjjgPieList = ref([]); const jjjgPieList = ref([]);
@ -287,8 +277,15 @@ const getMapIcon = async(timeValue)=> {
}; };
}); });
gobalTempMapVoList.value = mappedData 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.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 getProTrendList= async(year) => {
const res = await getCaseVerificationTrend(year); const res = await getCaseVerificationTrend(year);
@ -381,7 +378,7 @@ const option = ref({
</div>`; </div>`;
} else { } else {
return `<div class="tooltip"> return `<div class="tooltip">
<div class="tooltip-title">${dataItem.name}</div> <div class="tooltip-title">${params.name}</div>
<div class="tooltip-content"> <div class="tooltip-content">
<ul class="tooltip-ul""> <ul class="tooltip-ul"">
<li>案件总数 <span>-</span></li> <li>案件总数 <span>-</span></li>
@ -407,10 +404,9 @@ const option = ref({
type: "piecewise", type: "piecewise",
bottom: 10, bottom: 10,
pieces: [ pieces: [
{gte: 0, lte: 65, label: "问题数低于500"}, {gte: 0, lte: 200, label: "低于平均问题30%", color: "#4987F6"},
{gte: 65, lte: 85, label: "问题数介于500-1000"}, {gte: 200, lte: 400, label: "平均问题上下浮动30%内", color: "#F6A149"},
{gte: 85, lte: 100, label: "问题数高于1000"}, {gte: 400, label: "高于平均问题30%", color: "#D34343"},],
],
right: 10, // right: 10, //
realtime: false, realtime: false,
orient: "horizontal", // orient: "horizontal", //
@ -435,7 +431,7 @@ const option = ref({
itemStyle: { itemStyle: {
areaColor: "#02215E", // areaColor: "#02215E", //
}, },
data: gobalTempMapVoList.value, data: [],
}, },
], ],
}); });

60
src/views/datav/Gobal.vue

@ -281,18 +281,23 @@ const option = ref({
shadowOffsetY: 0, // 6 shadowOffsetY: 0, // 6
}, },
visualMap: { visualMap: {
min: 1, type: "piecewise",
max: 200, bottom: 10,
text: ['最高问题数', '最低问题数'], pieces: [
left: 'right', {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: { textStyle: {
color: '#fff', color: "#fff",
}, },
realtime: false,
calculable: true, calculable: true,
inRange: { inRange: {
color: ['#4987F6', '#F6A149', '#D34343'] color: ["#4987F6", "#F6A149", "#D34343"],
} },
}, },
series: [ series: [
{ {
@ -384,6 +389,32 @@ const proTrend = ref({
}); });
// endregion // 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 // region
function getData() { function getData() {
getOrganizationRank(time.value).then((res) => { getOrganizationRank(time.value).then((res) => {
@ -456,14 +487,19 @@ function getData() {
value: item.totalPro, value: item.totalPro,
}; };
}); });
const maxItem = mappedData.reduce((prev, current) => (prev.value > current.value) ? prev : current); const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const minItem = mappedData.reduce((prev, current) => (prev.value < current.value) ? prev : current); const avg = total / mappedData.length; //
const range30Percent = avg * 0.3 //
gobalTempMapVoList.value = mappedData; gobalTempMapVoList.value = mappedData;
option.value.series[0].data = gobalTempMapVoList; option.value.series[0].data = gobalTempMapVoList;
option.value.visualMap.max = maxItem.value; option.value.visualMap.pieces = [
option.value.visualMap.min = minItem.value; {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(() => {
getData(); getData();
}); });

26
src/views/datav/MailVisits.vue

@ -71,7 +71,6 @@
:data="fxsjLeaderViewMailList" :data="fxsjLeaderViewMailList"
:max="11" :max="11"
size="large" size="large"
:color="colors"
/> />
</el-scrollbar> </el-scrollbar>
</datav-tab-item> </datav-tab-item>
@ -105,7 +104,6 @@
:data="bwzdLeaderViewMailList" :data="bwzdLeaderViewMailList"
:max="11" :max="11"
size="large" size="large"
:color="colors"
/> />
</el-scrollbar> </el-scrollbar>
</datav-tab-item> </datav-tab-item>
@ -186,13 +184,7 @@
autoresize autoresize
/> />
</datav-tab-item> </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"> <datav-tab-item label="12337信访" name="4">
<v-charts <v-charts
style="width: 105%; height: 300px; " style="width: 105%; height: 300px; "
@ -418,7 +410,7 @@ const getFirstAndRepeatMailRank = async (timeValue = time.value) => {
bwzdFirstMailList.value = res.bwzdFirstRankList; bwzdFirstMailList.value = res.bwzdFirstRankList;
bwzdRepeatMailList.value = res.bwzdRepeatRankList; bwzdRepeatMailList.value = res.bwzdRepeatRankList;
bwzdLeaderViewMailList.value = -res.bwzdLeaderViewRankList; bwzdLeaderViewMailList.value = res.bwzdLeaderViewRankList;
} }
const getOverview = async (timeValue = time.value) => { const getOverview = async (timeValue = time.value) => {
@ -471,7 +463,7 @@ const getData = async () => {
// region // region
echarts.registerMap("changsha", changshaMap); echarts.registerMap("changsha", changshaMap);
let gobalTempMapVoList = [ const gobalTempMapVoList = [
{ {
"name": "芙蓉分局", "name": "芙蓉分局",
"total": 704, "total": 704,
@ -528,6 +520,7 @@ let gobalTempMapVoList = [
"numTotal": 44, "numTotal": 44,
} }
]; ];
// const gobalTempMapVoList=[]
const option = ref({ const option = ref({
geo: { geo: {
map: "changsha", 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>公安部信访 <span>0</span></li> <li>公安部信访 <span>0</span></li>
<li>局长信箱 <span>0</span></li>
<li>12337信访 <span>0</span></li> <li>12337信访 <span>0</span></li>
</ul> </ul>
</div> </div>
@ -1044,3 +1037,12 @@ const colors = [
</style> </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 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('2024'); // const selectedYear = ref('2024'); //
const avg = 1000
// endregion // endregion
@ -964,35 +965,38 @@ const option = ref({
</div>`; </div>`;
} else { } else {
return `<div class="tooltip"> return `<div class="tooltip">
<div class="tooltip-title">未知</div> <div class="tooltip-title">${params.name}</div>
<div class="tooltip-content"> <div class="tooltip-content">
<ul class="tooltip-ul""> <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> </ul>
</div> </div>
</div>`; </div>`;
} }
}, },
}, },
visualMap: { visualMap: {
min: 1, type: "piecewise",
max: 200, bottom: 10,
text: ['最高问题数', '最低问题数'], pieces: [
left: 'right', {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: { textStyle: {
color: '#fff', color: "#fff",
}, },
realtime: false,
calculable: true, calculable: true,
inRange: { // inRange: {
color: ['#4987F6', '#F6A149', '#D34343'] // color: ['#4987F6', '#F6A149', '#D34343']
} // }
}, },
series: [ series: [
{ {
@ -1084,8 +1088,6 @@ const proTrend = ref({
// endregion // endregion
const handleCommand = (year) => { const handleCommand = (year) => {
selectedYear.value = year; // selectedYear.value = year; //
getSupervisionTrend(year).then(res => { getSupervisionTrend(year).then(res => {
@ -1099,7 +1101,6 @@ const handleCommand = (year) => {
}; };
// region // region
const time = ref([ const time = ref([
moment().startOf("year").format("YYYY-MM-DD"), moment().startOf("year").format("YYYY-MM-DD"),
@ -1108,7 +1109,7 @@ const time = ref([
// //
const getData = async () => { const getData = async () => {
await getAllSupervisionNotifyCount(time.value).then((res) => { getAllSupervisionNotifyCount(time.value).then((res) => {
Object.assign(overview.value, { Object.assign(overview.value, {
correctionRate: Number(res.overview.correctionRate), correctionRate: Number(res.overview.correctionRate),
supervisionNotifyPreTotal: Number(res.overview.supervisionNotifyPreTotal), 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; fxsjRankOverview.value = res.fxsjRankOverview;
jsdwRankOverview.value = res.jsdwRankOverview; jsdwRankOverview.value = res.jsdwRankOverview;
fxsjChangedRankList.value = res.fxsjChangedRankList; fxsjChangedRankList.value = res.fxsjChangedRankList;
@ -1129,7 +1130,7 @@ const getData = async ()=> {
// data1.value = res.changedRankList; // data1.value = res.changedRankList;
}); });
await getSupervisionTrend(new Date().getFullYear()).then((res) => { getSupervisionTrend(new Date().getFullYear()).then((res) => {
const supervisionTrend = res.supervisionTrend; const supervisionTrend = res.supervisionTrend;
const categories = supervisionTrend.map(item => item.name); const categories = supervisionTrend.map(item => item.name);
const values = supervisionTrend.map(item => item.value); const values = supervisionTrend.map(item => item.value);
@ -1138,7 +1139,7 @@ const getData = async ()=> {
proTrend.value.series[0].data = values; proTrend.value.series[0].data = values;
}); });
await getMap(time.value).then((res) => { getMap(time.value).then((res) => {
// //
const mappedData = res.superviseTempMapVoList.map(item => { const mappedData = res.superviseTempMapVoList.map(item => {
let name; let name;
@ -1184,19 +1185,23 @@ const getData = async ()=> {
value: item.totalPro, value: item.totalPro,
}; };
}); });
const maxItem = mappedData.reduce((prev, current) => (prev.value > current.value) ? prev : current); const total = mappedData.reduce((sum, item) => sum + Number(item.value), 0);
const minItem = mappedData.reduce((prev, current) => (prev.value < current.value) ? prev : current); 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; superviseTempMapVoList.value = mappedData;
option.value.series[0].data = 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 wtlxList.value = res.wtlxList
}); });
await getYellowBetDrug(time.value).then((res) => { getYellowBetDrug(time.value).then((res) => {
fxsjYellowBetOverview.value = res.fxsjYellowBetOverview fxsjYellowBetOverview.value = res.fxsjYellowBetOverview
jsdwYellowBetOverview.value = res.jsdwYellowBetOverview jsdwYellowBetOverview.value = res.jsdwYellowBetOverview
fxsjYellowBetRankList.value = res.fxsjYellowBetRankList fxsjYellowBetRankList.value = res.fxsjYellowBetRankList
@ -1206,28 +1211,28 @@ const getData = async ()=> {
// hddList.value = res.hddList // hddList.value = res.hddList
}); });
await getGunController(time.value).then((res) => { getGunController(time.value).then((res) => {
fxsjGunControllerOverview.value = res.fxsjGunControllerOverview fxsjGunControllerOverview.value = res.fxsjGunControllerOverview
jsdwGunControllerOverview.value = res.jsdwGunControllerOverview jsdwGunControllerOverview.value = res.jsdwGunControllerOverview
fxsjGunControllerRankList.value = res.fxsjGunControllerRankList fxsjGunControllerRankList.value = res.fxsjGunControllerRankList
jsdwGunControllerRankList.value = res.jsdwGunControllerRankList jsdwGunControllerRankList.value = res.jsdwGunControllerRankList
}) })
await getCompanyProblem(time.value).then((res) => { getCompanyProblem(time.value).then((res) => {
fxsjCompanyProblemOverview.value = res.fxsjCompanyProblemOverview fxsjCompanyProblemOverview.value = res.fxsjCompanyProblemOverview
jsdwCompanyProblemOverview.value = res.jsdwCompanyProblemOverview jsdwCompanyProblemOverview.value = res.jsdwCompanyProblemOverview
fxsjCompanyProblemRankList.value = res.fxsjCompanyProblemRankList fxsjCompanyProblemRankList.value = res.fxsjCompanyProblemRankList
jsdwCompanyProblemRankList.value = res.jsdwCompanyProblemRankList jsdwCompanyProblemRankList.value = res.jsdwCompanyProblemRankList
}) })
await getHandleCase(time.value).then((res) => { getHandleCase(time.value).then((res) => {
fxsjHandleCaseOverview.value = res.fxsjHandleCaseOverview fxsjHandleCaseOverview.value = res.fxsjHandleCaseOverview
jsdwHandleCaseOverview.value = res.jsdwHandleCaseOverview jsdwHandleCaseOverview.value = res.jsdwHandleCaseOverview
fxsjHandleCaseRankList.value = res.fxsjHandleCaseRankList fxsjHandleCaseRankList.value = res.fxsjHandleCaseRankList
jsdwHandleCaseRankList.value = res.jsdwHandleCaseRankList jsdwHandleCaseRankList.value = res.jsdwHandleCaseRankList
}) })
await getCheckBeer(time.value).then((res) => { getCheckBeer(time.value).then((res) => {
fxsjCheckBeerOverview.value = res.fxsjCheckBeerOverview fxsjCheckBeerOverview.value = res.fxsjCheckBeerOverview
jsdwCheckBeerOverview.value = res.jsdwCheckBeerOverview jsdwCheckBeerOverview.value = res.jsdwCheckBeerOverview
fxsjCheckBeerRankList.value = res.fxsjCheckBeerRankList fxsjCheckBeerRankList.value = res.fxsjCheckBeerRankList

47
src/views/datav/VideoInsp.vue

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

Loading…
Cancel
Save