12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103 |
- <template>
- <div class="home">
- <Header></Header>
- <Map />
- <div :class="{ 'yjdp-btn': true, isActive: yjdpShow }" @click="addyjdp">沿街店铺</div>
- <div :class="{ 'kzdp-btn': true, isActive: kzdpShow }" @click="addkzdp">空置店铺</div>
- <div class="yhfk-btn" @click="openYHFK">用户反馈</div>
- <!-- 智小青 -->
- <div class="zxq-btn" @click="openZXQ"></div>
- <div class="zxqIframeContainer" v-if="isShowZXQ">
- <div class="close" @click="closeZXQ">×</div>
- <iframe :src="zxqUrl" frameborder="0"></iframe>
- </div>
- <!-- <div class="control3D">
- <div class="label">三维模型</div>
- <el-switch v-model="isShow3D" size="large" active-text @change="changeModel" />
- </div> -->
- <div class="changeBaseMap">
- <div class="container">
- <div v-for="(item, index) in baseMapArr" :key="index" @click="changeMap(item)">
- <div :class="{ 'content': true, 'active': item.isActive }">
- <div class="label">{{ item.label }}</div>
- </div>
- </div>
- </div>
- </div>
- <div class="heatmapContorl">
- <div :class="{ 'ckzb-btn': true, isActive: heatmapPanelShow }" @click="handleOpenHeatmapPanelShow">热力图</div>
- <div class="heatmapPanel" v-show="heatmapPanelShow">
- <el-scrollbar>
- <ul>
- <li v-for="(item, index) in heatmapList" :key="index">
- <el-checkbox v-model="item.isAdd" :label="item.name" size="large"
- @change="judgeLayerType($event, item)" />
- </li>
- </ul>
- </el-scrollbar>
- </div>
- </div>
- <div class="heatmapLegend" v-show="heatmapPanelShow">
- </div>
- <div :class="{ 'zxq-ckzb-btn': true, isActive: isActiveZXQ }" @click="isActiveZXQ">智小青</div>
- <div class="layerContorl">
- <div :class="{ 'ckzb-btn': true, isActive: layerPanelShow }" @click="handleOpenLayerPanelShow">查看周边</div>
- <div class="layerPanel" v-show="layerPanelShow">
- <el-scrollbar>
- <ul>
- <li v-for="(item, index) in layerList" :key="index">
- <el-checkbox v-model="item.isAdd" :label="item.name" size="large"
- @change="judgeLayerType($event, item)" />
- </li>
- </ul>
- </el-scrollbar>
- </div>
- </div>
- <KDYJS ref="kdyjs"></KDYJS>
- <div class="tips">试运行阶段服务范围:夏阳街道</div>
- <div class="yjdpInfoDialog" v-show="yjdpInfoDialogShow">
- <div class="close" @click="closeYJDP">×</div>
- <div class="content" v-if="nowPoint != null">
- <el-scrollbar>
- <div class="item">店铺名称: {{ nowPoint.properties["店铺名称"] }}</div>
- <div class="item">店铺类型: {{ nowPoint.properties["店铺类型"] }}</div>
- <div class="item">街镇: {{ nowPoint.properties["街镇"] }}</div>
- <div class="item">道路名称: {{ nowPoint.properties["道路名称"] }}</div>
- </el-scrollbar>
- </div>
- </div>
- <div class="kzdpInfoDialog" v-show="kzdpInfoDialogShow">
- <div class="close" @click="closeKZDP">×</div>
- <div class="content" v-if="nowPoint != null">
- <el-scrollbar>
- <div class="item">店铺名称: {{ nowPoint.properties["店铺名称"] }}</div>
- <div class="item">店铺类型: {{ nowPoint.properties["店铺类型"] }}</div>
- <div class="item">街镇: {{ nowPoint.properties["街镇"] }}</div>
- <div class="item">道路名称: {{ nowPoint.properties["道路名称"] }}</div>
- </el-scrollbar>
- </div>
- </div>
- <!-- 此处弹框样式写在App.vue中 -->
- <el-dialog class="yhfkInfoDialog" title="用户反馈" header-class="yhfkInfoDialogHeader"
- footer-class="yhfkInfoDialogfooter" v-model="yhfkInfoDialogShow" :close="closeKZDP" :close-on-click-modal="false"
- :append-to-body="true" width="600">
- <el-form ref="yhfkInfoDialogRef" :model="yhfkForm" label-width="auto" :rules="rules" style="max-width: 600px">
- <el-form-item label="姓名" prop="name">
- <el-input v-model="yhfkForm.name" />
- </el-form-item>
- <el-form-item label="联系方式" prop="tele">
- <el-input v-model="yhfkForm.tele" />
- </el-form-item>
- <el-form-item label="问题描述" prop="desc">
- <el-input v-model="yhfkForm.desc" type="textarea" />
- </el-form-item>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button @click="closeYHFK">取消</el-button>
- <el-button type="primary" @click="yhfkSubmit">提交</el-button>
- </div>
- </template>
- </el-dialog>
- </div>
- </template>
- <script>
- import { toRaw } from "vue";
- import { ElMessage } from 'element-plus'
- import Map from "@/components/Map.vue";
- import Header from "@/components/Header.vue";
- import KDYJS from "@/views/KDYJS.vue";
- export default {
- name: "HomeView",
- components: {
- Map,
- Header,
- KDYJS
- },
- data() {
- let arr = webConfig.layerList;
- arr = arr.map(function (item, index) {
- item.id = index;
- item.isAdd = false
- return item
- })
- let arrHeatmap = webConfig.heatmapList;
- arrHeatmap = arrHeatmap.map(function (item, index) {
- item.id = index;
- item.isAdd = false
- return item
- })
- return {
- isShow3D: false,
- baseMapArr: [
- {
- type: "yxt",
- label: "影像图",
- isActive: false
- },
- {
- type: "xht",
- label: "线划图",
- isActive: true
- }
- ],
- yjdpShow: false,
- kzdpShow: false,
- mapHandle: null,
- yjdpInfoDialogShow: false,
- kzdpInfoDialogShow: false,
- yhfkInfoDialogShow: false,
- nowPoint: null,
- layerPanelShow: false,
- layerRoot: webConfig.GEOSERVER_URL_WMS,
- layerList: arr,
- wmslayer: {},
- heatmapPanelShow: false,
- heatmapList: arrHeatmap,
- heatmapLayer: {},
- yhfkForm: {
- name: "",
- tele: "",
- desc: ""
- },
- rules: {
- name: [
- { required: true, message: '请填写姓名', trigger: 'blur' },
- ],
- tele: [
- { required: true, message: '请填写联系方式', trigger: 'blur' },
- ],
- desc: [
- { required: true, message: '请填写问题描述', trigger: 'blur' },
- ],
- },
- isShowZXQ: false,
- zxqUrl: webConfig.zxqUrl
- };
- },
- mounted() {
- this.$refs.kdyjs.open();
- // 监听message事件
- window.addEventListener('message', this.handleMessage);
- },
- beforeDestroy() {
- // 在组件销毁前移除事件监听器
- window.removeEventListener('message', this.handleMessage);
- },
- methods: {
- handleMessage(event) {
- // // 确保消息来自预期的源
- // // 如果需要更严格的安全性,请验证event.origin
- // if (event.source !== window.parent) {
- // return;
- // }
- // 处理接收到的消息数据
- const data = event.data;
- // const imgUrl = data.imgUrl;
- // const otherParam = data.otherParam;
- // 在Vue父组件中处理数据
- // ...
- },
- changeModel(status) {
- mapTriggerEvent("changeModel", {
- status: status
- });
- },
- changeMap(item) {
- this.baseMapArr = this.baseMapArr.map(function (item) {
- item.isActive = false;
- return item;
- });
- item.isActive = true;
- switch (item.type) {
- case "yxt":
- mapTriggerEvent("changeBaseMap", { type: "yxt" });
- break;
- case "xht":
- mapTriggerEvent("changeBaseMap", { type: "xht" });
- break;
- }
- },
- // 打开用户反馈
- openYHFK() {
- this.yhfkInfoDialogShow = true
- },
- // 关闭用户反馈
- closeYHFK() {
- this.yhfkInfoDialogShow = false;
- this.yhfkForm = {
- name: "",
- tele: "",
- desc: ""
- }
- },
- // 提交用户反馈
- yhfkSubmit() {
- let that = this;
- this.$refs.yhfkInfoDialogRef.validate((valid, fields) => {
- if (valid) {
- let formData = new FormData();
- let obj = {
- "title": that.yhfkForm.tele,
- "content": that.yhfkForm.name,
- // "c_name": that.yhfkForm.name,
- // "c_tele": that.yhfkForm.tele,
- // "c_describe": that.yhfkForm.desc
- }
- obj[webConfig.userFeedback.name] = that.yhfkForm.name
- obj[webConfig.userFeedback.tele] = that.yhfkForm.tele
- obj[webConfig.userFeedback.desc] = that.yhfkForm.desc
- formData.append("content", JSON.stringify(obj))
- formData.append("columnId", webConfig.userFeedback.columnId)
- formData.append("modelId", webConfig.userFeedback.modelId)
- // 使用 fetch API 提交数据
- fetch(webConfig.DMS_URL + "/content/addContent", {
- method: 'POST', // 或者 'PUT', 'DELETE', 等等
- body: formData, // 直接传递 FormData 对象
- headers: {
- // 如果需要设置 Content-Type,通常不需要,因为 fetch 会自动设置,但如果需要可以手动设置
- // 'Content-Type': 'application/x-www-form-urlencoded'
- token: localStorage.getItem(webConfig.AUTH_USER_TOKEN_KEY)
- }
- })
- .then(response => response.json()) // 假设服务器返回 JSON 数据
- .then(data => {
- // 处理返回的数据,例如更新页面等
- if (data.code == 200) {
- ElMessage({
- message: '您的反馈已提交,后续我们将与您联系确认问题,感谢您的反馈!',
- type: 'success',
- plain: true,
- })
- setTimeout(() => {
- that.yhfkInfoDialogShow = false
- }, 500);
- }
- })
- .catch((error) => {
- // console.error('Error:', error);
- });
- } else {
- ElMessage({
- message: '请您完善反馈的问题后再尝试提交!',
- type: 'warning',
- plain: true,
- })
- }
- })
- },
- // 打开智小青
- openZXQ() {
- this.isShowZXQ = true
- },
- // 关闭智小青
- closeZXQ() {
- this.isShowZXQ = false
- },
- // 沿街店铺
- addyjdp() {
- let that = this;
- this.yjdpShow = !this.yjdpShow
- if (this.yjdpShow) {
- // 添加
- fetch("./static/data/沿街店铺.geojson")
- .then(response => response.json())
- .then(function (result) {
- that.pointYJDPArr = result.features.map(function (pointInfo) {
- return viewer.entities.add(new SkyScenery.Entity({
- position: SkyScenery.Cartesian3.fromDegrees(pointInfo.geometry.coordinates[0], pointInfo.geometry.coordinates[1]),
- type: "yjdp",
- info: {
- coor: [pointInfo.geometry.coordinates[0], pointInfo.geometry.coordinates[1]],
- properties: pointInfo.properties
- },
- billboard: {
- width: 48,
- height: 48,
- image: "./static/image/point-dp.png",
- scale: 1,
- horizontalOrigin: SkyScenery.HorizontalOrigin.CENTER,
- verticalOrigin: SkyScenery.VerticalOrigin.BOTTOM,
- }
- }));
- })
- })
- } else {
- // 删除
- this.pointYJDPArr.map(function (point) {
- viewer.entities.remove(point)
- })
- this.pointYJDPArr = []
- this.yjdpInfoDialogShow = false;
- this.nowPoint = null
- }
- this.pointTCHandle();
- },
- closeYJDP() {
- this.yjdpInfoDialogShow = false;
- this.nowPoint = null
- },
- // 空置店铺
- addkzdp() {
- let that = this;
- this.kzdpShow = !this.kzdpShow
- if (this.kzdpShow) {
- // 添加
- fetch("./static/data/沿街店铺-空置.geojson")
- .then(response => response.json())
- .then(function (result) {
- that.pointKZDPArr = result.features.map(function (pointInfo) {
- return viewer.entities.add(new SkyScenery.Entity({
- position: SkyScenery.Cartesian3.fromDegrees(pointInfo.geometry.coordinates[0], pointInfo.geometry.coordinates[1], 0.5),
- type: "kzdp",
- info: {
- coor: [pointInfo.geometry.coordinates[0], pointInfo.geometry.coordinates[1]],
- properties: pointInfo.properties
- },
- billboard: {
- width: 48,
- height: 48,
- image: "./static/image/kzdp.png",
- scale: 1,
- horizontalOrigin: SkyScenery.HorizontalOrigin.CENTER,
- verticalOrigin: SkyScenery.VerticalOrigin.BOTTOM,
- }
- }));
- })
- })
- } else {
- // 删除
- this.pointKZDPArr.map(function (point) {
- viewer.entities.remove(point)
- })
- this.pointKZDPArr = []
- this.kzdpInfoDialogShow = false;
- this.nowPoint = null
- }
- this.pointTCHandle();
- },
- closeKZDP() {
- this.kzdpInfoDialogShow = false;
- this.nowPoint = null
- },
- // 点击事件绑定
- pointTCHandle() {
- let that = this;
- if (!this.mapHandle) {
- this.mapHandle = new SkyScenery.ScreenSpaceEventHandler(viewer.canvas, this);
- this.mapHandle.setInputAction(function (movement) {
- // 获取鼠标位置
- const pickedObject = viewer.scene.pick(movement.position);
- if (SkyScenery.defined(pickedObject) && SkyScenery.defined(pickedObject.id)) {
- const entity = pickedObject.id;
- if (entity.type == "yjdp") {
- /**
- * 根据拾取到的点位的经纬度 转成 屏幕坐标
- * 添加文字描述
- */
- // let xy = viewer.scene.cartesianToCanvasCoordinates(entity.position.getValue())
- // "街镇": "夏阳街道",
- // "网格编码": "31011800101",
- // "居委": "祥龙居委会",
- // "地理编码": "310118001005",
- // "地址": "浦仓路437号",
- // "城市": "上海市",
- // "区县": "青浦区",
- // "网格名称": "第一责任网格",
- // "简称": "31011800101"
- that.yjdpInfoDialogShow = true
- that.nowPoint = entity.info;
- that.nowPoint["type"] = "yjdp";
- let xy = that.lonlatConvertToScreenXY(entity.info.coor)
- document.querySelector(".yjdpInfoDialog").style.top = (xy.y - 250) + "px";
- document.querySelector(".yjdpInfoDialog").style.left = (xy.x - 150) + "px";
- // document.querySelector("#yjdpInfoDialog")
- // that.removePanel();
- // that.addPointDivLabel(xy, entity.info.name)
- } else if (entity.type == "kzdp") {
- that.kzdpInfoDialogShow = true
- that.nowPoint = entity.info;
- that.nowPoint["type"] = "kzdp";
- let xy = that.lonlatConvertToScreenXY(entity.info.coor)
- document.querySelector(".kzdpInfoDialog").style.top = (xy.y - 250) + "px";
- document.querySelector(".kzdpInfoDialog").style.left = (xy.x - 150) + "px";
- }
- that.$refs.kdyjs.clickPointJGTL({
- lon: entity.info.coor[0],
- lat: entity.info.coor[1]
- })
- } else {
- // console.log('未拾取到实体');
- /**
- * 删除文字描述
- */
- // that.removePanel();
- }
- }, SkyScenery.ScreenSpaceEventType.LEFT_CLICK);
- viewer.scene.postRender.addEventListener(this.updatePosition, this);
- } else {
- if (this.yjdpShow == false && this.kzdpShow == false) {
- toRaw(this.mapHandle).destroy();
- this.mapHandle = null
- viewer.scene.postRender.removeEventListener(this.updatePosition, this);
- }
- }
- },
- // 位置更新
- updatePosition() {
- try {
- if (this.nowPoint != null) {
- const obj = toRaw(this.nowPoint);
- let xy = this.lonlatConvertToScreenXY(obj.coor)
- if (!xy) {
- if (obj.type == "yjdp") {
- document.querySelector(".yjdpInfoDialog").style.top = "-9999px";
- document.querySelector(".yjdpInfoDialog").style.left = "-9999px";
- } else if (obj.type == "kzdp") {
- document.querySelector(".kzdpInfoDialog").style.top = "-9999px";
- document.querySelector(".kzdpInfoDialog").style.left = "-9999px";
- }
- } else {
- if (obj.type == "yjdp") {
- document.querySelector(".yjdpInfoDialog").style.top = (xy.y - 250) + "px";
- document.querySelector(".yjdpInfoDialog").style.left = (xy.x - 150) + "px";
- } else if (obj.type == "kzdp") {
- document.querySelector(".kzdpInfoDialog").style.top = (xy.y - 250) + "px";
- document.querySelector(".kzdpInfoDialog").style.left = (xy.x - 150) + "px";
- }
- }
- }
- } catch (error) {
- // debugger
- }
- },
- // 经纬度转屏幕坐标
- lonlatConvertToScreenXY(lonlat) {
- // 定义经纬度
- var longitude = SkyScenery.Math.toRadians(lonlat[0]); // 例如:东经116.391度
- var latitude = SkyScenery.Math.toRadians(lonlat[1]); // 例如:北纬39.907度
- var height = 0; // 高度,通常在地表为0
- // 将经纬度转换为笛卡尔坐标
- // var cartographic = SkyScenery.Cartographic.fromDegrees(longitude, latitude, height);
- var cartesian = SkyScenery.Cartesian3.fromRadians(longitude, latitude, height, viewer.scene.globe.ellipsoid);
- // 将笛卡尔坐标转换为窗口坐标
- var canvasCoordinates = viewer.scene.cartesianToCanvasCoordinates(cartesian);
- return canvasCoordinates
- },
- // 热力图列表展示
- handleOpenHeatmapPanelShow() {
- this.heatmapPanelShow = !toRaw(this.heatmapPanelShow)
- this.layerPanelShow = false
- },
- // 图层列表展示
- handleOpenLayerPanelShow() {
- this.layerPanelShow = !toRaw(this.layerPanelShow)
- this.heatmapPanelShow = false
- },
- // 区分图层类型后按照不同类型加载
- judgeLayerType(judge, params) {
- if (params.type == "heatmap") {
- this.addHeatMapLayer(judge, params);
- } else {
- this.addWMSLayer(judge, params);
- }
- },
- // 加载wms服务
- addWMSLayer(judge, params) {
- if (judge) {
- let layer = viewer.imageryLayers.addImageryProvider(
- new SkyScenery.WebMapServiceImageryProvider({
- url: this.layerRoot,
- layers: params.layers,
- parameters: {
- TRANSPARENT: true,
- format: "image/png"
- }
- })
- )
- this.wmslayer[params.name] = layer;
- } else {
- viewer.imageryLayers.remove(toRaw(this.wmslayer[params.name]))
- delete this.wmslayer[params.name];
- }
- },
- // 加载热力图
- addHeatMapLayer(judge, params) {
- let that = this;
- if (judge) {
- fetch(params.url)
- .then(response => response.json())
- .then(function (result) {
- let arr = result.features.map(function (item) {
- let coor = item.geometry.coordinates
- return {
- x: coor[0],
- y: coor[1],
- value: 1
- }
- })
- that.heatmapLayer[params.name] = new SkySceneryHeatmap(viewer, {
- data: arr,
- flyTo: false,
- height: 0,
- heatStyle: {
- // blur: 0.7,
- // gradient: { 0.3: 'blue', 0.6: 'green', 0.8: 'yellow', 0.9: 'red' },
- // maxOpacity: 0.9,
- // minOpacity: 0.3,
- radius: 1,
- maxOpacity: 0.6,
- minOpacity: 0,
- blur: 0.85,
- gradient: {
- 0.4: 'blue',
- 0.5: 'cyan',
- 0.6: 'green',
- 0.7: 'yellow',
- 0.8: 'orange',
- 0.9: 'red'
- }
- },
- }, SkyScenery)
- })
- } else {
- if (Object.keys(toRaw(this.heatmapLayer)).length > 0) {
- this.heatmapLayer[params.name].destroy();
- delete this.heatmapLayer[params.name]
- }
- }
- }
- }
- };
- </script>
- <style lang="less" scoped>
- .home {
- width: 100%;
- height: 100%;
- position: relative;
- user-select: none;
- /* Chrome, Opera, Safari */
- -moz-user-select: none;
- /* Firefox */
- -ms-user-select: none;
- /* Internet Explorer/Edge */
- -khtml-user-select: none;
- /* Konqueror/Safari */
- .control3D {
- height: 40px;
- position: absolute;
- bottom: 155px;
- right: 20px;
- background: #01346f99;
- border: 1px solid #ffffff;
- padding: 0px 10px;
- border-radius: 10px;
- color: #ffffff;
- .label {
- display: inline-block;
- height: 40px;
- line-height: 40px;
- margin-right: 5px;
- }
- .el-switch {
- vertical-align: top;
- }
- }
- .changeBaseMap {
- position: absolute;
- bottom: 50px;
- right: 20px;
- background: #01346f99;
- padding: 0px 10px;
- color: #ffffff;
- padding: 10px 10px;
- cursor: pointer;
- border-radius: 10px;
- z-index: 9;
- .container {
- position: relative;
- height: 80px;
- width: 122px;
- animation: animation-wdith-back 0.5s ease-in-out 1;
- div .content {
- height: 80px;
- width: 100px;
- border-radius: 10px;
- border: 1px solid #ffffff;
- }
- div .content.active {
- border-color: #00bbff;
- .label {
- color: #00bbff;
- }
- }
- div .content:hover {
- border-color: #00bbff;
- .label {
- color: #00bbff;
- }
- }
- >div {
- width: 100px;
- height: 80px;
- position: absolute;
- // border: 1px solid #ffffff;
- border-radius: 10px;
- .label {
- width: 100%;
- height: 24px;
- position: absolute;
- bottom: 0px;
- text-align: center;
- font-size: 16px;
- background: #00000080;
- border-bottom-right-radius: 10px;
- border-bottom-left-radius: 10px;
- }
- }
- >div:nth-child(1) {
- z-index: 1;
- right: 20px;
- background: url(~@/assets/images/base2.png) no-repeat center center/100% 100%;
- animation: animation-right-back 0.5s ease-in-out 1;
- }
- >div:nth-child(2) {
- z-index: 2;
- right: 0px;
- background: url(~@/assets/images/base1.png) no-repeat center center/100% 100%;
- }
- }
- &:hover {
- .container {
- width: 220px;
- animation: animation-wdith 0.5s ease-in-out 1;
- >div:nth-child(1) {
- right: 120px;
- animation: animation-right 0.5s ease-in-out 1;
- }
- }
- }
- }
- @keyframes animation-right {
- from {
- right: 20px;
- }
- to {
- right: 120px;
- }
- }
- @keyframes animation-right-back {
- from {
- right: 120px;
- }
- to {
- right: 20px;
- }
- }
- @keyframes animation-wdith {
- from {
- width: 124px;
- }
- to {
- width: 224px;
- }
- }
- @keyframes animation-wdith-back {
- from {
- width: 224px;
- }
- to {
- width: 122px;
- }
- }
- .layerContorl {
- position: absolute;
- right: 20px;
- bottom: 160px;
- .ckzb-btn {
- width: 70px;
- height: 40px;
- border-radius: 10px;
- color: #ffffff;
- cursor: pointer;
- background: #01346f99;
- line-height: 38px;
- padding: 0 15px;
- text-align: center;
- border: 1px solid #eeeeee;
- &.isActive {
- background: #005cc6cc
- }
- &:hover {
- background: #005cc6cc;
- }
- }
- .layerPanel {
- position: absolute;
- right: 110px;
- bottom: 0px;
- background: #01346f99;
- border-radius: 5px;
- // padding: 0 10px;
- padding-left: 10px;
- height: fit-content;
- overflow: hidden;
- overflow-y: auto;
- height: 240px;
- ul {
- margin: 0 0;
- padding: 0 0;
- }
- li {
- list-style: none;
- padding-right: 10px;
- .el-checkbox {
- color: #ffffff;
- &.is-checked {
- :deep(.el-checkbox__label) {
- color: #ffffff;
- }
- }
- }
- }
- }
- }
- .heatmapContorl {
- position: absolute;
- right: 20px;
- bottom: 220px;
- .ckzb-btn {
- width: 70px;
- height: 40px;
- border-radius: 10px;
- color: #ffffff;
- cursor: pointer;
- background: #01346f99;
- line-height: 38px;
- padding: 0 15px;
- text-align: center;
- border: 1px solid #eeeeee;
- &.isActive {
- background: #005cc6cc
- }
- &:hover {
- background: #005cc6cc;
- }
- }
- .heatmapPanel {
- position: absolute;
- right: 0;
- bottom: 50px;
- background: #01346f99;
- border-radius: 5px;
- padding-left: 10px;
- height: fit-content;
- overflow: hidden;
- overflow-y: auto;
- height: 280px;
- ul {
- margin: 0 0;
- padding: 0 0;
- }
- li {
- list-style: none;
- padding-right: 10px;
- .el-checkbox {
- color: #ffffff;
- &.is-checked {
- :deep(.el-checkbox__label) {
- color: #ffffff;
- }
- }
- }
- }
- }
- }
- .heatmapLegend {
- position: absolute;
- left: 400px;
- bottom: 50px;
- width: 50px;
- height: 200px;
- background: url(~@/assets/images/heatmapLegend.png) no-repeat center center/100% 100%;
- }
- .tips {
- position: absolute;
- left: 0px;
- bottom: 0px;
- color: #ffffff;
- padding: 10px 10px;
- background: #01346f99;
- width: 100%;
- text-align: center;
- }
- .yjdp-btn {
- position: absolute;
- top: 80px;
- right: 20px;
- width: 70px;
- height: 40px;
- border-radius: 10px;
- color: #ffffff;
- cursor: pointer;
- background: #01346f99;
- line-height: 38px;
- padding: 0 15px;
- text-align: center;
- border: 1px solid #eeeeee;
- &.isActive {
- background: #005cc6cc;
- }
- &:hover {
- background: #005cc6cc;
- }
- }
- .kzdp-btn {
- position: absolute;
- top: 130px;
- right: 20px;
- width: 70px;
- height: 40px;
- border-radius: 10px;
- color: #ffffff;
- cursor: pointer;
- background: #01346f99;
- line-height: 38px;
- padding: 0 15px;
- text-align: center;
- border: 1px solid #eeeeee;
- &.isActive {
- background: #005cc6cc;
- }
- &:hover {
- background: #005cc6cc;
- }
- }
- .yhfk-btn {
- position: absolute;
- top: 180px;
- right: 20px;
- width: 70px;
- height: 40px;
- border-radius: 10px;
- color: #ffffff;
- cursor: pointer;
- background: #01346f99;
- line-height: 38px;
- padding: 0 15px;
- text-align: center;
- border: 1px solid #eeeeee;
- &:hover {
- background: #005cc6cc;
- }
- }
- .zxq-btn {
- position: absolute;
- top: 230px;
- right: 20px;
- width: 80px;
- height: 80px;
- border-radius: 10px;
- color: #ffffff;
- cursor: pointer;
- background: #01346f99 url(~@/assets/images/zxq.png) no-repeat center center /90% 90%;
- padding: 10px 10px;
- text-align: center;
- line-height: 90px;
- border: 1px solid #eeeeee;
- &.isActive {
- background: #005cc6cc url(~@/assets/images/zxq.png) no-repeat center center /90% 90%;
- }
- &:hover {
- background: #005cc6cc url(~@/assets/images/zxq.png) no-repeat center center /90% 90%;
- }
- }
- .yjdpInfoDialog {
- position: absolute;
- top: 0px;
- left: 0px;
- width: 300px;
- height: 200px;
- background: #01346f99;
- border-radius: 10px;
- .close {
- font-size: 24px;
- position: absolute;
- top: 6px;
- right: 8px;
- line-height: 24px;
- width: 24px;
- height: 24px;
- cursor: pointer;
- color: #ffffff;
- }
- .content {
- height: 160px;
- color: #ffffff;
- margin: 30px 0px 10px 20px;
- .item {
- line-height: 30px;
- margin-right: 20px;
- }
- }
- }
- .kzdpInfoDialog {
- position: absolute;
- top: 0px;
- left: 0px;
- width: 300px;
- height: 200px;
- background: #01346f99;
- border-radius: 10px;
- .close {
- font-size: 24px;
- position: absolute;
- top: 6px;
- right: 8px;
- line-height: 24px;
- width: 24px;
- height: 24px;
- cursor: pointer;
- color: #ffffff;
- }
- .content {
- height: 160px;
- color: #ffffff;
- margin: 30px 0px 10px 20px;
- .item {
- line-height: 30px;
- margin-right: 20px;
- }
- }
- }
- .zxqIframeContainer {
- position: absolute;
- top: 100px;
- bottom: 100px;
- width: 600px;
- right: 200px;
- padding: 10px 10px;
- border-radius: 10px;
- overflow: hidden;
- background: #01346f99;
- .close {
- font-size: 24px;
- font-weight: bold;
- position: absolute;
- top: 15px;
- right: 15px;
- z-index: 1;
- cursor: pointer;
- width: 30px;
- height: 30px;
- text-align: center;
- line-height: 30px;
- }
- iframe {
- width: 100%;
- height: 100%;
- }
- }
- }
- </style>
|