فهرست منبع

合并中图的代码(夜景,三维报建更新)

lkk 11 ماه پیش
والد
کامیت
76a58da899
31فایلهای تغییر یافته به همراه4304 افزوده شده و 1264 حذف شده
  1. 22 22
      src/components/Combinations/NightscapeAnalysis/index.js
  2. 129 0
      src/components/modal/modal.vue
  3. 8 0
      src/router/index.js
  4. 39 2
      src/utils/MapHelper/MapHelper.js
  5. 1 0
      src/views/ConstructionApplication3D/Demolition/CQSetInfo.vue
  6. 1 0
      src/views/ConstructionApplication3D/Demolition/CQShowInfo.vue
  7. 631 0
      src/views/ConstructionApplication3D/Demolition/DemoList.vue
  8. 1 0
      src/views/ConstructionApplication3D/Demolition/QMSetInfo.vue
  9. 1 0
      src/views/ConstructionApplication3D/Demolition/QMShowInfo.vue
  10. 1 0
      src/views/ConstructionApplication3D/Demolition/ZDSetInfo.vue
  11. 1 0
      src/views/ConstructionApplication3D/Demolition/ZDShowInfo.vue
  12. 12 5
      src/views/ConstructionApplication3D/HighLimitAnalysis/HighLimitAnalysis.vue
  13. 203 0
      src/views/ConstructionApplication3D/Layers/LayerTree.vue
  14. 16 10
      src/views/ConstructionApplication3D/MXDBinfo/MXDBinfo.vue
  15. 584 85
      src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue
  16. 76 36
      src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue
  17. 42 33
      src/views/ConstructionApplication3D/backLineAnalysis/backLineAnalysisinfo.vue
  18. 494 308
      src/views/ConstructionApplication3D/billboard/addBiillboardModel.vue
  19. 28 19
      src/views/ConstructionApplication3D/billboard/addBillboardPoject.vue
  20. 180 130
      src/views/ConstructionApplication3D/billboard/billboardCheckList.vue
  21. 353 105
      src/views/ConstructionApplication3D/billboard/billboardChekInfo.vue
  22. 209 51
      src/views/ConstructionApplication3D/billboard/billboardDesign.vue
  23. 75 58
      src/views/ConstructionApplication3D/billboard/billboarddetail.vue
  24. 456 368
      src/views/ConstructionApplication3D/projectManagement/projectManagement.vue
  25. 73 0
      src/views/billboardplan.vue
  26. 0 1
      src/views/map3d.vue
  27. 465 30
      static/Config/config.js
  28. 202 1
      static/css/index.css
  29. 0 0
      static/data/体育馆.json
  30. 1 0
      static/data/地标.json
  31. 0 0
      static/data/道路.json

+ 22 - 22
src/components/Combinations/NightscapeAnalysis/index.js

@@ -21,8 +21,8 @@ const Nightscape = {
 
     // 是否开启夜景
     if (!isNight) {
-      scene.layers.find("白天").visible = true;
-      scene.layers.find("夜晚").visible = false;
+      if (scene.layers.find("白天")) scene.layers.find("白天").visible = true;
+      if (scene.layers.find("夜晚")) scene.layers.find("夜晚").visible = false;
       scene.sun.show = true;
       this.clearLightSource(true, true);
 
@@ -33,10 +33,10 @@ const Nightscape = {
       viewer.imageryLayers.remove(this.imageLayer);
     } else {
       scene.sun.show = false;
-      scene.layers.find("白天").visible = false;
-      scene.layers.find("夜晚").visible = true;
-      // 泛光线
-      let roadLine1 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+      if (scene.layers.find("白天")) scene.layers.find("白天").visible = false;
+      if (scene.layers.find("夜晚")) scene.layers.find("夜晚").visible = true;
+      // 泛光线底纹
+      let roadLine1 = Cesium.GeoJsonDataSource.load(window.NightLightUrl.csfgx);
 
       roadLine1
         .then(function (dataSource) {
@@ -56,8 +56,8 @@ const Nightscape = {
         .otherwise(function (error) {
           window.alert(error);
         });
-      let roadLine2 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
-
+      let roadLine2 = Cesium.GeoJsonDataSource.load(window.NightLightUrl.csfgx);
+      //泛光亮线
       roadLine2
         .then(function (dataSource) {
           viewer.dataSources.add(dataSource);
@@ -78,7 +78,7 @@ const Nightscape = {
         });
 
       //一山湖灯光
-      Cesium.loadJson("static/data/lightPoint3D.json").then((response) => {
+      Cesium.loadJson(window.NightLightUrl.yshdg).then((response) => {
         let features = response.features;
         features.forEach((element) => {
           let p = element.geometry.coordinates;
@@ -93,7 +93,7 @@ const Nightscape = {
             p[2]
           );
           var SpotLightOptions3 = {
-            cutoffDistance: 50,
+            cutoffDistance: 120,
             color: Cesium.Color.ORANGE,
             decay: 1,
             intensity: 2,
@@ -109,21 +109,21 @@ const Nightscape = {
       });
 
       // 体育场灯光
-      Cesium.loadJson("static/data/bpLight.json").then((response) => {
+      Cesium.loadJson(window.NightLightUrl.tycdg).then((response) => {
         let features = response.features;
         features.forEach((element) => {
           let p = element.geometry.coordinates;
           var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
             p[0],
             p[1],
-            p[2]
+            p[2] + 10
           );
 
           var SpotLightOptions3 = {
-            cutoffDistance: 100,
+            cutoffDistance: 150,
             color: new Cesium.Color(245 / 255, 250 / 255, 216 / 255, 0.51),
             decay: 1,
-            intensity: 2,
+            intensity: 1,
           };
 
           let SpotLight33 = new Cesium.PointLight(
@@ -135,17 +135,17 @@ const Nightscape = {
         });
       });
       // // 道路灯光
-      Cesium.loadJson("static/data/New_Point3D.json").then((response) => {
+      Cesium.loadJson(window.NightLightUrl.dldg).then((response) => {
         let features = response.features;
         features.forEach((element) => {
           let p = element.geometry.coordinates;
           var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
             p[0],
             p[1],
-            p[2] + 35
+            p[2] + 20
           );
           var SpotLightOptions3 = {
-            cutoffDistance: 70,
+            cutoffDistance: 110,
             color: new Cesium.Color(209 / 255, 209 / 255, 147 / 255, 0.5),
             decay: 1,
             intensity: 1,
@@ -160,18 +160,18 @@ const Nightscape = {
         });
       });
       // 草坪灯光
-      Cesium.loadJson("static/data/BPGYLight.json").then((response) => {
+      Cesium.loadJson(window.NightLightUrl.cpdg).then((response) => {
         let features = response.features;
         features.forEach((element) => {
           let p = element.geometry.coordinates;
           var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
             p[0],
             p[1],
-            p[2] + 50
+            p[2] + 20
           );
 
           var SpotLightOptions3 = {
-            cutoffDistance: 80,
+            cutoffDistance: 90,
             color: new Cesium.Color(209 / 255, 209 / 255, 147 / 255, 1),
             decay: 1,
             intensity: 1,
@@ -196,7 +196,7 @@ const Nightscape = {
           url: "static/images/zt/Nightscape/BlackMarble_2016-1.jpg",
         })
       );
-      this.imageLayer.alpha = 0.8;
+      this.imageLayer.alpha = 0.5;
     }
   },
 
@@ -465,7 +465,7 @@ const Nightscape = {
    */
   loadldx() {
     let that = this;
-    Cesium.loadJson("static/data/道路中线_1.json").then((jsonData) => {
+    Cesium.loadJson(window.NightLightUrl.dlzxx).then((jsonData) => {
       debugger;
       jsonData.features.forEach((route) => {
         let list = route.geometry.coordinates.flat(Infinity);

+ 129 - 0
src/components/modal/modal.vue

@@ -0,0 +1,129 @@
+<template>
+  <div class="wrap" :style="wrapStyle">
+    <div class="wrap-title">
+      <div>{{title}}</div>
+      <div @click="handleClose"></div>
+    </div>
+    <div class="wrap-con">
+      <slot></slot>
+    </div>
+  </div>
+</template>
+
+
+
+<script>
+export default {
+  name: "modal",
+  props: {
+    width: {
+      type: Number,
+      default: 12,
+    },
+    height: {
+      type: Number,
+      default: 50,
+    },
+    offset: {
+      type: Array,
+      default: [4, 20],
+    },
+    title:{
+      type:String,
+      default:''
+    }
+  },
+  data() {
+    return {
+      wrapStyle: {
+        width: this.width + "vw",
+        height: this.height + "vh",
+        top: this.offset[1] + "vh",
+        left: this.offset[0] + "vw",
+      },
+    };
+  },
+  mounted() {},
+  methods:{
+    handleClose(){
+      this.$emit('close')
+    }
+  }
+
+  // updated(){
+  //     this.wrapStyle = {
+  //             width: this.width+'vw',
+  //             height:this.height+'vh',
+  //             top:this.offset[1]+'vh',
+  //             left:this.offset[0]+'vw'
+  //         }
+
+  // },
+};
+</script>
+
+
+<style scoped>
+.wrap {
+  position: fixed;
+  display: flex;
+  flex-flow: column nowrap;
+}
+.wrap-title {
+  width: 100%;
+  height: 1.875vw;
+  display: flex;
+  flex-flow: row nowrap;
+  align-items: center;
+  padding: .3vw 1vw .5vw;
+  background: url("../../assets/image/modal-title.png") no-repeat;
+  background-size: cover;
+  background-position: center;
+  position: relative;
+}
+.wrap-title>div:first-of-type{
+  flex: 1;
+  padding: 0 1.2vw;
+  font-size: 0.9375vw;
+  color: #fff;
+  font-weight: 700;
+  letter-spacing: 1px;
+  display: -webkit-box;
+  -webkit-line-clamp: 1;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.wrap-title>div:last-of-type{
+  position: absolute;
+  right: .4vw;
+  top: .4vw;
+  width: 1.075vw;
+  height: 1.075vw;
+  background: url("/static/images/icon/modal-close.png") no-repeat;
+  background-size: cover;
+  background-position: center;
+  cursor: pointer;
+}
+.wrap-con {
+  width: 100%;
+  flex: 1;
+  overflow-y: auto;
+  border-top-left-radius: 1.2vw;
+  border-bottom-left-radius: .4vw;
+  border-bottom-right-radius: .4vw;
+  background-color: rgba(4, 28, 50, 0.6);
+}
+
+div::-webkit-scrollbar{
+  width: 5px;
+}
+div::-webkit-scrollbar-thumb{
+  background: rgba(63, 147, 245, 0.6);
+  border-radius: 5px;
+}
+div::-webkit-scrollbar-track{
+   background: rgba(4, 28, 50, 0.6);
+}
+</style>

+ 8 - 0
src/router/index.js

@@ -48,12 +48,20 @@ export const constantRoutes = [{
             import('@/views/viewer.vue'),
         hidden: true
     },
+    // 三维报建
     {
         path: '/checkmodel',
         component: () =>
             import('@/views/checkmodel'),
         hidden: true
     },
+    // 广告牌规划审查
+    {
+        path: '/billboardplan',
+        component: () =>
+            import('@/views/billboardplan'),
+        hidden: true
+    },
     {
         path: '/siteselection',
         component: () =>

+ 39 - 2
src/utils/MapHelper/MapHelper.js

@@ -1,7 +1,44 @@
 import proj4 from "proj4";
+import { Notification, MessageBox, Message, Loading } from "element-ui";
+
+const CTservice = axios.create({
+  // 超时
+  timeout: 1000,
+});
+// 响应拦截器
+CTservice.interceptors.response.use(
+  (res) => {
+    // 未设置状态码则默认成功状态
+    const code = res.data.code || 200;
+    // 二进制数据则直接返回
+    if (
+      res.request.responseType === "blob" ||
+      res.request.responseType === "arraybuffer"
+    ) {
+      return res.data;
+    }
+    if (code !== 200) {
+      Message({
+        message: "模型服务获取失败,请检查服务",
+        type: "warning",
+      });
+      return null;
+    } else {
+      return res;
+    }
+  },
+  (error) => {
+    console.log("err" + error);
+    Message({
+      message: "模型服务获取失败,请检查服务",
+      type: "warning",
+    });
+    return null;
+  }
+);
 export const mapQuery = async (url, queryObj) => {
-  let response = await axios.post(url, queryObj);
-  if (response.data.featureCount > 0) {
+  let response = await CTservice.post(url, queryObj);
+  if (response && response.data.featureCount > 0) {
     return response.data;
   } else {
     return null;

+ 1 - 0
src/views/ConstructionApplication3D/Demolition/CQSetInfo.vue

@@ -0,0 +1 @@
+

+ 1 - 0
src/views/ConstructionApplication3D/Demolition/CQShowInfo.vue

@@ -0,0 +1 @@
+

+ 631 - 0
src/views/ConstructionApplication3D/Demolition/DemoList.vue

@@ -0,0 +1,631 @@
+<template>
+    <div class="rootele">
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+            <el-tab-pane label="拆迁补偿预估" name="first">
+                <el-row>
+                    <el-col :span="7">项目范围:</el-col>
+                    <el-col :span="16">
+                        <el-button type="primary">导入范围</el-button>
+                        <el-button type="primary">绘制范围</el-button>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="7">项目名称:</el-col>
+                    <el-col :span="16">
+                        <el-input placeholder="输入项目名称"></el-input>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="7">征地补偿标准:</el-col>
+                    <el-col :span="10">
+                        <el-select v-model="zdValue" placeholder="请选择">
+                            <el-option v-for="item in zdList" :key="item.value" :label="item.label" :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-col>
+                    <el-col :span="7" class="buttongroup">
+                        <el-button size="mini" type="primary" id="zdShow" @click="zdShow()" plain>查看</el-button>
+                        <el-button size="mini" type="primary" id="zdSet" @click="zdSet()" plain>配置</el-button>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="7">青苗补偿标准:</el-col>
+                    <el-col :span="10">
+                        <el-select v-model="qmValue" placeholder="请选择">
+                            <el-option v-for="item in qmList" :key="item.value" :label="item.label" :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-col>
+                    <el-col :span="7" class="buttongroup">
+                        <el-button size="mini" type="primary" id="qmShow" @click="qmShow()" plain>查看</el-button>
+                        <el-button size="mini" type="primary" id="qmSet" @click="qmSet()" plain>配置</el-button>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="7">拆迁补偿标准:</el-col>
+                    <el-col :span="10">
+                        <el-select v-model="cqValue" placeholder="请选择">
+                            <el-option v-for="item in cqList" :key="item.value" :label="item.label" :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-col>
+
+
+                    <el-col :span="7" class="buttongroup">
+                        <el-button size="mini" type="primary" id="cqShow" @click="cqShow()" plain>查看</el-button>
+                        <el-button size="mini" type="primary" id="cqSet" @click="cqSet()" plain>配置</el-button>
+                    </el-col>
+                </el-row>
+
+                <el-row style="text-align: center;">
+                    <el-button type="primary" plain>确定</el-button>
+                    <el-button type="primary" plain>取消</el-button>
+                </el-row>
+            </el-tab-pane>
+            <el-tab-pane label="分析记录" name="second">分析记录</el-tab-pane>
+            <el-tab-pane label="分析结果" name="third">分析结果</el-tab-pane>
+        </el-tabs>
+    </div>
+</template>
+<script>
+import CQSetInfo from './CQSetInfo.vue';
+import CQShowInfo from './CQShowInfo.vue';
+import QMSetInfo from './QMSetInfo.vue';
+import QMShowInfo from './QMShowInfo.vue';
+
+import ZDSetInfo from './ZDSetInfo.vue';
+import ZDShowInfo from './ZDShowInfo.vue';
+export default {
+    data() {
+        return {
+            /**
+             * tabs 标签
+             */
+            activeName: 'first',
+            /**
+             * 弹窗保证弹出唯一
+             */
+            layerid: null,
+            /**
+             * 征地标准值
+             */
+            zdValue: '01',
+            /**
+             * 征地标准列表
+             */
+            zdList: [
+                {
+                    label: "征地标准01",
+                    value: '征地标准01',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+
+
+                    }
+                },
+                {
+                    label: "征地标准02",
+                    value: '征地标准02',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+
+
+                    }
+                },
+                {
+                    label: "征地标准03",
+                    value: '征地标准03',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+            ],
+            /**
+          * 青苗标准值
+          */
+            qmValue: '01',
+            /**
+          * 青苗标准值
+          */
+            qmList: [
+                {
+                    label: "青苗标准01",
+                    value: '01',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+                {
+                    label: "青苗标准02",
+                    value: '02',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+                {
+                    label: "青苗标准03",
+                    value: '03',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+            ],
+            /**
+          * 拆迁标准值
+          */
+            cqValue: '',
+            /**
+          * 拆迁标准值
+          */
+            cqList: [
+                {
+                    label: "拆迁标准01",
+                    value: '01',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+                {
+                    label: "拆迁标准02",
+                    value: '02',
+                    rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+                {
+                    label: "拆迁标准03",
+                    value: '03', rules: {
+                        /**
+                         * 土地统一年产值
+                         */
+                        TDCZ: 1000,
+                        /**
+                         * 土地补偿倍数
+                         */
+
+                        TDBCBS: 10,
+                        /**
+                         * 土地补偿费
+                         */
+                        TDBCF: 1000,
+                        /**
+                                                * 安置补偿倍数
+                                                */
+
+                        AZBCBS: 10,
+                        /**
+                        * 安置补偿费
+                        */
+                        ZBBCF: 111,
+                        //  /**
+                        //  * 土地补偿费
+                        //  */
+                        // BCHJ:1000,
+                    }
+                },
+            ],
+        };
+    },
+    methods: {
+        /**
+         * tas切换
+         * @param {String} tab 
+         * @param {Object} event 
+         */
+        handleClick(tab, event) {
+            console.log(tab, event);
+        },
+        /**
+         *拆迁标准查看
+         */
+        cqShow() {
+            var that = this;
+            if (that.layerid)
+                that.$layer.close(that.layerid)
+            var width = 400
+            var top = 500
+            var left = Math.floor(document.body.clientWidth - width / 2);
+            var height = 350;
+
+            that.layerid = that.$layer.iframe({
+                content: {
+                    content: CQShowInfo, //传递的组件对象
+                    parent: this, //当前的vue对象
+                    data: {}, //props
+                },
+                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+                area: [width.toString(), height.toString()],
+                title: "拆迁补偿标准",
+                maxmin: false,
+                shade: false, //是否显示遮罩
+                shadeClose: false, //点击遮罩是否关闭
+                cancel: () => {
+                    //关闭事件
+                    // alert("关闭iframe");
+                },
+            });
+        },
+        /**
+         * 拆迁标准设置
+         */
+        cqSet() {
+            var that = this;
+            if (that.layerid)
+                that.$layer.close(that.layerid)
+            var width = 400
+            var top = 500
+            var left = Math.floor(document.body.clientWidth - width / 2);
+            var height = 350;
+            that.layerid = that.$layer.iframe({
+                content: {
+                    content: CQSetInfo, //传递的组件对象
+                    parent: this, //当前的vue对象
+                    data: {}, //props
+                },
+                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+                area: [width.toString(), height.toString()],
+                title: "拆迁补偿标准设置",
+                maxmin: false,
+                shade: false, //是否显示遮罩
+                shadeClose: false, //点击遮罩是否关闭
+                cancel: () => {
+                    //关闭事件
+                    // alert("关闭iframe");
+                },
+            });
+        },
+        /**
+        *青苗标准查看
+        */
+        qmShow() {
+            var that = this;
+            if (that.layerid)
+                that.$layer.close(that.layerid)
+            var width = 400
+            var top = 500
+            var left = Math.floor(document.body.clientWidth - width / 2);
+            var height = 350;
+            that.layerid = that.$layer.iframe({
+                content: {
+                    content: QMShowInfo, //传递的组件对象
+                    parent: this, //当前的vue对象
+                    data: {}, //props
+                },
+                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+                area: [width.toString(), height.toString()],
+                title: "青苗补偿标准",
+                maxmin: false,
+                shade: false, //是否显示遮罩
+                shadeClose: false, //点击遮罩是否关闭
+                cancel: () => {
+                    //关闭事件
+                    // alert("关闭iframe");
+                },
+            });
+        },
+        /**
+         * 青苗标准设置
+         */
+        qmSet() {
+
+            var that = this;
+            if (that.layerid)
+                that.$layer.close(that.layerid)
+            var width = 400
+            var top = 500
+            var left = Math.floor(document.body.clientWidth - width / 2);
+            var height = 350;
+            that.layerid = that.$layer.iframe({
+                content: {
+                    content: QMSetInfo, //传递的组件对象
+                    parent: this, //当前的vue对象
+                    data: {}, //props
+                },
+                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+                area: [width.toString(), height.toString()],
+                title: "青苗补偿标准设置",
+                maxmin: false,
+                shade: false, //是否显示遮罩
+                shadeClose: false, //点击遮罩是否关闭
+                cancel: () => {
+                    //关闭事件
+                    // alert("关闭iframe");
+                },
+            });
+
+        },
+        /**
+        *征地标准查看
+        */
+        zdShow() {
+            var that = this;
+            if (that.layerid)
+                that.$layer.close(that.layerid)
+            var width = 400
+            var top = 500
+            var left = Math.floor(document.body.clientWidth - width / 2);
+            var height = 350;
+            that.layerid = that.$layer.iframe({
+                content: {
+                    content: ZDShowInfo, //传递的组件对象
+                    parent: this, //当前的vue对象
+                    data: {}, //props
+                },
+                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+                area: [width.toString(), height.toString()],
+                title: "征地补偿标准",
+                maxmin: false,
+                shade: false, //是否显示遮罩
+                shadeClose: false, //点击遮罩是否关闭
+                cancel: () => {
+                    //关闭事件
+                    // alert("关闭iframe");
+                },
+            });
+        },
+        /**
+         * 征地标准设置
+         */
+        zdSet() {
+            var that = this;
+            if (that.layerid)
+                that.$layer.close(that.layerid)
+            var width = 400
+            var top = 500
+            var left = Math.floor(document.body.clientWidth - width / 2);
+            var height = 350;
+            that.layerid = that.$layer.iframe({
+                content: {
+                    content: ZDSetInfo, //传递的组件对象
+                    parent: this, //当前的vue对象
+                    data: {}, //props
+                },
+                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+                area: [width.toString(), height.toString()],
+                title: "征地补偿标准设置",
+                maxmin: false,
+                shade: false, //是否显示遮罩
+                shadeClose: false, //点击遮罩是否关闭
+                cancel: () => {
+                    //关闭事件
+                    // alert("关闭iframe");
+                },
+            });
+
+        }
+
+    }
+};
+</script>
+<style scoped>
+.el-row {
+    padding: 0.5rem 0 0.5rem 0;
+    /* display: inline-flex; */
+    align-items: center;
+}
+
+.el-col {
+    display: inline-flex;
+}
+
+.buttongroup {
+    display: inline-flex
+}
+
+.rootele {
+    padding: 0.5rem;
+    color: white;
+}
+
+.el-col {
+    color: white;
+}
+
+.el-tab-pane {
+    color: white;
+}
+
+.el-input {
+    background: transparent;
+}
+</style>

+ 1 - 0
src/views/ConstructionApplication3D/Demolition/QMSetInfo.vue

@@ -0,0 +1 @@
+

+ 1 - 0
src/views/ConstructionApplication3D/Demolition/QMShowInfo.vue

@@ -0,0 +1 @@
+

+ 1 - 0
src/views/ConstructionApplication3D/Demolition/ZDSetInfo.vue

@@ -0,0 +1 @@
+

+ 1 - 0
src/views/ConstructionApplication3D/Demolition/ZDShowInfo.vue

@@ -0,0 +1 @@
+

+ 12 - 5
src/views/ConstructionApplication3D/HighLimitAnalysis/HighLimitAnalysis.vue

@@ -79,12 +79,19 @@ export default {
   },
   methods: {
     init() {
+      let that = this;
       debugger;
-      this.info.layerDataList.forEach((layerData) => {
-        let HEIGHT = layerData.data.find((c) => c.label == "HEIGHT").value;
-        layerData.cg = this.calculateHighLimit(HEIGHT, this.info.JZXGD);
-        if (layerData.cg > 0) {
-          this.TableData.push(layerData);
+      that.info.layerDataList.forEach((layerData) => {
+        let LANDNO = layerData.data.find((c) => c.label == "LANDNO");
+        if (LANDNO && LANDNO.value) {
+          let isdkbm = that.info.DKBM.find((c) => c == LANDNO.value);
+          if (isdkbm) {
+            let HEIGHT = layerData.data.find((c) => c.label == "HEIGHT").value;
+            layerData.cg = that.calculateHighLimit(HEIGHT, that.info.JZXGD);
+            if (layerData.cg > 0) {
+              that.TableData.push(layerData);
+            }
+          }
         }
       });
     },

+ 203 - 0
src/views/ConstructionApplication3D/Layers/LayerTree.vue

@@ -0,0 +1,203 @@
+<template>
+    <div class="treePanel">
+        <el-tree ref="tree" default-expand-all :data="treeNodes" show-checkbox node-key="id"
+            :default-checked-keys="checkKeys" :props="defaultProps" @check-change="handleCheckChange"></el-tree>
+    </div>
+</template>
+<script>
+import { forEach } from 'lodash';
+export default {
+    name: "LayerTree",
+    data() {
+        return {
+            defaultProps: {
+                children: 'children',
+                label: 'label'
+            },
+            treeNodes: [
+                // {
+                //     id: 0,
+                //     label: '所有图层',
+                //     layerName: '',
+                //     children: [
+                //         {
+                //             id: 1,
+                //             label: '一山湖',
+                //             layerName: '一山湖'
+                //         },
+                //         {
+                //             id: 2,
+                //             label: '植被',
+                //             layerName: '植被'
+                //         },
+                //         {
+                //             id: 3,
+                //             label: '白天',
+                //             layerName: '白天'
+                //         },
+                //         {
+                //             id: 4,
+                //             label: '夜晚',
+                //             layerName: '夜晚'
+                //         },
+                //         {
+                //             id: 5,
+                //             label: '体育馆',
+                //             layerName: '体育馆'
+                //         },
+                //         {
+                //             id: 6,
+                //             label: '水系',
+                //             layerName: '水系'
+                //         },
+                //         {
+                //             id: 7,
+                //             label: '道路面',
+                //             layerName: '道路面'
+                //         }
+
+                //     ]
+                // },
+            ],
+            checkKeys: []
+        }
+    },
+
+    created() {
+        // debugger
+        this.initTreeNodes()
+    },
+    methods: {
+        /**
+         * 初始化图层树
+         */
+        initTreeNodes() {
+
+            var layer;
+            var that = this;
+            that.checkKeys = [];
+            that.treeNodes = window.layerTreeNodes
+            this.treeNodes.forEach((node) => {
+
+                if (node.children && node.children.length > 0) {
+                    node.children.forEach((child) => {
+                        debugger
+                        layer = viewer.scene.layers.find(child.layerName)
+                        if (layer) {
+                            if (layer.visible === true) {
+                                that.checkKeys.push(child.id)
+                            }
+                        }
+                    })
+                }
+            })
+        },
+        handleNodeClick(data) {
+            console.log(data);
+        },
+        handleCheckChange(node, checkstate, children) {
+            var that = this
+            that.checkKeys = this.$refs.tree.getCheckedKeys();
+            var index = -1
+            var layer;
+            this.treeNodes.forEach((node) => {
+                if (node.children && node.children.length > 0) {
+                    node.children.forEach((child) => {
+                        index = that.checkKeys.findIndex(t => t == child.id)
+                        if (index > -1) {
+                            layer = viewer.scene.layers.find(child.layerName)
+                            if (layer)
+                                layer.visible = true;
+                        }
+                        else {
+                            layer = viewer.scene.layers.find(child.layerName)
+                            if (layer)
+                                layer.visible = false;
+                        }
+                    })
+                }
+            })
+        }
+    }
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+
+</style>
+<style scoped>
+
+.treePanel {
+    padding: 1rem;
+    height: 100%;
+    width: 100%;
+}
+
+.el-tree {
+    position: relative;
+    cursor: default;
+    background: transparent;
+    color: #02a7f0;
+}
+
+.el-tree-node:focus>.el-tree-node__content {
+    background-color: #02f0dc8c;
+}
+
+.el-tree-node is-expanded is-focusable {
+    background-color: #02f0dc8c;
+
+}
+
+.is-current {
+    background-color: #02f0dc8c;
+}
+
+.card_body_style {
+    border: 1px dashed #02a7f0;
+}
+
+.hover_style:hover {
+    border: 1px solid #02a7f0;
+}
+
+.checkedState {
+    position: relative;
+}
+
+.status {
+    position: absolute;
+    right: 0;
+    top: 0;
+    // z-index: 2;
+    overflow: hidden;
+    // border-radius: 6px;
+}
+
+.icon {
+    position: absolute;
+    right: 0;
+    top: 0;
+    width: 2rem;
+    height: 2rem;
+    border: 8px;
+    background: #ffff80;
+    -webkit-clip-path: polygon(100% 0, 0 0, 100% 100%);
+    clip-path: polygon(100% 0, 0 0, 100% 100%);
+}
+
+.txts {
+    line-height: 2.6rem;
+    text-align: center;
+    transform: rotate(45deg);
+    transform-origin: center center;
+    color: #ec808c;
+    // font-size: 18px;
+}
+
+/* 带圆角的话这个status 和 txts的宽度/宽度 是要比icon的宽度/高度小的,效果可以自己慢慢调 */
+.ce {
+    width: 4rem;
+    height: 4rem;
+}
+</style>

+ 16 - 10
src/views/ConstructionApplication3D/MXDBinfo/MXDBinfo.vue

@@ -202,11 +202,14 @@ export default {
                 geometry: feature.geometry,
               };
               feature.fieldNames.forEach((fieldName, i) => {
-                let Field = e1.datasetInfos[0].fieldInfos.find(
-                  (c) =>
-                    c.name.toUpperCase() == fieldName.toUpperCase() &&
-                    c.name.toUpperCase().indexOf("SM") == -1
-                );
+                let Field = e1.datasetInfos
+                  ? e1.datasetInfos[0].fieldInfos.find(
+                      (c) =>
+                        c.name &&
+                        c.name.toUpperCase() == fieldName.toUpperCase() &&
+                        c.name.toUpperCase().indexOf("SM") == -1
+                    )
+                  : null;
                 if (Field) {
                   Data.data.push({
                     label: fieldName,
@@ -378,11 +381,14 @@ export default {
           };
 
           e.features[0].fieldNames.forEach((fieldName, i) => {
-            let Field = e.datasetInfos[0].fieldInfos.find(
-              (c) =>
-                c.name.toUpperCase() == fieldName.toUpperCase() &&
-                c.name.toUpperCase().indexOf("SM") == -1
-            );
+            let Field = e.datasetInfos
+              ? e.datasetInfos[0].fieldInfos.find(
+                  (c) =>
+                    c.name &&
+                    c.name.toUpperCase() == fieldName.toUpperCase() &&
+                    c.name.toUpperCase().indexOf("SM") == -1
+                )
+              : null;
             if (Field) {
               GHYDlayerData.data.push({
                 label: fieldName,

+ 584 - 85
src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue

@@ -138,6 +138,8 @@ import { v4 as uuidv4 } from "uuid";
 export default {
   data() {
     return {
+      GeoJsonLayerList: [],
+      liudongGntities: [],
       sharedState: store.state,
       isNightscaoe: false,
       directionalLight_1: null,
@@ -226,14 +228,18 @@ export default {
       this.hyp = new Cesium.HypsometricSetting();
       this.startNight(false);
     },
+
     //夜景开关
     startNight(isNight) {
+      let that = this;
       scene.globe.show = true;
       viewer.scene.hdrEnabled = isNight;
       viewer.scene.bloomEffect.show = false;
 
       // 是否开启夜景
       if (!isNight) {
+        scene.layers.find("白天").visible = true;
+        scene.layers.find("夜晚").visible = false;
         scene.sun.show = true;
         this.clearLightSource(true, true);
 
@@ -243,8 +249,162 @@ export default {
         this.setHypsometric(false); //夜景材质
         viewer.imageryLayers.remove(this.imageLayer);
       } else {
-        this.switchLight(false);
         scene.sun.show = false;
+        scene.layers.find("白天").visible = false;
+        scene.layers.find("夜晚").visible = true;
+        // 泛光线底纹
+        let roadLine1 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+
+        roadLine1
+          .then(function (dataSource) {
+            viewer.dataSources.add(dataSource);
+            that.GeoJsonLayerList.push(dataSource);
+            let lines_1 = dataSource.entities.values;
+            for (let i = 0; i < lines_1.length; i++) {
+              let line = lines_1[i];
+              line.polyline.material = new Cesium.PolylineGlowMaterialProperty({
+                //设置Glow材质
+                glowPower: 0.005,
+                color: Cesium.Color.ORANGE.withAlpha(0.9),
+              });
+              line.polyline.width = 50;
+            }
+          })
+          .otherwise(function (error) {
+            window.alert(error);
+          });
+        let roadLine2 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+        //泛光亮线
+        roadLine2
+          .then(function (dataSource) {
+            viewer.dataSources.add(dataSource);
+            that.GeoJsonLayerList.push(dataSource);
+            let lines_1 = dataSource.entities.values;
+            for (let i = 0; i < lines_1.length; i++) {
+              let line = lines_1[i];
+              line.polyline.material = new Cesium.PolylineGlowMaterialProperty({
+                //设置Glow材质
+                glowPower: 0.001,
+                color: Cesium.Color.white,
+              });
+              line.polyline.width = 5;
+            }
+          })
+          .otherwise(function (error) {
+            window.alert(error);
+          });
+
+        //一山湖灯光
+        Cesium.loadJson("static/data/lightPoint3D.json").then((response) => {
+          let features = response.features;
+          features.forEach((element) => {
+            let p = element.geometry.coordinates;
+            var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+              p[0],
+              p[1],
+              p[2] + 20
+            );
+            var SpotLightPos32 = new Cesium.Cartesian3.fromDegrees(
+              p[0],
+              p[1],
+              p[2]
+            );
+            var SpotLightOptions3 = {
+              cutoffDistance: 50,
+              color: Cesium.Color.ORANGE,
+              decay: 1,
+              intensity: 2,
+            };
+
+            let SpotLight33 = new Cesium.PointLight(
+              SpotLightPos3,
+              // SpotLightPos32,
+              SpotLightOptions3
+            );
+            scene.addLightSource(SpotLight33);
+          });
+        });
+
+        // 体育场灯光
+        Cesium.loadJson("static/data/bpLight.json").then((response) => {
+          let features = response.features;
+          features.forEach((element) => {
+            let p = element.geometry.coordinates;
+            var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+              p[0],
+              p[1],
+              p[2] + 10
+            );
+
+            var SpotLightOptions3 = {
+              cutoffDistance: 150,
+              color: new Cesium.Color(245 / 255, 250 / 255, 216 / 255, 0.51),
+              decay: 1,
+              intensity: 1,
+            };
+
+            let SpotLight33 = new Cesium.PointLight(
+              SpotLightPos3,
+              // SpotLightPos32,
+              SpotLightOptions3
+            );
+            scene.addLightSource(SpotLight33);
+          });
+        });
+        // // 道路灯光
+        Cesium.loadJson("static/data/New_Point3D.json").then((response) => {
+          let features = response.features;
+          features.forEach((element) => {
+            let p = element.geometry.coordinates;
+            var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+              p[0],
+              p[1],
+              p[2] + 20
+            );
+            var SpotLightOptions3 = {
+              cutoffDistance: 130,
+              color: new Cesium.Color(209 / 255, 209 / 255, 147 / 255, 0.5),
+              decay: 1,
+              intensity: 1,
+            };
+
+            let SpotLight33 = new Cesium.PointLight(
+              SpotLightPos3,
+              // SpotLightPos32,
+              SpotLightOptions3
+            );
+            scene.addLightSource(SpotLight33);
+          });
+        });
+        // 草坪灯光
+        Cesium.loadJson("static/data/BPGYLight.json").then((response) => {
+          let features = response.features;
+          features.forEach((element) => {
+            let p = element.geometry.coordinates;
+            var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+              p[0],
+              p[1],
+              p[2] + 20
+            );
+
+            var SpotLightOptions3 = {
+              cutoffDistance: 90,
+              color: new Cesium.Color(209 / 255, 209 / 255, 147 / 255, 1),
+              decay: 1,
+              intensity: 1,
+            };
+
+            let SpotLight33 = new Cesium.PointLight(
+              SpotLightPos3,
+              // SpotLightPos32,
+              SpotLightOptions3
+            );
+            scene.addLightSource(SpotLight33);
+          });
+        });
+
+        this.loadldx();
+        this.switchLight(false);
         scene.skyAtmosphere.show = false;
 
         this.setHypsometric(true); //夜景
@@ -254,6 +414,7 @@ export default {
           })
         );
         this.imageLayer.alpha = 0.8;
+
         this.gyTableData.forEach((element) => {
           this.addLightSource(element);
         });
@@ -271,110 +432,96 @@ export default {
           1
         );
       } else {
-        // //设置环境光(夜晚)
-        // scene.lightSource.ambientLightColor = new Cesium.Color(
-        //   0.15,
-        //   0.15,
-        //   0.15,
-        //   1
-        // );
-
-        // // 添加光源
-        // let gyData1 = {
-        //   gyType: "点光源",
-        //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.49115721355469,
-        //     18.29592136116859,
-        //     80
-        //   ),
-        //   gyDecay: 1,
-        //   gyDistance: 800,
-        //   gyColor: "rgba(255,20,147,0.37)",
-        //   gyIntensity: 2,
-        // };
-        // this.addLightSource(gyData1);
+        //设置环境光(夜晚)
+        // scene.lightSource.ambientLightColor = new Cesium.Color(0.3, 0.3, 0.3, 1);
+        // 添加光源
 
-        // //主建筑光源
-        // let gyData2 = {
+        // this.addLightSource({
         //   gyType: "点光源",
         //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.55348802331464,
-        //     18.278824564764143,
-        //     80
+        //     109.51762123055649,
+        //     18.308419781897452,
+        //     20.784050116021502
         //   ),
-        //   gyDecay: 1,
-        //   gyDistance: 800,
-        //   gyColor: "rgba(240,248,255,1)",
-        //   gyIntensity: 1,
-        // };
-        // this.addLightSource(gyData2);
-        // let gyData3 = {
+        //   gyDecay: 5,
+        //   gyDistance: 300,
+        //   gyColor: "rgba(255,255,255,1)",
+        //   gyIntensity: 5,
+        // });
+        // this.addLightSource({
         //   gyType: "点光源",
         //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.54991809813524,
-        //     18.28458792962873,
-        //     80
+        //     109.51604504373526,
+        //     18.30819674716975,
+        //     15.12013402227458
         //   ),
         //   gyDecay: 1,
-        //   gyDistance: 800,
-        //   gyColor: "rgba(240,248,255,1)",
-        //   gyIntensity: 1,
-        // };
-        // this.addLightSource(gyData3);
-
-        // let gyData4 = {
+        //   gyDistance: 200,
+        //   gyColor: "rgba(255,255,255,1)",
+        //   gyIntensity: 2,
+        // });
+        // this.addLightSource({
         //   gyType: "点光源",
         //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.5490688547866,
-        //     18.283227701313386,
-        //     40
+        //     109.51119765783854,
+        //     18.311007882958762,
+        //     15.514382420330742
         //   ),
-        //   gyDecay: 2,
-        //   gyDistance: 80,
-        //   gyColor: "rgba(13,128,247,0.15)",
-        //   gyIntensity: 0.5,
-        // };
-        // this.addLightSource(gyData4);
-        // let gyData5 = {
+        //   gyDecay: 1,
+        //   gyDistance: 200,
+        //   gyColor: "rgba(255,255,255,1)",
+        //   gyIntensity: 2,
+        // });
+        // this.addLightSource({
         //   gyType: "点光源",
         //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.55236475164054,
-        //     18.278884181031398,
-        //     40
+        //     109.5109719906024,
+        //     18.312138464239744,
+        //     15.514382420330742
         //   ),
-        //   gyDecay: 2,
-        //   gyDistance: 80,
-        //   gyColor: "rgba(13,128,247,0.15)",
-        //   gyIntensity: 0.5,
-        // };
-        // this.addLightSource(gyData5);
-        // let gyData6 = {
+        //   gyDecay: 1,
+        //   gyDistance: 200,
+        //   gyColor: "rgba(255,255,255,1)",
+        //   gyIntensity: 2,
+        // });
+        // this.addLightSource({
         //   gyType: "点光源",
         //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.55195212379788,
-        //     18.283303465199854,
-        //     40
+        //     109.5155257151904,
+        //     18.312710967602822,
+        //     15.0056539031313925
         //   ),
-        //   gyDecay: 2,
-        //   gyDistance: 80,
-        //   gyColor: "rgba(13,128,247,0.15)",
-        //   gyIntensity: 0.5,
-        // };
-        // this.addLightSource(gyData6);
-        // let gyData7 = {
+        //   gyDecay: 1,
+        //   gyDistance: 200,
+        //   gyColor: "rgba(255,255,255,1)",
+        //   gyIntensity: 2,
+        // });
+        // this.addLightSource({
         //   gyType: "点光源",
         //   cartesian: new Cesium.Cartesian3.fromDegrees(
-        //     109.55549715519659,
-        //     18.279573531714174,
-        //     40
+        //     109.51794125594411,
+        //     18.310599330540743,
+        //     14.172257598338254
         //   ),
-        //   gyDecay: 2,
-        //   gyDistance: 80,
-        //   gyColor: "rgba(13,128,247,0.15)",
-        //   gyIntensity: 0.5,
-        // };
-        // this.addLightSource(gyData7);
-        // 添加光源
+        //   gyDecay: 1,
+        //   gyDistance: 200,
+        //   gyColor: "rgba(255,255,255,1)",
+        //   gyIntensity: 2,
+        // });
+        //操场光源
+        this.addLightSource({
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.51144104226398,
+            18.311654492261003,
+            24.172257598338254
+          ),
+          gyDecay: 2,
+          gyDistance: 200,
+          gyColor: "rgba(255,255,255,1)",
+          gyIntensity: 2,
+        });
+
         // 新增直射光1--西南侧光
         var position = new Cesium.Cartesian3.fromDegrees(
           108.64028472779978,
@@ -535,6 +682,352 @@ export default {
         });
       }
     },
+    /**
+     * 流动线
+     */
+    loadldx() {
+      let that = this;
+      Cesium.loadJson("static/data/道路中线_1.json").then((jsonData) => {
+        debugger;
+        jsonData.features.forEach((route) => {
+          let list = route.geometry.coordinates.flat(Infinity);
+
+          let dl = viewer.entities.add({
+            // 用于打底的线
+            polyline: {
+              positions: Cesium.Cartesian3.fromDegreesArrayHeights(list),
+              width: 5, // 线的宽度,像素为单位
+              material: Cesium.Color.BLACK.withAlpha(0.3),
+            },
+          });
+          this.liudongGntities.push(dl);
+          let dls = viewer.entities.add({
+            id: route.properties.OBJECTID,
+            polyline: {
+              positions: Cesium.Cartesian3.fromDegreesArrayHeights(list),
+              width: 4.0,
+              material: new Cesium.PolylineTrailMaterialProperty({
+                outlineColor: Cesium.Color.WHITE,
+                outlineWidth: 3,
+                color: Cesium.Color.fromCssColorString("rgba(127, 255, 0, 1)"),
+                trailLength: 0.3,
+                period: 4.0,
+              }),
+            },
+          });
+          this.liudongGntities.push(dls);
+        });
+      });
+    },
+    // //夜景开关
+    // startNight(isNight) {
+    //   scene.globe.show = true;
+    //   viewer.scene.hdrEnabled = isNight;
+    //   viewer.scene.bloomEffect.show = false;
+
+    //   // 是否开启夜景
+    //   if (!isNight) {
+    //     scene.sun.show = true;
+    //     this.clearLightSource(true, true);
+
+    //     scene.skyAtmosphere.show = true;
+
+    //     this.switchLight(true); //白天
+    //     this.setHypsometric(false); //夜景材质
+    //     viewer.imageryLayers.remove(this.imageLayer);
+    //   } else {
+    //     this.switchLight(false);
+    //     scene.sun.show = false;
+    //     scene.skyAtmosphere.show = false;
+
+    //     this.setHypsometric(true); //夜景
+    //     this.imageLayer = viewer.imageryLayers.addImageryProvider(
+    //       new Cesium.SingleTileImageryProvider({
+    //         url: "static/images/zt/Nightscape/BlackMarble_2016-1.jpg",
+    //       })
+    //     );
+    //     this.imageLayer.alpha = 0.8;
+    //     this.gyTableData.forEach((element) => {
+    //       this.addLightSource(element);
+    //     });
+    //   }
+    // },
+
+    // //设置环境光
+    // switchLight(isDayLight) {
+    //   if (isDayLight) {
+    //     //设置环境光(白天)
+    //     scene.lightSource.ambientLightColor = new Cesium.Color(
+    //       0.65,
+    //       0.65,
+    //       0.65,
+    //       1
+    //     );
+    //   } else {
+    //     // //设置环境光(夜晚)
+    //     // scene.lightSource.ambientLightColor = new Cesium.Color(
+    //     //   0.15,
+    //     //   0.15,
+    //     //   0.15,
+    //     //   1
+    //     // );
+
+    //     // // 添加光源
+    //     // let gyData1 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.49115721355469,
+    //     //     18.29592136116859,
+    //     //     80
+    //     //   ),
+    //     //   gyDecay: 1,
+    //     //   gyDistance: 800,
+    //     //   gyColor: "rgba(255,20,147,0.37)",
+    //     //   gyIntensity: 2,
+    //     // };
+    //     // this.addLightSource(gyData1);
+
+    //     // //主建筑光源
+    //     // let gyData2 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.55348802331464,
+    //     //     18.278824564764143,
+    //     //     80
+    //     //   ),
+    //     //   gyDecay: 1,
+    //     //   gyDistance: 800,
+    //     //   gyColor: "rgba(240,248,255,1)",
+    //     //   gyIntensity: 1,
+    //     // };
+    //     // this.addLightSource(gyData2);
+    //     // let gyData3 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.54991809813524,
+    //     //     18.28458792962873,
+    //     //     80
+    //     //   ),
+    //     //   gyDecay: 1,
+    //     //   gyDistance: 800,
+    //     //   gyColor: "rgba(240,248,255,1)",
+    //     //   gyIntensity: 1,
+    //     // };
+    //     // this.addLightSource(gyData3);
+
+    //     // let gyData4 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.5490688547866,
+    //     //     18.283227701313386,
+    //     //     40
+    //     //   ),
+    //     //   gyDecay: 2,
+    //     //   gyDistance: 80,
+    //     //   gyColor: "rgba(13,128,247,0.15)",
+    //     //   gyIntensity: 0.5,
+    //     // };
+    //     // this.addLightSource(gyData4);
+    //     // let gyData5 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.55236475164054,
+    //     //     18.278884181031398,
+    //     //     40
+    //     //   ),
+    //     //   gyDecay: 2,
+    //     //   gyDistance: 80,
+    //     //   gyColor: "rgba(13,128,247,0.15)",
+    //     //   gyIntensity: 0.5,
+    //     // };
+    //     // this.addLightSource(gyData5);
+    //     // let gyData6 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.55195212379788,
+    //     //     18.283303465199854,
+    //     //     40
+    //     //   ),
+    //     //   gyDecay: 2,
+    //     //   gyDistance: 80,
+    //     //   gyColor: "rgba(13,128,247,0.15)",
+    //     //   gyIntensity: 0.5,
+    //     // };
+    //     // this.addLightSource(gyData6);
+    //     // let gyData7 = {
+    //     //   gyType: "点光源",
+    //     //   cartesian: new Cesium.Cartesian3.fromDegrees(
+    //     //     109.55549715519659,
+    //     //     18.279573531714174,
+    //     //     40
+    //     //   ),
+    //     //   gyDecay: 2,
+    //     //   gyDistance: 80,
+    //     //   gyColor: "rgba(13,128,247,0.15)",
+    //     //   gyIntensity: 0.5,
+    //     // };
+    //     // this.addLightSource(gyData7);
+    //     // 添加光源
+    //     // 新增直射光1--西南侧光
+    //     var position = new Cesium.Cartesian3.fromDegrees(
+    //       108.64028472779978,
+    //       17.253899597841926,
+    //       10
+    //     );
+    //     var targetPosition1 = new Cesium.Cartesian3.fromDegrees(
+    //       108.98714556856183,
+    //       17.660729210061046,
+    //       10
+    //     );
+    //     var dirLightOptions = {
+    //       targetPosition: targetPosition1,
+    //       color: new Cesium.Color(220 / 255, 230 / 255, 240 / 255, 0.5),
+    //       intensity: 1,
+    //     };
+    //     this.directionalLight_1 &&
+    //       scene.removeLightSource(this.directionalLight_1);
+    //     this.directionalLight_1 = new Cesium.DirectionalLight(
+    //       position,
+    //       dirLightOptions
+    //     );
+    //     scene.addLightSource(this.directionalLight_1);
+
+    //     //新增直射光1--东北侧光
+    //     var position3 = new Cesium.Cartesian3.fromDegrees(
+    //       110.1833740842942,
+    //       19.23480287256715,
+    //       10
+    //     );
+    //     var targetPosition3 = new Cesium.Cartesian3.fromDegrees(
+    //       109.92243671490641,
+    //       18.823627245617516,
+    //       10
+    //     );
+    //     var dirLightOptions3 = {
+    //       targetPosition: targetPosition3,
+    //       color: new Cesium.Color(220 / 255, 223 / 255, 227 / 255, 0.5),
+    //       intensity: 1.5,
+    //     };
+    //     this.directionalLight_3 &&
+    //       scene.removeLightSource(this.directionalLight_3);
+    //     this.directionalLight_3 = new Cesium.DirectionalLight(
+    //       position3,
+    //       dirLightOptions3
+    //     );
+    //     scene.addLightSource(this.directionalLight_3);
+    //     //新增直射光1--顶光
+    //     var position4 = new Cesium.Cartesian3.fromDegrees(
+    //       109.5264539133307,
+    //       18.2736162462657,
+    //       500
+    //     );
+    //     var targetPosition4 = new Cesium.Cartesian3.fromDegrees(
+    //       109.5264539133307,
+    //       18.2736162462657,
+    //       400
+    //     );
+    //     var dirLightOptions4 = {
+    //       targetPosition: targetPosition4,
+
+    //       color: Cesium.Color.SILVER.withAlpha(0.5),
+    //       intensity: 0.1,
+    //     };
+    //     this.directionalLight_4 &&
+    //       scene.removeLightSource(this.directionalLight_4);
+    //     this.directionalLight_4 = new Cesium.DirectionalLight(
+    //       position4,
+    //       dirLightOptions4
+    //     );
+    //     scene.addLightSource(this.directionalLight_4);
+    //   }
+    // },
+    // //设置白膜自发光纹理
+    // setHypsometric(isShow = true) {
+    //   if (isShow) {
+    //     scene.layers.layerQueue.forEach((layer) => {
+    //       let hyp = null;
+    //       let LayerName = window.NightViewLayerName.find(
+    //         (c) => c == layer.name
+    //       );
+    //       if (LayerName) {
+    //         // 关掉边框线
+    //         layer.style3D.fillStyle = Cesium.FillStyle.Fill;
+    //         hyp = new Cesium.HypsometricSetting();
+    //         hyp.emissionTextureArray = [
+    //           {
+    //             url: "static/images/zt/Nightscape/Texture05.jpg",
+    //             USpeed: 0.5,
+    //             VSpeed: 0,
+    //             UTiling: 1,
+    //             VTiling: 1,
+    //           },
+    //           {
+    //             url: "static/images/zt/Nightscape/Texture01.jpg",
+    //             USpeed: 0.5,
+    //             VSpeed: 0,
+    //             UTiling: 1,
+    //             VTiling: 1,
+    //           },
+
+    //           {
+    //             url: "static/images/zt/Nightscape/build008.JPG",
+    //             USpeed: 0,
+    //             VSpeed: 0,
+    //             UTiling: 1,
+    //             VTiling: 3,
+    //           },
+    //           {
+    //             url: "static/images/zt/Nightscape/build129.JPG",
+    //             USpeed: 0,
+    //             VSpeed: 0,
+    //             UTiling: 1,
+    //             VTiling: 3,
+    //           },
+    //           {
+    //             url: "static/images/zt/Nightscape/build216.JPG",
+    //             USpeed: 0,
+    //             VSpeed: 0,
+    //             UTiling: 1,
+    //             VTiling: 3,
+    //           },
+    //           // {
+    //           //   url: "static/images/zt/Nightscape/HighRiseNight0008_4_S.jpg",
+    //           //   USpeed: 0,
+    //           //   VSpeed: 0,
+    //           //   UTiling: 1,
+    //           //   VTiling: 1,
+    //           // },
+    //           // {
+    //           //   url: "static/images/zt/Nightscape/HighRiseNight0016_3_L.jpg",
+    //           //   USpeed: 0,
+    //           //   VSpeed: 0,
+    //           //   UTiling: 1,
+    //           //   VTiling: 1,
+    //           // },
+    //           // {
+    //           //   url: "static/images/zt/Nightscape/HighRiseNight0020_L.jpg",
+    //           //   USpeed: 0,
+    //           //   VSpeed: 0,
+    //           //   UTiling: 1,
+    //           //   VTiling: 1,
+    //           // },
+    //         ];
+    //         layer.hypsometricSetting = {
+    //           hypsometricSetting: hyp,
+    //         };
+    //       }
+    //     });
+    //   } else {
+    //     scene.layers.layerQueue.forEach((layer) => {
+    //       layer.hypsometricSetting = {
+    //         hypsometricSetting: undefined,
+    //       };
+    //       layer.style3D.fillStyle = Cesium.FillStyle.Fill;
+    //       // 刷新场景
+    //       // layer.refresh();
+    //     });
+    //   }
+    // },
 
     //提交光源数据
     onSubmit() {
@@ -918,6 +1411,12 @@ export default {
         while (scene.lightSource.directionalLight.values.length > 0) {
           scene.removeLightSource(scene.lightSource.directionalLight.values[0]);
         }
+        this.GeoJsonLayerList.forEach((element) => {
+          viewer.dataSources.remove(element);
+        });
+        this.liudongGntities.forEach((element) => {
+          viewer.entities.remove(element);
+        });
       }
     },
     cartesianToWgs84(x, y, z) {

+ 76 - 36
src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue

@@ -37,7 +37,9 @@
                   </el-table-column>
                   <el-table-column label="结论" align="center">
                     <template #default="{ row }">
-                      {{ row.jl ? "合规" : "不合规" }}
+                      <div v-if="row.jl != null">
+                        {{ row.jl ? "合规" : "不合规" }}
+                      </div>
                     </template>
                   </el-table-column>
                 </el-table>
@@ -119,89 +121,127 @@ export default {
           YDMJrow.zbmc = "用地总面积";
           YDMJrow.fazbyg = Number(Data.FA_Data.YDMJ).toFixed(2);
           YDMJrow.kgyq = Number(Data.KG_Data.YDMJ).toFixed(2);
-          if (Number(Data.KG_Data.YDMJ) >= Number(Data.FA_Data.YDMJ)) {
-            YDMJrow.jl = true;
+          if (YDMJrow.fazbyg && YDMJrow.kgyq) {
+            if (Number(Data.KG_Data.YDMJ) >= Number(Data.FA_Data.YDMJ)) {
+              YDMJrow.jl = true;
+            } else {
+              YDMJrow.jl = false;
+            }
           } else {
-            YDMJrow.jl = false;
+            YDMJrow.jl = null;
           }
+
           TableData.push(YDMJrow);
 
           let JZMJrow = {};
           JZMJrow.zbmc = "建筑面积";
           JZMJrow.fazbyg = Number(Data.FA_Data.JZMJ).toFixed(2);
           JZMJrow.kgyq = Number(Data.KG_Data.JZMJ).toFixed(2);
-          if (Number(Data.KG_Data.JZMJ) >= Number(Data.FA_Data.JZMJ)) {
-            JZMJrow.jl = true;
+          if (JZMJrow.fazbyg && JZMJrow.kgyq) {
+            if (Number(Data.KG_Data.JZMJ) >= Number(Data.FA_Data.JZMJ)) {
+              JZMJrow.jl = true;
+            } else {
+              JZMJrow.jl = false;
+            }
           } else {
-            JZMJrow.jl = false;
+            JZMJrow.jl = null;
           }
+
           TableData.push(JZMJrow);
 
           let JDMJrow = {};
           JDMJrow.zbmc = "基底面积";
           JDMJrow.fazbyg = Number(Data.FA_Data.JDMJ).toFixed(2);
           JDMJrow.kgyq = Data.KG_Data.JDMJ;
-          if (Number(Data.KG_Data.JDMJ) >= Number(Data.FA_Data.JDMJ)) {
-            JDMJrow.jl = true;
+          if (JDMJrow.fazbyg && JDMJrow.kgyq) {
+            if (Number(Data.KG_Data.JDMJ) >= Number(Data.FA_Data.JDMJ)) {
+              JDMJrow.jl = true;
+            } else {
+              JDMJrow.jl = false;
+            }
           } else {
-            JDMJrow.jl = false;
+            JDMJrow.jl = null;
           }
+
           TableData.push(JDMJrow);
 
           let JRJZMJrow = {};
           JRJZMJrow.zbmc = "计容建筑面积";
           JRJZMJrow.fazbyg = Number(Data.FA_Data.JRJZMJ).toFixed(2);
-          JRJZMJrow.kgyq = Data.KG_Data.JRJZMJX + "/" + Data.KG_Data.JRJZMJD;
-          if (
-            Number(Data.FA_Data.JRJZMJ) >= Number(Data.KG_Data.JRJZMJX) &&
-            Number(Data.FA_Data.JRJZMJ) <= Number(Data.KG_Data.JRJZMJD)
-          ) {
-            JRJZMJrow.jl = true;
+          if (Data.KG_Data.JRJZMJX && Data.KG_Data.JRJZMJD) {
+            JRJZMJrow.kgyq = Data.KG_Data.JRJZMJX + "/" + Data.KG_Data.JRJZMJD;
+          } else {
+            JRJZMJrow.kgyq = "";
+          }
+
+          if (JRJZMJrow.fazbyg && JRJZMJrow.kgyq) {
+            if (
+              Number(Data.FA_Data.JRJZMJ) >= Number(Data.KG_Data.JRJZMJX) &&
+              Number(Data.FA_Data.JRJZMJ) <= Number(Data.KG_Data.JRJZMJD)
+            ) {
+              JRJZMJrow.jl = true;
+            } else {
+              JRJZMJrow.jl = false;
+            }
           } else {
-            JRJZMJrow.jl = false;
+            JRJZMJrow.jl = null;
           }
+
           TableData.push(JRJZMJrow);
 
           let RJLrow = {};
           RJLrow.zbmc = "容积率";
           RJLrow.fazbyg = Data.FA_Data.RJL;
           RJLrow.kgyq = Data.KG_Data.RJLX + "/" + Data.KG_Data.RJLD;
-          if (
-            Number(Data.FA_Data.RJL) >= Number(Data.KG_Data.RJLX) &&
-            Number(Data.FA_Data.RJL) <= Number(Data.KG_Data.RJLD)
-          ) {
-            JRLrow.jl = true;
-          } else {
-            RJLrow.jl = false;
+          if (RJLrow.fazbyg && RJLrow.kgyq) {
+            if (
+              Number(Data.FA_Data.RJL) >= Number(Data.KG_Data.RJLX) &&
+              Number(Data.FA_Data.RJL) <= Number(Data.KG_Data.RJLD)
+            ) {
+              RJLrow.jl = true;
+            } else {
+              RJLrow.jl = false;
+            }
           }
+
           TableData.push(RJLrow);
 
           let JZMDrow = {};
           JZMDrow.zbmc = "建筑密度";
           JZMDrow.fazbyg = Data.FA_Data.JZMD;
           JZMDrow.kgyq = Data.KG_Data.JZMDX + "/" + Data.KG_Data.JZMDD;
-          if (
-            Number(Data.FA_Data.JZMD) >= Number(Data.KG_Data.JZMDX) &&
-            Number(Data.FA_Data.JZMD) <= Number(Data.KG_Data.JZMDD)
-          ) {
-            JZMDrow.jl = true;
+          if (JZMDrow.fazbyg && JZMDrow.kgyq) {
+            if (
+              Number(Data.FA_Data.JZMD) >= Number(Data.KG_Data.JZMDX) &&
+              Number(Data.FA_Data.JZMD) <= Number(Data.KG_Data.JZMDD)
+            ) {
+              JZMDrow.jl = true;
+            } else {
+              JZMDrow.jl = false;
+            }
           } else {
-            JZMDrow.jl = false;
+            JZMDrow.jl = null;
           }
+
           TableData.push(JZMDrow);
 
           let JZXGDrow = {};
           JZXGDrow.zbmc = "建筑限高";
           JZXGDrow.fazbyg = Data.FA_Data.JZGD;
           JZXGDrow.kgyq = Data.KG_Data.JZXGX + "/" + Data.KG_Data.JZXGD;
-          if (
-            Number(Data.FA_Data.JZGD) >= Number(Data.KG_Data.JZXGX) &&
-            Number(Data.FA_Data.JZGD) <= Number(Data.KG_Data.JZXGD)
-          ) {
-            JZXGDrow.jl = true;
+          if (JZXGDrow.fazbyg && JZXGDrow.kgyq) {
+            if (
+              Number(Data.FA_Data.JZGD) >= Number(Data.KG_Data.JZXGX) &&
+              Number(Data.FA_Data.JZGD) <= Number(Data.KG_Data.JZXGD)
+            ) {
+              JZXGDrow.jl = true;
+            } else {
+              JZXGDrow.jl = false;
+            }
           } else {
-            JZXGDrow.jl = false;
+            JZXGDrow.jl = null;
           }
+
           TableData.push(JZXGDrow);
           DKZBData.TableData = TableData;
           DKZBDataList.push(DKZBData);

+ 42 - 33
src/views/ConstructionApplication3D/backLineAnalysis/backLineAnalysisinfo.vue

@@ -19,7 +19,7 @@
           @current-change="handleCurrentChange"
           style="width: 100%"
         >
-          <el-table-column label="超高楼号" align="center">
+          <el-table-column label="楼号" align="center">
             <template #default="{ row }">
               {{ row.data.find((c) => c.label == "BUILDNO").value }}
             </template>
@@ -102,40 +102,49 @@ export default {
       this.cczmj = 0;
       let jzlkList = [];
       if (this.info.Minfo.dataurl && this.info.Minfo.dataSourceName) {
-        let queryByGeometryParameters = {
-          getFeatureMode: "SQL",
-          datasetNames: [this.info.Minfo.dataSourceName + ":" + "建筑轮廓"],
-          queryParameter: {
-            attributeFilter: "1=1",
-          },
-          hasGeometry: "true",
-        };
-        let e = await mapQuery(
-          this.info.Minfo.dataurl + "/featureResults.json?returnContent=true",
-          queryByGeometryParameters
-        );
-        if (e && e.totalCount > 0) {
-          e.features.forEach((feature) => {
-            let jzlk = { data: [], geometry: feature.geometry };
-            feature.fieldNames.forEach((fieldName, i) => {
-              let Field = e.datasetInfos[0].fieldInfos.find(
-                (c) =>
-                  c.name.toUpperCase() == fieldName.toUpperCase() &&
-                  c.name.toUpperCase().indexOf("SM") == -1
-              );
-              if (Field) {
-                jzlk.data.push({
-                  label: fieldName,
-                  labelCN: Field ? Field.caption : fieldName,
-                  value: feature.fieldValues[i],
-                });
-              }
+        if (this.info.DKBM.length > 0) {
+          debugger;
+          let queryByGeometryParameters = {
+            getFeatureMode: "SQL",
+            datasetNames: [this.info.Minfo.dataSourceName + ":" + "建筑轮廓"],
+            queryParameter: {
+              attributeFilter:
+                "LANDNO in ('" + this.info.DKBM.join("','") + "')",
+            },
+            hasGeometry: "true",
+          };
+          let e = await mapQuery(
+            this.info.Minfo.dataurl + "/featureResults.json?returnContent=true",
+            queryByGeometryParameters
+          );
+          if (e && e.totalCount > 0) {
+            e.features.forEach((feature) => {
+              let jzlk = { data: [], geometry: feature.geometry };
+              feature.fieldNames.forEach((fieldName, i) => {
+                debugger;
+                let Field = e.datasetInfos
+                  ? e.datasetInfos[0].fieldInfos.find(
+                      (c) =>
+                        c.name &&
+                        c.name.toUpperCase() == fieldName.toUpperCase() &&
+                        c.name.toUpperCase().indexOf("SM") == -1
+                    )
+                  : null;
+                if (Field) {
+                  jzlk.data.push({
+                    label: fieldName,
+                    labelCN: Field ? Field.caption : fieldName,
+                    value: feature.fieldValues[i],
+                  });
+                }
+              });
+              jzlkList.push(jzlk);
             });
-            jzlkList.push(jzlk);
-          });
-        } else {
-          console.log("wushuju");
+          } else {
+            console.log("wushuju");
+          }
         }
+
         //退线区域
         this.info.JZTXlayerDataList.forEach((JZTXlayerData) => {
           //楼体信息

+ 494 - 308
src/views/ConstructionApplication3D/billboard/addBiillboardModel.vue

@@ -1,337 +1,523 @@
 <template>
-    <div style="height: 100%;padding: 10px;">
-        <el-row>
-            <span>模型名称:</span><el-input type="text" placeholder="请输入模型名称" v-model="billboardModel.billboardName"></el-input>
-        </el-row>
-        <el-row>
-            <el-col :span="9"> <span>模型类型:</span></el-col>
-            <el-col :span="15">
-                <el-select placeholder="请选择广告类型" v-model="billboardModel.billboardType">
-                    <el-option v-for="item in options " :key="item.value" :value="item.value" :label="item.label">{{
-                        item.label }}</el-option>
-                </el-select>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"><span>X坐标(度) </span></el-col>
-            <el-col :span="15">
-                <el-input-number name="x" v-model="billboardModel.x" size="medium" precision="6" :min="108.60000"
-                    :max="110.50000" @change="handleChange" step="0.000001" label="X坐标(度)"></el-input-number></el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"><span>Y坐标(度):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="y" v-model="billboardModel.y" size="medium" precision="6" :min="18.16000"
-                    :max="18.70000" @change="handleChange" step="0.000001" label="Y坐标(度)"></el-input-number>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"> <span>Z坐标(米):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="z" v-model="billboardModel.z" size="small" precision="2" :min="0" :max="100"
-                    step="0.1" @change="handleChange" label="Z坐标(米)"></el-input-number>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"> <span>长(米):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="xL" v-model="billboardModel.xL" size="small" precision="2" :min="0" :max="100"
-                    step="0.01" @change="handleChange" label="长(米)"></el-input-number>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"> <span>宽/高(米):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="yL" v-model="billboardModel.yL" size="small" precision="2" :min="0" :max="2"
-                    step="0.01" @change="handleChange" label="">宽/高(米)</el-input-number>
-            </el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"><span>厚度(米):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="zL" v-model="billboardModel.zL" size="small" precision="2" :min="0" :max="100"
-                    step="0.01" @change="handleChange" label="厚度(米)"></el-input-number>
-            </el-col>
-        </el-row>
+  <div style="height: 100%; padding: 10px">
+    <el-row>
+      <span>模型名称:</span
+      ><el-input
+        type="text"
+        placeholder="请输入模型名称"
+        v-model="billboardModel.billboardName"
+      ></el-input>
+    </el-row>
+    <el-row>
+      <el-col :span="9"> <span>模型类型:</span></el-col>
+      <el-col :span="15">
+        <el-cascader
+          placeholder="请选择广告类型"
+          v-model="billboardModel.billboardType"
+          :options="options"
+          :show-all-levels="false"
+          :props="{
+            value: 'billboardType',
+            label: 'billboardType',
+            children: 'children',
+            emitPath: false,
+          }"
+        ></el-cascader>
+        <!-- <el-select
+          placeholder="请选择广告类型"
+          v-model="billboardModel.billboardType"
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+            >{{ item.label }}</el-option
+          >
+        </el-select> -->
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"><span>X坐标(度) </span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="x"
+          v-model="billboardModel.x"
+          size="medium"
+          precision="6"
+          :min="108.6"
+          :max="110.5"
+          @change="handleChange"
+          step="0.000001"
+          label="X坐标(度)"
+        ></el-input-number
+      ></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"><span>Y坐标(度):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="y"
+          v-model="billboardModel.y"
+          size="medium"
+          precision="6"
+          :min="18.16"
+          :max="18.7"
+          @change="handleChange"
+          step="0.000001"
+          label="Y坐标(度)"
+        ></el-input-number>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"> <span>Z坐标(米):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="z"
+          v-model="billboardModel.z"
+          size="small"
+          precision="2"
+          :min="0"
+          :max="100"
+          step="0.1"
+          @change="handleChange"
+          label="Z坐标(米)"
+        ></el-input-number>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"> <span>长(米):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="xL"
+          v-model="billboardModel.xL"
+          size="small"
+          precision="2"
+          :min="0"
+          :max="100"
+          step="0.01"
+          @change="handleChange"
+          label="长(米)"
+        ></el-input-number>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"> <span>宽/高(米):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="yL"
+          v-model="billboardModel.yL"
+          size="small"
+          precision="2"
+          :min="0"
+          :max="50"
+          step="0.01"
+          @change="handleChange"
+          label=""
+          >宽/高(米)</el-input-number
+        >
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"><span>厚度(米):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="zL"
+          v-model="billboardModel.zL"
+          size="small"
+          precision="2"
+          :min="0"
+          :max="100"
+          step="0.01"
+          @change="handleChange"
+          label="厚度(米)"
+        ></el-input-number>
+      </el-col>
+    </el-row>
 
-        <el-row>
-            <el-col :span="9"><span>X轴旋转角(度):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="rotateX" v-model="billboardModel.rotateX" size="small" precision="1" :min="0"
-                    :max="180" step="0.1" @change="handleChange" label="X轴旋转角(度)"></el-input-number></el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"><span>Y轴旋转角(度):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="rotateY" v-model="billboardModel.rotateY" size="small" precision="1" :min="0"
-                    :max="360" step="0.1" @change="handleChange" label="Y轴旋转角(度)"></el-input-number></el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="9"><span>Z轴旋转角(度):</span></el-col>
-            <el-col :span="15">
-                <el-input-number name="rotateZ" v-model="billboardModel.rotateZ" size="small" precision="1" :min="0"
-                    :max="360" step="0.1" @change="handleChange" label="Z轴旋转角(度)"></el-input-number></el-col>
-        </el-row>
-        <el-row>
-            <div style="display:inline-flex;">
-                <el-button type="primary" @click="addModel()">添加</el-button>
-                <el-button type="primary" @click="saveMode()">保存</el-button>
-                <el-button @click="cancle()">取消</el-button>
-            </div>
-        </el-row>
-
-    </div>
+    <el-row>
+      <el-col :span="9"><span>X轴旋转角(度):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="rotateX"
+          v-model="billboardModel.rotateX"
+          size="small"
+          precision="1"
+          :min="0"
+          :max="360"
+          step="0.1"
+          @change="handleChange"
+          label="X轴旋转角(度)"
+        ></el-input-number
+      ></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"><span>Y轴旋转角(度):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="rotateY"
+          v-model="billboardModel.rotateY"
+          size="small"
+          precision="1"
+          :min="0"
+          :max="360"
+          step="0.1"
+          @change="handleChange"
+          label="Y轴旋转角(度)"
+        ></el-input-number
+      ></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="9"><span>Z轴旋转角(度):</span></el-col>
+      <el-col :span="15">
+        <el-input-number
+          name="rotateZ"
+          v-model="billboardModel.rotateZ"
+          size="small"
+          precision="1"
+          :min="0"
+          :max="360"
+          step="0.1"
+          @change="handleChange"
+          label="Z轴旋转角(度)"
+        ></el-input-number
+      ></el-col>
+    </el-row>
+    <el-row>
+      <div style="display: inline-flex">
+        <el-button type="primary" @click="addModel()">添加广告牌</el-button>
+        <el-button type="primary" @click="saveMode()">保存</el-button>
+        <el-button @click="cancle()">取消</el-button>
+      </div>
+    </el-row>
+  </div>
 </template>
 <script>
-import { Image } from 'element-ui'
-import { watch } from 'vue'
+import { Image } from "element-ui";
+import { watch } from "vue";
+import { v4 as uuidv4 } from "uuid";
 
 export default {
-    props: {
-        layerid: {
-            type: String,
-            default: ""
-        },
-        projectId: {
-            type: String,
-            default: ""
-        },
+  props: {
+    layerid: {
+      type: String,
+      default: "",
     },
-    data() {
-        return {
-            billboardModel: {
-                id: "",
-                billboardName: '',
-                billboardType: '平行建筑主体户外广告',
-                x: 109.56047,
-                y: 18.36254,
-                z: 3,
-                xL: 1,
-                yL: 1,
-                zL: 0.1,//厚度
-                rotateX: 90,
-                rotateY: 0,
-                rotateZ: 0
-            },
-            IDIndex: 10,
-            options: [{
-                value: '大型LED广告牌',
-                label: '大型LED广告牌'
-            }, {
-                value: '平行建筑主体户外广告',
-                label: '平行建筑主体户外广告'
-            }],
-            /**
-             * 编辑句柄
-             */
-            handlerPoint: null,
-            /**
-             * 当前编辑模型
-             */
-            currentEntity: null,
-            /**
-             * 添加的模型集合
-             */
-            modelList: [],
-            point3D: null,
-            GUID: ""
-        };
+    projectId: {
+      type: String,
+      default: "",
     },
-    watch: {
-        // point3D() {
-        //     this.billboardModel.x = parseFloat(this.point3D.longitude).toFixed(5);
-        //     this.billboardModel.y = parseFloat(this.point3D.latitude).toFixed(5);
-        //     this.billboardModel.z = parseFloat(this.point3D.height).toFixed(2);
-        //     this.billboardModel.xL = parseFloat(this.point3D.height).toFixed(2);
-
-        // }
-
-        // "billboardModel"(value) {
-        //     console.log(343)
-        //     this.currentEntity.box.dimensions = new Cesium.Cartesian3(
-        //         value.xL,
-        //         value.yL,
-        //         value.zL
-        //     );
-        //     this.currentEntity.orientation = Cesium.Transforms.headingPitchRollQuaternion(this.currentEntity.position,
-        //         new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(value.rotateX),
-        //             Cesium.Math.toRadians(0), Cesium.Math.toRadians(0)));
-
-
-        // }
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
     },
-    methods: {
-        /**
-         * 点击添加位置
-         */
-        addModel() {
-            var that = this;
-
-            viewer._container.style.cursor = "pointer";
-            that.GUID = new Date().getTime().toString()
-            that.handlerPoint = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
-            //todo:在显示地形情况下点击创建点
-            var imageurl = "../../../../static/images/cesiumStyleImages/1.jpg";
-            var modelurl = "../../../../static/ModelData/billboard/box.gltf";
-            that.handlerPoint.setInputAction(function (event) {
-                var newposition = viewer.scene.pickPosition(event.position); //获取到地形图上面的坐标
-
-                var orientation = Cesium.Transforms.headingPitchRollQuaternion(newposition,
-                    new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(that.billboardModel.rotateX),
-                        Cesium.Math.toRadians(0), Cesium.Math.toRadians(0)));
-
-                var coordinate = Cesium.Cartographic.fromCartesian(newposition);
-                var longitude = Cesium.Math.toDegrees(coordinate.longitude);
-                var latitude = Cesium.Math.toDegrees(coordinate.latitude);
-                var height = coordinate.height;
-                that.billboardModel.x = longitude;
-                that.billboardModel.y = latitude;
-                that.billboardModel.z = height;
-                // var newPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
-                var entity =
-                    viewer.entities.add({
-                        id: "billboard_" + that.GUID,
-                        name: "gltf",
-                        show: true,
-                        position: newposition,
-                        /**
-                         * 长方体  
-                         */
-                        // box: {
-                        //     dimensions: new Cesium.Cartesian3(that.billboardModel.xL, that.billboardModel.zL, that.billboardModel.yL,),
-                        //     show: true,
-                        //     material: Cesium.Color.LIGHTGREEN,
-                        //     outline: true,
-                        //     outlineColor: Cesium.Color.SPRINGGREEN,
-                        //     outlineWidth: 1,
-                        // },
-                        /**
-                         * 模型
-                         */
-                        model: {
-                            uri: modelurl,
-                            scale: that.billboardModel.xL
-                        },
-                        /**
-                         * 广告牌
-                         */
-                        // billboard: {
-                        //     image: imageurl,
-                        //     width: that.billboardModel.xL,
-                        //     height: that.billboardModel.zL,
-                        //     rotation: 0,
-                        // },
-                        orientation: orientation
-                    });
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+      billboardModel: {
+        id: "",
+        billboardInfoId: "",
+        billboardName: "",
+        billboardType: "",
+        x: 109.56047,
+        y: 18.36254,
+        z: 3,
+        xL: 1,
+        yL: 1,
+        zL: 0.1, //厚度
+        rotateX: 90,
+        rotateY: 0,
+        rotateZ: 0,
+      },
+      options: window.billboardReviewList,
+      /**
+       * 编辑句柄
+       */
+      handlerPoint: null,
+      /**
+       * 当前编辑模型
+       */
+      currentEntity: null,
+      /**
+       * 添加的模型集合
+       */
+      modelList: [],
+      point3D: null,
+      GUID: "",
+    };
+  },
+  watch: {
+    // point3D() {
+    //     this.billboardModel.x = parseFloat(this.point3D.longitude).toFixed(5);
+    //     this.billboardModel.y = parseFloat(this.point3D.latitude).toFixed(5);
+    //     this.billboardModel.z = parseFloat(this.point3D.height).toFixed(2);
+    //     this.billboardModel.xL = parseFloat(this.point3D.height).toFixed(2);
+    // }
+    // "billboardModel"(value) {
+    //     console.log(343)
+    //     this.currentEntity.box.dimensions = new Cesium.Cartesian3(
+    //         value.xL,
+    //         value.yL,
+    //         value.zL
+    //     );
+    //     this.currentEntity.orientation = Cesium.Transforms.headingPitchRollQuaternion(this.currentEntity.position,
+    //         new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(value.rotateX),
+    //             Cesium.Math.toRadians(0), Cesium.Math.toRadians(0)));
+    // }
+  },
+  methods: {
+    /**
+     * 点击添加位置
+     */
+    addModel() {
+      var that = this;
+      if (this.modelList.length > 0) {
+        for (let index = 0; index < this.modelList.length; index++) {
+          const element = this.modelList[index];
+          viewer.entities.removeById(element.id);
+        }
 
+        this.modelList = [];
+      }
 
-                that.modelList.push[entity]
-                if (that.handlerPoint)
-                    that.handlerPoint.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
-            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+      viewer._container.style.cursor = "pointer";
+      that.GUID = new Date().getTime().toString();
+      that.handlerPoint = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
+      //todo:在显示地形情况下点击创建点
+      var imageurl = "../../../../static/images/cesiumStyleImages/1.jpg";
+      var modelurl = "../../../../static/ModelData/billboard/box.gltf";
+      that.handlerPoint.setInputAction(function (event) {
+        // // 使用场景的pick方法获取点击位置的实体
+        // var pickedObject = viewer.scene.pick(event.position);
+        // // 检查是否点击到了实体
+        // if (
+        //   scene.pickPositionSupported &&
+        //   Cesium.defined(pickedObject) &&
+        //   pickedObject.primitive
+        // ) {
+        //   debugger;
 
-            // var colorStr = color.toCssColorString();
-            // viewModel.boxMaterial = colorStr;
-        },
-        /**
-         * 动态调整模型
-         */
-        handleChange() {
-            var that = this
-            var currentEntity = viewer.entities.getById("billboard_" + that.GUID)
-            /**
-              * box
-              */
-            // currentEntity.box.dimensions = new Cesium.Cartesian3(that.billboardModel.xL, that.billboardModel.zL, that.billboardModel.yL);
+        // }
 
-            /**
-             * model
-             */
-            currentEntity.model.scale = that.billboardModel.xL;
+        var newposition = viewer.scene.pickPosition(event.position); //获取到地形图上面的坐标
 
+        var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+          newposition,
+          new Cesium.HeadingPitchRoll(
+            Cesium.Math.toRadians(that.billboardModel.rotateX),
+            Cesium.Math.toRadians(0),
+            Cesium.Math.toRadians(0)
+          )
+        );
 
-            /**
-           * billoard
+        var coordinate = Cesium.Cartographic.fromCartesian(newposition);
+        var longitude = Cesium.Math.toDegrees(coordinate.longitude);
+        var latitude = Cesium.Math.toDegrees(coordinate.latitude);
+        var height = coordinate.height;
+        that.billboardModel.x = longitude;
+        that.billboardModel.y = latitude;
+        that.billboardModel.z = height;
+        // var newPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
+        var entity = viewer.entities.add({
+          id: "billboard_" + that.GUID,
+          name: "gltf",
+          show: true,
+          position: newposition,
+          /**
+           * 长方体
            */
-            //   debugger
-            //     that.currentEntity.billboard.width = that.billboardModel.x;
-            //     that.currentEntity.billboard.height = that.billboardModel.y;
-            //     that.currentEntity.billboard.rotation =that.billboardModel.rotateX
-            /**
-             * 更新位置
-             */
-            var newposition = Cesium.Cartesian3.fromDegrees(parseFloat(that.billboardModel.x), parseFloat(that.billboardModel.y), parseFloat(that.billboardModel.z));
-            currentEntity.position = newposition;
-            /**
-             *  旋转
-             */
-            var heading = Cesium.Math.toRadians(that.billboardModel.rotateX);
-            var pitch = Cesium.Math.toRadians(that.billboardModel.rotateY);
-            var roll = Cesium.Math.toRadians(that.billboardModel.rotateZ);
-            var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
-            var neworientation = Cesium.Transforms.headingPitchRollQuaternion(newposition, hpr);
-            currentEntity.orientation = neworientation;
-
-
-        },
-        /**
-         *实时更新位置
-         */
-        getPostions() {
-            console.log("更新位置")
-            var position = Cesium.Cartesian3.fromDegrees(parseFloat(this.billboardModel.x), parseFloat(this.billboardModel.y), parseFloat(this.billboardModel.z));
-            var property = new Cesium.SampledPositionProperty();
+          box: {
+            dimensions: new Cesium.Cartesian3(
+              that.billboardModel.xL,
+              that.billboardModel.zL,
+              that.billboardModel.yL
+            ),
+            show: true,
+            material: Cesium.Color.LIGHTGREEN,
+            // outline: false,
+            // outlineColor: Cesium.Color.SPRINGGREEN,
+            // outlineWidth: 1,
+          },
+          /**
+           * 模型
+           */
+          // model: {
+          //   uri: modelurl,
+          //   scale: that.billboardModel.xL,
+          // },
+          /**
+           * 广告牌
+           */
+          // billboard: {
+          //     image: imageurl,
+          //     width: that.billboardModel.xL,
+          //     height: that.billboardModel.zL,
+          //     rotation: 0,
+          // },
+          orientation: orientation,
+        });
+        debugger;
+        that.modelList.push(entity);
+        if (that.handlerPoint)
+          that.handlerPoint.removeInputAction(
+            Cesium.ScreenSpaceEventType.LEFT_CLICK
+          );
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 
-            // let time = Cesium.JulianDate.addSeconds(start, source[i].time, new Cesium.JulianDate);
-            var time = Cesium.JulianDate.now();
-            // 添加位置,和时间对应
-            property.addSample(time, position);
-            return property;
-        },
-        /**
-         * 实时更新角度
-         */
-        getOrientation() {
+      // var colorStr = color.toCssColorString();
+      // viewModel.boxMaterial = colorStr;
+    },
+    /**
+     * 动态调整模型
+     */
+    handleChange() {
+      var that = this;
+      var currentEntity = viewer.entities.getById("billboard_" + that.GUID);
+      /**
+       * box
+       */
+      currentEntity.box.dimensions = new Cesium.Cartesian3(
+        that.billboardModel.xL,
+        that.billboardModel.zL,
+        that.billboardModel.yL
+      );
 
-            var that = this;
-            //     var rotate = Cesium.Math.toRadians(that.billboardModel.rotateX);
-            //     var hpr = new Cesium.HeadingPitchRoll(rotate, 0, 0);
-            var position = Cesium.Cartesian3.fromDegrees(parseFloat(that.billboardModel.x), parseFloat(that.billboardModel.y), parseFloat(that.billboardModel.z));
-            //     var neworientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr);
-            //  console.log("更新角度")
-            //     return neworientation;
+      /**
+       * model
+       */
+      // currentEntity.model.scale = that.billboardModel.xL;
 
-            // 取样位置 相当于一个集合
-            let property = new Cesium.SampledPositionProperty();
+      /**
+       * billoard
+       */
+      //   debugger
+      //     that.currentEntity.billboard.width = that.billboardModel.x;
+      //     that.currentEntity.billboard.height = that.billboardModel.y;
+      //     that.currentEntity.billboard.rotation =that.billboardModel.rotateX
+      /**
+       * 更新位置
+       */
+      var newposition = Cesium.Cartesian3.fromDegrees(
+        parseFloat(that.billboardModel.x),
+        parseFloat(that.billboardModel.y),
+        parseFloat(that.billboardModel.z)
+      );
+      currentEntity.position = newposition;
+      /**
+       *  旋转
+       */
+      var heading = Cesium.Math.toRadians(that.billboardModel.rotateX);
+      var pitch = Cesium.Math.toRadians(that.billboardModel.rotateY);
+      var roll = Cesium.Math.toRadians(that.billboardModel.rotateZ);
+      var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
+      var neworientation = Cesium.Transforms.headingPitchRollQuaternion(
+        newposition,
+        hpr
+      );
+      currentEntity.orientation = neworientation;
+    },
+    /**
+     *实时更新位置
+     */
+    getPostions() {
+      console.log("更新位置");
+      var position = Cesium.Cartesian3.fromDegrees(
+        parseFloat(this.billboardModel.x),
+        parseFloat(this.billboardModel.y),
+        parseFloat(this.billboardModel.z)
+      );
+      var property = new Cesium.SampledPositionProperty();
 
-            // let time = Cesium.JulianDate.addSeconds(start, source[i].time, new Cesium.JulianDate);
-            var time = Cesium.JulianDate.now();
-            // 添加位置,和时间对应
-            property.addSample(time, position);
+      // let time = Cesium.JulianDate.addSeconds(start, source[i].time, new Cesium.JulianDate);
+      var time = Cesium.JulianDate.now();
+      // 添加位置,和时间对应
+      property.addSample(time, position);
+      return property;
+    },
+    /**
+     * 实时更新角度
+     */
+    getOrientation() {
+      var that = this;
+      //     var rotate = Cesium.Math.toRadians(that.billboardModel.rotateX);
+      //     var hpr = new Cesium.HeadingPitchRoll(rotate, 0, 0);
+      var position = Cesium.Cartesian3.fromDegrees(
+        parseFloat(that.billboardModel.x),
+        parseFloat(that.billboardModel.y),
+        parseFloat(that.billboardModel.z)
+      );
+      //     var neworientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr);
+      //  console.log("更新角度")
+      //     return neworientation;
 
-            return property;
-        },
-        /**
-         * 保存编辑
-         */
-        saveMode() {
-        },
-        //取消
-        cancle() {
-            if (this.handlerPoint)
-                this.handlerPoint.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
-            this.modelList = []
-            viewer.entities.removeAll();
+      // 取样位置 相当于一个集合
+      let property = new Cesium.SampledPositionProperty();
 
+      // let time = Cesium.JulianDate.addSeconds(start, source[i].time, new Cesium.JulianDate);
+      var time = Cesium.JulianDate.now();
+      // 添加位置,和时间对应
+      property.addSample(time, position);
 
-            this.$layer.close(this.layerid);
-        }
+      return property;
+    },
+    /**
+     * 保存编辑
+     */
+    saveMode() {
+      debugger;
+      let that = this;
+      if (
+        that.billboardModel.billboardName == "" ||
+        that.billboardModel.billboardName == null
+      ) {
+        this.$message.error("请添加模型名称");
+        return;
+      }
 
+      if (that.modelList.length == 0) {
+        this.$message.error("请先完成[添加广告牌],再保存");
+        return;
+      }
+      that.billboardModel.id = uuidv4();
+      that.billboardModel.billboardInfoId = that.projectId;
+      window.billboardModelList.push(that.billboardModel);
+      this.$message({
+        message: "添加成功",
+        type: "success",
+      });
+      viewer.entities.removeAll();
+      that.lyoption.cancel();
+      that.$layer.close(that.layerid);
     },
-    components: { Image }
+    //取消
+    cancle() {
+      if (this.handlerPoint)
+        this.handlerPoint.removeInputAction(
+          Cesium.ScreenSpaceEventType.LEFT_CLICK
+        );
+      this.modelList = [];
+      viewer.entities.removeAll();
 
-}
+      this.$layer.close(this.layerid);
+    },
+  },
+  components: { Image },
+};
 </script>
 <style lang="scss">
 @import "@/../../zt.scss";
-</style>
+</style>

+ 28 - 19
src/views/ConstructionApplication3D/billboard/addBillboardPoject.vue

@@ -21,20 +21,22 @@
           <el-form-item label="申报日期" size="mini" prop="checkDate">
             <el-col :span="20">
               <el-date-picker
-                v-model="checkDate"
-                type="date"
+                size="mini"
+                v-model="form.checkDate"
+                type="datetime"
                 placeholder="选择日期"
+                value-format="yyyy-MM-dd HH:mm:ss"
               >
               </el-date-picker>
             </el-col>
           </el-form-item>
-          <el-form-item label="项目范围" size="mini" prop="ProjectScope">
+          <!-- <el-form-item label="项目范围" size="mini" prop="ProjectScope">
             <el-col :span="20">
               <el-button type="primary" @click="getProjectScope"
                 >获取范围</el-button
               >
             </el-col>
-          </el-form-item>
+          </el-form-item> -->
           <el-form-item label="简介" size="mini" prop="description">
             <el-col :span="20">
               <el-input
@@ -78,8 +80,6 @@ export default {
         description: "",
         ProjectScope: null,
       },
-      // zt_landusenature: window.dict.zt_landusenature,
-      // zt_fundingsource: window.dict.zt_fundingsource,
       rules: {
         projectname: [
           { required: true, message: "请输入项目名称", trigger: "blur" },
@@ -93,9 +93,9 @@ export default {
         checkDate: [
           { required: true, message: "请输入申报日期", trigger: "blur" },
         ],
-        ProjectScope: [
-          { required: true, message: "请获取项目范围", trigger: "blur" },
-        ],
+        // ProjectScope: [
+        //   { required: true, message: "请获取项目范围", trigger: "blur" },
+        // ],
       },
 
       //绘制事件
@@ -136,10 +136,8 @@ export default {
       this.$refs[formName].validate((valid) => {
         if (valid) {
           that.form.id = uuidv4();
-          that.form.meetingProgress = 0;
-          // window.projectinformation.push(that.form);
-          // debugger;
-          // that.lyoption.cancel();
+          window.billboardInfoList.push(that.form);
+          that.lyoption.cancel();
           that.$layer.close(that.layerid);
         } else {
           return false;
@@ -147,9 +145,11 @@ export default {
       });
     },
     resetForm(formName) {
+      this.clear();
       this.$refs[formName].resetFields();
     },
     getProjectScope() {
+      let that = this;
       this.clear();
       this.handlerPolygon = new Cesium.DrawHandler(
         viewer,
@@ -157,8 +157,7 @@ export default {
         Cesium.ClampMode.Ground
       );
       this.handlerPolygon.activate();
-      let handlerPolygon = this.handlerPolygon;
-      handlerPolygon.activeEvt.addEventListener(function (isActive) {
+      this.handlerPolygon.activeEvt.addEventListener(function (isActive) {
         if (isActive == true) {
           viewer.enableCursorStyle = false;
           viewer._element.style.cursor = "";
@@ -168,13 +167,13 @@ export default {
           document.body.classList.remove("drawCur");
         }
       });
-      handlerPolygon.movingEvt.addEventListener((windowPosition) => {
+      this.handlerPolygon.movingEvt.addEventListener((windowPosition) => {
         window.tooltip.showAt(
           windowPosition,
           "<p>点击鼠标左键开始绘制分析区域</p>"
         );
       });
-      handlerPolygon.drawEvt.addEventListener((result) => {
+      this.handlerPolygon.drawEvt.addEventListener((result) => {
         window.tooltip.setVisible(false);
         let positions = [];
         let points = [];
@@ -182,22 +181,32 @@ export default {
         if (!polygon) {
           return;
         }
-        debugger;
         positions = polygon.positions;
         //遍历多边形,取出所有点
         for (var i = 0, len = positions.length; i < len; i++) {
           let xyz = cartesian3ToWGS84(positions[i]);
-          points.push(xyz);
+          points.push({ x: xyz.lng, y: xyz.lat, z: xyz.alt });
+        }
+        if (points.length > 0) {
+          if (points[0] != points[points.length - 1]) {
+            points.push(points[0]);
+          }
         }
+        points.that.form.ProjectScope = points;
       });
     },
     clear() {
       if (this.handlerPolygon) {
+        this.handlerPolygon.clear();
         this.handlerPolygon.deactivate();
+        this.handlerPolygon = null;
       }
       window.tooltip.setVisible(false);
     },
   },
+  beforeDestroy() {
+    this.clear();
+  },
 };
 </script>
 <style lang="scss">

+ 180 - 130
src/views/ConstructionApplication3D/billboard/billboardCheckList.vue

@@ -1,140 +1,190 @@
 <template>
-    <div style=";width: 400px;padding:5px;font-size:10px">
-        <el-row>
-            <el-col :span="12">
-                <el-col :span="12">广告位:</el-col>
-                <el-col :span="12">{{ totalNo }}个</el-col>
-            </el-col>
-            <el-col :span="12"> <el-col :span="12">禁止建设区:</el-col>
-                <el-col :span="12">{{ notAllowedNo }}个</el-col></el-col>
-        </el-row>
-        <el-row>
-            <el-col :span="8">
-                <el-col :span="12">通过</el-col>
-                <el-col :span="12">{{ passNo }}个</el-col></el-col>
-            <el-col :span="8">
-                <el-col :span="12">未通过:</el-col>
-                <el-col :span="12">{{ noPassedNo }}个</el-col>
-            </el-col>
-            <el-col :span="8"><el-col :span="12">未审查:</el-col>
-                <el-col :span="12">{{ noCheckedNo }}个</el-col></el-col>
-        </el-row>
-        <el-table :data="tableData" border style="width: 100%;font-size: 10px;">
-            <el-table-column prop="name" label="标识">
-            </el-table-column>
-            <el-table-column prop="type" label="类型">
-            </el-table-column>
-            <el-table-column prop="notAllowed" label="禁止区">
-                <template slot-scope="scope">
-                    <span v-if="scope.row.notAllowed" style="color:white">否</span>
-                    <span v-else style="color:red">是</span>
-                </template>
-            </el-table-column>
-            <el-table-column fixed="right" label="操作" width="100">
-                <template slot-scope="scope">
-                    <el-button @click="locationClick(scope.row)" type="text" size="small"
-                        style="color: aqua;">定位</el-button>
-                    <el-button @click="check(scope.row)" type="text" size="small" style="color: aqua;">审查</el-button>
-                </template>
-            </el-table-column>
-        </el-table>
-    </div>
+  <div style="width: 400px; padding: 5px; font-size: 10px">
+    <el-row>
+      <el-col :span="12">
+        <el-col :span="12">广告位:</el-col>
+        <el-col :span="12">{{ totalNo }}个</el-col>
+      </el-col>
+      <el-col :span="12">
+        <el-col :span="12">禁止建设区:</el-col>
+        <el-col :span="12">{{ notAllowedNo }}个</el-col></el-col
+      >
+    </el-row>
+    <el-row>
+      <el-col :span="8">
+        <el-col :span="12">通过</el-col>
+        <el-col :span="12">{{ passNo }}个</el-col></el-col
+      >
+      <el-col :span="8">
+        <el-col :span="12">未通过:</el-col>
+        <el-col :span="12">{{ noPassedNo }}个</el-col>
+      </el-col>
+      <el-col :span="8"
+        ><el-col :span="12">未审查:</el-col>
+        <el-col :span="12">{{ noCheckedNo }}个</el-col></el-col
+      >
+    </el-row>
+    <el-table :data="tableData" border style="width: 100%; font-size: 12px">
+      <el-table-column prop="billboardName" label="标识"> </el-table-column>
+      <el-table-column prop="billboardType" label="类型"> </el-table-column>
+      <el-table-column prop="ReviewStatus" label="审查状态">
+        <template slot-scope="scope">
+          <el-tag
+            v-if="
+              scope.row.ReviewStatus == undefined ||
+              scope.row.ReviewStatus == '' ||
+              scope.row.ReviewStatus == null
+            "
+            effect="plain"
+            >未审查</el-tag
+          >
+          <el-tag
+            effect="plain"
+            v-if="scope.row.ReviewStatus == '已通过'"
+            type="success"
+            >已通过</el-tag
+          >
+          <el-tag
+            effect="plain"
+            v-if="scope.row.ReviewStatus == '未通过'"
+            type="warning"
+            >未通过</el-tag
+          >
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="100">
+        <template slot-scope="scope">
+          <el-button
+            @click="locationClick(scope.row)"
+            type="text"
+            size="small"
+            style="color: aqua"
+            >定位</el-button
+          >
+          <el-button
+            v-if="
+              scope.row.ReviewStatus == undefined ||
+              scope.row.ReviewStatus == '' ||
+              scope.row.ReviewStatus == null
+            "
+            @click="check(scope.row)"
+            type="text"
+            size="small"
+            style="color: aqua"
+            >审查</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
 </template>
 <script>
 import billboardChekInfo from "@/views/ConstructionApplication3D/billboard/billboardChekInfo.vue";
 export default {
-    data() {
-        return {
-            totalNo: 5,
-            noCheckedNo: 2,
-            passNo: 2,
-            noPassedNo: 2,
-            notAllowedNo: 1,
-            deltailLayerId: null,
-            tableData: [
-                {
-                    id: '1',
-                    name: '广告牌1',
-                    type: '平行建筑主体',
-                    notAllowed: false,
-                },
-                {
-                    id: '2',
-                    name: '广告牌2',
-                    type: '平行门楣',
-                    notAllowed: false,
-                },
-                {
-                    id: '3',
-                    name: '广告牌3',
-                    type: '大型LED',
-                    notAllowed: true,
-                },
-                {
-                    id: '4',
-                    name: '广告牌4',
-                    type: '小型LED',
-                    notAllowed: true,
-                },
-            ]
-        };
+  data() {
+    return {
+      totalNo: 0, //广告位:
+      noCheckedNo: 0, //未审查
+      passNo: 0, //通过
+      noPassedNo: 0, //未通过:
+      notAllowedNo: 0, //禁止建设区:
+      deltailLayerId: null,
+      tableData: [],
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
     },
-    methods: {
-        /**
-         * 广告牌定位
-         */
-        locationClick(row) {
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  mounted() {
+    debugger;
+    this.init();
+  },
+  methods: {
+    /**
+     * 计算个数
+     */
+    init() {
+      let that = this;
+      if (that.info) {
+        that.tableData = window.billboardModelList.filter(
+          (c) => c.billboardInfoId == that.info.id
+        );
 
+        that.totalNo = window.billboardModelList.filter(
+          (c) => c.billboardInfoId == that.info.id
+        ).length;
+        that.noCheckedNo = window.billboardModelList.filter(
+          (c) =>
+            c.billboardInfoId == that.info.id &&
+            (c.ReviewStatus == "" || c.ReviewStatus == "未审查")
+        ).length;
+        that.passNo = window.billboardModelList.filter(
+          (c) => c.billboardInfoId == that.info.id && c.ReviewStatus == "已通过"
+        ).length;
+        that.noPassedNo = window.billboardModelList.filter(
+          (c) => c.billboardInfoId == that.info.id && c.ReviewStatus == "未通过"
+        ).length;
+      }
+    },
+    /**
+     * 广告牌定位
+     */
+    locationClick(row) {
+      //用父级的方法
+      this.lyoption.content.parent.locationSingleModel(row);
+    },
+    /**
+     * 单条记录审查,弹窗审查
+     * @param {*} row
+     */
+    check(row) {
+      if (this.deltailLayerId != null) this.$layer.close(this.deltailLayerId);
+      var width = 400;
 
-            var entity = new Cesium.Entity({
-                position: Cesium.Cartesian3.fromDegrees(109.4867054656054,
-                    18.300664154688594, 200),
-                box: {
-                    dimensions: new Cesium.Cartesian3(100.0, 100.0, 100.0),
-                    material: Cesium.Color.fromCssColorString('rgb(246,100,94)'),
-                    fill: true,
-                    outline: false,
-                    outlineColor: Cesium.Color.BLACK,
-                    outlineWidth: 1
-                }
-            })
-            window.viewer.entities.add(entity)
-            window.viewer.flyTo(entity)
-            console.log(123)
-        },
-        /**
-         * 单条记录审查,弹窗审查
-         * @param {*} row 
-         */
-        check(row) {
-            if (this.deltailLayerId != null)
-                this.$layer.close(this.deltailLayerId)
-            var width = 400
-          
-            var top = 500
-            var left = Math.floor(document.body.clientWidth - width / 2);
-            var height = 350;
+      var top = 500;
+      var left = Math.floor(document.body.clientWidth - width / 2);
+      var height = 500;
 
-            console.log()
-            this.deltailLayerId = this.$layer.iframe({
-                content: {
-                    content: billboardChekInfo, //传递的组件对象
-                    parent: this, //当前的vue对象
-                    data: {}, //props
-                },
-                offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
-                area: [width.toString(), height.toString()],
-                title: "广告牌审查",
-                maxmin: false,
-                shade: false, //是否显示遮罩
-                shadeClose: false, //点击遮罩是否关闭
-                cancel: () => {
-                    //关闭事件
-                    // alert("关闭iframe");
-                },
-            });
-        }
-    }
-}
+      this.deltailLayerId = this.$layer.iframe({
+        content: {
+          content: billboardChekInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info: row }, //props
+        },
+        offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+        area: [width.toString() + "px", height.toString() + "px"],
+        title: "广告牌审查",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.init();
+        },
+      });
+    },
+  },
+};
 </script>
-<style scoped></style>
+<style scoped></style>

+ 353 - 105
src/views/ConstructionApplication3D/billboard/billboardChekInfo.vue

@@ -1,115 +1,363 @@
 <template>
-    <div style=";width: 400px;padding:5px;">
-        <el-row>
-            <span style="color: :white;">{{ billboardModel.type }}</span>
-        </el-row>
-        <el-row><span style="color: :aqua;">{{ billboardModel.name }}个</span></el-row>
-        <el-table :data="rules" border style="width: 100%;max-height: 30rem;">
-            <el-table-column prop="name" label="序号">
-            </el-table-column>
-            <el-table-column prop="type" label="审查项">
-            </el-table-column>
-            <el-table-column prop="type" label="审查方式">
-            </el-table-column>
-            <!-- <el-table-column prop="notAllowed" label="结果">
-                <template slot-scope="scope">
-                    <span v-if="scope.row.notAllowed" style="color:white">否</span>
-                    <span v-else style="color:red">是</span>
-                </template>
-            </el-table-column> -->
-            <el-table-column fixed="right" label="结果" width="100">
-                <template slot-scope="scope" >
-                    <el-radio v-model="scope.ruleResult" label="true">符合</el-radio>
-                    <el-radio v-model="scope.ruleResult" label="false">不符合</el-radio>
-                </template>
-            </el-table-column>
-        </el-table>
-        
-        <el-row>
-            <el-input type="textarea"  ></el-input>
-        </el-row>
-    </div>
+  <div style="width: 400px; padding: 5px; height: 100%">
+    <el-row>
+      <span style="color: white">{{ info.billboardType }}</span>
+    </el-row>
+    <el-row
+      ><span style="color: aqua">{{ info.billboardName }}</span></el-row
+    >
+    <el-table :data="tableData" border style="width: 100%">
+      <el-table-column type="index"> </el-table-column>
+      <el-table-column prop="ReviewContent" label="审查项"> </el-table-column>
+      <el-table-column prop="ReviewMethod" label="审查方式"> </el-table-column>
+
+      <el-table-column fixed="right" label="结果" width="100">
+        <template slot-scope="scope">
+          <el-radio
+            :disabled="shenchazhaugntai('符合', scope.row)"
+            v-model="scope.row.ruleResult"
+            label="true"
+            >符合</el-radio
+          >
+          <el-radio
+            :disabled="shenchazhaugntai('不符合', scope.row)"
+            v-model="scope.row.ruleResult"
+            label="false"
+            >不符合</el-radio
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <el-row>
+      <el-input
+        v-model="ReviewComments"
+        type="textarea"
+        placeholder="请输入审查意见"
+      ></el-input>
+    </el-row>
+    <el-row>
+      <el-button size="mini" type="primary" @click="setReview(true)"
+        >通过</el-button
+      >
+      <el-button size="mini" @click="setReview(false)">不通过</el-button>
+    </el-row>
+  </div>
 </template>
 <script>
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+import { pointToLineDistance, point, lineString } from "@turf/turf";
 export default {
+  data() {
+    return {
+      tableData: [],
+      ReviewComments: "",
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    async init() {
+      let that = this;
+      debugger;
 
-    data() {
-        return {
-            props: ["billboardId"],
-            radio: '1',
-            totalNo: 5,
-            billboardModel: {
-                id: '1',
-                name: '广告牌3',
-                type: '大型LED广告牌',
-                length: 2,
-                width: 1,
-                think: 0.5,
-                center: [109.4867054656054,
-                    18.300664154688594, 3
-                ]
+      let ltData = await this.getloutiData(that.info);
+      //过滤规则
+      let billboardReviewList = flatten(window.window.billboardReviewList);
+      //获取当前广告牌类型的规则
+      let billboardReviewTree = billboardReviewList.find(
+        (c) => c.billboardType == that.info.billboardType
+      );
 
-            },
-            tableData: [
-                {
-                    id: '1',
-                    name: '广告牌1',
-                    type: '平行建筑主体',
-                    notAllowed: false,
-                    
-                },
-                {
-                    id: '2',
-                    name: '广告牌2',
-                    type: '平行门楣',
-                    notAllowed: false,
-                },
-                {
-                    id: '3',
-                    name: '广告牌3',
-                    type: '大型LED',
-                    notAllowed: true,
-                },
-                {
-                    id: '4',
-                    name: '广告牌4',
-                    type: '小型LED',
-                    notAllowed: true,
-                },
-            ]
-            , rules: [
-                {
-                    id: "21",
-                    checkItem: '附属于建筑的电子显示屏面积比例不得高于项目沿街面裙房单侧的15%',
-                    checkType: '自动审查',
-                    catagory: '大型LED广告牌',
-                    catagoryCode: '',
-                    ruleResult:false,
-                },
-                {
-                    id: "22",
-                    checkItem: '所在建筑大型LED广告设施数量不超过1处',
-                    checkType: '自动审查',
-                    catagory: '大型LED广告牌',
-                    catagoryCode: '',
-                    ruleResult:false,
-                },
-                {
-                    id: "23",
-                    checkItem: '商业用地(B1)广告用途为商业用途或公益用途',
-                    checkType: '自动审查',
-                    catagory: '大型LED广告牌',
-                    catagoryCode: '',
-                    ruleResult:false,
-                },
-            ]
-        }
-    }
+      if (billboardReviewTree) {
+        let billboardReviews = flatten([billboardReviewTree]);
+        //临时加
+        //默认
+        let mr = billboardReviewList.find((c) => c.code == "001");
+        billboardReviews.splice(0, 0, mr);
+        billboardReviews.forEach((billboardReview) => {
+          if (billboardReview.ReviewItems) {
+            billboardReview.ReviewItems.forEach((ReviewItem) => {
+              //获取到的单个规则,并对规则判断是否合规
+              if (ReviewItem.ReviewMethod == "自动审查") {
+                let ruleResult = "true";
+                switch (ReviewItem.code) {
+                  case "001234": //筑高度不超过24米的多层建筑墙面和高层建筑裙楼的主体墙面
+                    if (ltData.length > 0) {
+                      //多层高
+                      let MHEIGHT = ltData[0].data.find(
+                        (c) => c.label == "MHEIGHT"
+                      );
+                      if (MHEIGHT && MHEIGHT.value) {
+                        if (Number(MHEIGHT.value) > 24) {
+                          ruleResult = "false";
+                        } else {
+                          ruleResult = "true";
+                        }
+                      }
+                    }
 
-}
+                    break;
+                  case "0010101": //户外广告上沿不得突出墙面(包括女儿墙)的外轮廓线
+                    //广告上沿高度
+                    let ggsygd = that.info.z + that.info.yL / 2;
+                    //楼高
+                    if (ltData.length > 0) {
+                      //多层高
+                      let MHEIGHT = ltData[0].data.find(
+                        (c) => c.label == "MHEIGHT"
+                      );
+                      if (MHEIGHT && MHEIGHT.value) {
+                        if (ggsygd > Number(MHEIGHT.value)) {
+                          ruleResult = "false";
+                        } else {
+                          ruleResult = "true";
+                        }
+                      }
+                    }
+                    break;
+                  case "0010104": //广告设施宽度应与墙面相协调,周围不应超出墙面外轮廓线,垂直方向突出墙面距离不宜大于0.5米
+                    debugger;
+                    let points = [];
+                    if (ltData.length > 0) {
+                      ltData[0].geometry.points.forEach((point) => {
+                        points.push([point.x, point.y]);
+                      });
+                      var pt = point([this.info.x, this.info.y]);
+                      var line = lineString(points);
+                      var distance = (
+                        pointToLineDistance(pt, line, {
+                          units: "kilometers",
+                        }) * 1000
+                      ).toFixed(4);
+                      let jl = Number(distance) + that.info.zL / 2;
+                      if (jl > 0.5) {
+                        ruleResult = "false";
+                      } else {
+                        ruleResult = "true";
+                      }
+                    }
+
+                    break;
+                  case "0010105": //户外广告下端距地面净高不得低于3米,且不得防碍行人安全;
+                    //广告下沿高度
+                    let ggxygd = that.info.z - that.info.yL / 2;
+                    if (ggxygd > 3) {
+                      ruleResult = "true";
+                    } else {
+                      ruleResult = "false";
+                    }
+                    break;
+                  case "001020102": //宽度应以建筑开间为单元,且广告高度不得大于3米
+                    let gggd = that.info.xL;
+                    if (gggd > 3) {
+                      ruleResult = "false";
+                    } else {
+                      ruleResult = "true";
+                    }
+                    break;
+                  case "00102020102": //一层建筑层高≤4.5m并且广告高度≤1.5m 或者一层建筑层高>4.5m并且广告高度小于等于2m
+                    if (ltData.length > 0) {
+                      //层高
+                      let FLOORH = ltData[0].data.find(
+                        (c) => c.label == "FLOORH"
+                      );
+                      //广告上沿高度
+                      let ggsygd = that.info.z + that.info.yL / 2;
+                      if (FLOORH && FLOORH.value) {
+                        if (Number(FLOORH.value) > ggsygd) {
+                          if (Number(FLOORH.value) <= 4.5) {
+                            if (that.info.yL <= 1.5) {
+                              ruleResult = "true";
+                            } else {
+                              ruleResult = "false";
+                            }
+                          } else if (Number(FLOORH.value) > 4.5) {
+                            if (that.info.yL <= 2) {
+                              ruleResult = "true";
+                            } else {
+                              ruleResult = "false";
+                            }
+                          }
+                        } else {
+                          ruleResult = "false";
+                        }
+                      }
+                    }
+
+                    break;
+                  case "00102020104": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)
+                    debugger;
+                    var points1 = [];
+                    if (ltData.length > 0) {
+                      ltData[0].geometry.points.forEach((point) => {
+                        points1.push([point.x, point.y]);
+                      });
+                      var pt1 = point([this.info.x, this.info.y]);
+                      var line1 = lineString(points1);
+                      var distance1 = (
+                        pointToLineDistance(pt1, line1, {
+                          units: "kilometers",
+                        }) * 1000
+                      ).toFixed(4);
+
+                      var jl1 = Number(distance1) + that.info.zL / 2;
+                      if (jl1 > 0.3) {
+                        ruleResult = "false";
+                      } else {
+                        ruleResult = "true";
+                      }
+                    }
+
+                    break;
+                  default:
+                    break;
+                }
+                ReviewItem.ruleResult = ruleResult;
+              } else {
+                ReviewItem.ruleResult = "";
+              }
+
+              that.tableData.push(ReviewItem);
+            });
+          }
+        });
+      }
+    },
+    /**
+     * 审核状态提交
+     */
+    setReview(isPass) {
+      let item = window.billboardModelList.find((c) => c.id == this.info.id);
+      item.ReviewComments = this.ReviewComments;
+      if (isPass) {
+        item.ReviewStatus = "已通过";
+      } else {
+        item.ReviewStatus = "未通过";
+      }
+      this.lyoption.cancel();
+      this.$layer.close(this.layerid);
+    },
+    /**
+     * 获取楼体数据
+     */
+    async getloutiData(info) {
+      let layerDataList = [];
+      //获取模型信息
+      let queryBySQLParameters = {
+        getFeatureMode: "BUFFER",
+        datasetNames: [
+          window.billboardModelLT.dataSourceName +
+            ":" +
+            window.billboardModelLT.datasetName,
+        ],
+        geometry: {
+          parts: [1],
+          points: [{ y: info.y, x: info.x }],
+          type: "POINT",
+        },
+        bufferDistance: 0.00005,
+        hasGeometry: true,
+      };
+      let e = await mapQuery(
+        window.billboardModelLT.dataurl +
+          "/featureResults.json?returnContent=true",
+        queryBySQLParameters
+      );
+      if (e && e.totalCount > 0) {
+        e.features.forEach((feature) => {
+          let layerData = { data: [], geometry: feature.geometry };
+          feature.fieldNames.forEach((fieldName, i) => {
+            let Field = e.datasetInfos
+              ? e.datasetInfos[0].fieldInfos.find(
+                  (c) =>
+                    c.name && c.name.toUpperCase() == fieldName.toUpperCase()
+                )
+              : null;
+            if (Field) {
+              layerData.data.push({
+                label: fieldName,
+                labelCN: Field ? Field.caption : fieldName,
+                value: feature.fieldValues[i],
+              });
+            }
+          });
+          layerDataList.push(layerData);
+        });
+      }
+
+      return layerDataList;
+    },
+    /**
+     * 审查状态禁止选中
+     */
+    shenchazhaugntai(zt, row) {
+      if (zt == "符合") {
+        if (row.ReviewMethod != "自动审查") {
+          return false;
+        } else if (row.ReviewMethod == "自动审查" && row.ruleResult == "true") {
+          return false;
+        } else if (
+          row.ReviewMethod == "自动审查" &&
+          row.ruleResult == "false"
+        ) {
+          return true;
+        }
+      } else {
+        if (row.ReviewMethod != "自动审查") {
+          return false;
+        } else if (
+          row.ReviewMethod == "自动审查" &&
+          row.ruleResult == "false"
+        ) {
+          return false;
+        } else if (row.ReviewMethod == "自动审查" && row.ruleResult == "true") {
+          return true;
+        }
+      }
+    },
+  },
+};
 </script>
 <style scoped>
-div .el-row .el-table .el-row .el-table-column .el-radio__label .el-table-column{
-    font-size:10px;
+div
+  .el-row
+  .el-table
+  .el-row
+  .el-table-column
+  .el-radio__label
+  .el-table-column {
+  font-size: 10px;
 }
-</style>
+</style>

+ 209 - 51
src/views/ConstructionApplication3D/billboard/billboardDesign.vue

@@ -13,9 +13,8 @@
       </el-col>
       <el-col :span="6">
         <el-button size="mini" type="primary" plain @click="addProjectInfo"
-          >新建模型</el-button
+          >新建项目</el-button
         >
-        <!-- <el-button size="mini" type="primary" plain>模型对比</el-button> -->
       </el-col>
     </el-row>
     <el-row>
@@ -23,51 +22,51 @@
         <el-row v-for="item in projects" :key="item.id">
           <el-card class="box-card">
             <el-row>
-              <span>{{ item.name }}</span></el-row
+              <span>{{ item.projectname }}</span></el-row
             >
             <el-row>
-              <span>{{ item.time }}</span></el-row
+              <span>{{ item.checkDate }}</span></el-row
             >
             <el-row style="display: flex">
               <el-col class="container hover_style" style="cursor: pointer">
                 <i
                   style="font-size: 2rem"
                   class="el-icon-s-operation"
-                  @click="billboarddetial(itemModel)"
+                  @click="billboarddetial(item)"
                 ></i>
-                <a @click="billboarddetial(itemModel)">详情</a>
+                <a @click="billboarddetial(item)">详情</a>
               </el-col>
               <el-col class="container hover_style" style="cursor: pointer">
                 <i
                   style="font-size: 2rem"
                   class="el-icon-location-outline"
-                  @click="importModel()"
+                  @click="importModel(item)"
                 ></i>
-                <a @click="importModel(itemModel.id)">导入模型</a>
+                <a @click="importModel(item)">导入模型</a>
               </el-col>
               <el-col class="container hover_style" style="cursor: pointer">
                 <i
                   style="font-size: 2rem"
                   class="el-icon-location-outline"
-                  @click="locationModel()"
+                  @click="locationModel(item)"
                 ></i>
-                <a @click="locationModel()">定位</a>
+                <a @click="locationModel(item)">定位</a>
               </el-col>
               <el-col class="container hover_style" style="cursor: pointer">
                 <i
                   style="font-size: 2rem"
                   class="el-icon-location-outline"
-                  @click="checkModel()"
+                  @click="checkModel(item)"
                 ></i>
-                <a @click="checkModel()">审查</a>
+                <a @click="checkModel(item)">审查</a>
               </el-col>
               <el-col class="container hover_style" style="cursor: pointer">
                 <i
                   style="font-size: 2rem"
                   class="el-icon-share"
-                  @click="deleteBillard(itemModel)"
+                  @click="deleteBillard(item)"
                 ></i>
-                <a @click="deleteBillard(itemModel)">删除</a>
+                <a @click="deleteBillard(item)">删除</a>
               </el-col>
             </el-row>
           </el-card>
@@ -95,23 +94,25 @@ import addbillboardProject from "@/views/ConstructionApplication3D/billboard/add
 import billboarddetail from "@/views/ConstructionApplication3D/billboard/billboarddetail.vue";
 import billboardCheck from "@/views/ConstructionApplication3D/billboard/billboardCheckList.vue";
 import addBiillboardModel from "@/views/ConstructionApplication3D/billboard/addBiillboardModel.vue";
-
+import lodash from "lodash-es";
 export default {
   data() {
     return {
       projects: window.billboardInfoList,
-      layerList: [],
-      handler: null,
       currentPage4: 1,
       total: 20,
       deltailLayerId: null,
       checklLayerId: null,
       addlLayerId: null,
+      entityList: [],
     };
   },
   computed: {},
   mounted() {
     // this.init();
+    debugger;
+    let that = this;
+    var promisse11w = scene.open(window.billboardModelLT.url);
   },
   methods: {
     handleCurrentChange() {},
@@ -126,7 +127,7 @@ export default {
           data: {}, //props
         },
         offset: ["650", "300"], //left top  左上角(left=430px/2;top=(800px+header高)/2)
-        area: ["300", "300"], //宽 高
+        area: ["300px", "300px"], //宽 高
         title: "新增项目",
         maxmin: false,
         shade: false, //是否显示遮罩
@@ -134,47 +135,61 @@ export default {
         cancel: () => {
           //关闭事件
           // alert("关闭iframe");
-          // this.wsh = this.getshProjectinformations(0);
+          this.projects = window.billboardInfoList;
         },
       });
     },
     /*
      *定位
      */
-    locationModel() {
-      var position = [109.4864054656054, 18.300464154688594, 200];
-      var entity = new Cesium.Entity({
-        position: Cesium.Cartesian3.fromDegrees(
-          109.4864054656054,
-          18.300464154688594,
-          200
-        ),
-        box: {
-          dimensions: new Cesium.Cartesian3(100.0, 100.0, 100.0),
-          material: Cesium.Color.fromCssColorString("rgb(246,232,94)"),
-          fill: true,
-          outline: false,
-          outlineColor: Cesium.Color.BLACK,
-          outlineWidth: 1,
-        },
+    locationModel(item) {
+      this.removeAllentities();
+      //渲染范围
+      // this.DrawProjectScope(item);
+      //渲染单个广告牌
+      window.billboardModelList.forEach((billboardModel) => {
+        if (billboardModel.billboardInfoId == item.id) {
+          this.DrawBillboard(billboardModel);
+        }
       });
-      window.viewer.entities.add(entity);
-      window.viewer.flyTo(entity);
+
+      window.viewer.flyTo(this.entityList);
+    },
+
+    /**
+     * 定位到某个模型
+     * @param Mitem 模型实体
+     */
+    locationSingleModel(Mitem) {
+      let entitie = viewer.entities.getById("billboard_" + Mitem.id);
+      if (entitie) {
+        viewer.flyTo(entitie);
+      } else {
+        //渲染单个广告牌
+        window.billboardModelList.forEach((billboardModel) => {
+          if (billboardModel.id == Mitem.id) {
+            this.DrawBillboard(billboardModel);
+            let entitie = viewer.entities.getById("billboard_" + Mitem.id);
+            viewer.flyTo(entitie);
+          }
+        });
+      }
     },
     /**
      *查看详情
      */
 
-    billboarddetial() {
+    billboarddetial(item) {
+      this.locationModel(item);
       if (this.deltailLayerId != null) this.$layer.close(this.deltailLayerId);
       this.deltailLayerId = this.$layer.iframe({
         content: {
           content: billboarddetail, //传递的组件对象
           parent: this, //当前的vue对象
-          data: {}, //props
+          data: { info: { projectInfo: item } }, //props
         },
-        offset: [680, 400], //left top  左上角(left=430px/2;top=(800px+header高)/2)
-        area: ["200px", "350px"],
+        offset: [720, 400], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+        area: ["300px", "400px"],
         title: "广告详情",
         maxmin: false,
         shade: false, //是否显示遮罩
@@ -190,22 +205,22 @@ export default {
      *
      */
 
-    checkModel() {
+    checkModel(item) {
+      this.locationModel(item);
       if (this.checklLayerId != null) this.$layer.close(this.checklLayerId);
       var width = 400;
       var top = 250;
       var left = Math.floor(document.body.clientWidth - width / 2);
-      var height = 350;
+      var height = 400;
 
-      console.log();
       this.checklLayerId = this.$layer.iframe({
         content: {
           content: billboardCheck, //传递的组件对象
           parent: this, //当前的vue对象
-          data: {}, //props
+          data: { info: item }, //props
         },
         offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
-        area: [width.toString(), height.toString()],
+        area: [width.toString() + "px", height.toString() + "px"],
         title: "广告牌列表",
         maxmin: true,
         shade: false, //是否显示遮罩
@@ -255,19 +270,18 @@ export default {
     /**
      * 导入模型(添加广告牌模型)
      */
-    importModel(projectId) {
+    importModel(project) {
+      // this.locationModel(project);
       if (this.addlLayerId != null) this.$layer.close(this.addlLayerId);
       var width = 600;
       var top = 420;
       var left = Math.floor(document.body.clientWidth - width / 2 + 130);
       var height = 350;
-
-      console.log();
       this.addlLayerId = this.$layer.iframe({
         content: {
           content: addBiillboardModel, //传递的组件对象
           parent: this, //当前的vue对象
-          data: { layerId: this.addlLayerId, projectId: projectId }, //props
+          data: { layerId: this.addlLayerId, projectId: project.id }, //props
         },
         offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
         area: ["350px", "720px"],
@@ -277,10 +291,154 @@ export default {
         shadeClose: false, //点击遮罩是否关闭
         cancel: () => {
           //关闭事件
-          // alert("关闭iframe");
+          this.locationModel(project);
         },
       });
     },
+
+    /**
+     * 绘制广告位项目范围
+     */
+    DrawProjectScope(item) {
+      this.removeProjectScope(item);
+      let ps = [];
+      for (let index = 0; index < item.ProjectScope.length; index++) {
+        const element = item.ProjectScope[index];
+        ps.push(element.x);
+        ps.push(element.y);
+      }
+      const line = viewer.entities.add({
+        id: "ggwxmfw-" + item.id,
+        polyline: {
+          positions: Cesium.Cartesian3.fromDegreesArray(ps),
+          width: 5,
+          material: Cesium.Color.RED,
+          clampToGround: true,
+        },
+      });
+      this.entityList.push(line);
+    },
+    /**
+     * 绘制广告牌
+     */
+    DrawBillboard(billboardModel) {
+      this.removeBillboard(billboardModel);
+      var modelurl = "../../../../static/ModelData/billboard/box.gltf";
+      let newposition = Cesium.Cartesian3.fromDegrees(
+        billboardModel.x,
+        billboardModel.y,
+        billboardModel.z
+      );
+      var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+        newposition,
+        new Cesium.HeadingPitchRoll(
+          Cesium.Math.toRadians(billboardModel.rotateX),
+          Cesium.Math.toRadians(billboardModel.rotateY),
+          Cesium.Math.toRadians(billboardModel.rotateZ)
+        )
+      );
+      var entity = viewer.entities.add({
+        id: "billboard_" + billboardModel.id,
+        name: "gltf",
+        show: true,
+        position: newposition,
+
+        /**
+         * 长方体
+         */
+        box: {
+          dimensions: new Cesium.Cartesian3(
+            billboardModel.xL,
+            billboardModel.zL,
+            billboardModel.yL
+          ),
+          show: true,
+          material: Cesium.Color.LIGHTGREEN,
+          // outline: true,
+          // outlineColor: Cesium.Color.SPRINGGREEN,
+          // outlineWidth: 1,
+        },
+        /**
+         * 模型
+         */
+        // model: {
+        //   uri: modelurl,
+        //   scale: billboardModel.xL,
+        // },
+        /**
+         * 广告牌
+         */
+        // billboard: {
+        //     image: imageurl,
+        //     width: billboardModel.xL,
+        //     height: billboardModel.zL,
+        //     rotation: 0,
+        // },
+        orientation: orientation,
+      });
+      this.entityList.push(entity);
+      const point = viewer.entities.add({
+        id: "pointBillboard_" + billboardModel.id,
+        //点
+        position: Cesium.Cartesian3.fromDegrees(
+          billboardModel.x,
+          billboardModel.y,
+          billboardModel.z + billboardModel.yL / 2
+        ),
+        label: {
+          text: billboardModel.billboardName, //描述内容
+          font: "20px Sans-Serif", //字体大小 类型
+          fillColor: Cesium.Color.RED, //颜色
+          outlineColor: Cesium.Color.GOLD,
+          style: Cesium.LabelStyle.CENTER_LABEL,
+          // 垂直位置
+          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+          // 中心位置
+          pixelOffset: new Cesium.Cartesian2(0, -10),
+          //设置背景颜色透明
+          backgroundColor: new Cesium.Color(0.0, 0.0, 0.0, 0.0),
+          //打开背景  打开背景 (不会被线段覆盖)
+          showBackground: true,
+          heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
+          distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
+            0.0,
+            300.0
+          ),
+        },
+      });
+    },
+    //删除一个广告范围
+    removeProjectScope(item) {
+      if (item) {
+        viewer.entities.removeById("ggwxmfw-" + item.id);
+        lodash.remove(
+          this.entityList,
+          (entity) => entity.id === "ggwxmfw-" + item.id
+        );
+      }
+    },
+    //删除一个广告牌
+    removeBillboard(item) {
+      if (item) {
+        viewer.entities.removeById("billboard_" + item.id);
+        lodash.remove(
+          this.entityList,
+          (entity) => entity.id === "billboard_" + item.id
+        );
+        viewer.entities.removeById("pointBillboard_" + item.id);
+        lodash.remove(
+          this.entityList,
+          (entity) => entity.id === "pointBillboard_" + item.id
+        );
+      }
+    },
+    removeAllentities() {
+      viewer.entities.removeAll();
+      this.entityList = [];
+    },
+  },
+  beforeDestroy() {
+    this.removeAllentities();
   },
 };
 </script>

+ 75 - 58
src/views/ConstructionApplication3D/billboard/billboarddetail.vue

@@ -1,63 +1,80 @@
 <template>
-    <div style="height: 100%;width: 100%;padding: 5px;">
-        <el-row>
-            <el-col span="8"> <span>设计单位:</span></el-col>
-            <el-col span="16"> <span>{{ form.designName }}</span></el-col>
-
-        </el-row>
-        <el-row>
-            <el-col span="8"> <span>规格尺寸:</span></el-col>
-            <el-col span="16"> <span>{{ form.designSize }}</span></el-col>
-        </el-row>
-        <el-row>
-            <el-col span="8"> <span>材质:</span></el-col>
-            <el-col span="16"> <span>{{ form.material }}</span></el-col>
-        </el-row>
-        <el-row>
-
-            <el-col span="8"> <span>安装位置:</span></el-col>
-            <el-col span="16"> <span>{{ form.address }}</span></el-col>
-        </el-row>
-        <el-row>
-            <el-col span="8"> <span>描述</span></el-col>
-            <el-col span="16"> <span>{{ form.desc }}</span></el-col>
-
-        </el-row>
-
-        <!-- <el-form ref="form" :model="form" label-width="80px">
-            <el-form-item label="设计单位">
-                <el-input v-model="form.designName"></el-input>
-            </el-form-item>
-            <el-form-item label="规格尺寸:">
-                <el-input v-model="form.designSize"></el-input>
-            </el-form-item>
-            <el-form-item label="材质:">
-                <el-input v-model="form.material"></el-input>
-            </el-form-item>
-            <el-form-item label="安装位置">
-                <el-input v-model="form.address"></el-input>
-            </el-form-item>
-            <el-form-item label="描述">
-                <el-input type="textarea" v-model="form.desc"></el-input>
-            </el-form-item>
-
-        </el-form> -->
-    </div>
+  <div style="height: 100%; width: 100%; padding: 5px">
+    <el-row>
+      <el-col span="24">
+        <el-descriptions
+          :title="'项目名称:' + info.projectInfo.projectname"
+          :column="1"
+        >
+          <el-descriptions-item label="项目地址">{{
+            info.projectInfo.address
+          }}</el-descriptions-item>
+          <el-descriptions-item label="设计单位">{{
+            info.projectInfo.design
+          }}</el-descriptions-item>
+          <el-descriptions-item label="申报日期">{{
+            info.projectInfo.checkDate
+          }}</el-descriptions-item>
+          <el-descriptions-item label="简介">
+            {{ info.projectInfo.description }}
+          </el-descriptions-item>
+        </el-descriptions>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col span="24">
+        <el-table :data="billboardModelList" style="width: 100%">
+          <el-table-column prop="billboardName" label="模型名称">
+          </el-table-column>
+          <el-table-column prop="billboardType" label="模型类型">
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
 </template>
 <script>
 export default {
-    data() {
-        return {
-            props: ['modelid'],
-            form: {
-                designName: '筑博设计股份有限公司',
-                designSize: ' 长:3米高:2米,厚度:0.5米',
-                address: '筑博设计股份有限公司',
-                material: '筑博设计股份有限公司',
-                desc: '申请日期201212'
-            }
-        }
-    }
-}
+  data() {
+    return {
+      billboardModelList: [],
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      let that = this;
+      this.billboardModelList = window.billboardModelList.filter(
+        (c) => c.billboardInfoId == that.info.projectInfo.id
+      );
+    },
+  },
+};
 </script>
-<style scoped></style>
+<style scoped></style>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 456 - 368
src/views/ConstructionApplication3D/projectManagement/projectManagement.vue


+ 73 - 0
src/views/billboardplan.vue

@@ -0,0 +1,73 @@
+<template>
+  <div class="billboardplan"></div>
+</template>
+
+<script>
+import BillboardDesign from "@/views/ConstructionApplication3D/billboard/billboardDesign.vue";
+export default {
+  name: "billboardplan",
+  data() {
+    return {};
+  },
+  created() {},
+  methods: {
+    openDialog(componentName) {
+      // if (this.layerid) this.$layer.close(this.layerid);
+      switch (componentName) {
+        case "BillboardDesign":
+          this.layerid = this.$layer.iframe({
+            content: {
+              content: BillboardDesign, //传递的组件对象
+              parent: this, //当前的vue对象
+              data: {}, //props
+            },
+            offset: [236, 488], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+            area: ["430px", "800px"],
+            title: "广告牌审查",
+            maxmin: false,
+            shade: false, //是否显示遮罩
+            shadeClose: false, //点击遮罩是否关闭
+            cancel: () => {
+              //关闭事件
+              // alert("关闭iframe");
+            },
+          });
+          break;
+
+        default:
+          break;
+      }
+    },
+  },
+  mounted() {
+    this.openDialog("BillboardDesign");
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.billboardplan {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+}
+
+.innerContainer {
+  width: 350px;
+  height: calc(100% - 20px);
+  position: absolute;
+  background: #041024;
+  z-index: 99;
+  top: 10px;
+  background-image: url("/static/images/homepage/00-底框.png");
+  background-size: 100% 100%;
+}
+
+.leftPane {
+  left: 10px;
+}
+
+.rightPane {
+  right: 10px;
+}
+</style>

+ 0 - 1
src/views/map3d.vue

@@ -103,7 +103,6 @@ import { getRouters } from "@/api/menu";
 import GKZB from './cockpitNew1/gkzb';
 import TDSC from './cockpitNew1/tdsc';
 import HYSY from './cockpitNew1/hysy';
-
 export default {
   name: "app",
   components: { GKZB, TDSC, HYSY },

+ 465 - 30
static/Config/config.js

@@ -118,14 +118,11 @@ window.constructionmodel = [
     id: "hfgdg",
     projectinformationid: "ertyuiop",
     modelname: "报建模型1",
-    creationtime: "2024:-04-24 17:22:13",
-    x: "109.55145569681383",
-    y: "18.28012526287734",
-    z: "2000.0",
-    url: "http://192.168.60.3:8099/iserver/services/3D-fangan/rest/realspace",
-    dataurl: "http://192.168.60.3:8099/iserver/services/data-fangan/rest/data",
-    dataSourceName: "sanyatieluxiaoqu",
-    datasetName: "Model",
+    creationtime: "2024-04-24 17:22:13",
+    url: "http://192.168.60.2:8090/iserver/services/3D-fangan/rest/realspace",
+    dataurl: "http://192.168.60.2:8090/iserver/services/data-fangan/rest/data",
+    dataSourceName: "DongAnZhuoYueCheng",
+    datasetName: "建筑轮廓",
     selectionStatus: false,
     designunit: "筑博设计股份有限公司",
     totalarea: "",
@@ -139,14 +136,11 @@ window.constructionmodel = [
     id: "2hfgddfzg",
     projectinformationid: "ertyuiop",
     modelname: "报建模型2",
-    creationtime: "2024:-04-24 17:22:13",
-    x: "109.55145569681383",
-    y: "18.28012526287734",
-    z: "2000.0",
-    url: "http://192.168.60.3:8099/iserver/services/3D-fangan2/rest/realspace",
-    dataurl: "http://192.168.60.3:8099/iserver/services/data-fangan2/rest/data",
-    dataSourceName: "sanyatieluxiaoqu2",
-    datasetName: "Model",
+    creationtime: "2024-04-24 17:22:13",
+    url: "http://192.168.60.2:8090/iserver/services/3D-fangan2/rest/realspace",
+    dataurl: "http://192.168.60.2:8090/iserver/services/data-fangan2/rest/data",
+    dataSourceName: "DongAnZhuoYueCheng2",
+    datasetName: "建筑轮廓",
     selectionStatus: false,
     designunit: "2筑博设计股份有限公司",
     totalarea: "",
@@ -160,14 +154,12 @@ window.constructionmodel = [
     id: "222hfgdg",
     projectinformationid: "222ertyuiop",
     modelname: "222报建模型1",
-    creationtime: "2024:-04-24 17:22:13",
-    x: "109.55145569681383",
-    y: "18.28012526287734",
-    z: "2000.0",
-    url: "http://192.168.60.3:8099/iserver/services/3D-fangan2/rest/realspace",
-    dataurl: "http://192.168.60.3:8099/iserver/services/data-fangan2/rest/data",
+    creationtime: "2024-04-24 17:22:13",
+
+    url: "http://192.168.60.2:8090/iserver/services/3D-fangan2/rest/realspace",
+    dataurl: "http://192.168.60.2:8090/iserver/services/data-fangan2/rest/data",
     dataSourceName: "sanyatieluxiaoqu2",
-    datasetName: "Model",
+    datasetName: "建筑轮廓",
     selectionStatus: true,
     designunit: "筑博设计股份有限公司",
     totalarea: "",
@@ -378,7 +370,7 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "地类图斑",
-          url: "http://192.168.60.3:8099/iserver/services/data-sanyamap1/rest/data",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
           dataSourceName: "sanya",
           datasetName: "地类图斑",
         },
@@ -520,7 +512,7 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "规划地块",
-          url: "http://192.168.60.3:8099/iserver/services/data-sanyamap1/rest/data",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
           dataSourceName: "sanya",
           datasetName: "规划地块",
         },
@@ -622,7 +614,7 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "建筑退线",
-          url: "http://192.168.60.3:8099/iserver/services/data-sanyamap1/rest/data",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
           dataSourceName: "sanya",
           datasetName: "建筑退线",
         },
@@ -724,7 +716,7 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "道路中线",
-          url: "http://192.168.60.3:8099/iserver/services/data-sanyamap1/rest/data",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
           dataSourceName: "sanya",
           datasetName: "道路中线",
         },
@@ -744,7 +736,7 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "禁止开口线",
-          url: "http://192.168.60.3:8099/iserver/services/data-sanyamap1/rest/data",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
           dataSourceName: "sanya",
           datasetName: "禁止开口线",
         },
@@ -764,7 +756,7 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "道路红线",
-          url: "http://192.168.60.3:8099/iserver/services/data-sanyamap1/rest/data",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
           dataSourceName: "sanya",
           datasetName: "道路红线",
         },
@@ -949,13 +941,438 @@ window.dict = {
     { label: "社会投资", value: "社会投资" },
     { label: "其他", value: "其他" },
   ],
+  //广告牌审查状态
+  zt_billboardReviewStatus: [
+    { label: "未审查", value: "未审查" },
+    { label: "已通过", value: "已通过" },
+    { label: "未通过", value: "未通过" },
+  ],
 };
-
 //白膜可通过这里添加自发光纹理
 window.NightViewLayerName = [
   // "抱坡规划区域建筑基底@building",
   // "规划区基底高度@sanyaLAT",
 ];
+//广告项目信息
+window.billboardInfoList = [
+  {
+    id: "1",
+    projectname: "广告项目1",
+    address: "项目地址",
+    checkDate: "2024-01-02 12:00:00",
+    design: "设计单位",
+    description: "简介",
+    ProjectScope: [
+      {
+        y: 18.310536251265084,
+        x: 109.51608731794252,
+        z: 0,
+      },
+      {
+        y: 18.310514067217994,
+        x: 109.51645265807166,
+        z: 0,
+      },
+      {
+        y: 18.3100083435041,
+        x: 109.51627043657908,
+        z: 0,
+      },
+      {
+        y: 18.310088390434938,
+        x: 109.51599128427965,
+        z: 0,
+      },
+      {
+        y: 18.310536251265084,
+        x: 109.51608731794252,
+        z: 0,
+      },
+    ],
+  },
+  {
+    id: "2",
+    projectname: "广告项目2",
+    address: "项目地址",
+    checkDate: "2024-01-02 12:00:00",
+    design: "设计单位",
+    description: "简介",
+    ProjectScope: [
+      {
+        y: 18.302796723071562,
+        x: 109.51481646486832,
+        z: 0,
+      },
+      {
+        y: 18.30298326641422,
+        x: 109.51473593501409,
+        z: 0,
+      },
+      {
+        y: 18.303127770256676,
+        x: 109.51533133860829,
+        z: 0,
+      },
+      {
+        y: 18.302989860934847,
+        x: 109.51534315841657,
+        z: 0,
+      },
+      {
+        y: 18.302796723071562,
+        x: 109.51481646486832,
+        z: 0,
+      },
+    ],
+  },
+];
+//广告模型信息
+window.billboardModelList = [
+  {
+    id: "1",
+    billboardInfoId: "1",
+    billboardName: "GUCCI",
+    billboardType: "附设于建筑一层门楣的广告",
+    x: 109.511396,
+    y: 18.316283,
+    z: 5.78,
+    xL: 40,
+    yL: 1.16,
+    zL: 0.1,
+    rotateX: 102.1,
+    rotateY: 0,
+    rotateZ: 0,
+    ReviewStatus: "",
+    ReviewComments: "",
+  },
+  {
+    id: "3",
+    billboardInfoId: "1",
+    billboardName: "广告模型2",
+    billboardType: "平行建筑主体户外广告",
+    x: 109.511509,
+    y: 18.315612,
+    z: 9.29,
+    xL: 10,
+    yL: 5,
+    zL: 0.1,
+    rotateX: 0,
+    rotateY: 0,
+    rotateZ: 0,
+    ReviewStatus: "",
+    ReviewComments: "",
+  },
+];
+//广告模型审查规则
+window.billboardReviewList = [
+  {
+    id: "wew2",
+    code: "001",
+    billboardType: "设置在建(构)筑物上的户外广告",
+    ReviewItems: [
+      {
+        id: "4553",
+        code: "001234",
+        ReviewMethod: "自动审查",
+        ReviewContent: "筑高度不超过24米的多层建筑墙面和高层建筑裙楼的主体墙面",
+      },
+    ],
+    children: [
+      {
+        id: "wew232",
+        code: "00101",
+        billboardType: "平行建筑主体户外广告",
+        ReviewItems: [
+          {
+            id: "4534553",
+            code: "0010101",
+            ReviewMethod: "自动审查",
+            ReviewContent: "户外广告上沿不得突出墙面(包括女儿墙)的外轮廓线",
+          },
+          {
+            id: "453sd4553",
+            code: "0010102",
+            ReviewMethod: "手动审查",
+            ReviewContent: "不得遮挡建筑窗户",
+          },
+          {
+            id: "453sd45xcv53",
+            code: "0010103",
+            ReviewMethod: "手动审查",
+            ReviewContent:
+              "一层与二层之间,二层与三层之间可设广告,其他楼层不得设广告, 不得在门的两侧和立柱上设置户外广告",
+          },
+          {
+            id: "453sd4we553",
+            code: "0010104",
+            ReviewMethod: "自动审查",
+            ReviewContent:
+              "广告设施宽度应与墙面相协调,周围不应超出墙面外轮廓线,垂直方向突出墙面距离不宜大于0.5米",
+          },
+          {
+            id: "4d4we553",
+            code: "0010105",
+            ReviewMethod: "自动审查",
+            ReviewContent:
+              "户外广告下端距地面净高不得低于3米,且不得防碍行人安全;",
+          },
+          {
+            id: "4d4wesd553",
+            code: "0010106",
+            ReviewMethod: "手动审查",
+            ReviewContent:
+              "依附于多层建筑、裙房或附楼主体墙面的广告建筑同一立面成组广告设置须规格、形式一致,集中布置",
+          },
+        ],
+      },
+      {
+        id: "we443w232",
+        code: "00102",
+        billboardType: "平行于门楣的户外广告",
+        children: [
+          {
+            id: "we44fsxcvd3w232",
+            code: "0010201",
+            billboardType: "底层以上没有出挑结构的建筑",
+            ReviewItems: [
+              {
+                id: "4534553",
+                code: "001020101",
+                ReviewMethod: "手动审查",
+                ReviewContent:
+                  "附设于建筑一层门楣的广告,下沿不得低于门楣上沿,上沿不得高于二层窗户下沿",
+              },
+              {
+                id: "453sd4553",
+                code: "001020102",
+                ReviewMethod: "自动审查",
+                ReviewContent: "宽度应以建筑开间为单元,且广告高度不得大于3米",
+              },
+              {
+                id: "453sd45xcv53",
+                code: "001020103",
+                ReviewMethod: "自动审查",
+                ReviewContent:
+                  "户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)",
+              },
+            ],
+          },
+          {
+            id: "dfdg",
+            code: "0010202",
+            billboardType: "底层以上有出挑结构的建筑",
+            children: [
+              {
+                id: "we44fsxcxd3w232",
+                code: "001020201",
+                billboardType: "附设于建筑一层门楣的广告",
+                ReviewItems: [
+                  {
+                    id: "4534553",
+                    code: "00102020101",
+                    ReviewMethod: "手动审查",
+                    ReviewContent:
+                      "下沿不得低于门楣上沿,宽度应以建筑开间为单元",
+                  },
+                  {
+                    id: "453bmbnsd4553",
+                    code: "00102020102",
+                    ReviewMethod: "自动审查",
+                    ReviewContent: "一层建筑层高≤4.5m并且广告高度≤1.5m",
+                  },
+                  {
+                    id: "453sd45xcv53",
+                    code: "00102020103",
+                    ReviewMethod: "自动审查",
+                    ReviewContent: "一层建筑层高>4.5m并且广告高度小于等于2m",
+                  },
+                  {
+                    id: "453sd45xcv53",
+                    code: "00102020104",
+                    ReviewMethod: "自动审查",
+                    ReviewContent:
+                      "户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)",
+                  },
+                ],
+              },
+              {
+                id: "wed3w232",
+                code: "001020202",
+                billboardType: "设于建筑出挑部分的墙面上",
+                ReviewItems: [
+                  {
+                    id: "4534553",
+                    code: "00102020201",
+                    ReviewMethod: "自动审查",
+                    ReviewContent: "出挑部分的底部距离地面小于3米",
+                  },
+                  {
+                    id: "453bmbnsd4553",
+                    code: "00102020202",
+                    ReviewMethod: "手动审查",
+                    ReviewContent:
+                      "户外广告的下沿不得低于建筑出挑部分的楼板,上沿不得高于二层窗户下沿",
+                  },
+                  {
+                    id: "453sd45xcv53",
+                    code: "00102020203",
+                    ReviewMethod: "手动审查",
+                    ReviewContent: "允许将户外广告设于建筑出挑部分的墙面上",
+                  },
+                  {
+                    id: "453sd45xcv53",
+                    code: "00102020204",
+                    ReviewMethod: "自动审查",
+                    ReviewContent: "广告高度不得大于3米",
+                  },
+                  {
+                    id: "453sd45xcv53",
+                    code: "00102020205",
+                    ReviewMethod: "自动审查",
+                    ReviewContent:
+                      "户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告外表面距离墙面不得超过0.5米)",
+                  },
+                ],
+              },
+            ],
+          },
+        ],
+      },
+    ],
+  },
+];
+window.billboardModelLT = {
+  url: "http://192.168.60.2:8090/iserver/services/3D-fangan/rest/realspace",
+  dataurl: "http://192.168.60.2:8090/iserver/services/data-fangan/rest/data",
+  dataSourceName: "DongAnZhuoYueCheng",
+  datasetName: "建筑轮廓",
+};
+
+/**
+ * 征收补偿预估标准
+ */
+window.ZSBC = {
+  /**征地补偿标准 */
+  ZDBCList: [
+    {
+      label: "征地标准01",
+      value: "1",
+      BCBZ: {
+        /**
+         * 土地统一年产值
+         */
+        TDCZ: 1000,
+        /**
+         * 土地补偿倍数
+         */
+
+        TDBCBS: 10,
+        /**
+         * 土地补偿费
+         */
+        TDBCF: 1000,
+        /**
+         * 安置补偿倍数
+         */
+
+        AZBCBS: 10,
+        /**
+         * 安置补偿费
+         */
+        ZBBCF: 111,
+        //  /**
+        //  * 土地补偿费
+        //  */
+        // BCHJ:1000,
+      },
+    },
+  ],
+  /**拆迁补偿标准 */
+  CQBCList: [
+    {
+      label: "拆迁补偿标准01",
+      value: "1",
+      BCBZ: [
+        {
+          JG: "框架结构",
+          items: [
+            {
+              GRADE: "等级一",
+              BZ: 1350,
+            },
+            {
+              GRADE: "等级二",
+              BZ: 1250,
+            },
+          ],
+          DES: "",
+        },
+        {
+          JG: "混合结构",
+          items: [
+            {
+              GRADE: "等级一",
+              BZ: 1100,
+            },
+            {
+              GRADE: "等级二",
+              BZ: 1050,
+            },
+          ],
+          DES: "",
+        },
+        {
+          JG: "砖木结构",
+          items: [
+            {
+              GRADE: "等级一",
+              BZ: 850,
+            },
+            {
+              GRADE: "等级二",
+              BZ: 750,
+              DES: "",
+            },
+          ],
+          DES: "",
+        },
+      ],
+    },
+  ],
+  /**青苗补偿标准 */
+  QMBCList: [
+    {
+      label: "青苗补偿标准01",
+      value: "1",
+      BCBZ: {
+        //农作物
+        NZW: 100,
+        //经济作物
+        JJZW: 200,
+        //树木
+        SM: 200,
+      },
+    },
+  ],
+};
+
+/**
+ * 灯光文件地址
+ */
+window.NightLightUrl = {
+  //道路流动线
+  dlzxx: "static/data/道路中线_1.json",
+  //草坪灯光
+  cpdg: "static/data/BPGYLight.json",
+  //道路灯光
+  dldg: "static/data/道路.json",
+  //体育场灯光
+  tycdg: "static/data/体育馆.json",
+  //地标灯光
+  yshdg: "static/data/地标.json",
+  //城市泛光线
+  csfgx: "static/data/fg.json",
+};
 
 window.billboardInfoList = [
   {
@@ -970,3 +1387,21 @@ window.billboardInfoList = [
   },
 ];
 
+
+/**
+ * 灯光文件地址
+ */
+window.NightLightUrl = {
+  //道路流动线
+  dlzxx: "static/data/道路中线_1.json",
+  //草坪灯光
+  cpdg: "static/data/BPGYLight.json",
+  //道路灯光
+  dldg: "static/data/道路.json",
+  //体育场灯光
+  tycdg: "static/data/体育馆.json",
+  //地标灯光
+  yshdg: "static/data/地标.json",
+  //城市泛光线
+  csfgx: "static/data/fg.json",
+};

+ 202 - 1
static/css/index.css

@@ -134,4 +134,205 @@ div::-webkit-scrollbar-track {
     border: 0px solid #eee !important;
     background-color: #fff0 !important;
   }
-  /*----------------------------  */
+  /*-----------中图代码-----------------  */
+  .vl-notify.vl-notify-iframe {
+    /* background-color: #fff0 !important;
+    background: url(/static/images/popup/background.png) no-repeat !important;
+    background-size: 100% 100% !important; */
+  }
+  .vl-notify.vl-notify-alert {
+    /* background-color: #fff0 !important;
+    background: url(/static/images/popup/background.png) no-repeat !important;
+    background-size: 100% 100% !important; */
+  }
+  
+  .vl-notify {
+    border: none !important;
+    border-radius: .4vw !important;
+    background: rgba(4, 28, 50, 0.76) !important;
+  }
+  
+  div::-webkit-scrollbar{
+    width: 5px;
+    height: 5px;
+  }
+  div::-webkit-scrollbar-thumb{
+    background: rgba(63, 147, 245, 0.6);
+    border-radius: 5px;
+  }
+  div::-webkit-scrollbar-track{
+     background: rgba(4, 28, 50, 0.6);
+  }
+  
+  .vl-notice-title{
+    width: auto !important;
+    padding: 0 !important;
+    margin: 0 15px !important;
+    background: unset !important;
+    border: none !important;
+    position: relative;
+  }
+  
+  .vl-notice-title:after{
+      width: 100%;
+      height: 4px;
+      content: '';
+      position: absolute;
+      left: 0;
+      bottom: 0;
+      background: linear-gradient(180deg, #0061a8 0%, #123568 46%, #11478e 100%);
+      border-radius: 4px;
+      z-index: -1;
+  }
+  
+  
+  .vl-notice-title>span{
+    font-size: 16px;
+    font-weight: 700;
+    letter-spacing: 1px;
+  }
+  
+  .icon-remove{
+    width: 22px;
+    height: 22px;
+    color: #fff !important;
+    background-color: rgba(51, 95, 135, 1);
+    line-height: 23px;
+    padding: 0 5px;
+    border-radius: 4px;
+    right: 0 !important;
+    top: 10px !important;
+  }
+  
+  .lv-icon-maxmini> i {
+    color: #fff !important;
+  }
+  
+  .lv-icon-maxmini .vlicon-max{
+    display: none;
+  }
+  
+  .el-input>input,.el-select-dropdown,.el-textarea>textarea{
+    color: #fff !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+    border:1px solid rgba(15, 122, 200, 0.4) !important;
+  }
+  .el-input .el-input-group__append{
+    color: #fff !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+    border:1px solid rgba(15, 122, 200, 0.4) !important;
+  }
+  .el-input-group__append>button{
+    color: #fff !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+    border:1px solid rgba(15, 122, 200, 0.4) !important;
+    padding:6px 20px;
+  }
+  .el-select-dropdown__item{
+    color: #ebebeb !important;
+  }
+  
+  .el-button--primary,.notify-btn-primary{
+    background: #0F7AC8 !important;
+    border-color: #0F7AC8 !important;
+    color: #fff !important;
+  }
+  
+  .el-button--primary:hover,.notify-btn-primary:hover{
+    background: #0f7bc8d8 !important;
+    border-color: #0f7bc8d8 !important;
+    color: #fff !important;
+  }
+  
+  .el-icon-search{
+    color: #20A0FC !important;
+  }
+  
+  .el-button--default,.notify-btn-default{
+    background: rgba(63, 147, 245, 0.2) !important;
+    border-color:#3F93F5!important;
+    color: rgba(182, 224, 255, 1) !important;
+  }
+  
+  .el-button--default:hover,.notify-btn-default:hover{
+    background: rgba(63, 148, 245, 0.432) !important;
+    border-color:#3F93F5!important;
+    color: rgba(182, 224, 255, 1) !important;
+  }
+  
+  
+  .el-select-dropdown__item.hover, .el-select-dropdown__item:hover{
+    color: #fff !important;
+    background-color: rgba(255,255,255,.35) !important;
+  }
+  .el-cascader__dropdown,.el-picker-panel,.el-picker-panel__footer{
+    color: #fff !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+    border:1px solid rgba(15, 122, 200, 0.4) !important;
+  }
+  .el-time-panel{
+    background-color: rgba(4, 28, 50, 0.85) !important;
+  }
+  
+  .el-time-spinner__item{
+    color: #fff !important;
+  }
+  
+  .el-time-spinner__item:hover{
+    color: #fff !important;
+    background: rgba(63, 148, 245, 0.432) !important;
+  }
+  
+  .el-time-panel__footer>button:nth-child(1),.el-date-table th,.el-picker-panel__icon-btn,.el-date-picker__header-label{
+    color: #fff !important;
+  }
+  
+  .el-pagination>button,.el-pager li{
+    color: #c2c2c2 !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+  }
+  
+  .el-pager li.active{
+    color: #fff !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+  }
+  
+  .el-color-picker__panel{
+    background-color: rgba(4, 28, 50, 0.5) !important;
+  }
+  
+  
+  .el-cascader-node{
+    color: #fff!important;
+  }
+  .el-cascader-node:hover{
+    color: #fff !important;
+    background-color: rgba(255,255,255,.35) !important;
+  }
+  /* .el-cascader-node:not(.is-disabled):hover */
+  .el-cascader-node:not(.is-disabled):focus{
+    background-color: rgba(4, 28, 50, 0.5) !important;
+  }
+  
+  .el-checkbox__input>.el-checkbox__inner{
+    border:1px solid #96A9B7;
+    background-color: rgba(4, 28, 50, 0.6);
+  }
+  
+  .el-icon-s-operation,.el-icon-location-outline,.el-icon-share,.el-icon-delete{
+    color: #20A0FC;
+  }
+  
+  .el-icon-s-operation + a,.el-icon-location-outline+ a,.el-icon-share+ a,.el-icon-delete+ a{
+    color: #CDDEEB;
+  }
+  
+  .el-pagination__jump{
+    color: #CDDEEB !important;
+  }
+  .el-input-number__decrease,.el-input-number__increase{
+    color: #fff !important;
+    background-color: rgba(4, 28, 50, 0.5) !important;
+    border:1px solid rgba(15, 122, 200, 0.4) !important;
+  }
+  /* ---------------------------- */

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
static/data/体育馆.json


+ 1 - 0
static/data/地标.json

@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51149052203805,18.30663858991633,40.49259118642658]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51275388106738,18.305732456259365,18.427856005728246]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51349642944838,18.30498012456868,18.73576421290636]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51110867065612,18.307978459709369,35.88324011396617]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51093485568652,18.30788777993432,18.76269033923745]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.50988283255279,18.308462934486628,32.99953790102154]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.5097477858057,18.308721308786344,19.21455460321158]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51123813168403,18.3065418703966,19.24706331640482]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51331042065566,18.306922002918197,20.48252127598971]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.5135501243287,18.30708415234609,19.35522654093802]}},{"type":"Feature","properties":{"SmUserID":0},"geometry":{"type":"Point","coordinates":[109.51081430401806,18.308203799213265,35.98014076985419]}}]}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
static/data/道路.json


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است