From abd285e6d013128aa57c9e30e851b2aa76d60ec5 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 10 Feb 2026 16:45:17 +0800
Subject: [PATCH] feat:独栋显示调整
---
src/views/home/components/rightContainer.vue | 2760 ++++++++++++++++++++++++++++++-----------------------------
1 files changed, 1,403 insertions(+), 1,357 deletions(-)
diff --git a/src/views/home/components/rightContainer.vue b/src/views/home/components/rightContainer.vue
index cda0565..e284ea9 100644
--- a/src/views/home/components/rightContainer.vue
+++ b/src/views/home/components/rightContainer.vue
@@ -1,146 +1,88 @@
<template>
- <div class="container" ref="Container">
- <div class="case-box" ref="caseBox">
- <div class="box">
- <div class="title" ref="alertBoxTitle">
- <div>值班信息(当日)</div>
- </div>
-
- <div class="table-box" v-show="!showMJL">
- <el-table
- size="small"
- :height="tableHeight"
- :data="schedulingList"
- style="width: 100%;"
- :header-cell-style="{ 'text-align': 'center' }"
- :cell-style="{ 'text-align': 'center', borderColor: '#324e75' }"
- :row-class-name="tableRowClassName"
- :empty-text="schedulingNoDataText"
- v-loading="schedulingLoading"
- element-loading-text="拼命加载中"
- element-loading-spinner="el-icon-loading"
- element-loading-background="rgba(0, 0, 0, 0.5)"
- >
- <el-table-column prop="dept" label="值班单位"></el-table-column>
- <el-table-column prop="person" label="姓名"></el-table-column>
- <el-table-column prop="contact" label="联系方式"></el-table-column>
- </el-table>
- <div class="pointList" v-if="schedulingList == []">
- <el-tooltip
- class="item"
- effect="dark"
- :content="item.dept"
- placement="top"
- v-for="(item, index) in schedulingDeptList"
- :key="index"
- >
- <div class="point" @click="getSchedlingList(item)"></div>
- </el-tooltip>
- </div>
- </div>
-
- <div class="duty-information-box" v-show="showMJL">
- <div>
- <div>
- <span>值班</span>
- </div>
- <div>
- <span>徐星逸,任圣日,娄永攀,蔡善龙,陈小强,刘开勇,梅祥,吕镇,付建冬</span>
- </div>
- </div>
- <div>
- <div>
- <span>副班、巡逻</span>
- </div>
- <div>
- <span>章正椿,夏文翔,叶江明,黄俊龙,苏茯林,王顺祥</span>
- </div>
- </div>
- </div>
- </div>
-
- <svg class="border-svg">
- <use
- stroke-width="2"
- xlink:href="#border-box-8-path-974b4d7cfafa444396861ca1d1173c8c"
- mask="url(#border-box-8-mask-974b4d7cfafa444396861ca1d1173c8c)"
- stroke="#4fd2dd"
- >
- <animate
- attributeName="stroke-dasharray"
- from="0, 1442"
- to="1442, 0"
- dur="8s"
- repeatCount="indefinite"
- />
- </use>
- </svg>
+ <div class="container" ref="Container">
+ <div class="case-box" ref="caseBox">
+ <div class="box">
+ <div class="title" ref="alertBoxTitle">
+ <div>值班信息(当日)</div>
</div>
- <div class="alert-box" ref="alertBox ">
- <div class="box">
- <div class="title">
- 警情统计
- <div class="timer">
- <el-date-picker
- :clearable="false"
- v-model="eventTime"
- type="daterange"
- align="right"
- unlink-panels
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- @change="caseTimeChange"
- :picker-options="pickerOptions"
- ></el-date-picker>
- </div>
- </div>
- <el-main
- v-loading="eventChangeEchartsLoading"
- element-loading-text="拼命加载中"
- element-loading-spinner="el-icon-loading"
- element-loading-background="rgba(0, 0, 0, 0.5)"
- >
- <div class="sub-tab">
- <div
- class="tab"
- :class="{ 'select-on-tab': caseInfoType == 0 }"
- @click="initEventChangeEcharts(0)"
- >
- <div class="tab-title-small">警情变化趋势</div>
- </div>
- <div
- class="tab"
- :class="{ 'select-on-tab': caseInfoType == 1 }"
- @click="initEventChangeEcharts(1)"
- >
- <div class="tab-title-small">警情排行</div>
- </div>
- </div>
- <div id="EventChangeEcharts" class="echarts-box"></div>
- </el-main>
+ <div class="duty-information-box" v-show="!showMJL">
+ <div v-for="item in schedulingList" :key="item.id">
+ <div>
+ <span>{{ item.type }}</span>
</div>
-
- <svg class="border-svg">
- <use
- stroke-width="2"
- xlink:href="#border-box-8-path-974b4d7cfafa444396861ca1d1173c8c"
- mask="url(#border-box-8-mask-974b4d7cfafa444396861ca1d1173c8c)"
- stroke="#4fd2dd"
- >
- <animate
- attributeName="stroke-dasharray"
- from="0, 1442"
- to="1442, 0"
- dur="8s"
- repeatCount="indefinite"
- />
- </use>
- </svg>
+ <div>
+ <span>{{ item.person }}</span>
+ </div>
+ </div>
+ <div v-if="schedulingList.length == 0" class="no-zb-data">暂无值班数据</div>
</div>
- <!-- <div class="alert-box" ref="alertBox">
+ <div class="duty-information-box" v-show="showMJL">
+ <div>
+ <div>
+ <span>值班</span>
+ </div>
+ <div>
+ <span>徐星逸,任圣日,娄永攀,蔡善龙,陈小强,刘开勇,梅祥,吕镇,付建冬</span>
+ </div>
+ </div>
+ <div>
+ <div>
+ <span>副班、巡逻</span>
+ </div>
+ <div>
+ <span>章正椿,夏文翔,叶江明,黄俊龙,苏茯林,王顺祥</span>
+ </div>
+ </div>
+ <div v-if="schedulingList.length == 0" class="no-zb-data">暂无值班数据</div>
+ </div>
+ </div>
+
+ <svg class="border-svg">
+ <use stroke-width="2" xlink:href="#border-box-8-path-974b4d7cfafa444396861ca1d1173c8c"
+ mask="url(#border-box-8-mask-974b4d7cfafa444396861ca1d1173c8c)" stroke="#4fd2dd">
+ <animate attributeName="stroke-dasharray" from="0, 1442" to="1442, 0" dur="8s" repeatCount="indefinite" />
+ </use>
+ </svg>
+ </div>
+
+ <div class="alert-box" ref="alertBox ">
+ <div class="box">
+ <div class="title">
+ 警情统计
+ <div class="timer">
+ <el-date-picker :clearable="false" v-model="eventTime" type="daterange" align="right" unlink-panels
+ range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="caseTimeChange"
+ :picker-options="pickerOptions"></el-date-picker>
+ </div>
+ </div>
+ <el-main v-loading="eventChangeEchartsLoading" element-loading-text="拼命加载中"
+ element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.5)">
+ <div class="sub-tab">
+ <div class="tab" :class="{ 'select-on-tab': caseInfoType == 0 }" @click="initEventChangeEcharts(0)">
+ <div class="tab-title-small">警情变化趋势</div>
+ </div>
+ <div class="tab" :class="{ 'select-on-tab': caseInfoType == 1 }" @click="initEventChangeEcharts(1)">
+ <div class="tab-title-small">社区警情排行</div>
+ </div>
+ <div class="tab" :class="{ 'select-on-tab': caseInfoType == 2 }" @click="initEventChangeEcharts(2)">
+ <div class="tab-title-small">辖区警情排行</div>
+ </div>
+ </div>
+ <div id="EventChangeEcharts" class="echarts-box"></div>
+ </el-main>
+ </div>
+
+ <svg class="border-svg">
+ <use stroke-width="2" xlink:href="#border-box-8-path-974b4d7cfafa444396861ca1d1173c8c"
+ mask="url(#border-box-8-mask-974b4d7cfafa444396861ca1d1173c8c)" stroke="#4fd2dd">
+ <animate attributeName="stroke-dasharray" from="0, 1442" to="1442, 0" dur="8s" repeatCount="indefinite" />
+ </use>
+ </svg>
+ </div>
+
+ <!-- <div class="alert-box" ref="alertBox">
<div class="title" ref="alertBoxTitle">
<div>电子沙盘</div>
<div class="title-tab">
@@ -168,67 +110,45 @@
</div>
</div>-->
- <div class="crowd-box" ref="crowdBox">
- <div class="box">
- <div class="title">现有设备</div>
- <el-main
- v-loading="equipmentEchartsLoading"
- element-loading-text="拼命加载中"
- element-loading-spinner="el-icon-loading"
- element-loading-background="rgba(0, 0, 0, 0.5)"
- >
- <div class="sub-tab">
- <div
- class="tab"
- :class="{ 'select-on-tab': linetype == 0 }"
- @click="initEquipmentEcharts(0)"
- >
- <div class="tab-title-small">设备种类</div>
- </div>
- <div
- class="tab"
- :class="{ 'select-on-tab': linetype == 1 }"
- @click="initEquipmentEcharts(1)"
- >
- <div class="tab-title-small">设备状态</div>
- </div>
- </div>
- <div style="overflow: hidden" id="EquipmentEcharts" class="echarts-box"></div>
- </el-main>
+ <div class="crowd-box" ref="crowdBox">
+ <div class="box">
+ <div class="title">现有设备</div>
+ <el-main v-loading="equipmentEchartsLoading" element-loading-text="拼命加载中"
+ element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.5)">
+ <div class="sub-tab">
+ <div class="tab" :class="{ 'select-on-tab': linetype == 0 }" @click="initEquipmentEcharts(0)">
+ <div class="tab-title-small">设备种类</div>
</div>
+ <div class="tab" :class="{ 'select-on-tab': linetype == 1 }" @click="initEquipmentEcharts(1)">
+ <div class="tab-title-small">设备状态</div>
+ </div>
+ </div>
+ <div style="overflow: hidden" id="EquipmentEcharts" class="echarts-box"></div>
+ </el-main>
+ </div>
- <svg class="border-svg">
- <use
- stroke-width="2"
- xlink:href="#border-box-8-path-974b4d7cfafa444396861ca1d1173c8c"
- mask="url(#border-box-8-mask-974b4d7cfafa444396861ca1d1173c8c)"
- stroke="#4fd2dd"
- >
- <animate
- attributeName="stroke-dasharray"
- from="0, 1442"
- to="1442, 0"
- dur="8s"
- repeatCount="indefinite"
- />
- </use>
- </svg>
- </div>
+ <svg class="border-svg">
+ <use stroke-width="2" xlink:href="#border-box-8-path-974b4d7cfafa444396861ca1d1173c8c"
+ mask="url(#border-box-8-mask-974b4d7cfafa444396861ca1d1173c8c)" stroke="#4fd2dd">
+ <animate attributeName="stroke-dasharray" from="0, 1442" to="1442, 0" dur="8s" repeatCount="indefinite" />
+ </use>
+ </svg>
</div>
+ </div>
</template>
-
+
<script>
const oneColor = ["#4caf50", "#2979ff", "#ffd600", "#0d47a1", "#b71c1c"]
const twoColor = [
- "#5470FE",
- "#91cc75",
- "#fac858",
- "#ee6666",
- "#73c0de",
- "#3ba272",
- "#fc8452",
- "#9a60b4",
- "#ea7ccc",
+ "#5470FE",
+ "#91cc75",
+ "#fac858",
+ "#ee6666",
+ "#73c0de",
+ "#3ba272",
+ "#fc8452",
+ "#9a60b4",
+ "#ea7ccc",
]
let rightTiming = null
@@ -241,799 +161,916 @@
import { getSchedulingList, getSchedulingDeptList } from "@/api/home/index.js"
import { fontSize } from "@/utils/fontSize.js"
-import { getCaseAll, getCaseRanking, getEquipment } from "@/api/home/index.js"
+import { getCaseAll, getCaseRanking, getCaseRankingArea, getEquipment } from "@/api/home/index.js"
const timeEvents = []
export default {
- inject: ["userInfo"],
- data () {
- return {
- eventTime: [],
- equipmentEchartsLoading: false,
- eventChangeEchartsLoading: false,
- schedulingNoDataText: ' ',
- schedulingLoading: false,
- pickerOptions: {
- shortcuts: [
- {
- text: "最近一周",
- onClick (picker) {
- const end = new Date()
- const start = new Date()
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
- picker.$emit("pick", [start, end])
- },
- },
- {
- text: "最近一个月",
- onClick (picker) {
- const end = new Date()
- const start = new Date()
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
- picker.$emit("pick", [start, end])
- },
- },
- {
- text: "最近三个月",
- onClick (picker) {
- const end = new Date()
- const start = new Date()
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
- picker.$emit("pick", [start, end])
- },
- },
- ],
- },
- regionTotal: 0,
- linetype: 0,
- tableHeight: 0,
- schedulingList: [],
- schedulingDeptList: [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
- policeStaionID: "",
- showMJL: false,
- originTitle: ['值班', '副班、巡逻'],
- transTitle: [{ label: '人员', width: '28%', align: 'center' }, { label: '人员', width: '', align: 'left' },],
- caseInfoType: 0
- }
+ inject: ["userInfo"],
+ data () {
+ return {
+ eventTime: [],
+ equipmentEchartsLoading: false,
+ eventChangeEchartsLoading: false,
+ schedulingNoDataText: ' ',
+ schedulingLoading: false,
+ pickerOptions: {
+ shortcuts: [
+ {
+ text: '最近一周',
+ onClick (picker) {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
+ picker.$emit('pick', [start, end])
+ }
+ },
+ {
+ text: '最近两周',
+ onClick (picker) {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 14)
+ picker.$emit('pick', [start, end])
+ }
+ },
+ {
+ text: '最近一个月',
+ onClick (picker) {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
+ picker.$emit('pick', [start, end])
+ }
+ },
+ {
+ text: '最近三个月',
+ onClick (picker) {
+ const end = new Date()
+ const start = new Date()
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
+ picker.$emit('pick', [start, end])
+ }
+ }]
+ },
+ regionTotal: 0,
+ linetype: 0,
+ tableHeight: 0,
+ schedulingList: [],
+ schedulingDeptList: [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
+ policeStaionID: "",
+ showMJL: false,
+ originTitle: ['值班', '副班、巡逻'],
+ transTitle: [{ label: '人员', width: '28%', align: 'center' }, { label: '人员', width: '', align: 'left' },],
+ caseInfoType: 0
+ }
+ },
+
+ created () {
+ this.pickerOptions = {
+ ...this.pickerOptions,
+ disabledDate (time) {
+ // 设置可选择的日期为今天之后的一个月内
+ let curDate = new Date().getTime()
+ return time.getTime() > curDate
+ },
+ }
+
+ this.defaultDate()
+
+ this.getSchedulingList()
+
+ this.getSchedulingDeptList()
+ },
+
+ mounted () {
+ this.getHomeAllData()
+
+ this.$nextTick(() => {
+ window.addEventListener("resize", this.echartsResize)
+ this.tableHeight =
+ this.$refs.Container.offsetHeight -
+ this.$refs.caseBox.offsetHeight -
+ this.$refs.crowdBox.offsetHeight -
+ this.$refs.alertBoxTitle.offsetHeight -
+ 55
+ })
+ },
+
+ methods: {
+ //获取值班列表信息
+ getSchedlingList (item) {
+ this.$emit("showschedulingdetail", item.dept, item.dept, "type")
},
- created () {
- this.pickerOptions = {
- ...this.pickerOptions,
- disabledDate (time) {
- // 设置可选择的日期为今天之后的一个月内
- let curDate = new Date().getTime()
- return time.getTime() > curDate
- },
- }
-
- this.defaultDate()
-
- this.getSchedulingList()
-
- this.getSchedulingDeptList()
+ //获取值班单位信息
+ getSchedulingDeptList () {
+ getSchedulingDeptList().then((res) => {
+ this.schedulingDeptList = res.data.data
+ })
},
- mounted () {
- this.getHomeAllData()
+ // actTabClick (type) {
+ // this.acttype = type
+ // this.$refs.activityTable.bodyWrapper.scrollTop = 0
+ // this.$emit('changeActivityType', type)
+ // this.$emit('activityChange')
+ // },
+
+ /**
+ * @description: 获取当前组件内所有数据
+ * @return {*}
+ */
+ getHomeAllData (id = "") {
+ this.policeStaionID = id
+
+ this.initEventChangeEcharts(this.caseInfoType)
+
+ this.initEquipmentEcharts(this.linetype)
+
+ if (rightTiming != null) {
+ clearInterval(rightTiming)
+ rightTiming = null
+ }
+
+ rightTiming = setInterval(async () => {
+ this.initEventChangeEcharts(this.caseInfoType)
+ this.initEquipmentEcharts(this.linetype)
+ }, 600000)
+ },
+
+ getSchedulingList () {
+ this.schedulingLoading = true
+ if (this.userInfo.dept_id == "1596020515064381442") {
+ this.schedulingNoDataText = ' '
+ const data = [
+ {
+ person:
+ "徐星逸,任圣日,娄永攀,蔡善龙,陈小强,刘开勇,梅祥,吕镇,付建冬",
+ patrol: "章正椿,夏文翔,叶江明,黄俊龙,苏茯林,王顺祥",
+ }
+ ]
+
+ const matrixData = data.map((row) => {
+ let arr = []
+ for (let key in row) {
+ arr.push(row[key])
+ }
+ return arr
+ })
+ setTimeout(() => {
+ this.schedulingList = matrixData[0].map((col, i) => {
+ return [this.originTitle[i], ...matrixData.map((row) => {
+ return row[i]
+ })]
+ })
+ this.schedulingLoading = false
+ }, 1000)
this.$nextTick(() => {
- window.addEventListener("resize", this.echartsResize)
- this.tableHeight =
- this.$refs.Container.offsetHeight -
- this.$refs.caseBox.offsetHeight -
- this.$refs.crowdBox.offsetHeight -
- this.$refs.alertBoxTitle.offsetHeight -
- 55
+ this.tableHeight =
+ this.$refs.Container.offsetHeight -
+ this.$refs.caseBox.offsetHeight -
+ this.$refs.crowdBox.offsetHeight -
+ this.$refs.alertBoxTitle.offsetHeight
})
+
+ this.showMJL = true
+ } else {
+ const params = {
+ sameday: 1,
+ isPage: 1
+ }
+
+ this.showMJL = false
+
+ getSchedulingList(params).then((res) => {
+ let a = [], b = []
+ a = res.data.data.filter(i => i.dept == '信州分局')
+ b = res.data.data.filter(i => i.dept != '信州分局')
+
+ this.schedulingList = [...a, ...b]
+ })
+
+ setTimeout(() => {
+ this.schedulingNoDataText = ' '
+ this.schedulingLoading = false
+ if (!this.schedulingList.length) {
+ setTimeout(() => {
+ this.schedulingNoDataText = '暂无值班数据'
+ }, 200)
+ }
+ }, 500)
+ }
},
- methods: {
- //获取值班列表信息
- getSchedlingList (item) {
- this.$emit("showschedulingdetail", item.dept, item.dept, "type")
- },
+ echartsResize () {
+ equipmentmyChart && equipmentmyChart != null && equipmentmyChart.resize()
+ eventchangemychart &&
+ eventchangemychart != null &&
+ eventchangemychart.resize()
+ },
- //获取值班单位信息
- getSchedulingDeptList () {
- getSchedulingDeptList().then((res) => {
- this.schedulingDeptList = res.data.data
- })
- },
+ // 警情统计中时间变化
+ async caseTimeChange (e) {
+ const date = e.map((item) => {
+ return this.dateFormat(item)
+ })
- // actTabClick (type) {
- // this.acttype = type
- // this.$refs.activityTable.bodyWrapper.scrollTop = 0
- // this.$emit('changeActivityType', type)
- // this.$emit('activityChange')
- // },
+ eventchangemychart.clear()
- /**
- * @description: 获取当前组件内所有数据
- * @return {*}
- */
- getHomeAllData (id = "") {
- this.policeStaionID = id
+ if (this.caseInfoType == 0) {
+ this.getCaseAll(date[0], date[1])
+ } else if (this.caseInfoType == 1) {
+ this.getCaseRanking(date[0], date[1])
+ } else {
+ this.getCaseRankingArea(date[0], date[1])
+ }
+ },
- this.initEventChangeEcharts(this.caseInfoType)
+ // 设置默认时间
+ defaultDate () {
+ var current = new Date()
- this.initEquipmentEcharts(this.linetype)
+ var seven = new Date(current.getTime() - 7 * 24 * 60 * 60 * 1000)
- if (rightTiming != null) {
- clearInterval(rightTiming)
- rightTiming = null
- }
+ this.eventTime = [seven, current] //将值设置给插件绑定的数据
+ },
- rightTiming = setInterval(async () => {
- this.initEventChangeEcharts(this.caseInfoType)
- this.initEquipmentEcharts(this.linetype)
- }, 600000)
- },
+ // 获取当前日期
+ dateFormat (dateData) {
+ var date = new Date(dateData)
+ var y = date.getFullYear()
+ var m = date.getMonth() + 1
+ m = m < 10 ? "0" + m : m
+ var d = date.getDate()
+ d = d < 10 ? "0" + d : d
+ const time = y + "-" + m + "-" + d
+ return time
+ },
- getSchedulingList () {
- this.schedulingLoading = true
- if (this.userInfo.dept_id == "1596020515064381442") {
- this.schedulingNoDataText = ' '
- const data = [
- {
- person:
- "徐星逸,任圣日,娄永攀,蔡善龙,陈小强,刘开勇,梅祥,吕镇,付建冬",
- patrol: "章正椿,夏文翔,叶江明,黄俊龙,苏茯林,王顺祥",
- }
- ]
+ // 获取警情统计值
+ getCaseAll (start, end) {
+ getCaseAll(
+ start,
+ end,
+ this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
+ ).then((res) => {
+ let obj = {}
+ if (res.data.timeList) {
+ let yDataList = {}
+ yDataList.dqList = res.data.dqList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.zpList = res.data.zpList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.jfList = res.data.jfList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.qtList = res.data.qtList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.qjList = res.data.qjList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.sdList = res.data.sdList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.sduList = res.data.sduList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ yDataList.shList = res.data.shList.reduce(
+ (previous, current) => {
+ previous.push(current.count)
+ return previous
+ },
+ []
+ )
+ let xData = res.data.timeList.map(item => item.slice(5, 10))
+ obj = { xData, yDataList }
+ } else {
+ obj = { xData: [], yDataList: {} }
+ }
- const matrixData = data.map((row) => {
- let arr = []
- for (let key in row) {
- arr.push(row[key])
- }
- return arr
- })
- setTimeout(() => {
- this.schedulingList = matrixData[0].map((col, i) => {
- return [this.originTitle[i], ...matrixData.map((row) => {
- return row[i]
- })]
- })
- this.schedulingLoading = false
- }, 1000)
+ eventchangemychart.setOption(this.initEventChangeOption(obj.xData, obj.yDataList))
- this.$nextTick(() => {
- this.tableHeight =
- this.$refs.Container.offsetHeight -
- this.$refs.caseBox.offsetHeight -
- this.$refs.crowdBox.offsetHeight -
- this.$refs.alertBoxTitle.offsetHeight
- })
+ setTimeout(() => {
+ this.eventChangeEchartsLoading = false
+ }, 500)
+ })
+ },
- this.showMJL = true
+ // 获取警情社区排行统计值
+ getCaseRanking (start, end) {
+ getCaseRanking(
+ start,
+ end,
+ this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
+ ).then((res) => {
+ let data = []
+
+ if (res.data.data) {
+ res.data.data = res.data.data.sort((a, b) => b.value - a.value)
+ res.data.data = res.data.data.filter((item, index) => index < 8).map((item, index) => {
+ item.value = item.count
+
+ if (index == 0) {
+ item.itemStyle = {
+ color: '#EB3C5A'
+ }
+ } else if (index == 1) {
+ item.itemStyle = {
+ color: '#FA8331'
+ }
+ } else if (index == 2) {
+ item.itemStyle = {
+ color: '#F7B833'
+ }
} else {
- const params = {
- sameday: 1,
- }
-
- this.showMJL = false
- getSchedulingList(1, 100, params).then((res) => {
- this.schedulingList = res.data.data.records
- })
-
-
- setTimeout(() => {
- this.schedulingNoDataText = ' '
- this.schedulingLoading = false
- if (!this.schedulingList.length) {
- setTimeout(() => {
- this.schedulingNoDataText = '暂无值班数据'
- }, 200)
- }
- }, 500)
-
-
+ item.itemStyle = {
+ color: '#395FFD'
+ }
}
- },
+ return item
+ }).sort((a, b) => b.value - a.value)
- echartsResize () {
- equipmentmyChart && equipmentmyChart != null && equipmentmyChart.resize()
- eventchangemychart &&
- eventchangemychart != null &&
- eventchangemychart.resize()
- },
+ data = res.data.data
+ } else {
+ data = []
+ }
- // 警情统计中时间变化
- async caseTimeChange (e) {
- const date = e.map((item) => {
- return this.dateFormat(item)
- })
+ eventchangemychart.setOption(this.initRankingOption(data))
- eventchangemychart.clear()
- const optionsData = await this.getCaseAll(date[0], date[1])
- eventchangemychart.showLoading({
- text: '拼命加载中',
- color: '#c23531',
- textColor: '#FFF',
- maskColor: 'rgba(0, 0, 0, 0.2)',
- zlevel: 0,
- })
- setTimeout(() => {
- eventchangemychart.hideLoading()
- eventchangemychart.setOption(this.initEventChangeOption(optionsData.xData, optionsData.yDataList))
- }, 500)
- },
+ setTimeout(() => {
+ this.eventChangeEchartsLoading = false
+ }, 500)
+ })
+ },
- // 设置默认时间
- defaultDate () {
- var current = new Date()
+ // 获取警情辖区排行统计值
+ getCaseRankingArea (start, end) {
+ getCaseRankingArea(
+ start,
+ end,
+ this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
+ ).then((res) => {
+ let data = []
+ if (res.data.data) {
+ res.data.data = res.data.data.sort((a, b) => b.num - a.num)
+ res.data.data = res.data.data.filter((item) => {
+ return 'num' in item && 'name' in item
+ }).filter((item, index) => index < 8).map((item, index) => {
+ item.value = item.num
- var seven = new Date(current.getTime() - 7 * 24 * 60 * 60 * 1000)
-
- this.eventTime = [seven, current] //将值设置给插件绑定的数据
- },
-
- // 获取当前日期
- dateFormat (dateData) {
- var date = new Date(dateData)
- var y = date.getFullYear()
- var m = date.getMonth() + 1
- m = m < 10 ? "0" + m : m
- var d = date.getDate()
- d = d < 10 ? "0" + d : d
- const time = y + "-" + m + "-" + d
- return time
- },
-
- // 获取警情统计值
- getCaseAll (start, end) {
- getCaseAll(
- start,
- end,
- this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
- ).then((res) => {
- let obj = {}
- if (res.data.timeList) {
- let yDataList = {}
- yDataList.dqList = res.data.dqList.reduce(
- (previous, current) => {
- previous.push(current.count)
- return previous
- },
- []
- )
- yDataList.zpList = res.data.zpList.reduce(
- (previous, current) => {
- previous.push(current.count)
- return previous
- },
- []
- )
- yDataList.jfList = res.data.jfList.reduce(
- (previous, current) => {
- previous.push(current.count)
- return previous
- },
- []
- )
- yDataList.qtList = res.data.qtList.reduce(
- (previous, current) => {
- previous.push(current.count)
- return previous
- },
- []
- )
- let xData = res.data.timeList.map(item => item.slice(5, 10))
- obj = { xData, yDataList }
- } else {
- obj = { xData: [], yDataList: {} }
- }
-
- eventchangemychart.setOption(this.initEventChangeOption(obj.xData, obj.yDataList))
-
- setTimeout(() => {
- this.eventChangeEchartsLoading = false
- }, 500)
- })
- },
-
- // 获取警情排行统计值
- getCaseRanking (start, end) {
- getCaseRanking(
- start,
- end,
- this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
- ).then((res) => {
- let data = []
-
- if (res.data.data) {
- res.data.data = res.data.data.sort((a, b) => a.value - b.value)
- res.data.data = res.data.data.map((item, index) => {
- item.value = item.count
-
- if (index == 0) {
- item.itemStyle = {
- color: '#EB3C5A'
- }
- } else if (index == 1) {
- item.itemStyle = {
- color: '#FA8331'
- }
- } else if (index == 2) {
- item.itemStyle = {
- color: '#F7B833'
- }
- } else {
- item.itemStyle = {
- color: '#395FFD'
- }
- }
-
- return item
- }).sort((a, b) => b.value - a.value)
-
- console.log(res.data.data, 465)
-
- data = res.data.data
- } else {
- data = []
- }
-
- eventchangemychart.setOption(this.initRankingOption(data))
-
- setTimeout(() => {
- this.eventChangeEchartsLoading = false
- }, 500)
- })
- },
-
- // 初始化警情数量统计
- async initEventChangeEcharts (type) {
- this.caseInfoType = type
- this.eventChangeEchartsLoading = true
-
- if (
- eventchangemychart != null &&
- eventchangemychart != "" &&
- eventchangemychart != undefined
- ) {
-
- eventchangemychart.clear()
- eventchangemychart.dispose()
-
- }
-
- var chartDom = document.getElementById("EventChangeEcharts")
- eventchangemychart = this.$echarts.init(chartDom)
-
- const date = this.eventTime.map((item) => {
- return this.dateFormat(item)
- })
-
- if (type == 0) {
- this.getCaseAll(date[0], date[1])
+ if (index == 0) {
+ item.itemStyle = {
+ color: '#EB3C5A'
+ }
+ } else if (index == 1) {
+ item.itemStyle = {
+ color: '#FA8331'
+ }
+ } else if (index == 2) {
+ item.itemStyle = {
+ color: '#F7B833'
+ }
} else {
- this.getCaseRanking(date[0], date[1])
+ item.itemStyle = {
+ color: '#395FFD'
+ }
}
- },
+ return item
+ })
- // 警情数量统计的options
- initEventChangeOption (xData, yDataList) {
- let option
- if (xData.length == 0) {
- //暂无数据
- option = {
- title: {
- text: "暂无警情数据",
- x: "center",
- y: "center",
- textStyle: {
- color: "#fff",
- fontSize: fontSize(14),
- fontWeight: "normal",
- },
- },
+ data = res.data.data
+ } else {
+ data = []
+ }
+
+ eventchangemychart.setOption(this.initRankingOption(data))
+
+ setTimeout(() => {
+ this.eventChangeEchartsLoading = false
+ }, 500)
+ })
+ },
+
+ // 初始化警情数量统计
+ async initEventChangeEcharts (type) {
+ this.caseInfoType = type
+ this.eventChangeEchartsLoading = true
+
+ if (
+ eventchangemychart != null &&
+ eventchangemychart != "" &&
+ eventchangemychart != undefined
+ ) {
+
+ eventchangemychart.clear()
+ eventchangemychart.dispose()
+
+ }
+
+ var chartDom = document.getElementById("EventChangeEcharts")
+ eventchangemychart = this.$echarts.init(chartDom)
+
+ const date = this.eventTime.map((item) => {
+ return this.dateFormat(item)
+ })
+
+ if (type == 0) {
+ this.getCaseAll(date[0], date[1])
+ } else if (type == 1) {
+ this.getCaseRanking(date[0], date[1])
+ } else {
+ this.getCaseRankingArea(date[0], date[1])
+ }
+ },
+
+ // 警情数量统计的options
+ initEventChangeOption (xData, yDataList) {
+ let option
+ if (xData.length == 0) {
+ //暂无数据
+ option = {
+ title: {
+ text: "暂无警情数据",
+ x: "center",
+ y: "center",
+ textStyle: {
+ color: "#fff",
+ fontSize: fontSize(14),
+ fontWeight: "normal",
+ },
+ },
+ }
+ } else {
+ option = {
+ color: ['#5470C6', '#73C0DE', '#EE6666', '#FAC858'],
+ tooltip: {
+ trigger: "item",
+ formatter:
+ ' <span style="display: inline-block; margin-right: 4px; border-radius: 10px; width: 10px; height: 10px;background-color: #91cc75;"></span> {b0}<strong style="margin-left:10px;color:#5c7bd9">{c0}起</strong>',
+ },
+ xAxis: {
+ type: "category",
+ data: xData,
+ axisLabel: {
+ color: "#fff",
+ fontSize: fontSize(14),
+ },
+ axisLine: {
+ lineStyle: {
+ color: "#fff",
+ },
+ },
+ },
+ legend: {
+ data: ['盗窃', '涉诈', '纠纷', '其他', '求助', '涉毒', '涉赌', '涉黄'],
+ textStyle: {
+ color: "#fff"
+ }
+ },
+ yAxis: {
+ type: "value",
+
+ minInterval: 1,
+
+ splitLine: {
+ show: false,
+ },
+ axisLabel: {
+ color: "#fff",
+ fontSize: fontSize(14),
+ },
+ axisLine: {
+ lineStyle: {
+ color: "#fff",
+ },
+ },
+ },
+ series: [
+ {
+ name: '盗窃',
+ data: yDataList.dqList,
+ type: "line",
+ smooth: true,
+ // areaStyle: {
+ // normal: {
+ // //渐变色
+ // color: new this.$echarts.graphic.LinearGradient(
+ // 0,
+ // 0,
+ // 0,
+ // 1,
+ // [
+ // {
+ // //波形图渐变色样式
+ // offset: 0,
+ // color: "rgba(3, 108, 255, 0.7)",
+ // },
+ // {
+ // offset: 0.8,
+ // color: "rgba(3, 108, 255, 0.1)",
+ // },
+ // ],
+ // false
+ // ),
+ // },
+ // },
+ // itemStyle: {
+ // normal: {
+ // color: "red", //改变折线点的颜色
+ // lineStyle: {
+ // color: "rgba(3, 108, 255, 1)", //改变折线颜色
+ // },
+ // },
+ // },
+ },
+ {
+ name: '涉诈',
+ data: yDataList.zpList,
+ type: "line",
+ smooth: true,
+ },
+ {
+ name: '纠纷',
+ data: yDataList.jfList,
+ type: "line",
+ smooth: true,
+ },
+ {
+ name: '其他',
+ data: yDataList.qtList,
+ type: "line",
+ smooth: true,
+ },
+ {
+ name: '求助',
+ data: yDataList.qjList,
+ type: "line",
+ smooth: true,
+ },
+ {
+ name: '涉毒',
+ data: yDataList.sduList,
+ type: "line",
+ smooth: true,
+ },
+ {
+ name: '涉赌',
+ data: yDataList.sdList,
+ type: "line",
+ smooth: true,
+ },
+ {
+ name: '涉黄',
+ data: yDataList.shList,
+ type: "line",
+ smooth: true,
+ }
+
+ ],
+ grid: {
+ top: "24%",
+ left: "3%",
+ right: "2%",
+ bottom: "4%",
+ containLabel: true,
+ },
+ }
+ }
+
+ return option
+ },
+
+ // 警情排行统计的options
+ initRankingOption (dataArr) {
+ let option
+ if (dataArr.length == 0) {
+ //暂无数据
+ option = {
+ title: {
+ text: "暂无警情排行数据",
+ x: "center",
+ y: "center",
+ textStyle: {
+ color: "#fff",
+ fontSize: fontSize(14),
+ fontWeight: "normal",
+ },
+ },
+ }
+ } else {
+ let seriesData = dataArr.map(item => {
+ return { value: item.value, itemStyle: item.itemStyle }
+ })
+ let xData = dataArr.map((item) => {
+ if (item.name.length > 5) {
+ let name = item.name.substring(0, 6) + '…'
+
+ return name
+ } else {
+ return item.name
+ }
+ })
+ option = {
+ tooltip: {
+ trigger: "item",
+ confine: true,
+ formatter:
+ ' <span style="display: inline-block; margin-right: 4px; border-radius: 10px; width: 10px; height: 10px;background-color: #91cc75;"></span> {b0}<strong style="margin-left:10px;color:#5c7bd9">{c0}起</strong>',
+ },
+ xAxis: {
+ type: "value",
+ splitLine: { show: false },
+ axisLabel: { show: false },
+ axisTick: { show: false },
+ axisLine: { show: false }
+ },
+ yAxis: [
+ {
+ type: "category",
+ inverse: true,
+ axisLine: { show: false },
+ axisTick: { show: false },
+ data: dataArr.map(item => item.name),
+ axisLabel: {
+ rich: {
+ nt1: {
+ color: "#fff",
+ backgroundColor: '#EB3B5A',
+ width: fontSize(12),
+ height: fontSize(12),
+ fontSize: fontSize(10),
+ align: "center",
+ borderRadius: fontSize(50),
+ padding: [0, 1, 2, 1]
+ },
+ nt2: {
+ color: "#fff",
+ backgroundColor: '#FA8231',
+ width: fontSize(12),
+ height: fontSize(12),
+ fontSize: fontSize(10),
+ align: "center",
+ borderRadius: fontSize(50),
+ padding: [0, 1, 2, 1]
+ },
+ nt3: {
+ color: "#fff",
+ backgroundColor: '#F7B731',
+ width: fontSize(12),
+ height: fontSize(12),
+ fontSize: fontSize(10),
+ align: "center",
+ borderRadius: fontSize(50),
+ padding: [0, 1, 2, 1]
+ },
+ nt: {
+ color: "#fff",
+ backgroundColor: '#00a9c8',
+ width: fontSize(12),
+ height: fontSize(12),
+ fontSize: fontSize(10),
+ align: "center",
+ borderRadius: fontSize(50),
+ padding: [0, 1, 2, 1]
+ }
+ },
+ formatter: function (value, index) {
+ let idx = index + 1
+ if (idx <= 3) {
+ return ["{nt" + idx + "|" + idx + "}"].join("\n")
+ } else {
+ return ["{nt|" + idx + "}"].join("\n")
+ }
}
- } else {
- option = {
- color: ['#5470C6', '#73C0DE', '#EE6666', '#FAC858'],
- tooltip: {
- trigger: "item",
- formatter:
- ' <span style="display: inline-block; margin-right: 4px; border-radius: 10px; width: 10px; height: 10px;background-color: #91cc75;"></span> {b0}<strong style="margin-left:10px;color:#5c7bd9">{c0}起</strong>',
- },
- xAxis: {
- type: "category",
- data: xData,
- axisLabel: {
- color: "#fff",
- fontSize: fontSize(14),
- },
- axisLine: {
- lineStyle: {
- color: "#fff",
- },
- },
- },
- legend: {
- data: ['盗窃', '诈骗', '纠纷', '其他'],
- textStyle: {
- color: "#fff"
- }
- },
- yAxis: {
- type: "value",
-
- minInterval: 1,
-
- splitLine: {
- show: false,
- },
- axisLabel: {
- color: "#fff",
- fontSize: fontSize(14),
- },
- axisLine: {
- lineStyle: {
- color: "#fff",
- },
- },
- },
- series: [
- {
- name: '盗窃',
- data: yDataList.dqList,
- type: "line",
- smooth: true,
- // areaStyle: {
- // normal: {
- // //渐变色
- // color: new this.$echarts.graphic.LinearGradient(
- // 0,
- // 0,
- // 0,
- // 1,
- // [
- // {
- // //波形图渐变色样式
- // offset: 0,
- // color: "rgba(3, 108, 255, 0.7)",
- // },
- // {
- // offset: 0.8,
- // color: "rgba(3, 108, 255, 0.1)",
- // },
- // ],
- // false
- // ),
- // },
- // },
- // itemStyle: {
- // normal: {
- // color: "red", //改变折线点的颜色
- // lineStyle: {
- // color: "rgba(3, 108, 255, 1)", //改变折线颜色
- // },
- // },
- // },
- },
- {
- name: '诈骗',
- data: yDataList.zpList,
- type: "line",
- smooth: true,
- },
- {
- name: '纠纷',
- data: yDataList.jfList,
- type: "line",
- smooth: true,
- },
- {
- name: '其他',
- data: yDataList.qtList,
- type: "line",
- smooth: true,
- }
- ],
- grid: {
- top: "4%",
- left: "3%",
- right: "2%",
- bottom: "4%",
- containLabel: true,
- },
+ }
+ },
+ {//名称
+ type: 'category',
+ offset: -10,
+ position: "left",
+ axisLine: { show: false },
+ axisTick: { show: false },
+ axisLabel: {
+ color: '#fff',
+ align: "left",
+ verticalAlign: "bottom",
+ lineHeight: fontSize(24),
+ fontSize: fontSize(10)
+ },
+ data: xData.reverse(),
+ },
+ ],
+ series: [
+ {
+ zlevel: 1,
+ type: "bar",
+ barWidth: fontSize(10),
+ data: seriesData,
+ itemStyle: {
+ normal: {
+ barBorderRadius: fontSize(5)
}
+ },
+ label: {
+ show: true,
+ fontSize: fontSize(10),
+ color: "#fff"
+ }
}
+ ],
+ grid: {
+ top: "3%",
+ left: "-14%",
+ right: "2%",
+ bottom: "3%",
+ containLabel: true,
+ }
+ }
+ }
- return option
- },
+ return option
+ },
- // 警情排行统计的options
- initRankingOption (dataArr) {
- let option
- if (dataArr.length == 0) {
- //暂无数据
- option = {
- title: {
- text: "暂无警情排行数据",
- x: "center",
- y: "center",
- textStyle: {
- color: "#fff",
- fontSize: fontSize(14),
- fontWeight: "normal",
- },
- },
- }
- } else {
- let seriesData = dataArr.map(item => {
- return { value: item.value, itemStyle: item.itemStyle }
- })
- option = {
- tooltip: {
- trigger: "item",
- formatter:
- ' <span style="display: inline-block; margin-right: 4px; border-radius: 10px; width: 10px; height: 10px;background-color: #91cc75;"></span> {b0}<strong style="margin-left:10px;color:#5c7bd9">{c0}起</strong>',
- },
- xAxis: {
- type: "value",
- splitLine: { show: false },
- axisLabel: { show: false },
- axisTick: { show: false },
- axisLine: { show: false }
- },
- yAxis: [
- {
- type: "category",
- inverse: true,
- axisLine: { show: false },
- axisTick: { show: false },
- data: dataArr.map((item) => item.name),
- axisLabel: {
- rich: {
- nt1: {
- color: "#fff",
- backgroundColor: '#EB3B5A',
- width: fontSize(12),
- height: fontSize(12),
- fontSize: fontSize(10),
- align: "center",
- borderRadius: fontSize(50),
- padding: [0, 1, 2, 1]
- },
- nt2: {
- color: "#fff",
- backgroundColor: '#FA8231',
- width: fontSize(12),
- height: fontSize(12),
- fontSize: fontSize(10),
- align: "center",
- borderRadius: fontSize(50),
- padding: [0, 1, 2, 1]
- },
- nt3: {
- color: "#fff",
- backgroundColor: '#F7B731',
- width: fontSize(12),
- height: fontSize(12),
- fontSize: fontSize(10),
- align: "center",
- borderRadius: fontSize(50),
- padding: [0, 1, 2, 1]
- },
- nt: {
- color: "#fff",
- backgroundColor: '#00a9c8',
- width: fontSize(12),
- height: fontSize(12),
- fontSize: fontSize(10),
- align: "center",
- borderRadius: fontSize(50),
- padding: [0, 1, 2, 1]
- }
- },
- formatter: function (value, index) {
- let idx = index + 1
- if (idx <= 3) {
- return ["{nt" + idx + "|" + idx + "}"].join("\n")
- } else {
- return ["{nt|" + idx + "}"].join("\n")
- }
- }
- }
- },
- {//名称
- type: 'category',
- offset: -10,
- position: "left",
- axisLine: { show: false },
- axisTick: { show: false },
- axisLabel: {
- color: '#fff',
- align: "left",
- verticalAlign: "bottom",
- lineHeight: fontSize(24),
- fontSize: fontSize(10)
- },
- data: dataArr.reverse().map((item) => item.name),
- },
- ],
- series: [
- {
- zlevel: 1,
- type: "bar",
- barWidth: fontSize(10),
- data: seriesData,
- itemStyle: {
- normal: {
- barBorderRadius: fontSize(5)
- }
- },
- label: {
- show: true,
- fontSize: fontSize(10),
- color: "#fff"
- }
- }
- ],
- grid: {
- top: "3%",
- left: "-20%",
- right: "2%",
- bottom: "3%",
- containLabel: true,
- }
- }
- }
+ // 现有设备统计
+ getEquipment () {
+ const typeData = {
+ carCount: "警车",
+ monitorCount: "摄像头",
+ phoneCount: "执法记录仪",
+ recorderCount: "手台",
+ }
- return option
- },
+ const typeIndexData = {
+ 警车: 0,
+ 摄像头: 1,
+ 手台: 2,
+ 执法记录仪: 3,
+ }
- // 现有设备统计
- getEquipment () {
- const typeData = {
- carCount: "车辆",
- monitorCount: "摄像头",
- phoneCount: "执法记录仪",
- recorderCount: "手台",
- }
+ let data = []
+ this.regionTotal = 0
+ let dataAll = null
+ dataAll = getEquipment(
+ this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
+ ).then((res) => {
+ if (this.linetype == 0) {
+ data = res.data.map((item, index) => {
+ this.regionTotal += item.count
- const typeIndexData = {
- 车辆: 0,
- 摄像头: 1,
- 手台: 2,
- 执法记录仪: 3,
- }
-
- let data = []
- this.regionTotal = 0
- let dataAll = null
- dataAll = getEquipment(
- this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
- ).then((res) => {
- if (this.linetype == 0) {
- data = res.data.map((item, index) => {
- this.regionTotal += item.count
-
- return {
- equimentType: typeIndexData[item.type],
- name: item.type,
- value: Number(item.count),
- working: Number(item.online),
- fault: Number(item.offline),
- label: twoColor[index],
- }
- })
-
- equimentDataLength = data.length
-
- return data
- } else {
- let normalData = {
- value: 0,
- name: "在线",
- color: "#4caf50",
- online: true,
- label: { color: oneColor[0] },
- }
- let faultData = {
- value: 0,
- name: "离线",
- color: "#ffd600",
- online: false,
- label: { color: oneColor[2] },
- }
-
- res.data.forEach((item) => {
- this.regionTotal = Number(this.regionTotal) + Number(item.count)
-
- normalData.value = Number(normalData.value) + Number(item.online)
-
- for (let key in typeData) {
- if (item.type == typeData[key]) {
- normalData[key] = Number(item.online)
- faultData[key] = Number(item.offline)
- }
- }
-
- faultData.value = Number(faultData.value) + Number(item.offline)
- })
-
- data = [normalData, faultData]
-
- equimentDataLength = data.length
-
- return data
- }
- }).catch(res => {
- dataAll = '请求错误'
- })
-
- return dataAll
- },
-
- // 现有设备饼图初始化
- async initEquipmentEcharts (type) {
- this.linetype = type
- this.equipmentEchartsLoading = true
-
- if (
- equipmentmyChart != null &&
- equipmentmyChart != "" &&
- equipmentmyChart != undefined
- ) {
- equipmentmyChart.dispose()
- equipmentmyChart.off("click")
- }
-
- var chartDom = document.getElementById("EquipmentEcharts")
- equipmentmyChart = this.$echarts.init(chartDom)
-
- const data = await this.getEquipment()
-
- if (data == '请求错误') {
- setTimeout(() => {
- this.equipmentEchartsLoading = false
- }, 500)
- }
- const newData = data.filter((item) => {
- if (item.value != 0) {
- return item
- }
- })
-
- equipmentmyChart.setOption(this.initEquipmentOptions(newData))
-
- this.clickEquimentChart()
-
- if (newData.length > 1) {
- this.equipmentEchartsCarousel()
- } else {
- clearInterval(timer)
- equipmentmyChart.off("mouseover")
- equipmentmyChart.off("mouseout")
- }
- setTimeout(() => {
- this.equipmentEchartsLoading = false
- }, 500)
- },
-
- // 现有设备options饼图数据
- initEquipmentOptions (dataArr) {
return {
- tooltip: {
- trigger: "item",
- confine: true,
- formatter: function (params) {
- let tipHtml = ``
+ equimentType: typeIndexData[item.type],
+ name: item.type,
+ value: Number(item.count),
+ working: Number(item.online),
+ fault: Number(item.offline),
+ label: twoColor[index],
+ }
+ })
- if (
- "carCount" in params.data ||
- "monitorCount" in params.data ||
- "phoneCount" in params.data ||
- "recorderCount" in params.data
- ) {
- tipHtml = `
+ equimentDataLength = data.length
+
+ return data
+ } else {
+ let normalData = {
+ value: 0,
+ name: "在线",
+ color: "#4caf50",
+ online: true,
+ label: { color: oneColor[0] },
+ }
+ let faultData = {
+ value: 0,
+ name: "离线",
+ color: "#ffd600",
+ online: false,
+ label: { color: oneColor[2] },
+ }
+
+ res.data.forEach((item) => {
+ this.regionTotal = Number(this.regionTotal) + Number(item.count)
+
+ normalData.value = Number(normalData.value) + Number(item.online)
+
+ for (let key in typeData) {
+ if (item.type == typeData[key]) {
+ normalData[key] = Number(item.online)
+ faultData[key] = Number(item.offline)
+ }
+ }
+
+ faultData.value = Number(faultData.value) + Number(item.offline)
+ })
+
+ data = [normalData, faultData]
+
+ equimentDataLength = data.length
+
+ return data
+ }
+ }).catch(res => {
+ dataAll = '请求错误'
+ })
+
+ return dataAll
+ },
+
+ // 现有设备饼图初始化
+ async initEquipmentEcharts (type) {
+ this.linetype = type
+ this.equipmentEchartsLoading = true
+
+ if (
+ equipmentmyChart != null &&
+ equipmentmyChart != "" &&
+ equipmentmyChart != undefined
+ ) {
+ equipmentmyChart.dispose()
+ equipmentmyChart.off("click")
+ }
+
+ var chartDom = document.getElementById("EquipmentEcharts")
+ equipmentmyChart = this.$echarts.init(chartDom)
+
+ const data = await this.getEquipment()
+
+ if (data == '请求错误') {
+ setTimeout(() => {
+ this.equipmentEchartsLoading = false
+ }, 500)
+ }
+ const newData = data.filter((item) => {
+ if (item.value != 0) {
+ return item
+ }
+ })
+
+ equipmentmyChart.setOption(this.initEquipmentOptions(newData))
+
+ this.clickEquimentChart()
+
+ if (newData.length > 1) {
+ this.equipmentEchartsCarousel()
+ } else {
+ clearInterval(timer)
+ equipmentmyChart.off("mouseover")
+ equipmentmyChart.off("mouseout")
+ }
+ setTimeout(() => {
+ this.equipmentEchartsLoading = false
+ }, 500)
+ },
+
+ // 现有设备options饼图数据
+ initEquipmentOptions (dataArr) {
+ return {
+ tooltip: {
+ trigger: "item",
+ confine: true,
+ formatter: function (params) {
+ let tipHtml = ``
+
+ if (
+ "carCount" in params.data ||
+ "monitorCount" in params.data ||
+ "phoneCount" in params.data ||
+ "recorderCount" in params.data
+ ) {
+ tipHtml = `
${params.marker}
<strong style="color: ${params.color}">${params.data.name} ${params.data.value}台</strong>
<br />
@@ -1047,474 +1084,483 @@
<br />
<span style="margin-left:10px;color:#ee6666">手台:${params.data.recorderCount}台</span>
`
- } else {
- tipHtml = `${params.marker}
+ } else {
+ tipHtml = `${params.marker}
<strong style="color: ${params.color}">${params.data.name
- } ${params.data.value}台</strong>
+ } ${params.data.value}台</strong>
<br />
<span style="color:#4caf50">在线:${params.data.working
- }台</span>
+ }台</span>
<br />
<span style="color:#ccc">离线:${params.data.fault
- }台</span>
+ }台</span>
<br />
<span style="margin-left:10px;color:#ccc">设备离线率:${Math.floor(
- (params.data.fault /
- (params.data.working + params.data.fault)) *
- 100
- )}%</span><br />`
- }
- return tipHtml
- },
- backgroundColor: "rgba(8, 56, 185, 0.9)",
- borderColor: "rgba(8, 56, 185, 0.9)",
- textStyle: {
- fontSize: fontSize(14),
- },
- },
- graphic: {
- type: "text",
- // left: "36.5%",
- top: "40%",
- left: "center",
- style: {
- text: "设备总数",
- textAlign: "center",
- fill: "#fff",
- fontSize: fontSize(18),
- fontWeight: 700,
- },
- },
- title: {
- text: `${this.regionTotal}`,
- top: "52%",
- left: "center",
- textStyle: {
- color: "#27D9C8",
- fontSize: fontSize(20),
- fontWeight: 700,
- align: "center",
- },
- },
- series: [
- {
- name: "",
- type: "pie",
- radius: ["90%", "136%"],
- top: "middle",
- left: "center",
- data: dataArr,
- avoidLabelOverlap: false,
- labelLine: {
- normal: {
- length: fontSize(15),
- lineStyle: {
- width: fontSize(3),
- },
- },
- },
- emphasis: {
- label: {
- color: "red",
- fontSize: fontSize(16),
- },
- },
- label: {
- formatter: '{b} {c}',
- color: function (params) {
- let colorList = []
- if ("carCount" in params.data) {
- colorList = ["#4caf50", "#787878", "#fac858", "#d766ee"]
- } else {
- colorList = [
- "#5470FE",
- "#91cc75",
- "#fac858",
- "#ee6666",
- "#73c0de",
- "#3ba272",
- "#fc8452",
- "#9a60b4",
- "#ea7ccc",
- ]
- }
- return colorList[params.dataIndex]
- },
- fontSize: fontSize(16),
- },
- itemStyle: {
- normal: {
- color: function (params) {
- let colorList = []
- if ("carCount" in params.data) {
- colorList = ["#4caf50", "#787878", "#fac858", "#d766ee"]
- } else {
- colorList = [
- "#5470FE",
- "#91cc75",
- "#fac858",
- "#ee6666",
- "#73c0de",
- "#3ba272",
- "#fc8452",
- "#9a60b4",
- "#ea7ccc",
- ]
- }
- return colorList[params.dataIndex]
- },
- },
- },
- },
- ],
+ (params.data.fault /
+ (params.data.working + params.data.fault)) *
+ 100
+ )}%</span><br />`
}
+ return tipHtml
+ },
+ backgroundColor: "rgba(8, 56, 185, 0.9)",
+ borderColor: "rgba(8, 56, 185, 0.9)",
+ textStyle: {
+ fontSize: fontSize(14),
+ },
},
-
- // 设备饼图轮播
- equipmentEchartsCarousel () {
- let curIndex = 0
- if (timer) {
- clearInterval(timer)
- }
-
- timer = setInterval(() => {
- equipmentmyChart.dispatchAction({
- type: "downplay",
- seriesIndex: 0,
- dataIndex: curIndex,
- })
- curIndex = (curIndex + 1) % equimentDataLength
- equipmentmyChart.dispatchAction({
- type: "highlight",
- seriesIndex: 0,
- dataIndex: curIndex,
- })
- }, 1000)
-
- equipmentmyChart.on("mouseover", function (param) {
- clearInterval(timer)
- equipmentmyChart.dispatchAction({
- type: "downplay",
- seriesIndex: 0,
- dataIndex: curIndex,
- })
- equipmentmyChart.dispatchAction({
- type: "highlight",
- seriesIndex: 0,
- dataIndex: param.dataIndex,
- })
- curIndex = param.dataIndex
- })
-
- equipmentmyChart.on("mouseout", function (param) {
- curIndex = param.dataIndex
- if (timer) {
- clearInterval(timer)
- }
- timer = setInterval(() => {
- equipmentmyChart.dispatchAction({
- type: "downplay",
- seriesIndex: 0,
- dataIndex: curIndex,
- })
- curIndex = (curIndex + 1) % equimentDataLength
- equipmentmyChart.dispatchAction({
- type: "highlight",
- seriesIndex: 0,
- dataIndex: curIndex,
- })
- }, 1000)
- })
+ graphic: {
+ type: "text",
+ // left: "36.5%",
+ top: "40%",
+ left: "center",
+ style: {
+ text: "设备总数",
+ textAlign: "center",
+ fill: "#fff",
+ fontSize: fontSize(18),
+ fontWeight: 700,
+ },
},
-
- // 现有设备的点击事件(显示弹窗表格)
- clickEquimentChart () {
- equipmentmyChart.on("click", (params) => {
- // 设备类型,摄像头弹窗显示,其他弹窗显示,【记录仪列显示,警车列显示,手台列显示】,遍历数组
- if ("equimentType" in params.data) {
- this.$emit(
- "showequimentdetail",
- params.data.name,
- params.data.equimentType,
- "type"
- )
+ title: {
+ text: `${this.regionTotal}`,
+ top: "52%",
+ left: "center",
+ textStyle: {
+ color: "#27D9C8",
+ fontSize: fontSize(20),
+ fontWeight: 700,
+ align: "center",
+ },
+ },
+ series: [
+ {
+ name: "",
+ type: "pie",
+ radius: ["90%", "136%"],
+ top: "middle",
+ left: "center",
+ data: dataArr,
+ avoidLabelOverlap: false,
+ labelLine: {
+ normal: {
+ length: fontSize(15),
+ lineStyle: {
+ width: fontSize(3),
+ },
+ },
+ },
+ emphasis: {
+ label: {
+ color: "red",
+ fontSize: fontSize(16),
+ },
+ },
+ label: {
+ formatter: '{b} {c}',
+ color: function (params) {
+ let colorList = []
+ if ("carCount" in params.data) {
+ colorList = ["#4caf50", "#787878", "#fac858", "#d766ee"]
} else {
- this.$emit(
- "showequimentdetail",
- params.data.name,
- params.data.online,
- "online"
- )
+ colorList = [
+ "#5470FE",
+ "#91cc75",
+ "#fac858",
+ "#ee6666",
+ "#73c0de",
+ "#3ba272",
+ "#fc8452",
+ "#9a60b4",
+ "#ea7ccc",
+ ]
}
- })
- },
+ return colorList[params.dataIndex]
+ },
+ fontSize: fontSize(16),
+ },
+ itemStyle: {
+ normal: {
+ color: function (params) {
+ let colorList = []
+ if ("carCount" in params.data) {
+ colorList = ["#4caf50", "#787878", "#fac858", "#d766ee"]
+ } else {
+ colorList = [
+ "#5470FE",
+ "#91cc75",
+ "#fac858",
+ "#ee6666",
+ "#73c0de",
+ "#3ba272",
+ "#fc8452",
+ "#9a60b4",
+ "#ea7ccc",
+ ]
+ }
+ return colorList[params.dataIndex]
+ },
+ },
+ },
+ },
+ ],
+ }
},
- destroyed () {
- window.removeEventListener("resize", this.echartsResize)
+ // 设备饼图轮播
+ equipmentEchartsCarousel () {
+ let curIndex = 0
+ if (timer) {
+ clearInterval(timer)
+ }
- if (equipmentmyChart) {
- equipmentmyChart.dispose()
- equipmentmyChart = null
- }
+ timer = setInterval(() => {
+ equipmentmyChart.dispatchAction({
+ type: "downplay",
+ seriesIndex: 0,
+ dataIndex: curIndex,
+ })
+ curIndex = (curIndex + 1) % equimentDataLength
+ equipmentmyChart.dispatchAction({
+ type: "highlight",
+ seriesIndex: 0,
+ dataIndex: curIndex,
+ })
+ }, 1000)
- if (eventchangemychart) {
- eventchangemychart.dispose()
- eventchangemychart = null
- }
+ equipmentmyChart.on("mouseover", function (param) {
+ clearInterval(timer)
+ equipmentmyChart.dispatchAction({
+ type: "downplay",
+ seriesIndex: 0,
+ dataIndex: curIndex,
+ })
+ equipmentmyChart.dispatchAction({
+ type: "highlight",
+ seriesIndex: 0,
+ dataIndex: param.dataIndex,
+ })
+ curIndex = param.dataIndex
+ })
+ equipmentmyChart.on("mouseout", function (param) {
+ curIndex = param.dataIndex
if (timer) {
- clearInterval(timer)
- timer = null
+ clearInterval(timer)
}
-
- if (rightTiming != null) {
- clearInterval(rightTiming)
- rightTiming = null
- }
+ timer = setInterval(() => {
+ equipmentmyChart.dispatchAction({
+ type: "downplay",
+ seriesIndex: 0,
+ dataIndex: curIndex,
+ })
+ curIndex = (curIndex + 1) % equimentDataLength
+ equipmentmyChart.dispatchAction({
+ type: "highlight",
+ seriesIndex: 0,
+ dataIndex: curIndex,
+ })
+ }, 1000)
+ })
},
+
+ // 现有设备的点击事件(显示弹窗表格)
+ clickEquimentChart () {
+ equipmentmyChart.on("click", (params) => {
+ // 设备类型,摄像头弹窗显示,其他弹窗显示,【记录仪列显示,警车列显示,手台列显示】,遍历数组
+ if ("equimentType" in params.data) {
+ this.$emit(
+ "showequimentdetail",
+ params.data.name,
+ params.data.equimentType,
+ "type"
+ )
+ } else {
+ this.$emit(
+ "showequimentdetail",
+ params.data.name,
+ params.data.online,
+ "online"
+ )
+ }
+ })
+ },
+ },
+
+ destroyed () {
+ window.removeEventListener("resize", this.echartsResize)
+
+ if (equipmentmyChart) {
+ equipmentmyChart.dispose()
+ equipmentmyChart = null
+ }
+
+ if (eventchangemychart) {
+ eventchangemychart.dispose()
+ eventchangemychart = null
+ }
+
+ if (timer) {
+ clearInterval(timer)
+ timer = null
+ }
+
+ if (rightTiming != null) {
+ clearInterval(rightTiming)
+ rightTiming = null
+ }
+ },
}
</script>
-
+
<style scoped lang="scss">
.container {
- display: flex;
+ display: flex;
+ position: relative;
+ height: 100%;
+ width: 100%;
+
+ .case-box,
+ .alert-box,
+ .crowd-box {
position: relative;
- height: 100%;
- width: 100%;
+ margin: 8px;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ // background: $bg-color;
- .case-box,
- .alert-box,
- .crowd-box {
- position: relative;
- margin: 8px;
- flex: 1;
+ background-image: url(/img/box/box-bg.png);
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+
+ // .title::after {
+ // content: '';
+ // position: absolute;
+ // top: 13px;
+ // left: 6px;
+ // width: 10px;
+ // height: 10px;
+ // border-radius: 50%;
+ // background: #43bafe;
+ // box-shadow: 0px 0px 8px 2px #43bafe;
+ // margin-left: 8px;
+ // }
+
+ :deep(.el-main) {
+ padding: 0;
+ }
+
+ .box {
+ display: flex;
+ position: absolute;
+ flex-direction: column;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 11;
+ }
+
+ .title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ padding: 0 18px 0 18px;
+ position: relative;
+
+ font-size: 16px;
+ font-weight: bold;
+ font-style: oblique;
+ letter-spacing: 2px;
+ color: #fff;
+ // background-image: linear-gradient(to right, #2e4aba, #010d3e);
+
+ .title-tab {
+ color: #99cccc;
+
+ span {
+ cursor: pointer;
+ }
+
+ span.choosed {
+ color: #fff;
+ }
+ }
+
+ .timer {
+ width: 250px;
+ }
+
+ .regionTotal {
+ color: #fff;
+ font-size: 22px;
+ font-weight: 700;
+ margin-left: 50%;
+ letter-spacing: 1px;
+ }
+ }
+
+ .sub-title {
+ display: flex;
+ justify-content: space-between;
+ height: 36px;
+ }
+
+ .sub-tab {
+ padding: 10px;
+ display: flex;
+ color: #99cccc;
+
+ .tab {
display: flex;
- flex-direction: column;
- // background: $bg-color;
+ justify-content: center;
+ margin: 0 10px;
+ flex: 1;
+ background: $sub-tab-bg-color;
+ border-radius: 8px;
+ cursor: pointer;
+ height: 22px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
- background-image: url(/img/box/box-bg.png);
- background-size: 100% 100%;
- background-repeat: no-repeat;
+ &>div {
+ height: 22px;
+ line-height: 22px;
+ white-space: nowrap;
+ }
+ }
+ }
- // .title::after {
- // content: '';
- // position: absolute;
- // top: 13px;
- // left: 6px;
- // width: 10px;
- // height: 10px;
- // border-radius: 50%;
- // background: #43bafe;
- // box-shadow: 0px 0px 8px 2px #43bafe;
- // margin-left: 8px;
- // }
+ .echarts-box {
+ padding: 12px;
+ flex: 1;
+ // height: 100%;
+ // width: 100%;
+ }
- :deep(.el-main) {
- padding: 0;
+ .table-box {
+ padding: 0 12px;
+ flex: 1;
+
+ .pointList {
+ width: 100%;
+ display: flex;
+ justify-content: space-evenly;
+ margin-top: -10px;
+
+ .point {
+ width: 12px;
+ height: 12px;
+ border-radius: 50px;
+ background-color: #006699;
+ cursor: pointer;
+ }
+ }
+
+ :deep(.el-table) {
+ .cell {
+ // white-space: pre-line;
+ white-space: pre-wrap;
+ height: 100% !important;
+ line-height: 3.2 !important;
}
- .box {
- display: flex;
- position: absolute;
- flex-direction: column;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 11;
- }
+ .el-table__body-wrapper {
+ height: 100% !important;
+ overflow: hidden;
- .title {
- display: flex;
- align-items: center;
- justify-content: space-between;
+ .el-table__body {
+ width: 100% !important;
+ height: 100% !important;
- padding: 0 18px 0 18px;
- position: relative;
+ tbody {
+ width: 100% !important;
+ height: 100% !important;
- font-size: 16px;
- font-weight: bold;
- font-style: oblique;
- letter-spacing: 2px;
- color: #fff;
- // background-image: linear-gradient(to right, #2e4aba, #010d3e);
-
- .title-tab {
- color: #99cccc;
-
- span {
- cursor: pointer;
- }
-
- span.choosed {
- color: #fff;
- }
- }
-
- .timer {
- width: 250px;
- }
-
- .regionTotal {
- color: #fff;
- font-size: 22px;
- font-weight: 700;
- margin-left: 50%;
- letter-spacing: 1px;
- }
- }
-
- .sub-title {
- display: flex;
- justify-content: space-between;
- height: 36px;
- }
-
- .sub-tab {
- padding: 10px;
- display: flex;
- color: #99cccc;
-
- .tab {
- display: flex;
- justify-content: center;
- margin: 0 10px;
+ td {
flex: 1;
- background: $sub-tab-bg-color;
- border-radius: 8px;
- cursor: pointer;
- height: 22px;
- display: flex;
- align-items: center;
- justify-content: center;
-
- & > div {
- height: 22px;
- line-height: 22px;
- white-space: nowrap;
- }
+ }
}
+ }
}
-
- .echarts-box {
- padding: 12px;
- flex: 1;
- // height: 100%;
- // width: 100%;
- }
-
- .table-box {
- padding: 0 12px;
- flex: 1;
-
- .pointList {
- width: 100%;
- display: flex;
- justify-content: space-evenly;
- margin-top: -10px;
-
- .point {
- width: 12px;
- height: 12px;
- border-radius: 50px;
- background-color: #006699;
- cursor: pointer;
- }
- }
-
- :deep(.el-table) {
- .cell {
- // white-space: pre-line;
- white-space: pre-wrap;
- height: 100% !important;
- line-height: 3.2 !important;
- }
-
- .el-table__body-wrapper {
- height: 100% !important;
- overflow: hidden;
-
- .el-table__body {
- width: 100% !important;
- height: 100% !important;
-
- tbody {
- width: 100% !important;
- height: 100% !important;
-
- td {
- flex: 1;
- }
- }
- }
- }
- }
- }
-
- .duty-information-box {
- height: 100%;
-
- & > div:first-child {
- background: $table-body-tr-n-color;
- }
-
- & > div:last-child {
- background: $table-body-tr-2n-color;
- }
-
- & > div {
- display: flex;
- height: 50%;
-
- & > div {
- display: flex;
- align-items: center;
- }
-
- & > div:first-child {
- width: 28%;
- justify-content: center;
- }
-
- & > div:last-child {
- width: 72%;
- text-align: left;
- }
- }
- }
-
- #peopleList {
- height: 100%;
- }
+ }
}
- .alert-box {
- margin-top: 0;
- margin-bottom: 0;
+ .duty-information-box {
+ height: 100%;
- .title {
- height: 54px;
- line-height: 54px;
+ &>div:first-child {
+ background: $table-body-tr-n-color;
+ }
+
+ &>div:last-child {
+ background: $table-body-tr-2n-color;
+ }
+
+ &>div {
+ display: flex;
+ height: 50%;
+
+ &>div {
+ display: flex;
+ align-items: center;
}
- .echarts-box {
- overflow-x: hidden;
- overflow-y: auto;
+ &>div:first-child {
+ width: 28%;
+ justify-content: center;
}
- :deep(.el-table__header-wrapper) {
- height: 40px;
+ &>div:last-child {
+ width: 72%;
+ text-align: left;
}
- }
+ }
- .border-svg {
- position: absolute;
- top: 0;
- left: 0;
+ .no-zb-data {
width: 100%;
height: 100%;
- z-index: 1;
+ background: transparent !important;
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ }
}
+
+ #peopleList {
+ height: 100%;
+ }
+ }
+
+ .alert-box {
+ margin-top: 0;
+ margin-bottom: 0;
+
+ .title {
+ height: 54px;
+ line-height: 54px;
+ }
+
+ .echarts-box {
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+
+ :deep(.el-table__header-wrapper) {
+ height: 40px;
+ }
+ }
+
+ .border-svg {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ }
}
</style>
\ No newline at end of file
--
Gitblit v1.9.3