shuishen
2025-11-11 d0fa69584866a1ea703f370aec7eea266ba85b94
首页相关调整
5 files modified
1 files added
891 ■■■■ changed files
src/api/home/index.js 147 ●●●●● patch | view | raw | blame | history
src/components/mapAddressSearchBox/index.vue 262 ●●●●● patch | view | raw | blame | history
src/components/mapSearchBox/index.vue 7 ●●●●● patch | view | raw | blame | history
src/styles/media/index.scss 31 ●●●●● patch | view | raw | blame | history
src/views/home/components/rightContainer.vue 328 ●●●● patch | view | raw | blame | history
src/views/home/index.vue 116 ●●●●● patch | view | raw | blame | history
src/api/home/index.js
@@ -2,22 +2,22 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-12-27 14:19:19
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-02-19 14:34:52
 * @LastEditTime: 2025-11-10 19:33:42
 * @FilePath: \srs-police-affairs\src\api\home\index.js
 * @Description:
 *
 * Copyright (c) 2023 by shuishen 1109946754@qq.com, All Rights Reserved.
 */
import request from "@/router/axios.js";
import request from "@/router/axios.js"
let equipmentNum = "";
let equipmentNum = ""
if (process.env.NODE_ENV == "development") {
  // 开发
  equipmentNum = window.BASE_URL_CONFIG.VUE_APP_OUTER_NET_EQUIPMENT;
    equipmentNum = window.BASE_URL_CONFIG.VUE_APP_OUTER_NET_EQUIPMENT
} else {
  // 部署
  equipmentNum = window.BASE_URL_CONFIG.VUE_APP_INTRANET_EQUIPMENT;
    equipmentNum = window.BASE_URL_CONFIG.VUE_APP_INTRANET_EQUIPMENT
}
/**
@@ -35,8 +35,8 @@
      // current: current,
      // size: size
    },
  });
};
    })
}
/**
 * 获取值班单位集合信息
@@ -48,24 +48,24 @@
    url: `/api/scheduling/scheduling/getSchedulingDeptList`,
    method: "get",
    params: params,
  });
};
    })
}
export const getAnswerPolices = (params) => {
  return request({
    url: `/api/doorplate/doorplate/acceptAlarmList`,
    method: "get",
    params: params,
  });
};
    })
}
export const getCallPolices = () => {
  return request({
    url: `/api/doorplate/doorplate/setOutAlarmList`,
    method: "get",
    params: {},
  });
};
    })
}
// 获取接警历史记录
export const getAlarmList = (params) => {
@@ -75,8 +75,8 @@
    params: {
      ...params,
    },
  });
};
    })
}
// 获取接警历史记录统计数据
export const getAlarmStatistics = (params) => {
@@ -86,8 +86,8 @@
    params: {
      ...params,
    },
  });
};
    })
}
// 获取处警历史
export const getActAsPoliceList = (alarmID, cjdwbh = "") => {
@@ -100,8 +100,8 @@
      alarmID,
      cjdwbh,
    },
  });
};
    })
}
// 案件统计数量接口查询
export const getCaseAll = (start, end, jjdwbh = "") => {
@@ -113,8 +113,8 @@
      end,
      jjdwbh,
    },
  });
};
    })
}
// 案件统计社区排行接口查询
export const getCaseRanking = (start, end, dwbh = "") => {
@@ -126,8 +126,8 @@
      end,
      dwbh,
    },
  });
};
    })
}
// 案件统计辖区排行接口查询
export const getCaseRankingArea = (start, end, dwbh = "") => {
@@ -139,8 +139,8 @@
      end,
      dwbh,
    },
  });
};
    })
}
// 获取设备统计数据
export const getEquipment = (jjdwbh = "") => {
@@ -150,8 +150,8 @@
    params: {
      jjdwbh,
    },
  });
};
    })
}
// 派出所责任区小区-获取三级区域数据
export const getPoliceStationTree = (type, id) => {
@@ -162,8 +162,8 @@
      type,
      id,
    },
  });
};
    })
}
// 现有小区模块
export const getAreaStatisticInfo = (type, deptId) => {
@@ -174,8 +174,8 @@
      type,
      deptId,
    },
  });
};
    })
}
// 获取设备分页数据
export const getEquipmentPaging = (params) => {
@@ -186,8 +186,8 @@
    params: {
      ...params,
    },
  });
};
    })
}
// 获取设备数据
export const getEquipmentAll = (params) => {
@@ -198,8 +198,8 @@
      ...params,
      deviceId: equipmentNum,
    },
  });
};
    })
}
// 获取现有小区详情弹窗
export const getLandDetail = (params) => {
@@ -207,8 +207,8 @@
    url: `/api/policeStationInfo/policeStationInfo/page`,
    method: "get",
    params: params,
  });
};
    })
}
//实有房屋统计
export const getVillageStatisticData = (params) => {
@@ -216,8 +216,8 @@
    url: `/api/villageDetail/villageDetail/getVillageStatisticData`,
    method: "get",
    params: params,
  });
};
    })
}
//实有房屋统计--详情
export const getVillageStatisticDetail = (params) => {
@@ -225,8 +225,8 @@
    url: `/api/villageDetail/villageDetail/page`,
    method: "get",
    params: params,
  });
};
    })
}
//关注场所统计
export const getPlaceOfConcernStatisticData = (params) => {
@@ -234,8 +234,8 @@
    url: `/api/placeOfConcern/placeOfConcern/getPlaceOfConcernStatisticData`,
    method: "get",
    params: params,
  });
};
    })
}
//关注场所统计--详情
export const getPlaceOfConcernStatisticDetail = (params) => {
@@ -243,8 +243,8 @@
    url: `/api/placeOfConcern/placeOfConcern/page`,
    method: "get",
    params: params,
  });
};
    })
}
//实有住宅和关注场所统计总数
export const getVillageDetailAndPlaceStatisticNumber = (params) => {
@@ -252,8 +252,8 @@
    url: `/api/placeOfConcern/placeOfConcern/getVillageDetailAndPlaceStatisticNumber`,
    method: "get",
    params: params,
  });
};
    })
}
//酒店住户列表
export const getCheckInInfo = (params) => {
@@ -261,8 +261,8 @@
    url: `/api/checkInInfo/checkInInfo/page`,
    method: "get",
    params,
  });
};
    })
}
// 九小场所相关数量
export const getNineStatistics = (params) => {
@@ -270,5 +270,52 @@
    url: `/api/blade-place/place/getNineStatistics`,
    method: "get",
    params,
  });
    })
}
/**
 * 获取地址总数 echarts
 * @param {*}
 * @returns
 */
export const getCountByType = (params) => {
    return request({
        url: `/api/realEstate/realEstate/countByType`,
        method: "get",
        params: {
            ...params,
        },
    })
}
/**
 * 获取制牌总数 echarts
 * @param {*}
 * @returns
 */
export const getCountByTypeMp = (params) => {
    return request({
        url: `/api/realEstate/realEstate/countByTypeMp`,
        method: "get",
        params: {
            ...params,
        },
    })
}
/**
 * 获取地址列表 echarts
 * @param {*}
 * @returns
 */
export const getRealEstatePage = (params) => {
    return request({
        url: `/api/realEstate/realEstate/page`,
        method: "get",
        params: {
            ...params,
        },
    })
};
src/components/mapAddressSearchBox/index.vue
New file
@@ -0,0 +1,262 @@
<template>
    <div>
        <div class="search-content">
            <el-input size="small" ref="searchTreeInput" clearable v-model="searchExtensivelyValue"
                @input="searchInputTree" placeholder="请输入搜索条件" style="cursor: pointer;"></el-input>
            <div v-show="searchExtensivelyValBoxShow" class="searchExtensively-val-box">
                <div class="dropdown-menu" @scroll="handleScroll">
                    <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray"
                        :key="index">
                        {{ item.address }}
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import { getRealEstatePage } from "@/api/home/index.js"
export default {
    name: "mapAddressSearchBox",
    data () {
        return {
            searchExtensivelyValue: "",
            isShowClearBtn: false,
            searchExtensivelyValBoxShow: false,
            searchExtensivelyArray: [],
            isClickValBox: false,
            pageIndex: 1,
            pageSize: 10,
            pages: 1
        }
    },
    watch: {
    },
    methods: {
        handleScroll (event) {
            const isScrollingDown = this.pageIndex <= this.pages
            console.log(isScrollingDown)
            if (isScrollingDown == true) {
                this.pageIndex++
                this.searchExtensivelyFocus()
            }
        },
        searchExtensivelyClick () {
            this.getSearchExtensively(
                "81503dad589f42bf9a9e5ea5e017f329",
                "361102",
                this.searchExtensivelyValue
            )
            this.searchExtensivelyValBoxShow = false
            if (this.searchExtensivelyArray.length > 0) {
                this.$EventBus.$emit("toPosition", {
                    siteJd: `${this.searchExtensivelyArray[0].location.lng}`,
                    siteWd: `${this.searchExtensivelyArray[0].location.lat}`,
                    siteGd: 200,
                })
                this.searchExtensivelyValue = this.searchExtensivelyArray[0].name
                this.$EventBus.$emit("mapClearLayer", {
                    layerName: "searchLayer",
                    type: "VectorLayer",
                })
                this.$EventBus.$emit("layerPointAdd", {
                    layerName: "searchLayer",
                    type: "label",
                    params: {
                        lng: `${this.searchExtensivelyArray[0].location.lng}`,
                        lat: `${this.searchExtensivelyArray[0].location.lat}`,
                        alt: 1,
                        text: this.searchExtensivelyArray[0].name,
                    },
                })
            }
        },
        clearSearchValue () {
            this.$store.commit("SET_MAPSEARCHPOPUP", false)
            this.$EventBus.$emit("mapRemoveLayer", {
                layerName: "searchLayer",
                type: "VectorLayer",
            })
            this.searchExtensivelyValue = ""
            this.searchExtensivelyChange()
        },
        searchExtensivelyChange (e) {
            // console.log(e)
        },
        searchExtensivelyFocus () {
            this.searchExtensivelyValBoxShow = true
            this.getSearchExtensively(
                this.searchExtensivelyValue
            )
        },
        // 大搜
        getSearchExtensively (address) {
            getRealEstatePage({ address: address, size: 1000 }).then(res => {
                const data = res.data.data.records
                if (data) {
                    data.forEach(element => {
                        this.searchExtensivelyArray.push(element)
                    })
                }
            })
        },
        searchExtensivelyVlaClick (item) {
            const { x2000: lng, y2000: lat } = item
            this.$store.commit("SET_MAPSEARCHPOPUP", false)
            this.searchExtensivelyValBoxShow = false
            this.isClickValBox = true
            this.searchExtensivelyValue = item.name
            this.$EventBus.$emit("toPosition", {
                siteJd: `${lng}`,
                siteWd: `${lat}`,
                siteGd: 1000,
            })
            this.$EventBus.$emit("mapClearLayer", {
                layerName: "searchLayer",
                type: "VectorLayer",
            })
            this.$store.commit("SET_MAPSEARCHPOPUP", true)
            this.$store.commit("SET_MAPSEARCHPOPUPDATA", {
                ...item,
                name: item.address
            })
            var popup = new global.DC.DivForms(global.viewer, {
                domId: "mapSearchPopup",
                position: [
                    global.DC.Transform.transformWGS84ToCartesian(
                        new global.DC.Position(
                            Number(lng),
                            Number(lat),
                            0
                        )
                    ),
                ],
            })
            this.$EventBus.$emit("layerPointAdd", {
                layerName: "searchLayer",
                type: "billboard",
                params: {
                    lng: `${lng}`,
                    lat: `${lat}`,
                    alt: 1,
                    url: "/img/icon/location.png",
                },
            })
        },
        searchInputTree (newText) {
            this.searchExtensivelyArray = []
            if (newText == "") {
                this.searchExtensivelyValBoxShow = false
                this.isShowClearBtn = false
            } else {
                this.searchExtensivelyValBoxShow = true
                if (this.isClickValBox) {
                    this.searchExtensivelyValBoxShow = false
                    this.isClickValBox = false
                } else {
                    this.$EventBus.$emit("mapClearLayer", {
                        layerName: "searchLayer",
                        type: "VectorLayer",
                    })
                }
                this.isShowClearBtn = true
                this.getSearchExtensively(
                    this.searchExtensivelyValue
                )
            }
        },
    },
    destroyed () {
        this.$store.commit("SET_MAPSEARCHPOPUP", false)
        this.$EventBus.$emit("mapRemoveLayer", {
            layerName: "searchLayer",
            type: "VectorLayer",
        })
    },
}
</script>
<style lang="scss" scoped>
.search-content {
    position: fixed;
    z-index: 99;
    left: 770px;
    top: 140px;
    width: 380px;
    height: 36px;
    display: flex;
    ::v-deep(.el-input) {
        flex: 1;
        display: flex;
        input {
            flex: 1;
            font-size: 14px;
        }
    }
}
.searchExtensively-val-box {
    display: flex;
    flex-direction: column;
    position: absolute;
    top: 60px;
    left: 50%;
    width: 380px;
    max-height: 160px;
    text-align: left;
    color: #fff;
    background: $el-dialog-bg-color;
    z-index: 1111;
    border-radius: 10px;
    overflow: hidden;
    transform: translate(-50%, 0);
    &>div {
        height: 100%;
        overflow-y: auto;
        div {
            padding: 0 10px;
            line-height: 36px;
            cursor: pointer;
        }
    }
}
.dropdown-menu {
    max-height: 300px;
    overflow-y: auto;
}
.dropdown-menu li.active {
    background-color: highlight;
}
</style>
src/components/mapSearchBox/index.vue
@@ -1,12 +1,13 @@
<template>
  <div>
    <div class="search-content">
      <el-input size="small" ref="searchTreeInput" clearable v-model="searchExtensivelyValue" @input="searchInputTree"
        placeholder="请输入搜索条件" style="cursor: pointer;"></el-input>
            <el-input size="small" ref="searchTreeInput" clearable v-model="searchExtensivelyValue"
                @input="searchInputTree" placeholder="请输入搜索条件" style="cursor: pointer;"></el-input>
    </div>
    <div v-show="searchExtensivelyValBoxShow" class="searchExtensively-val-box">
      <div class="dropdown-menu" @scroll="handleScroll">
        <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray" :key="index">
                <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray"
                    :key="index">
          {{ item.name }}
        </div>
      </div>
src/styles/media/index.scss
@@ -421,6 +421,37 @@
            .show-home-center {
              bottom: countSizeVh(42);
            }
                        .search-content {
                            left: countSizeVw(770, 1920);
                            top: countSizeVh(140);
                            width: countSizeVw(380, 1920);
                            height: countSizeVh(36);
                            input {
                                width: countSizeVw(380, 1920);
                                font-size: countSizeVh(18);
                                border: countSizeVh(1) solid rgb(0, 92, 169);
                                border-radius: countSizeVh(20);
                                // vertical-align: top;
                            }
                        }
                        .searchExtensively-val-box {
                            top: countSizeVh(60);
                            left: 50%;
                            width: countSizeVw(380, 1920);
                            max-height: countSizeVh(400);
                            border-radius: countSizeVh(10);
                            transform: translate(-50%, 0);
                            &>div {
                                div {
                                    padding: 0 countSizeVw(10, 1920);
                                    line-height: countSizeVh(36);
                                }
                            }
                        }
          }
          .house-page {
src/views/home/components/rightContainer.vue
@@ -112,19 +112,11 @@
        <div class="crowd-box" ref="crowdBox">
            <div class="box">
                <div class="title">现有设备</div>
                <el-main v-loading="equipmentEchartsLoading" element-loading-text="拼命加载中"
                <div class="title">地址总数:{{ addresCount }}</div>
                <el-main v-loading="CountByTypeEchartsLoading" element-loading-text="拼命加载中"
                    element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.5)"
                    style="height: calc(100% - 17.6%);">
                    <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>
                    <div style="overflow: hidden" id="CountByTypeEcharts" class="echarts-box"></div>
                </el-main>
            </div>
@@ -165,19 +157,11 @@
        <div class="crowd-box" ref="crowdBox">
            <div class="box">
                <div class="title">现有设备</div>
                <el-main v-loading="equipmentEchartsLoading" element-loading-text="拼命加载中"
                <div class="title">制牌总数:{{ zpCount }}</div>
                <el-main v-loading="CountByTypeMpEchartsLoading" element-loading-text="拼命加载中"
                    element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.5)"
                    style="height: calc(100% - 17.6%);">
                    <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>
                    <div style="overflow: hidden" id="CountByTypeMpEcharts" class="echarts-box"></div>
                </el-main>
            </div>
@@ -193,6 +177,9 @@
</template>
<script>
let myColor = ['#00e9db', '#00c0e9', '#0096f3', '#33CCFF', '#33FFCC', '#eb2100', '#eb3600', '#d0570e', '#d0a00e', '#34da62']
let countByTypeMyChart, countByTypeMpMyChart
const oneColor = ["#4caf50", "#2979ff", "#ffd600", "#0d47a1", "#b71c1c"]
const twoColor = [
    "#5470FE",
@@ -213,7 +200,11 @@
let equimentDataLength = 0
import recorderArr from "@/assets/data/equimentsDate/recorder.js"
import { getSchedulingList, getSchedulingDeptList } from "@/api/home/index.js"
import {
    getSchedulingList, getSchedulingDeptList,
    getCountByType,
    getCountByTypeMp
} from "@/api/home/index.js"
import { fontSize } from "@/utils/fontSize.js"
import { getCaseAll, getCaseRanking, getCaseRankingArea, getEquipment } from "@/api/home/index.js"
@@ -224,11 +215,16 @@
    inject: ["userInfo"],
    data () {
        return {
            addresCount: '',
            zpCount: '',
            eventTime: [],
            CountByTypeEchartsLoading: false,
            CountByTypeMpEchartsLoading: false,
            equipmentEchartsLoading: false,
            eventChangeEchartsLoading: false,
            schedulingNoDataText: ' ',
            schedulingLoading: false,
            pickerOptions: {
                shortcuts: [
                    {
@@ -274,6 +270,8 @@
            schedulingList: [],
            schedulingDeptList: [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
            policeStaionID: "",
            areaId: '',
            aoiId: '',
            showMJL: false,
            originTitle: ['值班', '副班、巡逻'],
            transTitle: [{ label: '人员', width: '28%', align: 'center' }, { label: '人员', width: '', align: 'left' },],
@@ -292,10 +290,6 @@
        }
        this.defaultDate()
        this.getSchedulingList()
        this.getSchedulingDeptList()
    },
    mounted () {
@@ -336,12 +330,15 @@
         * @description: 获取当前组件内所有数据
         * @return {*}
         */
        getHomeAllData (id = "") {
            this.policeStaionID = id
        getHomeAllData (deptId = "", areaId = '', aoiId = '') {
            console.log("26666666666666", deptId, areaId, aoiId)
            this.policeStaionID = deptId
            this.aoiId = aoiId
            this.areaId = areaId
            this.initEventChangeEcharts(this.caseInfoType)
            this.getCountByType()
            this.initEquipmentEcharts(this.linetype)
            this.getCountByTypeMp()
            if (rightTiming != null) {
                clearInterval(rightTiming)
@@ -349,73 +346,235 @@
            }
            rightTiming = setInterval(async () => {
                this.initEventChangeEcharts(this.caseInfoType)
                this.initEquipmentEcharts(this.linetype)
                this.getCountByType()
                this.getCountByTypeMp()
            }, 600000)
        },
        getSchedulingList () {
            this.schedulingLoading = true
            if (this.userInfo.dept_id == "1596020515064381442") {
                this.schedulingNoDataText = '  '
                const data = [
        getCountByType () {
            this.CountByTypeEchartsLoading = true
            this.disposeEchart()
            getCountByType({
                deptId: this.policeStaionID != '' ? this.policeStaionID : this.userInfo.dept_id,
                areaId: this.areaId,
                aoiId: this.aoiId
            }).then(res => {
                let data = res.data.data
                this.addresCount = 0
                data.forEach(item => {
                    this.addresCount = this.addresCount + item.count
                })
                let echartsData = [
                    {
                        person:
                            "徐星逸,任圣日,娄永攀,蔡善龙,陈小强,刘开勇,梅祥,吕镇,付建冬",
                        patrol: "章正椿,夏文翔,叶江明,黄俊龙,苏茯林,王顺祥",
                    }
                        type: 'unit',
                        num: 0,
                        name: '单元地址'
                    },
                    {
                        type: 'road_no',
                        num: 0,
                        name: '沿街门牌地址'
                    },
                    {
                        type: 'aoi',
                        num: 0,
                        name: '院落地址'
                    },
                    {
                        type: 'room',
                        num: 0,
                        name: '户室地址'
                    },
                    {
                        type: 'building',
                        num: 0,
                        name: '楼栋地址'
                    },
                ]
                const matrixData = data.map((row) => {
                    let arr = []
                    for (let key in row) {
                        arr.push(row[key])
                data.forEach(item => {
                    echartsData.forEach(i => {
                        if (item.type === i.type) {
                            i.num = item.count
                    }
                    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(() => {
                    this.tableHeight =
                        this.$refs.Container.offsetHeight -
                        this.$refs.caseBox.offsetHeight -
                        this.$refs.crowdBox.offsetHeight -
                        this.$refs.alertBoxTitle.offsetHeight
                })
                this.showMJL = true
                this.initCountByTypeEcharts(echartsData.map(i => i.name), echartsData.map(i => i.num), 1)
            })
        },
        getCountByTypeMp () {
            this.CountByTypeMpEchartsLoading = true
            this.disposeEchart()
            getCountByTypeMp({
                deptId: this.policeStaionID != '' ? this.policeStaionID : this.userInfo.dept_id,
                areaId: this.areaId,
                aoiId: this.aoiId
            }).then(res => {
                let data = res.data.data
                this.zpCount = 0
                data.forEach(item => {
                    this.zpCount = this.zpCount + item.count
                })
                let echartsData = [
                    {
                        type: 'unit',
                        num: 0,
                        name: '单元牌'
                    },
                    {
                        type: 'road_no',
                        num: 0,
                        name: '中门牌'
                    },
                    {
                        type: 'aoi',
                        num: 0,
                        name: '大门牌'
                    },
                    {
                        type: 'room',
                        num: 0,
                        name: '户室牌'
                    },
                    {
                        type: 'building',
                        num: 0,
                        name: '楼栋牌'
                    },
                ]
                data.forEach(item => {
                    echartsData.forEach(i => {
                        if (item.type === i.type) {
                            i.num = item.count
                        }
                    })
                })
                this.initCountByTypeEcharts(echartsData.map(i => i.name), echartsData.map(i => i.num), 2)
            })
        },
        initCountByTypeEcharts (xDate, yDate, type) {
            if (type === 1) {
                var chartDom = document.getElementById('CountByTypeEcharts')
                countByTypeMyChart = this.$echarts.init(chartDom)
                countByTypeMyChart.setOption(this.initCountyByOptions(xDate, yDate))
                this.CountByTypeEchartsLoading = false
            } else {
                const params = {
                    sameday: 1,
                    isPage: 1
                var chartMpDom = document.getElementById('CountByTypeMpEcharts')
                countByTypeMpMyChart = this.$echarts.init(chartMpDom)
                countByTypeMpMyChart.setOption(this.initCountyByOptions(xDate, yDate, '#3498db'))
                this.CountByTypeMpEchartsLoading = false
            }
        },
        initCountyByOptions (xDate, yDate, color = '#2ecc71') {
            const that = this
            return {
                tooltip: {
                    trigger: 'item',
                    formatter: params => {
                        let msg
                        if (params.value > 10000) {
                            msg = (params.value / 10000).toFixed(2)
                        } else {
                            msg = params.value
                }
                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)
                        msg = `${params.marker}${params.name}<strong style="margin-left:10px">${msg}</strong>`
                        return msg
                    },
                    backgroundColor: 'rgba(8, 56, 185, 0.9)',
                    borderColor: 'rgba(8, 56, 185, 0.9)',
                    textStyle: {
                        color: '#fff',
                        fontSize: fontSize(12)
                    }
                }, 500)
                },
                color: myColor,
                xAxis: {
                    type: 'value',
                    splitLine: {
                        show: false
                    },
                    axisLine: {
                        show: false
                    },
                    axisLabel: {
                        show: false,
                    },
                    axisTick: {
                        show: false
                    },
                },
                yAxis: {
                    type: 'category',
                    data: xDate,
                    axisLine: {
                        show: false
                    },
                    axisLabel: {
                        color: "#fff",
                        fontSize: fontSize(14)
                    },
                    axisTick: {
                        show: false
                    },
                },
                series: [
                    {
                        data: yDate,
                        type: 'bar',
                        barWidth: '50%',
                        barCategoryGap: '80%',
                        zlevel: 2,
                        cursor: that.userInfo.dept_id != '1596020515064381442' ? 'default' : 'pointer',
                        itemStyle: {
                            normal: {
                                color: color,
                                label: {
                                    show: true, //开启显示
                                    position: 'right', //在上方显示
                                    textStyle: { //数值样式
                                        color: color,
                                        fontSize: 10
                                    }
                                }
                            }
                        },
                    },
                ],
                grid: {
                    top: '2%',
                    left: '2%',
                    // right: '-1%',
                    right: '10%',
                    bottom: '2%',
                    containLabel: true
                }
            }
        },
        disposeEchart () {
            if (countByTypeMyChart != null && countByTypeMyChart != '' && countByTypeMyChart != undefined) {
                countByTypeMyChart.clear()
                countByTypeMyChart.dispose()
                countByTypeMyChart.off('click')
            }
            if (countByTypeMpMyChart != null && countByTypeMpMyChart != '' && countByTypeMpMyChart != undefined) {
                countByTypeMpMyChart.clear()
                countByTypeMpMyChart.dispose()
                countByTypeMpMyChart.off('click')
            }
        },
@@ -1344,6 +1503,7 @@
    destroyed () {
        window.removeEventListener("resize", this.echartsResize)
        this.disposeEchart()
        if (equipmentmyChart) {
            equipmentmyChart.dispose()
src/views/home/index.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:17
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2025-01-08 20:59:23
 * @LastEditTime: 2025-11-10 21:17:17
 * @FilePath: \srs-police-affairs\src\views\home\index.vue
 * @Description: 小区-栋-层-房屋
 *
@@ -20,7 +20,8 @@
      @changeActivityType="changeActivityType" ref="rightContainer"></right-container>
    <bottom-container v-show="isShowHomeContent" class="bottom-container" ref="bottomContainer"
      @changePoliceSituationHistoryType="changePoliceSituationHistoryType" @policeSituationChange="policeSituationChange"
            @changePoliceSituationHistoryType="changePoliceSituationHistoryType"
            @policeSituationChange="policeSituationChange"
      @policeSituationSiteClick="policeSituationSiteClick"></bottom-container>
    <scheduling-list ref="schedulingList"></scheduling-list>
@@ -63,8 +64,8 @@
        :options="housingOptions" :optionsName="'name'" :selectAllClass="selectHouseClass"></map-select>
    </div>
    <el-dialog :title="panoramaTitle" :visible.sync="panoramaVisible" :before-close="panoramaBeforeClose" :modal="true"
      :modal-append-to-body="false" :close-on-click-modal="false" class="panorama-details-box"
        <el-dialog :title="panoramaTitle" :visible.sync="panoramaVisible" :before-close="panoramaBeforeClose"
            :modal="true" :modal-append-to-body="false" :close-on-click-modal="false" class="panorama-details-box"
      :class="{ 'panorama-amplification': panoramaIcon == 'el-icon-reduce-btn' }">
      <template slot="title">
        <div class="title-box">
@@ -99,8 +100,8 @@
      </div>
    </el-dialog>
    <el-dialog :title="equimentTitle" :visible.sync="equimentVisible" :before-close="equimentBeforeClose" :modal="true"
      :modal-append-to-body="false" :close-on-click-modal="false" class="equiment-details-box">
        <el-dialog :title="equimentTitle" :visible.sync="equimentVisible" :before-close="equimentBeforeClose"
            :modal="true" :modal-append-to-body="false" :close-on-click-modal="false" class="equiment-details-box">
      <div class="header">
        <div>
          设备名称:
@@ -127,8 +128,10 @@
            </template>
          </el-table-column>
          <el-table-column :show-overflow-tooltip="true" prop="name" label="设备名称" min-width="320%"></el-table-column>
          <el-table-column :show-overflow-tooltip="true" prop="channelId" label="通道编号" min-width="160%"></el-table-column>
                    <el-table-column :show-overflow-tooltip="true" prop="name" label="设备名称"
                        min-width="320%"></el-table-column>
                    <el-table-column :show-overflow-tooltip="true" prop="channelId" label="通道编号"
                        min-width="160%"></el-table-column>
          <el-table-column :show-overflow-tooltip="true" prop="policeStationName" label="所属派出所"
            min-width="140%"></el-table-column>
          <el-table-column label="设备状态">
@@ -146,14 +149,16 @@
        </el-table>
        <div class="pages all-pagination-sty">
          <el-pagination background layout="prev, pager, next, total" :total="equimentPagingTotal" :page-size="pagesize"
            pager-count="3" :current-page="currentPage" @current-change="handleCurrentChange"></el-pagination>
                    <el-pagination background layout="prev, pager, next, total" :total="equimentPagingTotal"
                        :page-size="pagesize" pager-count="3" :current-page="currentPage"
                        @current-change="handleCurrentChange"></el-pagination>
        </div>
      </div>
    </el-dialog>
    <el-dialog title="警情信息" :visible.sync="policeSituationVisible" :modal="true" :close-on-click-modal="false"
      :modal-append-to-body="false" :before-close="policeSituationBeforeClose" class="policeSituation-details-box">
            :modal-append-to-body="false" :before-close="policeSituationBeforeClose"
            class="policeSituation-details-box">
      <div class="btn-change">
        <div :class="{ on: policeInformationType == '接警信息' }" @click="alarmOrActAsPolice('接警信息')">接警信息</div>
        <div :class="{ on: policeInformationType == '出警信息' }" @click="alarmOrActAsPolice('出警信息')">出警信息</div>
@@ -275,21 +280,24 @@
        </div>
      </div>
      <div v-show="policeInformationType == '出警信息' && JSON.stringify(CJdata) == '{}'" class="box no-data">暂无数据</div>
            <div v-show="policeInformationType == '出警信息' && JSON.stringify(CJdata) == '{}'" class="box no-data">暂无数据
            </div>
    </el-dialog>
    <el-dialog :title="dialogEquimentVideoTitle" :visible.sync="dialogEquimentVideoVisible" :modal-append-to-body="false"
      :before-close="dialogBeforeClose" :modal="true" :close-on-click-modal="false" class="car-video-box">
        <el-dialog :title="dialogEquimentVideoTitle" :visible.sync="dialogEquimentVideoVisible"
            :modal-append-to-body="false" :before-close="dialogBeforeClose" :modal="true" :close-on-click-modal="false"
            class="car-video-box">
      <hk-video class="video" ref="video" />
    </el-dialog>
    <el-dialog title="学校" :visible.sync="xxPopupShow" :before-close="landBeforeClose" :modal="true"
      :modal-append-to-body="false" :close-on-click-modal="false" class="land-details-box" v-loading="houseLoading"
      element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
            :modal-append-to-body="false" :close-on-click-modal="false" class="land-details-box"
            v-loading="houseLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
      element-loading-background="rgba(0, 0, 0, 0.5)">
      <el-table :data="houseArr" style="width: 100%"
        :header-cell-style="{ 'text-align': 'center', 'background-color': '#203c60', 'borderColor': '#324e75' }"
        :cell-style="{ 'text-align': 'center', 'borderColor': '#324e75', 'cursor': 'default' }" v-show="!houseLoading">
                :cell-style="{ 'text-align': 'center', 'borderColor': '#324e75', 'cursor': 'default' }"
                v-show="!houseLoading">
        <el-table-column :show-overflow-tooltip="true" prop="ZXXSQ" label="县(市、区)"></el-table-column>
        <el-table-column :show-overflow-tooltip="true" prop="XQPCS" label="辖区派出所"></el-table-column>
        <el-table-column :show-overflow-tooltip="true" prop="XXMC" label="校园名称"></el-table-column>
@@ -297,8 +305,8 @@
        <el-table-column :show-overflow-tooltip="true" prop="BGMJ" label="包干民警"></el-table-column>
        <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button :disabled="positionDisabled(scope.row)" @click="landRowClick(scope.row)" type="text" size="small"
              :title="'定位'">
                        <el-button :disabled="positionDisabled(scope.row)" @click="landRowClick(scope.row)" type="text"
                            size="small" :title="'定位'">
              <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
            </el-button>
          </template>
@@ -306,9 +314,9 @@
      </el-table>
    </el-dialog>
    <el-dialog :title="architectureTitle" :visible.sync="architectureShow" :before-close="landBeforeClose" :modal="true"
      :modal-append-to-body="false" :close-on-click-modal="false" class="land-details-box" v-loading="architectureLoad"
      element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
        <el-dialog :title="architectureTitle" :visible.sync="architectureShow" :before-close="landBeforeClose"
            :modal="true" :modal-append-to-body="false" :close-on-click-modal="false" class="land-details-box"
            v-loading="architectureLoad" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
      element-loading-background="rgba(0, 0, 0, 0.5)">
      <el-table :data="architectureTable" style="width: 100%"
        :header-cell-style="{ 'text-align': 'center', 'background-color': '#203c60', 'borderColor': '#324e75' }"
@@ -393,8 +401,8 @@
        <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button :disabled="positionDisabled(scope.row)" @click="landRowClick(scope.row)" type="text" size="small"
              :title="'定位'">
                        <el-button :disabled="positionDisabled(scope.row)" @click="landRowClick(scope.row)" type="text"
                            size="small" :title="'定位'">
              <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
            </el-button>
          </template>
@@ -428,16 +436,17 @@
        <el-table-column :show-overflow-tooltip="true" prop="neighborhoodName" label="居委会名称"></el-table-column>
        <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button :disabled="positionDisabled(scope.row)" @click="syldRowClick(scope.row)" type="text" size="small"
              :title="'定位'">
                        <el-button :disabled="positionDisabled(scope.row)" @click="syldRowClick(scope.row)" type="text"
                            size="small" :title="'定位'">
              <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
            </el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="syld_page all-pagination-sty">
        <el-pagination background layout="prev, pager, next, total" :page-size="syldPage.pageSize" :total="syldPage.total"
          :current-page="syldPage.currentPage" @current-change="handleSyldPageChange"></el-pagination>
                <el-pagination background layout="prev, pager, next, total" :page-size="syldPage.pageSize"
                    :total="syldPage.total" :current-page="syldPage.currentPage"
                    @current-change="handleSyldPageChange"></el-pagination>
      </div>
    </el-dialog>
@@ -477,10 +486,10 @@
          label="座机"></el-table-column>
        <el-table-column v-if="currentGzcsItemShow('job')" :show-overflow-tooltip="true" prop="job"
          label="职务"></el-table-column>
        <el-table-column v-if="currentGzcsItemShow('securityLevel')" :show-overflow-tooltip="true" prop="securityLevel"
          label="安保级别"></el-table-column>
        <el-table-column v-if="currentGzcsItemShow('attentionType')" :show-overflow-tooltip="true" prop="attentionType"
          label="关注类型"></el-table-column>
                <el-table-column v-if="currentGzcsItemShow('securityLevel')" :show-overflow-tooltip="true"
                    prop="securityLevel" label="安保级别"></el-table-column>
                <el-table-column v-if="currentGzcsItemShow('attentionType')" :show-overflow-tooltip="true"
                    prop="attentionType" label="关注类型"></el-table-column>
        <!-- <el-table-column v-if="currentGzcsItemShow('status')" :show-overflow-tooltip="true" prop="status"
                    label="状态"></el-table-column>
                <el-table-column v-if="currentGzcsItemShow('scale')" :show-overflow-tooltip="true" prop="scale"
@@ -491,24 +500,25 @@
                    prop="studentScale" label="学生规模"></el-table-column>
                <el-table-column v-if="currentGzcsItemShow('officeArea')" :show-overflow-tooltip="true" prop="officeArea"
                    label="办公区域"></el-table-column> -->
        <el-table-column v-if="currentGzcsItemShow('officeMain')" :show-overflow-tooltip="true" prop="officeMain"
          label="办公主体"></el-table-column>
                <el-table-column v-if="currentGzcsItemShow('officeMain')" :show-overflow-tooltip="true"
                    prop="officeMain" label="办公主体"></el-table-column>
        <el-table-column v-if="currentGzcsItemShow('hazardousGoodsName')" :show-overflow-tooltip="true"
          prop="hazardousGoodsName" label="危险品名称"></el-table-column>
        <el-table-column v-if="currentGzcsItemShow('remark')" :show-overflow-tooltip="true" prop="remark"
          label="备注"></el-table-column>
        <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button :disabled="positionDisabled(scope.row)" @click="gzcsRowClick(scope.row)" type="text" size="small"
              :title="'定位'">
                        <el-button :disabled="positionDisabled(scope.row)" @click="gzcsRowClick(scope.row)" type="text"
                            size="small" :title="'定位'">
              <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
            </el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="syld_page all-pagination-sty">
        <el-pagination background layout="prev, pager, next, total" :page-size="gzcsPage.pageSize" :total="gzcsPage.total"
          :current-page="gzcsPage.currentPage" @current-change="handleGzcsPageChange"></el-pagination>
                <el-pagination background layout="prev, pager, next, total" :page-size="gzcsPage.pageSize"
                    :total="gzcsPage.total" :current-page="gzcsPage.currentPage"
                    @current-change="handleGzcsPageChange"></el-pagination>
      </div>
    </el-dialog>
@@ -523,7 +533,8 @@
        <div>
          辖区选择:
          <el-select style="flex: 1;" size="small" v-model="areaChangeValue" placeholder="请选择">
            <el-option v-for="item in areaListData" :key="item.value" :label="item.label" :value="item.value"></el-option>
                        <el-option v-for="item in areaListData" :key="item.value" :label="item.label"
                            :value="item.value"></el-option>
          </el-select>
        </div>
@@ -537,7 +548,8 @@
        <el-table-column :show-overflow-tooltip="true" prop="hotelName" label="旅馆名称"></el-table-column>
        <el-table-column :show-overflow-tooltip="true" prop="legalRepresentative" label="法人"
          width="100"></el-table-column>
        <el-table-column :show-overflow-tooltip="true" prop="receptionTel" label="总台电话" width="120"></el-table-column>
                <el-table-column :show-overflow-tooltip="true" prop="receptionTel" label="总台电话"
                    width="120"></el-table-column>
        <el-table-column :show-overflow-tooltip="true" prop="hotelAddress" label="旅馆地址"></el-table-column>
        <el-table-column label="状态" align="center" width="50">
          <template slot-scope="scope">
@@ -546,8 +558,8 @@
        </el-table-column>
        <el-table-column label="操作" align="center" width="50">
          <template slot-scope="scope">
            <el-button :disabled="positionDisabled(scope.row)" @click="zhuSuClick(scope.row)" type="text" size="small"
              :title="'定位'">
                        <el-button :disabled="positionDisabled(scope.row)" @click="zhuSuClick(scope.row)" type="text"
                            size="small" :title="'定位'">
              <i class="el-icon-location" :style="{ color: positionColor(scope.row) }"></i>
            </el-button>
            <el-button @click="zhuHuInfoClick(scope.row)" type="text" size="small" :title="'入住信息'">
@@ -563,10 +575,10 @@
      </div>
    </el-dialog>
    <el-dialog :title="zhuHuInfoPopupTitle" :visible.sync="zhuHuInfoPopupShow" :modal="true" :modal-append-to-body="false"
      :close-on-click-modal="false" class="zhuHuInfo-details-box" v-loading="zhuHuInfoLoading"
      element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" :before-close="zhuHuBeforeClose"
      element-loading-background="rgba(0, 0, 0, 0.5)">
        <el-dialog :title="zhuHuInfoPopupTitle" :visible.sync="zhuHuInfoPopupShow" :modal="true"
            :modal-append-to-body="false" :close-on-click-modal="false" class="zhuHuInfo-details-box"
            v-loading="zhuHuInfoLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
            :before-close="zhuHuBeforeClose" element-loading-background="rgba(0, 0, 0, 0.5)">
      <div class="header">
        <!-- <div>
                    姓名:
@@ -578,8 +590,9 @@
                </div> -->
        <div>时间:</div>
        <div>
          <el-date-picker v-model="zhuHuInfoDate" type="daterange" range-separator="至" start-placeholder="开始日期"
            end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :picker-options="pickerOptions">
                    <el-date-picker v-model="zhuHuInfoDate" type="daterange" range-separator="至"
                        start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
                        :picker-options="pickerOptions">
          </el-date-picker>
        </div>
@@ -619,6 +632,8 @@
          @current-change="handleZhuHuInfoPageChange"></el-pagination>
      </div>
    </el-dialog>
        <map-address-search-box></map-address-search-box>
    <land-details-box ref="landDetailsBox" :policeStaionID="policeStaionID"></land-details-box>
    <area-details-box ref="areaDetailsBox" :policeStaionID="policeStaionID"></area-details-box>
@@ -1687,6 +1702,7 @@
    },
    policeStationSelect (item) {
            console.log(item, "111111111")
      if (this.policeStationCheckValue == item.name && this.policeStationCheckValue != '全部') return
      this.policeStationCheckValue = item.name
@@ -1748,10 +1764,12 @@
      if (item.name == "全部") {
        this.initAreaOptionLayer()
        this.$refs.leftContainer.getHomeAllDataByAreaId(this.policeStaionID, null)
                this.$refs.rightContainer.getHomeAllData(this.policeStaionID, item.id, '')
      } else {
        this.areaChecked = item
        this.getPoliceStationTree(3, item.id)
        this.$refs.leftContainer.getHomeAllDataByAreaId(this.policeStaionID, item.id)
                this.$refs.rightContainer.getHomeAllData(this.policeStaionID, item.id, '')
      }
    },
@@ -1759,8 +1777,10 @@
      this.housingCheckValue = item.name
      if (item.name == "全部") {
        this.initHousingLayer(this.areaChecked)
                this.$refs.rightContainer.getHomeAllData(this.policeStaionID, '', item.id)
      } else {
        this.initLivingLayer(item)
                this.$refs.rightContainer.getHomeAllData(this.policeStaionID, '', item.id)
      }
    },