Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/srs-police-affairs
23 files modified
4 files deleted
| | |
| | | } |
| | | .el-card__body, |
| | | .el-main { |
| | | padding: 20px; |
| | | padding: 0px; |
| | | } |
| | | .el-rate { |
| | | height: 20px; |
| | |
| | | |
| | | // 视频监控平台 |
| | | // 本地开发 |
| | | 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', |
| | |
| | | * @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: |
| | | * |
| | |
| | | <div class="content" :class="{ 'scale-dom': scaleDomFlag }"> |
| | | {{ mapSearchPopupData.name }} |
| | | </div> |
| | | <div class="bottom-arrow"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | 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; |
| | |
| | | * @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: |
| | | * |
| | |
| | | <div class="content" :class="{ 'scale-dom': scaleDomFlag }"> |
| | | {{ videoListPopupData.name }} |
| | | </div> |
| | | <div class="bottom-arrow"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | 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; |
| | |
| | | <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> |
| | |
| | | |
| | | //当下拉框数量超过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; |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | width: 320px; |
| | | height: 210px; |
| | | |
| | | .el-dialog__body { |
| | | flex: 1; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | |
| | | border-color: #66b1ff !important; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .btn-custom-cancel { |
| | | float: right; |
| | | margin-left: 10px; |
| | | } |
| | |
| | | } |
| | | |
| | | .selects-container .issel { |
| | | height: countSizeVh(170) !important; |
| | | max-height: countSizeVh(140) !important; |
| | | } |
| | | } |
| | | |
| | |
| | | .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); |
| | |
| | | } |
| | | |
| | | .list-show { |
| | | height: calc(100% - countSizeVh(50)); |
| | | // height: calc(100% - countSizeVh(50)); |
| | | |
| | | .search-box { |
| | | padding: countSizeVh(6) countSizeVw(6, 1920); |
| | |
| | | } |
| | | |
| | | .pages { |
| | | height: countSizeVh(40); |
| | | height: countSizeVh(80); |
| | | |
| | | &>div { |
| | | &>button { |
| | |
| | | |
| | | .el-dialog { |
| | | width: countSizeVw(320, 1920); |
| | | height: countSizeVh(210); |
| | | } |
| | | |
| | | .pick-color-box { |
| | |
| | | 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), |
| | |
| | | // 点击删除 |
| | | deletePoliceElement () { |
| | | this.$confirm('确定要删除吗?', '提示', { |
| | | cancelButtonClass: "btn-custom-cancel", |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | |
| | | // 点击删除 |
| | | deletePoliceElement () { |
| | | this.$confirm('确定要删除吗?', '提示', { |
| | | cancelButtonClass: "btn-custom-cancel", |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | // 删除标绘 |
| | | deletePlot () { |
| | | this.$confirm('确定要删除吗?', '提示', { |
| | | cancelButtonClass: "btn-custom-cancel", |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | |
| | | // 删除巡逻路线 |
| | | deleteLine () { |
| | | this.$confirm('确定要删除吗?', '提示', { |
| | | cancelButtonClass: "btn-custom-cancel", |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | |
| | | import { getEquipmentAll } from '@/api/home/index.js' |
| | | |
| | | import publicIndex from './components/publicIndex.vue' |
| | | import { initMapPosition } from '@/utils/mapPositionInit' |
| | | |
| | | |
| | | let loading = null |
| | |
| | | components: { publicIndex }, |
| | | |
| | | created () { |
| | | this.$nextTick(() => { |
| | | initMapPosition() |
| | | }) |
| | | |
| | | let userInfo = sessionStorage.getItem("userInfo") |
| | | if (userInfo != null) { |
| | | // 将JSON格式的对象解析为js对象 |
| | |
| | | }, |
| | | |
| | | destroyed () { |
| | | loading && loading.close() |
| | | |
| | | this.$EventBus.$emit('mapRemoveLayer', { |
| | | layerName: 'activityLayers', |
| | | type: 'VectorLayer' |
| | |
| | | if (xDate.length == 0) { |
| | | options = { |
| | | title: { |
| | | text: '暂无数据', |
| | | text: '暂无数据1', |
| | | x: 'center', |
| | | y: 'center', |
| | | textStyle: { |
| | |
| | | if (dataArr.length == 0) { |
| | | options = { |
| | | title: { |
| | | text: '暂无数据', |
| | | text: '暂无数据1', |
| | | x: 'center', |
| | | y: 'center', |
| | | textStyle: { |
| | |
| | | * @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: 小区-栋-层-房屋 |
| | | * |
| | |
| | | :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" |
| | |
| | | <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' }" |
| | |
| | | </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" |
| | |
| | | // 是否显示辖区 |
| | | areaPolygonLayerShow: true, |
| | | selectAllClass: false, |
| | | selectHouseClass: false, |
| | | // 是否显示第一级select |
| | | houseLayerShow: true, |
| | | carLayerShow: false, |
| | |
| | | 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 |
| | |
| | | if (this.policeStationCheckValue == item.name) return |
| | | |
| | | this.policeStationCheckValue = item.name |
| | | this.selectHouseClass = true |
| | | |
| | | if (item.name == "全部") { |
| | | this.clearPolygonLayer() |
| | |
| | | if (item.name == "全部") { |
| | | this.initAreaOptionLayer() |
| | | this.housingOptions = [] |
| | | this.housingCheckValue = '请选择小区' |
| | | |
| | | } else { |
| | | this.housingCheckValue = '请选择小区' |
| | | |
| | | this.getPoliceStationTree(3, item.id) |
| | | this.areaChecked = item |
| | | |
| | | |
| | | } |
| | | }, |
| | | |
| | |
| | | layerName: 'areaPolygonLabel', |
| | | flag: true |
| | | }) |
| | | |
| | | this.$EventBus.$emit('layerShow', { |
| | | layerName: 'polygonLayer', |
| | | flag: true |
| | | }) |
| | | |
| | | } else { |
| | | DataSourcesArray.forEach(i => i.show = false) |
| | | |
| | |
| | | layerName: 'areaPolygonLabel', |
| | | flag: false |
| | | }) |
| | | |
| | | this.$EventBus.$emit('layerShow', { |
| | | layerName: 'polygonLayer', |
| | | flag: false |
| | | }) |
| | | |
| | | } |
| | | }, |
| | | |
| | |
| | | }, |
| | | |
| | | destroyed () { |
| | | loading && loading.close() |
| | | |
| | | this.clearPolygonLayer() |
| | | |
| | | // cylinderLayer != null && cylinderLayer != undefined && cylinderLayer != '' && cylinderLayer.remove() |
| | | |
| | | |
| | | |
| | | this.$store.commit('SET_DETAILSPOPUP', { |
| | |
| | | * @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: 小区-栋-层-房屋 |
| | | * |
| | |
| | | <div class="two"> |
| | | <div> |
| | | <div>98</div> |
| | | <div>户籍人口</div> |
| | | </div> |
| | | <div> |
| | | <div>户籍人口</div> |
| | | </div> |
| | | <div> |
| | | <div style="color:#0E88FF">20</div> |
| | | <div>流动人口</div> |
| | | </div> |
| | |
| | | </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"> |
| | |
| | | <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"> |
| | |
| | | <!-- :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> |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | * @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: |
| | | * |
| | |
| | | <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 |
| | | }} |
| | |
| | | <!-- <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"> |
| | |
| | | menuRightList: [ |
| | | { |
| | | menuName: '视频监控', |
| | | path: '/layout/video', |
| | | path: '/layout/video/list', |
| | | pathT: '/layout/video/region', |
| | | childrenFlag: false, |
| | | children: [ |
| | | { |
| | |
| | | * @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 |
| | |
| | | } else { |
| | | params.childrenFlag = !params.childrenFlag |
| | | } |
| | | |
| | | }, |
| | | |
| | | flexibelClick () { |
| | |
| | | background: $table-body-tr-n-color; |
| | | cursor: pointer; |
| | | box-sizing: content-box; |
| | | |
| | | &.on { |
| | | color: rgba(252, 189, 86, 1); |
| | | } |
| | | } |
| | | |
| | | div:first-child { |
| | |
| | | <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"> |
| | |
| | | <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"> |
| | |
| | | </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> |
| | |
| | | let tc = null |
| | | let track = null |
| | | |
| | | import { initMapPosition } from '@/utils/mapPositionInit' |
| | | |
| | | export default { |
| | | inject: ['userInfo'], |
| | | |
| | | data () { |
| | | data() { |
| | | return { |
| | | emptyText: '', |
| | | navType: 0, |
| | | equimentLoading: false, |
| | | dialogTitle: '', |
| | |
| | | equimentTableData: [], |
| | | equimentPage: { |
| | | total: 0, |
| | | pageSize: 25, |
| | | pageSize: 22, |
| | | count: 0, |
| | | currentPage: 1 |
| | | }, |
| | |
| | | } |
| | | }, |
| | | |
| | | created () { |
| | | created() { |
| | | window.addEventListener('resize', this.setTableHeight) |
| | | |
| | | this.$nextTick(() => { |
| | | initMapPosition() |
| | | }) |
| | | }, |
| | | |
| | | mounted () { |
| | | mounted() { |
| | | this.$parent.$parent.resize('400px', true) |
| | | |
| | | this.navClick() |
| | |
| | | |
| | | methods: { |
| | | // 搜索框改变事件 |
| | | searchChange () { |
| | | searchChange() { |
| | | this.detailFlag = false |
| | | |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | |
| | | }) |
| | | |
| | | this.equimentPage.currentPage = 1 |
| | | this.equimentPage.count = 0 |
| | | // this.equimentTableData = [] |
| | | |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | | layerName: 'carLayers', |
| | |
| | | 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 = '' |
| | |
| | | incident: this.siteClick |
| | | }) |
| | | } else if (this.navType == 2) { |
| | | |
| | | this.$EventBus.$emit('layerPointAdd', { |
| | | layerName: 'policeMonitoringLayers', |
| | | type: 'billboard', |
| | |
| | | } |
| | | }) |
| | | |
| | | |
| | | 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 |
| | | |
| | |
| | | }, |
| | | |
| | | // 表格行点击查看定位 |
| | | rowClick (row) { |
| | | rowClick(row) { |
| | | if (row.lng == 0 || row.lat == 0) { |
| | | this.$message.error('暂无位置信息!') |
| | | |
| | |
| | | }, |
| | | |
| | | // 表格行点击查看轨迹 |
| | | equipmentTrack (row) { |
| | | equipmentTrack(row) { |
| | | this.detailFlag = true |
| | | |
| | | this.currentSelectEquipment = row |
| | | }, |
| | | |
| | | async play (row) { |
| | | async play(row) { |
| | | this.videoPlayShow = true |
| | | |
| | | if (this.flvPlayer != null) { |
| | |
| | | } |
| | | }, |
| | | |
| | | async getDevices (channelId) { |
| | | async getDevices(channelId) { |
| | | let flvAddress = '' |
| | | await getDevices(channelId).then(res => { |
| | | if ('data' in res.data) { |
| | |
| | | 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 = [] |
| | | |
| | |
| | | }, |
| | | |
| | | // 查看轨迹 |
| | | async lookTrack () { |
| | | async lookTrack() { |
| | | global.viewer.scene.globe.depthTestAgainstTerrain = false |
| | | |
| | | if (this.trackTime.length == 0) { |
| | |
| | | }, |
| | | |
| | | // 处理时间补零操作 |
| | | 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 => { |
| | |
| | | }, |
| | | |
| | | // 大搜 |
| | | 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) { |
| | |
| | | } |
| | | }, |
| | | |
| | | searchExtensivelyChange () { |
| | | searchExtensivelyChange() { |
| | | if (this.searchExtensivelyValue == '') { |
| | | this.searchExtensivelyValBoxShow = false |
| | | this.isShowClearBtn = false |
| | |
| | | }) |
| | | }, |
| | | |
| | | searchExtensivelyVlaClick (item) { |
| | | searchExtensivelyVlaClick(item) { |
| | | this.searchExtensivelyValBoxShow = false |
| | | this.searchExtensivelyValue = item.name |
| | | this.$EventBus.$emit('toPosition', { |
| | |
| | | }) |
| | | }, |
| | | |
| | | 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' |
| | |
| | | :deep(.el-main) { |
| | | padding: 0; |
| | | width: 100%; |
| | | overflow: hidden !important; |
| | | ; |
| | | } |
| | | } |
| | | |
| | |
| | | * @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: 辖区管理 |
| | | * |
| | |
| | | let timer = [] |
| | | |
| | | import { getActAsPoliceList, getAnswerPolices, getAlarmList } from "@/api/home/index.js" |
| | | import { initMapPosition } from '@/utils/mapPositionInit' |
| | | |
| | | export default { |
| | | inject: ['userInfo'], |
| | |
| | | created () { |
| | | const that = this |
| | | |
| | | this.$nextTick(() => { |
| | | initMapPosition() |
| | | }) |
| | | |
| | | this.defaultDate() |
| | | |
| | | this.$EventBus.$on('PoliceInforSiteClick', (params) => { |
| | |
| | | * @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: 辖区管理 |
| | | * |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | |
| | | export default { |
| | | created () { |
| | | |
| | | }, |
| | | methods: { |
| | | boxResize (val) { |
| | | this.$refs['video-target-box'].boxResize(val) |
| | |
| | | * @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: 辖区管理 |
| | | * |
| | |
| | | <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"> |
| | |
| | | |
| | | |
| | | |
| | | <span v-show="node.data.number && node.data.number != -1"> |
| | | <span v-show="'number' in node.data && node.data.number != -1"> |
| | | ({{ |
| | | node.data.number |
| | | }}个) |
| | |
| | | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | 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, |
| | |
| | | range: 100, |
| | | inputpopup: false, |
| | | changeBtn: false, |
| | | drawName: '', |
| | | drawType: 1, |
| | | props: { |
| | | label: 'name', |
| | |
| | | defaultExpandedKeys: [], |
| | | searchLazyFlag: true, |
| | | searchTreeData: [], |
| | | drawPlotData: {}, |
| | | chooseRangeColor: '#FF0000', |
| | | predefineColors: [ |
| | | '#ff4500', |
| | |
| | | '#c7158577' |
| | | ], |
| | | |
| | | videoPlayShow: false |
| | | videoPlayShow: false, |
| | | startDrawFlag: false, |
| | | |
| | | choosePlotColorAlpha: 50 |
| | | } |
| | | }, |
| | | |
| | | created () { |
| | | |
| | | }, |
| | | |
| | | mounted () { |
| | |
| | | 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 => { |
| | |
| | | }, |
| | | |
| | | 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', |
| | |
| | | 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 |
| | |
| | | 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 }) |
| | | }, |
| | | |
| | | // 大小重置 |
| | |
| | | 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() |
| | | }) |
| | | }, |
| | | |
| | |
| | | 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) |
| | |
| | | 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 |
| | | ) |
| | | ) |
| | | ] |
| | | }) |
| | | |
| | | }, |
| | |
| | | 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') |
| | | |
| | |
| | | <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"> |
| | |
| | | let rangeLineLayer = null |
| | | let plot = undefined |
| | | |
| | | import { initMapPosition } from '@/utils/mapPositionInit' |
| | | |
| | | export default { |
| | | inject: ['userInfo'], |
| | | |
| | |
| | | |
| | | 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 () { |
| | |
| | | * @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: |
| | | * |