| | |
| | | * @Author: shuishen 1109946754@qq.com |
| | | * @Date: 2022-08-18 16:18:17 |
| | | * @LastEditors: shuishen 1109946754@qq.com |
| | | * @LastEditTime: 2023-03-06 14:56:01 |
| | | * @LastEditTime: 2023-03-06 17:33:41 |
| | | * @FilePath: \srs-police-affairs\src\views\activity\index.vue |
| | | * @Description: 安保活动 |
| | | * @Description: 安保活 |
| | | * |
| | | * Copyright (c) 2022 by shuishen 1109946754@qq.com, All Rights Reserved. |
| | | --> |
| | |
| | | <input type="text" placeholder="请输入…" v-model="searchActivity" class="category-input" |
| | | @input="inputChange" /> |
| | | <div class="clear" v-show="isShowActivityClearBtn" @click="clearActivitySearchValue" title="清空"> |
| | | <img src="../../../public/img/icon/clear.png" alt /> |
| | | <img src="/img/icon/clear.png" alt /> |
| | | </div> |
| | | <button class="category-button el-icon-search" @click="searchClick"></button> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-show="dialogVisible && isShowActivityEditBox" class="draw-btn-box"> |
| | | <div class="left"> |
| | | <h3>预案布置</h3> |
| | | <div> |
| | | <span>警力资源:</span> |
| | | <ul> |
| | | <li> |
| | | <button @click="draw('billboard', 'policeman')" title="警员"> |
| | | <img src="../../../public/img/icon/police-people-btn.png" style="height:100%" /> |
| | | </button> |
| | | </li> |
| | | <li> |
| | | <button @click="draw('billboard', 'policecar')" title="警车"> |
| | | <img src="../../../public/img/icon/car-btn.png" style="height:100%" /> |
| | | </button> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | <div> |
| | | <span>作战标绘:</span> |
| | | |
| | | <ul> |
| | | <li> |
| | | <button @click="drawArrow('attack_arrow')" title="进攻箭头">进攻箭头</button> |
| | | </li> |
| | | <li> |
| | | <button @click="drawArrow('double_arrow')" title="双箭头">双箭头</button> |
| | | </li> |
| | | <li> |
| | | <button @click="drawArrow('fine_arrow')" title="直箭头">直箭头</button> |
| | | </li> |
| | | <li> |
| | | <button @click="drawArrow('tailed_attack_arrow')" title="燕尾箭头">燕尾箭头</button> |
| | | </li> |
| | | <li> |
| | | <button @click="drawArrow('polygon')" title="多边形">多边形</button> |
| | | </li> |
| | | <li> |
| | | <button @click="drawArrow('billboard', 'icon1')" title="头像1">头像1</button> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | <div> |
| | | <span>巡逻路线:</span> |
| | | <ul> |
| | | <li> |
| | | <!-- <el-button |
| | | ></el-button>--> |
| | | <button @click="draw('polyline', 'policecar')" title="巡逻路线"> |
| | | <img src="../../../public/img/icon/route1.png" style="height:100%" /> |
| | | </button> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | <div class="right" v-if="false"> |
| | | <ul> |
| | | <li> |
| | | <button @click="removeAllArrow()">清除</button> |
| | | </li> |
| | | <li> |
| | | <button>保存</button> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | <draw-btn-box ref="DRAWBTNBOX" :dialogVisible="dialogVisible" :isShowActivityEditBox="isShowActivityEditBox" |
| | | :showingSecurityId="showingSecurityId" :policeSwitch="policeSwitch" :polylineBtnSwitch="polylineBtnSwitch" |
| | | :arrowBtnSwitch="arrowBtnSwitch" :policeIconId="policeIconId" :lineWidth="lineWidth"></draw-btn-box> |
| | | |
| | | <div class="second-container" :class="{ 'spread': boxShow, 'take-back': !boxShow }"> |
| | | <el-tree :data="treeData" show-checkbox node-key="id" @check="treeCheckClick"></el-tree> |
| | | </div> |
| | | <div v-show="dialogVisible" class="activity-details-box"> |
| | | <div class="title"> |
| | | 活动详情 |
| | | <div class="close" @click="closeActivityDetails"></div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">活动名称:</div> |
| | | <div class="category-value">{{ activityDetails.name }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">活动时间:</div> |
| | | <div class="category-value">{{ activityDetails.startTime }} 至 {{ activityDetails.endTime }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">负责人:</div> |
| | | <div class="category-value">{{ activityDetails.person }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">联系方式:</div> |
| | | <div class="category-value">{{ activityDetails.contact }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">负责单位:</div> |
| | | <div class="category-value">{{ activityDetails.company }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">所属辖区:</div> |
| | | <div class="category-value">{{ activityDetails.deptName }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">人数:</div> |
| | | <div class="category-value">{{ activityDetails.number }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">活动地点:</div> |
| | | <div class="category-value">{{ activityDetails.place }}</div> |
| | | </div> |
| | | <div class="row-box"> |
| | | <div class="category">活动内容:</div> |
| | | <div class="category-value">{{ activityDetails.content }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <activity-detail :dialogVisible="dialogVisible" :activityDetails="activityDetails" |
| | | @closeActivityDetails="closeActivityDetails"></activity-detail> |
| | | |
| | | <map-search-box></map-search-box> |
| | | |
| | | <div class="plan-control" v-show="dialogVisible && (isHavePolice || isHaveArrow || isHaveLine)"> |
| | | <div class="row-box" v-show="isHavePolice"> |
| | |
| | | </ul> |
| | | </div> |
| | | |
| | | <div class="search-content"> |
| | | <input v-model="searchExtensivelyValue" @input="searchExtensivelyChange" @focus="searchExtensivelyFocus" |
| | | type="text" placeholder="请输入搜索条件" /> |
| | | <div class="clear" v-show="isShowClearBtn" @click="clearSearchValue" title="清空"> |
| | | <img src="../../../public/img/icon/clear.png" alt /> |
| | | |
| | | <div> |
| | | <div class="item video1" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video1"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video1"> |
| | | <el-select size="small" v-model="monitor.type1" @change="((val) => { navClick(val, 1) })" |
| | | placeholder="请选择" ref="videoSelect1"> |
| | | <el-option v-for="item in monitorOption" :key="item.value" :label="item.label" :value="item.value" |
| | | class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"> |
| | | </div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video1"> |
| | | <video id="videoElement1" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video1"> |
| | | {{ playVideoHolders.text1 }} |
| | | </div> |
| | | </div> |
| | | <button @click="searchExtensivelyClick" class="el-icon-search"></button> |
| | | |
| | | <div class="item video2" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video2"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video2"> |
| | | <el-select size="small" v-model="monitor.type2" @change="((val) => { navClick(val, 2) })" |
| | | placeholder="请选择" ref="videoSelect2"> |
| | | <el-option v-for="item in monitorOption" :key="item.value" :label="item.label" :value="item.value" |
| | | class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"> |
| | | </div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video2"> |
| | | <video id="videoElement2" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video2"> |
| | | {{ playVideoHolders.text2 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="item video3" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video3"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video3"> |
| | | <el-select size="small" v-model="monitor.type3" v-show="isShowSelect.video3" |
| | | @change="((val) => { navClick(val, 3) })" placeholder="请选择" ref="videoSelect3"> |
| | | <el-option v-show="isShowSelect.video3" v-for="item in monitorOption" :key="item.value" |
| | | :label="item.label" :value="item.value" class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"> |
| | | </div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video3"> |
| | | <video id="videoElement3" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video3"> |
| | | {{ playVideoHolders.text3 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="item video4" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video4"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video4"> |
| | | <el-select size="small" v-model="monitor.type4" @change="((val) => { navClick(val, 4) })" |
| | | placeholder="请选择" ref="videoSelect4"> |
| | | <el-option v-for="item in monitorOption" :key="item.value" :label="item.label" :value="item.value" |
| | | class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"> |
| | | </div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video4"> |
| | | <video id="videoElement4" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video4"> |
| | | {{ playVideoHolders.text4 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="deleteVideo" v-show="videoShow" @click="closeVideo">关闭</div> |
| | | </div> |
| | | |
| | | <div v-show="searchExtensivelyValBoxShow" class="searchExtensively-val-box"> |
| | | <div> |
| | | <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray" :key="index"> |
| | | {{ item.name }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="item video1" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video1"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video1"> |
| | | <el-select size="small" v-model="monitor.type1" @change="((val) => { navClick(val, 1) })" placeholder="请选择" |
| | | ref="videoSelect1"> |
| | | <el-option v-for="item in monitorOption" :key="item.value" :label="item.label" :value="item.value" |
| | | class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"></div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video1"> |
| | | <video id="videoElement1" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video1"> |
| | | {{ playVideoHolders.text1 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="item video2" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video2"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video2"> |
| | | <el-select size="small" v-model="monitor.type2" @change="((val) => { navClick(val, 2) })" placeholder="请选择" |
| | | ref="videoSelect2"> |
| | | <el-option v-for="item in monitorOption" :key="item.value" :label="item.label" :value="item.value" |
| | | class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"></div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video2"> |
| | | <video id="videoElement2" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video2"> |
| | | {{ playVideoHolders.text2 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="item video3" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video3"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video3"> |
| | | <el-select size="small" v-model="monitor.type3" v-show="isShowSelect.video3" |
| | | @change="((val) => { navClick(val, 3) })" placeholder="请选择" ref="videoSelect3"> |
| | | <el-option v-show="isShowSelect.video3" v-for="item in monitorOption" :key="item.value" |
| | | :label="item.label" :value="item.value" class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"></div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video3"> |
| | | <video id="videoElement3" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video3"> |
| | | {{ playVideoHolders.text3 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="item video4" v-show="videoShow"> |
| | | <video-loading v-show="isShowVideoLoading.video4"></video-loading> |
| | | <div class="select" v-show="isShowSelect.video4"> |
| | | <el-select size="small" v-model="monitor.type4" @change="((val) => { navClick(val, 4) })" placeholder="请选择" |
| | | ref="videoSelect4"> |
| | | <el-option v-for="item in monitorOption" :key="item.value" :label="item.label" :value="item.value" |
| | | class="activity-video-option-css"> |
| | | <div class="video-status" :style="{ background: (item.status == 0 ? '#adadad' : '#4ccc7d') }"></div> |
| | | {{ item.label }} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="video" v-show="isHaveMonitor.video4"> |
| | | <video id="videoElement4" autoplay controls width="100%" height="100%" style="object-fit: fill"></video> |
| | | </div> |
| | | <div class="no-video" v-show="!isHaveMonitor.video4"> |
| | | {{ playVideoHolders.text4 }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="deleteVideo" v-show="videoShow" @click="closeVideo">关闭</div> |
| | | |
| | | <el-dialog :title="policeChooseCarTitle" :modal="false" :visible.sync="policeChooseCarVisible" |
| | | :before-close="policeChooseCarBeforeClose" :close-on-click-modal="true" class="choose-policeCar-box"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getSecurityList, getPoliceList, getCarList, addCarAndRange, addActivityPolice, getSecurityPoliceList, getSecurityCarList, updateActivityPolice, updateActivityCar, getServiceDictionary, getActivityType, addSecurityPlot, getSecurityPlotList, updateSecurityPlot, deleteActivityCar, deleteActivityPolice, deleteSecurityPlot, getSearchInfo, getPolicemanTree } from '@/api/activity/index.js' |
| | | import { getSearchExtensively } from '@/api/dept/index.js' |
| | | import { getSecurityList, getPoliceList, getCarList, addCarAndRange, addActivityPolice, getSecurityPoliceList, getSecurityCarList, updateActivityPolice, getServiceDictionary, getActivityType, addSecurityPlot, getSecurityPlotList, deleteActivityCar, deleteActivityPolice, deleteSecurityPlot, getSearchInfo, getPolicemanTree } from '@/api/activity/index.js' |
| | | import { getRegionList, getDevices } from '@/api/video/index.js' |
| | | import { getEquipmentAll } from '@/api/home/index.js' |
| | | import flvjs from 'flv.js' |
| | | import activityDetail from './components/activityDetail.vue' |
| | | import drawBtnBox from './components/drawBtnBox.vue' |
| | | import mapSearchBox from './components/mapSearchBox.vue' |
| | | |
| | | let drawLayers = null |
| | | let drawArrowLayers = null |
| | | let polylineAreaLayer = null |
| | | let arrowsListLayer = null |
| | | let pointCircleManLayer = null |
| | | let pointCircleCarLayer = null |
| | | let plot = undefined |
| | | let arrowPlot = undefined |
| | | let lineLayer = undefined |
| | | |
| | | let tc = undefined |
| | |
| | | showingSecurityId: '', |
| | | policeIconIsCreated: false, |
| | | policeIconId: {}, |
| | | searchExtensivelyValue: '', |
| | | searchExtensivelyValBoxShow: false, |
| | | searchExtensivelyArray: [], |
| | | |
| | | |
| | | isHavePoliceCar: false, |
| | | isHavePoliceMan: false, |
| | | isHaveArrow: false, |
| | |
| | | } |
| | | }, |
| | | |
| | | components: { activityDetail, drawBtnBox, mapSearchBox }, |
| | | |
| | | created () { |
| | | let userInfo = sessionStorage.getItem("userInfo") |
| | | if (userInfo != null) { |
| | |
| | | mounted () { |
| | | this.$parent.$parent.resize('400px', true) |
| | | this.$nextTick(() => { |
| | | if (drawLayers == null) { |
| | | drawLayers = new global.DC.VectorLayer('drawLayers') |
| | | global.viewer.addLayer(drawLayers) |
| | | plot = new global.DC.Plot(global.viewer) |
| | | } |
| | | |
| | | if (drawArrowLayers == null) { |
| | | drawArrowLayers = new global.DC.VectorLayer('drawArrowLayers') |
| | | global.viewer.addLayer(drawArrowLayers) |
| | | arrowPlot = new global.DC.Plot(global.viewer) |
| | | } |
| | | |
| | | if (pointCircleManLayer == null) { |
| | | pointCircleManLayer = new global.DC.VectorLayer('pointCircleManLayer') |
| | | global.viewer.addLayer(pointCircleManLayer) |
| | |
| | | |
| | | // 获取活动警员分布信息 |
| | | getSecurityPoliceList (securityId, pointShow) { |
| | | this.removeAll() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | | layerName: 'newDrawLayers', |
| | | type: 'VectorLayer' |
| | |
| | | |
| | | // 获取活动警车分布信息 |
| | | getSecurityCarList (securityId, pointShow, polylineShow) { |
| | | this.removeAll() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | | layerName: 'newCarDrawLayers', |
| | | type: 'VectorLayer' |
| | |
| | | }) |
| | | }, |
| | | |
| | | // 修改活动警车 |
| | | // id活动id, carId警车id, color颜色, width巡逻路线范围宽度, type线面类型, position坐标 |
| | | updateActivityCar (params) { |
| | | updateActivityCar(params).then(res => { |
| | | if (res.data.success) { |
| | | this.$message({ |
| | | message: '保存成功', |
| | | type: 'success' |
| | | }) |
| | | } else { |
| | | this.$message({ |
| | | message: '保存失败', |
| | | type: 'error' |
| | | }) |
| | | } |
| | | this.getSecurityCarList(this.showingSecurityId, this.policeSwitch, this.polylineBtnSwitch) |
| | | }) |
| | | }, |
| | | |
| | | // 活动添加警车和范围 |
| | | // carId警车id, position坐标, securityId活动id, type线面类型,width缓存范围,color范围颜色 |
| | | addCarAndRange (params) { |
| | |
| | | return |
| | | } |
| | | |
| | | this.removeAll() |
| | | this.removeAllArrow() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | this.$refs.DRAWBTNBOX.removeDrawArrow() |
| | | arrowsListLayer != null && arrowsListLayer.clear() |
| | | |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | |
| | | } |
| | | }, |
| | | |
| | | // 地图元素绘制 |
| | | draw (poltType, policeType) { |
| | | let flag = false |
| | | const that = this |
| | | this.policeType = '' |
| | | plot && plot.draw(poltType, overlay => { |
| | | |
| | | if (poltType == 'billboard' && policeType == 'policeman') { |
| | | overlay.icon = '/img/icon/police-people.png' |
| | | } else if (poltType == 'billboard' && policeType == 'policecar') { |
| | | overlay.icon = '/img/policeCar.jfif' |
| | | } |
| | | |
| | | |
| | | if (overlay) { |
| | | drawLayers.addOverlay(overlay) |
| | | |
| | | plot.edit(overlay, (e) => { |
| | | // drawLayers.addOverlay(overlay) |
| | | |
| | | flag = true |
| | | |
| | | overlay.on(global.DC.MouseEventType.CLICK, this.overlayTypeClick) |
| | | |
| | | overlay.drawType = poltType |
| | | |
| | | overlay.policeType = policeType |
| | | |
| | | this.overlayObj = overlay |
| | | |
| | | document.oncontextmenu = function () { |
| | | if (flag == true && poltType == 'billboard') { |
| | | if (policeType == 'policeman') { |
| | | that.searchPoliceTreeId = '' |
| | | that.searchPoliceTreeName = '' |
| | | that.choosePoliceColor = '#FF0000' |
| | | that.policeChooseVisible = true |
| | | } else if (policeType == 'policecar') { |
| | | that.policeOption = that.policecarOption |
| | | that.chooseCarColor = '#FF0000' |
| | | that.policeChooseCarVisible = true |
| | | } |
| | | flag = false |
| | | } else if (flag == true && poltType == 'polyline') { |
| | | let position = '' |
| | | overlay._positions.forEach(item => { |
| | | position += item._lng + ' ' + item._lat + ',' |
| | | }) |
| | | position = position.slice(0, position.length - 1) |
| | | that.polylineBtnSwitch = true |
| | | that.lineEditTitle = '新增巡逻路线' |
| | | that.isLineEdit = false |
| | | that.chooseColor = '#1CA085' |
| | | that.lineWidth = 100 |
| | | that.addLinePosition = position |
| | | that.lineEditVisible = true |
| | | flag = false |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }, { material: global.DC.Color.RED }) |
| | | }, |
| | | |
| | | // 删除所有地图绘制元素 |
| | | removeAll () { |
| | | drawLayers != null && drawLayers.clear() |
| | | }, |
| | | |
| | | /** |
| | | * @description: 箭头 |
| | | * @return {*} |
| | | */ |
| | | removeAllArrow () { |
| | | drawArrowLayers != null && drawArrowLayers.clear() |
| | | }, |
| | | |
| | | drawArrow (type, iconType) { |
| | | if (type == 'polygon') { |
| | | const that = this |
| | | let flag = false |
| | | plot && plot.draw(type, overlay => { |
| | | if (overlay) { |
| | | drawArrowLayers.addOverlay(overlay) |
| | | plot.edit(overlay, (e) => { |
| | | flag = true |
| | | let positionStr = '' |
| | | overlay._positions.forEach(item => { |
| | | positionStr += item._lng + ' ' + item._lat + ',' |
| | | }) |
| | | positionStr = positionStr.slice(0, positionStr.length - 1) |
| | | this.polygonPositionStr = positionStr |
| | | this.plotSaveType = 5 |
| | | // overlay.on(global.DC.MouseEventType.CLICK, this.polygonClick) |
| | | document.oncontextmenu = function () { |
| | | if (flag) { |
| | | that.choosePlotColor = '#409EFF' |
| | | that.choosePlotColorAlpha = 48 |
| | | that.polygonAreaType = 1 |
| | | that.isNeedName = true |
| | | that.isNeedPolygonType = true |
| | | that.polygonName = '' |
| | | that.polygonAddVisible = true |
| | | flag = false |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }, { material: global.DC.Color.RED }) |
| | | } else if (type == 'billboard') { |
| | | console.log(11) |
| | | const that = this |
| | | let flag = false |
| | | |
| | | plot && plot.draw(type, overlay => { |
| | | if (iconType == 'icon1') { |
| | | overlay.icon = '/img/icon/icon1.png' |
| | | this.plotSaveType = 6 |
| | | } |
| | | if (overlay) { |
| | | drawArrowLayers.addOverlay(overlay) |
| | | plot.edit(overlay, (e) => { |
| | | flag = true |
| | | this.plotPointPositionStr = overlay._positions._lng + ' ' + overlay._positions._lat |
| | | document.oncontextmenu = function () { |
| | | if (flag) { |
| | | that.choosePlotColor = '#409EFF' |
| | | that.choosePlotColorAlpha = 48 |
| | | that.polygonAddVisible = true |
| | | that.isNeedName = false |
| | | flag = false |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } else { |
| | | const that = this |
| | | let flag = false |
| | | arrowPlot && arrowPlot.draw(type, overlay => { |
| | | if (overlay) { |
| | | let plotType = '' |
| | | if (type == 'attack_arrow') { |
| | | plotType = 1 |
| | | } else if (type == 'double_arrow') { |
| | | plotType = 2 |
| | | } else if (type == 'fine_arrow') { |
| | | plotType = 3 |
| | | } else if (type == 'tailed_attack_arrow') { |
| | | plotType = 4 |
| | | } |
| | | this.plotSaveType = plotType |
| | | plot.edit(overlay, (e) => { |
| | | flag = true |
| | | let positionStr = '' |
| | | overlay._positions.forEach(item => { |
| | | positionStr += item._lng + ' ' + item._lat + ',' |
| | | }) |
| | | positionStr = positionStr.slice(0, positionStr.length - 1) |
| | | this.arrowPositionStr = positionStr |
| | | drawArrowLayers.addOverlay(overlay) |
| | | document.oncontextmenu = function () { |
| | | if (flag) { |
| | | that.choosePlotColor = '#409EFF' |
| | | that.isNeedName = false |
| | | that.isNeedPolygonType = false |
| | | that.polygonAddVisible = true |
| | | flag = false |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }, { material: global.DC.Color.RED }) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * @description: 轨迹开始 |
| | | * @return {*} |
| | |
| | | this.policeChooseVisible = false |
| | | this.policeChooseCarVisible = false |
| | | this.overlayObj2 = {} |
| | | this.removeAll() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | }, |
| | | |
| | | // 取消保存多边形 |
| | | cancelSavePolygon () { |
| | | this.polygonAddVisible = false |
| | | if (drawArrowLayers != null) { |
| | | drawArrowLayers.clear() |
| | | } |
| | | |
| | | this.$refs.DRAWBTNBOX.removeDrawArrow() |
| | | }, |
| | | |
| | | // 选择警员关闭 |
| | | policeChooseBeforeClose () { |
| | | this.policeChooseVisible = false |
| | | this.policeIconIsCreated = false |
| | | this.removeAll() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | }, |
| | | |
| | | // 选择警车关闭 |
| | | policeChooseCarBeforeClose () { |
| | | this.policeChooseCarVisible = false |
| | | this.policeIconIsCreated = false |
| | | this.removeAll() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | }, |
| | | |
| | | // 选择警员确认按钮 |
| | |
| | | this.updateActivityPolice({ id: this.policeIconId, policemanId: this.searchPoliceTreeId, color: this.choosePoliceColor }) |
| | | this.policeChooseVisible = false |
| | | } else if (this.policeChooseCarVisible == true) { |
| | | this.updateActivityCar({ id: this.policeIconId, carId: this.policeType, color: this.chooseCarColor }) |
| | | this.$refs.DRAWBTNBOX.updateActivityCar({ id: this.policeIconId, carId: this.policeType, color: this.chooseCarColor }) |
| | | this.policeChooseCarVisible = false |
| | | } |
| | | this.policeIconIsCreated = false |
| | |
| | | // 取消保存巡逻路线 |
| | | cancelSaveLine () { |
| | | this.lineEditVisible = false |
| | | if (drawLayers != null) { |
| | | drawLayers.clear() |
| | | } |
| | | |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | }, |
| | | |
| | | // 巡逻路线面点击事件 |
| | |
| | | // 获取活动标绘箭头列表 |
| | | getSecurityPlotList (securityId, arrowShow) { |
| | | arrowsListLayer.clear() |
| | | this.removeAllArrow() |
| | | this.$refs.DRAWBTNBOX.removeDrawArrow() |
| | | if (!arrowShow) return |
| | | getSecurityPlotList(securityId).then(res => { |
| | | this.isHaveArrow = res.data.data.some(item => { |
| | |
| | | if (item.color == '') { |
| | | color = global.DC.Namespace.Cesium.Color.fromBytes(255, 69, 0, 173) |
| | | } else { |
| | | let r = parseInt(item.color.slice(1, 3), 16) |
| | | let g = parseInt(item.color.slice(3, 5), 16) |
| | | let r = parseInt(item.color.slice(1, 3), 16) |
| | | let g = parseInt(item.color.slice(3, 5), 16) |
| | | let b = parseInt(item.color.slice(5, 7), 16) |
| | | let a = Math.floor(Number(item.color.split(',')[1])*2.55) |
| | | let a = Math.floor(Number(item.color.split(',')[1]) * 2.55) |
| | | color = global.DC.Namespace.Cesium.Color.fromBytes(r, g, b, a) |
| | | } |
| | | if (item.type == 1) { |
| | |
| | | // }) |
| | | } else if (item.type == 6) { |
| | | let iconImgName = '' |
| | | if(item.type == 6){ |
| | | if (item.type == 6) { |
| | | iconImgName = 'icon1' |
| | | } |
| | | position = position.split(';')[0].split(',') |
| | | position = new global.DC.Position(Number(position[0]), Number(position[1])) |
| | | chooseArrow= new global.DC.Billboard(position, `/img/icon/${iconImgName}.png`) |
| | | chooseArrow = new global.DC.Billboard(position, `/img/icon/${iconImgName}.png`) |
| | | arrowsListLayer.addOverlay(chooseArrow) |
| | | let point = new global.DC.Point(position) |
| | | arrowsListLayer.addOverlay(point) |
| | | point.attrParams = { 'id': item.id, 'color': item.color,item } |
| | | point.attrParams = { 'id': item.id, 'color': item.color, item } |
| | | point.on(global.DC.MouseEventType.CLICK, this.reeditArrowClick) |
| | | point.setStyle({ |
| | | "color": color, //颜色 |
| | |
| | | "pixelSize": 32, |
| | | }) |
| | | } |
| | | |
| | | chooseArrow.attrParams = { 'id': item.id, 'color': item.color,item } |
| | | |
| | | chooseArrow.attrParams = { 'id': item.id, 'color': item.color, item } |
| | | chooseArrow.setStyle({ |
| | | "material": color, |
| | | }) |
| | | chooseArrow.on(global.DC.MouseEventType.CLICK, this.reeditArrowClick) |
| | | |
| | | |
| | | // let position1 = new global.DC.Position(117.94218262137659, 28.434842894894153) |
| | | // let Label = new global.DC.Label(position1, 'test') |
| | | // Label.on(global.DC.MouseEventType.LEFT_DOWN, this.reeditArrowLeftDown) |
| | |
| | | |
| | | // 双击修改箭头 |
| | | reeditArrowDbClick (e) { |
| | | let overlayData = e.overlay |
| | | plot.edit(overlayData, (e) => { |
| | | let position = '' |
| | | overlayData._positions.forEach(item => { |
| | | position += item._lng + ' ' + item._lat + ',' |
| | | }) |
| | | position = position.slice(0, position.length - 1) |
| | | drawArrowLayers.addOverlay(overlayData) |
| | | this.updateSecurityPlot({ id: overlayData.attrParams.id, position: position }) |
| | | }) |
| | | this.$refs.DRAWBTNBOX.plotEdit(e.overlay, 'arrow') |
| | | }, |
| | | |
| | | // 单击。标绘箭头 |
| | |
| | | }, |
| | | |
| | | // 左键按下标绘 |
| | | reeditArrowLeftDown(e){ |
| | | console.log('reeditArrowLeftDown--ee',e); |
| | | reeditArrowLeftDown (e) { |
| | | console.log('reeditArrowLeftDown--ee', e) |
| | | }, |
| | | |
| | | // 左键抬起标绘 |
| | | reeditArrowLeftUp(e){ |
| | | console.log('reeditArrowLeftUp--ee',e); |
| | | reeditArrowLeftUp (e) { |
| | | console.log('reeditArrowLeftUp--ee', e) |
| | | }, |
| | | |
| | | // 移动标绘 |
| | | reeditArrowMouseMove(e){ |
| | | console.log('reeditArrowMouseMove--ee',e); |
| | | reeditArrowMouseMove (e) { |
| | | console.log('reeditArrowMouseMove--ee', e) |
| | | }, |
| | | |
| | | // 编辑标绘 |
| | |
| | | // 保存标绘修改 |
| | | savePlot () { |
| | | // this.updateSecurityPlot({ id: this.plotOverlayData.overlay.attrParams.id, color: this.choosePlotColor + ',' + this.choosePlotColorAlpha, name: this.polygonName }) |
| | | this.updateSecurityPlot({ id: this.plotOverlayData.overlay.attrParams.id, color: this.choosePlotColor + ',' + this.choosePlotColorAlpha }) |
| | | this.$refs.DRAWBTNBOX.updateSecurityPlot({ id: this.plotOverlayData.overlay.attrParams.id, color: this.choosePlotColor + ',' + this.choosePlotColorAlpha }) |
| | | this.editPlotVisible = false |
| | | }, |
| | | |
| | | updateSecurityPlot (params) { |
| | | updateSecurityPlot(params).then(res => { |
| | | if (res.data.success) { |
| | | this.$message({ |
| | | message: '修改成功', |
| | | type: 'success' |
| | | }) |
| | | } else { |
| | | this.$message({ |
| | | message: '修改失败', |
| | | type: 'error' |
| | | }) |
| | | } |
| | | this.getSecurityPlotList(this.showingSecurityId, this.arrowBtnSwitch) |
| | | }) |
| | | }, |
| | | |
| | | // 大搜 |
| | | getSearchExtensively (ak, region, query) { |
| | | getSearchExtensively(ak, region, query).then(res => { |
| | | this.searchExtensivelyArray = res.data.result |
| | | }) |
| | | }, |
| | | |
| | | // 搜索数据地图对应场所 |
| | | getSearchInfo (deptId, search, iconType) { |
| | |
| | | }) |
| | | }, |
| | | |
| | | searchExtensivelyClick () { |
| | | this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue) |
| | | this.searchExtensivelyValBoxShow = false |
| | | if (this.searchExtensivelyArray.length > 0) { |
| | | this.$EventBus.$emit('toPosition', { |
| | | siteJd: `${this.searchExtensivelyArray[0].location.lng}`, |
| | | siteWd: `${this.searchExtensivelyArray[0].location.lat}`, |
| | | siteGd: 200, |
| | | }) |
| | | this.searchExtensivelyValue = this.searchExtensivelyArray[0].name |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | | layerName: 'searchLayer', |
| | | type: 'VectorLayer' |
| | | }) |
| | | this.$EventBus.$emit('layerPointAdd', { |
| | | layerName: 'searchLayer', |
| | | type: 'label', |
| | | params: { |
| | | lng: `${this.searchExtensivelyArray[0].location.lng}`, |
| | | lat: `${this.searchExtensivelyArray[0].location.lat}`, |
| | | alt: 1, |
| | | text: this.searchExtensivelyArray[0].name |
| | | }, |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | searchExtensivelyChange () { |
| | | if (this.searchExtensivelyValue == '') { |
| | | this.searchExtensivelyValBoxShow = false |
| | | this.isShowClearBtn = false |
| | | this.searchExtensivelyArray = [] |
| | | } else { |
| | | this.searchExtensivelyValBoxShow = true |
| | | this.isShowClearBtn = true |
| | | this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue) |
| | | } |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | | layerName: 'searchLayer', |
| | | type: 'VectorLayer' |
| | | }) |
| | | }, |
| | | |
| | | searchExtensivelyVlaClick (item) { |
| | | this.searchExtensivelyValBoxShow = false |
| | | this.searchExtensivelyValue = item.name |
| | | this.$EventBus.$emit('toPosition', { |
| | | siteJd: `${item.location.lng}`, |
| | | siteWd: `${item.location.lat}`, |
| | | siteGd: 200, |
| | | }) |
| | | this.$EventBus.$emit('mapClearLayer', { |
| | | layerName: 'searchLayer', |
| | | type: 'VectorLayer' |
| | | }) |
| | | this.$EventBus.$emit('layerPointAdd', { |
| | | layerName: 'searchLayer', |
| | | type: 'label', |
| | | params: { |
| | | lng: `${item.location.lng}`, |
| | | lat: `${item.location.lat}`, |
| | | alt: 1, |
| | | text: item.name |
| | | } |
| | | }) |
| | | this.$EventBus.$emit('layerPointAdd', { |
| | | layerName: 'searchLayer', |
| | | type: "billboard", |
| | | params: { |
| | | lng: `${item.location.lng}`, |
| | | lat: `${item.location.lat}`, |
| | | alt: 1, |
| | | url: '/img/icon/location.png' |
| | | }, |
| | | }) |
| | | }, |
| | | |
| | | searchExtensivelyFocus () { |
| | | this.searchExtensivelyValBoxShow = true |
| | | this.getSearchExtensively('ebf48ecaa1fd436fa3d40c4600aa051f', '361100', this.searchExtensivelyValue) |
| | | }, |
| | | |
| | | clearSearchValue () { |
| | | this.searchExtensivelyValue = '' |
| | | this.searchExtensivelyChange() |
| | | }, |
| | | |
| | | clearActivitySearchValue () { |
| | | this.searchActivity = '' |
| | | this.inputChange() |
| | | this.searchClick() |
| | | }, |
| | | |
| | | |
| | | navClick (val, args) { |
| | | if (this.valChoosed == val && this.argsChoosed == args) return |
| | |
| | | |
| | | // 保存巡逻路线信息 |
| | | saveLineInfo () { |
| | | this.updateActivityCar({ id: this.policeIconId, color: this.chooseColor, width: this.lineWidth }) |
| | | this.$refs.DRAWBTNBOX.updateActivityCar({ id: this.policeIconId, color: this.chooseColor, width: this.lineWidth }) |
| | | this.lineEditVisible = false |
| | | }, |
| | | |
| | |
| | | layerName: 'newCarDrawLineLayers', |
| | | type: 'VectorLayer' |
| | | }) |
| | | let overlayData = this.lineObjdata |
| | | plot.edit(overlayData, (e) => { |
| | | let position = '' |
| | | overlayData._positions.forEach(item => { |
| | | position += item._lng + ' ' + item._lat + ',' |
| | | }) |
| | | position = position.slice(0, position.length - 1) |
| | | lineLayer.addOverlay(overlayData) |
| | | this.updateActivityCar({ id: this.policeIconId, color: this.chooseColor, width: this.lineWidth, type: 1, position: position }) |
| | | }) |
| | | |
| | | this.$refs.DRAWBTNBOX.plotEdit(this.lineObjdata, 'line') |
| | | }, |
| | | |
| | | // 点击区域 |
| | |
| | | // 保存绘制区域 |
| | | savePolygonInfo () { |
| | | let positionStr = '' |
| | | if(this.plotSaveType >=1 &&this.plotSaveType <=4) { |
| | | if (this.plotSaveType >= 1 && this.plotSaveType <= 4) { |
| | | positionStr = this.arrowPositionStr |
| | | }else if (this.plotSaveType == 5) { |
| | | } else if (this.plotSaveType == 5) { |
| | | positionStr = this.polygonPositionStr |
| | | }else if (this.plotSaveType >= 6) { |
| | | positionStr = this.plotPointPositionStr + ',' + this.plotPointPositionStr |
| | | } else if (this.plotSaveType >= 6) { |
| | | positionStr = this.plotPointPositionStr + ',' + this.plotPointPositionStr |
| | | } |
| | | this.addSecurityPlot({ securityId: this.showingSecurityId, position: positionStr, type: this.plotSaveType, color: this.choosePlotColor + ',' + this.choosePlotColorAlpha,areaType:this.polygonAreaType }) |
| | | this.addSecurityPlot({ securityId: this.showingSecurityId, position: positionStr, type: this.plotSaveType, color: this.choosePlotColor + ',' + this.choosePlotColorAlpha, areaType: this.polygonAreaType }) |
| | | this.polygonAddVisible = false |
| | | }, |
| | | |
| | |
| | | type: 'VectorLayer' |
| | | }) |
| | | |
| | | this.$EventBus.$emit('mapRemoveLayer', { |
| | | layerName: 'searchLayer', |
| | | type: 'VectorLayer' |
| | | }) |
| | | |
| | | |
| | | this.$EventBus.$emit('mapRemoveLayer', { |
| | | layerName: 'polygonLayer', |
| | |
| | | if (pointCircleCarLayer != null) { |
| | | pointCircleCarLayer.remove() |
| | | } |
| | | this.removeAll() |
| | | this.removeAllArrow() |
| | | this.$refs.DRAWBTNBOX.removeDraw() |
| | | this.$refs.DRAWBTNBOX.removeDrawArrow() |
| | | if (tc) { |
| | | tc.remove() |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | .draw-btn-box { |
| | | position: fixed; |
| | | display: flex; |
| | | // left: 50%; |
| | | left: calc(810 / 1920 * 100vw); |
| | | bottom: 40px; |
| | | color: #fff; |
| | | background: $bg-one-color; |
| | | white-space: nowrap; |
| | | // transform: translate(-50%, 0); |
| | | |
| | | .left, |
| | | .right { |
| | | height: 100%; |
| | | |
| | | &>div { |
| | | display: flex; |
| | | } |
| | | |
| | | ul { |
| | | display: flex; |
| | | |
| | | li { |
| | | button { |
| | | height: 30px; |
| | | margin: 0 5px; |
| | | background-color: $bg-color; |
| | | border: 1px solid #cecece; |
| | | border-radius: 4px; |
| | | color: #fff; |
| | | cursor: pointer; |
| | | outline: none; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .left { |
| | | width: 80%; |
| | | |
| | | h3 { |
| | | font-size: 16px; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | width: 100%; |
| | | padding-left: 16%; |
| | | } |
| | | } |
| | | |
| | | .right { |
| | | width: 20%; |
| | | padding-top: 35px; |
| | | |
| | | ul { |
| | | flex-direction: column; |
| | | |
| | | li { |
| | | height: 50px; |
| | | |
| | | button { |
| | | background-color: #2a56cf; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .second-container { |
| | | position: absolute; |
| | | top: 10px; |
| | |
| | | |
| | | .second-container.take-back { |
| | | left: 10px; |
| | | } |
| | | |
| | | .activity-details-box { |
| | | position: fixed; |
| | | top: 90px; |
| | | right: 10px; |
| | | width: 400px; |
| | | padding: 10px; |
| | | border-radius: 10px; |
| | | color: #fff; |
| | | background: $bg-color; |
| | | overflow-x: hidden; |
| | | overflow-y: auto; |
| | | |
| | | .title { |
| | | position: relative; |
| | | height: 36px; |
| | | line-height: 36px; |
| | | |
| | | .close { |
| | | position: absolute; |
| | | top: 50%; |
| | | right: 0; |
| | | transform: translate(0, -50%); |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .close::before { |
| | | content: '\e6db'; |
| | | font-family: element-icons; |
| | | } |
| | | } |
| | | |
| | | .row-box { |
| | | width: 100%; |
| | | line-height: 28px; |
| | | display: flex; |
| | | |
| | | &>div { |
| | | text-align: left; |
| | | } |
| | | |
| | | .category { |
| | | width: 96px; |
| | | } |
| | | |
| | | .category-value { |
| | | flex: 1; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .plan-control { |
| | |
| | | } |
| | | } |
| | | |
| | | .search-content { |
| | | position: absolute; |
| | | position: fixed; |
| | | z-index: 99; |
| | | left: 760px; |
| | | top: 40px; |
| | | width: 460px; |
| | | height: 36px; |
| | | |
| | | input { |
| | | flex: 1; |
| | | width: 400px; |
| | | height: 100%; |
| | | font-size: 18px; |
| | | text-indent: 1em; |
| | | color: #ffffff; |
| | | background-color: rgba(24, 79, 202, 0.75); |
| | | border: 1px solid rgb(0, 92, 169); |
| | | border-radius: 20px 0 0 20px; |
| | | vertical-align: top; |
| | | } |
| | | |
| | | input:focus { |
| | | outline: none; |
| | | } |
| | | |
| | | input::-webkit-input-placeholder { |
| | | color: rgba(238, 238, 238, 0.7); |
| | | } |
| | | |
| | | .clear { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 70px; |
| | | cursor: pointer; |
| | | |
| | | img { |
| | | width: 16px; |
| | | height: 16px; |
| | | margin-top: 10px; |
| | | } |
| | | } |
| | | |
| | | button { |
| | | font-size: 24px; |
| | | font-weight: 700; |
| | | width: 60px; |
| | | height: 100%; |
| | | background-color: $table-body-tr-n-color; |
| | | color: #fff; |
| | | border: 1px solid rgb(0, 92, 169); |
| | | cursor: pointer; |
| | | border-radius: 0 20px 20px 0; |
| | | } |
| | | |
| | | button:active { |
| | | background-color: $table-body-tr-2n-color; |
| | | border: 1px solid rgb(0, 92, 169); |
| | | } |
| | | } |
| | | |
| | | .searchExtensively-val-box { |
| | | display: flex; |
| | | flex-direction: column; |
| | | position: absolute; |
| | | top: 80px; |
| | | left: 760px; |
| | | width: 380px; |
| | | max-height: 160px; |
| | | text-align: left; |
| | | color: #fff; |
| | | background: $el-dialog-bg-color; |
| | | z-index: 1111; |
| | | border-radius: 10px; |
| | | overflow: hidden; |
| | | |
| | | &>div { |
| | | height: 100%; |
| | | overflow-y: auto; |
| | | |
| | | div { |
| | | padding: 0 10px; |
| | | line-height: 36px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .item { |
| | | background-color: $bg-color; |