guanqb
2023-04-02 83c41fcacfb07b7bddffb01510867d6c0b502f8e
Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/srs-police-affairs
23 files modified
4 files deleted
5496 ■■■■■ changed files
public/depend/element-ui.css 2 ●●● patch | view | raw | blame | history
public/static/config.js 2 ●●● patch | view | raw | blame | history
src/components/map/components/mapSearchPopup.vue 18 ●●●●● patch | view | raw | blame | history
src/components/map/components/videoListPopup.vue 19 ●●●●● patch | view | raw | blame | history
src/components/select/index.vue 24 ●●●● patch | view | raw | blame | history
src/styles/base/index.scss 15 ●●●●● patch | view | raw | blame | history
src/styles/media/index.scss 10 ●●●● patch | view | raw | blame | history
src/utils/mapPositionInit.js 2 ●●● patch | view | raw | blame | history
src/views/activity/components/drawBtnBox copy.vue 1005 ●●●●● patch | view | raw | blame | history
src/views/activity/components/policeCarChange.vue 1 ●●●● patch | view | raw | blame | history
src/views/activity/components/policePersonChange.vue 1 ●●●● patch | view | raw | blame | history
src/views/activity/components/polygonPlot.vue 5 ●●●●● patch | view | raw | blame | history
src/views/activity/components/polylinePlot.vue 1 ●●●● patch | view | raw | blame | history
src/views/activity/components/publicIndex copy.vue 772 ●●●●● patch | view | raw | blame | history
src/views/activity/index.vue 7 ●●●●● patch | view | raw | blame | history
src/views/activity/index1.vue 1457 ●●●●● patch | view | raw | blame | history
src/views/home/components/leftContainer.vue 4 ●●●● patch | view | raw | blame | history
src/views/home/index.vue 68 ●●●●● patch | view | raw | blame | history
src/views/house/index.vue 60 ●●●● patch | view | raw | blame | history
src/views/layout/index.vue 38 ●●●●● patch | view | raw | blame | history
src/views/police/index.vue 104 ●●●●● patch | view | raw | blame | history
src/views/policeInfor/index.vue 7 ●●●● patch | view | raw | blame | history
src/views/video/index.vue 7 ●●●● patch | view | raw | blame | history
src/views/video/list.vue 537 ●●●● patch | view | raw | blame | history
src/views/video/region - 副本.vue 1315 ●●●●● patch | view | raw | blame | history
src/views/video/region.vue 13 ●●●●● patch | view | raw | blame | history
vue.config.js 2 ●●● patch | view | raw | blame | history
public/depend/element-ui.css
@@ -8864,7 +8864,7 @@
}
.el-card__body,
.el-main {
  padding: 20px;
  padding: 0px;
}
.el-rate {
  height: 20px;
public/static/config.js
@@ -24,7 +24,7 @@
    // 视频监控平台
    // 本地开发
    VUE_APP_OUTER_NET_VIDEO: 'http://192.168.0.126:18185/api',
    VUE_APP_OUTER_NET_VIDEO: 'http://192.168.0.100:18185/api',
    // VUE_APP_OUTER_NET_VIDEO: 'http://192.168.0.129:18185/api',
    // 内网部署
    VUE_APP_INTRANET_VIDEO: 'http://10.141.11.11:18185/api',
src/components/map/components/mapSearchPopup.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2023-03-02 09:39:32
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-03-31 17:03:52
 * @LastEditTime: 2023-04-01 14:43:39
 * @FilePath: \srs-police-affairs\src\components\map\components\mapSearchPopup.vue
 * @Description: 
 * 
@@ -16,6 +16,7 @@
                <div class="content" :class="{ 'scale-dom': scaleDomFlag }">
                    {{ mapSearchPopupData.name }}
                </div>
                <div class="bottom-arrow"></div>
            </div>
        </div>
    </div>
@@ -65,6 +66,21 @@
    left: 0;
    z-index: 1 !important;
    &>.popup-box {
        position: relative;
    }
    .bottom-arrow {
        position: absolute;
        left: 50%;
        bottom: 0px;
        width: 0;
        height: 0;
        border: 10px solid transparent;
        border-top-color: $bg-color;
        transform: translate(-50%, 100%);
    }
    .scale-dom {
        transform: scale(3);
        transform-origin: left;
src/components/map/components/videoListPopup.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2023-03-02 09:39:32
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-03-07 11:04:16
 * @LastEditTime: 2023-04-01 14:41:41
 * @FilePath: \srs-police-affairs\src\components\map\components\videoListPopup.vue
 * @Description: 
 * 
@@ -16,6 +16,7 @@
                <div class="content" :class="{ 'scale-dom': scaleDomFlag }">
                    {{ videoListPopupData.name }}
                </div>
                <div class="bottom-arrow"></div>
            </div>
        </div>
    </div>
@@ -65,12 +66,28 @@
    left: 0;
    z-index: 1 !important;
    &>.popup-box {
        position: relative;
    }
    .bottom-arrow {
        position: absolute;
        left: 50%;
        bottom: 0px;
        width: 0;
        height: 0;
        border: 10px solid transparent;
        border-top-color: $bg-color;
        transform: translate(-50%, 100%);
    }
    .scale-dom {
        transform: scale(3);
        transform-origin: left;
    }
    .content {
        margin-bottom: 10px;
        padding: 0.5vh;
        width: 220px;
        background: $bg-color;
src/components/select/index.vue
@@ -1,26 +1,16 @@
<template>
    <div class="selects-container">
        <!-- 选择框 -->
        <div
            :class="{ 'selects-box-show': !optionsShow, 'selects-box-hide': optionsShow, 'select-choosable': selectAllClass }"
            class="selects-box"
            @click="selectClick"
        >
        <div :class="{ 'selects-box-show': !optionsShow, 'selects-box-hide': optionsShow, 'select-choosable': selectAllClass }"
            class="selects-box" @click="selectClick">
            <div class="text" v-text="checkValue"></div>
            <i class="el-icon-arrow-down"></i>
        </div>
        <!-- 下拉框大盒子 -->
        <div
            :class="{ 'options-box-show': !optionsShow, 'options-box-hide': optionsShow, issel: options.length >= 4 }"
            class="select-options"
            :style="{ height: 35 * options.length + 'px' }"
        >
        <div :class="{ 'options-box-show': !optionsShow, 'options-box-hide': optionsShow, issel: options.length >= 4 }"
            class="select-options">
            <!-- 下拉框 -->
            <div
                @click="cutValue(item, index)"
                v-for="(item, index) in options"
                :key="index"
            >{{ item[optionsName] }}</div>
            <div @click="cutValue(item, index)" v-for="(item, index) in options" :key="index">{{ item[optionsName] }}</div>
        </div>
    </div>
</template>
@@ -126,12 +116,12 @@
    //当下拉框数量超过4个时 使用固定高度
    .issel {
        height: 140px !important;
        max-height: 140px !important;
    }
    .select-options {
        width: 100%;
        height: 140px;
        max-height: 140px;
        overflow: auto;
        border: 1px solid rgba(20, 50, 123, 1); //下拉框边框颜色
        border-top: none;
src/styles/base/index.scss
@@ -676,7 +676,6 @@
        display: flex;
        flex-direction: column;
        width: 320px;
        height: 210px;
        .el-dialog__body {
            flex: 1;
@@ -688,11 +687,20 @@
            flex-wrap: wrap;
            &>div {
                width: 100%;
                height: 36px;
                line-height: 36px;
                display: flex;
                justify-content: flex-start;
                margin-bottom: 6px;
                &>div {
                    width: 100px;
                    line-height: 36px;
                }
                &.button {
                    justify-content: space-around;
                }
            }
@@ -1316,4 +1324,9 @@
            border-color: #66b1ff !important;
        }
    }
}
.btn-custom-cancel {
    float: right;
    margin-left: 10px;
}
src/styles/media/index.scss
@@ -357,7 +357,7 @@
                            }
                            .selects-container .issel {
                                height: countSizeVh(170) !important;
                                max-height: countSizeVh(140) !important;
                            }
                        }
@@ -435,10 +435,11 @@
                                .housing-estate-info {
                                    .housing-title {
                                        padding: 0 countSizeVw(10, 1920);
                                        padding: countSizeVh(4) countSizeVw(20, 1920);
                                        height: countSizeVh(40);
                                        line-height: countSizeVh(40);
                                        font-size: countSizeVh(28);
                                        box-sizing: content-box;
                                        &::after {
                                            top: countSizeVh(18);
@@ -930,7 +931,7 @@
                        }
                        .list-show {
                            height: calc(100% - countSizeVh(50));
                            // height: calc(100% - countSizeVh(50));
                            .search-box {
                                padding: countSizeVh(6) countSizeVw(6, 1920);
@@ -951,7 +952,7 @@
                                }
                                .pages {
                                    height: countSizeVh(40);
                                    height: countSizeVh(80);
                                    &>div {
                                        &>button {
@@ -2214,7 +2215,6 @@
                        .el-dialog {
                            width: countSizeVw(320, 1920);
                            height: countSizeVh(210);
                        }
                        .pick-color-box {
src/utils/mapPositionInit.js
@@ -7,7 +7,7 @@
    global.viewer.flyToPosition(
        new global.DC.Position(
            Number(homeCenter[0] + 0.046),
            Number(homeCenter[1] - 0.36),
            Number(homeCenter[1] - 0.284),
            Number(36000),
            Number(-3),
            Number(-45),
src/views/activity/components/drawBtnBox copy.vue
File was deleted
src/views/activity/components/policeCarChange.vue
@@ -174,6 +174,7 @@
        // 点击删除
        deletePoliceElement () {
            this.$confirm('确定要删除吗?', '提示', {
                cancelButtonClass: "btn-custom-cancel",
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
src/views/activity/components/policePersonChange.vue
@@ -220,6 +220,7 @@
        // 点击删除
        deletePoliceElement () {
            this.$confirm('确定要删除吗?', '提示', {
                cancelButtonClass: "btn-custom-cancel",
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
src/views/activity/components/polygonPlot.vue
@@ -13,7 +13,7 @@
            <div>
                <div class="value-name-box">设置透明度:</div>
                <div class="alpha">
                    <el-slider v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
                    <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
                </div>
            </div>
            <div v-show="!polygonName" class="placeholder"></div>
@@ -46,7 +46,7 @@
            <div class="line">
                <div class="value-name-box">设置透明度:</div>
                <div class="alpha">
                    <el-slider v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
                    <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
                </div>
            </div>
            <div class="placeholder" v-show="!isNeedPolygonType"></div>
@@ -183,6 +183,7 @@
        // 删除标绘
        deletePlot () {
            this.$confirm('确定要删除吗?', '提示', {
                cancelButtonClass: "btn-custom-cancel",
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
src/views/activity/components/polylinePlot.vue
@@ -129,6 +129,7 @@
        // 删除巡逻路线
        deleteLine () {
            this.$confirm('确定要删除吗?', '提示', {
                cancelButtonClass: "btn-custom-cancel",
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
src/views/activity/components/publicIndex copy.vue
File was deleted
src/views/activity/index.vue
@@ -179,6 +179,7 @@
import { getEquipmentAll } from '@/api/home/index.js'
import publicIndex from './components/publicIndex.vue'
import { initMapPosition } from '@/utils/mapPositionInit'
let loading = null
@@ -370,6 +371,10 @@
    components: { publicIndex },
    created () {
        this.$nextTick(() => {
            initMapPosition()
        })
        let userInfo = sessionStorage.getItem("userInfo")
        if (userInfo != null) {
            // 将JSON格式的对象解析为js对象
@@ -877,6 +882,8 @@
    },
    destroyed () {
        loading && loading.close()
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'activityLayers',
            type: 'VectorLayer'
src/views/activity/index1.vue
File was deleted
src/views/home/components/leftContainer.vue
@@ -388,7 +388,7 @@
            if (xDate.length == 0) {
                options = {
                    title: {
                        text: '暂无数据',
                        text: '暂无数据1',
                        x: 'center',
                        y: 'center',
                        textStyle: {
@@ -879,7 +879,7 @@
            if (dataArr.length == 0) {
                options = {
                    title: {
                        text: '暂无数据',
                        text: '暂无数据1',
                        x: 'center',
                        y: 'center',
                        textStyle: {
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: 2023-04-01 11:24:57
 * @LastEditTime: 2023-04-01 21:49:23
 * @FilePath: \srs-police-affairs\src\views\home\index.vue
 * @Description: 小区-栋-层-房屋
 *
@@ -54,13 +54,13 @@
                :optionsName="'name'"></map-select>
            <map-select class="map-select" @selectCheck="housingSelect" :checkValue="housingCheckValue"
                :options="housingOptions" :optionsName="'name'"></map-select>
                :options="housingOptions" :optionsName="'name'" :selectAllClass="selectHouseClass"></map-select>
        </div>
        <el-dialog :title="panoramaTitle" :modal="true" :visible.sync="panoramaVisible" :before-close="panoramaBeforeClose"
            :close-on-click-modal="true" class="panorama-details-box">
            <!-- <iframe src="http://vr.jxpskj.com/JXSFKZQJ/QJ/" style="width: 100%; height: 100%;" frameborder="0"></iframe>-->
            <iframe :src="panoramaVrUrl" style="width: 100%; height: 100%;" frameborder="0" />
            <iframe :src="panoramaVrUrl" style="width: 100%; height: 100%;" frameborder="0"></iframe>
        </el-dialog>
        <el-dialog :title="phoneTitle" :modal="true" :visible.sync="phoneVisible" :before-close="phoneBeforeClose"
@@ -131,17 +131,17 @@
    <el-dialog :title="keyPersonTitle" :modal="true" :visible.sync="keyPersonVisible" :before-close="personInfoClose"
        :close-on-click-modal="true" class="keyPerson-details-box">
        <!-- <div class="header" v-show="!isMaoJiaLin">
                                                                                                                                                                                                                                                                                                                                                                                                        <div>
                                                                                                                                                                                                                                                                                                                                                                                                            人员名称:
                                                                                                                                                                                                                                                                                                                                                                                                            <input type="text" v-model="peoplePoliceName" placeholder="请输入人员名称" />
                                                                                                                                                                                                                                                                                                                                                                                                        </div>
                                                                                                                                                                                                                                                                                                                                                                                                        <div>
                                                                                                                                                                                                                                                                                                                                                                                                            联系电话:
                                                                                                                                                                                                                                                                                                                                                                                                            <input type="text" v-model="peopleCallPhone" placeholder="请输入联系电话" />
                                                                                                                                                                                                                                                                                                                                                                                                        </div>
                                                                                                                                                                                                                                                                                                                                                                                                        <el-button type="primary" icon="el-icon-search" @click="searchPeopleDetail">搜索</el-button>
                                                                                                                                                                                                                                                                                                                                                                                                        <el-button type="primary" icon="el-icon-delete" @click="clearPeopleDetailSearchValue">清空</el-button>
                                                                                                                                                                                                                                                                                                                                                                                                    </div> -->
                    <div>
                         人员名称:
                         <input type="text" v-model="peoplePoliceName" placeholder="请输入人员名称" />
                     </div>
                     <div>
                         联系电话:
                         <input type="text" v-model="peopleCallPhone" placeholder="请输入联系电话" />
                     </div>
                     <el-button type="primary" icon="el-icon-search" @click="searchPeopleDetail">搜索</el-button>
                     <el-button type="primary" icon="el-icon-delete" @click="clearPeopleDetailSearchValue">清空</el-button>
                 </div> -->
            <el-table :data="keyPersonDetailArr" style="width: 100%"
                :header-cell-style="{ 'text-align': 'center', 'background-color': '#203c60', 'borderColor': '#324e75' }"
@@ -169,10 +169,10 @@
            </el-table>
            <!-- <div class="pages all-pagination-sty" ref="tablePagination" v-show="!isMaoJiaLin">
                                                                                                                                                                                                                                                                                                                                                                                       <el-pagination background layout="prev, pager, next, total" :page-size="peoplePage.pageSize"
                                                                                                                                                                                                                                                                                                                                                                                           :total="peoplePage.total" :current-page="peoplePage.currentPage"
                                                                                                                                                                                                                                                                                                                                                                                           @current-change="handlePersonPageChange"></el-pagination>
                                                                                                                                                                                                                                                                                                                                                                                 </div> -->
                               <el-pagination background layout="prev, pager, next, total" :page-size="peoplePage.pageSize"
                                   :total="peoplePage.total" :current-page="peoplePage.currentPage"
                                   @current-change="handlePersonPageChange"></el-pagination>
                         </div> -->
        </el-dialog>
        <el-dialog :title="equimentTitle" :modal="true" :visible.sync="equimentVisible" :before-close="equimentBeforeClose"
@@ -531,6 +531,7 @@
            // 是否显示辖区
            areaPolygonLayerShow: true,
            selectAllClass: false,
            selectHouseClass: false,
            // 是否显示第一级select
            houseLayerShow: true,
            carLayerShow: false,
@@ -797,8 +798,15 @@
                        id: 1
                    })
                } else {
                    this.housingOptions = res.data.data
                    this.initHousingLayer()
                    if (res.data.data.length == 0 || JSON.stringify(res.data.data) === "{}") {
                        this.selectHouseClass = true
                        this.housingCheckValue = '该责任区暂无小区'
                        return
                    }
                    this.selectHouseClass = false
                    this.housingCheckValue = '请选择小区'
                    this.housingOptions = res.data.data
                    this.housingOptions.unshift({
                        name: '全部',
                        id: 1
@@ -931,6 +939,7 @@
            if (this.policeStationCheckValue == item.name) return
            this.policeStationCheckValue = item.name
            this.selectHouseClass = true
            if (item.name == "全部") {
                this.clearPolygonLayer()
@@ -974,13 +983,11 @@
            if (item.name == "全部") {
                this.initAreaOptionLayer()
                this.housingOptions = []
                this.housingCheckValue = '请选择小区'
            } else {
                this.housingCheckValue = '请选择小区'
                this.getPoliceStationTree(3, item.id)
                this.areaChecked = item
            }
        },
@@ -1019,6 +1026,12 @@
                    layerName: 'areaPolygonLabel',
                    flag: true
                })
                this.$EventBus.$emit('layerShow', {
                    layerName: 'polygonLayer',
                    flag: true
                })
            } else {
                DataSourcesArray.forEach(i => i.show = false)
@@ -1026,6 +1039,12 @@
                    layerName: 'areaPolygonLabel',
                    flag: false
                })
                this.$EventBus.$emit('layerShow', {
                    layerName: 'polygonLayer',
                    flag: false
                })
            }
        },
@@ -2075,10 +2094,11 @@
    },
    destroyed () {
        loading && loading.close()
        this.clearPolygonLayer()
        // cylinderLayer != null && cylinderLayer != undefined && cylinderLayer != '' && cylinderLayer.remove()
        this.$store.commit('SET_DETAILSPOPUP', {
src/views/house/index.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:17
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-03-22 16:36:28
 * @LastEditTime: 2023-04-01 22:48:33
 * @FilePath: \srs-police-affairs\src\views\house\index.vue
 * @Description: 小区-栋-层-房屋
 * 
@@ -142,9 +142,9 @@
                                <div class="two">
                                    <div>
                                        <div>98</div>
                                                                                                                                  <div>户籍人口</div>
                                                                                                                              </div>
                                                                                                                              <div>
                                                                                                                                          <div>户籍人口</div>
                                                                                                                                      </div>
                                                                                                                                      <div>
                                        <div style="color:#0E88FF">20</div>
                                        <div>流动人口</div>
                                    </div>
@@ -165,17 +165,17 @@
                                </div>
                                <div>
                                    <div>120</div>
                                                                                                                        <div>出租</div>
                                                                                                                          </div>
                                                                                                                              <div>160</div>
                                                                                                                              <div>自住</div>
                                                                                                                          </div>
                                                                                                                              <div>8</div>
                                                                                                                          <div>
                                                                                                                              <div>空置</div>
                                                                                                                          </div>
                                                                                                                      </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </div>-->
                                                                                                                                <div>出租</div>
                                                                                                                                  </div>
                                                                                                                                      <div>160</div>
                                                                                                                                      <div>自住</div>
                                                                                                                                  </div>
                                                                                                                                      <div>8</div>
                                                                                                                                  <div>
                                                                                                                                      <div>空置</div>
                                                                                                                                  </div>
                                                                                                                              </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                </div>-->
                        <div class="house-element-info" v-if="isShowHouseBox">
                        <!-- 选择单元 -->
                        <div class="condo" v-show="isShowUnitChoose">
@@ -220,17 +220,17 @@
                                    <div>
                                        <span class="zizhu"></span>
                                        自住
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <span class="kongzhi"></span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        空置
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <span class="shangye"></span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        商业
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </div>-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <span class="kongzhi"></span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                空置
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <span class="shangye"></span>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                商业
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    </div>-->
                            <el-main v-loading="pictLoading" element-loading-background="rgba(17, 38, 163, .1)"
                                element-loading-text="数据正在加载中" element-loading-spinner="el-icon-loading"
                                v-show="isShowHouseBox">
@@ -267,8 +267,8 @@
                                                <!-- :class="[{ 'chuzu': value.houseType == '出租' }, { 'zizhu': value.houseType == '自住' }, { 'kongzhi': value.houseType == '空置' }, { 'shangye': value.houseType == '商业' }]" -->
                                                {{ value.properties.fojcu }}
                                                <!-- <div class="flow"></div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <div class="focus"></div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <div class="warning"></div>-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <div class="focus"></div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <div class="warning"></div>-->
                                            </div>
                                        </div>
                                    </div>
@@ -1518,9 +1518,7 @@
                        left: 10px;
                        right: 10px;
                        bottom: 4px;
                        background: linear-gradient(135deg,
                                rgb(233 202 154 / 74%),
                                rgb(254 254 254 / 0%));
                        background: linear-gradient(135deg, rgb(229 253 255 / 9%), rgb(43 124 255 / 90%));
                        z-index: -1;
                    }
                }
src/views/layout/index.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:24
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-03-18 09:00:11
 * @LastEditTime: 2023-04-01 16:30:54
 * @FilePath: \srs-police-affairs\src\views\layout\index.vue
 * @Description: 
 * 
@@ -33,9 +33,11 @@
            <div class="menu-list right">
                <div @mouseenter="item.childrenFlag = true" @mouseleave="item.childrenFlag = false" class="nav-list"
                    @click="goToPath(item)" v-for="(item, index) in menuRightList" :key="index">
                    <span :class="{ on: currentUrl.indexOf(item.path) != -1 }">{{ item.menuName }}</span>
                    <span :class="{ on: currentUrl.indexOf(item.path) != -1 || currentUrl.indexOf(item.pathT) != -1 }">{{
                        item.menuName }}</span>
                    <div class="sub-nav-list" v-show="item.children && item.childrenFlag">
                        <div v-for="(subItem, subIndex) in item.children" :key="subIndex" @click="goToPath(subItem)">
                        <div :class="{ on: currentUrl.indexOf(subItem.path) != -1 }"
                            v-for="(subItem, subIndex) in item.children" :key="subIndex" @click.stop="goToPath(subItem)">
                            {{
                                subItem.menuName
                            }}
@@ -67,16 +69,16 @@
        <!-- <div class="userIcon" :class="{on: userOn == true}" @click="openUser">
                <div class="userDetail" v-if="isShowUserDetail">
                    <div class="triangle"></div>
                                    <div class="userName">用户名:{{userName}}</div>
                                    <div class="userBtn">
                                        <div class="edit" @click="goTOLogin">
                                            >
                                            <img src="../../../public/img/editLogin.webp" alt />
                                        </div>
                                        <div class="return" @click="goTOFllow">返回引导页</div>
                                    </div>
                                </div>
                            </div>-->
                                                                                                <div class="userName">用户名:{{userName}}</div>
                                                                                                <div class="userBtn">
                                                                                                    <div class="edit" @click="goTOLogin">
                                                                                                        >
                                                                                                        <img src="../../../public/img/editLogin.webp" alt />
                                                                                                    </div>
                                                                                                    <div class="return" @click="goTOFllow">返回引导页</div>
                                                                                                </div>
                                                                                            </div>
                                                                                        </div>-->
        </div>
        <div class="main-container">
@@ -141,7 +143,8 @@
            menuRightList: [
                {
                    menuName: '视频监控',
                    path: '/layout/video',
                    path: '/layout/video/list',
                    pathT: '/layout/video/region',
                    childrenFlag: false,
                    children: [
                        {
@@ -249,7 +252,7 @@
         * @return {*} 没有返回值
         */
        goToPath (params) {
            if (params.children && params.children.length > 0) return
            console.log(params, 215555)
            if (params.path) {
                if (this.$route.path == params.path) return
@@ -257,7 +260,6 @@
            } else {
                params.childrenFlag = !params.childrenFlag
            }
        },
        flexibelClick () {
@@ -468,6 +470,10 @@
                        background: $table-body-tr-n-color;
                        cursor: pointer;
                        box-sizing: content-box;
                        &.on {
                            color: rgba(252, 189, 86, 1);
                        }
                    }
                    div:first-child {
src/views/police/index.vue
@@ -13,7 +13,7 @@
    <div class="police-page container">
        <div v-show="boxShow" class="container-content">
            <el-main v-loading="equimentLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
                element-loading-background="rgba(0, 0, 0, 0.2)">
                element-loading-background="rgba(0, 0, 0, 0.2)" style="overflow: hidden;padding: 0px;">
                <div class="switch-box" v-show="!detailFlag">
                    资源类别:
                    <el-select v-model="typeValue" @change="navClick" placeholder="请选择" class="type-select-css">
@@ -42,6 +42,7 @@
                                    <div class="state-box" :class="{ online: scope.row.status == '1' }"></div>
                                </template>
                            </el-table-column>
                            <div slot="empty" style="text-align: center;">{{ emptyText }}</div>
                            <el-table-column label="操作" align="center"
                                :min-width="typeValue == 0 || typeValue == 2 ? '30%' : '18%'">
                                <template slot-scope="scope">
@@ -59,7 +60,7 @@
                            </el-table-column>
                        </el-table>
                        <div class="pages all-pagination-sty" ref="tablePagination">
                        <div class="pages all-pagination-sty" ref="tablePagination" style="padding-top:-15px">
                            <el-pagination background layout="prev, pager, next" :page-size="equimentPage.pageSize"
                                :page-count="equimentPage.count" :pager-count="4" :current-page="equimentPage.currentPage"
                                @current-change="handleCurrentChange"></el-pagination>
@@ -145,11 +146,14 @@
let tc = null
let track = null
import { initMapPosition } from '@/utils/mapPositionInit'
export default {
    inject: ['userInfo'],
    data () {
    data() {
        return {
            emptyText: '',
            navType: 0,
            equimentLoading: false,
            dialogTitle: '',
@@ -193,7 +197,7 @@
            equimentTableData: [],
            equimentPage: {
                total: 0,
                pageSize: 25,
                pageSize: 22,
                count: 0,
                currentPage: 1
            },
@@ -204,11 +208,15 @@
        }
    },
    created () {
    created() {
        window.addEventListener('resize', this.setTableHeight)
        this.$nextTick(() => {
            initMapPosition()
        })
    },
    mounted () {
    mounted() {
        this.$parent.$parent.resize('400px', true)
        this.navClick()
@@ -222,7 +230,7 @@
    methods: {
        // 搜索框改变事件
        searchChange () {
        searchChange() {
            this.detailFlag = false
            this.$EventBus.$emit('mapClearLayer', {
@@ -231,6 +239,8 @@
            })
            this.equimentPage.currentPage = 1
            this.equimentPage.count = 0
            // this.equimentTableData = []
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'carLayers',
@@ -241,26 +251,39 @@
                layerName: 'policeMonitoringLayers',
                type: 'VectorLayer'
            })
            this.equimentLoading = true
            // 查询分页数据
            this.getEquipmentPaging({ type: this.navType })
        },
        // 设备分页处理
        handleCurrentChange (currentPage) {
        handleCurrentChange(currentPage) {
            this.equimentPage.currentPage = currentPage
            this.getEquipmentPaging({ type: this.navType })
        },
        // 获取设备分页数据
        getEquipmentPaging (params) {
            setTimeout(() => {
                this.equimentLoading = false
            }, 1000)
        getEquipmentPaging(params) {
            this.equimentTableData = []
            this.equimentLoading = true
            this.emptyText = ""
            getEquipmentPaging({ page: this.equimentPage.currentPage, count: this.equimentPage.pageSize, ...params, query: this.searchValue, dwbh: this.userInfo.dept_id }).then(res => {
                this.equimentTableData = []
                this.equimentPage.count = 0
                var total = res.data.data.total
                console.log(total, 6666)
                if (total == 0) {
                    if (this.navType == 0) {
                        this.emptyText = "暂无警车数据"
                    }
                    if (this.navType == 1) {
                        this.emptyText = "暂无摄像头数据"
                    }
                    if (this.navType == 2) {
                        this.emptyText = "暂无手台数据"
                    }
                    if (this.navType == 3) {
                        this.emptyText = "暂无执法记录仪数据"
                    }
                }
                if (res.data.data.list.length > 0) {
                    this.equimentTableData = res.data.data.list.map(item => {
                        let newName = ''
@@ -301,6 +324,7 @@
                                incident: this.siteClick
                            })
                        } else if (this.navType == 2) {
                            this.$EventBus.$emit('layerPointAdd', {
                                layerName: 'policeMonitoringLayers',
                                type: 'billboard',
@@ -323,18 +347,20 @@
                        }
                    })
                    this.equimentPage.count = res.data.data.pages
                    this.equimentLoading = false
                } else {
                    this.equimentTableData = []
                    this.equimentPage.total = 0
                    this.equimentLoading = false
                }
            })
        },
        // 类别切换
        navClick (type) {
        navClick(type) {
            if (type && type == this.navType) return
            this.detailFlag = false
@@ -366,7 +392,7 @@
        },
        // 表格行点击查看定位
        rowClick (row) {
        rowClick(row) {
            if (row.lng == 0 || row.lat == 0) {
                this.$message.error('暂无位置信息!')
@@ -381,13 +407,13 @@
        },
        // 表格行点击查看轨迹
        equipmentTrack (row) {
        equipmentTrack(row) {
            this.detailFlag = true
            this.currentSelectEquipment = row
        },
        async play (row) {
        async play(row) {
            this.videoPlayShow = true
            if (this.flvPlayer != null) {
@@ -430,7 +456,7 @@
            }
        },
        async getDevices (channelId) {
        async getDevices(channelId) {
            let flvAddress = ''
            await getDevices(channelId).then(res => {
                if ('data' in res.data) {
@@ -442,17 +468,17 @@
            return flvAddress
        },
        siteClick (e) {
        siteClick(e) {
            this.play(e.overlay.attrParams)
        },
        dialogBeforeClose () {
        dialogBeforeClose() {
            this.$refs.videoElement.pause()
            this.dialogVisible = false
        },
        // 轨迹返回
        goBack () {
        goBack() {
            this.detailFlag = !this.detailFlag
            this.trackTime = []
@@ -467,7 +493,7 @@
        },
        // 查看轨迹
        async lookTrack () {
        async lookTrack() {
            global.viewer.scene.globe.depthTestAgainstTerrain = false
            if (this.trackTime.length == 0) {
@@ -561,20 +587,20 @@
        },
        // 处理时间补零操作
        disposeTime (s) {
        disposeTime(s) {
            return s < 10 ? '0' + s : s
        },
        setTableHeight () {
        setTableHeight() {
            this.currentTableHeight = this.$refs.tableBox.offsetHeight - this.$refs.tablePagination.offsetHeight
        },
        // 大小重置
        boxResize (val) {
        boxResize(val) {
            this.boxShow = val
        },
        async getHistoricalTrack (params) {
        async getHistoricalTrack(params) {
            let positionArr = []
            await getHistoricalTrack(params).then(res => {
@@ -584,13 +610,13 @@
        },
        // 大搜
        getSearchExtensively (ak, region, query) {
        getSearchExtensively(ak, region, query) {
            getSearchExtensively(ak, region, query).then(res => {
                this.searchExtensivelyArray = res.data.result
            })
        },
        searchExtensivelyClick () {
        searchExtensivelyClick() {
            this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
            this.searchExtensivelyValBoxShow = false
            if (this.searchExtensivelyArray.length > 0) {
@@ -617,7 +643,7 @@
            }
        },
        searchExtensivelyChange () {
        searchExtensivelyChange() {
            if (this.searchExtensivelyValue == '') {
                this.searchExtensivelyValBoxShow = false
                this.isShowClearBtn = false
@@ -633,7 +659,7 @@
            })
        },
        searchExtensivelyVlaClick (item) {
        searchExtensivelyVlaClick(item) {
            this.searchExtensivelyValBoxShow = false
            this.searchExtensivelyValue = item.name
            this.$EventBus.$emit('toPosition', {
@@ -667,18 +693,18 @@
            })
        },
        searchExtensivelyFocus () {
        searchExtensivelyFocus() {
            this.searchExtensivelyValBoxShow = true
            this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue)
        },
        clearSearchValue () {
        clearSearchValue() {
            this.searchExtensivelyValue = ''
            this.searchExtensivelyChange()
        }
    },
    destroyed () {
    destroyed() {
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'carLayers',
            type: 'VectorLayer'
@@ -803,6 +829,8 @@
            :deep(.el-main) {
                padding: 0;
                width: 100%;
                overflow: hidden !important;
                ;
            }
        }
src/views/policeInfor/index.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:17
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-03-30 15:44:10
 * @LastEditTime: 2023-04-01 16:42:12
 * @FilePath: \srs-police-affairs\src\views\policeInfor\index.vue
 * @Description: 辖区管理
 * 
@@ -199,6 +199,7 @@
let timer = []
import { getActAsPoliceList, getAnswerPolices, getAlarmList } from "@/api/home/index.js"
import { initMapPosition } from '@/utils/mapPositionInit'
export default {
    inject: ['userInfo'],
@@ -230,6 +231,10 @@
    created () {
        const that = this
        this.$nextTick(() => {
            initMapPosition()
        })
        this.defaultDate()
        this.$EventBus.$on('PoliceInforSiteClick', (params) => {
src/views/video/index.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:17
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2022-11-18 10:06:55
 * @LastEditTime: 2023-04-01 16:36:06
 * @FilePath: \srs-police-affairs\src\views\video\index.vue
 * @Description: 辖区管理
 * 
@@ -16,7 +16,12 @@
</template>
<script>
export default {
    created () {
    },
    methods: {
        boxResize (val) {
            this.$refs['video-target-box'].boxResize(val)
src/views/video/list.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-08-18 16:18:17
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-03-31 17:07:47
 * @LastEditTime: 2023-04-01 17:47:19
 * @FilePath: \srs-police-affairs\src\views\video\list.vue
 * @Description: 辖区管理
 * 
@@ -13,8 +13,11 @@
    <div class="list container">
        <div v-show="boxShow" class="container-content">
            <div class="search-box">
                点位名称:
                <input v-model="searchValue" @input="searchChange" type="text" placeholder="请输入…" />
                <span style="display: inline-block; white-space:nowrap;">
                    点位名称:
                </span>
                <el-input size="small" placeholder="请输入…" v-model="searchValue" @change="searchChange" clearable>
                </el-input>
            </div>
            <div class="draw-btn">
@@ -41,7 +44,7 @@
                            &nbsp;
                            <span v-show="node.data.number && node.data.number != -1">
                            <span v-show="'number' in node.data && node.data.number != -1">
                                ({{
                                    node.data.number
                                }}个)
@@ -86,13 +89,11 @@
        <el-dialog :title="drawDialogTitle" :modal="false" :visible.sync="drawDialogVisible"
            :before-close="drawDialogBeforeClose" :close-on-click-modal="true" class="video-draw-box">
            <div>
                <div>名称:</div>
                <input type="text" v-model="drawName" placeholder="请输入绘制线的名称" />
            </div>
            <div v-show="inputpopup">
                <div>距离:</div>
                <input type="text" v-model="range" placeholder="请输入绘制线的范围" />
                <div>
                    <input type="text" v-model="range" placeholder="请输入缓冲范围" />
                </div>
            </div>
            <div class="line">
                <div class="value-name-box">颜色:</div>
@@ -102,8 +103,15 @@
                </div>
            </div>
            <div>
                <button @click="saveDrawInfo">保存</button>
                <button @click="cancelSaveDrawInfo">取消</button>
                <div class="value-name-box">设置透明度:</div>
                <div class="alpha">
                    <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
                </div>
            </div>
            <div class="button">
                <button @click="searchDraw">查询</button>
                <button @click="drawDialogBeforeClose">取消</button>
            </div>
        </el-dialog>
    </div>
@@ -121,29 +129,30 @@
    equipmentNum = window.BASE_URL_CONFIG.VUE_APP_INTRANET_EQUIPMENT
}
import EntityDraw from "@/utils/EntityDraw.js"
import { getEquipmentAll } from '@/api/home/index.js'
import {
    getDevices,
    getRegionList,
    insertRegionSaveList,
    getTreeDevices,
    getSearchTreeDevices,
    getTreeDevicesNearby
} from '@/api/video/index.js'
import flvjs from 'flv.js'
let graphicLayer = null
import { initMapPosition } from '@/utils/mapPositionInit'
let plot = undefined
let drawPlotLayers = null
let loading = null
let drawFlag = false
let drawPlotData = null
export default {
    inject: ['userInfo'],
    data () {
        return {
            monitoringList: [],
            monitoringSaveList: [],
            dialogTitle: '',
            drawDialogTitle: '绘制线面',
            dialogVisible: false,
@@ -154,7 +163,6 @@
            range: 100,
            inputpopup: false,
            changeBtn: false,
            drawName: '',
            drawType: 1,
            props: {
                label: 'name',
@@ -168,7 +176,6 @@
            defaultExpandedKeys: [],
            searchLazyFlag: true,
            searchTreeData: [],
            drawPlotData: {},
            chooseRangeColor: '#FF0000',
            predefineColors: [
                '#ff4500',
@@ -187,11 +194,15 @@
                '#c7158577'
            ],
            videoPlayShow: false
            videoPlayShow: false,
            startDrawFlag: false,
            choosePlotColorAlpha: 50
        }
    },
    created () {
    },
    mounted () {
@@ -204,10 +215,17 @@
                    clampToModel: true
                })
            }
            this.getEquipmentAll({ type: 1, deptid: this.userInfo.dept_id })
        })
    },
    methods: {
        // 计算透明度值
        formatTooltip (val) {
            return val / 100
        },
        async getDevices (channelId) {
            let flvAddress = ''
            await getDevices(channelId).then(res => {
@@ -269,22 +287,36 @@
        },
        drawDialogBeforeClose () {
            this.drawName = ''
            plot.stop()
            if (drawPlotLayers != null) {
                drawPlotLayers.clear()
            }
            this.$EventBus.$emit('mapRemoveLayer', {
                layerName: 'monitoringLayers',
                type: 'VectorLayer'
            })
            this.drawDialogVisible = false
        },
        searchChange (e) {
            if (e.target.value.trim() != '') {
            this.$store.commit('SET_VIDEOLISTPOPUP', false)
            this.inputpopup = false
            plot.stop()
            if (drawPlotLayers != null) {
                drawPlotLayers.clear()
            }
            drawPlotData = null
            if (e.trim() != '') {
                this.searchLazyFlag = false
                this.loading()
                this.$EventBus.$emit('mapClearLayer', {
                    layerName: 'treeValAllLayer',
                    type: 'VectorLayer'
                })
                this.searchTreeData = []
                getSearchTreeDevices({
                    deviceId: equipmentNum,
                    parentId: '361102',
@@ -292,20 +324,48 @@
                    name: this.searchValue.trim()
                }).then(res => {
                    this.searchTreeData = res.data.data
                    res.data.data.length && res.data.data.forEach(item => {
                        this.$EventBus.$emit('layerPointAdd', {
                            layerName: 'treeValAllLayer',
                            type: "billboard",
                            layerType: 'ClusterLayer',
                            params: {
                                ...item,
                                text: item.name,
                                lng: item.longitude,
                                lat: item.latitude,
                                url: item.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                                channelId: item.channelId,
                                status: item.status,
                                disableDepthTestDistance: Number.POSITIVE_INFINITY
                            },
                            incident: this.siteClick,
                            // mouseOverIncident: this.pointMouseOver,
                            // mouseOutIncident: this.pointMouseOut,
                        })
                    })
                    this.closeLoading()
                })
            } else {
                this.searchLazyFlag = true
                this.getEquipmentAll({ type: 1, deptid: this.userInfo.dept_id })
            }
        },
        // 封装方法绘制线面 type:polygon/polyline
        // draww (type) {
        //     if (graphicLayer == null) graphicLayer = new EntityDraw()
        //     graphicLayer.activate(type, (lastEventData) => {
        //     })
        // },
        draw (type) {
            const that = this
            drawFlag = false
            if (this.startDrawFlag == true) {
                drawFlag = true
                plot && plot.stop()
                drawFlag = false
                this.startDrawFlag = false
            }
            this.startDrawFlag = true
            if (type == 'polyline') {
                this.inputpopup = true
                this.drawType = 1
@@ -313,44 +373,36 @@
                this.inputpopup = false
                this.drawType = 2
            }
            plot && plot.draw(type, overlay => {
                if (drawFlag) return
                if (overlay) {
                    drawPlotData = overlay
                    drawPlotData.customType = type
                    that.range = 100
                    drawPlotLayers.addOverlay(overlay)
                    plot.edit(overlay)
                    if (overlay) {
                        drawPlotLayers.addOverlay(overlay)
                        plot.edit(overlay, (e) => {
                            this.drawDialogVisible = true
                            this.range = 100
                            this.drawPlotData = overlay
                            document.oncontextmenu = function () {
                                return false
                            }
                            this.getRegionList(type, overlay)
                        })
                    }
                    setTimeout(() => {
                        that.drawDialogVisible = true
                    }, 100)
                }
            }, { material: global.DC.Color.RED })
            }, { material: global.DC.Color.RED.withAlpha(0.5) })
        },
        removeDrawLayer () {
            this.$store.commit('SET_VIDEOLISTPOPUP', false)
            this.inputpopup = false
            this.monitoringList = this.monitoringSaveList
            plot.stop()
            if (drawPlotLayers != null) {
                drawPlotLayers.clear()
            }
            this.drawPlotData = []
            this.$EventBus.$emit('mapRemoveLayer', {
                layerName: 'monitoringLayers',
                type: 'VectorLayer'
            })
        },
        // 修改范围
        setRegion (range) {
            graphicLayer.addPolyLineGon(range, (lastEventData) => {
                // this.getRegionList('polyline', JSON.stringify(lastEventData))
            })
            drawPlotData = null
            this.getEquipmentAll({ type: 1, deptid: this.userInfo.dept_id })
        },
        // 大小重置
@@ -358,147 +410,104 @@
            this.boxShow = val
        },
        changeRange () {
            this.setRegion(this.range)
        searchDraw () {
            this.$store.commit('SET_VIDEOLISTPOPUP', false)
            this.searchLazyFlag = false
            this.searchValue = ''
            this.drawDialogVisible = false
            this.loading()
            const color = this.chooseRangeColor + ',' + this.choosePlotColorAlpha
            let r = parseInt(color.slice(1, 3), 16)
            let g = parseInt(color.slice(3, 5), 16)
            let b = parseInt(color.slice(5, 7), 16)
            let a = Math.floor(Number(color.split(',')[1]) * 2.55) ? Math.floor(Number(color.split(',')[1]) * 2.55) : 255
            drawPlotData.setStyle({
                material: global.DC.Namespace.Cesium.Color.fromBytes(r, g, b, a)
            })
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'treeValAllLayer',
                type: 'VectorLayer'
            })
            this.getRegionList(drawPlotData)
        },
        closeRangeInput () {
            this.inputpopup = false
        },
        getRegionList (type, data) {
        getRegionList ({ customType, positions }) {
            let positionStr = ''
            if (type == 'polyline') {
                data._positions.forEach(item => {
                    positionStr = positionStr + item._lng + ',' + item._lat + ';'
            const color = this.chooseRangeColor + ',' + this.choosePlotColorAlpha
            let r = parseInt(color.slice(1, 3), 16)
            let g = parseInt(color.slice(3, 5), 16)
            let b = parseInt(color.slice(5, 7), 16)
            let a = Math.floor(Number(color.split(',')[1]) * 2.55) ? Math.floor(Number(color.split(',')[1]) * 2.55) : 255
            if (customType == 'polyline') {
                positions.forEach(item => {
                    positionStr += `${item.lng},${item.lat};`
                })
                let coords = global.DC.GeoTools.polylineBuffer(positionStr, 100)
                let coords = global.DC.GeoTools.polylineBuffer(positionStr, this.range)
                let polygon = new global.DC.Polygon(coords)
                let position = ''
                polygon._positions.forEach(item => {
                    position += item._lng + ',' + item._lat + ';'
                polygon.setStyle({
                    material: global.DC.Namespace.Cesium.Color.fromBytes(r, g, b, a)
                })
                position += polygon._positions[0]._lng + ',' + polygon._positions[0]._lat + ';'
                drawPlotLayers.addOverlay(polygon)
                let position = ''
                polygon.positions.forEach(item => {
                    position += `${item.lng},${item.lat};`
                })
                position += polygon.positions[0].lng + ',' + polygon.positions[0].lat + ';'
                positionStr = position
            } else {
                data._positions.forEach(item => {
                    positionStr = positionStr + item._lng + ',' + item._lat + ';'
                positions.forEach(item => {
                    positionStr += `${item.lng},${item.lat};`
                })
                positionStr = positionStr + data._positions[0]._lng + ',' + data._positions[0]._lat + ';'
                positionStr = positionStr + positions[0].lng + ',' + positions[0].lat + ';'
            }
            this.searchTreeData = []
            getRegionList({
                page: 1,
                count: 20,
                range: positionStr
            }).then(res => {
                this.monitoringList = res.data.data.list
                this.searchTreeData = res.data.data
                this.$EventBus.$emit('mapRemoveLayer', {
                    layerName: 'monitoringLayers',
                    type: 'VectorLayer'
                res.data.data.length && res.data.data.forEach(item => {
                    this.$EventBus.$emit('layerPointAdd', {
                        layerName: 'treeValAllLayer',
                        type: "billboard",
                        layerType: 'ClusterLayer',
                        params: {
                            ...item,
                            text: item.name,
                            lng: item.longitude,
                            lat: item.latitude,
                            url: item.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                            channelId: item.channelId,
                            status: item.status,
                            disableDepthTestDistance: Number.POSITIVE_INFINITY
                        },
                        incident: this.siteClick,
                        // mouseOverIncident: this.pointMouseOver,
                        // mouseOutIncident: this.pointMouseOut,
                    })
                })
                this.initMonitoringIcon()
            })
        },
        /**
         * @description: 加载面调用接口返回的点数据
         * @return {*}
         */
        initMonitoringIcon () {
            this.monitoringList.forEach(item => {
                this.$EventBus.$emit('layerPointAdd', {
                    layerName: 'monitoringLayers',
                    type: "billboard",
                    params: {
                        name: item.name,
                        lng: item.longitude,
                        lat: item.latitude,
                        alt: 1,
                        url: '/img/icon/video.png',
                        deviceId: item.deviceId,
                        channelId: item.channelId
                    },
                    incident: this.siteClick
                })
            })
        },
        // 保存绘制的线面
        saveDrawInfo () {
            if (this.drawName == '') {
                this.$message({
                    message: '请输入名称',
                    type: 'error'
                })
            } else {
                let drawPositionStr = ''
                let extent = 0
                let width = 0
                if (this.drawType == 1) {
                    // 获取线坐标
                    this.drawPlotData._positions.forEach(item => {
                        drawPositionStr += item._lng + ' ' + item._lat + ','
                    })
                    drawPositionStr = drawPositionStr.slice(0, drawPositionStr.length - 1)
                    // 求线长度
                    let linePosition = []
                    this.drawPlotData._positions.forEach(item => {
                        linePosition.push([item._lng, item._lat])
                    })
                    let line = this.$turf.lineString(linePosition)
                    let length = this.$turf.length(line, { units: 'kilometers' })
                    extent = length.toFixed(3)
                } else {
                    // 获取面坐标
                    this.drawPlotData._positions.forEach(item => {
                        drawPositionStr += item.lng + ' ' + item.lat + ','
                    })
                    drawPositionStr += this.drawPlotData._positions[0]._lng + ' ' + this.drawPlotData._positions[0]._lat
                    // 求面面积
                    let polygonPosition = []
                    this.drawPlotData._positions.forEach(item => {
                        polygonPosition.push([item._lng, item._lat])
                    })
                    polygonPosition.push([this.drawPlotData._positions[0]._lng, this.drawPlotData._positions[0]._lat])
                    let polygon = this.$turf.polygon([polygonPosition])
                    let area = this.$turf.area(polygon)
                    extent = area.toFixed(3)
                }
                this.insertRegionSaveList({ type: this.drawType, positions: drawPositionStr, name: this.drawName, extent: extent, width: this.range, color: this.chooseRangeColor })
                this.drawDialogVisible = false
                this.drawName = ''
                if (drawPlotLayers != null) {
                    drawPlotLayers.clear()
                }
                this.$EventBus.$emit('mapRemoveLayer', {
                    layerName: 'monitoringLayers',
                    type: 'VectorLayer'
                })
            }
        },
        // 取消绘制线面
        cancelSaveDrawInfo () {
            this.drawDialogBeforeClose()
        },
        // type线面类型, positions坐标, name名称, width线宽度, extent线长度或面面积
        insertRegionSaveList (parmas) {
            insertRegionSaveList(parmas).then(res => {
                if (res.data.success) {
                    this.$message({
                        message: '保存成功',
                        type: 'warning'
                    })
                } else {
                    this.$message({
                        message: '保存失败'
                    })
                }
                this.closeLoading()
            })
        },
@@ -518,24 +527,31 @@
                sourceId = node.data.sourceId
            }
            console.log(node, 56)
            const status = node.label == "在线" ? { status: 1 } : node.label == "离线" ? { status: 0 } : {}
            await getTreeDevices({
                deviceId: equipmentNum,
                parentId,
                deptId: this.userInfo.dept_id,
                type,
                sourceId,
                ...status
            }).then(res => {
                data = res.data.data
                data.forEach(item => {
                    item.leaf = !item.parent
                if (data.length) {
                    data.forEach(item => {
                        item.leaf = !item.parent
                    if (!item.longitude && !item.latitude && item.leaf) {
                        item.disabled = true
                    }
                })
                        if (!item.longitude && !item.latitude && item.leaf) {
                            item.disabled = true
                        }
                    })
                data[0].leaf == false && node.level < 2 && this.defaultExpandedKeys.push(data[0].id)
                    data[0].leaf == false && node.level < 2 && this.defaultExpandedKeys.push(data[0].id)
                }
            })
            return resolve(data)
@@ -562,59 +578,23 @@
                siteGd: 600,
            })
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'treeValLayer',
                type: 'VectorLayer'
            this.$store.commit('SET_VIDEOLISTPOPUP', true)
            this.$store.commit('SET_VIDEOLISTPOPUPDATA', {
                ...node
            })
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'treeValAllLayer',
                type: 'VectorLayer'
            })
            this.$EventBus.$emit('layerPointAdd', {
                layerName: 'treeValLayer',
                type: "billboard",
                params: {
                    name: node.name,
                    lng: node.longitude,
                    lat: node.latitude,
                    alt: 1,
                    url: node.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                    channelId: node.id,
                    status: node.status
                },
                incident: this.siteClick,
                mouseOverIncident: this.pointMouseOver,
                mouseOutIncident: this.pointMouseOut,
                // pointMouseMove: this.pointMouseMove
            })
            getTreeDevicesNearby({ longitude, latitude, mileage: 1 }).then(res => {
                res.data.data.forEach(item => {
                    if (item.longitude && item.latitude && item.channelId != node.id) {
                        this.$EventBus.$emit('layerPointAdd', {
                            layerName: 'treeValAllLayer',
                            type: "billboard",
                            layerType: 'ClusterLayer',
                            params: {
                                ...item,
                                text: item.name,
                                lng: item.longitude,
                                lat: item.latitude,
                                alt: 1,
                                url: item.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                                channelId: item.channelId,
                                status: item.status
                            },
                            incident: this.siteClick,
                            mouseOverIncident: this.pointMouseOver,
                            mouseOutIncident: this.pointMouseOut,
                            // pointMouseMove: this.pointMouseMove
                        })
                    }
                })
            var popup = new global.DC.DivForms(global.viewer, {
                domId: 'videoListPopup',
                position: [
                    global.DC.Transform.transformWGS84ToCartesian(
                        new global.DC.Position(
                            Number(node.longitude),
                            Number(node.latitude),
                            0
                        )
                    )
                ]
            })
        },
@@ -657,30 +637,75 @@
        pointMouseOut (e) {
            this.$store.commit('SET_VIDEOLISTPOPUP', false)
        },
        // 获取设备列表
        getEquipmentAll (params, layerName) {
            this.loading()
            this.$EventBus.$emit('mapClearLayer', {
                layerName: 'treeValAllLayer',
                type: 'VectorLayer'
            })
            initMapPosition()
            getEquipmentAll({ ...params, deptId: this.userInfo.dept_id }).then(res => {
                if (params.type == 1 && res.data.data) {
                    res.data.data.forEach(item => {
                        if (item.longitude && item.latitude) {
                            this.$EventBus.$emit('layerPointAdd', {
                                layerName: 'treeValAllLayer',
                                type: "billboard",
                                layerType: 'ClusterLayer',
                                params: {
                                    ...item,
                                    text: item.name,
                                    lng: item.longitude,
                                    lat: item.latitude,
                                    url: item.status == 1 ? '/img/icon/video.png' : '/img/icon/video-off.png',
                                    channelId: item.channelId,
                                    status: item.status,
                                    disableDepthTestDistance: Number.POSITIVE_INFINITY
                                },
                                incident: this.siteClick,
                                // mouseOverIncident: this.pointMouseOver,
                                // mouseOutIncident: this.pointMouseOut,
                            })
                        }
                    })
                }
                this.closeLoading()
            })
        },
        loading () {
            loading = this.$loading({
                lock: true,
                text: '拼命加载中',
                spinner: 'el-icon-loading',
                background: 'rgba(0, 0, 0, 0.2)'
            })
        },
        closeLoading () {
            if (loading != null) {
                setTimeout(() => {
                    loading.close()
                }, 1000)
            }
        },
    },
    destroyed () {
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'monitoringLayers',
            type: 'VectorLayer'
        })
        loading && loading.close()
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'searchLayer',
            type: 'VectorLayer'
        })
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'treeValLayer',
            type: 'VectorLayer'
        })
        this.$store.commit('SET_VIDEOLISTPOPUP', false)
        this.$EventBus.$emit('mapRemoveLayer', {
            layerName: 'treeValAllLayer',
            type: 'VectorLayer'
        })
        // graphicLayer.destroy()
        this.$parent.$parent.$parent.resize('0px')
src/views/video/region - 副本.vue
File was deleted
src/views/video/region.vue
@@ -35,9 +35,9 @@
                                <el-table-column prop="name" label="范围名称" min-width="50%"></el-table-column>
                                <el-table-column prop="extent" label="长度km/面积㎡" min-width="50%">
                                    <!-- <template slot-scope="scope">
                                                                                <span>{{ scope.row.extent }}</span>
                                                                                <span>千米</span>
                                                                            </template>-->
                                                                                    <span>{{ scope.row.extent }}</span>
                                                                                    <span>千米</span>
                                                                                </template>-->
                                </el-table-column>
                                <el-table-column prop="id" label="操作" min-width="50%">
                                    <template slot-scope="scope">
@@ -274,6 +274,8 @@
let rangeLineLayer = null
let plot = undefined
import { initMapPosition } from '@/utils/mapPositionInit'
export default {
    inject: ['userInfo'],
@@ -382,8 +384,11 @@
    created () {
        // this.getVideoList(1, 100)
        this.getRegionSaveList(this.currentPage, this.pagesize, this.userInfo.dept_id)
        this.$nextTick(() => {
            initMapPosition()
        })
        this.getRegionSaveList(this.currentPage, this.pagesize, this.userInfo.dept_id)
    },
    mounted () {
vue.config.js
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2022-09-07 09:37:07
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2023-04-01 11:02:13
 * @LastEditTime: 2023-04-01 21:50:03
 * @FilePath: \srs-police-affairs\vue.config.js
 * @Description:
 *