|
|
|
|
@ -3,6 +3,11 @@
|
|
|
|
|
<header> |
|
|
|
|
<el-form :label-width="114"> |
|
|
|
|
<el-row> |
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<el-form-item label="统计时间"> |
|
|
|
|
<date-time-range-picker-ext v-model="query.crtTime" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<el-form-item label="单位分组"> |
|
|
|
|
<el-select v-model="query.departGroupId" clearable> |
|
|
|
|
@ -16,11 +21,6 @@
|
|
|
|
|
</el-select> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<el-form-item label="统计时间"> |
|
|
|
|
<date-time-range-picker-ext v-model="query.crtTime" /> |
|
|
|
|
</el-form-item> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<el-form-item label="姓名"> |
|
|
|
|
<el-input v-model="query.name" placeholder="请输入" clearable /> |
|
|
|
|
@ -81,12 +81,12 @@
|
|
|
|
|
width="120" |
|
|
|
|
align="center" |
|
|
|
|
/> |
|
|
|
|
<el-table-column |
|
|
|
|
label="累计分值" |
|
|
|
|
align="center" |
|
|
|
|
width="160" |
|
|
|
|
prop="score" |
|
|
|
|
></el-table-column> |
|
|
|
|
|
|
|
|
|
<el-table-column label="累计分值" align="center" width="160"> |
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
<span>{{ Math.round(row.score) }}</span> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column label="操作" width="240"> |
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
<el-button type="primary" link @click="handleShowProfile(row)" |
|
|
|
|
@ -141,15 +141,15 @@
|
|
|
|
|
<el-row class="mb-20" :gutter="20"> |
|
|
|
|
<el-col :span="8"> |
|
|
|
|
<h5>民警基本情况</h5> |
|
|
|
|
<div class="card-item"> |
|
|
|
|
<div class="card-item h-220"> |
|
|
|
|
<el-row> |
|
|
|
|
<el-col :span="6"> |
|
|
|
|
<div class="flex v-center" style="height: 100%"> |
|
|
|
|
<img |
|
|
|
|
v-if="policeInfo.avatarUrl" |
|
|
|
|
:src="`${BASE_PATH}/file/stream/${policeInfo.avatarUrl}`" |
|
|
|
|
class="police-avatar" |
|
|
|
|
style="width: 94px" |
|
|
|
|
<img |
|
|
|
|
v-if="policeInfo.avatarUrl" |
|
|
|
|
:src="`${BASE_PATH}/file/stream/${policeInfo.avatarUrl}`" |
|
|
|
|
class="police-avatar" |
|
|
|
|
style="width: 94px" |
|
|
|
|
/> |
|
|
|
|
<icon name="local-icon-police" :size="120" v-else /> |
|
|
|
|
</div> |
|
|
|
|
@ -199,62 +199,54 @@
|
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="8"> |
|
|
|
|
<h5>问题情况</h5> |
|
|
|
|
<div class="card-item"> |
|
|
|
|
<div class="flex v-center w-100" style="min-height: 200px;"> |
|
|
|
|
<el-row style="width: 100%"> |
|
|
|
|
<el-col :span="6" class="text-center"> |
|
|
|
|
<div class="flex v-center w-100"> |
|
|
|
|
<div> |
|
|
|
|
<div class="text-primary" style="font-size: 34px">{{ negativeInfo.size }}</div> |
|
|
|
|
<div class="mb-10">问题总数</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="card-item h-220"> |
|
|
|
|
<div class="flex v-center h100"> |
|
|
|
|
<div style="width: 25%" class="text-center"> |
|
|
|
|
<div class="text-primary" style="font-size: 34px"> |
|
|
|
|
{{ negativeInfo.size }} |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="18"> |
|
|
|
|
<el-row> |
|
|
|
|
<el-col |
|
|
|
|
:span="24" |
|
|
|
|
class="mb-20" |
|
|
|
|
v-if="negativeInfo.jcj110BusinessSize || negativeInfo.jcj110Size" |
|
|
|
|
> |
|
|
|
|
<description-pair |
|
|
|
|
label="110接处警" |
|
|
|
|
label1="量" |
|
|
|
|
label2="问题数" |
|
|
|
|
:value1="negativeInfo.jcj110BusinessSize" |
|
|
|
|
:value2="negativeInfo.jcj110Size" |
|
|
|
|
/> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col |
|
|
|
|
:span="24" |
|
|
|
|
v-if="negativeInfo.jcj122BusinessSize || negativeInfo.jcj122Size" |
|
|
|
|
class="mb-20" |
|
|
|
|
> |
|
|
|
|
<description-pair |
|
|
|
|
label="122接处警" |
|
|
|
|
label1="量" |
|
|
|
|
label2="问题数" |
|
|
|
|
:value1="negativeInfo.jcj122BusinessSize" |
|
|
|
|
:value2="negativeInfo.jcj122Size" |
|
|
|
|
/> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="24"> |
|
|
|
|
<description-pair |
|
|
|
|
label="执法办案" |
|
|
|
|
label2="问题数" |
|
|
|
|
:value1="negativeInfo.zfbaBusinessSize" |
|
|
|
|
:value2="negativeInfo.zfbaSize" |
|
|
|
|
/> |
|
|
|
|
</el-col> |
|
|
|
|
</el-row> |
|
|
|
|
</el-col> |
|
|
|
|
</el-row> |
|
|
|
|
<div class="mb-10">问题总数</div> |
|
|
|
|
</div> |
|
|
|
|
<div style="width: 75%" class="text-center"> |
|
|
|
|
<div |
|
|
|
|
v-if="negativeInfo.jcj110BusinessSize || negativeInfo.jcj110Size" |
|
|
|
|
class="mb-20" |
|
|
|
|
> |
|
|
|
|
<description-pair |
|
|
|
|
label="110接处警" |
|
|
|
|
label1="量" |
|
|
|
|
label2="问题数" |
|
|
|
|
:value1="negativeInfo.jcj110BusinessSize" |
|
|
|
|
:value2="negativeInfo.jcj110Size" |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
<div |
|
|
|
|
v-if="negativeInfo.jcj122BusinessSize || negativeInfo.jcj122Size" |
|
|
|
|
class="mb-20" |
|
|
|
|
> |
|
|
|
|
<description-pair |
|
|
|
|
label="122接处警" |
|
|
|
|
label1="量" |
|
|
|
|
label2="问题数" |
|
|
|
|
:value1="negativeInfo.jcj122BusinessSize" |
|
|
|
|
:value2="negativeInfo.jcj122Size" |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
<description-pair |
|
|
|
|
label="执法办案" |
|
|
|
|
label2="问题数" |
|
|
|
|
:value1="negativeInfo.zfbaBusinessSize" |
|
|
|
|
:value2="negativeInfo.zfbaSize" |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="8"> |
|
|
|
|
<h5>问题累计分值</h5> |
|
|
|
|
<div class="flex center card-item wrap"> |
|
|
|
|
<div class="flex center card-item wrap h-220"> |
|
|
|
|
<el-progress |
|
|
|
|
type="dashboard" |
|
|
|
|
:percentage="100" |
|
|
|
|
@ -269,7 +261,8 @@
|
|
|
|
|
<span |
|
|
|
|
class="score-progress_score score-theme text-bold" |
|
|
|
|
style="color: #19257d" |
|
|
|
|
>{{ score }}</span> |
|
|
|
|
>{{ score }}</span |
|
|
|
|
> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
@ -301,14 +294,14 @@
|
|
|
|
|
</el-col> |
|
|
|
|
<el-col :span="8"> |
|
|
|
|
<h5>突出问题排名</h5> |
|
|
|
|
<div class="flex center card-item" style="width: 100%"> |
|
|
|
|
<datav-chart-bar1 |
|
|
|
|
size="small" |
|
|
|
|
:data="problemTypeBarList" |
|
|
|
|
:color="colors" |
|
|
|
|
labelPosition="top" |
|
|
|
|
/> |
|
|
|
|
<el-empty v-if="problemTypeBarList.length === 0" /> |
|
|
|
|
<div class="flex center card-item h-320"> |
|
|
|
|
<datav-chart-bar1 |
|
|
|
|
size="small" |
|
|
|
|
:data="problemTypeBarList" |
|
|
|
|
:color="colors" |
|
|
|
|
labelPosition="top" |
|
|
|
|
/> |
|
|
|
|
<el-empty v-if="problemTypeBarList.length === 0" /> |
|
|
|
|
</div> |
|
|
|
|
</el-col> |
|
|
|
|
</el-row> |
|
|
|
|
@ -320,29 +313,17 @@
|
|
|
|
|
</div> |
|
|
|
|
<h5>问题清单 {{ negativeList.length }}</h5> |
|
|
|
|
<el-table :data="negativeList" height="500"> |
|
|
|
|
<el-table-column label="发现时间" prop="discoveryTime" width="160" /> |
|
|
|
|
<el-table-column label="发现时间" prop="discoveryTime" width="160" /> |
|
|
|
|
<el-table-column label="问题来源" prop="problemSources" width="150" /> |
|
|
|
|
<el-table-column label="业务类别" prop="businessTypeName" width="150" /> |
|
|
|
|
<el-table-column label="问题详情" prop="thingDesc" show-overflow-tooltip /> |
|
|
|
|
<el-table-column |
|
|
|
|
label="问题详情" |
|
|
|
|
prop="thingDesc" |
|
|
|
|
show-overflow-tooltip |
|
|
|
|
/> |
|
|
|
|
<el-table-column |
|
|
|
|
label="核查情况" |
|
|
|
|
prop="checkStatusDesc" |
|
|
|
|
show-overflow-tooltip |
|
|
|
|
/> |
|
|
|
|
<el-table-column |
|
|
|
|
label="问题类型" |
|
|
|
|
prop="problemType" |
|
|
|
|
show-overflow-tooltip |
|
|
|
|
label="核查情况" |
|
|
|
|
prop="checkStatusDesc" |
|
|
|
|
show-overflow-tooltip |
|
|
|
|
/> |
|
|
|
|
<el-table-column |
|
|
|
|
label="分值" |
|
|
|
|
width="100" |
|
|
|
|
align="center" |
|
|
|
|
> |
|
|
|
|
<el-table-column label="问题类型" prop="problemType" show-overflow-tooltip /> |
|
|
|
|
<el-table-column label="分值" width="100" align="center"> |
|
|
|
|
<template #default="{ row }"> |
|
|
|
|
<span class="text-danger">{{ row.score }}</span> |
|
|
|
|
</template> |
|
|
|
|
@ -401,7 +382,7 @@ const query = ref({
|
|
|
|
|
current: 1, |
|
|
|
|
size: 10, |
|
|
|
|
crtTime: [ |
|
|
|
|
moment().startOf('year').format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
moment().startOf("year").format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
moment().format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
], |
|
|
|
|
}); |
|
|
|
|
@ -424,7 +405,7 @@ function reset() {
|
|
|
|
|
current: 1, |
|
|
|
|
size: 10, |
|
|
|
|
crtTime: [ |
|
|
|
|
moment().startOf('year').format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
moment().startOf("year").format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
moment().format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
], |
|
|
|
|
}; |
|
|
|
|
@ -493,7 +474,7 @@ async function handleShowProfile(row) {
|
|
|
|
|
|
|
|
|
|
watch(activeRow, async () => { |
|
|
|
|
time.value = [ |
|
|
|
|
moment().startOf('year').format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
moment().startOf("year").format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
moment().format("YYYY-MM-DD HH:mm:ss"), |
|
|
|
|
]; |
|
|
|
|
await getProfileData(); |
|
|
|
|
@ -508,7 +489,7 @@ const time = ref([]);
|
|
|
|
|
const problemTypeBarList = ref([]); |
|
|
|
|
|
|
|
|
|
const score = ref(0); |
|
|
|
|
const days = ref(0) |
|
|
|
|
const days = ref(0); |
|
|
|
|
|
|
|
|
|
async function getProfileData() { |
|
|
|
|
loading.value = true; |
|
|
|
|
@ -518,13 +499,13 @@ async function getProfileData() {
|
|
|
|
|
endTime: time.value.length ? time.value[1] : "", |
|
|
|
|
}); |
|
|
|
|
score.value = Math.round(data.score); |
|
|
|
|
days.value = data.days |
|
|
|
|
days.value = data.days; |
|
|
|
|
negativeList.value = data.negatives; |
|
|
|
|
policeInfo.value = data.policeInfo; |
|
|
|
|
negativeInfo.value = data.negativeInfo; |
|
|
|
|
problemSourcesPieOptions.value.series[0].data = data.problemSourcesList; |
|
|
|
|
problemTypePieOptions.value.series[0].data = data.problemTypeList; |
|
|
|
|
problemTypeBarList.value = data.problemTypeBarList |
|
|
|
|
problemTypeBarList.value = data.problemTypeBarList; |
|
|
|
|
loading.value = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -613,8 +594,13 @@ h5 {
|
|
|
|
|
} |
|
|
|
|
.card-item { |
|
|
|
|
background: #f9faff; |
|
|
|
|
|
|
|
|
|
padding: 16px; |
|
|
|
|
min-height: 200px; |
|
|
|
|
} |
|
|
|
|
.h-220 { |
|
|
|
|
height: 220px; |
|
|
|
|
} |
|
|
|
|
.h-320 { |
|
|
|
|
height: 320px; |
|
|
|
|
} |
|
|
|
|
</style> |
|
|
|
|
|