From dcbda98765ffa9e8066330502379fafbf2a750b7 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 14 Dec 2021 16:21:34 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.105:10010/r/school-web
---
src/router/page/index.js | 343 +++++++------
src/mobileviews/home/index.vue | 29 +
src/mobileLayout/index.vue | 13
src/components/mobileCortrolButtom/index.vue | 53 ++
src/store/index.js | 4
src/components/mobileLeftNav/index.vue | 351 ++++++++++++++
src/store/modules/mobile.js | 16
src/components/mobileCortrol/index.vue | 50 ++
src/styles/common.scss | 41 -
src/components/mobilemap/index.vue | 259 ++++++++++
src/main.js | 4
src/styles/mobile/popup.scss | 68 ++
src/store/getters.js | 3
src/store/modules/viewer.js | 1
src/components/mobileCortrolSearch/index.vue | 66 ++
src/mobileDivForms/mobileDivForms.js | 154 ++++++
16 files changed, 1,252 insertions(+), 203 deletions(-)
diff --git a/src/components/mobileCortrol/index.vue b/src/components/mobileCortrol/index.vue
new file mode 100644
index 0000000..a189ca4
--- /dev/null
+++ b/src/components/mobileCortrol/index.vue
@@ -0,0 +1,50 @@
+<template>
+ <div class="m-left-control">
+ <div class="m-l-inbut">+</div>
+ <div class="m-l-inbut">-</div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "mobileCortrol",
+ computed: {},
+ data() {
+ return {
+ viewer: null,
+ DC: null,
+ };
+ },
+ created() {
+ this.DC = global.DC;
+ },
+ mounted() {},
+ methods: {
+ initialize(viewer) {
+ viewer.scene.globe.depthTestAgainstTerrain = false;
+ this.viewer = viewer;
+ },
+ },
+};
+</script>
+
+<style scoped lang='scss'>
+.m-left-control {
+ position: fixed;
+ left: 20px;
+ top: 20px;
+ z-index: 200;
+ .m-l-inbut {
+ width: 32px;
+ height: 32px;
+ background-color: #c9302c;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ font-size: 22px;
+ margin-bottom: 12px;
+ border-radius: 5px;
+ }
+}
+</style>
diff --git a/src/components/mobileCortrolButtom/index.vue b/src/components/mobileCortrolButtom/index.vue
new file mode 100644
index 0000000..ea17825
--- /dev/null
+++ b/src/components/mobileCortrolButtom/index.vue
@@ -0,0 +1,53 @@
+<template>
+ <div class="m-left-mobileCortrolButtom">
+ <div class="m-l-inbut"><i class="el-icon-s-help"></i></div>
+ <div class="m-l-inbut"><i class="el-icon-s-flag"></i></div>
+ <div class="m-l-inbut"><i class="el-icon-menu"></i></div>
+ <div class="m-l-inbut"><i class="el-icon-location"></i></div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "mobileCortrolButtom",
+ computed: {},
+ data() {
+ return {
+ viewer: null,
+ DC: null,
+ };
+ },
+ created() {
+ this.DC = global.DC;
+ },
+ mounted() {},
+ methods: {
+ initialize(viewer) {
+ viewer.scene.globe.depthTestAgainstTerrain = false;
+ this.viewer = viewer;
+ },
+ },
+};
+</script>
+
+<style scoped lang='scss'>
+.m-left-mobileCortrolButtom {
+ position: fixed;
+ bottom: 20px;
+ left: 20px;
+ z-index: 200;
+ .m-l-inbut {
+ float: left;
+ width: 39px;
+ height: 39px;
+ background-color: #c9302c;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ font-size: 22px;
+ margin-left: 12px;
+ border-radius: 5px;
+ }
+}
+</style>
diff --git a/src/components/mobileCortrolSearch/index.vue b/src/components/mobileCortrolSearch/index.vue
new file mode 100644
index 0000000..3926498
--- /dev/null
+++ b/src/components/mobileCortrolSearch/index.vue
@@ -0,0 +1,66 @@
+<template>
+ <div class="m-left-mobileCortrolSearch">
+ <div class="m-left-SearchMain">
+ <el-input placeholder="请输入内容" v-model="input" clearable size="small"
+ ><el-button
+ slot="append"
+ class="iconSearch"
+ icon="el-icon-search"
+ ></el-button>
+ </el-input>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "mobileCortrolSearch",
+ computed: {},
+ data() {
+ return {
+ viewer: null,
+ DC: null,
+ };
+ },
+ created() {
+ this.DC = global.DC;
+ },
+ mounted() {},
+ methods: {
+ initialize(viewer) {
+ viewer.scene.globe.depthTestAgainstTerrain = false;
+ this.viewer = viewer;
+ },
+ },
+};
+</script>
+
+<style scoped lang='scss'>
+.m-left-mobileCortrolSearch {
+ width: 100%;
+ position: fixed;
+ top: 0;
+ // left: 20px;
+ z-index: 200;
+ .m-left-SearchMain {
+ margin: 0 auto;
+ width: 60%;
+ position: relative;
+ z-index: 1;
+ top: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .iconSearch {
+ width: 30px;
+ height: 30px;
+ padding-top: 0;
+ padding-bottom: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 24px;
+ }
+ }
+}
+</style>
diff --git a/src/components/mobileLeftNav/index.vue b/src/components/mobileLeftNav/index.vue
new file mode 100644
index 0000000..1247850
--- /dev/null
+++ b/src/components/mobileLeftNav/index.vue
@@ -0,0 +1,351 @@
+<template>
+ <div class="m-left-nav" :style="[navStyle]">
+ <!-- :style="[coutrolStyle]" -->
+ <div class="m-left-coutrol" @click="iconHide = !iconHide">
+ <i :class="icons"></i>
+ </div>
+ <ul>
+ <li
+ v-for="(item, index) in leftNavData"
+ :key="index"
+ @click="leftNavClick(item)"
+ >
+ <img :style="[imgStyle]" :src="item.img" alt="" />
+ <span>{{ item.label }}</span>
+ </li>
+ </ul>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "mobileLeftNav",
+ computed: {},
+ watch: {
+ iconHide() {
+ if (this.iconHide) {
+ this.icons = "el-icon-d-arrow-left";
+ this.navStyle.right = "-51px";
+ this.imgStyle.right = "6px";
+ } else {
+ this.icons = "el-icon-d-arrow-right";
+ this.navStyle.right = "0px";
+ this.imgStyle.right = "0";
+ }
+ },
+ },
+ data() {
+ return {
+ icons: "el-icon-d-arrow-right",
+ iconHide: false,
+ navStyle: {
+ right: "0px",
+ },
+ imgStyle: {
+ right: "0",
+ },
+ // coutrolStyle: {
+ // position: " absolute",
+ // left: "-26px",
+ // top: "114px",
+ // right: "auto",
+ // width: "25px",
+ // height: "60px",
+ // backgroundColor: "#fff",
+ // borderRadius: "10px",
+ // display: "flex",
+ // alignItems: "center",
+ // justifyContent: "center",
+ // transition: "left 3s",
+ // },
+ leftNavData: [
+ {
+ flag: false,
+ label: "标签",
+ img: "/img/leftnav/tag.png",
+ normal: "/img/leftnav/tag.png",
+ checked: "/img/leftnav/tag-checked.png",
+ layer: "tagLayer",
+ },
+ {
+ flag: false,
+ label: "道路",
+ img: "/img/leftnav/way.png",
+ normal: "/img/leftnav/way.png",
+ checked: "/img/leftnav/way-checked.png",
+ layer: "wayLayer",
+ },
+ {
+ flag: false,
+ label: "实景",
+ img: "/img/leftnav/scene.png",
+ normal: "/img/leftnav/scene.png",
+ checked: "/img/leftnav/scene-checked.png",
+ layer: "sceneLayer",
+ },
+ {
+ flag: false,
+ label: "活动",
+ img: "/img/leftnav/activity.png",
+ normal: "/img/leftnav/activity.png",
+ checked: "/img/leftnav/activity-checked.png",
+ layer: "activityLayer",
+ },
+ {
+ flag: false,
+ label: "AED",
+ img: "/img/leftnav/aed.png",
+ normal: "/img/leftnav/aed.png",
+ checked: "/img/leftnav/aed-checked.png",
+ layer: "aedLayer",
+ },
+ {
+ flag: false,
+ label: "停车",
+ img: "/img/leftnav/park.png",
+ normal: "/img/leftnav/park.png",
+ checked: "/img/leftnav/park-checked.png",
+ layer: "parkLayer",
+ },
+ {
+ flag: false,
+ label: "出入",
+ img: "/img/leftnav/come.png",
+ normal: "/img/leftnav/come.png",
+ checked: "/img/leftnav/come-checked.png",
+ layer: "comeLayer",
+ },
+ ],
+ viewer: null,
+ DC: null,
+ tagLayer: null,
+ wayLayer: null,
+ sceneLayer: null,
+ activityLayer: null,
+ aedLayer: null,
+ parkLayer: null,
+ comeLayer: null,
+ };
+ },
+ created() {
+ this.DC = global.DC;
+ },
+ mounted() {},
+ methods: {
+ generatePosition(num) {
+ const list = [];
+ for (let i = 0; i < num; i++) {
+ const lng = 121.0493 + Math.random() * 0.5;
+ const lat = 31.2583 + Math.random() * 0.5;
+ list.push(new this.DC.Position(lng, lat, 0));
+ }
+ return list;
+ },
+ leftNavClick(item) {
+ item.flag = !item.flag;
+ if (item.flag == true) {
+ item.img = item.checked;
+ this[item.layer].show = true;
+ } else {
+ item.img = item.normal;
+ this[item.layer].show = false;
+ }
+ },
+ initialize(viewer) {
+ viewer.scene.globe.depthTestAgainstTerrain = false;
+ this.viewer = viewer;
+ this.tagLayer = new this.DC.HtmlLayer("tagLayer");
+ viewer.addLayer(this.tagLayer);
+ this.wayLayer = new this.DC.HtmlLayer("wayLayer");
+ viewer.addLayer(this.wayLayer);
+ this.sceneLayer = new this.DC.VectorLayer("sceneLayer");
+ viewer.addLayer(this.sceneLayer);
+
+ this.aedLayer = new this.DC.VectorLayer("aedLayer");
+ viewer.addLayer(this.aedLayer);
+
+ this.parkLayer = new this.DC.HtmlLayer("parkLayer");
+ viewer.addLayer(this.parkLayer);
+ this.comeLayer = new this.DC.VectorLayer("comeLayer");
+ viewer.addLayer(this.comeLayer);
+
+ const positions1 = this.generatePosition(50);
+ positions1.forEach((item, index) => {
+ const divIcon = new this.DC.DivIcon(
+ item,
+ `
+ <div class="tag-entitys-box">
+ <div class="tag-content">
+ 南门口
+ </div>
+ <div class="tag-angle-content">
+ <img src="https://map.hit.edu.cn/images/tarrow_xq.png">
+ </div>
+ </div>
+ `
+ );
+ this.tagLayer.addOverlay(divIcon);
+ });
+
+ const positions2 = this.generatePosition(50);
+ positions2.forEach((item, index) => {
+ const divIcon = new this.DC.DivIcon(
+ item,
+ `
+ <div class="way-entitys-box">
+ <div class="way-title" style="border: white 1px solid; padding-left: 2px;font-size: 12px; background: #0066ff; width: 12px;line-height: 13px; padding:2px 1px 2px 1px; color:white;">
+ 工建街
+ </div>
+ <div class="way-sign-box">
+ <img src="https://map.hit.edu.cn/images/roadsign3.png">
+ </div>
+ </div>
+ `
+ );
+ this.wayLayer.addOverlay(divIcon);
+ });
+
+ const positions3 = this.generatePosition(50);
+ positions3.forEach((item) => {
+ const billboard = new this.DC.Billboard(
+ item,
+ "/img/leftnav/map-panorama.png"
+ );
+ billboard.size = [16, 16];
+ this.sceneLayer.addOverlay(billboard);
+ });
+
+ const positions4 = this.generatePosition(10);
+ positions4.forEach((item, index) => {
+ const label = new this.DC.Label(item, "建筑AED");
+ label.setStyle({
+ fillColor: this.DC.Color.ORANGERED,
+ font: "10px sans-serif",
+ pixelOffset: { x: 0, y: -16 },
+ });
+ this.aedLayer.addOverlay(label);
+
+ const billboard = new this.DC.Billboard(
+ item,
+ "/img/leftnav/map-aed.png"
+ );
+ billboard.size = [16, 16];
+
+ this.aedLayer.addOverlay(billboard);
+ });
+
+ const positions5 = this.generatePosition(120);
+ positions5.forEach((item, index) => {
+ const divIcon = new this.DC.DivIcon(
+ item,
+ `
+ <div class="park-entitys-box">
+ <div class="park-title" alt="校外街路侧停车场">
+ </div>
+ <div class="park-sign-box">
+ <div>
+ <img src="https://map.hit.edu.cn/images/p-biao.png" width="14" height="14" alt="校外街路侧停车场" title="校外街路侧停车场">
+ </div>
+ <div>
+ <img src="https://map.hit.edu.cn/images/roadsign.png" width="5" height="21">
+ </div>
+ </div>
+ </div>
+ `
+ );
+ this.parkLayer.addOverlay(divIcon);
+ });
+
+ const positions6 = this.generatePosition(10);
+ positions6.forEach((item, index) => {
+ const label = new this.DC.Label(item, "123");
+ label.setStyle({
+ fillColor: this.DC.Color.PURPLE,
+ outlineColor: this.DC.Color.WHITE, // 边框颜色
+ outlineWidth: 2, // 边框大小,
+ font: "10px sans-serif",
+ pixelOffset: { x: 0, y: -16 },
+ });
+ this.comeLayer.addOverlay(label);
+
+ const billboard = new this.DC.Billboard(
+ item,
+ "/img/leftnav/map-activity.png"
+ );
+ billboard.size = [16, 16];
+
+ this.comeLayer.addOverlay(billboard);
+ });
+
+ this.tagLayer.show = false;
+ this.wayLayer.show = false;
+ this.sceneLayer.show = false;
+ this.aedLayer.show = false;
+ this.parkLayer.show = false;
+ this.comeLayer.show = false;
+ },
+ },
+};
+</script>
+
+<style scoped lang='scss'>
+.m-left-nav {
+ position: fixed;
+ bottom: 30px;
+ right: 0px;
+ z-index: 200;
+ background-color: #fff;
+ border-radius: 17px 0 0 17px;
+ transition: all 0.5s;
+ .m-left-coutrol {
+ position: absolute;
+ left: -24px;
+ top: 96px;
+ width: 25px;
+ height: 60px;
+ background-color: #fff;
+ border-radius: 17px 0 0 17px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ ul {
+ position: relative;
+ top: 3px;
+ }
+ li {
+ margin-bottom: 6px;
+ font-weight: 400;
+ display: block;
+ width: 80px;
+ height: 30px;
+ line-height: 30px;
+ background-color: #fff;
+ border-radius: 15px;
+ text-align: center;
+ font-size: 0;
+ cursor: pointer;
+
+ img {
+ position: relative;
+ transition: all 0.5s;
+ width: 24px;
+ height: 24px;
+ vertical-align: middle;
+ margin-right: 10px;
+ image-rendering: -moz-crisp-edges;
+ image-rendering: -o-crisp-edges;
+ image-rendering: -webkit-optimize-contrast;
+ image-rendering: crisp-edges;
+ -ms-interpolation-mode: nearest-neighbor;
+ }
+
+ span {
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 14px;
+ color: #2f2f2f;
+ }
+ }
+}
+</style>
diff --git a/src/components/mobilemap/index.vue b/src/components/mobilemap/index.vue
new file mode 100644
index 0000000..637aae8
--- /dev/null
+++ b/src/components/mobilemap/index.vue
@@ -0,0 +1,259 @@
+/* eslint-disable camelcase */
+<template>
+ <div id="mobile-viewer-container">
+ <div id="mobile-map_popup_content"></div>
+
+ <div
+ ref="mobile-mapContentContent"
+ v-show="popupWindow"
+ id="mobile-map_content_content"
+ >
+ <div class="mobile-popup-imgs-heard">
+ <img :src="url" alt="" />
+ <el-image
+ style="width: 100px; height: 100px"
+ :src="url"
+ id="mobileBigImgs"
+ v-show="false"
+ :preview-src-list="srcList"
+ >
+ </el-image>
+ 哈工大A10公寫总建筑面积30740平方米,于2001年采用货款方式高标准建造并投入使用。整个楼体共分十层,地上九层为公寫主体。公寓外观呈工字型,公寓内房司以A、B、C三个区域別分,与哈工大雄厚的工科底蕴遥相呼应,是哈尔滨工业大学学生公寫的标志性建筑
+ </div>
+ <div class="mobile-popup-control">
+ <el-link icon="el-icon-picture-outline-round" @click="mobileOpenImgs"
+ >图集</el-link
+ >
+ <el-divider direction="vertical"></el-divider>
+
+ <el-link icon="el-icon-map-location">实景</el-link>
+ <el-divider direction="vertical"></el-divider>
+ <el-link icon="el-icon-aim">去这</el-link>
+ </div>
+ </div>
+ <mobileLeftNav ref="mobileLeftNav"></mobileLeftNav>
+ <mobileCortrol ref="mobileCortrol"></mobileCortrol>
+ <mobileCortrolButtom ref="mobileCortrolButtom"></mobileCortrolButtom>
+ <mobileCortrolSearch ref="mobileCortrolSearch"></mobileCortrolSearch>
+ </div>
+</template>
+<script>
+import { mapGetters } from "vuex";
+
+export default {
+ name: "mobilemapBox",
+ data() {
+ return {
+ url: "/img/job/one.jpg",
+ srcList: [
+ "https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg",
+ "https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg",
+ ],
+ popupFlag: false,
+ popupWindow: false,
+ };
+ },
+ computed: {
+ ...mapGetters(["mviewer"]),
+ },
+ mounted() {
+ var DC = global.DC;
+
+ var that = this;
+
+ let viewer;
+
+ function distanceSurface() {
+ viewer.measure.distanceSurface();
+ }
+
+ function calcArea() {
+ viewer.measure.area();
+ }
+
+ function areaSurface() {
+ viewer.measure.areaSurface();
+ }
+
+ function calcAngle() {
+ viewer.measure.angle();
+ }
+
+ function calcModelAngle() {
+ viewer.measure.angle({
+ clampToModel: true,
+ });
+ }
+
+ function calcHeight() {
+ viewer.measure.height();
+ }
+
+ function calcModelHeight() {
+ viewer.measure.height({
+ clampToModel: true,
+ });
+ }
+
+ function calcHeading() {
+ viewer.measure.heading();
+ }
+
+ function areaHeight() {
+ viewer.measure.areaHeight();
+ }
+
+ function calcTriangleHeight() {
+ viewer.measure.triangleHeight();
+ }
+
+ function calcModelTriangleHeight() {
+ viewer.measure.triangleHeight({
+ clampToModel: true,
+ });
+ }
+
+ function deactivate() {
+ viewer.measure.deactivate();
+ }
+
+ function gotoModel() {
+ viewer.flyTo(tileset);
+ }
+
+ function initViewer() {
+ viewer = new DC.Viewer("mobile-viewer-container", {
+ contextOptions: {
+ webgl: {
+ stencil: true,
+ preserveDrawingBuffer: true,
+ },
+ },
+ });
+ that.$refs.mobileLeftNav.initialize(viewer);
+
+ const popup = viewer.popup;
+
+ popup.hide();
+
+ that.$store.commit("MSET_VIEWER", viewer);
+
+ const baselayer = DC.ImageryLayerFactory.createArcGisImageryLayer({
+ url: "http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
+ });
+ viewer.addBaseLayer(baselayer, {
+ iconUrl: "examples/images/icon/img.png",
+ name: "影像",
+ });
+
+ // // eslint-disable-next-line camelcase
+ // const baselayer_shaded = DC.ImageryLayerFactory.createArcGisImageryLayer({
+ // url: "http://services.arcgisonline.com/arcgis/rest/services/World_Shaded_Relief/MapServer",
+ // });
+ // viewer.addBaseLayer(baselayer_shaded, {
+ // iconUrl: "examples/images/icon/elec.png",
+ // name: "电子",
+ // });
+
+ // // eslint-disable-next-line camelcase
+ // const baselayer_street = DC.ImageryLayerFactory.createArcGisImageryLayer({
+ // url: "http://services.arcgisonline.com/arcgis/rest/services/World_Physical_Map/MapServer",
+ // });
+ // viewer.addBaseLayer(baselayer_street, {
+ // iconUrl: "examples/images/icon/ter.png",
+ // name: "地形",
+ // });
+
+ // // eslint-disable-next-line camelcase
+ // const baselayer_ter = DC.ImageryLayerFactory.createArcGisImageryLayer({
+ // url: "http://services.arcgisonline.com/arcgis/rest/services/World_Terrain_Base/MapServer",
+ // });
+ // viewer.addBaseLayer(baselayer_ter, {
+ // iconUrl: "examples/images/icon/ter.png",
+ // name: "地形",
+ // });
+
+ const layer = new DC.TilesetLayer("layer");
+ viewer.addLayer(layer);
+ const tileset = new DC.Tileset(
+ "http://resource.dvgis.cn/data/3dtiles/ljz/tileset.json"
+ );
+ const style = new DC.TilesetStyle();
+ style.color = {
+ conditions: [
+ ["${Height} >= 300", "rgba(45, 0, 75, 0.5)"],
+ ["${Height} >= 200", "rgb(102, 71, 151)"],
+ ["${Height} >= 100", "rgb(170, 162, 204)"],
+ ["${Height} >= 50", "rgb(224, 226, 238)"],
+ ["${Height} >= 25", "rgb(252, 230, 200)"],
+ ["${Height} >= 10", "rgb(248, 176, 87)"],
+ ["${Height} >= 5", "rgb(198, 106, 11)"],
+ ["true", "rgb(127, 59, 8)"],
+ ],
+ };
+
+ viewer.use(new DC.Measure());
+
+ tileset.setStyle(style);
+ layer.addOverlay(tileset);
+ viewer.flyTo(tileset);
+
+ tileset.on(DC.MouseEventType.CLICK, (e) => {
+ // that.popupFlag = true
+ that.popupWindow = true;
+
+ viewer.scene.globe.depthTestAgainstTerrain = false;
+
+ // console.log(document.getElementById("mobile-map_content_content"));
+ console.log(e.position);
+
+ // 定制化窗体
+ var divForms = new DC.mobileDivForms(viewer, {
+ domId: "mobilePopup",
+ title: "成教楼 ",
+ className: "mobilePopup",
+ content: document.getElementById("mobile-map_content_content"),
+ position: [e.position],
+ });
+ viewer.zoomToPosition(
+ new DC.Position(
+ e.wgs84Position.lng,
+ e.wgs84Position.lat - 0.016,
+ 2030,
+ 0,
+ -45
+ )
+ );
+ // popup.setWrapper('<div></div>')
+
+ // popup.showAt(e.position, document.getElementById('modelPopup'))
+ });
+
+ // viewer.zoomToPosition(
+ // new DC.Position(105.565571, 31.984708, 15362816, 0, -90)
+ // )
+
+ viewer.compass.enable = false;
+ viewer.zoomController.enable = false;
+ viewer.locationBar.enable = false;
+ viewer.distanceLegend.enable = true;
+ }
+
+ DC.ready(initViewer);
+ },
+ methods: {
+ mobileOpenImgs() {
+ let imgsDom = document.getElementById("mobileBigImgs");
+ imgsDom.click();
+ },
+ },
+};
+</script>
+
+<style lang='scss' scope>
+#mobile-viewer-container {
+ width: 100%;
+ height: 100%;
+ position: relative;
+}
+</style>
diff --git a/src/main.js b/src/main.js
index 2ac8264..ec145f3 100644
--- a/src/main.js
+++ b/src/main.js
@@ -42,6 +42,10 @@
DC.divForms = divForms
+//手机弹窗
+import mobileDivForms from '@/mobileDivForms/mobileDivForms'
+DC.mobileDivForms = mobileDivForms
+
DC.use(DcCore) // 安装DC核心库
// DC.use(DcChart) // 安装DC图标库,使用前确保echarts为全局函数
diff --git a/src/mobileDivForms/mobileDivForms.js b/src/mobileDivForms/mobileDivForms.js
new file mode 100644
index 0000000..e26010c
--- /dev/null
+++ b/src/mobileDivForms/mobileDivForms.js
@@ -0,0 +1,154 @@
+/*
+ * @Descripttion:
+ * @version: 0.01
+ * @Author: Morpheus
+ * @Date: 2020-10-22 11:05:09
+ * @LastEditors: Morpheus
+ * @LastEditTime: 2020-10-22 13:48:22
+ */
+
+import DC from '@dvgis/dc-sdk/dist/dc.base.min' // 基础包
+import DcCore from '@dvgis/dc-sdk/dist/dc.core.min' // 核心包
+
+var $ = window.$
+
+DC.use(DcCore) // 安装DC核心库
+
+class mobileDivForms {
+ /**
+ * @popup 存放 dom 相关
+ *
+ */
+ constructor(viewer, popup) {
+ this._viewer = viewer
+ this._popup = popup
+ this._position = popup.position
+ this._title = popup.title
+ this._content = popup.content
+ this.appendPopup()
+ }
+
+ get viewer() {
+ return this._viewer
+ }
+
+ get title() {
+ return this._title
+ }
+
+ get content() {
+ return this._content
+ }
+
+ get popup() {
+ return this._popup
+ }
+
+ get position() {
+ return this._position
+ }
+
+ appendPopup() {
+ /**
+ * @domId 存放 dom 的id, 多个数组,单个字符串
+ */
+
+ this.createVideoWindowAll(this._popup.domId, this._popup.className, this._position[0])
+ }
+
+ // 创建元素并追加
+ createVideoWindowAll(id, className, position) {
+ var childs = document.getElementById('mobile-map_popup_content').getElementsByTagName('div')
+
+ if (childs.length > 0) {
+ for (var i = 0; i < childs.length; i++) {
+ document.getElementById('mobile-map_popup_content').removeChild(childs[i])
+ }
+ }
+
+ var self = this
+
+ var el = $("<div class=''></div>")
+
+ // var divBig = $("<div style='width: 100%; height: 100%;' class=''></div>")
+
+ // var divForms = $("<div class='divForms divForms-theme'></div>")
+
+ // var divFormsWrap = $("<div class='divForms-wrap'></div>")
+
+ // var area = $("<div class='area'></div>")
+
+ // var arrowLt = $("<div class='arrow-lt'></div>")
+ // var bT = $("<div class='b-t'></div>")
+ // var bR = $("<div class='b-r'></div>")
+ // var bB = $("<div class='b-b'></div>")
+ // var bL = $("<div class='b-l'></div>")
+ // var arrowRb = $("<div class='arrow-rb'></div>")
+
+ // var labelWrap = $("<div class='label-wrap'></div>")
+ var titleDiv = $("<div class='mobiletitle'></div>").text(this._title)
+ var labelContent = $("<div class='mobilelabel-content'></div>").append(this._content)
+
+ // var titleDiv = $("<div class='mobiletitle'>楼</div>")
+ // var labelContent = $("<div class='mobilelabel-content'>内容</div>")
+
+ // labelWrap.append(titleDiv)
+ // labelWrap.append(labelContent)
+
+ // var bTL = $("<div class='b-t-l'></div>")
+ // var bBR = $("<div class='b-b-r'></div>")
+
+ // var arrow = $("<div class='arrow'></div>")
+
+ // area.append(arrowLt)
+ // area.append(bT)
+ // area.append(bR)
+ // area.append(bB)
+ // area.append(bL)
+ // area.append(arrowRb)
+ // area.append(labelWrap)
+
+ // divFormsWrap.append(area)
+ // divFormsWrap.append(bTL)
+ // divFormsWrap.append(bBR)
+
+ // divForms.append(divFormsWrap)
+ // divForms.append(arrow)
+
+ // divBig.append(divForms)
+ // el.append(divBig)
+ el.append(titleDiv)
+ el.append(labelContent)
+
+ el.attr('id', id)
+
+ el.addClass(className || '')
+
+ $('#mobile-map_popup_content').append(el)
+
+ this._viewer.scene.postRender.addEventListener(function () {
+ const windowCoord = DC.Namespace.Cesium.SceneTransforms.wgs84ToWindowCoordinates(
+ self._viewer.scene,
+ position
+ )
+
+ self.positionPopUp(windowCoord, id)
+ })
+ }
+
+ positionPopUp(windowCoord, id) {
+ const wx = document.getElementById('app').clientWidth;
+ const x = windowCoord.x - (wx / 100 * 35);
+ const y = windowCoord.y - document.getElementById(id).offsetHeight - 15;
+ // x = windowCoord.x - document.getElementById(id).offsetWidth
+
+ // document.getElementById(id).style.cssText = `
+ document.getElementById(id).style.cssText = `
+ visibility:visible;
+ z-index:98;
+ transform:translate3d(${Math.round(x)}px,${Math.round(y)}px, 0);
+ `
+ }
+}
+
+export default mobileDivForms
diff --git a/src/mobileLayout/index.vue b/src/mobileLayout/index.vue
index feea8c6..bf5727f 100644
--- a/src/mobileLayout/index.vue
+++ b/src/mobileLayout/index.vue
@@ -1,14 +1,17 @@
<template>
- <div>
- <mapBox ref="modalForm" />
+ <div id="mobileMaps">
+ <mobilemapBox ref="mobilemapBoxFrom" />
</div>
</template>
<script>
-export default {
-}
+export default {};
</script>
<style>
-
+#mobileMaps {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+}
</style>
diff --git a/src/mobileviews/home/index.vue b/src/mobileviews/home/index.vue
new file mode 100644
index 0000000..96fabaa
--- /dev/null
+++ b/src/mobileviews/home/index.vue
@@ -0,0 +1,29 @@
+<template>
+ <div class="content-container">
+ <div class="main-content" id="MainContent">
+ <router-view ref="target-name" />
+ </div>
+
+ <div class="map-scene" ref="MapSceneContent">
+ <div>
+ <mobilemapBox ref="mobilemapBoxFrom" />
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "Main",
+ components: {},
+ data() {
+ return {};
+ },
+ created() {},
+ mounted() {},
+ methods: {},
+};
+</script>
+
+<style scoped lang='scss'>
+</style>
diff --git a/src/router/page/index.js b/src/router/page/index.js
index 5e6c479..ae24e98 100644
--- a/src/router/page/index.js
+++ b/src/router/page/index.js
@@ -1,8 +1,8 @@
/*
* @Author: Morpheus
* @Date: 2021-04-30 14:12:09
- * @Last Modified by: Morpheus
- * @Last Modified time: 2021-11-13 16:48:01
+ * @Last Modified by: liu
+ * @Last Modified time: 2021-12-13 14:53:06
*/
import Vue from 'vue'
@@ -26,177 +26,188 @@
title: '系统首页'
},
children: [{
- path: 'mapnav',
- component: resolve => require(['../../pcviews/mapnav/index.vue'], resolve),
- meta: {
- title: '地图导览'
- }
- },
- {
- path: 'orgnav',
- component: resolve => require(['../../pcviews/orgnav/index.vue'], resolve),
- meta: {
- title: '校内机构导览'
- },
- children: [{
- path: 'masses',
- component: resolve => require(['../../pcviews/orgnav/masses.vue'], resolve),
- meta: {
- title: '党群机构'
- }
- },
- {
- path: 'ofc',
- component: resolve => require(['../../pcviews/orgnav/ofc.vue'], resolve),
- meta: {
- title: '职能部处'
- }
- }, {
- path: 'directly',
- component: resolve => require(['../../pcviews/orgnav/directly.vue'], resolve),
- meta: {
- title: '直属及附属单位'
- }
- },
- {
- path: 'teaching',
- component: resolve => require(['../../pcviews/orgnav/teaching.vue'], resolve),
- meta: {
- title: '教学与科研机构'
- }
- }, {
- path: 'rest',
- component: resolve => require(['../../pcviews/orgnav/rest.vue'], resolve),
- meta: {
- title: '其他机构'
- }
- }
- ]
- },
- {
- path: 'arc',
- component: resolve => require(['../../pcviews/arc/index.vue'], resolve),
- meta: {
- title: '校内建筑'
- },
- children: [{
- path: 'edifact',
- component: resolve => require(['../../pcviews/arc/edifact.vue'], resolve),
- meta: {
- title: '行政办公'
- }
- },
- {
- path: 'teaching',
- component: resolve => require(['../../pcviews/arc/teaching.vue'], resolve),
- meta: {
- title: '教学科研'
- }
- }, {
- path: 'venue',
- component: resolve => require(['../../pcviews/arc/venue.vue'], resolve),
- meta: {
- title: '校内场馆'
- }
- },
- {
- path: 'dorm',
- component: resolve => require(['../../pcviews/arc/dorm.vue'], resolve),
- meta: {
- title: '学生宿舍'
- }
- }, {
- path: 'culture',
- component: resolve => require(['../../pcviews/arc/culture.vue'], resolve),
- meta: {
- title: '文化风景'
- }
- },
- {
- path: 'family',
- component: resolve => require(['../../pcviews/arc/family.vue'], resolve),
- meta: {
- title: '家属住宅'
- }
- }, {
- path: 'rest',
- component: resolve => require(['../../pcviews/arc/rest.vue'], resolve),
- meta: {
- title: '其他楼宇'
- }
- }
- ]
- },
- {
- path: 'service',
- component: resolve => require(['../../pcviews/service/index.vue'], resolve),
- meta: {
- title: '生活服务设施'
- }
- },
- {
- path: 'allquery',
- component: resolve => require(['../../pcviews/allquery/index.vue'], resolve),
- meta: {
- title: '综合查询'
- }
- },
- {
- path: 'campusnav',
- component: resolve => require(['../../pcviews/campusnav/index.vue'], resolve),
- meta: {
- title: '校园导览'
- }
- },
- {
- path: 'campusnavi',
- component: resolve => require(['../../pcviews/campusnavi/index.vue'], resolve),
- meta: {
- title: '校园导航'
- }
- },
- {
- path: 'specialmap',
- component: resolve => require(['../../pcviews/specialmap/index.vue'], resolve),
- meta: {
- title: '专题地图'
- }
- },
- {
- path: 'tool',
- component: resolve => require(['../../pcviews/tool/index.vue'], resolve),
- meta: {
- title: '工具'
- },
- children: [{
- path: 'download',
- component: resolve => require(['../../pcviews/tool/download.vue'], resolve),
- meta: {
- title: '地图下载'
- }
- }, {
- path: 'sign',
- component: resolve => require(['../../pcviews/tool/sign.vue'], resolve),
- meta: {
- title: '地图标记'
- }
- },
- {
- path: 'ranging',
- component: resolve => require(['../../pcviews/tool/ranging.vue'], resolve),
- meta: {
- title: '地图测距'
- }
- }
- ]
+ path: 'mapnav',
+ component: resolve => require(['../../pcviews/mapnav/index.vue'], resolve),
+ meta: {
+ title: '地图导览'
}
+ },
+ {
+ path: 'orgnav',
+ component: resolve => require(['../../pcviews/orgnav/index.vue'], resolve),
+ meta: {
+ title: '校内机构导览'
+ },
+ children: [{
+ path: 'masses',
+ component: resolve => require(['../../pcviews/orgnav/masses.vue'], resolve),
+ meta: {
+ title: '党群机构'
+ }
+ },
+ {
+ path: 'ofc',
+ component: resolve => require(['../../pcviews/orgnav/ofc.vue'], resolve),
+ meta: {
+ title: '职能部处'
+ }
+ }, {
+ path: 'directly',
+ component: resolve => require(['../../pcviews/orgnav/directly.vue'], resolve),
+ meta: {
+ title: '直属及附属单位'
+ }
+ },
+ {
+ path: 'teaching',
+ component: resolve => require(['../../pcviews/orgnav/teaching.vue'], resolve),
+ meta: {
+ title: '教学与科研机构'
+ }
+ }, {
+ path: 'rest',
+ component: resolve => require(['../../pcviews/orgnav/rest.vue'], resolve),
+ meta: {
+ title: '其他机构'
+ }
+ }
+ ]
+ },
+ {
+ path: 'arc',
+ component: resolve => require(['../../pcviews/arc/index.vue'], resolve),
+ meta: {
+ title: '校内建筑'
+ },
+ children: [{
+ path: 'edifact',
+ component: resolve => require(['../../pcviews/arc/edifact.vue'], resolve),
+ meta: {
+ title: '行政办公'
+ }
+ },
+ {
+ path: 'teaching',
+ component: resolve => require(['../../pcviews/arc/teaching.vue'], resolve),
+ meta: {
+ title: '教学科研'
+ }
+ }, {
+ path: 'venue',
+ component: resolve => require(['../../pcviews/arc/venue.vue'], resolve),
+ meta: {
+ title: '校内场馆'
+ }
+ },
+ {
+ path: 'dorm',
+ component: resolve => require(['../../pcviews/arc/dorm.vue'], resolve),
+ meta: {
+ title: '学生宿舍'
+ }
+ }, {
+ path: 'culture',
+ component: resolve => require(['../../pcviews/arc/culture.vue'], resolve),
+ meta: {
+ title: '文化风景'
+ }
+ },
+ {
+ path: 'family',
+ component: resolve => require(['../../pcviews/arc/family.vue'], resolve),
+ meta: {
+ title: '家属住宅'
+ }
+ }, {
+ path: 'rest',
+ component: resolve => require(['../../pcviews/arc/rest.vue'], resolve),
+ meta: {
+ title: '其他楼宇'
+ }
+ }
+ ]
+ },
+ {
+ path: 'service',
+ component: resolve => require(['../../pcviews/service/index.vue'], resolve),
+ meta: {
+ title: '生活服务设施'
+ }
+ },
+ {
+ path: 'allquery',
+ component: resolve => require(['../../pcviews/allquery/index.vue'], resolve),
+ meta: {
+ title: '综合查询'
+ }
+ },
+ {
+ path: 'campusnav',
+ component: resolve => require(['../../pcviews/campusnav/index.vue'], resolve),
+ meta: {
+ title: '校园导览'
+ }
+ },
+ {
+ path: 'campusnavi',
+ component: resolve => require(['../../pcviews/campusnavi/index.vue'], resolve),
+ meta: {
+ title: '校园导航'
+ }
+ },
+ {
+ path: 'specialmap',
+ component: resolve => require(['../../pcviews/specialmap/index.vue'], resolve),
+ meta: {
+ title: '专题地图'
+ }
+ },
+ {
+ path: 'tool',
+ component: resolve => require(['../../pcviews/tool/index.vue'], resolve),
+ meta: {
+ title: '工具'
+ },
+ children: [{
+ path: 'download',
+ component: resolve => require(['../../pcviews/tool/download.vue'], resolve),
+ meta: {
+ title: '地图下载'
+ }
+ }, {
+ path: 'sign',
+ component: resolve => require(['../../pcviews/tool/sign.vue'], resolve),
+ meta: {
+ title: '地图标记'
+ }
+ },
+ {
+ path: 'ranging',
+ component: resolve => require(['../../pcviews/tool/ranging.vue'], resolve),
+ meta: {
+ title: '地图测距'
+ }
+ }
+ ]
+ }
]
}]
},
// 手机端
{
path: '/mobileLayout',
- component: resolve => require(['../../mobileLayout/index.vue'], resolve)
+ redirect: '/mobileLayout/default',
+ meta: {
+ title: '导航菜单'
+ },
+ component: resolve => require(['../../mobileLayout/index.vue'], resolve),
+ children: [{
+ path: 'default',
+ component: resolve => require(['../../mobileviews/home/index.vue'], resolve),
+ meta: {
+ title: '系统首页'
+ }
+ }]
},
{
path: '/403',
diff --git a/src/store/getters.js b/src/store/getters.js
index e52bdd6..f9941db 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -1,6 +1,7 @@
const getters = {
viewer: state => state.viewer.viewer,
popupBgUrl: state => state.popupParams.popupBgUrl,
- pupupQRUrl: state => state.popupParams.pupupQRUrl
+ pupupQRUrl: state => state.popupParams.pupupQRUrl,
+ mviewer: state => state.mobile.mviewer
}
export default getters
diff --git a/src/store/index.js b/src/store/index.js
index 6a8816e..1ae2da2 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -3,6 +3,7 @@
import viewer from './modules/viewer'
import popupParams from './modules/popupParams'
+import mobile from './modules/mobile'
import getters from './getters'
Vue.use(Vuex)
@@ -10,7 +11,8 @@
const store = new Vuex.Store({
modules: {
viewer,
- popupParams
+ popupParams,
+ mobile
},
getters
})
diff --git a/src/store/modules/mobile.js b/src/store/modules/mobile.js
new file mode 100644
index 0000000..7933a3c
--- /dev/null
+++ b/src/store/modules/mobile.js
@@ -0,0 +1,16 @@
+const mobile = {
+ state: {
+ mviewer: null
+ },
+ mutations: {
+ MSET_VIEWER(state, viewer) {
+ // console.log(viewer, 456)
+ state.mviewer = viewer
+ }
+ },
+ actions: {
+
+ }
+}
+
+export default mobile
diff --git a/src/store/modules/viewer.js b/src/store/modules/viewer.js
index 7d45c13..dd07d31 100644
--- a/src/store/modules/viewer.js
+++ b/src/store/modules/viewer.js
@@ -4,6 +4,7 @@
},
mutations: {
SET_VIEWER (state, viewer) {
+ // console.log(viewer, 456)
state.viewer = viewer
}
},
diff --git a/src/styles/common.scss b/src/styles/common.scss
index adccd1c..76cc0e7 100644
--- a/src/styles/common.scss
+++ b/src/styles/common.scss
@@ -1,25 +1,25 @@
-@import './index.scss';
+@import "./index.scss";
// 布局
-@import './layout/pc.scss';
-@import './layout/mobile.scss';
+@import "./layout/pc.scss";
+@import "./layout/mobile.scss";
// home
-@import './home/pc.scss';
-@import './home/mobile.scss';
+@import "./home/pc.scss";
+@import "./home/mobile.scss";
// page
-@import './pcpage/index.scss';
+@import "./pcpage/index.scss";
// page
-@import './divforms/divForms.scss';
-@import './divforms/popup.scss';
+@import "./divforms/divForms.scss";
+@import "./divforms/popup.scss";
+// 手机样式
+@import "./mobile/popup.scss";
// 实体样式
-@import './entitys/text-entitys.scss';
-
-
+@import "./entitys/text-entitys.scss";
.custom-icon {
display: inline-block;
@@ -29,65 +29,46 @@
}
.menu-dtdl {
-
background: url(/img/icon/dtdl.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-jg {
-
background: url(/img/icon/jg.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-xyjz {
-
background: url(/img/icon/xyjz.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-shfw {
-
background: url(/img/icon/shfw.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-zhcx {
-
background: url(/img/icon/zhcx.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-xydl {
-
background: url(/img/icon/xydl.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-xydh {
-
background: url(/img/icon/xydh.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-ztdt {
-
background: url(/img/icon/ztdt.png) no-repeat;
background-size: 100% 100%;
-
}
.menu-tool {
-
background: url(/img/icon/tool.png) no-repeat;
background-size: 100% 100%;
-
}
-
diff --git a/src/styles/mobile/popup.scss b/src/styles/mobile/popup.scss
new file mode 100644
index 0000000..39dc937
--- /dev/null
+++ b/src/styles/mobile/popup.scss
@@ -0,0 +1,68 @@
+#mobile-map_popup_content {
+ width: 100%;
+ position: fixed;
+ z-index: 99;
+ left: -1000px;
+ box-sizing: border-box;
+ #mobilePopup {
+ width: 70%;
+ left: 1000px;
+ position: absolute;
+ height: auto;
+ background-color: #fff;
+ border-radius: 10px;
+ position: relative;
+ &::before {
+ content: "";
+ width: 0px;
+ height: 0px;
+ border: 8px solid #ebebeb;
+ position: absolute;
+ bottom: -8px;
+ left: calc(50% - 8px);
+ transform: rotate(45deg);
+ }
+ .mobiletitle {
+ width: calc(90% - 1px);
+ height: 15px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ font-size: 14px;
+ border-radius: 10px 10px 0 0;
+ padding: 8px 14px;
+ }
+ .mobilelabel-content {
+ width: 100%;
+ height: auto;
+ // 内容样式
+ .mobile-popup-imgs-heard {
+ width: 100%;
+ padding: 10px;
+ text-align: justify;
+ letter-spacing: 1px;
+ box-sizing: border-box;
+ img {
+ width: 70px;
+ height: 50px;
+ }
+ }
+ .mobile-popup-control {
+ width: 100%;
+ height: 20px;
+ background-color: #f7f7f7;
+ border-top: 1px solid #ebebeb;
+ padding: 5px 0 8px 0;
+ border-radius: 0 0 10px 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+}
+
+// 比例尺
+.dc-distance-legend {
+ position: relative;
+ left: 30px;
+}
--
Gitblit v1.9.3