Bläddra i källkod

中图20250523版本更新

lkk 2 månader sedan
förälder
incheckning
75889a930a

+ 2 - 0
src/views/ConstructionApplication3D/MXDBinfo/MXDBinfo.vue

@@ -367,6 +367,7 @@ export default {
           var land = result.buildings.find(
             (t) => t.landNo == item.KG_Data.DKBM
           );
+          var parks = result.parks.find((t) => t.landNo == item.KG_Data.DKBM);
           if (land == null) continue;
           tableDataList[i].FA_Data.JZMJ = land.mj;
           tableDataList[i].FA_Data.JRJZMJ = land.jrmj;
@@ -382,6 +383,7 @@ export default {
           tableDataList[i].TJFA_Data.JZMJ = land.famj;
           tableDataList[i].TJFA_Data.JRJZMJ = land.fajrmj;
           tableDataList[i].infoData = land;
+          tableDataList[i].ParkData = parks;
         }
       }
       return tableDataList;

+ 1 - 1
src/views/ConstructionApplication3D/RSAnalysis/RSAnalysis.vue

@@ -847,7 +847,7 @@ export default {
       // that.flyHOld = that.flyH;
       //注册站点到达事件
       flyManager.stopArrived.addEventListener(function (routeStop) {
-        routeStop.waitTime = 1; // 在每个站点处停留1s
+        routeStop.waitTime = 0; // 在每个站点处停留1s
       });
       flyManager.readyPromise.then(function () {
         // 飞行路线就绪

+ 1 - 2
src/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue

@@ -31,7 +31,7 @@
         <el-row :gutter="10" style="display: flex; align-items: center">
           <el-col :span="6"> 日照时间范围: </el-col>
           <el-col :span="18">
-            <el-slider 
+            <el-slider
               size="mini"
               v-model="datavalue"
               range
@@ -2049,7 +2049,6 @@ export default {
 };
 </script>
 <style lang="scss">
-
 @import "@/../../zt.scss";
 @import "@/../../datePicker.scss";
 </style>

+ 38 - 19
src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue

@@ -21,7 +21,7 @@
                 <el-button
                   size="mini"
                   type="default"
-                  @click="openZBinfo(DKZBData.infoData)"
+                  @click="openZBinfo(DKZBData)"
                   icon="el-icon-view "
                   >详情</el-button
                 >
@@ -194,6 +194,7 @@ export default {
           const Data = element[Datai];
           let DKZBData = {
             infoData: Data.infoData,
+            ParkData: Data.ParkData,
             MName: Data.Minfo.modelname,
             DKBM: Data.KG_Data.DKBM,
           };
@@ -209,15 +210,16 @@ export default {
           let TableData = [];
           let YDMJrow = {};
           YDMJrow.zbmc = "用地总面积";
+          YDMJrow.tjfazb = Number(Data.TJFA_Data.YDMJ).toFixed(2);
           YDMJrow.fazbyg = Number(Data.FA_Data.YDMJ).toFixed(2);
           YDMJrow.kgyq = Number(Data.KG_Data.YDMJ).toFixed(2);
 
           if (!rgzb.YDMJ) {
-            rgzb.YDMJ = (that.quNaN(YDMJrow.fazbyg) * that.earthRadius).toFixed(
-              2
-            );
+            rgzb.YDMJ = (
+              that.quNaN(YDMJrow.fazbyg) * that.LocalCoorearthRadius
+            ).toFixed(2);
             YDMJrow.rghszb = (
-              that.quNaN(YDMJrow.fazbyg) * that.earthRadius
+              that.quNaN(YDMJrow.fazbyg) * that.LocalCoorearthRadius
             ).toFixed(2);
             YDMJrow.rgzbid = rgzbid;
             YDMJrow.rgzbName = "YDMJ";
@@ -248,11 +250,11 @@ export default {
           JZMJrow.kgyq = Number(Data.KG_Data.JZMJ).toFixed(2);
 
           if (!rgzb.JZMJ) {
-            rgzb.JZMJ = (that.quNaN(JZMJrow.fazbyg) * that.earthRadius).toFixed(
-              2
-            );
+            rgzb.JZMJ = (
+              that.quNaN(JZMJrow.fazbyg) * that.LocalCoorearthRadius
+            ).toFixed(2);
             JZMJrow.rghszb = (
-              that.quNaN(JZMJrow.fazbyg) * that.earthRadius
+              that.quNaN(JZMJrow.fazbyg) * that.LocalCoorearthRadius
             ).toFixed(2);
             JZMJrow.rgzbid = rgzbid;
             JZMJrow.rgzbName = "JZMJ";
@@ -275,14 +277,15 @@ export default {
 
           let JDMJrow = {};
           JDMJrow.zbmc = "基底面积";
+          JDMJrow.tjfazb = Number(Data.TJFA_Data.JDMJ).toFixed(2);
           JDMJrow.fazbyg = Number(Data.FA_Data.JDMJ).toFixed(2);
           JDMJrow.kgyq = Data.KG_Data.JDMJ;
           if (!rgzb.JDMJ) {
-            rgzb.JDMJ = (that.quNaN(JDMJrow.fazbyg) * that.earthRadius).toFixed(
-              2
-            );
+            rgzb.JDMJ = (
+              that.quNaN(JDMJrow.fazbyg) * that.LocalCoorearthRadius
+            ).toFixed(2);
             JDMJrow.rghszb = (
-              that.quNaN(JDMJrow.fazbyg) * that.earthRadius
+              that.quNaN(JDMJrow.fazbyg) * that.LocalCoorearthRadius
             ).toFixed(2);
             JDMJrow.rgzbid = rgzbid;
             JDMJrow.rgzbName = "JDMJ";
@@ -316,10 +319,10 @@ export default {
           }
           if (!rgzb.JRJZMJ) {
             rgzb.JRJZMJ = (
-              that.quNaN(JRJZMJrow.fazbyg) * that.earthRadius
+              that.quNaN(JRJZMJrow.fazbyg) * that.LocalCoorearthRadius
             ).toFixed(2);
             JRJZMJrow.rghszb = (
-              that.quNaN(JRJZMJrow.fazbyg) * that.earthRadius
+              that.quNaN(JRJZMJrow.fazbyg) * that.LocalCoorearthRadius
             ).toFixed(2);
             JRJZMJrow.rgzbid = rgzbid;
             JRJZMJrow.rgzbName = "JRJZMJ";
@@ -346,6 +349,11 @@ export default {
           debugger;
           let RJLrow = {};
           RJLrow.zbmc = "容积率";
+          if (!Data.TJFA_Data.RJL || Data.TJFA_Data.RJL == "NaN") {
+            RJLrow.tjfazb = "-";
+          } else {
+            RJLrow.tjfazb = Data.TJFA_Data.RJL;
+          }
           if (Data.FA_Data.RJL == "NaN") {
             RJLrow.fazbyg = "-";
           } else {
@@ -382,7 +390,11 @@ export default {
 
           let JZMDrow = {};
           JZMDrow.zbmc = "建筑密度";
-
+          if (!Data.TJFA_Data.JZMD || Data.TJFA_Data.JZMD == "NaN") {
+            JZMDrow.tjfazb = "-";
+          } else {
+            JZMDrow.tjfazb = Data.TJFA_Data.JZMD;
+          }
           if (Data.FA_Data.JZMD == "NaN") {
             JZMDrow.fazbyg = "-";
           } else {
@@ -416,6 +428,12 @@ export default {
 
           let JZXGDrow = {};
           JZXGDrow.zbmc = "建筑限高";
+
+          if (!Data.TJFA_Data.JZGD || Data.TJFA_Data.JZGD == "NaN") {
+            JZXGDrow.tjfazb = "-";
+          } else {
+            JZXGDrow.tjfazb = Data.TJFA_Data.JZGD;
+          }
           JZXGDrow.fazbyg = Data.FA_Data.JZGD;
           JZXGDrow.kgyq = Data.KG_Data.JZXGX + "/" + Data.KG_Data.JZXGD;
           if (!rgzb.JZGD) {
@@ -444,6 +462,7 @@ export default {
           let LDLrow = {};
           LDLrow.zbmc = "绿地率";
           LDLrow.fazbyg = Data.FA_Data.LDL;
+          LDLrow.tjfazb = Number(Data.TJFA_Data.LDL).toFixed(2);
           LDLrow.kgyq =
             (Data.KG_Data.LDLX || 0) + "/" + (Data.KG_Data.LDLD || 0);
 
@@ -521,9 +540,9 @@ export default {
     },
     /**
      * 弹窗显示详情
-     * @param infoData
+     * @param Data
      */
-    openZBinfo(infoData) {
+    openZBinfo(Data) {
       let w = document.body.offsetWidth;
       let h = document.body.offsetHeight;
       //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
@@ -535,7 +554,7 @@ export default {
         content: {
           content: detailedInfo, //传递的组件对象
           parent: this, //当前的vue对象
-          data: { info: { infoData } }, //props
+          data: { info: { infoData: Data.infoData, ParkData: Data.ParkData } }, //props
         },
         // offset: [left, top], //left top
         area: ["64rem", "40rem"], //宽 高

+ 13 - 9
src/views/ConstructionApplication3D/ZBFXAnalysisinfo/detailedInfo.vue

@@ -10,10 +10,11 @@
   >
     <el-container style="height: 100%">
       <el-header style="height: 4rem">
-        <el-descriptions v-if="tableData" border size="mini" :column="4">
+        <el-descriptions v-if="tableData" border size="mini" :column="3">
           <el-descriptions-item label="地块编码">{{
             tableData.landNo
           }}</el-descriptions-item>
+
           <el-descriptions-item label="建筑面积"
             >{{ Number(tableData.mj).toFixed(2) }}m<sup
               >2</sup
@@ -24,11 +25,8 @@
               >2</sup
             ></el-descriptions-item
           >
-          <el-descriptions-item label="机动车位">
-            {{ tableData.jdcCount }}
-          </el-descriptions-item>
-          <el-descriptions-item label="非机动车位">{{
-            tableData.fjdcCount
+          <el-descriptions-item label="楼栋数量">{{
+            tableData.buildNum
           }}</el-descriptions-item>
           <el-descriptions-item label="计算书面积"
             >{{ Number(tableData.famj).toFixed(2) }}m<sup
@@ -40,9 +38,13 @@
               >2</sup
             ></el-descriptions-item
           >
-          <el-descriptions-item label="楼栋数量">{{
-            tableData.buildNum
-          }}</el-descriptions-item>
+
+          <!-- <el-descriptions-item label="机动车位">
+            {{ ParkData ? ParkData.jdcCount : 0 }}
+          </el-descriptions-item>
+          <el-descriptions-item label="非机动车位">{{
+            ParkData ? ParkData.fjdcCount : 0
+          }}</el-descriptions-item> -->
         </el-descriptions>
         <el-empty v-if="!tableData" description="未查询到数据"></el-empty>
       </el-header>
@@ -137,6 +139,7 @@ export default {
   data() {
     return {
       tableData: [],
+      ParkData: [],
     };
   },
   props: {
@@ -172,6 +175,7 @@ export default {
     init() {
       debugger;
       this.tableData = this.info.infoData;
+      this.ParkData = this.info.ParkData;
     },
   },
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 536 - 253
src/views/ConstructionApplication3D/billboard/addBiillboardModel.vue


+ 1 - 1
src/views/ConstructionApplication3D/billboard/billboardCheckList.vue

@@ -198,7 +198,7 @@ export default {
         },
         offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
         area: [width.toString() + "px", height.toString() + "px"],
-        title: "模型审查",
+        title: "广告牌审查",
         maxmin: false,
         shade: false, //是否显示遮罩
         shadeClose: false, //点击遮罩是否关闭

+ 61 - 28
src/views/ConstructionApplication3D/billboard/billboardChekInfo.vue

@@ -40,6 +40,8 @@
         type="textarea"
         :autosize="{ minRows: 2, maxRows: 4 }"
         placeholder="请输入审查意见"
+        maxlength="500"
+        show-word-limit
         v-model="ReviewComments"
       >
       </el-input>
@@ -266,7 +268,7 @@ export default {
                     }
                     break;
                   case "001020102": //宽度应以建筑开间为单元,且广告高度不得大于3米
-                    var gggd = that.info.templateTop.xL;
+                    var gggd = that.info.templateTop.yL;
                     if (gggd > 3) {
                       ruleResult = "false";
                     } else {
@@ -299,34 +301,36 @@ export default {
                     }
 
                     break;
-                  case "001020103": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)
-                  case "00102020205": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告外表面距离墙面不得超过0.5米)
-                  case "00102020104": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)
-                    debugger;
-                    var points1 = [];
-                    var ltData = await this.getloutiData();
-                    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 - 0.8) + that.info.templateTop.zL / 2;
-                      if (jl1 < 0.3) {
-                        ruleResult = "false";
-                      } else {
-                        ruleResult = "true";
-                      }
-                    }
+                  // //改为手动
+                  // case "001020103": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)
+                  // case "00102020205": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告外表面距离墙面不得超过0.5米)
+                  // case "00102020104": //户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)
+                  //   // debugger;
+                  //   // var points1 = [];
+                  //   // var ltData = await this.getloutiData();
+                  //   // 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 - 0.8) + that.info.templateTop.zL / 2;
+                  //   //   if (jl1 < 0.3) {
+                  //   //     ruleResult = "false";
+                  //   //   } else {
+                  //   //     ruleResult = "true";
+                  //   //   }
+                  //   // }
+
+                  //   break;
 
-                    break;
                   case "00102020201": //出挑部分的底部距离地面小于3米
                     var ggxygd =
                       that.info.templateTop.z -
@@ -507,6 +511,35 @@ export default {
                       ruleResult = "false";
                     }
                     break;
+                  case "0050103": //
+                    debugger;
+                    var AttachedData = {};
+                    if (that.info.AttachedData) {
+                      if (typeof that.info.AttachedData === "string") {
+                        AttachedData = JSON.parse(that.info.AttachedData);
+                      } else {
+                        AttachedData = this.info.AttachedData;
+                      }
+                    }
+
+                    if (Object.keys(AttachedData).length > 0) {
+                      var ydlxCode = AttachedData.find(
+                        (c) => c.key == "yongdileixing"
+                      ).data.value;
+                      var ggytCode = AttachedData.find(
+                        (c) => c.key == "guanggaoyongtu"
+                      ).data.value;
+                      // 接下来过滤条件
+                      var sdf = window.billboardLEDList.find(
+                        (c) => c.ydlxTypeCode == ydlxCode
+                      );
+                      for (var index = 0; index < sdf.ggyt.length; index++) {
+                        var ggyt = sdf.ggyt[index];
+                        if (ggyt.ggytTypeCode == ggytCode) {
+                          ruleResult = ggyt.isAllow + "";
+                        }
+                      }
+                    }
 
                   default:
                     break;

+ 295 - 179
src/views/ConstructionApplication3D/billboard/billboardDesign.vue

@@ -66,7 +66,7 @@
                   class="el-icon-folder-add"
                   @click="importModel(item)"
                 ></i>
-                <a @click="importModel(item)">导入模型</a>
+                <a @click="importModel(item)">导入广告牌</a>
               </el-col>
               <el-col class="con-col hover_style" style="cursor: pointer">
                 <i
@@ -355,7 +355,7 @@ export default {
         },
         offset: [left.toString(), top.toString()], //left top  左上角(left=430px/2;top=(800px+header高)/2)
         area: [width.toString() + "px", height.toString() + "px"],
-        title: "模型审查列表",
+        title: "广告牌审查列表",
         maxmin: true,
         shade: false, //是否显示遮罩
         shadeClose: false, //点击遮罩是否关闭
@@ -531,7 +531,14 @@ export default {
         if (billboardModel.template) {
           var imageurl = "../../../../static/ModelData/billboard/1.jpg";
           var modelurl = "../../../../static/ModelData/billboard/box.gltf";
-          switch (billboardModel.template.ModelType) {
+          debugger;
+          var sd = billboardModel.template.ModelType;
+
+          //接下来处理下面的
+          // if (billboardModel.template.isImportModel == "true") {
+          //   sd = "ModelBillboard";
+          // }
+          switch (sd) {
             //矩形广告
             case "rectangleBillboard":
               var orientation = Cesium.Transforms.headingPitchRollQuaternion(
@@ -548,26 +555,50 @@ export default {
                 Number(billboardModel.templateTop.y),
                 Number(billboardModel.templateTop.z)
               );
-              var topentity = viewer.entities.add({
-                id: "top_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: p,
-                /**
-                 * 长方体
-                 */
-                box: {
-                  dimensions: new Cesium.Cartesian3(
-                    Number(billboardModel.templateTop.xL),
-                    Number(billboardModel.templateTop.zL),
-                    Number(billboardModel.templateTop.yL)
-                  ),
+
+              if (billboardModel.template.isImportModel == "true") {
+                var url = billboardModel.template.templateTopUrl || modelurl;
+
+                if (!url.includes("../../../")) {
+                  url = window.ZTaxiosURI + url;
+                }
+                var entity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
                   show: true,
-                  material: Cesium.Color.LIGHTGREEN,
-                },
-                orientation: orientation,
-              });
-              entityList.push(topentity);
+                  position: p,
+                  /**
+                   * 模型
+                   */
+                  model: {
+                    uri: url,
+                    scale: billboardModel.templateTop.scaleL,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(entity);
+              } else {
+                var topentity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: p,
+                  /**
+                   * 长方体
+                   */
+                  box: {
+                    dimensions: new Cesium.Cartesian3(
+                      Number(billboardModel.templateTop.xL),
+                      Number(billboardModel.templateTop.zL),
+                      Number(billboardModel.templateTop.yL)
+                    ),
+                    show: true,
+                    material: Cesium.Color.LIGHTGREEN,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(topentity);
+              }
 
               break;
             // 立杆型广告
@@ -580,36 +611,39 @@ export default {
                   Cesium.Math.toRadians(billboardModel.rotateX)
                 )
               );
-              var c_p = Cesium.Cartesian3.fromDegrees(
-                billboardModel.templateCentre.x,
-                billboardModel.templateCentre.y,
-                billboardModel.templateCentre.z
-              );
-              var Centreentity = viewer.entities.add({
-                id: "Centre_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: c_p,
-                /**
-                 * 圆柱
-                 */
-                cylinder: {
-                  length: billboardModel.templateCentre.yL, //圆柱体长度
-                  topRadius: billboardModel.templateCentre.rL, //圆柱顶部半径
-                  bottomRadius: billboardModel.templateCentre.rL, //圆柱体底部半径
-                  material: Cesium.Color.LIGHTGREEN,
-                  shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
-                },
-                orientation: Cesium.Transforms.headingPitchRollQuaternion(
-                  newposition,
-                  new Cesium.HeadingPitchRoll(
-                    Cesium.Math.toRadians(billboardModel.rotateZ),
-                    Cesium.Math.toRadians(0),
-                    Cesium.Math.toRadians(0)
-                  )
-                ),
-              });
-              entityList.push(Centreentity);
+              if (billboardModel.template.isImportModel != "true") {
+                var c_p = Cesium.Cartesian3.fromDegrees(
+                  billboardModel.templateCentre.x,
+                  billboardModel.templateCentre.y,
+                  billboardModel.templateCentre.z
+                );
+
+                var Centreentity = viewer.entities.add({
+                  id: "Centre_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: c_p,
+                  /**
+                   * 圆柱
+                   */
+                  cylinder: {
+                    length: billboardModel.templateCentre.yL, //圆柱体长度
+                    topRadius: billboardModel.templateCentre.rL, //圆柱顶部半径
+                    bottomRadius: billboardModel.templateCentre.rL, //圆柱体底部半径
+                    material: Cesium.Color.LIGHTGREEN,
+                    shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
+                  },
+                  orientation: Cesium.Transforms.headingPitchRollQuaternion(
+                    newposition,
+                    new Cesium.HeadingPitchRoll(
+                      Cesium.Math.toRadians(billboardModel.rotateZ),
+                      Cesium.Math.toRadians(0),
+                      Cesium.Math.toRadians(0)
+                    )
+                  ),
+                });
+                entityList.push(Centreentity);
+              }
 
               //计算当前实体的xyz
 
@@ -618,28 +652,52 @@ export default {
                 Number(billboardModel.templateTop.y),
                 Number(billboardModel.templateTop.z)
               );
-              var topentity = viewer.entities.add({
-                id: "top_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: t_p,
-                /**
-                 * 矩形
-                 */
-                box: {
-                  dimensions: new Cesium.Cartesian3(
-                    Number(billboardModel.templateTop.xL),
-                    Number(billboardModel.templateTop.zL),
-                    Number(billboardModel.templateTop.yL)
-                  ),
-                  material: Cesium.Color.LIGHTGREEN,
-                  // outline: false,
-                  // outlineColor: Cesium.Color.SPRINGGREEN,
-                  // outlineWidth: 1,
-                },
-                orientation: orientation,
-              });
-              entityList.push(topentity);
+
+              if (billboardModel.template.isImportModel == "true") {
+                var url = billboardModel.template.templateTopUrl || modelurl;
+
+                if (!url.includes("../../../")) {
+                  url = window.ZTaxiosURI + url;
+                }
+                var entity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: t_p,
+                  /**
+                   * 模型
+                   */
+                  model: {
+                    uri: url,
+                    scale: billboardModel.templateTop.scaleL,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(entity);
+              } else {
+                var topentity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: t_p,
+                  /**
+                   * 矩形
+                   */
+                  box: {
+                    dimensions: new Cesium.Cartesian3(
+                      Number(billboardModel.templateTop.xL),
+                      Number(billboardModel.templateTop.zL),
+                      Number(billboardModel.templateTop.yL)
+                    ),
+                    material: Cesium.Color.LIGHTGREEN,
+                    // outline: false,
+                    // outlineColor: Cesium.Color.SPRINGGREEN,
+                    // outlineWidth: 1,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(topentity);
+              }
 
               break;
             //底座型立杆广告
@@ -652,71 +710,76 @@ export default {
                   Cesium.Math.toRadians(billboardModel.rotateX)
                 )
               );
-              var b_p = Cesium.Cartesian3.fromDegrees(
-                billboardModel.templateBottom.x,
-                billboardModel.templateBottom.y,
-                billboardModel.templateBottom.z
-              );
-              var bottomentity = viewer.entities.add({
-                id: "bottom_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: b_p,
-                /**
-                 * 矩形
-                 */
-                box: {
-                  dimensions: new Cesium.Cartesian3(
-                    billboardModel.templateBottom.xL,
-                    billboardModel.templateBottom.zL,
-                    billboardModel.templateBottom.yL
+              if (billboardModel.template.isImportModel != "true") {
+                var b_p = Cesium.Cartesian3.fromDegrees(
+                  billboardModel.templateBottom.x,
+                  billboardModel.templateBottom.y,
+                  billboardModel.templateBottom.z
+                );
+
+                var bottomentity = viewer.entities.add({
+                  id: "bottom_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: b_p,
+                  /**
+                   * 矩形
+                   */
+                  box: {
+                    dimensions: new Cesium.Cartesian3(
+                      billboardModel.templateBottom.xL,
+                      billboardModel.templateBottom.zL,
+                      billboardModel.templateBottom.yL
+                    ),
+                    material: Cesium.Color.LIGHTGREEN,
+                    // outline: false,
+                    // outlineColor: Cesium.Color.SPRINGGREEN,
+                    // outlineWidth: 1,
+                  },
+                  orientation: Cesium.Transforms.headingPitchRollQuaternion(
+                    newposition,
+                    new Cesium.HeadingPitchRoll(
+                      Cesium.Math.toRadians(billboardModel.rotateZ),
+                      Cesium.Math.toRadians(0),
+                      Cesium.Math.toRadians(0)
+                    )
                   ),
-                  material: Cesium.Color.LIGHTGREEN,
-                  // outline: false,
-                  // outlineColor: Cesium.Color.SPRINGGREEN,
-                  // outlineWidth: 1,
-                },
-                orientation: Cesium.Transforms.headingPitchRollQuaternion(
-                  newposition,
-                  new Cesium.HeadingPitchRoll(
-                    Cesium.Math.toRadians(billboardModel.rotateZ),
-                    Cesium.Math.toRadians(0),
-                    Cesium.Math.toRadians(0)
-                  )
-                ),
-              });
-              entityList.push(bottomentity);
+                });
+                entityList.push(bottomentity);
+              }
+              if (billboardModel.template.isImportModel != "true") {
+                var c_p = Cesium.Cartesian3.fromDegrees(
+                  billboardModel.templateCentre.x,
+                  billboardModel.templateCentre.y,
+                  billboardModel.templateCentre.z
+                );
 
-              var c_p = Cesium.Cartesian3.fromDegrees(
-                billboardModel.templateCentre.x,
-                billboardModel.templateCentre.y,
-                billboardModel.templateCentre.z
-              );
-              var Centreentity = viewer.entities.add({
-                id: "Centre_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: c_p,
-                /**
-                 * 圆柱
-                 */
-                cylinder: {
-                  length: billboardModel.templateCentre.yL, //圆柱体长度
-                  topRadius: billboardModel.templateCentre.rL, //圆柱顶部半径
-                  bottomRadius: billboardModel.templateCentre.rL, //圆柱体底部半径
-                  material: Cesium.Color.LIGHTGREEN,
-                  shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
-                },
-                orientation: Cesium.Transforms.headingPitchRollQuaternion(
-                  newposition,
-                  new Cesium.HeadingPitchRoll(
-                    Cesium.Math.toRadians(billboardModel.rotateZ),
-                    Cesium.Math.toRadians(0),
-                    Cesium.Math.toRadians(0)
-                  )
-                ),
-              });
-              entityList.push(Centreentity);
+                var Centreentity = viewer.entities.add({
+                  id: "Centre_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: c_p,
+                  /**
+                   * 圆柱
+                   */
+                  cylinder: {
+                    length: billboardModel.templateCentre.yL, //圆柱体长度
+                    topRadius: billboardModel.templateCentre.rL, //圆柱顶部半径
+                    bottomRadius: billboardModel.templateCentre.rL, //圆柱体底部半径
+                    material: Cesium.Color.LIGHTGREEN,
+                    shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
+                  },
+                  orientation: Cesium.Transforms.headingPitchRollQuaternion(
+                    newposition,
+                    new Cesium.HeadingPitchRoll(
+                      Cesium.Math.toRadians(billboardModel.rotateZ),
+                      Cesium.Math.toRadians(0),
+                      Cesium.Math.toRadians(0)
+                    )
+                  ),
+                });
+                entityList.push(Centreentity);
+              }
 
               var t_p = Cesium.Cartesian3.fromDegrees(
                 Number(billboardModel.templateTop.x),
@@ -724,28 +787,51 @@ export default {
                 Number(billboardModel.templateTop.z)
               );
 
-              var topentity = viewer.entities.add({
-                id: "top_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: t_p,
-                /**
-                 * 矩形
-                 */
-                box: {
-                  dimensions: new Cesium.Cartesian3(
-                    Number(billboardModel.templateTop.xL),
-                    Number(billboardModel.templateTop.zL),
-                    Number(billboardModel.templateTop.yL)
-                  ),
-                  material: Cesium.Color.LIGHTGREEN,
-                  // outline: false,
-                  // outlineColor: Cesium.Color.SPRINGGREEN,
-                  // outlineWidth: 1,
-                },
-                orientation: orientation,
-              });
-              entityList.push(topentity);
+              if (billboardModel.template.isImportModel == "true") {
+                var url = billboardModel.template.templateTopUrl || modelurl;
+
+                if (!url.includes("../../../")) {
+                  url = window.ZTaxiosURI + url;
+                }
+                var entity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: t_p,
+                  /**
+                   * 模型
+                   */
+                  model: {
+                    uri: url,
+                    scale: billboardModel.templateTop.scaleL,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(entity);
+              } else {
+                var topentity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: t_p,
+                  /**
+                   * 矩形
+                   */
+                  box: {
+                    dimensions: new Cesium.Cartesian3(
+                      Number(billboardModel.templateTop.xL),
+                      Number(billboardModel.templateTop.zL),
+                      Number(billboardModel.templateTop.yL)
+                    ),
+                    material: Cesium.Color.LIGHTGREEN,
+                    // outline: false,
+                    // outlineColor: Cesium.Color.SPRINGGREEN,
+                    // outlineWidth: 1,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(topentity);
+              }
 
               break;
             //实物型广告(模型型)
@@ -799,31 +885,61 @@ export default {
                 Number(billboardModel.templateTop.y),
                 Number(billboardModel.templateTop.z)
               );
-              var url = billboardModel.template.templateTopUrl || imageurl;
-              var entity = viewer.entities.add({
-                id: "top_billboard_" + billboardModel.id,
-                name: "gltf",
-                show: true,
-                position: p,
-                /**
-                 * 广告牌
-                 */
-                billboard: {
-                  image: url,
-                  width: Number(billboardModel.templateTop.xL),
-                  height: Number(billboardModel.templateTop.yL),
-                  rotation: Number(billboardModel.rotateX),
-                  sizeInMeters: true,
-                },
-                orientation: orientation,
-              });
-              entityList.push(entity);
+              if (billboardModel.template.isImportModel == "true") {
+                var url = billboardModel.template.templateTopUrl || modelurl;
+
+                if (!url.includes("../../../")) {
+                  url = window.ZTaxiosURI + url;
+                }
+                var entity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: p,
+                  /**
+                   * 模型
+                   */
+                  model: {
+                    uri: url,
+                    scale: billboardModel.templateTop.scaleL,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(entity);
+              } else {
+                var url = billboardModel.template.templateTopUrl || imageurl;
+                var entity = viewer.entities.add({
+                  id: "top_billboard_" + billboardModel.id,
+                  name: "gltf",
+                  show: true,
+                  position: p,
+                  /**
+                   * 广告牌
+                   */
+                  billboard: {
+                    image: url,
+                    width: Number(billboardModel.templateTop.xL),
+                    height: Number(billboardModel.templateTop.yL),
+                    rotation: Number(billboardModel.rotateX),
+                    sizeInMeters: true,
+                  },
+                  orientation: orientation,
+                });
+                entityList.push(entity);
+              }
+
               break;
           }
 
           var h = 0;
           if (billboardModel.templateTop.yL) {
-            h = Number(billboardModel.templateTop.yL) / 2;
+            h += Number(billboardModel.templateTop.yL) / 2;
+          }
+          if (billboardModel.templateCentre.yL) {
+            h += Number(billboardModel.templateCentre.yL) / 2;
+          }
+          if (billboardModel.templateBottom.yL) {
+            h += Number(billboardModel.templateBottom.yL) / 2;
           }
           viewer.entities.removeById("point_Billboard_" + billboardModel.id);
           lodash.remove(

+ 2 - 2
src/views/ConstructionApplication3D/billboard/billboarddetail.vue

@@ -48,9 +48,9 @@
     <el-row>
       <el-col span="24">
         <el-table :data="billboardModelList" style="width: 100%">
-          <el-table-column prop="billboardName" label="模型名称">
+          <el-table-column prop="billboardName" label="广告牌名称">
           </el-table-column>
-          <el-table-column prop="billboardType" label="模型类型">
+          <el-table-column prop="billboardType" label="广告牌类型">
           </el-table-column>
           <el-table-column label="操作">
             <template slot-scope="scope">

+ 30 - 3
src/views/ConstructionApplication3D/billboard/billboarddetailInfo.vue

@@ -6,11 +6,11 @@
     <el-row :gutter="10">
       <el-col :span="24">
         <el-row>
-          <el-col :span="7"><span>模型名称:</span></el-col>
+          <el-col :span="7"><span>广告牌名称:</span></el-col>
           <el-col :span="17"> {{ info.billboardName }}</el-col>
         </el-row>
         <el-row>
-          <el-col :span="7"><span>模型类型:</span></el-col>
+          <el-col :span="7"><span>广告牌类型:</span></el-col>
           <el-col :span="17"> {{ info.billboardType }}</el-col>
         </el-row>
         <el-row>
@@ -171,6 +171,23 @@
             <!--box-->
           </div>
         </div>
+        <!--附加参数-->
+        <div v-if="JSON.stringify(AttachedData) != '{}'">
+          <el-divider>附加参数</el-divider>
+          <div>
+            <el-row
+              v-for="AttachedDataItem in AttachedData"
+              :key="AttachedDataItem.key"
+            >
+              <el-col :span="7">
+                <span>{{ AttachedDataItem.value }}:</span></el-col
+              >
+              <el-col :span="17">
+                {{ AttachedDataItem.data.label }}
+              </el-col>
+            </el-row>
+          </div>
+        </div>
       </el-col>
     </el-row>
   </div>
@@ -179,7 +196,7 @@
 <script>
 export default {
   data() {
-    return {};
+    return { AttachedData: {} };
   },
   props: {
     info: {
@@ -236,6 +253,16 @@ export default {
     } else {
       this.info.templateTop = {};
     }
+    debugger;
+    if (this.info.AttachedData) {
+      if (typeof this.info.AttachedData === "string") {
+        this.AttachedData = JSON.parse(this.info.AttachedData);
+      } else {
+        this.AttachedData = this.info.AttachedData;
+      }
+    } else {
+      this.AttachedData = {};
+    }
 
     // this.init();
   },

+ 398 - 136
src/views/ConstructionApplication3D/billboard/editBiillboardModel.vue

@@ -5,13 +5,13 @@
   >
     <el-row>
       <el-col :span="7">
-        <span>模型名称:</span>
+        <span>广告牌名称:</span>
       </el-col>
       <el-col :span="17"
         ><el-input
           size="mini"
           type="text"
-          placeholder="请输入模型名称"
+          placeholder="请输入广告牌名称"
           v-model="billboardModel.billboardName"
         ></el-input
       ></el-col>
@@ -203,6 +203,22 @@
             selectbillboardModelRule.templateTopType == 'billboard'
           "
         >
+          <el-row v-if="billboardModel.template.isImportModel == 'true'">
+            <el-col :span="7"> <span>缩放比例:</span></el-col>
+            <el-col :span="17">
+              <el-input-number
+                name="scaleL"
+                v-model="billboardModel.templateTop.scaleL"
+                size="mini"
+                precision="2"
+                :min="0"
+                :max="100"
+                step="0.1"
+                @change="handleChange"
+                label="缩放比例:"
+              ></el-input-number>
+            </el-col>
+          </el-row>
           <el-row>
             <el-col :span="7"> <span>长(米):</span></el-col>
             <el-col :span="17">
@@ -335,6 +351,22 @@
             selectbillboardModelRule.templateTopType == 'box'
           "
         >
+          <el-row v-if="billboardModel.template.isImportModel == 'true'">
+            <el-col :span="7"> <span>缩放比例:</span></el-col>
+            <el-col :span="17">
+              <el-input-number
+                name="scaleL"
+                v-model="billboardModel.templateTop.scaleL"
+                size="mini"
+                precision="2"
+                :min="0"
+                :max="100"
+                step="0.1"
+                @change="handleChange"
+                label="缩放比例:"
+              ></el-input-number>
+            </el-col>
+          </el-row>
           <!--box-->
           <el-row>
             <el-col :span="7"> <span>长(米):</span></el-col>
@@ -498,6 +530,48 @@
           <!--box-->
         </div>
       </div>
+      <!--附加参数-->
+      <div v-if="billboardReview && billboardReview.AttachedData">
+        <el-divider>附加参数</el-divider>
+        <!--如果模型是box类型-->
+        <div>
+          <el-row
+            v-for="AttachedDataItem in billboardReview.AttachedData"
+            :key="AttachedDataItem.key"
+          >
+            <el-col :span="7">
+              <span>{{ AttachedDataItem.value }}:</span></el-col
+            >
+            <el-col
+              :span="17"
+              v-if="
+                AttachedDataItem.selectData &&
+                AttachedDataItem.selectData.length > 0
+              "
+            >
+              <el-select
+                v-model="billboardModel.AttachedData[AttachedDataItem.key]"
+                placeholder="请选择"
+                @change="UPchange"
+              >
+                <el-option
+                  v-for="item in AttachedDataItem.selectData"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-col>
+            <el-col v-else :span="17">
+              <el-input
+                v-model="billboardModel.AttachedData[AttachedDataItem.key]"
+                placeholder="请输入内容"
+              ></el-input>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
     </div>
     <el-row>
       <el-col :span="24">
@@ -577,8 +651,9 @@ export default {
         templateTop: {},
         templateCentre: {},
         templateBottom: {},
+        AttachedData: {},
       },
-      options: window.billboardReviewList.filter((c) => c.id != "wew1"),
+      options: [],
       /**
        * 编辑句柄
        */
@@ -599,6 +674,7 @@ export default {
   },
   watch: {},
   mounted() {
+    this.getGGLX();
     this.originalbillboardModel = JSON.stringify(this.info);
     this.init();
   },
@@ -609,6 +685,16 @@ export default {
     init() {
       if (this.info) {
         this.billboardModel = this.info;
+        if (this.info.AttachedData && this.info.AttachedData != "{}") {
+          //重新赋值附加参数
+          var Attached = {};
+          var sdf = JSON.parse(this.info.AttachedData);
+          sdf.forEach((element) => {
+            Attached[element.key] = element.data.value;
+          });
+          this.billboardModel.AttachedData = Attached;
+        }
+
         this.billboardModel.template = JSON.parse(this.info.template);
         this.billboardModel.templateBottom = JSON.parse(
           this.info.templateBottom
@@ -622,6 +708,27 @@ export default {
         this.changeBillboardType();
       }
     },
+    //过滤广告类型
+    getGGLX() {
+      // if (this.project.dataurl) {
+      //   this.options = window.billboardReviewList.filter(
+      //     (c) => c.id == "wew1" || c.id == "wew2sdfk32"
+      //   );
+      // } else {
+      //   this.options = window.billboardReviewList.filter((c) => c.id != "wew1");
+      // }
+      // 所有;
+      var sdf = window.billboardReviewList;
+      // //如果不是报建模型 去除报建类型
+      // if (
+      //   this.billboardModel &&
+      //   this.billboardModel.template &&
+      //   this.billboardModel.template.isImportModel == "true"
+      // ) {
+      //   sdf = this.filterTreeByReportBuilding(sdf);
+      // }
+      this.options = sdf;
+    },
 
     /**
      * 动态调整模型
@@ -646,29 +753,48 @@ export default {
           newposition,
           hpr
         );
-        switch (that.billboardReview.ModelType) {
+        debugger;
+        var sd = that.billboardReview.ModelType;
+        // if (that.billboardModel.template.isImportModel == "true") {
+        //   sd = "ModelBillboard";
+        // }
+        switch (sd) {
           //矩形广告
           case "rectangleBillboard":
             //计算当前实体的xyz
             that.billboardModel.templateTop.x = that.billboardModel.x;
             that.billboardModel.templateTop.y = that.billboardModel.y;
-            that.billboardModel.templateTop.z =
-              that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
+            if (that.billboardModel.template.isImportModel == "true") {
+              that.billboardModel.templateTop.z = that.billboardModel.z;
+            } else {
+              that.billboardModel.templateTop.z =
+                that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
+            }
+
             var p = Cesium.Cartesian3.fromDegrees(
               that.billboardModel.templateTop.x,
               that.billboardModel.templateTop.y,
               that.billboardModel.templateTop.z
             );
-            var topentity = viewer.entities.getById(
-              "top_billboard_" + that.billboardModel.id
-            );
-            topentity.position = p;
-            topentity.box.dimensions = new Cesium.Cartesian3(
-              that.billboardModel.templateTop.xL,
-              that.billboardModel.templateTop.zL,
-              that.billboardModel.templateTop.yL
-            );
-            topentity.orientation = orientation;
+            if (that.billboardModel.template.isImportModel == "true") {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = p;
+              topentity.model.scale = that.billboardModel.templateTop.scaleL;
+              topentity.orientation = orientation;
+            } else {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = p;
+              topentity.box.dimensions = new Cesium.Cartesian3(
+                that.billboardModel.templateTop.xL,
+                that.billboardModel.templateTop.zL,
+                that.billboardModel.templateTop.yL
+              );
+              topentity.orientation = orientation;
+            }
 
             break;
           // 立杆型广告
@@ -677,39 +803,46 @@ export default {
             that.billboardModel.templateCentre.y = that.billboardModel.y;
             that.billboardModel.templateCentre.z =
               that.billboardModel.z + that.billboardModel.templateCentre.yL / 2;
-            var c_p = Cesium.Cartesian3.fromDegrees(
-              that.billboardModel.templateCentre.x,
-              that.billboardModel.templateCentre.y,
-              that.billboardModel.templateCentre.z
-            );
-            var Centreentity = viewer.entities.getById(
-              "Centre_billboard_" + that.billboardModel.id
-            );
-            Centreentity.position = c_p;
-            Centreentity.cylinder = {
-              length: that.billboardModel.templateCentre.yL, //圆柱体长度
-              topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
-              bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
-              material: Cesium.Color.LIGHTGREEN,
-              shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
-            };
-            Centreentity.orientation =
-              Cesium.Transforms.headingPitchRollQuaternion(
-                newposition,
-                new Cesium.HeadingPitchRoll(
-                  Cesium.Math.toRadians(that.billboardModel.rotateZ),
-                  Cesium.Math.toRadians(0),
-                  Cesium.Math.toRadians(0)
-                )
+
+            if (that.billboardModel.template.isImportModel != "true") {
+              var c_p = Cesium.Cartesian3.fromDegrees(
+                that.billboardModel.templateCentre.x,
+                that.billboardModel.templateCentre.y,
+                that.billboardModel.templateCentre.z
               );
+              var Centreentity = viewer.entities.getById(
+                "Centre_billboard_" + that.billboardModel.id
+              );
+              Centreentity.position = c_p;
+              Centreentity.cylinder = {
+                length: that.billboardModel.templateCentre.yL, //圆柱体长度
+                topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
+                bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
+                material: Cesium.Color.LIGHTGREEN,
+                shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
+              };
+              Centreentity.orientation =
+                Cesium.Transforms.headingPitchRollQuaternion(
+                  newposition,
+                  new Cesium.HeadingPitchRoll(
+                    Cesium.Math.toRadians(that.billboardModel.rotateZ),
+                    Cesium.Math.toRadians(0),
+                    Cesium.Math.toRadians(0)
+                  )
+                );
+            }
 
             //计算当前实体的xyz
             that.billboardModel.templateTop.x = that.billboardModel.x;
             that.billboardModel.templateTop.y = that.billboardModel.y;
-            that.billboardModel.templateTop.z =
-              that.billboardModel.templateCentre.z +
-              that.billboardModel.templateCentre.yL / 2 +
-              that.billboardModel.templateTop.yL / 2;
+            if (that.billboardModel.template.isImportModel == "true") {
+              that.billboardModel.templateTop.z = that.billboardModel.z;
+            } else {
+              that.billboardModel.templateTop.z =
+                that.billboardModel.templateCentre.z +
+                that.billboardModel.templateCentre.yL / 2 +
+                that.billboardModel.templateTop.yL / 2;
+            }
 
             if (that.billboardModel.rotateX > 10) {
               that.billboardModel.templateTop.z =
@@ -721,17 +854,25 @@ export default {
               that.billboardModel.templateTop.y,
               that.billboardModel.templateTop.z
             );
-
-            var topentity = viewer.entities.getById(
-              "top_billboard_" + that.billboardModel.id
-            );
-            topentity.position = t_p;
-            topentity.box.dimensions = new Cesium.Cartesian3(
-              that.billboardModel.templateTop.xL,
-              that.billboardModel.templateTop.zL,
-              that.billboardModel.templateTop.yL
-            );
-            topentity.orientation = orientation;
+            if (that.billboardModel.template.isImportModel == "true") {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = t_p;
+              topentity.model.scale = that.billboardModel.templateTop.scaleL;
+              topentity.orientation = orientation;
+            } else {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = t_p;
+              topentity.box.dimensions = new Cesium.Cartesian3(
+                that.billboardModel.templateTop.xL,
+                that.billboardModel.templateTop.zL,
+                that.billboardModel.templateTop.yL
+              );
+              topentity.orientation = orientation;
+            }
 
             break;
           //底座型立杆广告
@@ -742,29 +883,31 @@ export default {
             that.billboardModel.templateBottom.z =
               that.billboardModel.z + that.billboardModel.templateBottom.yL / 2;
 
-            var b_p = Cesium.Cartesian3.fromDegrees(
-              that.billboardModel.templateBottom.x,
-              that.billboardModel.templateBottom.y,
-              that.billboardModel.templateBottom.z
-            );
-            var bottomentity = viewer.entities.getById(
-              "bottom_billboard_" + that.billboardModel.id
-            );
-            bottomentity.position = b_p;
-            bottomentity.box.dimensions = new Cesium.Cartesian3(
-              that.billboardModel.templateBottom.xL,
-              that.billboardModel.templateBottom.zL,
-              that.billboardModel.templateBottom.yL
-            );
-            bottomentity.orientation =
-              Cesium.Transforms.headingPitchRollQuaternion(
-                newposition,
-                new Cesium.HeadingPitchRoll(
-                  Cesium.Math.toRadians(that.billboardModel.rotateZ),
-                  Cesium.Math.toRadians(0),
-                  Cesium.Math.toRadians(0)
-                )
+            if (that.billboardModel.template.isImportModel != "true") {
+              var b_p = Cesium.Cartesian3.fromDegrees(
+                that.billboardModel.templateBottom.x,
+                that.billboardModel.templateBottom.y,
+                that.billboardModel.templateBottom.z
+              );
+              var bottomentity = viewer.entities.getById(
+                "bottom_billboard_" + that.billboardModel.id
               );
+              bottomentity.position = b_p;
+              bottomentity.box.dimensions = new Cesium.Cartesian3(
+                that.billboardModel.templateBottom.xL,
+                that.billboardModel.templateBottom.zL,
+                that.billboardModel.templateBottom.yL
+              );
+              bottomentity.orientation =
+                Cesium.Transforms.headingPitchRollQuaternion(
+                  newposition,
+                  new Cesium.HeadingPitchRoll(
+                    Cesium.Math.toRadians(that.billboardModel.rotateZ),
+                    Cesium.Math.toRadians(0),
+                    Cesium.Math.toRadians(0)
+                  )
+                );
+            }
 
             that.billboardModel.templateCentre.x = that.billboardModel.x;
             that.billboardModel.templateCentre.y = that.billboardModel.y;
@@ -773,40 +916,47 @@ export default {
               that.billboardModel.templateBottom.z +
               that.billboardModel.templateBottom.yL / 2 +
               that.billboardModel.templateCentre.yL / 2;
-            var c_p = Cesium.Cartesian3.fromDegrees(
-              that.billboardModel.templateCentre.x,
-              that.billboardModel.templateCentre.y,
-              that.billboardModel.templateCentre.z
-            );
 
-            var Centreentity = viewer.entities.getById(
-              "Centre_billboard_" + that.billboardModel.id
-            );
-            Centreentity.position = c_p;
-            Centreentity.cylinder = {
-              length: that.billboardModel.templateCentre.yL, //圆柱体长度
-              topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
-              bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
-              material: Cesium.Color.LIGHTGREEN,
-              shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
-            };
-            Centreentity.orientation =
-              Cesium.Transforms.headingPitchRollQuaternion(
-                newposition,
-                new Cesium.HeadingPitchRoll(
-                  Cesium.Math.toRadians(that.billboardModel.rotateZ),
-                  Cesium.Math.toRadians(0),
-                  Cesium.Math.toRadians(0)
-                )
+            if (that.billboardModel.template.isImportModel != "true") {
+              var c_p = Cesium.Cartesian3.fromDegrees(
+                that.billboardModel.templateCentre.x,
+                that.billboardModel.templateCentre.y,
+                that.billboardModel.templateCentre.z
+              );
+              var Centreentity = viewer.entities.getById(
+                "Centre_billboard_" + that.billboardModel.id
               );
+              Centreentity.position = c_p;
+              Centreentity.cylinder = {
+                length: that.billboardModel.templateCentre.yL, //圆柱体长度
+                topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
+                bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
+                material: Cesium.Color.LIGHTGREEN,
+                shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
+              };
+              Centreentity.orientation =
+                Cesium.Transforms.headingPitchRollQuaternion(
+                  newposition,
+                  new Cesium.HeadingPitchRoll(
+                    Cesium.Math.toRadians(that.billboardModel.rotateZ),
+                    Cesium.Math.toRadians(0),
+                    Cesium.Math.toRadians(0)
+                  )
+                );
+            }
 
             //计算当前实体的xyz
             that.billboardModel.templateTop.x = that.billboardModel.x;
             that.billboardModel.templateTop.y = that.billboardModel.y;
-            that.billboardModel.templateTop.z =
-              that.billboardModel.templateCentre.z +
-              that.billboardModel.templateCentre.yL / 2 +
-              that.billboardModel.templateTop.yL / 2;
+            if (that.billboardModel.template.isImportModel == "true") {
+              that.billboardModel.templateTop.z = that.billboardModel.z;
+            } else {
+              that.billboardModel.templateTop.z =
+                that.billboardModel.templateCentre.z +
+                that.billboardModel.templateCentre.yL / 2 +
+                that.billboardModel.templateTop.yL / 2;
+            }
+
             if (that.billboardModel.rotateX > 10) {
               // var sd =
               //   (that.billboardModel.templateTop.yL / 2) *
@@ -827,16 +977,25 @@ export default {
               that.billboardModel.templateTop.z
             );
 
-            var topentity = viewer.entities.getById(
-              "top_billboard_" + that.billboardModel.id
-            );
-            topentity.position = t_p;
-            topentity.box.dimensions = new Cesium.Cartesian3(
-              that.billboardModel.templateTop.xL,
-              that.billboardModel.templateTop.zL,
-              that.billboardModel.templateTop.yL
-            );
-            topentity.orientation = orientation;
+            if (that.billboardModel.template.isImportModel == "true") {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = t_p;
+              topentity.model.scale = that.billboardModel.templateTop.scaleL;
+              topentity.orientation = orientation;
+            } else {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = t_p;
+              topentity.box.dimensions = new Cesium.Cartesian3(
+                that.billboardModel.templateTop.xL,
+                that.billboardModel.templateTop.zL,
+                that.billboardModel.templateTop.yL
+              );
+              topentity.orientation = orientation;
+            }
 
             break;
           //实物型广告(模型型)
@@ -866,6 +1025,9 @@ export default {
             var y = that.billboardModel.y;
             var z =
               that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
+            if (that.billboardModel.template.isImportModel == "true") {
+              z = that.billboardModel.z;
+            }
             that.billboardModel.templateTop.x = x;
             that.billboardModel.templateTop.y = y;
             that.billboardModel.templateTop.z = z;
@@ -874,44 +1036,73 @@ export default {
               that.billboardModel.templateTop.y,
               that.billboardModel.templateTop.z
             );
+            if (that.billboardModel.template.isImportModel == "true") {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = t_p;
+              topentity.model.scale = that.billboardModel.templateTop.scaleL;
+              topentity.orientation = orientation;
+            } else {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = t_p;
+              topentity.billboard.width = that.billboardModel.templateTop.xL;
+              topentity.billboard.height = that.billboardModel.templateTop.yL;
+              topentity.billboard.rotation = that.billboardModel.rotateX;
+              topentity.orientation = orientation;
+            }
 
-            var topentity = viewer.entities.getById(
-              "top_billboard_" + that.billboardModel.id
-            );
-            topentity.position = t_p;
-            topentity.billboard.width = that.billboardModel.templateTop.xL;
-            topentity.billboard.height = that.billboardModel.templateTop.yL;
-            topentity.billboard.rotation = that.billboardModel.rotateX;
-            topentity.orientation = orientation;
             break;
           default:
             //计算当前实体的xyz
             that.billboardModel.templateTop.x = that.billboardModel.x;
             that.billboardModel.templateTop.y = that.billboardModel.y;
-            that.billboardModel.templateTop.z =
-              that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
+            if (that.billboardModel.template.isImportModel == "true") {
+              that.billboardModel.templateTop.z = that.billboardModel.z;
+            } else {
+              that.billboardModel.templateTop.z =
+                that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
+            }
+
             var p = Cesium.Cartesian3.fromDegrees(
               that.billboardModel.templateTop.x,
               that.billboardModel.templateTop.y,
               that.billboardModel.templateTop.z
             );
-            var topentity = viewer.entities.getById(
-              "top_billboard_" + that.billboardModel.id
-            );
-            topentity.position = p;
-            topentity.box.dimensions = new Cesium.Cartesian3(
-              that.billboardModel.templateTop.xL,
-              that.billboardModel.templateTop.zL,
-              that.billboardModel.templateTop.yL
-            );
-            topentity.orientation = orientation;
+            if (that.billboardModel.template.isImportModel == "true") {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = p;
+              topentity.model.scale = that.billboardModel.templateTop.scaleL;
+              topentity.orientation = orientation;
+            } else {
+              var topentity = viewer.entities.getById(
+                "top_billboard_" + that.billboardModel.id
+              );
+              topentity.position = p;
+              topentity.box.dimensions = new Cesium.Cartesian3(
+                that.billboardModel.templateTop.xL,
+                that.billboardModel.templateTop.zL,
+                that.billboardModel.templateTop.yL
+              );
+              topentity.orientation = orientation;
+            }
 
             break;
         }
 
         var h = 0;
         if (that.billboardModel.templateTop.yL) {
-          h = Number(that.billboardModel.templateTop.yL) / 2;
+          h += Number(that.billboardModel.templateTop.yL) / 2;
+        }
+        if (that.billboardModel.templateCentre.yL) {
+          h += Number(that.billboardModel.templateCentre.yL) / 2;
+        }
+        if (that.billboardModel.templateBottom.yL) {
+          h += Number(that.billboardModel.templateBottom.yL) / 2;
         }
         var pointLabelEntity = viewer.entities.getById(
           "point_Billboard_" + that.billboardModel.id
@@ -932,11 +1123,16 @@ export default {
      */
     changeBillboardType() {
       debugger;
+
       this.billboardReview = {
         isAddModel: this.billboardModel.isAddModel,
         ModelType: this.billboardModel.template.ModelType,
         modelurl: "",
       };
+      this.billboardReview.AttachedData = this.findNodeByName(
+        this.options,
+        this.billboardModel.billboardType
+      ).AttachedData;
       if (this.billboardModel.isAddModel) {
         this.billboardModelRule = [this.billboardModel.template];
         this.selectbillboardModelRule =
@@ -947,6 +1143,32 @@ export default {
         this.billboardModelRule = null;
       }
     },
+    findNodeByName(tree, targetName) {
+      // 如果传入的不是数组,将其转换为数组处理
+      const treeArray = Array.isArray(tree) ? tree : [tree];
+
+      for (const node of treeArray) {
+        // 如果当前节点的billboardType匹配目标值,直接返回该节点
+        if (node.billboardType === targetName) {
+          return node;
+        }
+
+        // 如果当前节点有子节点,递归搜索子节点
+        if (node.children && node.children.length > 0) {
+          const found = this.findNodeByName(node.children, targetName);
+          if (found) {
+            return found; // 如果在子树中找到,立即返回
+          }
+        }
+      }
+
+      // 遍历完所有节点都没找到,返回null
+      return null;
+    },
+    //强制刷新组件,解决切换后不刷新问题
+    UPchange() {
+      this.$forceUpdate();
+    },
 
     /**
      * 保存编辑
@@ -954,6 +1176,20 @@ export default {
     async saveMode() {
       debugger;
       let that = this;
+      if (that.billboardReview.AttachedData) {
+        for (
+          var index = 0;
+          index < that.billboardReview.AttachedData.length;
+          index++
+        ) {
+          var attached = that.billboardReview.AttachedData[index];
+          var value = that.billboardModel.AttachedData[attached.key];
+          if (!value || value == "") {
+            this.$message.error("请添加附加参数");
+            return;
+          }
+        }
+      }
       if (
         that.billboardModel.billboardName == "" ||
         that.billboardModel.billboardName == null
@@ -980,9 +1216,35 @@ export default {
       let data = JSON.parse(JSON.stringify(that.billboardModel));
 
       data.template = {
+        isImportModel: that.billboardModel.template.isImportModel,
         ModelType: that.billboardReview.ModelType,
         ...that.selectbillboardModelRule,
       };
+      //添加附属信息的详细信息
+      var fsxxs = [];
+      if (
+        data.AttachedData &&
+        data.AttachedData != "{}" &&
+        Object.keys(data.AttachedData).length > 0
+      ) {
+        for (
+          var index = 0;
+          index < that.billboardReview.AttachedData.length;
+          index++
+        ) {
+          var attached = that.billboardReview.AttachedData[index];
+          var fsxx = { key: attached.key, value: attached.value, data: "" };
+          var valuedata = that.billboardModel.AttachedData[attached.key];
+          if (attached.selectData) {
+            fsxx.data = attached.selectData.find((c) => c.value == valuedata);
+          } else {
+            fsxx.data = valuedata;
+          }
+
+          fsxxs.push(JSON.parse(JSON.stringify(fsxx)));
+        }
+        data.AttachedData = JSON.stringify(fsxxs);
+      }
 
       data.template = JSON.stringify(data.template);
       data.templateBottom = JSON.stringify(data.templateBottom);

+ 152 - 1
src/views/ConstructionApplication3D/parkCheck/parkResult.vue

@@ -7,7 +7,7 @@
     >
       <el-table-column prop="id" label="序号" width="60"></el-table-column>
       <el-table-column prop="landNo" label="地块" width=""> </el-table-column>
-      <el-table-column prop="" label="机动车位">
+      <el-table-column prop="" label="机动车位(包含特殊车位)">
         <el-table-column prop="jdcDesignCount" label="方案数量(个)" width="">
         </el-table-column>
         <el-table-column prop="jdcNormalCount" label="规范数量(个)" width="">
@@ -38,6 +38,112 @@
         </template>
       </el-table-column>
     </el-table>
+    <el-row>
+      <el-col :span="24">
+        <div class="titleHeader" style="line-height: 3.4rem">
+          <h3>特殊停车位配建指标对比</h3>
+        </div></el-col
+      >
+      <el-col :span="24">
+        <el-table
+          :data="tableData"
+          :header-cell-style="{ 'text-align': 'center' }"
+          style="width: 100%; text-align: center"
+        >
+          <el-table-column prop="id" label="序号" width="60"></el-table-column>
+          <el-table-column prop="landNo" label="地块" width="">
+          </el-table-column>
+          <el-table-column prop="" label="临时车位">
+            <el-table-column
+              prop="lscwDesignCount"
+              label="方案数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column
+              prop="lscwNormalCount"
+              label="规范数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column prop="lscwPass" label="审查意见" width="">
+              <template slot-scope="scope">
+                <span v-if="!scope.row.islscwPass" style="color: red"
+                  >不通过</span
+                >
+                <span v-else style="color: #37b328">通过</span>
+              </template>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column prop="date" label="大客车位" width="150">
+            <el-table-column
+              prop="dkcwDesignCount"
+              label="方案数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column
+              prop="dkcwNormalCount"
+              label="规范数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column prop="dkcwPass" label="审查意见" width="">
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isdkcwPass" style="color: red"
+                  >不通过</span
+                >
+                <span v-else style="color: #37b328">通过</span>
+              </template>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column prop="date" label="装卸车位" width="150">
+            <el-table-column
+              prop="zxcwDesignCount"
+              label="方案数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column
+              prop="zxcwNormalCount"
+              label="规范数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column prop="zxcwPass" label="审查意见" width="">
+              <template slot-scope="scope">
+                <span v-if="!scope.row.iszxcwPass" style="color: red"
+                  >不通过</span
+                >
+                <span v-else style="color: #37b328">通过</span>
+              </template>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column prop="date" label="无障碍车位" width="150">
+            <el-table-column
+              prop="wzacwDesignCount"
+              label="方案数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column
+              prop="wzacwNormalCount"
+              label="规范数量(个)"
+              width=""
+            >
+            </el-table-column>
+            <el-table-column prop="wzacwPass" label="审查意见" width="">
+              <template slot-scope="scope">
+                <span v-if="!scope.row.iswzacwPass" style="color: red"
+                  >不通过</span
+                >
+                <span v-else style="color: #37b328">通过</span>
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
   </div>
 </template>
 <script>
@@ -79,16 +185,32 @@ export default {
         var landNo = buildings[i].landNo;
         var jdcNormalCount = Math.ceil(buildings[i].jdcCount);
         var fjdcNormalCount = Math.ceil(buildings[i].fjdcCount);
+        var lscwNormalCount = Math.ceil(buildings[i].lscwCount);
+        var dkcwNormalCount = Math.ceil(buildings[i].dkcwCount);
+        var zxcwNormalCount = Math.ceil(buildings[i].zxcwCount);
+        var wzacwNormalCount = Math.ceil(buildings[i].wzacwCount);
         var jdcDesignCount = 0;
         var fjdcDesignCount = 0;
+        var lscwDesignCount = 0;
+        var dkcwDesignCount = 0;
+        var zxcwDesignCount = 0;
+        var wzacwDesignCount = 0;
         var isJDCPass = false;
         var isFJDCPass = false;
         var isPass = false;
+        var islscwPass = false;
+        var isdkcwPass = false;
+        var iszxcwPass = false;
+        var iswzacwPass = false;
 
         var park = parks.find((t) => t.landNo == landNo);
         if (park) {
           jdcDesignCount = park.jdcCount;
           fjdcDesignCount = park.fjdcCount;
+          lscwDesignCount = park.lscwCount;
+          dkcwDesignCount = park.dkcwCount;
+          zxcwDesignCount = park.zxcwCount;
+          wzacwDesignCount = park.wzacwCount;
         }
         if (jdcDesignCount >= jdcNormalCount) {
           isJDCPass = true;
@@ -98,16 +220,45 @@ export default {
         }
         if (isJDCPass == true && isFJDCPass == true) isPass = true;
 
+        //判断特殊车位合规性
+        if (lscwDesignCount >= lscwNormalCount) {
+          islscwPass = true;
+        }
+        if (dkcwDesignCount >= dkcwNormalCount) {
+          isdkcwPass = true;
+        }
+        if (zxcwDesignCount >= zxcwNormalCount) {
+          iszxcwPass = true;
+        }
+        if (wzacwDesignCount >= wzacwNormalCount) {
+          iswzacwPass = true;
+        }
+
         this.tableData.push({
           id: i + 1,
           landNo: landNo,
           jdcNormalCount: jdcNormalCount,
           fjdcNormalCount: fjdcNormalCount,
+          lscwNormalCount: lscwNormalCount,
+          dkcwNormalCount: dkcwNormalCount,
+          zxcwNormalCount: zxcwNormalCount,
+          wzacwNormalCount: wzacwNormalCount,
+
           jdcDesignCount: jdcDesignCount,
           fjdcDesignCount: fjdcDesignCount,
+          lscwDesignCount: lscwDesignCount,
+          dkcwDesignCount: dkcwDesignCount,
+          zxcwDesignCount: zxcwDesignCount,
+          wzacwDesignCount: wzacwDesignCount,
+
           isJDCPass: isJDCPass,
           isFJDCPass: isFJDCPass,
           isPass: isPass,
+          //特殊车位合规性
+          islscwPass: islscwPass,
+          isdkcwPass: isdkcwPass,
+          iszxcwPass: iszxcwPass,
+          iswzacwPass: iswzacwPass,
         });
       }
     },

+ 883 - 12
src/views/ConstructionApplication3D/projectManagement/CheckParkAnalyse.js

@@ -1,5 +1,6 @@
 import { mapQuery } from "@/utils/MapHelper/MapHelper.js";
 import { Message } from "element-ui";
+import { forEach } from "lodash";
 const CheckParkAnalyse = {
   /**
    * 计算计容面积及车位
@@ -7,6 +8,7 @@ const CheckParkAnalyse = {
    * @param {Boolean} isJSPark
    */
   async buidAreaAndParksComputer(Minfo, isJSPark) {
+    debugger;
     var datasourcename = Minfo.datasourcename; //模型数据集
     var dataurl = Minfo.dataurl; //报建项目服务地址
     var tcwLayerName = window.CarPark.tcwLayer; //停车位图层
@@ -37,6 +39,7 @@ const CheckParkAnalyse = {
       Minfo.dataurl + "/featureResults.json?returnContent=true",
       queryByGeometryParameters
     );
+    debugger;
     if (result && result.totalCount == 0) {
       Message({
         message: "未查询到停车位和报建分层数据数据,请重新尝试",
@@ -86,6 +89,7 @@ const CheckParkAnalyse = {
         );
       }
     }
+
     return JSResult;
   },
   /**
@@ -159,13 +163,30 @@ const CheckParkAnalyse = {
       landItems = tcwList.filter((t) => t.landNo == landText);
       var jdcCount = 0;
       var fjdcCount = 0;
+      var lscwCount = 0;
+      var dkcwCount = 0;
+      var zxcwCount = 0;
+      var wzacwCount = 0;
       //地块
       for (var i = 0; i < landItems.length; i++) {
         if (landItems[i].CWType == "机动车") {
           jdcCount++;
         } else if (landItems[i].CWType == "非机动车") {
           fjdcCount++;
+        } else if (landItems[i].CWType == "临时车位") {
+          jdcCount++;
+          lscwCount++;
+        } else if (landItems[i].CWType == "大客车位") {
+          jdcCount++;
+          dkcwCount++;
+        } else if (landItems[i].CWType == "无障碍车位") {
+          jdcCount++;
+          wzacwCount++;
+        } else if (landItems[i].CWType == "装卸车位") {
+          jdcCount++;
+          zxcwCount++;
         }
+
         if (floors.indexOf(landItems[i].floor) == -1) {
           floors.push(landItems[i].floor);
         }
@@ -175,16 +196,33 @@ const CheckParkAnalyse = {
       for (var index = 0; index < floors.length; index++) {
         var floorItems = landItems.filter((t) => t.floor == floors[index]);
         var jdcItems = landItems.filter(
-          (t) => t.floor == floors[index] && t.CWType == "机动车"
+          (t) => t.floor == floors[index] && t.CWType != "非机动车"
         );
         var fjdcItems = landItems.filter(
           (t) => t.floor == floors[index] && t.CWType == "非机动车"
         );
+        var lscwItems = landItems.filter(
+          (t) => t.floor == floors[index] && t.CWType == "临时车位"
+        );
+        var dkcwItems = landItems.filter(
+          (t) => t.floor == floors[index] && t.CWType == "大客车位"
+        );
+        var wzacItems = landItems.filter(
+          (t) => t.floor == floors[index] && t.CWType == "无障碍车位"
+        );
+        var zxcwItems = landItems.filter(
+          (t) => t.floor == floors[index] && t.CWType == "装卸车位"
+        );
+
         floorParks.push({
           layer: floors[index],
           tcwCount: floorItems.length,
           jdcCount: jdcItems.length,
           fjdcCount: fjdcItems.length,
+          lscwCount: lscwItems.length,
+          dkcwCount: dkcwItems.length,
+          zxcwCount: zxcwItems.length,
+          wzacwCount: wzacItems.length,
         });
       }
       parks.push({
@@ -192,6 +230,10 @@ const CheckParkAnalyse = {
         totalCount: landItems.length,
         jdcCount: jdcCount,
         fjdcCount: fjdcCount,
+        lscwCount: lscwCount,
+        dkcwCount: dkcwCount,
+        zxcwCount: zxcwCount,
+        wzacwCount: wzacwCount,
         floors: floorParks,
       });
     }
@@ -251,6 +293,10 @@ const CheckParkAnalyse = {
     var houseFldIndex = CheckParkAnalyse.getfldIndex(fieldInfos, houseFld); //用途居民建筑类 楼层户数
     var houseFldVal = 0;
 
+    var L144Fld = window.CarPark.L144Fld; //楼层中144平以下户数
+    var L144FldIndex = CheckParkAnalyse.getfldIndex(fieldInfos, L144Fld); //当前楼层住户144平米以下住户数量字段
+    var L144FldVal = 0;
+
     var B144Fld = window.CarPark.B144Fld; //楼层中144平以上户数
     var B144FldIndex = CheckParkAnalyse.getfldIndex(fieldInfos, B144Fld); //当前楼层住户144平米以上住户数量字段
     var B144FldVal = 0;
@@ -286,6 +332,13 @@ const CheckParkAnalyse = {
     );
     var FAJRAreaFldVal = 0.0;
 
+    var StudentsFld = window.CarPark.StudentsFld; //学校学生数
+    var StudentsFldIndex = CheckParkAnalyse.getfldIndex(
+      fieldInfos,
+      StudentsFld
+    );
+    var StudentsFldVal = 0.0;
+
     var landList = [
       // //地块
       // {
@@ -328,6 +381,7 @@ const CheckParkAnalyse = {
       // }
     ];
     var allItems = [];
+    var specialParkings = [];
     var landTextList = [];
     var curFeature;
     for (var i = 0; i < features.length; i++) {
@@ -374,6 +428,11 @@ const CheckParkAnalyse = {
       if (houseFldIndex > -1)
         houseFldVal = parseInt(curFeature.fieldValues[houseFldIndex]);
       else houseFldVal = 0;
+
+      //当前楼层住户144平米以下住户数量字段
+      if (L144FldIndex > -1)
+        L144FldVal = parseInt(curFeature.fieldValues[L144FldIndex]);
+      else L144FldVal = 0;
       //当前楼层住户144平米以上住户数量字段
       if (B144FldIndex > -1)
         B144FldVal = parseInt(curFeature.fieldValues[B144FldIndex]);
@@ -394,7 +453,10 @@ const CheckParkAnalyse = {
       if (VisitorFldIndex > -1)
         VisitorFldVal = parseInt(curFeature.fieldValues[VisitorFldIndex]);
       else VisitorFldVal = 0;
-
+      //学校学生数
+      if (StudentsFldIndex > -1)
+        StudentsFldVal = parseInt(curFeature.fieldValues[StudentsFldIndex]);
+      else StudentsFldVal = 0;
       if (BuidNoFldVal == "无" || BuidNoFldVal == "") {
         BuidNoFldVal = "地下";
       }
@@ -408,19 +470,25 @@ const CheckParkAnalyse = {
         jrArea: JRAreaFldVal,
         faArea: FAAreaFldVal,
         faJRArea: FAJRAreaFldVal,
-        house: houseFldVal,
+        // house: houseFldVal,
+        house: L144FldVal + B144FldVal,
+        l144: L144FldVal,
         b144: B144FldVal,
         rooms: RoomFldVal,
         teachers: FTeacherFldVal,
         seats: SeatNumberFldVal,
         visitor: VisitorFldVal,
+        students: StudentsFldVal,
         jdcCount: 0,
         fjdcCount: 0,
       });
     }
     /** 是否计算车位 */
-    if (isJSPark != null && isJSPark == true)
+    if (isJSPark != null && isJSPark == true) {
       allItems = CheckParkAnalyse.jrCarNormal(allItems);
+      specialParkings = CheckParkAnalyse.jrSpecialCarNormal(allItems);
+    }
+
     //遍历所有地块
     for (var i = 0; i < landTextList.length; i++) {
       var landNo = landTextList[i];
@@ -428,13 +496,17 @@ const CheckParkAnalyse = {
       var buidNoList = [];
       var landjdcCount = 0;
       var landfjdcCount = 0;
+      var landlscwCount = 0;
+      var landdkcwCount = 0;
+      var landzxcwCount = 0;
+      var landwzacwCount = 0;
       var fadxjzmj = 0.0;
       var dxjzmj = 0.0;
       for (var j = 0; j < landGroup.length; j++) {
         var buildNo = landGroup[j].buildNo;
         if (
           landGroup[j].floor.toUpperCase().indexOf("B") > -1 ||
-          landGroup[j].floor.toUpperCase().indexOf("地下") > 1 ||
+          landGroup[j].floor.toUpperCase().indexOf("地下") > -1 ||
           landGroup[j].yt.toUpperCase().indexOf("停车") > -1
         ) {
           fadxjzmj += landGroup[j].faArea;
@@ -446,6 +518,23 @@ const CheckParkAnalyse = {
           landfjdcCount += landGroup[j].fjdcCount;
         }
       }
+      //特殊车位
+      if (isJSPark != null && isJSPark == true) {
+        var specialParking = specialParkings.find((t) => t.landNo == landNo);
+        if (specialParking) {
+          landlscwCount = specialParking.lscwCount;
+          landdkcwCount = specialParking.dkcwCount;
+          landzxcwCount = specialParking.zxcwCount;
+          landwzacwCount = specialParking.wzacwCount;
+
+          //加入到总机动车位
+          landjdcCount += specialParking.lscwCount;
+          landjdcCount += specialParking.dkcwCount;
+          landjdcCount += specialParking.zxcwCount;
+          landjdcCount += specialParking.wzacwCount;
+        }
+      }
+
       //地块的建筑面积和计容面积
       var landMJ = 0.0;
       var landJRMJ = 0.0;
@@ -502,7 +591,7 @@ const CheckParkAnalyse = {
         //当前建筑所有楼层
         for (var n = 0; n < floorList.length; n++) {
           var floorText = floorList[n];
-          var curFloors = landGroup.filter((t) => t.floor == floorText);
+          var curFloors = buildItemList.filter((t) => t.floor == floorText);
           //当前楼层的面积、计容面积、房间数等
           var mj = 0.0;
           var jrmj = 0.0;
@@ -512,6 +601,7 @@ const CheckParkAnalyse = {
           // var layer = floorText;
           var house = 0;
           var B144 = 0;
+          var L144 = 0;
           curFloors.forEach((item, index) => {
             mj += item.area;
             jrmj += item.jrArea;
@@ -519,14 +609,16 @@ const CheckParkAnalyse = {
             fajrmj += item.faJRArea;
             house += item.house;
             B144 += item.b144;
+            L144 += item.l144;
           });
           var floorClass = [];
-          // classes: [{yt: '',  house: 0,B144: 0,rooms: '',mj: 0.00,jrmj: 0.00,}]
+          // classes: [{yt: '',  house: 0,B144: 0,L144: 0,rooms: '',mj: 0.00,jrmj: 0.00,}]
           // 用途-----start
           for (var t = 0; t < ytList.length; t++) {
             var curyt = ytList[t];
             var ytHouse = 0;
             var ytB144 = 0;
+            var ytL144 = 0;
             var ytrooms = 0;
             var ytytmj = 0.0;
             var ytjrmj = 0.0;
@@ -539,6 +631,7 @@ const CheckParkAnalyse = {
             if (floorYTItems.length == 0) continue;
             floorYTItems.forEach((tt, iindex) => {
               ytB144 += tt.b144;
+              ytL144 += tt.l144;
               ytrooms += tt.rooms;
               ytytmj += tt.area;
               ytjrmj += tt.jrArea;
@@ -553,6 +646,7 @@ const CheckParkAnalyse = {
               yt: curyt,
               house: ytHouse,
               B144: ytB144,
+              L144: ytL144,
               rooms: ytrooms,
               mj: ytytmj,
               jrmj: ytjrmj,
@@ -569,6 +663,7 @@ const CheckParkAnalyse = {
             // class: yt,
             house: house,
             B144: B144,
+            L144: L144,
             rooms: rooms,
             mj: mj,
             jrmj: jrmj,
@@ -603,6 +698,10 @@ const CheckParkAnalyse = {
         fajrmj: landFAJRMJ,
         jdcCount: landjdcCount,
         fjdcCount: landfjdcCount,
+        lscwCount: landlscwCount,
+        dkcwCount: landdkcwCount,
+        zxcwCount: landzxcwCount,
+        wzacwCount: landwzacwCount,
         builds: curLandBuilds,
       });
     }
@@ -621,6 +720,7 @@ const CheckParkAnalyse = {
    * jrArea: 0.00,
    * house:0 ,
    * b144: 0,
+   * l144: 0,
    * rooms: 0,
    * jdcCount:0.00,
    * fjdcCount:0.00}
@@ -631,6 +731,7 @@ const CheckParkAnalyse = {
     if (list == null) return null;
     var ytIndex = -1;
     var b144 = 0;
+    var l144 = 0;
     var area = 0.0;
     var house = 0;
     var rooms = 0;
@@ -640,10 +741,12 @@ const CheckParkAnalyse = {
       var yt = item.yt;
       var jdcCount = 0.0;
       var fjdcCount = 0.0;
+
       var curClass = normClasses.find((t) => t.Name.indexOf(yt) > -1);
       if (curClass == null) {
         list[i].jdcCount = jdcCount;
         list[i].fjdcCount = fjdcCount;
+
         continue;
       }
       var MotorRatio = 1;
@@ -670,11 +773,8 @@ const CheckParkAnalyse = {
           jdcCount = (item.jrArea / 100) * MotorRatio;
           fjdcCount = (item.jrArea / 100) * NoMotorRatio;
         } else {
-          jdcCount =
-            item.b144 * MotorRatio144 + (item.house - house.b144) * MotorRatio;
-          fjdcCount =
-            item.b144 * NoMotorRatio144 +
-            (item.house - house.b144) * NoMotorRatio;
+          jdcCount = item.b144 * MotorRatio144 + item.l144 * MotorRatio;
+          fjdcCount = item.b144 * NoMotorRatio144 + item.l144 * NoMotorRatio;
         }
       } else if (curClass.Name.indexOf("商业") > -1) {
         if (subClass.Name.indexOf("酒店") > -1) {
@@ -714,6 +814,777 @@ const CheckParkAnalyse = {
     }
     return list;
   },
+  //根据用途计算特殊车位数量
+  jrSpecialCarNormal(list) {
+    var normClasses = window.CarPark.classes;
+    if (list == null) return null;
+    var cwinfos = [];
+
+    //按地块和用途统计计容面积,客房数Rooms,学生数,座位数,机动车位数
+    const statistics = [];
+    list.forEach((item) => {
+      const { landNo, yt, jrArea, rooms, students, seats, jdcCount } = item;
+      var statistic = statistics.find((c) => c.landNo == landNo && c.yt == yt);
+      if (!statistic) {
+        statistics.push({
+          landNo: landNo,
+          yt: yt,
+          jrArea: jrArea,
+          rooms: rooms,
+          students: students,
+          seats: seats,
+          jdcCount: jdcCount,
+        });
+      } else {
+        statistic.jrArea += jrArea;
+        statistic.rooms += rooms;
+        statistic.students += students;
+        statistic.seats += seats;
+        statistic.jdcCount += jdcCount;
+      }
+    });
+    debugger;
+    statistics.forEach((statistic) => {
+      var cwinfo = {
+        landNo: statistic.landNo,
+        lscwCount: 0,
+        dkcwCount: 0,
+        zxcwCount: 0,
+        wzacwCount: 0,
+      };
+      var curClass = normClasses.find((t) => t.Name.indexOf(statistic.yt) > -1);
+      if (curClass) {
+        var subClass = curClass.Children.find(
+          (t) => t.Name.indexOf(statistic.yt) > -1
+        );
+        if (curClass.Name.indexOf("居住") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (specialclasse.ParkingType) {
+                case "临时车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.lscwCount += parkingSpaces;
+                  break;
+                case "无障碍车位":
+                  var parkingSpaces = Math.ceil(
+                    statistic.jdcCount * specialclasse.base_parking_coefficient
+                  );
+                  cwinfo.wzacwCount += parkingSpaces;
+                  break;
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        if (curClass.Name.indexOf("办公") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (specialclasse.ParkingType) {
+                case "临时车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.lscwCount += parkingSpaces;
+                  break;
+                case "装卸车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.zxcwCount += parkingSpaces;
+                  break;
+                case "无障碍车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jdcCount / specialclasse.base_parking) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = Math.ceil(
+                      statistic.jdcCount *
+                        specialclasse.increment_parking_coefficient
+                    );
+                  }
+                  cwinfo.wzacwCount += parkingSpaces;
+                  break;
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        if (curClass.Name.indexOf("商业") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (subClass.Name) {
+                case "旅馆":
+                case "酒店":
+                case "其他":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.rooms / specialclasse.base_rooms) *
+                        specialclasse.base_parking_spaces;
+
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "大客车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.rooms / specialclasse.base_rooms) *
+                        specialclasse.base_parking_spaces;
+
+                      cwinfo.dkcwCount += parkingSpaces;
+                      break;
+                    case "装卸车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.rooms / specialclasse.base_rooms) *
+                        specialclasse.base_parking_spaces;
+
+                      cwinfo.zxcwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+                case "零售商业":
+                case "餐饮":
+                case "娱乐":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "装卸车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.zxcwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+                case "农贸市场":
+                case "批发市场":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "装卸车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.zxcwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        if (curClass.Name.indexOf("医疗") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (specialclasse.ParkingType) {
+                case "临时车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    specialclasse &&
+                    specialclasse.base_parking_spaces_threshold &&
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.lscwCount += parkingSpaces;
+                  break;
+                case "装卸车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    specialclasse &&
+                    specialclasse.base_parking_spaces_threshold &&
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.zxcwCount += parkingSpaces;
+                  break;
+                case "无障碍车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jdcCount / specialclasse.base_parking) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = Math.ceil(
+                      statistic.jdcCount *
+                        specialclasse.increment_parking_coefficient
+                    );
+                  }
+                  cwinfo.wzacwCount += parkingSpaces;
+                  break;
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        if (curClass.Name.indexOf("教育") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (subClass.Name) {
+                case "幼儿园":
+                case "小学":
+                case "中学":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.students / specialclasse.base_students
+                        ) * specialclasse.base_parking_spaces;
+
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "大客车位":
+                      cwinfo.dkcwCount += specialclasse.base_parking_spaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+                case "中专":
+                case "职校":
+                case "高等院校":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "大客车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.dkcwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        if (curClass.Name.indexOf("文化体育") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (subClass.Name) {
+                case "影剧院、音乐厅":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.seats / specialclasse.base_seats) *
+                        specialclasse.base_parking_spaces;
+
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+                case "展览馆、图书馆、科技馆":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "大客车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.dkcwCount += parkingSpaces;
+                      break;
+                    case "装卸车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                        specialclasse.base_parking_spaces;
+                      if (
+                        specialclasse &&
+                        specialclasse.base_parking_spaces_threshold &&
+                        parkingSpaces >
+                          specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces =
+                          specialclasse.base_parking_spaces_threshold;
+                        var additionalArea =
+                          statistic.jrArea - specialclasse.increment_area;
+                        if (additionalArea > 0) {
+                          parkingSpaces +=
+                            Math.ceil(
+                              additionalArea / specialclasse.increment_area
+                            ) * specialclasse.increment_parking_spaces;
+                        }
+                      }
+                      cwinfo.zxcwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+                case "体育场馆":
+                  switch (specialclasse.ParkingType) {
+                    case "临时车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.seats / specialclasse.base_seats) *
+                        specialclasse.base_parking_spaces;
+
+                      cwinfo.lscwCount += parkingSpaces;
+                      break;
+                    case "大客车位":
+                      var parkingSpaces =
+                        Math.ceil(statistic.seats / specialclasse.base_seats) *
+                        specialclasse.base_parking_spaces;
+
+                      cwinfo.dkcwCount += parkingSpaces;
+                      break;
+                    case "无障碍车位":
+                      var parkingSpaces =
+                        Math.ceil(
+                          statistic.jdcCount / specialclasse.base_parking
+                        ) * specialclasse.base_parking_spaces;
+                      if (
+                        parkingSpaces >
+                        specialclasse.base_parking_spaces_threshold
+                      ) {
+                        parkingSpaces = Math.ceil(
+                          statistic.jdcCount *
+                            specialclasse.increment_parking_coefficient
+                        );
+                      }
+                      cwinfo.wzacwCount += parkingSpaces;
+                      break;
+                    default:
+                      break;
+                  }
+                  break;
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        if (curClass.Name.indexOf("景区") > -1) {
+          if (subClass.specialclasses) {
+            subClass.specialclasses.forEach((specialclasse) => {
+              switch (specialclasse.ParkingType) {
+                case "临时车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    specialclasse &&
+                    specialclasse.base_parking_spaces_threshold &&
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.lscwCount += parkingSpaces;
+                  break;
+                case "大客车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jrArea / specialclasse.base_area) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    specialclasse &&
+                    specialclasse.base_parking_spaces_threshold &&
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = specialclasse.base_parking_spaces_threshold;
+                    var additionalArea =
+                      statistic.jrArea - specialclasse.increment_area;
+                    if (additionalArea > 0) {
+                      parkingSpaces +=
+                        Math.ceil(
+                          additionalArea / specialclasse.increment_area
+                        ) * specialclasse.increment_parking_spaces;
+                    }
+                  }
+                  cwinfo.dkcwCount += parkingSpaces;
+                  break;
+                case "无障碍车位":
+                  var parkingSpaces =
+                    Math.ceil(statistic.jdcCount / specialclasse.base_parking) *
+                    specialclasse.base_parking_spaces;
+                  if (
+                    parkingSpaces > specialclasse.base_parking_spaces_threshold
+                  ) {
+                    parkingSpaces = Math.ceil(
+                      statistic.jdcCount *
+                        specialclasse.increment_parking_coefficient
+                    );
+                  }
+                  cwinfo.wzacwCount += parkingSpaces;
+                  break;
+                default:
+                  break;
+              }
+            });
+          }
+        }
+        cwinfos.push(cwinfo);
+      }
+    });
+    var TJcwinfos = [];
+    cwinfos.forEach((item) => {
+      var TJcwinfo = TJcwinfos.find((c) => c.landNo == item.landNo);
+      if (!TJcwinfo) {
+        TJcwinfos.push({
+          landNo: item.landNo,
+          lscwCount: item.lscwCount,
+          dkcwCount: item.dkcwCount,
+          zxcwCount: item.zxcwCount,
+          wzacwCount: item.wzacwCount,
+        });
+      } else {
+        TJcwinfo.lscwCount += item.lscwCount;
+        TJcwinfo.dkcwCount += item.dkcwCount;
+        TJcwinfo.zxcwCount += item.zxcwCount;
+        TJcwinfo.wzacwCount += item.wzacwCount;
+      }
+    });
+
+    return TJcwinfos;
+  },
 };
 /**
  * 基准地价分析

+ 80 - 10
src/views/ConstructionApplication3D/projectManagement/projectManagement.vue

@@ -1286,7 +1286,7 @@ export default {
         layers.forEach((layer) => {
           layer.visible = true;
           viewer.flyTo(layer);
-          layer.shadowType = 2;
+          //layer.shadowType = 2;
           that.layerList.push(layer.name);
         });
 
@@ -2805,6 +2805,7 @@ export default {
 
           //项目用地总面积
           let xmzmj = 0;
+          let faxmzmj = 0;
           if (e && e.totalCount > 0) {
             e.features.forEach((feature) => {
               let DataPs = feature.geometry.points.map((item) => [
@@ -2819,9 +2820,20 @@ export default {
                 let areaPs = area(polygonPs);
                 xmzmj += areaPs;
               }
+
+              let FAYDMJIndex = feature.fieldNames.findIndex(
+                (c) => c == "FAYDMJ"
+              );
+              if (FAYDMJIndex) {
+                let faydmj = feature.fieldValues[FAYDMJIndex] || 0;
+                if (Number(faydmj)) {
+                  faxmzmj += Number(faydmj);
+                }
+              }
             });
           }
           FA_Data.YDMJ = xmzmj;
+          TJFA_Data.YDMJ = xmzmj;
 
           //基底面积查建筑轮廓数据
           FA_Data.JDMJ = 0;
@@ -2838,6 +2850,7 @@ export default {
             Minfo.dataurl + "/featureResults.json?returnContent=true",
             queryByGeometryParameters2
           );
+          debugger;
 
           //建筑基底总面积
           let jzjdzmj = 0;
@@ -2849,6 +2862,10 @@ export default {
           let dxjzzmj = 0;
           //最大建筑高度
           let maxJZGD = 0;
+          //计算书最大建筑高度
+          let FAmaxJZGD = 0;
+          //计算书建筑基底总面积
+          let FAjzjdzmj = 0;
           if (e2 && e2.totalCount > 0) {
             e2.features.forEach((feature) => {
               let BUILDAREAIndex = feature.fieldNames.findIndex(
@@ -2887,6 +2904,15 @@ export default {
                   maxJZGD = Number(jzgd);
                 }
               }
+              let FAHEIGHTIndex = feature.fieldNames.findIndex(
+                (c) => c == "FAHEIGHT"
+              );
+              if (FAHEIGHTIndex) {
+                let FAjzgd = feature.fieldValues[FAHEIGHTIndex] || 0;
+                if (Number(FAjzgd) > FAmaxJZGD) {
+                  FAmaxJZGD = Number(FAjzgd);
+                }
+              }
 
               let DataPs = feature.geometry.points.map((item) => [
                 item.x,
@@ -2900,8 +2926,22 @@ export default {
                 let areaPs = area(polygonPs);
                 jzjdzmj += areaPs;
               }
+              debugger;
+              let FAJDIndex = feature.fieldNames.findIndex(
+                (c) => c == "FAJDAREA"
+              );
+              if (FAJDIndex) {
+                let jzjdmj = feature.fieldValues[FAJDIndex] || 0;
+                if (Number(jzjdmj)) {
+                  FAjzjdzmj += Number(jzjdmj);
+                }
+              }
             });
           }
+          //计算书赋值
+          TJFA_Data.JZGD = Number(FAmaxJZGD).toFixed(2);
+          TJFA_Data.JDMJ = Number(FAjzjdzmj).toFixed(2);
+
           FA_Data.JZMJ = Number(jzzmj);
           FA_Data.JZGD = Number(maxJZGD).toFixed(2);
           FA_Data.JDMJ = jzjdzmj;
@@ -2913,6 +2953,12 @@ export default {
 
           //建筑密度
           FA_Data.JZMD = (Number(FA_Data.JDMJ / FA_Data.YDMJ) * 100).toFixed(2);
+          //计算书建筑密度
+          if (TJFA_Data.JDMJ && TJFA_Data.YDMJ) {
+            TJFA_Data.JZMD = (
+              Number(TJFA_Data.JDMJ / TJFA_Data.YDMJ) * 100
+            ).toFixed(2);
+          }
 
           //计算绿地率
 
@@ -2931,23 +2977,35 @@ export default {
           //绿地率
           var ldl = 0;
           var ldmj = 0;
+          var tjfaldmj = 0;
           if (e3 && e3.totalCount > 0) {
             e3.features.forEach((feature) => {
+              var SMAREAIndex = feature.fieldNames.findIndex(
+                (c) => c == "SMAREA"
+              );
               var AREAIndex = feature.fieldNames.findIndex((c) => c == "AREA");
               var PROPORTIONIndex = feature.fieldNames.findIndex(
                 (c) => c == "PROPORTION"
               );
+              if (SMAREAIndex) {
+                var thisldmj = feature.fieldValues[SMAREAIndex] || 0;
+                var PROPORTION = 1;
+                if (PROPORTIONIndex) {
+                  PROPORTION = feature.fieldValues[PROPORTIONIndex] || 1;
+                }
+                ldmj += Number(thisldmj) * Number(PROPORTION);
+              }
               if (AREAIndex) {
                 var thisldmj = feature.fieldValues[AREAIndex] || 0;
                 var PROPORTION = 1;
                 if (PROPORTIONIndex) {
                   PROPORTION = feature.fieldValues[PROPORTIONIndex] || 1;
                 }
-                ldmj += Number(thisldmj) * Number(PROPORTION);
+                tjfaldmj += Number(thisldmj) * Number(PROPORTION);
               }
             });
-            ldl = ((ldmj / KG_Data.YDMJ) * 100).toFixed(2);
-            FA_Data.LDL = ldl;
+            FA_Data.LDL = ((ldmj / KG_Data.YDMJ) * 100).toFixed(2);
+            TJFA_Data.LDL = ((tjfaldmj / KG_Data.YDMJ) * 100).toFixed(2);
           }
         }
         tableDataList.push({ Minfo, KG_Data, FA_Data, TJFA_Data });
@@ -2963,21 +3021,33 @@ export default {
           var land = result.buildings.find(
             (t) => t.landNo == item.KG_Data.DKBM
           );
+          var parks = result.parks.find((t) => t.landNo == item.KG_Data.DKBM);
           if (land == null) continue;
           tableDataList[i].FA_Data.JZMJ = land.mj;
           tableDataList[i].FA_Data.JRJZMJ = land.jrmj;
 
           //20240814改为使用建筑面积计算容积率
           // tableDataList[i].FA_Data.RJL = (land.jrmj / item.FA_Data.YDMJ).toFixed(2);
+          // 20250508
+          // tableDataList[i].FA_Data.RJL = (
+          //   (land.mj - land.dxjzmj) /
+          //   item.FA_Data.YDMJ
+          // ).toFixed(2);
           tableDataList[i].FA_Data.RJL = (
-            (land.mj - land.dxjzmj) /
-            item.FA_Data.YDMJ
+            land.jrmj / item.FA_Data.YDMJ
           ).toFixed(2);
           //开发商提交的方案文档指标
 
+          if (land.fajrmj && item.TJFA_Data.YDMJ) {
+            tableDataList[i].TJFA_Data.RJL = (
+              land.fajrmj / item.TJFA_Data.YDMJ
+            ).toFixed(2);
+          }
+
           tableDataList[i].TJFA_Data.JZMJ = land.famj;
           tableDataList[i].TJFA_Data.JRJZMJ = land.fajrmj;
           tableDataList[i].infoData = land;
+          tableDataList[i].ParkData = parks;
         }
       }
       this.openZBFXInfo([tableDataList]);
@@ -3036,8 +3106,8 @@ export default {
       var fontSize = document.body.style.fontSize;
       if ((fontSize = "")) fontSize = 14;
       else fontSize = parseInt(fontSize.replace("px", ""));
-      let left = w - 400;
-      let top = 550 / 2 + 60;
+      let left = w - 450;
+      let top = 650 / 2 + 60;
       // that.skylineAnalysislayerid =
       that.$layer.iframe({
         id: "BJTC",
@@ -3047,7 +3117,7 @@ export default {
           data: { info: result }, //props
         },
         offset: [left, top], //left top
-        area: ["40rem", "25rem"],
+        area: ["50rem", "35rem"],
         title: "车位审查结果",
         maxmin: false,
         shade: false, //是否显示遮罩
@@ -3519,7 +3589,7 @@ export default {
      */
     openGGPreview(Minfo) {
       this.$layer.close("ConstructionApplication3D");
-      this.$router.push('/');
+      this.$router.push("/");
       this.$layer.iframe({
         id: "BillboardDesign",
         layerStyle: {

+ 3 - 0
src/views/ConstructionApplication3D/zt.scss

@@ -332,4 +332,7 @@
   .el-date-editor .el-range-input {
     background-color: rgba(4, 28, 50, 0.5);
   }
+  .el-textarea .el-input__count {
+    background: #ffffff00 !important;
+  }
 }

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 768 - 4
static/Config/config.js


Vissa filer visades inte eftersom för många filer har ändrats