wxc 1 year ago
parent
commit
97e92c6364
  1. 36
      src/api/data/petition12337.ts
  2. 8
      src/api/datav.ts
  3. 189
      src/components/data/distrbute12337.vue
  4. 184
      src/components/datav/header.vue
  5. 1
      src/layout/components/Aside.vue
  6. 738
      src/views/data/Ajhc.vue
  7. 271
      src/views/data/Mail12337.vue
  8. 6
      src/views/datav/AuditSuper.vue
  9. 693
      src/views/datav/CaseVerif.vue
  10. 273
      src/views/datav/MailVisits.vue
  11. 6
      src/views/datav/RightsComfort.vue
  12. 855
      src/views/datav/SceneInsp.vue

36
src/api/data/petition12337.ts

@ -0,0 +1,36 @@
import request from "@/api/request";
export function listPetitionComplaint12337(query) {
return request.get({
url: '/data/petitionComplaint12337',
query
});
}
export function importPetitionComplaint(body) {
return request.post({
url: '/data/petitionComplaint/import',
body
});
}
export function addPetitionComplaint(body) {
return request.post({
url: `/data/petitionComplaint`,
body
});
}
export function delPetitionComplaint12337(id) {
return request.del({
url: `/data/petitionComplaint12337/${id}`
});
}
export function distributePetitionComplaint12337(body) {
return request.post({
url: `/data/petitionComplaint12337/distribute`,
body
});
}

8
src/api/datav.ts

@ -24,9 +24,17 @@ export function getRecentlyMailTrend(query) {
url: `/datav/mailVisits/getRecentlyMailTrendMonth`,
query
});
}
export function getRecentlyMailTrend12337(query) {
// alert(days + activeMailTrend.value)
return request.get({
url: `/datav/mailVisits/getRecentlyMailTrendByMonth12337`,
query
});
}

189
src/components/data/distrbute12337.vue

@ -0,0 +1,189 @@
<template>
<el-dialog title="问题分发" v-model="show" width="80vw" top="5vh">
<header>
<div class="flex v-center end mb-20">
<span class="mr-20"
>
<span class="text-primary">{{ data.length }}</span>
条数据</span
>
</div>
</header>
<div style="min-height: 500px">
<div class="table-container">
<el-table :data="data">
<el-table-column
label="案件编号"
prop="onlyId"
show-overflow-tooltip
/>
<el-table-column
label="受理时间"
prop="discoverTime"
show-overflow-tooltip
/>
<el-table-column
label="问题发生时间"
prop="happenTime"
show-overflow-tooltip
/>
<el-table-column
label="问题来源"
prop="letterSource"
show-overflow-tooltip
/>
<el-table-column
label="投诉人"
prop="name"
width="90"
/>
<el-table-column
label="投诉人电话"
prop="phone"
width="120"
/>
<el-table-column label="业务类别" prop="businessTypeName" />
<el-table-column label="涉嫌问题" prop="involveProblem" />
<el-table-column label="涉及警种" prop="policeTypeName" />
<el-table-column
label="涉及单位"
prop="thirdDepartName"
/>
<el-table-column
label="具体内容"
prop="wjwfProject"
show-overflow-tooltip
/>
<el-table-column label="操作" width="140">
<template #default="{ row }">
<el-button
type="info"
link
@click="handleRemoveDistribute(row)"
>移除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
</div>
<footer class="flex end mt-20">
<el-button
type="primary"
size="large"
@click="handleShowDistributeDialog"
:disabled="data.length === 0"
>确认数据</el-button
>
</footer>
</el-dialog>
<el-dialog title="任务分发" v-model="distributeShow" width="50vw" top="5vh">
<el-form :label-width="120" ref="formRef" :model="form">
<el-form-item
label="办理时限"
prop="timeLimit"
:rules="{
required: true,
message: '请选择办理时限',
}"
>
<time-limit-select
v-model="form.timeLimit"
v-model:maxSignDuration="form.maxSignDuration"
v-model:maxHandleDuration="form.maxHandleDuration"
v-model:maxExtensionDuration="form.maxExtensionDuration"
/>
</el-form-item>
<el-form-item
label="审核流程"
prop="approvalFlow"
:rules="{
required: true,
message: '请选择审核流程',
}"
>
<el-radio-group v-model="form.approvalFlow">
<el-radio
v-for="item in dict.approvalFlow"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel
}}{{ item.remark ? `(${item.remark})` : "" }}</el-radio
>
</el-radio-group>
<div class="tips mt-10">
<p>
三级审核 在问题提交办结时需经过所队>二级机构>市局三级审核通过后方可办结
</p>
<p>
二级审核 在问题提交办结时仅需经过所队>二级机构两级审核通过后即可办结
</p>
</div>
</el-form-item>
</el-form>
<footer class="flex end mt-20">
<el-button type="primary" size="large" @click="handleSubmit"
>确认下发</el-button
>
</footer>
</el-dialog>
</template>
<script setup>
import useCatchStore from "@/stores/modules/catch";
import { distributePetitionComplaint } from "@/api/data/petitionComplaint";
import {distributePetitionComplaint12337} from "@/api/data/petition12337.ts";
const catchStore = useCatchStore();
const dict = catchStore.getDicts(["timeLimit", "approvalFlow"]);
const props = defineProps({
show: {
type: Boolean,
default: false,
},
data: {
type: Array,
default: [],
},
});
const emit = defineEmits(["update:data", "update:show", "update"]);
const show = ref(props.show);
const distributeShow = ref(false);
watch(
() => props.show,
(val) => {
show.value = val;
}
);
watch(show, (val) => {
emit("update:show", val);
});
function handleRemoveDistribute(row) {
let data = [...props.data];
data.splice(props.data.indexOf(row), 1);
emit("update:data", data);
}
const form = ref({});
const formRef = ref();
function handleShowDistributeDialog() {
distributeShow.value = true;
}
async function handleSubmit() {
await formRef.value.validate();
form.value.data = props.data;
await distributePetitionComplaint12337(form.value);
form.value = {};
distributeShow.value = false;
show.value = false;
emit("update");
emit("update:data", []);
}
</script>
<style lang="scss" scoped>
</style>

184
src/components/datav/header.vue

@ -1,49 +1,49 @@
<template>
<header>
<div class="flex flex v-center between relative">
<nav class="flex">
<router-link to="/datav/videoInsp" v-slot="{ isActive }">
<span>视频督察</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
<router-link to="/datav/sceneInsp" v-slot="{ isActive }">
<span>现场督察</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
<router-link to="/datav/caseVerif" v-slot="{ isActive }">
<span>案件核查</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
<router-link to="/datav/jwpy" v-slot="{ isActive }">
<span>警务评议</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
</nav>
<h1>
<router-link to="/datav/gobal">
<span>长沙公安数字督察一体化平台</span>
</router-link>
</h1>
<nav class="flex right">
<router-link to="/datav/mailVisits" v-slot="{ isActive }">
<span>信访投诉</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
<router-link to="/datav/rightsComfort" v-slot="{ isActive }">
<span>维权抚慰</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
<router-link to="/datav/auditSuper" v-slot="{ isActive }">
<span>审计监督</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
<router-link to="/datav/lmgz" v-slot="{ isActive }">
<span>灵敏感知</span>
<img :src="isActive ? Img2 : Img1" alt="" />
</router-link>
</nav>
</div>
</header>
<header>
<div class="flex flex v-center between relative">
<nav class="flex">
<router-link to="/datav/videoInsp" v-slot="{ isActive }">
<span>视频督察</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link to="/datav/sceneInsp" v-slot="{ isActive }">
<span>现场督察</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link to="/datav/caseVerif" v-slot="{ isActive }">
<span>案件核查</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link to="/datav/jwpy" v-slot="{ isActive }">
<span>警务评议</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
</nav>
<h1>
<router-link to="/datav/gobal">
<span>长沙公安数字督察一体化平台</span>
</router-link>
</h1>
<nav class="flex right">
<router-link to="/datav/mailVisits" v-slot="{ isActive }">
<span>信访投诉</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link to="/datav/rightsComfort" v-slot="{ isActive }">
<span>维权抚慰</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link to="/datav/auditSuper" v-slot="{ isActive }">
<span>审计监督</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
<router-link to="/datav/lmgz" v-slot="{ isActive }">
<span>灵敏感知</span>
<img :src="isActive ? Img2 : Img1" alt=""/>
</router-link>
</nav>
</div>
</header>
</template>
<script setup>
import Img1 from '/imgs/datav/base.png'
@ -51,53 +51,61 @@ import Img2 from '/imgs/datav/base_active.png'
</script>
<style lang="scss" scoped>
header {
color: #fff;
margin-bottom: 20px;
position: relative;
&::before {
display: block;
content: "";
position: absolute;
width: 73.5%;
height: 213px;
top: 0;
left: 50%;
transform: translateX(-50%);
background-image: url("/imgs/datav/bg-1.png");
z-index: 0;
color: #fff;
margin-bottom: 20px;
position: relative;
&::before {
display: block;
content: "";
position: absolute;
width: 73.5%;
height: 213px;
top: 0;
left: 50%;
transform: translateX(-50%);
background-image: url("/imgs/datav/bg-1.png");
z-index: 0;
}
h1 {
font-family: PangMenZhengDao;
font-size: 48px;
line-height: 1;
letter-spacing: 2px;
margin: 0;
white-space: nowrap;
}
nav {
a {
color: inherit;
text-decoration: none;
text-align: center;
font-size: 19px;
}
span {
display: block;
}
h1 {
font-family: PangMenZhengDao;
font-size: 48px;
line-height: 1;
letter-spacing: 2px;
margin: 0;
img {
display: block;
margin-top: -12px;
}
nav {
a {
color: inherit;
text-decoration: none;
text-align: center;
font-size: 19px;
}
span {
display: block;
}
img {
display: block;
margin-top: -12px;
}
&.right {
img {
transform: scaleX(-1);
}
}
&.right {
img {
transform: scaleX(-1);
}
}
}
}
:deep() {
a {
color: inherit;
text-decoration: none;
}
a {
color: inherit;
text-decoration: none;
}
}
</style>

1
src/layout/components/Aside.vue

@ -85,7 +85,6 @@ function handleMenuClick(route, index) {
return;
}
}
const activeSecondMenuName = ref(null);
function handleSecondMenuClick(route) {
activeSecondMenuName.value = route.name;

738
src/views/data/Ajhc.vue

@ -1,380 +1,421 @@
<template>
<div class="container">
<header>
<el-form :label-width="114">
<el-row>
<el-col :span="6">
<el-form-item label="案件编号">
<el-input
placeholder="请输入"
v-model="query.originId"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投诉人">
<div class="flex gap">
<el-select
v-model="query.responderKey"
style="width: 160px"
@change="delete query.responderValue"
>
<el-option value="name" label="姓名" />
<el-option value="phone" label="电话" />
</el-select>
<el-input
placeholder="请输入"
v-model="query.responderValue"
clearable
/>
</div>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label=" 受理时间">
<date-time-range-picker-ext
v-model="query.discoveryTime"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="具体内容">
<el-input
placeholder="请输入"
v-model="query.thingDesc"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="分发状态">
<el-select v-model="query.distributionState">
<el-option
v-for="item in dict.distributionState"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="mb-25 flex between">
<div>
<el-button type="primary" @click="show = true"
>数据导入</el-button
>
<el-badge
:value="distributeList.length"
class="ml-10"
v-if="distributeList.length"
>
<el-button
type="primary"
@click="distributeListShow = true"
>问题下发</el-button
>
</el-badge>
</div>
<div>
<el-button type="primary" @click="getList">
<template #icon>
<icon name="el-icon-Search" />
</template>
查询</el-button
>
<el-button @click="reset">重置</el-button>
</div>
</div>
</header>
<div class="table-container">
<el-table :data="list">
<el-table-column
label="案件编号"
prop="originId"
show-overflow-tooltip
/>
<el-table-column
label="受理时间"
prop="discoveryTime"
show-overflow-tooltip
/>
<el-table-column
label="问题发生时间"
prop="happenTime"
show-overflow-tooltip
/>
<el-table-column
label="问题来源"
prop="problemSources"
show-overflow-tooltip
/>
<el-table-column
label="投诉人"
prop="responderName"
width="90"
<div class="container">
<header>
<el-form :label-width="114">
<el-row>
<el-col :span="6">
<el-form-item label="案件编号">
<el-input
placeholder="请输入"
v-model="query.originId"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投诉人">
<div class="flex gap">
<el-select
v-model="query.responderKey"
style="width: 160px"
@change="delete query.responderValue"
>
<el-option value="name" label="姓名"/>
<el-option value="phone" label="电话"/>
</el-select>
<el-input
placeholder="请输入"
v-model="query.responderValue"
clearable
/>
<el-table-column
label="投诉人电话"
prop="contactPhone"
width="120"
</div>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label=" 受理时间">
<date-time-range-picker-ext
v-model="query.discoveryTime"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="具体内容">
<el-input
placeholder="请输入"
v-model="query.thingDesc"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="分发状态">
<el-select v-model="query.distributionState">
<el-option
v-for="item in dict.distributionState"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
<el-table-column label="业务类别" prop="businessTypeName" />
<el-table-column label="涉嫌问题" prop="involveProblem" />
<el-table-column label="涉及警种" prop="policeTypeName" />
<el-table-column label="涉及单位" prop="thirdDepartName" />
<el-table-column
label="具体内容"
prop="thingDesc"
show-overflow-tooltip
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否属实">
<el-select
size="small"
style="width: 146px"
placeholder="核查情况"
clearable
v-model="query.checkStatus"
>
<el-option
v-for="item in dict.inspectCase"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
/>
<el-table-column label="状态">
<template #default="{ row }">
<el-tag>{{
getDictLable(
dict.distributionState,
row.distributionState
)
}}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template #default="{ row }">
<template
v-if="
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="mb-25 flex between">
<div>
<el-button type="primary" @click="show = true"
>数据导入
</el-button
>
<el-badge
:value="distributeList.length"
class="ml-10"
v-if="distributeList.length"
>
<el-button
type="primary"
@click="distributeListShow = true"
>问题下发
</el-button
>
</el-badge>
</div>
<div>
<el-button type="primary" @click="getList">
<template #icon>
<icon name="el-icon-Search"/>
</template>
查询
</el-button
>
<el-button @click="reset">重置</el-button>
</div>
</div>
</header>
<div class="table-container">
<el-table :data="list">
<el-table-column
label="案件编号"
prop="originId"
show-overflow-tooltip
/>
<el-table-column
label="受理时间"
prop="discoveryTime"
show-overflow-tooltip
/>
<el-table-column
label="问题发生时间"
prop="happenTime"
show-overflow-tooltip
/>
<el-table-column
label="问题来源"
prop="problemSources"
show-overflow-tooltip
/>
<el-table-column
label="投诉人"
prop="responderName"
width="90"
/>
<el-table-column
label="投诉人电话"
prop="contactPhone"
width="120"
/>
<el-table-column label="业务类别" prop="businessTypeName"/>
<el-table-column label="涉嫌问题" prop="involveProblem"/>
<el-table-column label="涉及警种" prop="policeTypeName"/>
<el-table-column label="涉及单位" prop="thirdDepartName"/>
<el-table-column
label="具体内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column label="是否属实" prop="isReal">
<template v-slot="scope">
<span v-if="scope.row.isReal === 1">属实</span>
<span v-else-if="scope.row.isReal === 2">部分属实</span>
<span v-else-if="scope.row.isReal === 3">不属实</span>
<span v-else>未知状态</span>
</template>
</el-table-column>
<el-table-column label="状态">
<template #default="{ row }">
<el-tag>{{
getDictLable(
dict.distributionState,
row.distributionState
)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template #default="{ row }">
<template
v-if="
row.distributionState ===
DistributionState.UNDISTRIBUTED
"
>
<el-button
type="primary"
link
@click="handleAddDistribute(row)"
v-if="
>
<el-button
type="primary"
link
@click="handleAddDistribute(row)"
v-if="
distributeList.filter(
(item) => item.originId === row.originId
).length === 0
"
>加入问题下发</el-button
>
<el-button
type="info"
link
v-else
@click="handleRemoveDistribute(row)"
>移除</el-button
>
</template>
<el-button type="danger" link @click="handleDel(row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex end mt-8">
<el-pagination
@size-change="getList"
@current-change="getList"
:current-page="query.current"
:page-sizes="[10, 20, 50]"
v-model:page-size="query.size"
v-model:current-page="query.current"
layout="total, sizes, prev, pager, next"
:total="total"
>加入问题下发
</el-button
>
<el-button
type="info"
link
v-else
@click="handleRemoveDistribute(row)"
>移除
</el-button
>
</template>
<el-button type="danger" link @click="handleDel(row)"
>删除
</el-button
>
</el-pagination>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex end mt-8">
<el-pagination
@size-change="getList"
@current-change="getList"
:current-page="query.current"
:page-sizes="[10, 20, 50]"
v-model:page-size="query.size"
v-model:current-page="query.current"
layout="total, sizes, prev, pager, next"
:total="total"
>
</el-pagination>
</div>
</div>
<data-import-case
v-model="show"
title="案件核查 数据导入"
@close="show = false"
@update="getList"
/>
<data-import-case
v-model="show"
title="案件核查 数据导入"
@close="show = false"
@update="getList"
/>
<el-dialog
title="问题分发"
v-model="distributeListShow"
width="80vw"
top="5vh"
>
<header>
<div class="flex v-center end mb-20">
<el-dialog
title="问题分发"
v-model="distributeListShow"
width="80vw"
top="5vh"
>
<header>
<div class="flex v-center end mb-20">
<span class="mr-20"
>
>
<span class="text-primary">{{
distributeList.length
}}</span>
}}</span>
条数据</span
>
</div>
</header>
<div style="min-height: 500px">
<div class="table-container">
<el-table :data="distributeList">
<el-table-column
label="案件编号"
prop="originId"
show-overflow-tooltip
/>
<el-table-column
label="受理时间"
prop="discoveryTime"
show-overflow-tooltip
/>
<!-- <el-table-column label="问题发生时间" prop="happenTime" show-overflow-tooltip />-->
<el-table-column
label="问题来源"
prop="problemSources"
show-overflow-tooltip
/>
<el-table-column
label="投诉人"
prop="responderName"
width="90"
/>
<el-table-column
label="投诉人电话"
prop="contactPhone"
width="120"
/>
<el-table-column label="业务类别" prop="businessTypeName" />
<el-table-column label="涉嫌问题" prop="involveProblem" />
<!-- <el-table-column label="涉及警种" prop="policeTypeName" />-->
<el-table-column
label="涉及单位"
prop="involveDepartName"
/>
<el-table-column
label="具体内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column label="操作" width="140">
<template #default="{ row }">
<el-button
type="info"
link
@click="handleRemoveDistribute(row)"
>移除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
</div>
<footer class="flex end mt-20">
<el-button
type="primary"
size="large"
@click="handleShowDistributeDialog"
:disabled="distributeList.length === 0"
>确认数据</el-button
>
</footer>
</el-dialog>
</div>
</header>
<div style="min-height: 500px">
<div class="table-container">
<el-table :data="distributeList">
<el-table-column
label="案件编号"
prop="originId"
show-overflow-tooltip
/>
<el-table-column
label="受理时间"
prop="discoveryTime"
show-overflow-tooltip
/>
<!-- <el-table-column label="问题发生时间" prop="happenTime" show-overflow-tooltip />-->
<el-table-column
label="问题来源"
prop="problemSources"
show-overflow-tooltip
/>
<el-table-column
label="投诉人"
prop="responderName"
width="90"
/>
<el-table-column
label="投诉人电话"
prop="contactPhone"
width="120"
/>
<el-table-column label="业务类别" prop="businessTypeName"/>
<el-table-column label="涉嫌问题" prop="involveProblem"/>
<!-- <el-table-column label="涉及警种" prop="policeTypeName" />-->
<el-table-column
label="涉及单位"
prop="involveDepartName"
/>
<el-table-column
label="具体内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column label="操作" width="140">
<template #default="{ row }">
<el-button
type="info"
link
@click="handleRemoveDistribute(row)"
>移除
</el-button
>
</template>
</el-table-column>
</el-table>
</div>
</div>
<footer class="flex end mt-20">
<el-button
type="primary"
size="large"
@click="handleShowDistributeDialog"
:disabled="distributeList.length === 0"
>确认数据
</el-button
>
</footer>
</el-dialog>
<el-dialog title="任务分发" v-model="distributeShow" width="50vw" top="5vh">
<el-form :label-width="120" ref="formRef" :model="form">
<el-form-item
label="办理时限"
prop="timeLimit"
:rules="{
<el-dialog title="任务分发" v-model="distributeShow" width="50vw" top="5vh">
<el-form :label-width="120" ref="formRef" :model="form">
<el-form-item
label="办理时限"
prop="timeLimit"
:rules="{
required: true,
message: '请选择办理时限',
}"
>
<time-limit-select
v-model="form.timeLimit"
v-model:maxSignDuration="form.maxSignDuration"
v-model:maxHandleDuration="form.maxHandleDuration"
v-model:maxExtensionDuration="form.maxExtensionDuration"
/>
</el-form-item>
<el-form-item
label="审核流程"
prop="approvalFlow"
:rules="{
>
<time-limit-select
v-model="form.timeLimit"
v-model:maxSignDuration="form.maxSignDuration"
v-model:maxHandleDuration="form.maxHandleDuration"
v-model:maxExtensionDuration="form.maxExtensionDuration"
/>
</el-form-item>
<el-form-item
label="审核流程"
prop="approvalFlow"
:rules="{
required: true,
message: '请选择审核流程',
}"
>
<el-radio-group v-model="form.approvalFlow">
<el-radio
v-for="item in dict.approvalFlow"
:key="item.dictCode"
:value="item.dictValue"
>{{ item.dictLabel
}}{{ item.remark ? `(${item.remark})` : "" }}</el-radio
>
</el-radio-group>
<div class="tips mt-10">
<p>
三级审核 在问题提交办结时需经过所队>二级机构>市局三级审核通过后方可办结
</p>
<p>
二级审核 在问题提交办结时仅需经过所队>二级机构两级审核通过后即可办结
</p>
</div>
</el-form-item>
</el-form>
<footer class="flex end mt-20">
<el-button
type="primary"
size="large"
@click="handleSubmit"
>确认下发</el-button
>
</footer>
</el-dialog>
>
<el-radio-group v-model="form.approvalFlow">
<el-radio
v-for="item in dict.approvalFlow"
:key="item.dictCode"
:value="item.dictValue"
>{{
item.dictLabel
}}{{ item.remark ? `(${item.remark})` : "" }}
</el-radio
>
</el-radio-group>
<div class="tips mt-10">
<p>
三级审核 在问题提交办结时需经过所队>二级机构>市局三级审核通过后方可办结
</p>
<p>
二级审核 在问题提交办结时仅需经过所队>二级机构两级审核通过后即可办结
</p>
</div>
</el-form-item>
</el-form>
<footer class="flex end mt-20">
<el-button
type="primary"
size="large"
@click="handleSubmit"
>确认下发
</el-button
>
</footer>
</el-dialog>
</template>
<script setup>
import { BASE_PATH } from "@/api/request";
import {BASE_PATH} from "@/api/request";
import {
listCaseVerif,
delCaseVerif,
distributeCaseVerif,
listCaseVerif,
delCaseVerif,
distributeCaseVerif,
} from "@/api/data/caseVerif";
import { DistributionState } from "@/enums/dictEnums";
import { getDictLable } from "@/utils/util";
import {DistributionState} from "@/enums/dictEnums";
import {getDictLable} from "@/utils/util";
import feedback from "@/utils/feedback";
import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore();
const dict = catchStore.getDicts([
"distributionState",
"timeLimit",
"approvalFlow"
"distributionState",
"timeLimit",
"approvalFlow",
]);
const query = ref({
size: 10,
current: 1,
responderKey: "name",
size: 10,
current: 1,
responderKey: "name",
});
const list = ref([]);
const total = ref(0);
function getList() {
listCaseVerif(query.value).then((data) => {
list.value = data.records;
total.value = data.total;
});
listCaseVerif(query.value).then((data) => {
list.value = data.records;
total.value = data.total;
});
}
function reset() {
query.value = {
size: 10,
current: 1,
responderKey: "name",
};
getList();
query.value = {
size: 10,
current: 1,
responderKey: "name",
};
getList();
}
getList();
@ -382,9 +423,9 @@ getList();
const show = ref(false);
async function handleDel(row) {
await feedback.confirm("确定要删除该数据?");
await delCaseVerif(row.originId);
getList();
await feedback.confirm("确定要删除该数据?");
await delCaseVerif(row.originId);
getList();
}
const distributeListShow = ref(false);
@ -392,33 +433,34 @@ const distributeList = ref([]);
const distributeShow = ref(false);
function handleAddDistribute(row) {
distributeList.value.push(row);
distributeList.value.push(row);
}
function handleShowDistributeDialog() {
distributeShow.value = true;
distributeShow.value = true;
}
const form = ref({});
const formRef = ref()
function handleRemoveDistribute(row) {
distributeList.value.splice(
distributeList.value.findIndex(
(item) => item.originId === row.originId
),
1
);
distributeList.value.splice(
distributeList.value.findIndex(
(item) => item.originId === row.originId
),
1
);
}
async function handleSubmit() {
await formRef.value.validate()
form.value.data = distributeList.value
await distributeCaseVerif(form.value)
form.value = {}
distributeShow.value = false
distributeListShow.value = false
feedback.msgSuccess('下发成功')
getList()
await formRef.value.validate()
form.value.data = distributeList.value
await distributeCaseVerif(form.value)
form.value = {}
distributeShow.value = false
distributeListShow.value = false
feedback.msgSuccess('下发成功')
getList()
}
</script>
<style lang="scss" scoped>

271
src/views/data/Mail12337.vue

@ -0,0 +1,271 @@
<template>
<div class="container">
<header>
<el-form :label-width="114">
<el-row>
<el-col :span="6">
<el-form-item label="信件编号">
<el-input
placeholder="请输入"
v-model="query.originId"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投诉人">
<div class="flex gap">
<el-select
v-model="query.responderKey"
style="width: 160px"
@change="delete query.responderValue"
>
<el-option value="name" label="姓名"/>
<el-option value="phone" label="电话"/>
</el-select>
<el-input
placeholder="请输入"
v-model="query.responderValue"
clearable
/>
</div>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="登记时间">
<date-time-range-picker-ext
v-model="query.discoverTime"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="具体内容">
<el-input
placeholder="请输入"
v-model="query.thingDesc"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="mb-25 flex between">
<div>
<el-button type="primary" @click="show = true"
>数据导入
</el-button
>
<el-badge
:value="distributeList.length"
class="ml-10"
v-if="distributeList.length"
>
<el-button type="primary" @click="distributeShow = true">问题下发</el-button>
</el-badge>
</div>
<div>
<el-button type="primary" @click="getList">
<template #icon>
<icon name="el-icon-Search"/>
</template>
查询
</el-button
>
<el-button @click="reset">重置</el-button>
</div>
</div>
</header>
<div class="table-container">
<el-table :data="list">
<el-table-column
label="信件编号"
prop="onlyId"
show-overflow-tooltip
/>
<el-table-column
label="投诉渠道"
prop="letterSource"
/>
<el-table-column
label="登记时间"
prop="discoverTime"
show-overflow-tooltip
/>
<el-table-column
label="投诉人"
prop="name"
width="90"
/>
<el-table-column label="电话" prop="phone"/>
<el-table-column
label="被投诉机构"
show-overflow-tooltip
>
<template #default="{ row }">
<span>{{ row.secondDepartName }}</span>
<span>{{ row.thirdDepartName }}</span>
</template>
</el-table-column>
<el-table-column
label="具体内容"
prop="wjwfProject"
show-overflow-tooltip
/>
<el-table-column label="状态">
<template #default="{ row }">
<el-tag>{{
getDictLable(
dict.distributionState,
row.distributionState
)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template #default="{ row }">
<template
v-if="
row.distributionState ===
DistributionState.UNDISTRIBUTED
"
>
<el-button
type="primary"
link
@click="handleAddDistribute(row)"
v-if="
distributeList.filter(
(item) => item.onlyId === row.onlyId
).length === 0
"
>加入问题下发
</el-button
>
<el-button
type="info"
link
v-else
@click="handleRemoveDistribute(row)"
>移除
</el-button
>
</template>
<el-button type="danger" link @click="handleDel(row)"
>删除
</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex end mt-8">
<el-pagination
@size-change="getList"
@current-change="getList"
:current-page="query.current"
:page-sizes="[10, 20, 50]"
v-model:page-size="query.size"
v-model:current-page="query.current"
layout="total, sizes, prev, pager, next"
:total="total"
>
</el-pagination>
</div>
</div>
<!-- <data-import
v-model="show"
title="公安部信访投诉 数据导入"
:problemSourcesCode="ProblemSources.GABXF"
@close="show = false"
@update="getList"
/>-->
<data-distrbute-12337
v-model:show="distributeShow"
v-model:data="distributeList"
@update="getList"
/>
</template>
<script setup>
import {
delPetitionComplaint,
} from "@/api/data/petitionComplaint";
import {ProblemSources, DistributionState} from "@/enums/dictEnums";
import feedback from "@/utils/feedback";
import {getDictLable} from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";
import {delPetitionComplaint12337, listPetitionComplaint12337} from "@/api/data/petition12337.ts";
const catchStore = useCatchStore();
const dict = catchStore.getDicts([
"distributionState",
"timeLimit",
"approvalFlow",
"distributionFlow",
"distributionState",
]);
const query = ref({
size: 10,
current: 1,
responderKey: "name",
problemSourcesCode: ProblemSources.GABXF,
});
const list = ref([]);
const total = ref(0);
function getList() {
listPetitionComplaint12337(query.value).then((data) => {
list.value = data.records;
total.value = data.total;
});
}
function reset() {
query.value = {
size: 10,
current: 1,
responderKey: "name",
problemSourcesCode: ProblemSources.XF12337,
};
getList();
}
getList();
const show = ref(false);
//
async function handleDel(row) {
await feedback.confirm("确定要删除该数据?");
await delPetitionComplaint12337(row.onlyId);
getList();
}
const distributeShow = ref(false)
const distributeList = ref([])
function handleAddDistribute(row) {
distributeList.value.push(row);
}
function handleRemoveDistribute(row) {
distributeList.value.splice(
distributeList.value.findIndex(
(item) => item.originId === row.originId
),
1
);
}
</script>
<style lang="scss" scoped>
</style>

6
src/views/datav/AuditSuper.vue

@ -339,6 +339,9 @@ const option2 = {
],
},
],
tooltip: {
trigger: "item",
},
};
const option3 = {
@ -357,6 +360,9 @@ const option3 = {
],
},
],
tooltip: {
trigger: "item",
},
};
</script>
<style lang="scss" scoped>

693
src/views/datav/CaseVerif.vue

@ -1,145 +1,145 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header />
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="分县市局排名" subTitle="案件数">
<datav-tabs
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="350px">
<datav-chart-bar
:data="fxsjBarList"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="350px">
<datav-chart-bar
:data="jsdwBarList"
:max="11"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card title="案件问题性质">
<datav-tabs>
<datav-tab-item label="执法办案" name="1">
<v-charts
style="height: 320px"
:option="zfbaPieOption"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="服务管理" name="2">
<v-charts
style="height: 320px"
:option="fwglPieOption"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="警纪警规" name="3">
<v-charts
style="height: 320px"
:option="jjjgPieOption"
autoresize
/>
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
<el-col :span="12">
<datav-date-picker v-model="time" />
<div class="flex gap-42">
<datav-statistic
:value="overview.total"
title="案件总数(起)"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.confirmed"
title="查实案件数"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.investigateAndPunish"
title="查处问题(个)"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.accountablePeopleNumber"
title="问责人次"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.accountableDepartNumber"
title="问责单位数"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.confirmedRate"
value-unit="%"
title="查实率"
style="width: 16.66%"
/>
</div>
<v-charts
style="height: 420px"
:option="option"
autoresize
/>
<datav-card title="查处问题趋势">
<v-charts
style="height: 320px"
:option="option1"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="6">
<datav-card>
<datav-tabs>
<datav-tab-item label="案件来源占比" name="1">
<div class="mb-40">
<v-charts
style="height: 340px"
:option="ajlyPieOption"
autoresize
/>
</div>
</datav-tab-item>
<datav-tab-item label="问责处理情况" name="2">
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card>
<datav-tabs>
<datav-tab-item label="停职处理情况" name="1">
<div class="mb-40">
<v-charts
style="height: 340px"
:option="option4"
autoresize
/>
</div>
</datav-tab-item>
<datav-tab-item label="禁闭处理情况" name="2">
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
</el-row>
</main>
</div>
</el-scrollbar>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="分县市局排名" subTitle="案件数">
<datav-tabs
type="bottom-button"
>
<datav-tab-item label="分县市局" name="1">
<el-scrollbar height="350px">
<datav-chart-bar
:data="fxsjBarList"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="局属单位" name="2">
<el-scrollbar height="350px">
<datav-chart-bar
:data="jsdwBarList"
:max="11"
size="large"
:color="colors"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card title="案件问题性质">
<datav-tabs>
<datav-tab-item label="执法办案" name="1">
<v-charts
style="height: 320px"
:option="zfbaPieOption"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="服务管理" name="2">
<v-charts
style="height: 320px"
:option="fwglPieOption"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="警纪警规" name="3">
<v-charts
style="height: 320px"
:option="jjjgPieOption"
autoresize
/>
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
<el-col :span="12">
<datav-date-picker v-model="time"/>
<div class="flex gap-42">
<datav-statistic
:value="overview.total"
title="案件总数(起)"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.confirmed"
title="查实案件数"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.investigateAndPunish"
title="查处问题(个)"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.accountablePeopleNumber"
title="问责人次"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.accountableDepartNumber"
title="问责单位数"
style="width: 16.66%"
/>
<datav-statistic
:value="overview.confirmedRate"
value-unit="%"
title="查实率"
style="width: 16.66%"
/>
</div>
<v-charts
style="height: 420px"
:option="option"
autoresize
/>
<datav-card title="查处问题趋势">
<v-charts
style="height: 320px"
:option="option1"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="6">
<datav-card>
<datav-tabs>
<datav-tab-item label="案件来源占比" name="1">
<div class="mb-40">
<v-charts
style="height: 340px"
:option="ajlyPieOption"
autoresize
/>
</div>
</datav-tab-item>
<datav-tab-item label="问责处理情况" name="2">
</datav-tab-item>
</datav-tabs>
</datav-card>
<datav-card>
<datav-tabs>
<datav-tab-item label="停职处理情况" name="1">
<div class="mb-40">
<v-charts
style="height: 340px"
:option="option4"
autoresize
/>
</div>
</datav-tab-item>
<datav-tab-item label="禁闭处理情况" name="2">
</datav-tab-item>
</datav-tabs>
</datav-card>
</el-col>
</el-row>
</main>
</div>
</el-scrollbar>
</template>
<script setup>
@ -147,263 +147,272 @@ import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core";
import moment from "moment";
import { getCaseVerifData } from "@/api/datav";
import {getCaseVerifData} from "@/api/datav";
const time = ref([
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
moment().startOf("year").format("YYYY-MM-DD"),
moment().format("YYYY-MM-DD"),
]);
const overview = ref({
total: 0,
confirmed: 0,
investigateAndPunish: 0,
accountablePeopleNumber: 0,
accountableDepartNumber: 0,
confirmedRate: 0,
total: 0,
confirmed: 0,
investigateAndPunish: 0,
accountablePeopleNumber: 0,
accountableDepartNumber: 0,
confirmedRate: 0,
});
const fxsjBarList = ref([]);
const jsdwBarList = ref([]);
const zfbaPieList = ref([]);
const fwglPieList = ref([]);
const jjjgPieList = ref([]);
const ajlyPieList = ref([]);
function getData() {
getCaseVerifData(time.value).then((data) => {
overview.value = data.overview;
fxsjBarList.value = data.fxsjBarList;
jsdwBarList.value = data.jsdwBarList;
zfbaPieList.value = data.zfbaPieList;
fwglPieList.value = data.fwglPieList;
jjjgPieList.value = data.jjjgPieList;
ajlyPieList.value = data.ajlyPieList;
});
getCaseVerifData(time.value).then((data) => {
overview.value = data.overview;
fxsjBarList.value = data.fxsjBarList;
jsdwBarList.value = data.jsdwBarList;
zfbaPieList.value = data.zfbaPieList;
fwglPieList.value = data.fwglPieList;
jjjgPieList.value = data.jjjgPieList;
ajlyPieList.value = data.ajlyPieList;
});
}
watch(time, () => {
getData();
getData();
});
onMounted(() => {
getData();
getData();
});
const zfbaPieOption = computed(() => {
return {
tooltip: {
trigger: "item",
return {
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: zfbaPieList.value,
},
],
};
data: zfbaPieList.value,
},
],
};
});
const fwglPieOption = computed(() => {
return {
tooltip: {
trigger: "item",
return {
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: fwglPieList.value,
},
],
};
data: fwglPieList.value,
},
],
};
});
const jjjgPieOption = computed(() => {
return {
tooltip: {
trigger: "item",
return {
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: jjjgPieList.value,
},
],
};
data: jjjgPieList.value,
},
],
};
});
const ajlyPieOption = computed(() => {
return {
tooltip: {
trigger: "item",
return {
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: ajlyPieList.value,
},
],
};
data: ajlyPieList.value,
},
],
};
});
echarts.registerMap("changsha", changshaMap);
const option = {
geo: {
// registerMap''
map: "changsha",
geo: {
// registerMap''
map: "changsha",
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{gte: 85, lte: 100, label: "问题数低于500"},
{gte: 65, lte: 85, label: "问题数低于1000"},
{gte: 0, lte: 65, label: "问题数低于1000"},
],
right: 10, //
realtime: false,
orient: "horizontal", //
textStyle: {
color: "#fff", //
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{ gte: 85, lte: 100, label: "问题数低于500" },
{ gte: 65, lte: 85, label: "问题数低于1000" },
{ gte: 0, lte: 65, label: "问题数低于1000" },
],
right: 10, //
realtime: false,
orient: "horizontal", //
textStyle: {
color: "#fff", //
},
calculable: true,
inRange: {
color: ["#D34343", "#F6A149", "#4987F6"],
},
calculable: true,
inRange: {
color: ["#D34343", "#F6A149", "#4987F6"],
},
series: [
{
name: "长沙",
type: "map",
map: "changsha",
hoverAnimation: true,
},
series: [
{
name: "长沙",
type: "map",
map: "changsha",
hoverAnimation: true,
label: {
show: true,
color: "white",
},
itemStyle: {
areaColor: "#02215E", //
},
},
],
label: {
show: true,
color: "white",
},
itemStyle: {
areaColor: "#02215E", //
},
},
],
};
const option1 = ref({
xAxis: {
type: "category",
boundaryGap: false,
data: [
"9/10",
"9/11",
"9/12",
"9/13",
"9/14",
"9/15",
"9/16",
"9/17",
"9/18",
"9/19",
"9/20",
"9/21",
"9/22",
"9/23",
],
xAxis: {
type: "category",
boundaryGap: false,
data: [
"9/10",
"9/11",
"9/12",
"9/13",
"9/14",
"9/15",
"9/16",
"9/17",
"9/18",
"9/19",
"9/20",
"9/21",
"9/22",
"9/23",
],
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
},
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false,
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [
2000, 1160, 2310, 3000, 3100, 3100, 3100, 2000, 1160, 2310,
3000, 3100, 3100, 3100,
],
},
series: [
{
type: "line",
smooth: true,
label: {
show: false,
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [
2000, 1160, 2310, 3000, 3100, 3100, 3100, 2000, 1160, 2310,
3000, 3100, 3100, 3100,
],
},
],
],
});
const option4 = {
tooltip: {
trigger: "item",
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: [
{value: 311, name: "其他"},
{value: 735, name: "违反公安部“九个一律”"},
{value: 580, name: "违反保密工作纪律"},
{value: 484, name: "涉嫌泄露国家、警务秘密"},
{value: 300, name: "违反“三个规定”"},
{value: 300, name: "违反生活纪律"},
{value: 11, name: "涉嫌违纪违法"},
],
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: [
{ value: 311, name: "其他" },
{ value: 735, name: "违反公安部“九个一律”" },
{ value: 580, name: "违反保密工作纪律" },
{ value: 484, name: "涉嫌泄露国家、警务秘密" },
{ value: 300, name: "违反“三个规定”" },
{ value: 300, name: "违反生活纪律" },
{ value: 11, name: "涉嫌违纪违法" },
],
},
],
],
};
const colors = [
{
color: "linear-gradient( 270deg, #FB002D 0%, #822232 100%)",
percentage: 80,
},
{
color: "linear-gradient( 270deg, #FFB90E 0%, #71501D 100%)",
percentage: 60,
},
{
color: "linear-gradient( 270deg, #63E700 0%, #19674C 100%)",
percentage: 40,
},
{
color: "linear-gradient( 270deg, #FB002D 0%, #822232 100%)",
percentage: 80,
},
{
color: "linear-gradient( 270deg, #FFB90E 0%, #71501D 100%)",
percentage: 60,
},
{
color: "linear-gradient( 270deg, #63E700 0%, #19674C 100%)",
percentage: 40,
},
];
</script>

273
src/views/datav/MailVisits.vue

@ -117,6 +117,11 @@
:option="option2"
autoresize
/>
<div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">
<div class="tab-title-item active">
暂无数据
</div>
</div>
</datav-card>
</el-col>
@ -130,6 +135,11 @@
title="信访总件数"
style="width: 20%"
/>
<datav-statistic
:value="overview.commissionerMail"
title="局长信箱"
style="width: 20%"
/>
<datav-statistic
:value="overview.countryMail"
title="国家信访"
@ -140,11 +150,7 @@
title="公安部信访"
style="width: 20%"
/>
<datav-statistic
:value="overview.commissionerMail"
title="局长信箱"
style="width: 20%"
/>
<datav-statistic
:value="overview.numMail"
title="12337信访"
@ -162,28 +168,28 @@
<datav-tabs v-model="activeMailTrend" @change="handleTabChange">
<datav-tab-item label="国家信访" name="1">
<v-charts
style="height: 300px"
style="width: 105%; height: 300px;"
:option="option1"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="公安部信访" name="2">
<v-charts
style="height: 300px"
style="width: 105%; height: 300px; "
:option="option1"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="局长信箱" name="3">
<v-charts
style="height: 300px"
style="width: 105%; height: 300px; "
:option="option1"
autoresize
/>
</datav-tab-item>
<datav-tab-item label="12337信访" name="4">
<v-charts
style="height: 300px"
style="width: 105%; height: 300px; "
:option="option1"
autoresize
/>
@ -247,29 +253,30 @@
>
<datav-tab-item label="领导督办" name="1">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
size="large"
/>
<datav-chart-bar-mail
:data="xx"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="缠访闹访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="群体集访" name="3">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
@ -281,29 +288,29 @@
>
<datav-tab-item label="领导督办" name="1">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
size="large"
/>
</el-scrollbar>
<datav-chart-bar-mail
:data="xx"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="缠访闹访" name="2">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
<datav-tab-item label="群体集访" name="3">
<el-scrollbar height="300px">
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
<datav-chart-bar-mail
:data="xx"
:max="11"
size="large"
/>
</el-scrollbar>
</datav-tab-item>
</datav-tabs>
@ -317,6 +324,11 @@
:option="option3"
autoresize
/>
<div class="flex tab-title flex center mt-20" style="margin-bottom: 20px">
<div class="tab-title-item active">
暂无数据
</div>
</div>
</datav-card>
</el-col>
</el-row>
@ -331,16 +343,74 @@
import vCharts from "vue-echarts";
import changshaMap from "@/assets/data/changsha.json";
import * as echarts from "echarts/core";
import {getMailVisitsData, getRecentlyMailTrend} from "@/api/datav";
import {getMailVisitsData, getRecentlyMailTrend, getRecentlyMailTrend12337} from "@/api/datav";
import moment from "moment/moment.js";
/**
* 地图渲染
*/
const getMapDataList = async () => {
try {
mapDataList = await mapCountyData(currentParams);
changsMap();
} catch (error) {}
};
echarts.registerMap("changsha", changshaMap);
let mapDataList = reactive([
{name: '长沙县', value: 500},
{name: '浏阳市', value: 400},
{name: '开福区', value: 300},
{name: '浏阳市', value: 400},
{name: '望城区', value: 400},
{name: '芙蓉区', value: 400},
{name: '天心区', value: 400},
{name: '雨花区', value: 400},
{name: '岳麓区', value: 400},
{name: '宁乡市', value: 400},
]);
const option = {
geo: {
// registerMap''
map: "changsha",
itemStyle: {
normal: {
areaColor: "#02215E", //
},
},
},
tooltip: {
show: true,
trigger: "item",
position: "right",
formatter: function (params) {
if (typeof params.data === "undefined") {
console.log(params);
} else {
console.log(params);
return `<div class="tooltip">
<div class="tooltip-title">${params.name}</div>
<div class="tooltip-content">
<ul class="tooltip-ul">
<li>信访总件数 <span>${params.data.todaysum}</span></li>
<li>国家信访 <span>${params.data.allsum}</span>
</li>
<li>公安部信访 <span>${params.data.completed}</span>
</li>
<li>局长信箱 <span>${params.data.completedrate}</span></li>
<li>12337信访 <span>${params.data.resolvedrate}</span></li>
</ul>
</div>
</div>`;
}
},
backgroundColor: "#031577", //
borderColor: "#0A2F86",
borderWidth: 0, // 1
borderRadius: 3, // 3
shadowBlur: 0, // 8
shadowOffsetX: 0, // 0
shadowOffsetY: 0, // 6
},
visualMap: {
type: "piecewise",
bottom: 10,
@ -366,18 +436,15 @@ const option = {
type: "map",
map: "changsha",
hoverAnimation: true,
label: {
show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E", //
},
},
data: mapDataList,
},
],
};
const option1 = ref({
xAxis: {
@ -512,24 +579,71 @@ const time = ref([
* @type {Ref<UnwrapRef<string>, UnwrapRef<string> | string>}
*/
const selectedOption = ref('2024');
const shihao = ref(1);
const handleCommand = async (command) => {
selectedOption.value = `${command}`;
const recentlyMailTrend = await getRecentlyMailTrend({
sourcesCode: activeMailTab.value,
year: command,
startTime: time.value[0],
endTime: time.value[1]
}); // 访
// xAxis series
option1.value.xAxis.data = recentlyMailTrend.monthList;
option1.value.series[0].data = recentlyMailTrend.totalList;
if (activeMailTrend.value === "1" || activeMailTrend.value === "2") {
const recentlyMailTrend = await getRecentlyMailTrend({
sourcesCode: activeMailTab.value,
year: command,
startTime: time.value[0],
endTime: time.value[1]
}); // 访
// xAxis series
option1.value.xAxis.data = recentlyMailTrend.monthList;
option1.value.series[0].data = recentlyMailTrend.totalList;
}
if (activeMailTrend.value === "3") {
}
if (activeMailTrend.value === "4") {
const recentlyMailTrend = await getRecentlyMailTrend12337({
year: selectedOption.value,
startTime: time.value[0],
endTime: time.value[1]
})
option1.value.xAxis.data = recentlyMailTrend.monthList;
option1.value.series[0].data = recentlyMailTrend.totalList;
}
};
// 访tab
watch(activeMailTrend, async () => {
if (activeMailTrend.value <= 2) {
const recentlyMailTrend = await getRecentlyMailTrend({
sourcesCode: activeMailTrend.value,
year: selectedOption.value,
startTime: time.value[0],
endTime: time.value[1]
});
option1.value.xAxis.data = recentlyMailTrend.monthList;
option1.value.series[0].data = recentlyMailTrend.totalList;
}
if (activeMailTrend.value === "3") {
option1.value.xAxis.data = null;
option1.value.series[0].data = null;
}
if (activeMailTrend.value === "4") {
const recentlyMailTrend = await getRecentlyMailTrend12337({
year: selectedOption.value,
startTime: time.value[0],
endTime: time.value[1]
})
option1.value.xAxis.data = recentlyMailTrend.monthList;
option1.value.series[0].data = recentlyMailTrend.totalList;
}
})
/**
* 初始化
*/
let timer;
const currentYear = new Date().getFullYear();
function initRecentlyMailTrend() {
getRecentlyMailTrend({
sourcesCode: "1",
year: "2024",
year: currentYear,
startTime: time.value[0],
endTime: time.value[1]
}).then((data) => {
@ -539,22 +653,6 @@ function initRecentlyMailTrend() {
});
}
watch(activeMailTrend, async () => {
const recentlyMailTrend = await getRecentlyMailTrend({
sourcesCode: activeMailTrend.value,
year: selectedOption.value,
startTime: time.value[0],
endTime: time.value[1]
});
option1.value.xAxis.data = recentlyMailTrend.monthList;
option1.value.series[0].data = recentlyMailTrend.totalList;
})
/**
* 初始化
*/
let timer;
watch(time, () => {
getData();
// initRecentlyMailTrend()
@ -586,6 +684,12 @@ function getData() {
</script>
<style lang="scss" scoped>
@import "@/style/datav.scss";
@ -595,16 +699,13 @@ function getData() {
top: 65px;
}
.main {
padding: 0 10px 10px;
.datav-tab-item {
display: flex;
justify-content: center;
align-items: center;
}
.main-left,
.main-right {
float: left;
width: 25%;
padding: 0 10px;
height: 90%;
}
</style>

6
src/views/datav/RightsComfort.vue

@ -373,6 +373,9 @@ const option3 = computed(() => {
data: punishmentSituationList.value,
},
],
tooltip: {
trigger: "item",
},
};
});
@ -388,6 +391,9 @@ const option4 = computed(() => {
data: comfortSituationList.value,
},
],
tooltip: {
trigger: "item",
},
};
});

855
src/views/datav/SceneInsp.vue

@ -1,218 +1,220 @@
<template>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header />
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="执勤值守情况">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
56
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
0
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
56
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
100%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<datav-chart-bar
title="整改率排名"
sub-title="完成数/问题数"
:data="data1"
/>
<div class="flex tab-title flex center mt-16">
<div class="tab-title-item active">
分县市局
</div>
<div class="tab-title-item">局属单位</div>
</div>
</datav-card>
<datav-card title="问题类型占比">
<v-charts
style="height: 300px"
:option="option2"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="12">
<div class="datav-col">
<label for="">统计周期</label>
<span>2024年01月01日 - 2024年08月30日</span>
</div>
<div class="flex gap-42">
<datav-statistic
:value="194"
title="通报问题数"
style="width: 16.66%"
/>
<datav-statistic
:value="2"
title="整改中"
style="width: 16.66%"
/>
<datav-statistic
:value="192"
title="已整改"
style="width: 16.66%"
/>
<datav-statistic
:value="73"
title="涉及单位数"
style="width: 16.66%"
/>
<datav-statistic
:value="214"
title="涉及人数"
style="width: 16.66%"
/>
<datav-statistic
:value="99"
value-unit="%"
title="整改率"
style="width: 16.66%"
/>
</div>
<v-charts
style="height: 450px"
:option="option"
autoresize
/>
<datav-card title="问题趋势">
<v-charts
style="height: 280px"
:option="option1"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="6">
<datav-card title="枪支管理">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
42
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
2
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
40
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
95%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<datav-chart-bar
title="问题数排名"
sub-title="问题数"
:data="data2"
:max="9700"
/>
<div class="flex tab-title flex center mt-16">
<div class="tab-title-item active">
分县市局
</div>
<div class="tab-title-item">局属单位</div>
</div>
</datav-card>
<datav-card title="督察工作动态">
<el-scrollbar height="400px">
<div class="message">
<div class="message-title">工作部署</div>
<div class="message-content">关于报送2024年第二季度贯彻落实防止干预司法三个规定进展情况的通知</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
<div class="message" type="warning">
<div class="message-title" >督察通报</div>
<div class="message-content">自20******日起****同志担任****单位****职务期间的经济责任履行情况进行审计必要时将追溯至相关年度或延伸审计有关单位</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
<div class="message" type="success">
<div class="message-title" >工作简报</div>
<div class="message-content">关于报送2024年第二季度贯彻落实防止干预司法三个规定进展情况的通知</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
<div class="message">
<div class="message-title">工作部署</div>
<div class="message-content">关于报送2024年第二季度贯彻落实防止干预司法三个规定进展情况的通知</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
</el-scrollbar>
</datav-card>
</el-col>
</el-row>
</main>
</div>
</el-scrollbar>
<el-scrollbar height="100vh">
<div class="wrapper">
<datav-header/>
<main>
<el-row :gutter="16">
<el-col :span="6">
<datav-card title="执勤值守情况">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
56
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
0
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
56
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
100%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<datav-chart-bar
title="整改率排名"
sub-title="完成数/问题数"
:data="data1"
/>
<div class="flex tab-title flex center mt-16">
<div class="tab-title-item active">
分县市局
</div>
<div class="tab-title-item">局属单位</div>
</div>
</datav-card>
<datav-card title="问题类型占比">
<v-charts
style="height: 300px"
:option="option2"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="12">
<div class="datav-col">
<label for="">统计周期</label>
<span>2024年01月01日 - 2024年08月30日</span>
</div>
<div class="flex gap-42">
<datav-statistic
:value="194"
title="通报问题数"
style="width: 16.66%"
/>
<datav-statistic
:value="2"
title="整改中"
style="width: 16.66%"
/>
<datav-statistic
:value="192"
title="已整改"
style="width: 16.66%"
/>
<datav-statistic
:value="73"
title="涉及单位数"
style="width: 16.66%"
/>
<datav-statistic
:value="214"
title="涉及人数"
style="width: 16.66%"
/>
<datav-statistic
:value="99"
value-unit="%"
title="整改率"
style="width: 16.66%"
/>
</div>
<v-charts
style="height: 450px"
:option="option"
autoresize
/>
<datav-card title="问题趋势">
<v-charts
style="height: 280px"
:option="option1"
autoresize
/>
</datav-card>
</el-col>
<el-col :span="6">
<datav-card title="枪支管理">
<el-row class="mb-32">
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
42
</div>
<div class="descriptions_label">
问题数
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
2
</div>
<div class="descriptions_label">
整改中
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
40
</div>
<div class="descriptions_label">
已整改
</div>
</div>
</el-col>
<el-col :span="6">
<div class="descriptions_cell text-center">
<div class="descriptions_content">
95%
</div>
<div class="descriptions_label">
整改率
</div>
</div>
</el-col>
</el-row>
<datav-chart-bar
title="问题数排名"
sub-title="问题数"
:data="data2"
:max="9700"
/>
<div class="flex tab-title flex center mt-16">
<div class="tab-title-item active">
分县市局
</div>
<div class="tab-title-item">局属单位</div>
</div>
</datav-card>
<datav-card title="督察工作动态">
<el-scrollbar height="400px">
<div class="message">
<div class="message-title">工作部署</div>
<div class="message-content">关于报送2024年第二季度贯彻落实防止干预司法三个规定进展情况的通知</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
<div class="message" type="warning">
<div class="message-title">督察通报</div>
<div class="message-content">
自20******日起****同志担任****单位****职务期间的经济责任履行情况进行审计必要时将追溯至相关年度或延伸审计有关单位
</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
<div class="message" type="success">
<div class="message-title">工作简报</div>
<div class="message-content">关于报送2024年第二季度贯彻落实防止干预司法三个规定进展情况的通知</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
<div class="message">
<div class="message-title">工作部署</div>
<div class="message-content">关于报送2024年第二季度贯彻落实防止干预司法三个规定进展情况的通知</div>
<div class="message-footer flex end">
<span>2024-09-18 18:00:13</span>
</div>
</div>
</el-scrollbar>
</datav-card>
</el-col>
</el-row>
</main>
</div>
</el-scrollbar>
</template>
<script setup>
import vCharts from "vue-echarts";
@ -221,232 +223,249 @@ import * as echarts from "echarts/core";
echarts.registerMap("changsha", changshaMap);
const option = {
geo: {
// registerMap''
map: "changsha",
},
geo: {
// registerMap''
map: "changsha",
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{ gte: 85, lte: 100, label: "问题数低于500" },
{ gte: 65, lte: 85, label: "问题数低于1000" },
{ gte: 0, lte: 65, label: "问题数低于1000" },
],
right: 10, //
realtime: false,
orient: "horizontal", //
textStyle: {
color: "#fff", //
},
calculable: true,
inRange: {
color: ["#D34343", "#F6A149", "#4987F6"],
},
visualMap: {
type: "piecewise",
bottom: 10,
pieces: [
{gte: 85, lte: 100, label: "问题数低于500"},
{gte: 65, lte: 85, label: "问题数低于1000"},
{gte: 0, lte: 65, label: "问题数低于1000"},
],
right: 10, //
realtime: false,
orient: "horizontal", //
textStyle: {
color: "#fff", //
},
series: [
{
name: "长沙",
type: "map",
map: "changsha",
hoverAnimation: true,
calculable: true,
inRange: {
color: ["#D34343", "#F6A149", "#4987F6"],
},
},
series: [
{
name: "长沙",
type: "map",
map: "changsha",
hoverAnimation: true,
label: {
show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E", //
},
},
label: {
show: true,
color: "white",
},
itemStyle: {
normal: {
areaColor: "#02215E", //
},
],
},
},
],
};
const option1 = ref({
xAxis: {
type: "category",
boundaryGap: false,
data: [
"9/10",
"9/11",
"9/12",
"9/13",
"9/14",
"9/15",
"9/16",
"9/17",
"9/18",
"9/19",
"9/20",
"9/21",
"9/22",
"9/23",
],
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [
2000, 1160, 2310, 3000, 3100, 3100, 3100, 2000, 1160, 2310,
3000, 3100, 3100, 3100,
],
},
xAxis: {
type: "category",
boundaryGap: false,
data: [
"9/10",
"9/11",
"9/12",
"9/13",
"9/14",
"9/15",
"9/16",
"9/17",
"9/18",
"9/19",
"9/20",
"9/21",
"9/22",
"9/23",
],
},
yAxis: {
type: "value",
splitLine: {
show: true,
lineStyle: {
color: "#193775",
},
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
}
},
series: [
{
type: "line",
smooth: true,
label: {
show: false
},
lineStyle: {
color: "#28E6FF",
width: 4,
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(40,230,255,0.47)", //
},
{
offset: 1,
color: "rgba(40,230,255,0)", //
},
]),
},
data: [
2000, 1160, 2310, 3000, 3100, 3100, 3100, 2000, 1160, 2310,
3000, 3100, 3100, 3100,
],
},
],
});
const data1 = [
{
name: "开福分局",
value: 100,
unit: "%",
numerator: 16,
denominator: 16,
},
{
name: "芙蓉分局",
value: 100,
unit: "%",
numerator: 11,
denominator: 11,
},
{
name: "岳麓分局",
value: 100,
unit: "%",
numerator: 10,
denominator: 10,
},
{
name: "雨花分局",
value: 100,
unit: "%",
numerator: 9,
denominator: 9,
},
{
name: "望城分局",
value: 100,
unit: "%",
numerator: 4,
denominator: 4,
},
{
name: "浏阳市局",
value: 100,
unit: "%",
numerator: 3,
denominator: 3,
},
{
name: "长沙县局",
value: 100,
unit: "%",
numerator: 3,
denominator: 3,
},
{
name: "开福分局",
value: 100,
unit: "%",
numerator: 16,
denominator: 16,
},
{
name: "芙蓉分局",
value: 100,
unit: "%",
numerator: 11,
denominator: 11,
},
{
name: "岳麓分局",
value: 100,
unit: "%",
numerator: 10,
denominator: 10,
},
{
name: "雨花分局",
value: 100,
unit: "%",
numerator: 9,
denominator: 9,
},
{
name: "望城分局",
value: 100,
unit: "%",
numerator: 4,
denominator: 4,
},
{
name: "浏阳市局",
value: 100,
unit: "%",
numerator: 3,
denominator: 3,
},
{
name: "长沙县局",
value: 100,
unit: "%",
numerator: 3,
denominator: 3,
},
];
const data2 = [
{
name: "开福分局",
value: 9700
},
{
name: "芙蓉分局",
value: 9021
},
{
name: "岳麓分局",
value: 8512
},
{
name: "雨花分局",
value: 8021
},
{
name: "望城分局",
value: 7111
},
{
name: "浏阳市局",
value: 6622
},
{
name: "长沙县局",
value: 6221
},
{
name: "开福分局",
value: 9700
},
{
name: "芙蓉分局",
value: 9021
},
{
name: "岳麓分局",
value: 8512
},
{
name: "雨花分局",
value: 8021
},
{
name: "望城分局",
value: 7111
},
{
name: "浏阳市局",
value: 6622
},
{
name: "长沙县局",
value: 6221
},
];
const option2 = {
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: [
{ value: 18.6, name: "执法办案" },
{ value: 15.5, name: "训练执勤" },
{ value: 1.9, name: "纪律作风" },
{ value: 2.5, name: "专项工作" },
{ value: 30, name: "整改核查" },
{ value: 31, name: "其他类型" },
],
},
],
tooltip: {
trigger: "item",
},
series: [
{
type: "pie",
radius: ["40%", "70%"],
label: {
color: "#fff",
},
data: [
{value: 18.6, name: "执法办案"},
{value: 15.5, name: "训练执勤"},
{value: 1.9, name: "纪律作风"},
{value: 2.5, name: "专项工作"},
{value: 30, name: "整改核查"},
{value: 31, name: "其他类型"},
],
},
],
};
</script>
<style lang="scss" scoped>
@import "@/style/datav.scss";
.message {
padding: 10px;
padding: 10px;
margin-bottom: 10px;
background: linear-gradient(270deg, rgba(16, 151, 255, 0.1) 0%, rgba(0, 55, 236, 0.87) 100%);
&[type=warning] {
background: linear-gradient(270deg, rgba(255, 190, 16, 0.1) 0%, rgba(236, 84, 0, 0.87) 100%);
}
&[type=success] {
background: linear-gradient(270deg, rgba(91, 216, 9, 0.14) 0%, #28813D 100%);
}
.message-title {
font-size: 14px;
margin-bottom: 10px;
background: linear-gradient( 270deg, rgba(16,151,255,0.1) 0%, rgba(0,55,236,0.87) 100%);
&[type=warning] {
background: linear-gradient( 270deg, rgba(255,190,16,0.1) 0%, rgba(236,84,0,0.87) 100%);
}
&[type=success] {
background: linear-gradient( 270deg, rgba(91,216,9,0.14) 0%, #28813D 100%);
}
.message-title {
font-size: 14px;
margin-bottom: 10px;
}
.message-content {
margin-bottom: 10px;
}
}
.message-content {
margin-bottom: 10px;
}
}
</style>
Loading…
Cancel
Save