浏览代码

Merge branch 'master' of http://114.244.114.158:8802/siwei/real3d-portalsite

wanger 11 月之前
父节点
当前提交
e92dcf3dd8
共有 30 个文件被更改,包括 1194 次插入107 次删除
  1. 89 11
      src/common/scss/globe.scss
  2. 0 1
      src/components/Combinations/LayerManage/LayerManage.scss
  3. 123 12
      src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.vue
  4. 561 0
      src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/jzdjfxsmjg.vue
  5. 6 4
      src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue
  6. 4 6
      src/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue
  7. 4 3
      src/views/ConstructionApplication3D/billboard/addBillboardPoject.vue
  8. 248 0
      src/views/cockpit/common/BarGraph3D.vue
  9. 21 6
      src/views/cockpit/gdbh.vue
  10. 6 4
      src/views/cockpit/tdsc.vue
  11. 1 1
      src/views/cockpit/tdsy.vue
  12. 37 41
      src/views/siteselection/components/fzxz.vue
  13. 30 5
      static/Config/config.js
  14. 64 13
      static/css/index.css
  15. 二进制
      static/images/ghzc/second_titlebg.png
  16. 二进制
      static/images/overview/gdbh_echart_gdlc_legend.png
  17. 二进制
      static/images/overview/gdbh_echart_gdlr_legend.png
  18. 二进制
      static/images/overview/ht.png
  19. 二进制
      static/images/overview/icon_info (2).png
  20. 二进制
      static/images/overview/icon_info.png
  21. 二进制
      static/images/overview/icon信息.png
  22. 二进制
      static/images/overview/masking_bottom.png
  23. 二进制
      static/images/overview/masking_left.png
  24. 二进制
      static/images/overview/masking_right.png
  25. 二进制
      static/images/overview/masking_top.png
  26. 二进制
      static/images/overview/sjd.png
  27. 二进制
      static/images/overview/st.png
  28. 二进制
      static/images/overview/右侧附属信息.png
  29. 二进制
      static/images/overview/左侧主信息.png
  30. 二进制
      static/images/overview/驾驶背景遮罩.png

+ 89 - 11
src/common/scss/globe.scss

@@ -1,4 +1,5 @@
 @import 'cover';
+
 // 取消拖动时的选中
 div {
     -moz-user-select: none;
@@ -25,6 +26,7 @@ div {
     transition: border .25s linear, color .25s linear, background-color .25s linear;
     -webkit-font-smoothing: subpixel-antialiased;
     -webkit-transition: border .25s linear, color .25s linear, background-color .25s linear;
+
     &:hover {
         background: rgba(38, 38, 38, 0.9);
         color: #fff;
@@ -47,20 +49,25 @@ div {
     background: url(/static/images/ghzc/内容框.png) no-repeat;
     background-size: 100% 100%;
     background-position: center;
+    padding: 0px 10px;
+
     //overflow: hidden;
     @media (max-width: 750px) {
         margin-top: 2px;
         margin-left: 2px;
         max-width: 280px;
     }
+
     @media (max-height: 480px) {
         margin-top: 2px;
         margin-left: 2px;
         max-height: 440px;
     }
+
     @media (max-height: 300px) {
         max-height: 290px;
     }
+
     @media (max-height: 250px) {
         max-height: 240px;
     }
@@ -78,14 +85,17 @@ div {
     display: flex;
     justify-content: center;
     align-items: center;
+
     @media (max-width: 750px) {
         width: 35px;
         height: 35px;
     }
+
     @media (max-height: 480px) {
         width: 35px;
         height: 35px;
     }
+
     @media (max-height: 300px) {
         width: 30px;
         height: 30px;
@@ -111,18 +121,20 @@ div {
 .closeBtn {
     // float: right;
     position: absolute;
-    top: 0;
-    right: 0;
+    top: 6px;
+    right: 10px;
     color: #ffffff;
     border: none;
     font-size: 20px;
-    width: 20px;
-    height: 20px;
-    line-height: 20px;
-    background-color: rgba(34, 67, 70, 0.75);
+    width: 22px;
+    height: 22px;
+    background: #335F87;
+    border-radius: 4px;
+    border: 1px solid rgba(123, 162, 198, 0.5);
     padding: 0px;
     // display: inline-block;
     text-align: center;
+    line-height: 19px;
 }
 
 .closeBtn:hover {
@@ -130,28 +142,34 @@ div {
 }
 
 .sm-panel-header {
-    // height: 40px;
-    line-height: 40px;
+    height: 36px;
+    line-height: 36px;
     padding-left: 15px;
-    font-size: 15px;
     border-bottom: 1px solid rgba(38, 38, 38, 0.6);
-    background: url(/static/images/overview/titlebox.gif) no-repeat;
+    background: url(/static/images/ghzc//second_titlebg.png) no-repeat;
     background-size: 100% 100%;
     background-position: center;
     text-align: left;
-    padding-left: 38px;
+    font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
+    font-weight: bold;
+    font-size: 16px;
+    color: #FFFFFF;
+    text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
+
     @media (max-width: 750px) {
         // height: 35px;
         line-height: 35px;
         padding-left: 10px;
         font-size: 13px;
     }
+
     @media (max-height: 480px) {
         // height: 35px;
         line-height: 35px;
         padding-left: 5px;
         font-size: 13px;
     }
+
     @media (max-height: 300px) {
         // height: 30px;
         line-height: 30px;
@@ -169,28 +187,33 @@ div {
     scrollbar-width: none;
     /* firefox */
     -ms-overflow-style: none;
+
     /* IE 10+ */
     @media (max-width: 1000px) {
         margin: 0.8rem 0;
         padding: 0 15px;
     }
+
     @media (max-width: 750px) {
         margin: 0.5rem 0;
         padding: 0 10px;
         max-height: 410px;
     }
+
     @media (max-height: 480px) {
         margin: 0.5rem 0;
         padding: 0 15px;
         max-height: 420px;
         max-width: 280px;
     }
+
     @media (max-height: 300px) {
         margin: 0.5rem 0;
         padding: 0 10px;
         max-height: 280px;
         max-width: 250px;
     }
+
     @media (max-height: 250px) {
         max-height: 240px;
     }
@@ -204,12 +227,15 @@ div {
 .sm-function-module-sub-section {
     margin-bottom: 18px;
     overflow: hidden;
+
     @media (max-width: 1000px) {
         margin-bottom: 1px;
     }
+
     @media (max-height: 480px) {
         margin-bottom: 1px;
     }
+
     @media (max-height: 300px) {
         margin-bottom: 0px;
     }
@@ -224,6 +250,7 @@ div {
 .sm-function-module-sub-section-caption {
     margin: 0 0 8px 0;
     padding: 0;
+
     @media (max-height: 480px) {
         margin: 0 0 2px 0;
     }
@@ -241,15 +268,19 @@ label {
     display: inline-block;
     max-width: 100%;
     margin-bottom: 5px;
+
     @media (max-width: 1000px) {
         font-size: 12px;
     }
+
     @media (max-width: 750px) {
         font-size: 10px;
     }
+
     @media (max-height: 480px) {
         font-size: 12px;
     }
+
     @media (max-height: 300px) {
         font-size: 10px;
     }
@@ -285,9 +316,11 @@ label {
 .sm-solider-input-box {
     float: right;
     width: 65%;
+
     @media (max-width: 750px) {
         width: 61%;
     }
+
     @media (max-height: 480px) {
         width: 61%;
     }
@@ -335,10 +368,12 @@ label {
     height: 25px;
     border: 1px solid #DCDFE6;
     padding: 0px 3px;
+
     @media (max-width: 750px) {
         font-size: 12px;
         height: 21px;
     }
+
     @media (max-height: 480px) {
         height: 21px;
         font-size: 12px;
@@ -347,9 +382,11 @@ label {
 
 .sm-select-s {
     width: 65%;
+
     @media (max-width: 750px) {
         width: 64%;
     }
+
     @media (max-height: 480px) {
         width: 61%;
     }
@@ -365,9 +402,11 @@ label {
     position: relative;
     top: 4px;
     left: 80px;
+
     @media (max-width: 750px) {
         display: none
     }
+
     @media (max-height: 480px) {
         display: none
     }
@@ -376,12 +415,15 @@ label {
 .sm-select-color {
     width: 66%;
     position: relative;
+
     @media (max-width: 1000px) {
         width: 65%;
     }
+
     @media (max-width: 750px) {
         width: 60%;
     }
+
     @media (max-height: 480px) {
         width: 60%;
     }
@@ -475,11 +517,13 @@ input:focus {
 }
 
 ;
+
 select:focus {
     outline: none;
 }
 
 ;
+
 button:focus {
     // border: none;
     background-color: rgba(121, 120, 120, 0.5);
@@ -515,12 +559,15 @@ input[type="checkbox"]:checked::before {
     color: #ffffff;
     padding-left: 10px;
     opacity: 0.8;
+
     @media (max-width: 750px) {
         width: 102px;
     }
+
     @media (max-height: 480px) {
         width: 102px;
     }
+
     @media (max-height: 300px) {
         width: 75px;
     }
@@ -532,16 +579,19 @@ input[type="checkbox"]:checked::before {
     justify-content: flex-end;
     margin-top: 10px;
     padding: 5px 0 5px 10px;
+
     @media (max-width: 750px) {
         margin-top: 5px;
         padding: 3px 0 3px 5px;
         font-size: 12px;
     }
+
     @media (max-height: 480px) {
         margin-top: 5px;
         padding: 3px 0 3px 5px;
         font-size: 12px;
     }
+
     @media (max-height: 300px) {
         margin-top: 2px;
         padding: 2px 0 2px 4px;
@@ -562,15 +612,19 @@ input[type="checkbox"]:checked::before {
     font-size: 15px;
     padding: 0px;
     margin-right: 5px;
+
     @media (max-width: 1000px) {
         font-size: 14px;
     }
+
     @media (max-width: 750px) {
         font-size: 12px;
     }
+
     @media (max-height: 480px) {
         font-size: 12px;
     }
+
     @media (max-height: 300px) {
         font-size: 11px;
     }
@@ -591,12 +645,15 @@ input[type="range"]::-moz-range-thumb {
     color: #ffffff;
     opacity: 0.6;
     vertical-align: middle;
+
     @media (max-width: 750px) {
         width: 63%
     }
+
     @media (max-height: 480px) {
         width: 63%;
     }
+
     @media (max-height: 300px) {
         width: 62%;
     }
@@ -613,14 +670,17 @@ input[type="range"]::-moz-range-thumb {
     right: 53px;
     z-index: 1000;
     border: 1px solid rgba(60, 141, 188, 1);
+
     @media (max-width: 1000px) {
         right: 43px;
         width: 50%;
     }
+
     @media (max-width: 750px) {
         right: 10px;
         width: 56%;
     }
+
     @media (max-height: 480px) {
         right: 10px;
         width: 56%;
@@ -673,12 +733,15 @@ input[type="range"]::-moz-range-thumb {
     vertical-align: baseline;
     border-radius: .25em;
     line-height: 1.1;
+
     @media (max-width: 750px) {
         padding: 0.4em 5.6em .01em 4em;
     }
+
     @media (max-height: 480px) {
         padding: 0.4em 5.6em .01em 4em;
     }
+
     @media (max-height: 300px) {
         padding: 0.4em 4.6em .01em 4em;
     }
@@ -696,14 +759,17 @@ input[type="range"]::-moz-range-thumb {
     width: 56px;
     font-size: 13px;
     overflow: hidden;
+
     @media (max-width: 750px) {
         height: 22px;
         width: 50px;
     }
+
     @media (max-height: 480px) {
         height: 20px;
         width: 50px;
     }
+
     @media (max-height: 300px) {
         height: 20px;
         width: 45px;
@@ -716,10 +782,12 @@ input[type="range"]::-moz-range-thumb {
 }
 
 .media-hidden {
+
     //缩小屏幕时隐藏
     @media (max-width: 750px) {
         display: none;
     }
+
     @media (max-height: 480px) {
         display: none;
     }
@@ -755,6 +823,7 @@ input[type="range"]::-moz-range-thumb {
     border: 1px solid rgb(58, 150, 78);
     margin-bottom: 18px;
     flex-wrap: wrap;
+
     .Thematicbox {
         width: 40px;
         height: 45px;
@@ -763,16 +832,19 @@ input[type="range"]::-moz-range-thumb {
         font-size: 12px;
         // color: cl;
         text-align: center;
+
         .minbox {
             width: 30px;
             height: 30px;
             margin: 0 auto;
             line-height: 29px;
         }
+
         .iconfont {
             font-size: 24px;
         }
     }
+
     .lightSelected {
         color: rgb(58, 150, 78);
     }
@@ -786,6 +858,7 @@ input[type="range"]::-moz-range-thumb {
 .ParticleSystem {
     .sm-function-module-sub-section {
         margin-bottom: 0;
+
         .sm-solider-input-box,
         .sm-select {
             width: 68%;
@@ -799,12 +872,15 @@ input[type="range"]::-moz-range-thumb {
     align-items: baseline;
     justify-content: space-between;
     margin-bottom: 10px;
+
     @media (max-width: 750px) {
         margin-bottom: 2px;
     }
+
     @media (max-height: 480px) {
         margin-bottom: 2px;
     }
+
     button {
         // background-color: #333;
         color: white;
@@ -822,10 +898,12 @@ input[type="range"]::-moz-range-thumb {
     padding: 5px;
     // border: 1px solid rgb(58, 150, 78);
     margin: 10px 0;
+
     .imgbox {
         width: 40px;
         height: 40px;
     }
+
     .imgbox:hover {
         background-color: #127bab;
     }

+ 0 - 1
src/components/Combinations/LayerManage/LayerManage.scss

@@ -59,7 +59,6 @@
     overflow-y: hidden;
     overflow-x: hidden;
     height: 600px;
-    padding: 0px 5px 0px 5px;
 }
 .zymlsplit,.collectsplit{
     height: 300px;

+ 123 - 12
src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.vue

@@ -65,7 +65,7 @@
             </el-form>
             <div class="SaveCenter">
               <el-button type="primary" @click="submitForm('ruleForm')"
-                >添加</el-button
+                >开始分析</el-button
               >
               <el-button @click="resetForm('ruleForm')">重置</el-button>
             </div>
@@ -87,17 +87,72 @@
                   size="mini"
                   v-model="value1"
                   type="daterange"
-                  range-separator=""
+                  range-separator=""
                   start-placeholder="开始日期"
                   end-placeholder="结束日期"
                 >
                 </el-date-picker>
               </el-col>
             </el-row>
+            <el-row>
+              <el-col>
+                <el-row
+                  :gutter="10"
+                  v-for="itemModel in BenchmarkLandPriceList"
+                  :key="itemModel.id"
+                >
+                  <el-col :span="24">
+                    <el-card shadow="hover" class="card_body_style hover_style">
+                      <el-row>
+                        <el-col :span="24">
+                          {{ itemModel.ProjectName }}
+                        </el-col>
+                      </el-row>
+                      <el-row>
+                        <el-col :span="24">
+                          {{ itemModel.analysisDate }}
+                        </el-col>
+                      </el-row>
+                      <el-row>
+                        <el-col :span="6">
+                          <el-button
+                            v-if="itemModel.AnalysisStatus == '完成'"
+                            size="mini"
+                            type="primary"
+                            >{{ itemModel.AnalysisStatus }}</el-button
+                          >
+                          <el-button
+                            v-if="itemModel.AnalysisStatus == '正在分析'"
+                            size="mini"
+                            type="success"
+                            >{{ itemModel.AnalysisStatus }}</el-button
+                          >
+                          <el-button
+                            v-if="itemModel.AnalysisStatus == '异常'"
+                            size="mini"
+                            type="danger"
+                            >{{ itemModel.AnalysisStatus }}</el-button
+                          >
+                        </el-col>
+                        <el-col :span="18">
+                          <el-button size="mini" type="default">日志</el-button>
+                          <el-button
+                            size="mini"
+                            type="default"
+                            @click="openAnalyzeResults(itemModel)"
+                            >结果</el-button
+                          >
+                          <el-button size="mini" type="default">报告</el-button>
+                        </el-col>
+                      </el-row>
+                    </el-card>
+                  </el-col>
+                </el-row>
+              </el-col>
+            </el-row>
           </el-tab-pane>
-          <el-tab-pane label="分析结果" name="third">分析结果</el-tab-pane>
-        </el-tabs></el-col
-      >
+        </el-tabs>
+      </el-col>
     </el-row>
   </div>
 </template>
@@ -105,6 +160,7 @@
 import { v4 as uuidv4 } from "uuid";
 import moment from "moment";
 import jzdjfxsmInfo from "./jzdjfxsmInfo.vue";
+import jzdjfxsmjg from "./jzdjfxsmjg.vue";
 import {
   cartesian3ToWGS84,
   mapQuery,
@@ -113,15 +169,14 @@ import {
   undergroundMode,
 } from "@/utils/MapHelper/MapHelper.js";
 export default {
-  name: "DemolitionList",
   data() {
     return {
       zt_jzdj_ProjectType: window.dict.zt_jzdj_ProjectType,
+      tooltip: createTooltip(document.body),
       /**
        * tabs 标签
        */
       activeName: "first",
-
       //绘制事件
       handlerPolygon: null,
 
@@ -140,10 +195,16 @@ export default {
           { required: true, message: "请添加项目范围", trigger: "blur" },
         ],
       },
+      BenchmarkLandPriceList: [],
     };
   },
-
+  mounted() {
+    this.init();
+  },
   methods: {
+    init() {
+      this.BenchmarkLandPriceList = window.BenchmarkLandPriceList;
+    },
     /**
      * tas切换
      * @param {String} tab
@@ -203,13 +264,13 @@ export default {
         }
       });
       this.handlerPolygon.movingEvt.addEventListener((windowPosition) => {
-        window.tooltip.showAt(
+        that.tooltip.showAt(
           windowPosition,
           "<p>点击鼠标左键开始绘制分析区域</p>"
         );
       });
       this.handlerPolygon.drawEvt.addEventListener((result) => {
-        window.tooltip.setVisible(false);
+        that.tooltip.setVisible(false);
         var polygon = result.object;
         if (!polygon) {
           return;
@@ -235,7 +296,7 @@ export default {
         this.handlerPolygon.deactivate();
         this.handlerPolygon = null;
       }
-      window.tooltip.setVisible(false);
+      this.tooltip.setVisible(false);
     },
 
     submitForm(formName) {
@@ -261,6 +322,37 @@ export default {
       this.clear();
       this.$refs[formName].resetFields();
     },
+
+    /**
+     * 打开分析结果弹窗
+     * @param BenchmarkLandPrice 基准地价信息
+     */
+    openAnalyzeResults(BenchmarkLandPrice) {
+      if (this.FXJGInfolayerid) {
+        this.$layer.close(this.FXJGInfolayerid);
+      }
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 830 / 2 + 60;
+      this.FXJGInfolayerid = this.$layer.iframe({
+        content: {
+          content: jzdjfxsmjg, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info: { BenchmarkLandPrice } }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "830px"], //宽 高
+        title: "分析结果",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {},
+      });
+    },
   },
   beforeDestroy() {
     this.clear();
@@ -270,4 +362,23 @@ export default {
 <style lang="scss">
 @import "@/../../zt.scss";
 </style>
-<style scoped></style>
+<style scoped>
+.el-date-editor--daterange.el-input__inner {
+  width: auto;
+  background-color: rgba(4, 28, 50, 0.5);
+  border: 1px solid rgba(15, 122, 200, 0.4);
+}
+.card_body_style {
+  border: 1px dashed #02a7f0;
+}
+.hover_style:hover {
+  border: 1px solid #02a7f0;
+}
+.con-col {
+  display: flex;
+  flex-flow: column nowrap;
+  justify-content: center;
+  align-items: center;
+  border-radius: 4px;
+}
+</style>

+ 561 - 0
src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/jzdjfxsmjg.vue

@@ -0,0 +1,561 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10" style="display: flex; align-items: center">
+      <el-col :span="18">
+        {{ info.BenchmarkLandPrice.ProjectName }}
+      </el-col>
+      <el-col :span="6">
+        <el-button size="mini" type="default">导出报告</el-button>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="12">
+        <el-row :gutter="10" class="container_center">
+          <el-col
+            :span="8"
+            class="container_center"
+            style="
+              height: 3rem;
+              background-color: rgba(2, 167, 240, 1);
+              border-radius: 6px;
+            "
+          >
+            <i style="font-size: 2rem" class="el-icon-office-building"></i>
+          </el-col>
+          <el-col
+            :span="16"
+            class="container_center"
+            style="justify-content: flex-start"
+          >
+            <div class="con-col" style="align-items: flex-start">
+              <a style="color: white">分析面积(平方米)</a>
+              <a style="font-weight: bold; color: rgba(2, 167, 240, 1)"
+                >66666</a
+              >
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+      <el-col :span="12">
+        <el-row :gutter="10" class="container_center">
+          <el-col
+            :span="8"
+            class="container_center"
+            style="
+              height: 3rem;
+              background-color: rgba(2, 167, 240, 1);
+              border-radius: 6px;
+            "
+          >
+            <i style="font-size: 2rem" class="el-icon-bank-card"></i>
+          </el-col>
+          <el-col
+            :span="16"
+            class="container_center"
+            style="justify-content: flex-start"
+          >
+            <div class="con-col" style="align-items: flex-start">
+              <a style="color: white">总地价(万元)</a>
+              <a style="font-weight: bold; color: rgba(2, 167, 240, 1)"
+                >55555</a
+              >
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="12">
+        <el-row :gutter="10" class="container_center">
+          <el-col
+            :span="8"
+            class="container_center"
+            style="
+              height: 3rem;
+              background-color: rgba(2, 167, 240, 1);
+              border-radius: 6px;
+            "
+          >
+            <i style="font-size: 2rem" class="el-icon-discount"></i>
+          </el-col>
+          <el-col
+            :span="16"
+            class="container_center"
+            style="justify-content: flex-start"
+          >
+            <div class="con-col" style="align-items: flex-start">
+              <a style="color: white">国有建设</a>
+              <a style="color: white">用地地价(万元)</a>
+              <a style="font-weight: bold; color: rgba(2, 167, 240, 1)"
+                >66666</a
+              >
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+      <el-col :span="12">
+        <el-row :gutter="10" class="container_center">
+          <el-col
+            :span="8"
+            class="container_center"
+            style="
+              height: 3rem;
+              background-color: rgba(2, 167, 240, 1);
+              border-radius: 6px;
+            "
+          >
+            <i style="font-size: 2rem" class="el-icon-price-tag"></i>
+          </el-col>
+          <el-col
+            :span="16"
+            class="container_center"
+            style="justify-content: flex-start"
+          >
+            <div class="con-col" style="align-items: flex-start">
+              <a style="color: white">集体建设</a>
+              <a style="color: white">用地地价(万元)</a>
+              <a style="font-weight: bold; color: rgba(2, 167, 240, 1)"
+                >55555</a
+              >
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10" style="display: flex; align-items: center">
+      <el-col :span="24">
+        土地用途:
+        <el-select
+          size="mini"
+          v-model="jzdj_LandUse"
+          placeholder="请选择土地用途"
+          clearable
+        >
+          <el-option
+            v-for="dict in zt_jzdj_LandUse"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div id="echartFGY" ref="echartFGY" class="EchartsWH">
+          <div
+            id="GYEcharts"
+            ref="GYEcharts"
+            :style="{ width: '100%', height: '100%' }"
+          ></div>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div id="echartFJT" ref="echartFJT" class="EchartsWH">
+          <div
+            id="JTEcharts"
+            ref="JTEcharts"
+            :style="{ width: '100%', height: '100%' }"
+          ></div>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+import { v4 as uuidv4 } from "uuid";
+import moment from "moment";
+import jzdjfxsmInfo from "./jzdjfxsmInfo.vue";
+import elementResizeDetectorMaker from "element-resize-detector";
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+export default {
+  data() {
+    return {
+      tooltip: createTooltip(document.body),
+      zt_jzdj_LandUse: window.dict.zt_jzdj_LandUse,
+      /**
+       * tabs 标签
+       */
+      activeName: "first",
+      //绘制事件
+      handlerPolygon: null,
+      jzdj_LandUse: "商服用地",
+      rules: {
+        ProjectName: [
+          { required: true, message: "请输入项目名称", trigger: "blur" },
+        ],
+        ProjectScope: [
+          { required: true, message: "请添加项目范围", trigger: "blur" },
+        ],
+      },
+      BenchmarkLandPriceList: [],
+      GYmyChart: null,
+      JTmyChart: null,
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  mounted() {
+    const erd = elementResizeDetectorMaker();
+    let that = this;
+    erd.listenTo([this.$refs.echartFGY, this.$refs.echartFJT], () => {
+      that.$nextTick(() => {
+        //监听到事件后执行的业务逻辑
+        window.echarts.init(this.$refs.GYEcharts).resize();
+        window.echarts.init(this.$refs.JTEcharts).resize();
+      });
+    });
+    this.init();
+  },
+  methods: {
+    init() {
+      this.BenchmarkLandPriceList = window.BenchmarkLandPriceList;
+      this.initGY();
+      this.initJT();
+    },
+    /**
+     * tas切换
+     * @param {String} tab
+     * @param {Object} event
+     */
+    handleClick(tab, event) {
+      console.log(tab, event);
+    },
+
+    /**
+     *基准地价说明
+     */
+    jzdjsmShow() {
+      var that = this;
+      if (that.layerid) that.$layer.close(that.layerid);
+      var width = "40rem";
+      var height = "30rem";
+
+      that.layerid = that.$layer.iframe({
+        content: {
+          content: jzdjfxsmInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: {}, //props
+        },
+
+        area: [width.toString(), height.toString()],
+        title: "基准地价分析说明",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+    /**
+     * 绘制范围
+     */
+    getProjectScope() {
+      let that = this;
+      this.clear();
+      this.handlerPolygon = new Cesium.DrawHandler(
+        viewer,
+        Cesium.DrawMode.Polygon,
+        Cesium.ClampMode.Space
+      );
+      this.handlerPolygon.activate();
+      this.handlerPolygon.activeEvt.addEventListener(function (isActive) {
+        if (isActive == true) {
+          viewer.enableCursorStyle = false;
+          viewer._element.style.cursor = "";
+          document.body.classList.add("drawCur");
+        } else {
+          viewer.enableCursorStyle = true;
+          document.body.classList.remove("drawCur");
+        }
+      });
+      this.handlerPolygon.movingEvt.addEventListener((windowPosition) => {
+        that.tooltip.showAt(
+          windowPosition,
+          "<p>点击鼠标左键开始绘制分析区域</p>"
+        );
+      });
+      this.handlerPolygon.drawEvt.addEventListener((result) => {
+        that.tooltip.setVisible(false);
+        var polygon = result.object;
+        if (!polygon) {
+          return;
+        }
+        let points = [];
+        let positions = polygon.positions;
+        //遍历多边形,取出所有点
+        for (var i = 0, len = positions.length; i < len; i++) {
+          let xyz = cartesian3ToWGS84(positions[i]);
+          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]);
+          }
+        }
+        that.form.ProjectScope = points;
+      });
+    },
+    clear() {
+      if (this.handlerPolygon) {
+        this.handlerPolygon.clear();
+        this.handlerPolygon.deactivate();
+        this.handlerPolygon = null;
+      }
+      this.tooltip.setVisible(false);
+    },
+
+    submitForm(formName) {
+      let that = this;
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          that.form.id = uuidv4();
+          that.form.analysisDate = moment(new Date()).format(
+            "YYYY-MM-DD HH:mm:ss"
+          );
+          window.BenchmarkLandPriceList.push(that.form);
+          that.resetForm(formName);
+          that.$message({
+            message: "保存成功",
+            type: "success",
+          });
+        } else {
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+      this.clear();
+      this.$refs[formName].resetFields();
+    },
+
+    // 打开分析结果弹窗
+    openAnalyzeResults() {
+      if (this.FXJGInfolayerid) {
+        this.$layer.close(this.FXJGInfolayerid);
+      }
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 430 / 2 + 60;
+      this.FXJGInfolayerid = this.$layer.iframe({
+        content: {
+          content: HighLimitAnalysis, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info: {} }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "分析结果",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {},
+      });
+    },
+
+    initGY() {
+      this.GYmyChart = window.echarts.init(this.$refs.GYEcharts);
+
+      var option = {
+        color: [
+          "#5470c6",
+          "#91cc75",
+          "#fac858",
+          "#ee6666",
+          "#73c0de",
+          "#3ba272",
+          "#fc8452",
+          "#9a60b4",
+          "#ea7ccc",
+        ],
+        tooltip: {
+          trigger: "item",
+        },
+
+        legend: {
+          orient: "vertical",
+          left: "right",
+          top: "center",
+          textStyle: {
+            color: "#FFFFFF",
+          },
+        },
+        series: [
+          {
+            name: "Access From",
+            type: "pie",
+            radius: ["40%", "70%"],
+            center: ["35%", "50%"], // 将饼图的中心点向左调整到容器宽度的30%,纵坐标保持在中心
+            avoidLabelOverlap: false,
+            itemStyle: {
+              borderRadius: 10,
+              borderColor: "#fff",
+              borderWidth: 2,
+            },
+            label: {
+              show: false,
+              position: "center",
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: 20,
+                fontWeight: "bold",
+              },
+            },
+            labelLine: {
+              show: false,
+            },
+            data: [
+              { value: 1048, name: "I" },
+              { value: 735, name: "II" },
+              { value: 580, name: "III" },
+              { value: 484, name: "IV" },
+              { value: 300, name: "V" },
+            ],
+          },
+        ],
+      };
+
+      this.GYmyChart.setOption(option);
+    },
+    initJT() {
+      this.JTmyChart = window.echarts.init(this.$refs.JTEcharts);
+
+      var option = {
+        color: [
+          "#5470c6",
+          "#91cc75",
+          "#fac858",
+          "#ee6666",
+          "#73c0de",
+          "#3ba272",
+          "#fc8452",
+          "#9a60b4",
+          "#ea7ccc",
+        ],
+        tooltip: {
+          trigger: "item",
+        },
+        legend: {
+          orient: "vertical",
+          left: "right",
+          top: "center",
+          textStyle: {
+            color: "#FFFFFF",
+          },
+        },
+        series: [
+          {
+            name: "Access From",
+            type: "pie",
+            radius: ["40%", "70%"],
+            center: ["35%", "50%"], // 将饼图的中心点向左调整到容器宽度的30%,纵坐标保持在中心
+            avoidLabelOverlap: false,
+            itemStyle: {
+              borderRadius: 10,
+              borderColor: "#fff",
+              borderWidth: 2,
+            },
+            label: {
+              show: false,
+              position: "center",
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: 20,
+                fontWeight: "bold",
+              },
+            },
+            labelLine: {
+              show: false,
+            },
+            data: [
+              { value: 1048, name: "I" },
+              { value: 735, name: "II" },
+              { value: 580, name: "III" },
+              { value: 484, name: "IV" },
+              { value: 300, name: "V" },
+            ],
+          },
+        ],
+      };
+
+      this.JTmyChart.setOption(option);
+    },
+  },
+  beforeDestroy() {
+    this.clear();
+  },
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style scoped>
+.el-date-editor--daterange.el-input__inner {
+  width: auto;
+  background-color: rgba(4, 28, 50, 0.5);
+  border: 1px solid rgba(15, 122, 200, 0.4);
+}
+.card_body_style {
+  border: 1px dashed #02a7f0;
+}
+.hover_style:hover {
+  border: 1px solid #02a7f0;
+}
+.con-col {
+  display: flex;
+  flex-flow: column nowrap;
+  justify-content: center;
+  align-items: center;
+  border-radius: 4px;
+}
+
+.container_center {
+  display: flex;
+  align-items: center; /* 垂直居中 */
+  justify-content: center; /* 水平居中,如果也需要水平居中的话 */
+}
+.EchartsWH {
+  width: 100%;
+  height: 16rem;
+}
+</style>

+ 6 - 4
src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue

@@ -138,6 +138,7 @@ import { v4 as uuidv4 } from "uuid";
 export default {
   data() {
     return {
+      tooltip: createTooltip(document.body),
       GeoJsonLayerList: [],
       liudongGntities: [],
       sharedState: store.state,
@@ -1124,6 +1125,7 @@ export default {
       }
     },
     initPointLightSourceDrawHandler() {
+      let that = this;
       this.clearLightSource();
       this.pointLightSourceDrawHandler = new Cesium.DrawHandler(
         viewer,
@@ -1143,7 +1145,7 @@ export default {
       });
       this.pointLightSourceDrawHandler.movingEvt.addEventListener(
         (windowPosition) => {
-          window.tooltip.showAt(
+          that.tooltip.showAt(
             windowPosition,
             `<p>${Resource.clickToConfirmThePositionOfTheLightSource}</p><p>${Resource.clickLightChangeAttributes}</p>`
           );
@@ -1185,7 +1187,7 @@ export default {
         this.entityPointLightPairs.set(entityAsKey, pointLight);
         this.pointLightSourceDrawHandler.clear();
         this.pointLightSourceDrawHandler = null;
-        window.tooltip.setVisible(false);
+        this.tooltip.setVisible(false);
       });
     },
     initSpotOrDirectionalLightSourceDrawHandler() {
@@ -1211,7 +1213,7 @@ export default {
       );
       this.spotOrDirectionalLightSourceDrawHandler.movingEvt.addEventListener(
         (windowPosition) => {
-          window.tooltip.showAt(
+          this.tooltip.showAt(
             windowPosition,
             `<p>${Resource.ClickLineDirectionLightSource}</p><p>${Resource.clickLightChangeAttributes}</p>`
           );
@@ -1281,7 +1283,7 @@ export default {
           this.spotOrDirectionalLightPositions = [];
           this.spotOrDirectionalLightSourceDrawHandler.clear();
           this.spotOrDirectionalLightSourceDrawHandler = null;
-          window.tooltip.setVisible(false);
+          this.tooltip.setVisible(false);
         }
       );
 

+ 4 - 6
src/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue

@@ -105,6 +105,7 @@
 export default {
   data() {
     return {
+      tooltip: createTooltip(document.body),
       form: {
         timeInterval: 60,
         spacing: 10,
@@ -158,9 +159,6 @@ export default {
   },
   computed: {},
   mounted() {
-    if (!window.tooltip) {
-      window.tooltip = createTooltip(viewer._element);
-    }
     this.init();
   },
   methods: {
@@ -207,13 +205,13 @@ export default {
         }
       });
       handlerPolygon.movingEvt.addEventListener((windowPosition) => {
-        window.tooltip.showAt(
+        that.tooltip.showAt(
           windowPosition,
           "<p>点击鼠标左键开始绘制分析区域</p>"
         );
       });
       handlerPolygon.drawEvt.addEventListener((result) => {
-        window.tooltip.setVisible(false);
+        that.tooltip.setVisible(false);
         let positions = that.positions;
         let points = that.points;
 
@@ -289,7 +287,7 @@ export default {
       if (this.handlerPolygon) {
         this.handlerPolygon.deactivate();
       }
-      window.tooltip.setVisible(false);
+      this.tooltip.setVisible(false);
       // common.clearHandlerDrawing();
       // viewer.entities.removeAll();
 

+ 4 - 3
src/views/ConstructionApplication3D/billboard/addBillboardPoject.vue

@@ -71,6 +71,7 @@ import {
 export default {
   data() {
     return {
+      tooltip: createTooltip(document.body),
       form: {
         id: "",
         projectname: "",
@@ -168,13 +169,13 @@ export default {
         }
       });
       this.handlerPolygon.movingEvt.addEventListener((windowPosition) => {
-        window.tooltip.showAt(
+        that.tooltip.showAt(
           windowPosition,
           "<p>点击鼠标左键开始绘制分析区域</p>"
         );
       });
       this.handlerPolygon.drawEvt.addEventListener((result) => {
-        window.tooltip.setVisible(false);
+        that.tooltip.setVisible(false);
         let positions = [];
         let points = [];
         var polygon = result.object;
@@ -201,7 +202,7 @@ export default {
         this.handlerPolygon.deactivate();
         this.handlerPolygon = null;
       }
-      window.tooltip.setVisible(false);
+      this.tooltip.setVisible(false);
     },
   },
   beforeDestroy() {

+ 248 - 0
src/views/cockpit/common/BarGraph3D.vue

@@ -0,0 +1,248 @@
+<template>
+    <div id="BarGraph3D"></div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+
+export default {
+    components: {},
+    props: {
+        legendData: {
+            type: Array,
+        },
+        xdata: {
+            type: Array,
+        },
+        result: {
+            type: Array,
+        }
+    },
+    data() {
+        return {};
+    },
+    //监听属性 类似于data概念
+    computed: {},
+    //监控data中的数据变化
+    watch: {},
+    //方法集合
+    methods: {
+        init_3DBarGraph_echart() {
+            const _this = this;
+            var dom = document.getElementById("BarGraph3D");
+            var myChart = window.echarts.init(dom);
+            // Mock数据
+            const mockData = {
+                // xdata: ['居民用地', '公共管理用地', '商业商服用地', '工矿用地', '工矿用地仓储用地', "交通运输用地"],
+                xdata: _this.$props.xdata,
+
+                result: [
+                    { name: '计划收储', data: [...new Array(5)].map((item, i) => +(Math.random(0, 10) * 1000).toFixed(0)) },
+                    { name: '完成收储', data: [...new Array(5)].map((item, i) => +(Math.random(0, 0.5) * 1000).toFixed(0)) },
+                ]
+            }
+
+            const color = [
+                [{ offset: 0, color: 'rgba(183, 117, 12, 0.8)' }, { offset: 0.5, color: 'rgba(183, 117, 12, 0.8)' }, { offset: 0.5, color: 'rgba(249, 180, 71, 0.8)' }, { offset: 1, color: 'rgba(249, 180, 71, 0.8)' }],
+
+                [{ offset: 0, color: 'rgba(34, 129, 209, 0.8)' }, { offset: 0.5, color: 'rgba(34, 129, 209, 0.8)' }, { offset: 0.5, color: 'rgba(97, 173, 237, 0.8)' }, { offset: 1, color: 'rgba(97, 173, 237, 0.8)' }],
+
+            ]
+            const color2 = ['rgba(34, 129, 209, 0.8)', 'rgba(34, 129, 209, 0.8)',]
+
+            // tooltip
+            // const tooltip = {
+
+            //     trigger: "axis",
+            //     axisPointer: {
+            //         // 坐标轴指示器,坐标轴触发有效
+            //         type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
+            //     },
+            //     padding: [8, 15],
+            //     backgroundColor: "rgba(12, 51, 115,0.8)",
+            //     borderColor: "rgba(3, 11, 44, 0.5)",
+            //     textStyle: {
+            //         color: "rgba(255, 255, 255, 1)"
+            //     },
+            //     formatter: params => {
+            //         let rander = params.map(item => `<div>${item.seriesName}: ${item.value}</div>`).join('')
+            //         return rander
+            //     }
+            // }
+            const tooltip = {
+                backgroundColor: 'RGBA(20, 106, 178, 0.4)',
+                trigger: "axis",
+                textStyle: { fontSize: '100%' },
+                formatter: params => {
+                    let rander = params.map(item => `
+                    <div style='
+                        border:none;
+                        border-radius:3px;
+                        color:#FFF;
+                        font-size:12px
+                        '>
+                            ${item.seriesName}: ${item.value}
+                    </div>`).join('')
+                    return rander
+                }
+            }
+
+            // const tooltip = {
+            //     trigger: 'item',
+            //     backgroundColor: 'none',
+            //     padding: 5,
+            //     formatter: params => {
+            //         let rander = params.map(item => `<div>${item.seriesName}: ${item.value}公顷</div>`).join('')
+            //         return rander
+            //     },
+
+
+            // formatter: function (param) {
+            //     var resultTooltip = "<div style='background:rgba(13,5,30,.6);border:1px solid rgba(255,255,255,.2);padding:5px;border-radius:3px;'>" +
+            //         "<div style='text-align:center;'>" + param.name + "</div>" +
+            //         "<div style='padding-top:5px;'>";
+
+            //     resultTooltip +=
+            //         "<span style='display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:" + param.color.colorStops[0].color + ";'></span>" +
+            //         "<span style=''> " + param.seriesName + ": </span>" +
+            //         "<span style='color:" + param.color.colorStops[0].color + "'>" + param.value + "</span></span><span>" + "</span></br>"
+
+
+            //     resultTooltip += "</div>";
+
+            //     return resultTooltip
+            // }
+            // }
+            const legend = {
+                data: _this.$props.legendData,      //图例名称
+
+                textStyle: { fontSize: 12, color: '#fff' },
+                itemWidth: 24,
+                itemHeight: 15,
+                itemGap: 15,
+                top: '5%',
+                right: '2%',
+                selectedMode: false
+            }
+            const grid = { top: '15%', left: '12%', right: '2%', bottom: '25%' }
+            // xAxis
+            const xAxis = {
+                axisTick: { show: false },
+                axisLine: { lineStyle: { color: '#BCD3E5' } },
+                axisLabel: {
+                    textStyle: { fontSize: 12, color: '#BCD3E5' },
+                },
+                axisLabel: {
+                    interval: 0,
+                    formatter: function (value) {
+                        // 当文字长度大于2时,使用slice方法截取字符串并拼接省略号;否则直接返回原文字
+                        if (value.length > 4) {
+                            return `${value.slice(0, 4)}...`;
+                        } else {
+                            return value;
+                        }
+                    },
+                },
+                data: mockData.xdata,
+            }
+
+            // yAxis
+            const yAxis = [{
+                axisTick: { show: false },
+                axisLine: { show: false },
+                splitLine: { lineStyle: { color: 'rgba(255,255,255, .05)' } },
+                axisLabel: { show: false, textStyle: { fontSize: 14, color: '#fff' } }
+            }, {
+                show: false,
+                splitLine: { show: false },
+                axisLine: { show: false },
+                axisTick: { show: false },
+            }]
+            const diamondData = mockData.result.reduce((pre, cur, index) => {
+                pre[index] = cur.data.map((el, id) => el + (pre[index - 1] ? pre[index - 1][id] : 0))
+                return pre
+            }, [])
+
+            let series = mockData.result.reduce((p, c, i, array) => {
+                p.push({
+                    z: i + 1,
+                    stack: '总量',
+                    type: 'bar',
+                    name: c.name,
+                    barGap: 18,
+                    barWidth: 18,
+                    data: c.data,
+                    itemStyle: { color: { type: 'linear', x: 0, x2: 1, y: 0, y2: 0, colorStops: color[i] } },
+                }, {
+                    z: i + 10,
+                    type: 'pictorialBar',
+                    symbolPosition: 'end',
+                    symbol: 'diamond',
+                    symbolOffset: [0, '-50%'],
+                    symbolSize: [18, 12],
+                    data: diamondData[i],
+                    itemStyle: { color: color2[i] },
+                    tooltip: { show: false },
+                })
+
+                // 是否最后一个了?
+                if (p.length === (array.length) * 2) {
+                    p.push({
+                        z: array.length * 2,
+                        type: "pictorialBar",
+                        symbolPosition: "start",
+                        data: mockData.result[0].data,
+                        symbol: "diamond",
+                        symbolOffset: ["0%", "50%"],
+                        symbolSize: [18, 10],
+                        itemStyle: { color: { type: 'linear', x: 0, x2: 1, y: 0, y2: 0, colorStops: color[0] } },
+                        tooltip: { show: false },
+                    })
+                    return p
+                }
+
+                return p
+            }, [])
+
+            const dataZoom = [{
+                show: false,
+                type: 'slider',
+                startValue: 0,
+                endValue: 7,
+                moveOnMouseWheel: true,
+                moveOnMouseMove: true,
+                zoomOnMouseWheel: false,
+            }]
+
+            let option = {
+
+                tooltip, legend, xAxis, yAxis, series, grid, dataZoom, backgroundColor: 'rgba(0, 0, 0, 0)'
+            }
+
+
+            myChart.setOption(option);
+
+        },
+    },
+    beforeCreate() { }, //生命周期 - 创建之前
+    created() { }, //生命周期 - 创建完成(可以访问当前this实例)
+    beforeMount() { }, //生命周期 - 挂载之前
+    mounted() {
+        this.init_3DBarGraph_echart();
+    }, //生命周期 - 挂在完成
+    beforeUpdate() { }, //生命周期 - 更新之前
+    updated() { }, //生命周期 - 更新之后
+    beforeDestroy() { }, //生命周期 - 销毁之前
+    destroy() { },//生命周期 - 销毁完成
+    activated() { }, //若组件实例是 <KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用。
+    deactivated() { } //若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。
+};
+</script>
+<style  scoped>
+#BarGraph3D {
+    left: -2rem;
+    top: 0.1rem;
+    width: 26rem;
+    height: 10rem;
+}
+</style>

+ 21 - 6
src/views/cockpit/gdbh.vue

@@ -191,7 +191,7 @@
         <div class="content">
           <div class="item">
             <div class="icon">
-              <div class="icon_zxkg">
+              <div class="icon_st">
 
               </div>
             </div>
@@ -203,7 +203,7 @@
           </div>
           <div class="item">
             <div class="icon">
-              <div class="icon_zxkg">
+              <div class="icon_sjd">
 
               </div>
             </div>
@@ -215,7 +215,7 @@
           </div>
           <div class="item">
             <div class="icon">
-              <div class="icon_zxkg">
+              <div class="icon_ht">
 
               </div>
             </div>
@@ -867,17 +867,32 @@ export default {
   display: inline-block;
   height: 50px
 }
-
-.icon_zxkg {
+.icon_st {
   background: no-repeat 50%;
-  background-image: url("/static/images/overview/icon_zxkg.png");
+  background-image: url("/static/images/overview/st.png");
   /* border: #00FFFF 1px solid; */
   width: 45px;
   height: 45px;
   display: inline-block;
 
 }
+.icon_sjd {
+  background: no-repeat 50%;
+  background-image: url("/static/images/overview/sjd.png");
+  /* border: #00FFFF 1px solid; */
+  width: 45px;
+  height: 45px;
+  display: inline-block;
 
+}.icon_ht {
+  background: no-repeat 50%;
+  background-image: url("/static/images/overview/ht.png");
+  /* border: #00FFFF 1px solid; */
+  width: 45px;
+  height: 45px;
+  display: inline-block;
+
+}
 .icon_jsyd {
   background: no-repeat 50%;
   background-image: url("/static/images/overview/gdxz_jsyd.png");

+ 6 - 4
src/views/cockpit/tdsc.vue

@@ -13,7 +13,8 @@
 
 
     <div v-show="tab == options[1].value">
-      <div id="scje_echart"></div>
+      <BarGraph3D :legendData="['计划收储', '完成收储']"  :xdata="xdata"/>
+      <!-- <div id="scje_echart"></div> -->
     </div>
     <div v-show="tab == options[0].value">
       <div class="content_scjd">
@@ -55,9 +56,9 @@
 <script>
 //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
 import { QueryOne, QueryList } from '@/api/cockpitNew'
-
+import BarGraph3D from './common/BarGraph3D.vue';
 export default {
-  components: {},
+  components: {BarGraph3D},
   data() {
     return {
       tab: 'scjd',
@@ -66,6 +67,7 @@ export default {
         { value: "scjd", label: "收储进度" },
         { value: "scjgg", label: "收储结构" },
       ],
+      xdata:['居民用地', '公共管理用地', '商业商服用地', '工矿用地', '工矿用地仓储用地', "交通运输用地"]
     };
   },
   //监听属性 类似于data概念
@@ -432,7 +434,7 @@ export default {
   mounted() {
     const that = this;
     this.$nextTick((res) => {
-      that.init_scje_echart();
+      // that.init_scje_echart();
       that.init_dial_watch_scjg();
       this.init_scjd();
     })

+ 1 - 1
src/views/cockpit/tdsy.vue

@@ -192,7 +192,7 @@ export default {
         { name: "未供应", value: store.state.cockpit_tdgy.gy_jd_info.pieData.wgy },
         { name: "已划拨", value: store.state.cockpit_tdgy.gy_jd_info.pieData.yhb },
         { name: "已出让", value: store.state.cockpit_tdgy.gy_jd_info.pieData.ycr },
-      ]);
+      ], 0.2);
     },
     async init_tdgy_jt_jg(params) {
       const that = this;

+ 37 - 41
src/views/siteselection/components/fzxz.vue

@@ -1,21 +1,15 @@
 <template>
   <div class="hgxsc">
-    <!-- <div class="site-title">
-      选址范围
-      <span>导入</span>
-      <span>绘制</span>
-    </div> -->
-    <div class="rangDiv">
-      <div class="block-title">选址范围</div>
-      <range :keys="['hx', 'sc']" class="range" ref="range" />
-    </div>
     <el-form
       :model="ruleForm"
       ref="ruleForm"
       label-width="100px"
       :rules="rules"
     >
-      <div class="block-title">基本信息</div>
+      <!-- <div class="block-title">基本信息</div> -->
+      <el-form-item label="选址范围:" prop="xzmj">
+        <range type="hgxfx" :keys="['hx', 'sc']" class="range" ref="range" />
+      </el-form-item>
       <el-form-item label="项目名称:" prop="xmmc">
         <el-input
           v-model="ruleForm.xmmc"
@@ -116,6 +110,7 @@
 import yxyzPop from "./yxyzPop.vue"; ///mapview/range
 import range from "@/components/mapview/range.vue"; ///mapview/range
 import { GetDldmTree } from "../../../api/ghss/ghxz.js";
+import hgxfx from "../../../../static/data/ghss/data.js";
 export default {
   components: {
     yxyzPop,
@@ -134,6 +129,7 @@ export default {
     return {
       xz: [],
       ruleForm: {
+        xzmj: 0,
         xmmc: "",
         jsdw: "",
         xmlx: "",
@@ -143,6 +139,8 @@ export default {
         sjy: "国土空间总体规划", //数据源
       },
       rules: {
+        xzmj: [{ required: true, message: "请填写范围的数据" }],
+        // xzmj: [{ required: true, message: "请绘制选址范围" }],
         xmmc: [
           { required: true, message: "请输入项目名称", trigger: "blur" },
           { min: 3, max: 10, message: "长度在 3 到 5 个字符", trigger: "blur" },
@@ -451,26 +449,29 @@ export default {
       //       this.$emit("updateParent", "loading", false);
       //       this.reset();
       //     }, 500);
+
+      //更新范围
+      var _temp = this.$refs.range.getRange();
+      // this.ruleForm.xzfw = _temp.xzfw;
+      this.ruleForm.xzmj = _temp.xzmj || hgxfx.xzmj;
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
           const loading = this.$loading({
-          lock: true,
-          text: '分析中',
-          spinner: 'el-icon-loading',
-          background: 'rgba(0, 0, 0, 0.7)'
-        });
-        setTimeout(() => {
-          loading.close();
-          this.activeTabs = 'lsju'
-          this.$emit('updateParent','activeTabs','lsju')
-          this.$message({
-          message: '分析成功!',
-          type: 'success'
-        });
-          this.reset();
-        }, 2000);
- 
-
+            lock: true,
+            text: "分析中",
+            spinner: "el-icon-loading",
+            background: "rgba(0, 0, 0, 0.7)",
+          });
+          setTimeout(() => {
+            loading.close();
+            this.activeTabs = "lsju";
+            this.$emit("updateParent", "activeTabs", "lsju");
+            this.$message({
+              message: "分析成功!",
+              type: "success",
+            });
+            this.reset();
+          }, 2000);
         } else {
           console.log("error submit!!");
           return false;
@@ -486,10 +487,11 @@ export default {
         ydmjs: "", //用地面积开始
         ydmje: "", //用地面积结束
         sjy: "国土空间总体规划", //数据源
+        xzmj: 0,
       }),
-      this.tableData = []
-        this.$refs.ruleForm.resetFields();
-        this.$refs.range.reset();
+        (this.tableData = []);
+      this.$refs.ruleForm.resetFields();
+      this.$refs.range.reset();
     },
     // 影响因子条件展示
     yztj(val) {
@@ -521,10 +523,12 @@ export default {
     justify-content: space-between;
   }
   .range {
+    // flex: 1;
+    // width: calc(100% - 100px);
+    // position: absolute;
+    // left: 100px;
     flex: 1;
-    width: calc(100% - 100px);
-    position: absolute;
-    left: 100px;
+    width: 100%;
   }
 
   .treeDiv {
@@ -533,14 +537,6 @@ export default {
     // padding: 7px;
     margin-bottom: 10px;
     overflow-y: auto;
-
-    // 设置行的背景颜色
-    // /deep/ .el-table tr:nth-child(even) {
-    //   background-color: transparent !important;
-    // }
-    // /deep/ .el-table tr:nth-child(odd) {
-    //   background-color: transparent !important;
-    // }
   }
 }
 /deep/ .el-input .el-input--mini .el-input--suffix {

+ 30 - 5
static/Config/config.js

@@ -165,7 +165,6 @@ window.projectinformation = [
     fundingsource: "企业投资",
   },
 ];
-
 //报建模型
 window.constructionmodel = [
   {
@@ -173,8 +172,8 @@ window.constructionmodel = [
     projectinformationid: "ertyuiop",
     modelname: "报建模型1",
     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",
+    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,
@@ -213,7 +212,7 @@ window.constructionmodel = [
 
     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",
+    dataSourceName: "DongAnZhuoYueCheng2",
     datasetName: "建筑轮廓",
     selectionStatus: true,
     designunit: "筑博设计股份有限公司",
@@ -226,7 +225,6 @@ window.constructionmodel = [
   },
 ];
 
-
 //图层服务查询分组树
 window.layerTree = [
   {
@@ -1010,6 +1008,14 @@ window.dict = {
     { label: "工业建筑", value: "工业建筑" },
     { label: "农业建筑", value: "农业建筑" },
   ],
+  //基准地价中土地用途
+  zt_jzdj_LandUse: [
+    { label: "商服用地", value: "商服用地" },
+    { label: "住宅用地", value: "住宅用地" },
+    { label: "工矿仓储用地", value: "工矿仓储用地" },
+    { label: "公共服务项目用地(一)", value: "公共服务项目用地(一)" },
+    { label: "公共服务项目用地(二)", value: "公共服务项目用地(二)" },
+  ],
 };
 //白膜可通过这里添加自发光纹理
 window.NightViewLayerName = [
@@ -1449,5 +1455,24 @@ window.BenchmarkLandPriceList = [
     ProjectType: "居住建筑",
     ConstructionUnit: "建设单位名称",
     analysisDate: "2024-06-01 10:11:21",
+    AnalysisStatus: "完成",
+  },
+  {
+    id: "wesdsdfw",
+    ProjectScope: [],
+    ProjectName: "基准地价分析2",
+    ProjectType: "居住建筑",
+    ConstructionUnit: "建设单位名称",
+    analysisDate: "2024-06-01 10:11:21",
+    AnalysisStatus: "正在分析",
+  },
+  {
+    id: "wessfdsdfw",
+    ProjectScope: [],
+    ProjectName: "基准地价分析3",
+    ProjectType: "居住建筑",
+    ConstructionUnit: "建设单位名称",
+    analysisDate: "2024-06-01 10:11:21",
+    AnalysisStatus: "异常",
   },
 ];

+ 64 - 13
static/css/index.css

@@ -124,6 +124,7 @@ div::-webkit-scrollbar-track {
   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;
@@ -140,10 +141,12 @@ 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);
 }
@@ -179,7 +182,7 @@ div::-webkit-scrollbar-track {
   z-index: -1;
 }
 
-.vl-notice-title > span {
+.vl-notice-title>span {
   font-size: 16px;
   font-weight: 700;
   letter-spacing: 1px;
@@ -197,7 +200,7 @@ div::-webkit-scrollbar-track {
   top: 10px !important;
 }
 
-.lv-icon-maxmini > i {
+.lv-icon-maxmini>i {
   color: #fff !important;
 }
 
@@ -205,24 +208,27 @@ div::-webkit-scrollbar-track {
   display: none;
 }
 
-.el-input > input,
+.el-input>input,
 .el-select-dropdown,
-.el-textarea > textarea {
+.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; */
+  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 {
+
+.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;
 }
@@ -264,6 +270,7 @@ div::-webkit-scrollbar-track {
   color: #fff !important;
   background-color: rgba(255, 255, 255, 0.35) !important;
 }
+
 .el-cascader__dropdown,
 .el-picker-panel,
 .el-picker-panel__footer {
@@ -271,6 +278,7 @@ div::-webkit-scrollbar-track {
   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;
 }
@@ -284,14 +292,14 @@ div::-webkit-scrollbar-track {
   background: rgba(63, 148, 245, 0.432) !important;
 }
 
-.el-time-panel__footer > button:nth-child(1),
+.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-pagination>button,
 .el-pager li {
   color: #c2c2c2 !important;
   background-color: rgba(4, 28, 50, 0.5) !important;
@@ -309,16 +317,18 @@ div::-webkit-scrollbar-track {
 .el-cascader-node {
   color: #fff !important;
 }
+
 .el-cascader-node:hover {
   color: #fff !important;
   background-color: rgba(255, 255, 255, 0.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 {
+.el-checkbox__input>.el-checkbox__inner {
   border: 1px solid #96a9b7;
   background-color: rgba(4, 28, 50, 0.6);
 }
@@ -330,19 +340,60 @@ div::-webkit-scrollbar-track {
   color: #20a0fc;
 }
 
-.el-icon-s-operation + a,
-.el-icon-location-outline + a,
-.el-icon-share + a,
-.el-icon-delete + a {
+.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;
 }
+
+.el-message-box {
+  background-color: #02213e9a  !important;
+  border: none !important;
+  color: #fff;
+}
+
+.el-message-box__header {
+  background-color: transparent !important;
+  padding: 10px 16px 7px !important
+}
+
+.el-message-box__title {
+  color: #fff !important;
+  border-bottom: 1px solid #2A5277 !important;
+  height: 30px !important;
+}
+
+.el-message-box__content {
+  color: #fff !important;
+}
+
+.el-message-box__headerbtn .el-message-box__close {
+  color: #fff !important;
+  /* background-color: rgba(51, 95, 135, 1) !important;
+  border-radius: 4px;
+  padding: 2px; */
+  width: 22px;
+  height: 22px;
+  background: #335F87;
+  border-radius:4px;
+  border: 1px solid rgba(123, 162, 198, 0.5);
+}
+.el-message-box__headerbtn{
+  top: 13px !important;
+  border-radius: 4px;
+}
+.el-message-box__status.el-icon-warning {
+  color: #2d8cf0b3;
+}

二进制
static/images/ghzc/second_titlebg.png


二进制
static/images/overview/gdbh_echart_gdlc_legend.png


二进制
static/images/overview/gdbh_echart_gdlr_legend.png


二进制
static/images/overview/ht.png


二进制
static/images/overview/icon_info (2).png


二进制
static/images/overview/icon_info.png


二进制
static/images/overview/icon信息.png


二进制
static/images/overview/masking_bottom.png


二进制
static/images/overview/masking_left.png


二进制
static/images/overview/masking_right.png


二进制
static/images/overview/masking_top.png


二进制
static/images/overview/sjd.png


二进制
static/images/overview/st.png


二进制
static/images/overview/右侧附属信息.png


二进制
static/images/overview/左侧主信息.png


二进制
static/images/overview/驾驶背景遮罩.png