From e24f70ababdee2b4fdce71c6b80a9bc928fa0331 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 08 May 2023 14:45:08 +0800
Subject: [PATCH] 警情排行调整

---
 src/views/home/components/rightContainer.vue |  725 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 577 insertions(+), 148 deletions(-)

diff --git a/src/views/home/components/rightContainer.vue b/src/views/home/components/rightContainer.vue
index 53b2e20..cda0565 100644
--- a/src/views/home/components/rightContainer.vue
+++ b/src/views/home/components/rightContainer.vue
@@ -7,42 +7,72 @@
                 </div>
 
                 <div class="table-box" v-show="!showMJL">
-                    <el-table size="small" :height="tableHeight" :data="schedulingList" style="width: 100%"
+                    <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="暂无值班信息">
+                        :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">
-                        <el-tooltip class="item" effect="dark" :content="item.dept" placement="top"
-                            v-for="(item, index) in schedulingDeptList" :key="index">
+                    <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="table-box" v-show="showMJL">
-                    <el-table size="small" :height="tableHeight" :data="schedulingList" style="width: 100%"
-                        :show-header="false" :header-cell-style="{ 'text-align': 'center' }"
-                        :cell-style="{ 'text-align': 'center', borderColor: '#324e75' }"
-                        :row-class-name="tableRowClassName">
-                        <el-table-column :show-overflow-tooltip="true" v-for="(item, index) in transTitle" :label="item"
-                            :key="index" align="center">
-                            <template slot-scope="scope">
-                                {{ scope.row[index] }}
-                            </template>
-                        </el-table-column>
-                    </el-table>
+                <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
+                    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>
@@ -50,21 +80,62 @@
         <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>
+                        <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>
-                <div id="EventChangeEcharts" class="echarts-box"></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>
 
             <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
+                    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>
@@ -99,21 +170,47 @@
 
         <div class="crowd-box" ref="crowdBox">
             <div class="box">
-                <div class="title">
-                    <div>现有设备</div>
-                    <div class="title-tab">
-                        <span :class="{ choosed: linetype == 0 }" @click="initEquipmentEcharts(0)">设备种类</span>/
-                        <span :class="{ choosed: linetype == 1 }" @click="initEquipmentEcharts(1)">设备状态</span>
+                <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>
-                <div style="overflow: hidden" id="EquipmentEcharts" class="echarts-box"></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
+                    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>
@@ -144,7 +241,7 @@
 import { getSchedulingList, getSchedulingDeptList } from "@/api/home/index.js"
 import { fontSize } from "@/utils/fontSize.js"
 
-import { getCaseAll, getEquipment } from "@/api/home/index.js"
+import { getCaseAll, getCaseRanking, getEquipment } from "@/api/home/index.js"
 
 const timeEvents = []
 
@@ -153,6 +250,10 @@
     data () {
         return {
             eventTime: [],
+            equipmentEchartsLoading: false,
+            eventChangeEchartsLoading: false,
+            schedulingNoDataText: ' ',
+            schedulingLoading: false,
             pickerOptions: {
                 shortcuts: [
                     {
@@ -191,8 +292,9 @@
             schedulingDeptList: [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
             policeStaionID: "",
             showMJL: false,
-            originTitle: ['值班人员', '副班、巡逻人员'],
-            transTitle: ['', '人员', '人员'],
+            originTitle: ['值班', '副班、巡逻'],
+            transTitle: [{ label: '人员', width: '28%', align: 'center' }, { label: '人员', width: '', align: 'left' },],
+            caseInfoType: 0
         }
     },
 
@@ -223,7 +325,7 @@
                 this.$refs.caseBox.offsetHeight -
                 this.$refs.crowdBox.offsetHeight -
                 this.$refs.alertBoxTitle.offsetHeight -
-                86
+                55
         })
     },
 
@@ -254,7 +356,7 @@
         getHomeAllData (id = "") {
             this.policeStaionID = id
 
-            this.initEventChangeEcharts()
+            this.initEventChangeEcharts(this.caseInfoType)
 
             this.initEquipmentEcharts(this.linetype)
 
@@ -264,29 +366,21 @@
             }
 
             rightTiming = setInterval(async () => {
+                this.initEventChangeEcharts(this.caseInfoType)
                 this.initEquipmentEcharts(this.linetype)
             }, 600000)
         },
 
         getSchedulingList () {
-            console.log(this.userInfo, 4567)
+            this.schedulingLoading = true
             if (this.userInfo.dept_id == "1596020515064381442") {
+                this.schedulingNoDataText = '  '
                 const data = [
                     {
                         person:
-                            "徐星逸、任圣日、娄永攀、蔡善龙、陈小强、梅祥、吕镇、刘开勇、付建冬",
+                            "徐星逸,任圣日,娄永攀,蔡善龙,陈小强,刘开勇,梅祥,吕镇,付建冬",
                         patrol: "章正椿,夏文翔,叶江明,黄俊龙,苏茯林,王顺祥",
-                    },
-                    {
-                        person:
-                            "矢裕忠、戴饶平、余传公、杨敏、苏浩男、周安云、蒋丁岩、陈圣俊、雷智荐",
-                        patrol: "潘林彬,刘志祥,李志强,杨俊浩,黄天行,叶子淳",
-                    },
-                    {
-                        person:
-                            "齐光华、周静、吕来城、周骏、邓道群、沈强、王岳、魏霄峰、夏添、李道福",
-                        patrol: "余梦宝,徐宝盛,李仁豪,付涵,周林,王宗强",
-                    },
+                    }
                 ]
 
                 const matrixData = data.map((row) => {
@@ -296,12 +390,14 @@
                     }
                     return arr
                 })
-
-                this.schedulingList = matrixData[0].map((col, i) => {
-                    return [this.originTitle[i], ...matrixData.map((row) => {
-                        return row[i]
-                    })]
-                })
+                setTimeout(() => {
+                    this.schedulingList = matrixData[0].map((col, i) => {
+                        return [this.originTitle[i], ...matrixData.map((row) => {
+                            return row[i]
+                        })]
+                    })
+                    this.schedulingLoading = false
+                }, 1000)
 
                 this.$nextTick(() => {
                     this.tableHeight =
@@ -321,7 +417,21 @@
                 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)
+
+
             }
+
         },
 
         echartsResize () {
@@ -331,7 +441,7 @@
                 eventchangemychart.resize()
         },
 
-        // 案件统计中时间变化
+        // 警情统计中时间变化
         async caseTimeChange (e) {
             const date = e.map((item) => {
                 return this.dateFormat(item)
@@ -348,7 +458,7 @@
             })
             setTimeout(() => {
                 eventchangemychart.hideLoading()
-                eventchangemychart.setOption(this.initEventChangeOption(optionsData.xData, optionsData.yData))
+                eventchangemychart.setOption(this.initEventChangeOption(optionsData.xData, optionsData.yDataList))
             }, 500)
         },
 
@@ -373,70 +483,147 @@
             return time
         },
 
-        // 获取案件统计值
+        // 获取警情统计值
         getCaseAll (start, end) {
-            const caseAll = getCaseAll(
+            getCaseAll(
                 start,
                 end,
                 this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
             ).then((res) => {
-                if (res.data.length > 0) {
-                    return res.data.reduce(
+                let obj = {}
+                if (res.data.timeList) {
+                    let yDataList = {}
+                    yDataList.dqList = res.data.dqList.reduce(
                         (previous, current) => {
-                            previous.xData.push(current.days)
-                            previous.yData.push(current.cout)
+                            previous.push(current.count)
                             return previous
                         },
-                        { xData: [], yData: [] }
+                        []
                     )
+                    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 {
-                    return { xData: [], yData: [] }
+                    obj = { xData: [], yDataList: {} }
                 }
-            })
 
-            return caseAll
+                eventchangemychart.setOption(this.initEventChangeOption(obj.xData, obj.yDataList))
+
+                setTimeout(() => {
+                    this.eventChangeEchartsLoading = false
+                }, 500)
+            })
         },
 
-        // 初始化案件统计
-        async initEventChangeEcharts () {
-            var chartDom = document.getElementById("EventChangeEcharts")
+        // 获取警情排行统计值
+        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)
             })
 
-            const optionsData = await this.getCaseAll(date[0], date[1])
+            if (type == 0) {
+                this.getCaseAll(date[0], date[1])
+            } else {
+                this.getCaseRanking(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.yData))
-            }, 500)
         },
 
-        // 案件统计的options
-        initEventChangeOption (xData, yData) {
+        // 警情数量统计的options
+        initEventChangeOption (xData, yDataList) {
             let option
             if (xData.length == 0) {
                 //暂无数据
                 option = {
                     title: {
-                        text: "暂无案件数据",
+                        text: "暂无警情数据",
                         x: "center",
                         y: "center",
                         textStyle: {
@@ -448,6 +635,7 @@
                 }
             } else {
                 option = {
+                    color: ['#5470C6', '#73C0DE', '#EE6666', '#FAC858'],
                     tooltip: {
                         trigger: "item",
                         formatter:
@@ -465,6 +653,12 @@
                                 color: "#fff",
                             },
                         },
+                    },
+                    legend: {
+                        data: ['盗窃', '诈骗', '纠纷', '其他'],
+                        textStyle: {
+                            color: "#fff"
+                        }
                     },
                     yAxis: {
                         type: "value",
@@ -486,41 +680,60 @@
                     },
                     series: [
                         {
-                            data: yData,
+                            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)", //改变折线颜色
-                                    },
-                                },
-                            },
+                            // 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%",
@@ -529,6 +742,147 @@
                         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 }
+                })
+                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,
+                    }
                 }
             }
 
@@ -553,8 +907,8 @@
 
             let data = []
             this.regionTotal = 0
-
-            const dataAll = getEquipment(
+            let dataAll = null
+            dataAll = getEquipment(
                 this.policeStaionID != "" ? this.policeStaionID : this.userInfo.dept_id
             ).then((res) => {
                 if (this.linetype == 0) {
@@ -611,6 +965,8 @@
 
                     return data
                 }
+            }).catch(res => {
+                dataAll = '请求错误'
             })
 
             return dataAll
@@ -619,6 +975,7 @@
         // 现有设备饼图初始化
         async initEquipmentEcharts (type) {
             this.linetype = type
+            this.equipmentEchartsLoading = true
 
             if (
                 equipmentmyChart != null &&
@@ -634,24 +991,18 @@
 
             const data = await this.getEquipment()
 
+            if (data == '请求错误') {
+                setTimeout(() => {
+                    this.equipmentEchartsLoading = false
+                }, 500)
+            }
             const newData = data.filter((item) => {
                 if (item.value != 0) {
                     return item
                 }
             })
 
-            equipmentmyChart.showLoading({
-                text: '拼命加载中',
-                color: '#c23531',
-                textColor: '#FFF',
-                maskColor: 'rgba(0, 0, 0, 0.2)',
-                zlevel: 0,
-            })
-            setTimeout(() => {
-                equipmentmyChart.hideLoading()
-                equipmentmyChart.setOption(this.initEquipmentOptions(newData))
-            }, 500)
-
+            equipmentmyChart.setOption(this.initEquipmentOptions(newData))
 
             this.clickEquimentChart()
 
@@ -662,6 +1013,9 @@
                 equipmentmyChart.off("mouseover")
                 equipmentmyChart.off("mouseout")
             }
+            setTimeout(() => {
+                this.equipmentEchartsLoading = false
+            }, 500)
         },
 
         // 现有设备options饼图数据
@@ -816,7 +1170,7 @@
             }
         },
 
-        // 饼图轮播
+        // 设备饼图轮播
         equipmentEchartsCarousel () {
             let curIndex = 0
             if (timer) {
@@ -956,6 +1310,10 @@
         //     margin-left: 8px;
         // }
 
+        :deep(.el-main) {
+            padding: 0;
+        }
+
         .box {
             display: flex;
             position: absolute;
@@ -1016,16 +1374,25 @@
         .sub-tab {
             padding: 10px;
             display: flex;
+            color: #99cccc;
 
             .tab {
+                display: flex;
+                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;
 
-                &>div {
-                    height: 26px;
-                    line-height: 26px;
+                & > div {
+                    height: 22px;
+                    line-height: 22px;
+                    white-space: nowrap;
                 }
             }
         }
@@ -1033,6 +1400,8 @@
         .echarts-box {
             padding: 12px;
             flex: 1;
+            // height: 100%;
+            // width: 100%;
         }
 
         .table-box {
@@ -1043,7 +1412,7 @@
                 width: 100%;
                 display: flex;
                 justify-content: space-evenly;
-                margin-top: 15px;
+                margin-top: -10px;
 
                 .point {
                     width: 12px;
@@ -1053,6 +1422,66 @@
                     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 {

--
Gitblit v1.9.3