Browse Source

fix: 优化个人、单位画像

master
wxc 1 month ago
parent
commit
9b94ddc415
  1. 165
      src/components/negativeInfo/depart-dialog.vue
  2. 23
      src/views/sensitivePerception/DepartNegative.vue
  3. 190
      src/views/sensitivePerception/PoliceNegative.vue

165
src/components/negativeInfo/depart-dialog.vue

@ -20,7 +20,7 @@
<el-row class="mb-20" :gutter="20"> <el-row class="mb-20" :gutter="20">
<el-col :span="8"> <el-col :span="8">
<h5>单位情况</h5> <h5>单位情况</h5>
<div class="card-item"> <div class="card-item h-220">
<el-row class="mb-10"> <el-row class="mb-10">
<el-col :span="16"> <el-col :span="16">
<div class="row"> <div class="row">
@ -45,13 +45,13 @@
</div> </div>
</div> </div>
</el-col> </el-col>
<el-col :span="8" > <el-col :span="8">
<div class="flex center v-center"> <div class="flex center v-center">
<img <img
:src="`${BASE_PATH}/file/stream/${departInfo.departImg}`" :src="`${BASE_PATH}/file/stream/${departInfo.departImg}`"
style="max-height: 96px" style="max-height: 96px"
v-if="departInfo.departImg1" v-if="departInfo.departImg1"
/> />
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -79,60 +79,52 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<h5>问题情况</h5> <h5>问题情况</h5>
<div class="card-item"> <div class="card-item h-220">
<div style="min-height: 200px;" class="flex v-center w100"> <div class="flex v-center h100">
<el-row class="flex v-center w100"> <div style="width: 25%" class="text-center">
<el-col :span="6" class="text-center"> <div class="text-primary" style="font-size: 34px">
<div class="flex v-center w100"> {{ negativeInfo.size }}
<div class="w100"> </div>
<div class="text-primary" style="font-size: 34px">{{ negativeInfo.size }}</div> <div>问题总数</div>
<div>问题总数</div> </div>
</div> <div style="width: 75%">
</div> <div
</el-col> class="mb-20"
<el-col :span="18"> v-if="negativeInfo.jcj110BusinessSize || negativeInfo.jcj110Size"
<el-row> >
<el-col <description-pair
:span="24" label1="110接处警量"
class="mb-20" label2="110接处警问题数"
v-if="negativeInfo.jcj110BusinessSize || negativeInfo.jcj110Size" :value1="negativeInfo.jcj110BusinessSize"
> :value2="negativeInfo.jcj110Size"
<description-pair />
label1="110接处警量" </div>
label2="110接处警问题数" <div
:value1="negativeInfo.jcj110BusinessSize" v-if="negativeInfo.jcj122BusinessSize || negativeInfo.jcj122Size"
:value2="negativeInfo.jcj110Size" class="mb-20"
/> >
</el-col> <description-pair
<el-col label1="122接处警量"
:span="24" label2="122接处警问题数"
v-if="negativeInfo.jcj122BusinessSize || negativeInfo.jcj122Size" :value1="negativeInfo.jcj122BusinessSize"
class="mb-20" :value2="negativeInfo.jcj122Size"
> />
<description-pair </div>
label1="122接处警量" <div>
label2="122接处警问题数" <description-pair
:value1="negativeInfo.jcj122BusinessSize" label1="执法办案"
:value2="negativeInfo.jcj122Size" label2="执法办案问题数"
/> :value1="negativeInfo.zfbaBusinessSize"
</el-col> :value2="negativeInfo.zfbaSize"
<el-col :span="24"> />
<description-pair </div>
label1="执法办案" </div>
label2="执法办案问题数"
:value1="negativeInfo.zfbaBusinessSize"
:value2="negativeInfo.zfbaSize"
/>
</el-col>
</el-row>
</el-col>
</el-row>
</div> </div>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<h5>问题累计分值</h5> <h5>问题累计分值</h5>
<div class="flex center card-item wrap"> <div class="flex center card-item wrap h-220">
<el-progress <el-progress
type="dashboard" type="dashboard"
:percentage="100" :percentage="100"
@ -147,7 +139,8 @@
<span <span
class="score-progress_score score-theme text-bold" class="score-progress_score score-theme text-bold"
style="color: #19257d" style="color: #19257d"
>{{ score }}</span> >{{ score }}</span
>
</div> </div>
</div> </div>
</div> </div>
@ -191,25 +184,35 @@
<el-row class="mb-20" :gutter="20"> <el-row class="mb-20" :gutter="20">
<el-col :span="8"> <el-col :span="8">
<h5>个人问题排名</h5> <h5>个人问题排名</h5>
<div class="card-item"> <div class="card-item h-300">
<el-scrollbar max-height="300px"> <el-scrollbar max-height="300px">
<datav-chart-bar size="small" :data="policeBarList" :color="colors" :labelWidth="60" /> <datav-chart-bar
size="small"
:data="policeBarList"
:color="colors"
:labelWidth="60"
/>
<el-empty v-if="policeBarList.length === 0" /> <el-empty v-if="policeBarList.length === 0" />
</el-scrollbar> </el-scrollbar>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<h5>问题涉及领导</h5> <h5>问题涉及领导</h5>
<div class="card-item"> <div class="card-item h-300">
<el-scrollbar max-height="300px"> <el-scrollbar max-height="300px">
<datav-chart-bar size="small" :data="policeLeadBarList" :color="colors" :labelWidth="60" /> <datav-chart-bar
size="small"
:data="policeLeadBarList"
:color="colors"
:labelWidth="60"
/>
<el-empty v-if="policeLeadBarList.length === 0" /> <el-empty v-if="policeLeadBarList.length === 0" />
</el-scrollbar> </el-scrollbar>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<h5>突出问题排名</h5> <h5>突出问题排名</h5>
<div class="card-item"> <div class="card-item h-300">
<el-scrollbar max-height="300px"> <el-scrollbar max-height="300px">
<datav-chart-bar1 <datav-chart-bar1
size="small" size="small"
@ -230,29 +233,17 @@
</div> </div>
<h5>问题清单 {{ negativeList.length }}</h5> <h5>问题清单 {{ negativeList.length }}</h5>
<el-table :data="negativeList" height="500"> <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="problemSources" width="150" />
<el-table-column label="业务类别" prop="businessTypeName" width="150" /> <el-table-column label="业务类别" prop="businessTypeName" width="150" />
<el-table-column label="问题详情" prop="thingDesc" show-overflow-tooltip />
<el-table-column <el-table-column
label="问题详情" label="核查情况"
prop="thingDesc" prop="checkStatusDesc"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column <el-table-column label="问题类型" prop="problemType" show-overflow-tooltip />
label="核查情况" <el-table-column label="分值" width="100" align="center">
prop="checkStatusDesc"
show-overflow-tooltip
/>
<el-table-column
label="问题类型"
prop="problemType"
show-overflow-tooltip
/>
<el-table-column
label="分值"
width="100"
align="center"
>
<template #default="{ row }"> <template #default="{ row }">
<span class="text-danger">{{ row.score }}</span> <span class="text-danger">{{ row.score }}</span>
</template> </template>
@ -293,7 +284,7 @@ const props = defineProps({
}); });
const time = ref([ const time = ref([
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"), moment().format("YYYY-MM-DD HH:mm:ss"),
]); ]);
const colors = [ const colors = [
@ -317,7 +308,7 @@ const negativeTotal = ref(0);
const problemTypeBarList = ref([]); const problemTypeBarList = ref([]);
const score = ref(0); const score = ref(0);
const days = ref(0) const days = ref(0);
async function getProfileData() { async function getProfileData() {
loading.value = true; loading.value = true;
@ -327,7 +318,7 @@ async function getProfileData() {
endTime: time.value.length ? time.value[1] : "", endTime: time.value.length ? time.value[1] : "",
}); });
score.value = Math.round(data.score); score.value = Math.round(data.score);
days.value = data.days days.value = data.days;
negativeList.value = data.negatives; negativeList.value = data.negatives;
departInfo.value = data.departInfo; departInfo.value = data.departInfo;
negativeInfo.value = data.negativeInfo; negativeInfo.value = data.negativeInfo;
@ -432,7 +423,7 @@ const problemTypePieOptions = ref({
}); });
const policeBarList = ref([]); const policeBarList = ref([]);
const policeLeadBarList = ref([]) const policeLeadBarList = ref([]);
function getType(val) { function getType(val) {
if (val < 60) { if (val < 60) {
@ -510,4 +501,10 @@ h5 {
padding: 16px; padding: 16px;
min-height: 200px; min-height: 200px;
} }
.h-220 {
height: 220px;
}
.h-300 {
height: 300px;
}
</style> </style>

23
src/views/sensitivePerception/DepartNegative.vue

@ -3,6 +3,13 @@
<header> <header>
<el-form :label-width="114"> <el-form :label-width="114">
<el-row> <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-col :span="6">
<el-form-item label="单位类型"> <el-form-item label="单位类型">
<el-select v-model="query.departGroupId" clearable> <el-select v-model="query.departGroupId" clearable>
@ -34,14 +41,6 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </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-col :span="6">
<el-form-item label="单位"> <el-form-item label="单位">
<depart-tree-select <depart-tree-select
@ -107,7 +106,11 @@
align="center" align="center"
width="160" width="160"
/> />
<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"> <el-table-column label="操作" width="240">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button
@ -165,7 +168,7 @@ const query = ref({
size: 10, size: 10,
departLevel: "3", departLevel: "3",
crtTime: [ crtTime: [
moment().subtract(12, 'month').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"), moment().format("YYYY-MM-DD HH:mm:ss"),
], ],
}); });

190
src/views/sensitivePerception/PoliceNegative.vue

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

Loading…
Cancel
Save