|
|
|
|
@ -7,41 +7,209 @@
|
|
|
|
|
<el-row :gutter="16"> |
|
|
|
|
|
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<datav-card title="审计整改结果" |
|
|
|
|
sub-title="已整改问题数/查处问题数" |
|
|
|
|
|
|
|
|
|
<datav-card> |
|
|
|
|
<datav-tabs |
|
|
|
|
v-model="activeAuditType" |
|
|
|
|
size="small" |
|
|
|
|
@tab-change="handleAuditTypeChange" |
|
|
|
|
> |
|
|
|
|
<datav-tabs |
|
|
|
|
type="bottom-button" |
|
|
|
|
v-model="auditSuperRankTab" |
|
|
|
|
ref="auditSuperRankTabs" |
|
|
|
|
<template |
|
|
|
|
v-for="item in dictData" |
|
|
|
|
:key="item.dictValue" |
|
|
|
|
> |
|
|
|
|
<datav-tab-item label="分县市局" name="1"> |
|
|
|
|
<el-scrollbar height="350px"> |
|
|
|
|
<datav-chart-bar |
|
|
|
|
size="small" |
|
|
|
|
:data="fxData" |
|
|
|
|
unit="%" |
|
|
|
|
remark-font-size="12px" |
|
|
|
|
spanClass="right-aligned" |
|
|
|
|
:color="colors" |
|
|
|
|
/> |
|
|
|
|
</el-scrollbar> |
|
|
|
|
</datav-tab-item> |
|
|
|
|
<datav-tab-item label="局属单位" name="2"> |
|
|
|
|
<el-scrollbar height="350px"> |
|
|
|
|
<datav-chart-bar |
|
|
|
|
size="small" |
|
|
|
|
:data="jsData" |
|
|
|
|
unit="%" |
|
|
|
|
remark-font-size="12px" |
|
|
|
|
spanClass="right-aligned" |
|
|
|
|
:color="colors" |
|
|
|
|
/> |
|
|
|
|
</el-scrollbar> |
|
|
|
|
<datav-tab-item |
|
|
|
|
:label="item.dictLabel" |
|
|
|
|
:name="item.dictValue" |
|
|
|
|
> |
|
|
|
|
<datav-tabs type="bottom-button"> |
|
|
|
|
<datav-tab-item |
|
|
|
|
label="分县市局" |
|
|
|
|
name="1" |
|
|
|
|
> |
|
|
|
|
<el-row class="mb-32"> |
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.projectNumber }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
审计单位/项目 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.auditAmount }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
审计总金额(万元) |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.auditSjAmount }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
审减/问题金额(万元) |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.negativeNumber }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
查处问题数 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="4"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.accountableNumber }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
追责问责数 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
</el-row> |
|
|
|
|
<el-scrollbar height="350px"> |
|
|
|
|
<datav-chart-bar |
|
|
|
|
:data=" |
|
|
|
|
fxsjList |
|
|
|
|
" |
|
|
|
|
size="small" |
|
|
|
|
unit="%" |
|
|
|
|
title="审计整改结果" |
|
|
|
|
remark-font-size="12px" |
|
|
|
|
sub-title="已整改问题数/查处问题数" |
|
|
|
|
:color="colors" |
|
|
|
|
/> |
|
|
|
|
</el-scrollbar> |
|
|
|
|
</datav-tab-item> |
|
|
|
|
<datav-tab-item |
|
|
|
|
label="局属单位" |
|
|
|
|
name="2" |
|
|
|
|
> |
|
|
|
|
<el-row class="mb-32"> |
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.projectNumber }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
审计单位/项目 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.auditAmount }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
审计总金额(万元) |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.auditSjAmount }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
审减/问题金额(万元) |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="5"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.negativeNumber }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
查处问题数 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
|
|
<el-col :span="4"> |
|
|
|
|
<div class="descriptions_cell text-center"> |
|
|
|
|
<div class="descriptions_content"> |
|
|
|
|
{{ leftOverview.accountableNumber }} |
|
|
|
|
</div> |
|
|
|
|
<div class="descriptions_label"> |
|
|
|
|
追责问责数 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
</el-row> |
|
|
|
|
<el-scrollbar height="350px"> |
|
|
|
|
<datav-chart-bar |
|
|
|
|
:data="jsdwList" |
|
|
|
|
size="large" |
|
|
|
|
unit="%" |
|
|
|
|
title="审计整改结果" |
|
|
|
|
sub-title="已整改问题数/查处问题数" |
|
|
|
|
:color="colors" |
|
|
|
|
/> |
|
|
|
|
</el-scrollbar> |
|
|
|
|
</datav-tab-item> |
|
|
|
|
</datav-tabs> |
|
|
|
|
</datav-tab-item> |
|
|
|
|
</datav-tabs> |
|
|
|
|
</template> |
|
|
|
|
</datav-tabs> |
|
|
|
|
|
|
|
|
|
</datav-card> |
|
|
|
|
</datav-card> |
|
|
|
|
|
|
|
|
|
<!-- <datav-card title="审计整改结果"--> |
|
|
|
|
<!-- sub-title="已整改问题数/查处问题数"--> |
|
|
|
|
<!-- >--> |
|
|
|
|
<!-- <datav-tabs--> |
|
|
|
|
<!-- type="bottom-button"--> |
|
|
|
|
<!-- v-model="auditSuperRankTab"--> |
|
|
|
|
<!-- ref="auditSuperRankTabs"--> |
|
|
|
|
<!-- >--> |
|
|
|
|
<!-- <datav-tab-item label="分县市局" name="1">--> |
|
|
|
|
<!-- <el-scrollbar height="350px">--> |
|
|
|
|
<!-- <datav-chart-bar--> |
|
|
|
|
<!-- size="small"--> |
|
|
|
|
<!-- :data="fxData"--> |
|
|
|
|
<!-- unit="%"--> |
|
|
|
|
<!-- remark-font-size="12px"--> |
|
|
|
|
<!-- spanClass="right-aligned"--> |
|
|
|
|
<!-- :color="colors"--> |
|
|
|
|
<!-- />--> |
|
|
|
|
<!-- </el-scrollbar>--> |
|
|
|
|
<!-- </datav-tab-item>--> |
|
|
|
|
<!-- <datav-tab-item label="局属单位" name="2">--> |
|
|
|
|
<!-- <el-scrollbar height="350px">--> |
|
|
|
|
<!-- <datav-chart-bar--> |
|
|
|
|
<!-- size="small"--> |
|
|
|
|
<!-- :data="jsData"--> |
|
|
|
|
<!-- unit="%"--> |
|
|
|
|
<!-- remark-font-size="12px"--> |
|
|
|
|
<!-- spanClass="right-aligned"--> |
|
|
|
|
<!-- :color="colors"--> |
|
|
|
|
<!-- />--> |
|
|
|
|
<!-- </el-scrollbar>--> |
|
|
|
|
<!-- </datav-tab-item>--> |
|
|
|
|
<!-- </datav-tabs>--> |
|
|
|
|
|
|
|
|
|
<!-- </datav-card>--> |
|
|
|
|
<datav-card title="审计项目类型"> |
|
|
|
|
<v-charts |
|
|
|
|
style="height: 300px" |
|
|
|
|
@ -65,7 +233,7 @@
|
|
|
|
|
style="width: 20%" |
|
|
|
|
/> |
|
|
|
|
<datav-statistic |
|
|
|
|
:value="`${overview.auditSjAmount}/${overview.auditWtAmount}`" |
|
|
|
|
:value="`${overview.auditSjAmount}`" |
|
|
|
|
:title="`审减/问题金额\n(万元)`" |
|
|
|
|
:isDecimal="true" |
|
|
|
|
style="width: 20%" |
|
|
|
|
@ -168,6 +336,7 @@ import { workDynamicColorMapping } from "@/enums/workDynamicColorMapping.js";
|
|
|
|
|
import { getAuditOverview, getAuditProblems } from '@/api/datav' |
|
|
|
|
import { onMounted } from "vue"; |
|
|
|
|
import {mapOrgNameMapping} from "@/enums/orgMapping.js"; |
|
|
|
|
import useCatchStore from "@/stores/modules/catch.ts"; |
|
|
|
|
const messages = ref([]); |
|
|
|
|
const time = ref([ |
|
|
|
|
moment().startOf("year").format("YYYY-MM-DD"), |
|
|
|
|
@ -178,6 +347,22 @@ watch(time, () => {
|
|
|
|
|
getData(); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const activeAuditType = ref(""); |
|
|
|
|
const fxsjList = ref([]); // 问题排行分县市局 |
|
|
|
|
const jsdwList = ref([]); // 问题排行局属单位 |
|
|
|
|
const leftOverview = ref({}); |
|
|
|
|
|
|
|
|
|
const catchStore = useCatchStore(); |
|
|
|
|
const dictData = computed(() => { |
|
|
|
|
return (catchStore.getDictProblemSources() |
|
|
|
|
.find(item => item.id === "26")?.children || []) |
|
|
|
|
.map(item => ({ |
|
|
|
|
dictLabel: item.label?.trim(), |
|
|
|
|
dictValue: item.id |
|
|
|
|
})); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
const overview = ref({ |
|
|
|
|
negativeNumber: 0, |
|
|
|
|
accountableNumber: 0, |
|
|
|
|
@ -204,9 +389,12 @@ const problemOptions = ref({
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
|
console.log("******") |
|
|
|
|
console.log(dictData) |
|
|
|
|
getData() |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getData() { |
|
|
|
|
getOverviewFun(); |
|
|
|
|
getAuditProblems(time.value).then(data => { |
|
|
|
|
@ -224,11 +412,24 @@ function getData() {
|
|
|
|
|
const fxData =ref([]) |
|
|
|
|
const jsData =ref([]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
watch(activeAuditType, () => { |
|
|
|
|
getAuditNegativeVoFun() |
|
|
|
|
},{deep:true}) |
|
|
|
|
const getAuditNegativeVoFun =async ()=>{ |
|
|
|
|
const res = await getAuditNegativeVo(time.value); |
|
|
|
|
if(res){ |
|
|
|
|
fxData.value=res.fxData; |
|
|
|
|
jsData.value=res.jsData; |
|
|
|
|
|
|
|
|
|
if (!activeAuditType.value) return; |
|
|
|
|
|
|
|
|
|
const body = { |
|
|
|
|
beginTime: time.value[0], |
|
|
|
|
endTime: time.value[1], |
|
|
|
|
auditType: activeAuditType.value, |
|
|
|
|
}; |
|
|
|
|
const res = await getAuditNegativeVo(body); |
|
|
|
|
if (res) { |
|
|
|
|
fxsjList.value = res.fxData || []; |
|
|
|
|
jsdwList.value = res.jsData || []; |
|
|
|
|
leftOverview.value = res.leftOverview || {}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -290,7 +491,6 @@ const getAuditTrendFun = async (year = selectedYear.value) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const auditSuperRankTab = ref('1'); |
|
|
|
|
|
|
|
|
|
const auditMapData = ref([ |
|
|
|
|
{ |
|
|
|
|
@ -308,40 +508,46 @@ const option = ref({
|
|
|
|
|
geo: { |
|
|
|
|
map: "changsha", |
|
|
|
|
}, |
|
|
|
|
tooltip: { |
|
|
|
|
trigger: "item", |
|
|
|
|
formatter: function (params) { |
|
|
|
|
const dataItem = auditMapData.value.find((item) => |
|
|
|
|
item.name.includes(params.name.substring(0, 2)) |
|
|
|
|
); |
|
|
|
|
if (dataItem) { |
|
|
|
|
return ` |
|
|
|
|
tooltip: { |
|
|
|
|
trigger: "item", |
|
|
|
|
position: "bottom", |
|
|
|
|
formatter: function (params) { |
|
|
|
|
const dataItem = auditMapData.value.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-title">${dataItem.originalName}</div> |
|
|
|
|
<div class="tooltip-content"> |
|
|
|
|
<ul class="tooltip-ul" > |
|
|
|
|
<li>审计单位/项目数<span>${dataItem.reportProjectNumber}</span></li> |
|
|
|
|
<li>查处问题数 <span>${dataItem.checkProNumber}</span></li> |
|
|
|
|
<li>追责问责数 <span>${dataItem.rushProNumber}</span></li> |
|
|
|
|
<li>整改问题数 <span>${dataItem.rectifyNumber}</span></li> |
|
|
|
|
<ul class="tooltip-ul"> |
|
|
|
|
<li>审计单位/项目数<span>${dataItem.projectNumber ?? "-"}</span></li> |
|
|
|
|
<li>审计总金额<span>${dataItem.auditAmount ?? "-"}</span></li> |
|
|
|
|
<li>审减/问题金额<span>${dataItem.auditSjAmount ?? "-"}</span></li> |
|
|
|
|
<li>查出问题数<span>${dataItem.negativeNumber ?? "-"}</span></li> |
|
|
|
|
<li>追责问责数<span>${dataItem.accountableNumber ?? "-"}</span></li> |
|
|
|
|
</ul> |
|
|
|
|
</div> |
|
|
|
|
</div>`; |
|
|
|
|
} else { |
|
|
|
|
return `<div class="tooltip"> |
|
|
|
|
} else { |
|
|
|
|
return ` |
|
|
|
|
<div class="tooltip"> |
|
|
|
|
<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> |
|
|
|
|
<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> |
|
|
|
|
</ul> |
|
|
|
|
</div> |
|
|
|
|
</div>`; |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
visualMap: { |
|
|
|
|
type: "piecewise", |
|
|
|
|
bottom: 10, |
|
|
|
|
@ -453,64 +659,7 @@ const option1 = ref({
|
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
}); |
|
|
|
|
const data1 = [ |
|
|
|
|
{ |
|
|
|
|
label: "公交分局", |
|
|
|
|
value: 100, |
|
|
|
|
numerator: 7, |
|
|
|
|
denominator: 8, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
label: "岳麓分局", |
|
|
|
|
value: 100, |
|
|
|
|
numerator: 2, |
|
|
|
|
denominator: 2, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
label: "交警支队", |
|
|
|
|
value: 100, |
|
|
|
|
numerator: 2, |
|
|
|
|
denominator: 2, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
label: "高新分局", |
|
|
|
|
value: 100, |
|
|
|
|
numerator: 1, |
|
|
|
|
denominator: 1, |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
const data2 = [ |
|
|
|
|
{ |
|
|
|
|
name: "开福分局", |
|
|
|
|
value: 9700, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
name: "芙蓉分局", |
|
|
|
|
value: 9021, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
name: "岳麓分局", |
|
|
|
|
value: 8512, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
name: "雨花分局", |
|
|
|
|
value: 8021, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
name: "望城分局", |
|
|
|
|
value: 7111, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
name: "浏阳市局", |
|
|
|
|
value: 6622, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
name: "长沙县局", |
|
|
|
|
value: 6221, |
|
|
|
|
}, |
|
|
|
|
]; |
|
|
|
|
const option2 = ref({ |
|
|
|
|
series: [ |
|
|
|
|
{ |
|
|
|
|
@ -572,7 +721,7 @@ const getAuditMapData = async ()=>{
|
|
|
|
|
endTime: time.value[1] |
|
|
|
|
} |
|
|
|
|
const res = await getAuditMap(body); |
|
|
|
|
const mappedData = mapOrgNameMapping(res.auditSuperviseMapIconVoList,"checkProNumber"); |
|
|
|
|
const mappedData = mapOrgNameMapping(res.auditSuperviseMapIconVoList,"negativeNumber"); |
|
|
|
|
// 总数 |
|
|
|
|
const maxItem = mappedData.reduce( |
|
|
|
|
(max, item) => (Number(item.value) > Number(max.value) ? item : max), |
|
|
|
|
@ -613,7 +762,7 @@ const getAuditMapData = async ()=>{
|
|
|
|
|
.tooltip { |
|
|
|
|
position: relative; |
|
|
|
|
width: 169.88px; |
|
|
|
|
height: 155px; |
|
|
|
|
height: 185px; |
|
|
|
|
background: linear-gradient( |
|
|
|
|
180deg, |
|
|
|
|
rgba(1, 4, 87, 0.8) 0%, |
|
|
|
|
@ -645,7 +794,7 @@ const getAuditMapData = async ()=>{
|
|
|
|
|
|
|
|
|
|
.tooltip-content { |
|
|
|
|
width: 170px; |
|
|
|
|
height: 106px; |
|
|
|
|
height: 139px; |
|
|
|
|
//font-size: 11px; |
|
|
|
|
margin-top: -12px; |
|
|
|
|
background: linear-gradient(180deg, #010457 0%, #031577 100%); |
|
|
|
|
@ -751,6 +900,11 @@ const getAuditMapData = async ()=>{
|
|
|
|
|
width: 90px; |
|
|
|
|
color: #fff; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.descriptions_content { |
|
|
|
|
font-size: 18px; |
|
|
|
|
line-height: 24px; |
|
|
|
|
} |
|
|
|
|
</style> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|