Files
lz_web_qwgl/src/views/backOfficeSystem/qwManagement/dwqw/index.vue

417 lines
11 KiB
Vue
Raw Normal View History

2025-06-08 22:23:25 +08:00
<template>
<div class="main-box">
<div class="treeBox">
<MOSTY.DepartmentTree width="300px" placeholder="管理部门ID" @changeSsbm='changeSsbm' clearable filterable :isBmId="true" v-model="listQuery.ssbmdm" />
</div>
<div class="tableCnt">
<div class="titleBox">
<div class="title">已选机构{{ssbmmc}}</div>
<div class="flex align-center">
<div class="flex align-center" style="margin-right:10px">
<div>是否包含:</div>
<el-select style="flex:1" v-model="listQuery.isChild" placeholder="请选择是否包含">
<el-option v-for="item in D_BZ_SF" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="flex align-center">
<div>查询时间:</div>
<div class="time_box">
<div class="item_time" :class="activeIndex==index?'active_timebg':''" @click="changeTime(item,index)" v-for="(item,index) in timeArr" :key="item">{{item}}</div>
</div>
<el-date-picker v-if="listQuery.dateType=='04'" value-format="YYYY-MM-DD" @change='zdyChangeTime' v-model="zdyTime" type="daterange" range-separator="To" start-placeholder="开始时间" end-placeholder="结束时间" />
</div>
<el-button type='primary' @click="searchFn">搜索</el-button>
</div>
</div>
<div class="echartsBox">
<!-- 第一模块 -->
<ul class="itemBox">
<li class="item" v-for="item in date.oneList" :key="item.label">
<div class="ItemTitle">{{item.label}}</div>
<div class="echartsCnt">
<BatteryEharts v-if="item.value.length>0" :data='item.value' />
</div>
</li>
</ul>
<!-- 第2模块 -->
<ul class="itemBoxSmall">
<li class="item" v-for="item in date.twoList" :key="item.label">
<div class="ItemTitle">{{item.label}}</div>
<ul class="itemCnt">
<li class="itemCntChild" v-for="(it,idx) in item.list" :key="idx">
<span class="icon"><img :src="it.icon" alt="" :style="{width:idx==2?'26px':'30px'}"></span>
<span class="title">{{it.title}} :</span>
<span class="num">{{it.num}} {{it.dw}}</span>
</li>
</ul>
</li>
</ul>
<div class="itemBoxBottom">
<Tablelist :headerShow='false'
:dic="{D_QW_BBZT, D_BZ_PDDTLX, D_BZ_RYMFJLB, D_BZ_RYJZLB, D_QW_BC_KTS, D_BZ_RYZBBBZW, D_QW_BBZL, D_BZ_SF, D_QW_XQLB, D_QW_XQLX, D_JCGL_ZDSB_SBLB, D_JCGL_ZDSB_SBLX, D_JCGL_JYCL_JYJTGJLB, D_JCGL_JYCL_JYJTFWLB, D_BZ_RYXFBBZW, D_BZ_XLFS, D_BZ_WZLX, D_BZ_ZZLX, D_JCGL_JYQX_QXLX}" />
</div>
</div>
</div>
</div>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import BatteryEharts from "@/views/backOfficeSystem/qwManagement/qwts/components/batteryEharts.vue";
import BarEcharts from "@/views/backOfficeSystem/qwManagement/qwts/components/barEcharts.vue";
import { timeValidate } from "@/utils/tools.js";
import { serviceGet, servicePost } from "@/api/serviceApi.js";
import LineEcharts from "@/views/backOfficeSystem/qwManagement/qwts/components/lineEcharts.vue";
import Tablelist from "@/views/backOfficeSystem/qwManagement/qwgl/tablelist.vue";
import { ElMessage } from "element-plus";
import {
ref,
reactive,
computed,
watch,
onMounted,
getCurrentInstance,
onUnmounted
} from "vue";
const { proxy } = getCurrentInstance();
const {
D_QW_BBZT,
D_BZ_PDDTLX,
D_BZ_RYMFJLB,
D_BZ_RYJZLB,
D_QW_BC_KTS,
D_BZ_RYZBBBZW,
D_QW_BBZL,
D_BZ_SF,
D_QW_XQLB,
D_QW_XQLX,
D_JCGL_ZDSB_SBLB,
D_JCGL_ZDSB_SBLX,
D_JCGL_JYCL_JYJTGJLB,
D_JCGL_JYCL_JYJTFWLB,
D_BZ_RYXFBBZW,
D_BZ_XLFS,
D_BZ_WZLX,
D_BZ_ZZLX,
D_JCGL_JYQX_QXLX
} = proxy.$dict(
"D_QW_BBZT",
"D_BZ_PDDTLX",
"D_BZ_RYMFJLB",
"D_BZ_RYJZLB",
"D_QW_BC_KTS",
"D_BZ_RYZBBBZW",
"D_QW_BBZL",
"D_BZ_SF",
"D_QW_XQLB",
"D_QW_XQLX",
"D_JCGL_ZDSB_SBLB",
"D_JCGL_ZDSB_SBLX",
"D_JCGL_JYCL_JYJTGJLB",
"D_JCGL_JYCL_JYJTFWLB",
"D_BZ_RYXFBBZW",
"D_BZ_XLFS",
"D_BZ_WZLX",
"D_BZ_ZZLX",
"D_JCGL_JYQX_QXLX"
);
const deptId = JSON.parse(localStorage.getItem("deptId"));
const activeIndex = ref();
const listQuery = ref({
// tjrq: "2024-08-13", //单日统计
tjrq: timeValidate(new Date(), "ymd"), //单日统计
dateType: "03",
ssbmdm: deptId[0].deptCode
});
const zdyTime = ref([]);
const timeArr = ref(["当日", "当周", "当月", "自定义"]);
const ssbmmc = ref(deptId[0].deptName);
const date = reactive({
oneList: [
{ label: "街面警力", value: [] },
{ label: "可抽调警力", value: [] },
{ label: "报备警力", value: [] },
{ label: "报备总量", value: [] }
],
twoList: [
{
label: "峰值00:00:00 ~ 235959",
list: [
{
icon: require("@/assets/images/mj.png"),
title: "在岗民警",
num: 110,
dw: "人"
},
{
icon: require("@/assets/images/fj.png"),
title: "在岗辅警",
num: 110,
dw: "人"
},
{
icon: require("@/assets/images/jc.png"),
title: "在岗警车",
num: 110,
dw: "辆"
}
]
},
{
label: "报备总量",
list: [
{
icon: require("@/assets/images/mj.png"),
title: "在岗民警",
num: 110,
dw: "人"
},
{
icon: require("@/assets/images/fj.png"),
title: "在岗辅警",
num: 110,
dw: "人"
},
{
icon: require("@/assets/images/jc.png"),
title: "在岗警车",
num: 110,
dw: "辆"
}
]
}
]
});
// 获取上面柱状图的数据
const handleJlData = () => {
serviceGet(
listQuery.value,
"/mosty-qwzx/tbQwglCount/selectDateJYBMFCCount"
).then((res) => {
date.oneList[0].value = [res.jmjlMjsl, res.jmjlFjsl, res.jmjlClsl];
date.oneList[1].value = [res.yjkcdjlMjsl, res.yjkcdjlFjsl, res.yjkcdjlClsl];
date.oneList[2].value = [res.bbjlMjsl, res.bbjlFjsl, res.bbjlClsl];
date.oneList[3].value = [res.bbzlMjsl, res.bbzlFjsl, res.bbzlClsl];
});
};
// 获取中间柱状图的数据
const handleFzData = () => {
serviceGet(
listQuery.value,
"/mosty-qwzx/tbQwglCount/selectDateMFCPartCount"
).then((res) => {
date.twoList[0].list[0].num = res.fzMjsl;
date.twoList[0].list[1].num = res.fzFjsl;
date.twoList[0].list[2].num = res.fzClsl;
date.twoList[1].list[0].num = res.gzMjsl;
date.twoList[1].list[1].num = res.gzFjsl;
date.twoList[1].list[2].num = res.gzClsl;
});
};
const changeTime = (item, index) => {
console.log(item, "item");
activeIndex.value = index;
switch (item) {
case "当日":
listQuery.value.dateType = "03";
break;
case "当周":
listQuery.value.dateType = "02";
break;
case "当月":
listQuery.value.dateType = "01";
break;
case "自定义":
listQuery.value.dateType = "04";
break;
}
};
// 自定义时间
const zdyChangeTime = (val) => {
listQuery.value.ksrq = val[0];
listQuery.value.jsrq = val[1];
};
const changeSfbhFn = (val) => {
handleJlData();
handleFzData();
};
const searchFn = () => {
// if (listQuery.value.ksrq && listQuery.value.jsrq) {
// listQuery.value.tjrq = "";
// }
handleJlData();
handleFzData();
};
const changeSsbm = (val) => {
ssbmmc.value = val.orgName;
listQuery.value.ssbmdm = val.orgCode;
handleJlData();
handleFzData();
};
onMounted(() => {
handleJlData();
handleFzData();
});
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
.main-box {
display: flex;
font-size: 16px;
.tableCnt {
flex: 1;
margin-left: 10px;
.echartsBox {
height: calc(100% - 50px);
display: flex;
flex-direction: column;
.itemBox {
flex: 1;
display: flex;
height: 100%;
margin: 2px 0;
}
.itemBoxSmall {
height: 110px;
display: flex;
margin: 2px 0;
border-bottom: 1px solid #ccc;
}
.itemBoxBottom {
height: 460px;
}
.ItemTitle {
display: flex;
justify-content: space-between;
align-items: center;
height: 30px;
background: #f4f4f4;
padding: 0 14px;
box-sizing: border-box;
.btn {
padding: 2px 6px;
color: #fff;
background: #01c2ff;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
}
}
.echartsCnt {
height: calc(100% - 30px);
padding: 10px;
box-sizing: border-box;
overflow: hidden;
li {
display: flex;
.head {
width: 50%;
background: #f0f0f0;
text-align: center;
padding: 4px 0;
box-sizing: border-box;
font-size: 16px;
line-height: 30px;
}
.num {
width: 50%;
line-height: 30px;
text-align: center;
padding: 4px 0;
box-sizing: border-box;
border: 1px solid #f0f0f0;
border-top: 0;
}
.num1 {
border-right: 0;
}
}
.numlabel {
width: 80px;
text-align: center;
font-size: 14px;
white-space: nowrap;
border: 1px solid #cac8c8;
background: #f0f0f0;
line-height: 38px;
border-top: 0;
}
.topNum {
border-top: 1px solid #cac8c8;
}
.numValue {
width: calc(100% - 80px);
line-height: 38px;
span {
border: 1px solid #cac8c8;
font-size: 14px;
display: inline-block;
width: calc(100% / 24);
text-align: center;
border-top: 0;
border-left: 0;
white-space: nowrap;
}
.topSpan {
border-top: 1px solid #cac8c8;
}
}
}
.itemCnt {
width: 100%;
display: flex;
flex-wrap: wrap;
overflow: hidden;
.itemCntChild {
width: 50%;
padding: 5px 20px;
box-sizing: border-box;
display: flex;
align-items: center;
overflow: hidden;
.icon {
display: inline-block;
text-align: center;
width: 30px;
}
.title {
color: #000;
font-size: 14px;
margin: 0 12px;
white-space: nowrap;
}
.num {
color: #142232;
font-size: 16px;
white-space: nowrap;
}
}
}
.item {
flex: 1;
height: 100%;
margin: 0 2px;
}
}
}
}
.time_box {
display: flex;
.item_time {
background: skyblue;
border-radius: 4px;
text-align: center;
font-size: 12px;
padding: 4px;
margin: 0 2px;
}
}
.active_timebg {
background: #39adc4 !important;
}
</style>