Explorar el Código

Merge branch 'msg-sever' of http://39.106.8.246:3003/web/ibms into msg-sever

LXXXY hace 5 años
padre
commit
3cfac4cd4c
Se han modificado 41 ficheros con 956 adiciones y 255 borrados
  1. 2 2
      config/dev.env.js
  2. 6 6
      config/prod.env.js
  3. 2 2
      package.json
  4. 3 0
      src/api/model/file.js
  5. 2 1
      src/components/business_space/business/handsontable.vue
  6. 1 9
      src/components/business_space/dialogs/list/uploadImgDialog.vue
  7. 13 27
      src/components/business_space/lib/detailsDia.vue
  8. 3 3
      src/components/business_space/lib/uploadImgs.vue
  9. 1 1
      src/components/business_space/lib/uploadImgsName.vue
  10. 4 2
      src/components/business_space/newGraphy/canvasFun.vue
  11. 113 72
      src/components/business_space/newGraphy/graphy.vue
  12. 24 8
      src/components/config_point/dictionaryCascader.vue
  13. 2 2
      src/components/config_point/examine_main.vue
  14. 0 2
      src/components/config_point/find_keyword.vue
  15. 17 17
      src/components/config_point/step3_edit/index.vue
  16. 9 2
      src/components/config_point/step3_point/3_identify.vue
  17. 9 2
      src/components/config_point/step3_point/dialog_main.vue
  18. 1 2
      src/components/config_point/step3_point/steps3_main.vue
  19. 1 9
      src/components/dialogs/list/uploadImgDialog.vue
  20. 5 4
      src/components/ledger/handsontables/assets.vue
  21. 1 1
      src/components/ledger/handsontables/device.vue
  22. 2 1
      src/components/ledger/handsontables/system.vue
  23. 17 4
      src/components/ledger/lib/uploadImgs.vue
  24. 1 1
      src/components/ledger/lib/uploadImgsName.vue
  25. 9 4
      src/router/system.js
  26. 5 2
      src/utils/handsontable/fillterField.js
  27. 8 1
      src/utils/point_edit/handson_header.js
  28. 579 0
      src/views/business_space/dataUtil/index.vue
  29. 2 1
      src/views/ledger/cenotelist/index.vue
  30. 2 1
      src/views/ledger/facility/parts/index.vue
  31. 2 1
      src/views/ledger/rentlist/index.vue
  32. 3 3
      src/views/ledger/spacelist/index.vue
  33. 28 4
      src/views/point/config_point/edit_origin/index.vue
  34. 3 0
      src/views/point/config_point/steps/step1.vue
  35. 2 2
      src/views/point/config_point/steps/step3.vue
  36. 0 2
      src/views/ready/buildfloor/drawGraphy/bus.js
  37. 6 3
      src/views/ready/buildfloor/drawGraphy/checkGraphy.vue
  38. 57 34
      src/views/ready/buildfloor/drawGraphy/drawFloor.vue
  39. 1 4
      src/views/ready/buildfloor/index.vue
  40. 3 6
      src/views/ready/buildfloor/repetitionGraphy.vue
  41. 7 7
      src/views/ready/collectsetting/index.vue

+ 2 - 2
config/dev.env.js

@@ -6,8 +6,8 @@ module.exports = merge(prodEnv, {
     NODE_ENV: '"development"',
     BASE_URL: '"http://192.168.20.215"', //测试iframe地址
     SSO_SERVER: '"http://192.168.20.102:8080"', //(新)测试环境
-    MQTT_SERVICE: '"ws://192.168.20.225:61614/stomp"' //MQ测试环境地址
+    MQTT_SERVICE: '"ws://192.168.20.225:61614/stomp/"' //MQ测试环境地址
     // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
     // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
-    // MQTT_SERVICE: '""' //MQ正式环境地址
+    // MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
 })

+ 6 - 6
config/prod.env.js

@@ -1,10 +1,10 @@
 'use strict'
 module.exports = {
     NODE_ENV: '"production"',
-    BASE_URL: '"http://192.168.20.215"', //测试iframe地址
-    SSO_SERVER: '"http://192.168.20.102:8080"', //(新)测试环境
-    MQTT_SERVICE: '"ws://192.168.20.225:61614/stomp"' //MQ测试环境地址
-    // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
-    // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
-    // MQTT_SERVICE: '""' //MQ正式环境地址
+    // BASE_URL: '"http://192.168.20.215"', //测试iframe地址
+    // SSO_SERVER: '"http://192.168.20.102:8080"', //(新)测试环境
+    // MQTT_SERVICE: '"ws://192.168.20.225:61614/stomp/"' //MQ测试环境地址
+    BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
+    SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
+    MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
 }

+ 2 - 2
package.json

@@ -26,9 +26,9 @@
         "vuex": "^3.1.0",
         "cad-engine": "2.0.250",
         "@saga-web/base": "2.1.8",
-        "@saga-web/draw": "2.1.56",
+        "@saga-web/draw": "2.1.57",
         "@saga-web/graphy": "2.1.28",
-        "@saga-web/cad-engine": "2.0.278"
+        "@saga-web/cad-engine": "2.0.292"
     },
     "devDependencies": {
         "ajv": "^6.9.1",

+ 3 - 0
src/api/model/file.js

@@ -81,6 +81,9 @@ let api = {
         if (data.FloorName) {
             Filters = `FolderId='${data.FolderId}';FloorName='${data.FloorName}';ProjectId='${data.ProjectId}'`;
         }
+        if (data.Status) {
+            Filters += `;Status in [${data.Status}]`
+        }
         let params = {
             Filters: Filters
         }

+ 2 - 1
src/components/business_space/business/handsontable.vue

@@ -435,7 +435,8 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        // child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 1 - 9
src/components/business_space/dialogs/list/uploadImgDialog.vue

@@ -43,16 +43,8 @@ export default {
   mounted() { },
   methods: {
     deepcopy(obj) {
-      //   var out = [],
-      //     i = 0,
-      //     len = obj.length;
-      //   for (; i < len; i++) {
-      //     if (obj[i] instanceof Array) {
-      //       out[i] = this.deepcopy(obj[i]);
-      //     } else out[i] = obj[i];
-      //   }
       console.log(obj, "out")
-      return obj;
+      return JSON.parse(JSON.stringify(obj));
     },
     changeItem(file) {
       console.log(file, "changed")

+ 13 - 27
src/components/business_space/lib/detailsDia.vue

@@ -1,31 +1,17 @@
 <template>
-  <el-dialog
-    :title="title"
-    append-to-body
-    class="iframe"
-    :visible.sync="dialog.details"
-    width="500px"
-  >
-    <iframe
-      id="google_ads_frame2"
-      name="google_ads_frame2"
-      frameborder="0"
-      width="100%"
-      height="600px"
-      :src="iframeSrc"
-      marginwidth="0"
-      marginheight="0"
-      vspace="0"
-      hspace="0"
-      allowtransparency="true"
-      scrolling="no"
-      allowfullscreen="true"
-    ></iframe>
+  <el-dialog :title="title" append-to-body class="iframe" :visible.sync="dialog.details" width="500px">
+    <iframe :id="id" name="google_ads_frame2" frameborder="0" width="100%" height="300px" :src="iframeSrc" marginwidth="0" marginheight="0" vspace="0"
+      hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true"></iframe>
   </el-dialog>
 </template>
 
 <script>
 export default {
+  data() {
+    return {
+      id: 'google_ads_frame2' + new Date().getTime()
+    }
+  },
   props: {
     iframeSrc: {
       type: String,
@@ -53,7 +39,7 @@ export default {
   methods: {
     setMess() {
       this.$nextTick(_ => {
-        let iframe = document.getElementById("google_ads_frame2")
+        let iframe = document.getElementById(this.id)
         iframe.onload = () => {
           iframe.contentWindow.postMessage(this.setData, "*")
         }
@@ -73,9 +59,9 @@ export default {
 }
 </script>
 <style lang="less" scoped>
-    #google_ads_frame2 {
-        height: 300px;
-        overflow: auto;
-    }
+#google_ads_frame2 {
+  height: 300px;
+  overflow: auto;
+}
 </style>
 

+ 3 - 3
src/components/business_space/lib/uploadImgs.vue

@@ -9,14 +9,14 @@
     <div class="saga-upload-images">
       <div v-if="type != 'video'" class="point-image" v-for="(item,index) in imagesArr">
         <i v-if="!readOnly" class="el-icon-delete" @click="delImage(index,item)"></i>
-        <img :src="imageGetUrl + '&key=' +item" alt v-load>
+        <img :src="imageGetUrl + '&key=' +item.key" alt v-load>
       </div>
       <div v-if="type == 'video'" class="point-image" v-for="(item,index) in imagesArr">
         <i v-if="!readOnly" class="el-icon-delete" @click="delImage(index,item)"></i>
         <video
           width="100%"
           height="100%;"
-          :src="imageGetUrl + '&key=' +item"
+          :src="imageGetUrl + '&key=' +item.key"
           controls="controls"
         >您的浏览器不支持 video 标签。</video>
       </div>
@@ -304,7 +304,7 @@ export default {
     margin-bottom: 10px;
     border: 1px solid #ccc;
     overflow: hidden;
-    image {
+    img {
       z-index: 11;
     }
     i {

+ 1 - 1
src/components/business_space/lib/uploadImgsName.vue

@@ -348,7 +348,7 @@ export default {
     position: relative;
     border: 1px solid #ccc;
     overflow: hidden;
-    image {
+    img {
       z-index: 11;
     }
     i {

+ 4 - 2
src/components/business_space/newGraphy/canvasFun.vue

@@ -53,7 +53,7 @@ export default {
       default: false
     }
   },
-  computed:{
+  computed: {
 
   },
   methods: {
@@ -140,9 +140,11 @@ export default {
     height: 40px;
     padding: 0;
     /deep/.el-slider__runway {
-      margin: 17px 0;
+      margin: 18px 0;
+      height: 4px;
       .el-slider__bar {
         background-color: #fff;
+        height: 4px;
       }
     }
   }

+ 113 - 72
src/components/business_space/newGraphy/graphy.vue

@@ -105,8 +105,9 @@ export default {
       type: 1, // 默认操作模式
       search: '',//搜索
       num: 0, // 未关联空间的业务空间条数
-      buildFloor: [],
-      FloorMap: '',
+      buildFloor: ['', ''],
+      FloorObj: {}, //楼层对象
+      FloorMap: '', //楼层底图
       tab: {},
       isEdit: false,
       canvasLoading: false,
@@ -122,6 +123,7 @@ export default {
       BIMIDToSID: {}, //bimid映射元空间id
       curZoneItem: {}, //当前选中的业务空间item
       allUnRelatISP: [], //
+      zoneList: [], // 业务空间-canvas图中
     }
   },
   computed: {
@@ -135,10 +137,21 @@ export default {
   },
   methods: {
     // 初始化
-    init() {
+    init(initType) {
       this.type = 1;
-      // 获取当前分区下的业务空间
-      this.getBusinessSpace();
+      if (this.scene) {
+        this.scene.isZoneSelectable = true;
+        this.scene.isSpaceSelectable = true;
+        this.scene.clearSpaceSelection();
+        this.scene.clearZoneSelection();
+      }
+      if (initType == 1) {
+        // 底图
+        this.getGraphy();
+      } else {
+        // 业务空间
+        this.getBusinessSpace();
+      }
       // 获取未关联平面图的业务空间统计
       this.getUnrelateCount();
       // 获取当前楼层的元空间
@@ -164,8 +177,8 @@ export default {
     },
     // 搜索
     querySearch(queryString, cb) {
-      var restaurants = this.zoneList;
-      var results = queryString ?
+      let restaurants = this.zoneList;
+      let results = queryString ?
         restaurants.filter(this.createFilter(queryString)) :
         restaurants;
       // 调用 callback 返回建议列表的数据
@@ -188,12 +201,17 @@ export default {
       this.view.fitSelectedToView();
     },
     // 父组件调用
-    getData(buildFloor, FloorMap, tab) {
+    getData(buildFloor, FloorObj, tab) {
+      let initType = 1;
+      if (FloorObj.FloorID == this.FloorObj.FloorID) {
+        initType = 2;
+      }
       this.buildFloor = buildFloor;
-      this.FloorMap = FloorMap;
+      this.FloorObj = FloorObj;
+      this.FloorMap = FloorObj.StructureInfo ? FloorObj.StructureInfo.FloorMap : ''
       this.tab = tab;
       console.log(arguments)
-      this.init();
+      this.init(initType);
     },
     // 获取未关联平面图的业务空间统计
     getUnrelateCount() {
@@ -235,17 +253,15 @@ export default {
           return;
         }
         that.view.scene = that.scene;
-        let tempArr = this.BSPRelaISPList.map((t, i) => {
-          return {
-            RoomLocalName: t.RoomLocalName,
-            OutLine: t.Outline,
-            RoomID: t.RoomID,
-            Color: new SColor(colorArr[i % colorArr.length]),
-          }
-        })
-        that.scene.addZoneList(tempArr);
-        that.scene.click(that, that.canvasClick);
-        that.zoneList = that.scene.zoneList;
+        // 蒙版
+        if (this.FloorObj.Outline) {
+          let newArr = this.FloorObj.Outline.map(t => {
+            return new SPoint(t.X, t.Y);
+          })
+          this.scene.addSceneMark(newArr)
+        }
+        // 绘制业务空间
+        that.getBusinessSpace();
         that.view.fitSceneToView();
         that.view.maxScale = that.view.scale * 10;
         that.view.minScale = that.view.scale;
@@ -254,20 +270,27 @@ export default {
         }
       })
     },
+    // 清空绘制业务空间
+    clearZoneCanvas() {
+      this.zoneList.map(t => {
+        this.scene.removeItem(t);
+      })
+    },
     // 获取当前分区下的业务空间
     getBusinessSpace() {
-      this.isLoading = true
+      this.canvasLoading = true
       let pa = {
         zone: this.tab.code,
         data: {
           Filters: ``,
           Orders: "createTime desc, RoomID asc",
-          PageSize: 500
+          PageSize: 1000
         }
       }
       if (this.buildFloor.length && this.buildFloor.length > 1) {
         pa.data.Filters = `BuildingId='${this.buildFloor[0]}';FloorId='${this.buildFloor[1]}'`
       }
+      this.clearZoneCanvas();
       queryZone(pa, res => {
         // 所有业务空间
         this.businessSpaceList = res.Content;
@@ -282,9 +305,20 @@ export default {
             this.BSPUnrelaISPList.push(t)
           }
         })
-        // 获取底图
-        this.getGraphy();
-        this.isLoading = false;
+        // 绘制业务空间
+        let tempArr = this.BSPRelaISPList.map((t, i) => {
+          return {
+            RoomLocalName: t.RoomLocalName,
+            OutLine: t.Outline,
+            RoomID: t.RoomID,
+            Color: new SColor(colorArr[i % colorArr.length]),
+          }
+        })
+        this.scene.zoneList = [];
+        this.scene.addZoneList(tempArr);
+        this.scene.click(this, this.canvasClick);
+        this.zoneList = this.scene.zoneList;
+        this.canvasLoading = false;
       })
     },
     // canvas点击事件
@@ -301,6 +335,8 @@ export default {
           this.type = 2;
           this.curZoneItem = item;
           this.scene.isSpaceSelectable = false;
+          this.scene.clearZoneSelection();
+          item.selected = true;
         }
       }
     },
@@ -320,8 +356,7 @@ export default {
     },
     // 取消(所有取消公用)
     cancelGraphy() {
-      this.type = 1;
-      this.init();
+      this.init(2);
     },
     // 批量创建业务空间
     groupCreateBSpace() {
@@ -336,53 +371,57 @@ export default {
           FloorId: this.buildFloor[1]
         }
       });
-      this.$confirm(
-        "<p>确定根据未关联业务空间的空间批量创建业务空间</p>" +
-        "<p>涉及的空间:</p>" +
-        "<p style='line-height:20px;max-height:60px;overflow-y:auto;'>" +
-        text.toString() +
-        "</p>",
-        "提示", {
-        dangerouslyUseHTMLString: true,
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }
-      ).then(() => {
-        let pa = {
-          zone: this.tab.code,
-          data: {
-            Content: Spaces
-          }
+      if(Spaces.length){
+        this.$confirm(
+          "<p>确定根据未关联业务空间的空间批量创建业务空间</p>" +
+          "<p>涉及的空间:</p>" +
+          "<p style='line-height:20px;max-height:60px;overflow-y:auto;'>" +
+          text.toString() +
+          "</p>",
+          "提示", {
+          dangerouslyUseHTMLString: true,
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
         }
-        this.canvasLoading = true;
-        createZone(pa, res => {
-          res.EntityList.map(t => {
-            Spaces = Spaces.map(item => {
-              if (t.RoomLocalName == item.RoomLocalName) {
-                item.SpaceId = t.RoomID
-              }
-              return item;
-            })
-          })
-          let param = {
+        ).then(() => {
+          let pa = {
+            zone: this.tab.code,
             data: {
               Content: Spaces
-            },
-            type: this.tab.code
+            }
           }
-          groupCreRelaZoneAndISp(param, res => {
-            this.$message.success('创建成功')
-            this.canvasLoading = false;
-            this.init()
+          this.canvasLoading = true;
+          createZone(pa, res => {
+            res.EntityList.map(t => {
+              Spaces = Spaces.map(item => {
+                if (t.RoomLocalName == item.RoomLocalName) {
+                  item.SpaceId = t.RoomID
+                }
+                return item;
+              })
+            })
+            let param = {
+              data: {
+                Content: Spaces
+              },
+              type: this.tab.code
+            }
+            groupCreRelaZoneAndISp(param, res => {
+              this.$message.success('创建成功')
+              this.canvasLoading = false;
+              this.init(2)
+            })
           })
-        })
-      }).catch(() => {
-        this.$message({
-          type: "info",
-          message: "已取消批量创建"
+        }).catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消批量创建"
+          });
         });
-      });
+      }else{
+        this.$message('没有未关联的元空间')
+      }
     },
     // 创建新的业务空间
     createNewZone() {
@@ -434,7 +473,7 @@ export default {
       }
       updateZone(pa, res => {
         this.$message.success('更新成功');
-        this.init();
+        this.init(2);
       })
     },
     // 编辑空间详情
@@ -448,6 +487,8 @@ export default {
     // 重新划分业务空间
     refactorBSP() {
       this.type = 4;
+      // 清空选中空间
+      this.scene.clearSpaceSelection();
       // 设置空间可选
       this.scene.isSpaceSelectable = true;
       // 将已关联的设置不可选,并将当前选的隐藏
@@ -485,7 +526,7 @@ export default {
       }
       createRelateInZoneAndISp(pa, res => {
         this.$message.success('创建成功');
-        this.init();
+        this.init(2);
       })
     },
     // canvas 获取焦点
@@ -494,7 +535,7 @@ export default {
     },
     // 清除canvas
     clearGraphy() {
-      if (this.view) {
+      if (this.view && this.view.scene) {
         this.view.scene = null;
         return
       }

+ 24 - 8
src/components/config_point/dictionaryCascader.vue

@@ -71,7 +71,8 @@ export default {
         Bd: 'Building',
         Fl: 'Floor',
         VOTn: 'Tenant',
-      }
+      },
+      timer: null
     }
   },
   created() {
@@ -127,7 +128,6 @@ export default {
     },
     //请求信息点
     getDataPoint(type) {
-      let that = this;
       let param = {
         data: {
           Filters: "InputMode='M' or InputMode='L'",
@@ -144,17 +144,31 @@ export default {
             Name: item.InfoPointName
           }
         })
-        this.pushPoints(this.options, tempArr, type);
         this.pointDataSource = {}
         res.Content.map(item => {
           let code = item.InfoPointCode
           this.pointDataSource[code] = item
         })
-        this.$nextTick(() => {
-          this.changeSelect(this.form.dict)
-        })
+        this.timer = setTimeout(() => {
+          if (this.interval()) {
+            this.pushPoints(this.options, tempArr, type);
+            this.changeSelect(this.form.dict);
+            clearTimeout(this.timer);
+            this.timer = null;
+            return
+          }
+          this.timer()
+        }, 100);
       })
     },
+    interval() {
+      for (let i = 0; i < this.options.length; i++) {
+        if (this.options[i].children.length > 0) {
+          return true;
+        }
+      }
+      return false;
+    },
     //根据返回数据拼接options
     pushPoints(options, arr, Code) {
       options.map(option => {
@@ -168,8 +182,10 @@ export default {
       })
     },
     changeSelect(val) {
-      let labels = this.$refs.dictCas.getCheckedNodes()[0].pathLabels
-      this.$emit('change', { val: val, labels: labels })
+      if (this.$refs.dictCas.getCheckedNodes()[0]) {
+        let labels = this.$refs.dictCas.getCheckedNodes()[0].pathLabels
+        this.$emit('change', { val: val, labels: labels })
+      }
     },
     //减少请求次数
     hasChildren(Code) {

+ 2 - 2
src/components/config_point/examine_main.vue

@@ -138,12 +138,13 @@
                         data: {
                             Filters: {
                                 DataSourceId: this.datasourceId,
-                                ProjectId: this.projectId,
                                 KeyEquipmentParameter: this.EquipmentParameter,
                                 KeyEquipmentType: this.EquipmentType,
                                 Used: true
                             }
                         },
+                        PageNumber: 1,
+                        PageSize: 1000,
                         type: this.protocolType
                     },
                     width, settings
@@ -169,7 +170,6 @@
                     type: this.protocolType,
                     data: {
                         DataSourceId: this.datasourceId,
-                        ProjectId: this.projectId,
                         KeyEquipmentType: this.EquipmentType
                     }
                 }, res => {

+ 0 - 2
src/components/config_point/find_keyword.vue

@@ -209,7 +209,6 @@
                 queryFun({
                     data: {
                         DataSourceId: this.datasourceId,
-                        ProjectId: this.projectId,
                         Ai: this.isSwitch
                     },
                     type: this.protocolType
@@ -273,7 +272,6 @@
                 // console.log(getListFetch)
                 getListFetch({
                     data: {
-                        ProjectId: this.projectId,
                         DataSourceId: this.datasourceId
                     },
                     type: this.protocolType

+ 17 - 17
src/components/config_point/step3_edit/index.vue

@@ -458,24 +458,24 @@ export default {
           this.$refs.dictionaryCas.setCascaderVal(tempArr)
         })
 
-        this.handleItemChange(dict, () => {
           this.form.DataRuleType = data.DataRuleType
-          this.unitObj = this.infoDict[data.InfomationPointCode]
-          this.InfomationPoint = this.unitObj.infoPointName || '--'
-          if (typeof this.unitObj.dataSource == 'string') {
-            if (this.unitObj.dataSource.length) {
-              this.ValueDescription = this.unitObj.dataSource
-            } else {
-              this.ValueDescription = '无信息点单位及值说明'
-            }
-          } else {
-            let str = ''
-            this.unitObj.dataSource.forEach(ele => {
-              str += ele.code + '.' + ele.name + ' '
-            })
-            this.ValueDescription = str
-          }
-        })
+        // this.handleItemChange(dict, () => {
+          // this.unitObj = this.infoDict[data.InfomationPointCode]
+          // this.InfomationPoint = this.unitObj.infoPointName || '--'
+          // if (typeof this.unitObj.dataSource == 'string') {
+          //   if (this.unitObj.dataSource.length) {
+          //     this.ValueDescription = this.unitObj.dataSource
+          //   } else {
+          //     this.ValueDescription = '无信息点单位及值说明'
+          //   }
+          // } else {
+          //   let str = ''
+          //   this.unitObj.dataSource.forEach(ele => {
+          //     str += ele.code + '.' + ele.name + ' '
+          //   })
+          //   this.ValueDescription = str
+          // }
+        // })
         if (length == 1) {
           let flag = data.DataRuleType
           var dataRules = null

+ 9 - 2
src/components/config_point/step3_point/3_identify.vue

@@ -4,7 +4,7 @@
             <el-collapse v-model="activeName" @change="handleChange" accordion>
                 <el-collapse-item v-for="(item,index) in renderData" :key="index" :name="index+1">
                     <template slot="title">
-                        <span style="padding-left:10px;box-sizing:border-box;">
+                        <span :title="item.Group" style="padding-left:10px;box-sizing:border-box;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">
                             {{item.Group}}
                         </span>
                     </template>
@@ -276,7 +276,14 @@
                             Visible: true,
                             FirstTag: ""
                         }
-                    ]
+                    ],
+                    "common": [{
+                        InfoPointName: "*地址详情",
+                        InfoPointCode: "JoinedInfo",
+                        InputMode: "B1",
+                        Visible: true,
+                        FirstTag: ""
+                    }],
                 }
                 let allData = this.renderData[this.activeName - 1].PointList,
                     data = {

+ 9 - 2
src/components/config_point/step3_point/dialog_main.vue

@@ -105,7 +105,7 @@
                                 Used: true
                             },
                             PageNumber: 1,
-                            PageSize: 100
+                            PageSize: 1000
                         },
                         type: this.protocolType
                     }, res => {
@@ -264,7 +264,14 @@
                                     Visible: true,
                                     FirstTag: ""
                                 }
-                            ]
+                            ],
+                            "common": [{
+                                InfoPointName: "*地址详情",
+                                InfoPointCode: "JoinedInfo",
+                                InputMode: "B1",
+                                Visible: true,
+                                FirstTag: ""
+                            }],
                         }
                         let allData = this.identDataArr,
                             data = {

+ 1 - 2
src/components/config_point/step3_point/steps3_main.vue

@@ -132,13 +132,12 @@
                                 Filters: {
                                     KeyEquipmentParameter: param.EquipmentParameter,
                                     KeyEquipmentType: param.EquipmentType,
-                                    DataSourceId: this.datasourceId,
                                     Used: true
                                     // KeyEquipmentParameter: '温度',
                                     // KeyEquipmentType: '冷机'
                                 },
                                 PageNumber: 1,
-                                PageSize: 100
+                                PageSize: 1000
                             },
                             type: this.protocolType
                         }, res => {

+ 1 - 9
src/components/dialogs/list/uploadImgDialog.vue

@@ -42,16 +42,8 @@ export default {
   mounted() { },
   methods: {
     deepcopy(obj) {
-      //   var out = [],
-      //     i = 0,
-      //     len = obj.length;
-      //   for (; i < len; i++) {
-      //     if (obj[i] instanceof Array) {
-      //       out[i] = this.deepcopy(obj[i]);
-      //     } else out[i] = obj[i];
-      //   }
       console.log(obj, "out")
-      return obj;
+      return JSON.parse(JSON.stringify(obj));
     },
     changeItem(file) {
       console.log(file, "changed")

+ 5 - 4
src/components/ledger/handsontables/assets.vue

@@ -45,7 +45,7 @@
       <my-pagination @change="getTableData" :page="page"></my-pagination>
     </div>
     <!-- <dialog-assets :assetType="[this.mess.deviceId]"  @close="closeDialog" ref="assets" v-if="myDialog.addDevice" :dialog="myDialog" ></dialog-assets> -->
-    <details-dialog :iframeSrc="iframeSrc" v-if="myDialog.details" :dialog="myDialog"></details-dialog>
+    <!-- <details-dialog :iframeSrc="iframeSrc" v-if="myDialog.details" :dialog="myDialog"></details-dialog> -->
     <look-pic :dialog="myDialog" :keysArr="picsArr"></look-pic>
     <!-- 不支持的输入方式 -->
     <el-dialog title="临时维护信息点" :visible.sync="myDialog.update" @close="handleCloseUpdate" width="670px">
@@ -97,7 +97,7 @@ import insurerDialog from "@/components/business_space/dialogs/list/insurerDialo
 import guaranteeDialog from "@/components/business_space/dialogs/list/guaranteeDialog"
 import uploadFilesDialog from "@/components/business_space/dialogs/list/filesDialog"
 import uploadImgDialog from "@/components/business_space/dialogs/list/uploadImgDialog"
-import detailsDialog from "@/components/business_space/lib/detailsDia"
+// import detailsDialog from "@/components/business_space/lib/detailsDia"
 import picDialog from "@/components/business_space/dialogs/list/picDialog"
 import myPagination from "@/components/common/myPagination"
 import dialogAssets from "@/components/ledger/addDialog/dialogAssets"
@@ -131,7 +131,7 @@ export default {
     myCascader,
     floorCascader,
     dieCascader,
-    detailsDialog,
+    // detailsDialog,
     lookPic
   },
   created() {
@@ -329,7 +329,8 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        // child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 1 - 1
src/components/ledger/handsontables/device.vue

@@ -341,7 +341,7 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 2 - 1
src/components/ledger/handsontables/system.vue

@@ -346,7 +346,8 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        // child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 17 - 4
src/components/ledger/lib/uploadImgs.vue

@@ -9,14 +9,14 @@
     <div class="saga-upload-images">
       <div v-if="type != 'video'" class="point-image" v-for="(item,index) in imagesArr">
         <i v-if="!readOnly" class="el-icon-delete" @click="delImage(index,item)"></i>
-        <img :src="imageGetUrl + '&key=' +item" alt v-load>
+        <img :src="imageGetUrl + '&key=' +item.key" @click="lookImg" alt v-load>
       </div>
       <div v-if="type == 'video'" class="point-image" v-for="(item,index) in imagesArr">
         <i v-if="!readOnly" class="el-icon-delete" @click="delImage(index,item)"></i>
         <video
           width="100%"
           height="100%;"
-          :src="imageGetUrl + '&key=' +item"
+          :src="imageGetUrl + '&key=' +item.key"
           controls="controls"
         >您的浏览器不支持 video 标签。</video>
       </div>
@@ -35,11 +35,16 @@
         <video style="display:none;" id="video" controls/>
       </div>
     </div>
+    <details-dialog :title="'图片'" :iframeSrc="iframeSrc" :dialog="dialog" :setData="imagesArr"></details-dialog>
   </div>
 </template>
 <script>
 import tools from "@/utils/scan/tools";
+import detailsDialog from "@/components/business_space/lib/detailsDia"
 export default {
+  components: {
+    detailsDialog
+  },
   props: {
     keysArr: {
       type: [Array, String]
@@ -73,7 +78,11 @@ export default {
       baseUrl: "",
       imageGetUrl: "/image-service/common/image_get?systemId=dataPlatform",
       imageUploadUrl: "/image-service/common/image_upload?systemId=dataPlatform&secret=9e0891a7a8c8e885&overwrite=true",
-      imagesArr: []
+      imagesArr: [],
+      iframeSrc: "",
+      dialog: {
+        details: false
+      }
     };
   },
   created() {
@@ -94,7 +103,11 @@ export default {
         this.imagesArr = [];
       }
     },
-
+    //查看图片
+    lookImg() {
+      this.dialog.details = true
+      this.iframeSrc = process.env.BASE_URL + ":8890/photo-View.html"
+    },
     //删除图片
     delImage(i, key) {
       if (this.type == "video") {

+ 1 - 1
src/components/ledger/lib/uploadImgsName.vue

@@ -347,7 +347,7 @@ export default {
     position: relative;
     border: 1px solid #ccc;
     overflow: hidden;
-    image {
+    img {
       z-index: 11;
     }
     i {

+ 9 - 4
src/router/system.js

@@ -74,6 +74,9 @@ import overView from '@/views/relation/overview'
 /**  厂家库 */
 import supplier from '@/views/manufactor/supplier'
 
+/**  业务空间数据导入工具 */
+import dataUtil from '@/views/business_space/dataUtil'
+
 /**市场及商务 */
 const OwnerManage = () =>
     import('@/views/market/owner/manage')
@@ -83,6 +86,8 @@ export default [
     //{ path: '/login', name: 'Login', component: Login },
     { path: '/auth', name: 'auth', component: auth },
     { path: '/noUser', name: 'noUser', component: noUser },
+    // 业务空间数据导入工具
+    { path: '/dataUtil', name: 'dataUtil', component: LayoutMain,children:[{path:'index',component: dataUtil}] },
     // 平台管理
     {
         path: '/platform',
@@ -100,8 +105,8 @@ export default [
         name: 'LayoutMain',
         component: LayoutMain,
         children: [
-            { path: 'buildfloor', name: 'buildFloor', component: buildFloor, meta: { keepAlive: false, breadcrumbs: [{ label: '建筑楼层管理' }] } },
-            // { path: 'buildfloor', name: 'buildFloor', component: Dasboard, meta: { keepAlive: false, breadcrumbs: [{ label: '建筑楼层管理' }] } },
+            // { path: 'buildfloor', name: 'buildFloor', component: buildFloor, meta: { keepAlive: false, breadcrumbs: [{ label: '建筑楼层管理' }] } },
+            { path: 'buildfloor', name: 'buildFloor', component: Dasboard, meta: { keepAlive: false, breadcrumbs: [{ label: '建筑楼层管理' }] } },
             { path: 'collectsetting', name: 'collectsetting', component: collectsetting, meta: { keepAlive: false, breadcrumbs: [{ label: '需采集的信息点' }] } },
             { path: 'appuser', name: 'buildUser', component: buildUser, meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼App用户管理' }] } },
             { path: 'repetitionGraphy', name: 'repetitionGraphy', component: repetitionGraphy, meta: { keepAlive: false, breadcrumbs: [{ label: '建筑楼层管理', path: '/ready/buildfloor' }, { label:'平面图维护' }] }}
@@ -117,8 +122,8 @@ export default [
             {
                 path: 'file',
                 name: 'modelFile',
-                // component: Dasboard,
-                component: modelFile,
+                component: Dasboard,
+                // component: modelFile,
                 meta: { keepAlive: false, breadcrumbs: [{ label: '模型管理', path: '/model/file' }, { label: '模型文件管理' }] }
             },
             {

+ 5 - 2
src/utils/handsontable/fillterField.js

@@ -58,12 +58,15 @@ const data = {
     ]
   },
   space:{//业务空间
-    onlyRead: [],
+    onlyRead: [
+      "Outline"
+    ],
     edit: [
       "RoomID",
       "RoomName",
       "BIMID",
-      "BIMLocation"
+      "BIMLocation",
+      "Outline"
     ]
   }
 }

+ 8 - 1
src/utils/point_edit/handson_header.js

@@ -151,7 +151,14 @@ const headers = {
             Visible: true,
             FirstTag: ""
         }
-    ]
+    ],
+    "common": [{
+        InfoPointName: "*地址详情",
+        InfoPointCode: "JoinedInfo",
+        InputMode: "B1",
+        Visible: true,
+        FirstTag: ""
+    }],
 }
 
 let common = [{

+ 579 - 0
src/views/business_space/dataUtil/index.vue

@@ -0,0 +1,579 @@
+<template>
+  <div class="main-box">
+    <div class="saga-build-mess">
+      <span style="padding-right:12px;color:#999999;">建筑楼层</span>
+      <el-cascader :options="options" v-model="buildFloorSelectd" :props="props" @change="changeCascader"></el-cascader>
+      <el-button @click="updateSpOutline">导入业务空间Outline</el-button>
+      <el-button @click="updateSiOutline">更新元空间Outline</el-button>
+    </div>
+  </div>
+</template>
+<script>
+import {
+  getDataDictionary,
+  getAllbusiness,
+  getSpaceFloor,
+  queryDictionaryHead,
+  buildingQuery, //数据中心-建筑查询
+  queryZone,
+  updateZone,
+  getGraphyId, // 物理世界获取图实例关系
+  getRelation, // 物理世界获取业务空间与元空间关系
+  getBussines2, //
+} from "@/api/scan/request";
+import { mapGetters } from "vuex";
+import pako from '@/assets/pako/pako'
+import axios from "axios";
+export default {
+  data() {
+    return {
+      buildFloorSelectd: [],
+      props: { //自定义字段
+        value: "BuildID",
+        label: "BuildLocalName",
+        children: "Floor"
+      },
+      floorIdToMap: {}, //楼层id->楼层图
+      options: [],
+      tabsList: [
+        {
+          "Code": "GeneralZone",
+          "Name": "默认分区",
+          "Rel_type": "99"
+        },
+        {
+          "Name": "供电分区",
+          "Rel_type": "1",
+          "Code": "PowerSupplyZone"
+        },
+        {
+          "Name": "照明分区",
+          "Rel_type": "2",
+          "Code": "LightingZone"
+        },
+        {
+          "Name": "空调分区",
+          "Rel_type": "4",
+          "Code": "AirConditioningZone"
+        }, {
+          "Name": '租赁分区',
+          'Rel_type': '10',
+          "Code": 'TenantZone'
+        }
+      ],
+      allSiListMap: {}, //Si id ->sourceid
+      sourceIdToOutline: {}, //sourceid -> outline
+      graphyId: '',
+      allABC: [
+        'Fl11010500011b85b9eeff8211e8b8b087ac5144d0ef20191010145313bim.jsonz',
+        'Fl110105000181b22b1608b911e9acbca78c1b4e10a620191011181833bim.jsonz',
+        'Fl1101050001072a8b6cff8211e8b8b0015f957e8c7f20191010145327bim.jsonz',
+        'Fl11010500011007d4edff8211e8b8b0ab7044c4281120191010145320bim.jsonz',
+        'Fl11010500012a0741ffff8211e8b8b057c9c998394220191010152132bim.jsonz',
+        'Fl1101050001fb55faebff8111e8b8b07995537bf28720191011143329bim.jsonz',
+        'Fl11010500012c9b2aeb5ffa11e9a618397d1467f28020191011104423bim.jsonz',
+        'Fl11010500018aff2ad35ff711e9a6182f2301e72e6020190909174638bim.jsonz',
+        'Fl110105000150fa91315ff711e9a618c9724397ed0720191010152112bim.jsonz',
+        'Fl1101050001183b6fde5ff711e9a618071bdac223fe20191011143315bim.jsonz',
+        'Fl1101050001723c0e525ff711e9a618cbf5042c40d120191010152106bim.jsonz',
+        'Fl11010500013e6974505ff711e9a618e15213be8b4820191010161301bim.jsonz',
+        'Fl110105000130c1d17f5ff711e9a618c7fff3f2463720190829142855bim.jsonz',
+        'Fl11010500019bd7ae53b36611e9989b6b5aa64fce0020191011143304bim.jsonz',
+        'Fl110105000107cd29a4b36711e9989b833dd102d9f620190909180620bim.jsonz',
+        'Fl1101050001c62588265ff711e9a6180390acf0fbab20191010161242bim.jsonz',
+        'Fl1101050001ed4873e85ff711e9a618b9a20cddb21320191010161233bim.jsonz',
+        'Fl1101050001fc75cc595ff711e9a6184b0a58d23d4b20191011180342bim.jsonz',
+        'Fl1101050001b83236555ff711e9a6187be56804052e20191010161246bim.jsonz',
+        'Fl1101050001d8621c675ff711e9a61867e9c4c4e7ed20191010161238bim.jsonz',
+        'Fl1101050001a62034845ff711e9a6187d378045931b20191010161256bim.jsonz',
+        'Fl1101050001417e9293877811e9ad1f9727a4cb9ff920191008182236bim.jsonz',
+        'Fl110105001393a9aafcdf6d11e99e5477f4fe220c4820190929200808bim.jsonz',
+        'Fl1101050013866991b5df6f11e99e548f7fb48601bc20190929200729bim.jsonz',
+        'Fl1101050013fae74390df6d11e99e54d5561aa01bd520190929200817bim.jsonz',
+        'Fl1101050013c3da061adf6f11e99e54c7d23ab4172a20190929200700bim.jsonz',
+        'Fl11010500139faa5f21df6e11e99e546bdd7272e66c20190929200825bim.jsonz',
+        'Fl1101050013937cbcb6df6f11e99e543d85d7068bdf20190929200724bim.jsonz',
+        'Fl1101050013db95d69fdf6d11e99e5429a50115d5a420190929223016bim.jsonz',
+        'Fl1101050013e4bae212df6e11e99e54b7ff375e245d20190929200841bim.jsonz',
+        'Fl1101050013a075a8f7df6f11e99e54adca7466d03c20190929200719bim.jsonz',
+        'Fl1101050013ac0986f8df6f11e99e54fdce5ae59e1e20190929200712bim.jsonz',
+        'Fl1101050013b977f159df6f11e99e54b1c8cff9906a20190929200706bim.jsonz',
+        'Fl1101050013ce04c90edf6d11e99e54f9e2920216e220190929200752bim.jsonz',
+        'Fl110105001359d5d373df6f11e99e54b7e95468964e20190929200740bim.jsonz',
+        'Fl110105001374ad7814df6f11e99e545f0fb9fea1c520190929200735bim.jsonz',
+        'Fl1101050013c019dbaddf6d11e99e54bd8e15b3817720190929200801bim.jsonz',
+        'Fl1101050013a307b155a6e611e9af72f99ee18c8c9320190929200849bim.jsonz',
+        'Fl110105001382cc80a2a6e611e9af72f5982a28cf3420190929200858bim.jsonz',
+        'Fl11010500135cae0c8fa6e611e9af722bfdfa84dab620190929200911bim.jsonz',
+        'Fl1101050013750e96b1a6e611e9af721b1d998988a820190929200902bim.jsonz',
+        'Fl11010500134fb34b8ea6e611e9af7283fc80c9cbb120190929200915bim.jsonz',
+        'Fl1101050013437068dda6e611e9af72cde0e896ab3d20190929200920bim.jsonz',
+        'Fl1101050013af27a2b6a6e611e9af72a3a381eb49f520190929200845bim.jsonz',
+        'Fl11010500138ee916a3a6e611e9af7219302358433020190929200854bim.jsonz',
+        'Fl1101050013349a582ca6e611e9af72f38a28243be020190929200924bim.jsonz',
+        'Fl1101050013ebcbe2daa6e511e9af72535c0db8e49420190929200928bim.jsonz',
+        'Fl110105001367b00ad0a6e611e9af72391f1a6981f320190929200907bim.jsonz',
+        'Fl11010500135ced8275e0f111e99542a554062b3c7920190929201135bim.jsonz',
+        'Fl1101050013619b3967a6cd11e9af727dca2b35db2320190929201149bim.jsonz',
+        'Fl110105001392f3f029a6cc11e9af727dda4b57623320190929201048bim.jsonz',
+        'Fl1101050013647048c7a6cc11e9af72273d51e4947220190929201101bim.jsonz',
+        'Fl1101050013d269353ea6cc11e9af728fc5d00b2f0a20190929201023bim.jsonz',
+        'Fl11010500133665f9b5a6cd11e9af726fad221345ff20190929201130bim.jsonz',
+        'Fl110105001326ee9ff4a6cd11e9af72c73df1895e7720190929200935bim.jsonz',
+        'Fl110105001318587e73a6cd11e9af722f27783c843620190929200943bim.jsonz',
+        'Fl11010500134ce29f05a6cc11e9af7279570e0d569620190929201108bim.jsonz',
+        'Fl1101050013c6574d9da6cc11e9af72814bd704fa4820190929201033bim.jsonz',
+        'Fl1101050013866b03c8a6cc11e9af7267ca9836c13820190929201052bim.jsonz',
+        'Fl110105001373245d34cec611e9ba1805fb011b0dfb20190929201056bim.jsonz',
+        'Fl1101050013ba5f569ca6cc11e9af729b3a5696c34b20190929201038bim.jsonz',
+        'Fl11010500131f8ca234a6cc11e9af726b1c42a58f6d20190929201113bim.jsonz',
+        'Fl1101050013fd91c9c1a6cc11e9af7209967911472120190929201009bim.jsonz',
+        'Fl1101050013ab47d01ba6cc11e9af72c5020a93d09a20190929201043bim.jsonz',
+        'Fl1101050013e5eb8fefa6cc11e9af72f7e04830b73820190929201019bim.jsonz',
+        'Fl11010500130b3dd962a6cd11e9af723b4fff1de76c20190929200948bim.jsonz',
+        'Fl1101050013f0e5c500a6cc11e9af72ff5f8a3c54ec20190929201013bim.jsonz',
+        'Fl1101050027b6b6aeeebffc11e9878df3336d9ea69e20190902174737bim.jsonz',
+        'Fl1101050027f0987e4fbffc11e9878d853ef4ec937120190902174729bim.jsonz',
+        'Fl11010500276984c300bffd11e9878daf61c33e94da20190902174726bim.jsonz',
+        'Fl11010500278764c5a1bffd11e9878dff1cbcff2a8c20190902174719bim.jsonz',
+        'Fl11010500270e9c1032cd2a11e980674dea463014f320190902174707bim.jsonz',
+        'Fl110105002724295613cd2a11e9806727431a8ae35120190902174701bim.jsonz',
+        'Fl11010500279a0795c2bffd11e9878d21f91e2f7f0320190902174656bim.jsonz',
+        'Fl11010500272fb9e795ebf811e99ae435ea4d30ba4420191011153552bim.jsonz',
+        'Fl1101050027169fd510bfff11e9878d93526a68d7f520190828114146bim.jsonz',
+        'Fl1101050027fec855d9c97111e9878db36977c4803420190830162151bim.jsonz',
+        'Fl11010500273fc2ba11c00011e9878d8b124890032f20190828114140bim.jsonz',
+        'Fl1101050027cff41526cad711e9878d51b041ce6c1420190830160305bim.jsonz',
+        'Fl11010500275ca2b1d2c00011e9878df9f6e301bb0020190830160300bim.jsonz',
+        'Fl1101050027c941e8f4ebf711e99ae419b18488406120191011153543bim.jsonz',
+        'Fl11010500272815663fbffe11e9878db3dfe1b036f620190828114149bim.jsonz',
+        'Fl11010500277a169a48c00211e9878d4992c207a3fb20190903115048bim.jsonz',
+        'Fl11010500270c2d96ecc00311e9878d3f65b38832eb20190830142026bim.jsonz',
+        'Fl1101050027c594c649c00211e9878d4958f9e57f9220190903115038bim.jsonz',
+        'Fl1101050027f904cdebc00211e9878d3fc39b79fc7620190903115027bim.jsonz',
+        'Fl11010500270d0cbe35c00111e9878d612869b5adf720190903115053bim.jsonz',
+        'Fl1101050027a9f1f454c00011e9878d3d62ff2fd7d120190903115104bim.jsonz',
+        'Fl1101050027da8704aac00211e9878de504b8a990b820190903115033bim.jsonz',
+        'Fl11010500276f8ca7a7c00111e9878df574b1a855ee20190903115126bim.jsonz',
+        'Fl11010500274c7f4426c00111e9878d0fcd7948fe4720191011181832bim.jsonz',
+        'Fl110106000484c7cba9a1f011e9af72d1172b07188c20190917182902bim.jsonz',
+        'Fl11010600043f284548a1ef11e9af724d13fb54915920190906141306bim.jsonz',
+        'Fl110106000495c67edba1ef11e9af72ef904d1149c920190815150042bim.jsonz',
+        'Fl11010600044ba809e9a1ef11e9af7227433ebfb24b20190806101248bim.jsonz',
+        'Fl110106000427e698a6a1ef11e9af7245df9000e89720190906141322bim.jsonz',
+        'Fl1101060004a9672c63a1ee11e9af72311fab83533320190906141338bim.jsonz',
+        'Fl1101060004edd4f170a1ec11e9af72337886122cde20190917182934bim.jsonz',
+        'Fl110106000495197d15a1ec11e9af723104dc167b8b20190918175434bim.jsonz',
+        'Fl1101060004770c6551a1ee11e9af7265d7fcda7fec20190805175421bim.jsonz',
+        'Fl1101060004eca29690a1ed11e9af72411038923a1620190906102538bim.jsonz',
+        'Fl1101060004144a69c2a1ee11e9af72cb8e03b3179120190806101414bim.jsonz',
+        'Fl1101060004d6912c8da1ed11e9af721742ebc5a8e720190906102550bim.jsonz',
+        'Fl1101060004bd91552ca1ed11e9af7229b5746d0be420190906102601bim.jsonz',
+        'Fl11010600049cb9e47aa1ed11e9af72b7f53d9fd31c20190906102613bim.jsonz',
+        'Fl1101060004859d9a28a1ed11e9af722795f30acb1e20190906102624bim.jsonz',
+        'Fl11010600046b0dfb06a1ed11e9af72095d00257b8320190906102636bim.jsonz',
+        'Fl110106000454df4505a1ed11e9af725993924d36af20190906102647bim.jsonz',
+        'Fl1101060004a2b8d0d2a1ee11e9af72cf69abe1f44c20190830172626bim.jsonz',
+        'Fl11010600049728cdfda1ef11e9af722b0e3c2ead1a20190906141233bim.jsonz',
+        'Fl11010600049401dd4ba1ea11e9af7217861d0891ec20190919101549bim.jsonz',
+        'Fl1101060004481d2ad5a1ee11e9af7217d19632185220190906102502bim.jsonz',
+        'Fl110106000453353e84a1ed11e9af729581dac7689720190918175156bim.jsonz',
+        'Fl110106000476457d84a1ec11e9af72615d90b9bace20190905115756bim.jsonz',
+        'Fl110106000420829e13a1ee11e9af727b0bba623f7b20190906102514bim.jsonz',
+        'Fl110106000427accdd4a1f011e9af726b0152b4b9c620190929194726bim.jsonz',
+        'Fl1101060004fc037a2ea1f011e9af728bfeb54243cc20190906114418bim.jsonz',
+        'Fl110106000439d43700a1f111e9af72e19a95c6fbb820190909162505bim.jsonz',
+        'Fl1101060004d58ad82da1f011e9af72ef37cac520f920190918174923bim.jsonz',
+        'Fl1101060004fe4aa030a1ef11e9af72890f877b061520190929194745bim.jsonz',
+        'Fl1101060004240b4503a1ed11e9af726774a6bf470620190906102658bim.jsonz',
+        'Fl1101060004f9d47331a1f511e9af7289f01e05fb2c20190806101048bim.jsonz',
+        'Fl110106000473aaead0a1ee11e9af72ad49804d0c8f20190905163621bim.jsonz',
+        'Fl1101060004601ce4c6a1f011e9af72cf69dc1b598a20190918175009bim.jsonz',
+        'Fl11010600041747409ca1ec11e9af720fa2b741a00520190918175404bim.jsonz',
+        'Fl1101060004df80ec9ea1ed11e9af7277bc2af6e9c020190918175110bim.jsonz',
+        'Fl1101060004d6911abea1ef11e9af722b4776bc3d0e20190906141217bim.jsonz',
+        'Fl110106000458a53beaa1ef11e9af72fff3e1767ce920190906141250bim.jsonz',
+        'Fl11010600041c8a0912a1ed11e9af72c9b7bfceff0d20190909155405bim.jsonz',
+        'Fl11010600042b9521b7a1ef11e9af7279797025390a20190806101302bim.jsonz',
+        'Fl1101060004d30d8eb5a1ee11e9af72bfe0e47b193920190806101316bim.jsonz',
+        'Fl11010600040586cfa1a1ee11e9af722bb32265eadd20190906102527bim.jsonz',
+        'Fl110106000431b95b14a1ee11e9af727d00803ef8d620190806180123bim.jsonz',
+        'Fl11010600047253dba7a1ed11e9af72ff3602d8e82320190918175134bim.jsonz',
+        'Fl110106000448d6812ca2ad11e9af727d118e25aa6e20190806101526bim.jsonz',
+        'Fl1101060004e22b615fa1ef11e9af7247e952fac96320190806101219bim.jsonz',
+        'Fl11010600043bcc2bd5a1f011e9af72291c81eb8ae020190918175036bim.jsonz',
+        'Fl1101060004b4734e76a1ec11e9af722dd03355db1220190918175217bim.jsonz',
+        'Fl110106000420b6c57fa1f111e9af72012c927f3f4f20190906141134bim.jsonz',
+        'Fl1101060004aea831aba1ed11e9af72dfa8683aa4f720190802175313bim.jsonz',
+        'Fl1101060004a6eccafca1f011e9af7267472ea15a9620190918174948bim.jsonz',
+        'Fl110108000408a83beea2ee11e9af7259d2f787ab1620190830153737bim.jsonz',
+        'Fl11010800043f73a6877cfb11e9b795d3adf149642620191009195306bim.jsonz',
+        'Fl1101080004946844cc4ac311e99acc8b6cd31791d320190920154722bim.jsonz',
+        'Fl11010800043637f04b70834f2dbe0b82eb39068a0420191009200946bim.jsonz',
+        'Fl11010800062954591caec311e99dcfaf5a8be870d220190726122330bim.jsonz',
+        'Fl110108000672c3bbfeb1e811e9989bbd47a0e3272e20190729181028bim.jsonz',
+        'Fl1101080006d99973bfb1da11e9989b79ad9f9909f120190729170849bim.jsonz',
+        'Fl110108000602683ac0b1db11e9989b790e8880072b20190729170815bim.jsonz',
+        'Fl11010800069dcb169eb1da11e9989bc5597d8ba85920190729171022bim.jsonz',
+        'Fl11010800069fee982cb1a311e98d09d94cc66ae83520190729095659bim.jsonz',
+        'Fl1101080006b4019a1db1a311e98d093b33ddef2c3320190729095658bim.jsonz',
+        'Fl1101080006b18ac731b0d711e99dcf0f0ecc4ec38320190728095102bim.jsonz',
+        'Fl1101080006deb6f4e2b0d711e99dcfaf78f8a28ef720190728095012bim.jsonz',
+        'Fl11010800062bd07555b1cb11e9989b9751358f824620190729152437bim.jsonz',
+        'Fl11010800063c933ad6b1cb11e9989b1f3944fc1f0320190729152317bim.jsonz',
+        'Fl11010800064bdddf47b1cb11e9989b6713fdfea4de20190729152224bim.jsonz',
+        'Fl110108000610ea51c4b1cb11e9989be5322a94201220190729152547bim.jsonz',
+        'Fl11022900023e5a6bf514b511e9bf82f555b5e8b9ef20190419193227bim.jsonz',
+        'Fl110229000227d3f90414b511e9bf82bb63fa6a645a20190628142041bim.jsonz',
+        'Fl11022900020feb5e0314b511e9bf82c9cf158b9d1d20190628142043bim.jsonz',
+        'Fl110229000251f844f730f011e9b57c69e5186dd31b20190419193222bim.jsonz',
+        'Fl1102290002f78b220214b411e9bf82d9c41152624520190628142046bim.jsonz',
+        'Fl1102290002c54c958014b411e9bf82990dde33286d20190419193245bim.jsonz',
+        'Fl1102290002ae932baf14b411e9bf82d95e5f5d242a20190419193249bim.jsonz',
+        'Fl110229000248580efd14b411e9bf82e3a8a0e2a89e20190628120557bim.jsonz',
+        'Fl110229000217341a3c14b411e9bf82b76a9822ffb720190612121043bim.jsonz',
+        'Fl1102290002415d2275156a11e9bf8299370a1e2bae20190529164411bim.jsonz',
+        'Fl11022900027d6114935b7b11e9a5293d97a8a829ec20190612115403bim.jsonz',
+        'Fl110229000280f3ab26156a11e9bf82f9931ac7a65e20190529164406bim.jsonz',
+        'Fl1102290002e04c6878303e11e98edb07eab392dc6f20190419193209bim.jsonz',
+        'Fl11022900027a15c8e15b7511e9a52949dda85af39520190529164353bim.jsonz',
+        'Fl11022900023faffc705b7511e9a5298ff666bb187320190529164400bim.jsonz',
+        'Fl1102290002994137425b7511e9a529e917c82b6f3b20190419193155bim.jsonz',
+        'Fl3202130001f7a87a77e02b11e99542576d04b778bd20190930133829bim.jsonz',
+        'Fl3202130001c0c2fb23e02b11e995428577eec7921f20190930133918bim.jsonz',
+        'Fl32021300011194d4b9e02c11e99542bd8a4e0763ed20190926170827bim.jsonz',
+        'Fl32021300015df8ccdbe02c11e995427d500ee9f7e020190926170802bim.jsonz',
+        'Fl32021300016b71be8ce02c11e995426f7774395d0220190930135557bim.jsonz',
+        'Fl32021300018565fd6fe02b11e9954225a51157c39520190930133927bim.jsonz',
+        'Fl32021300015193bc2ae02c11e995427d46e123456120190926170815bim.jsonz',
+        'Fl3202130001e480e9f6e02b11e99542093b12ca666c20190930133841bim.jsonz',
+        'Fl3202130001b39cbd52e02b11e99542e108d97173bf20190926160644bim.jsonz',
+        'Fl3202130001d795e065e02b11e99542efd320197a1120190930133854bim.jsonz',
+        'Fl3202130001cd8e6ec4e02b11e9954285c1898e19ee20190930133904bim.jsonz',
+        'Fl3202130001a8e360d1e02b11e995421b39d0ace4ba20190927163237bim.jsonz',
+        'Fl320213000102b80d48e02c11e99542a716c237371720190926170838bim.jsonz',
+        'Fl32021300017033cfdee02b11e995425b075e3067b920190927163247bim.jsonz',
+        'Fl320302000133a87d5fb82d11e9b911b16d2dc3905220191011212048bim.jsonz',
+        'Fl32030200012b206aa6b82b11e9b9115d2e5ebb7c5320191011231520bim.jsonz',
+        'Fl3203020001412bd428e43d11e995428303078b495420191011194108bim.jsonz',
+        'Fl3203020001224834c9b82c11e9b911213bd490e29120191011231238bim.jsonz',
+        'Fl32030200014b32730bb82c11e9b911e70ac73db3d520191001021358bim.jsonz',
+        'Fl3203020001a29af72ee44211e9954245190612ff2120191011184403bim.jsonz',
+        'Fl3203020001110346f8b82c11e9b91193bb5caf414f20191011231407bim.jsonz',
+        'Fl32030200011c74da7db82d11e9b911153be4336a1320191011193846bim.jsonz',
+        'Fl3203020001ea88d037b82b11e9b91165a8f4d67d7f20191011184556bim.jsonz',
+        'Fl3203020001f19ae48be38b11e995427107eaf662ac20191009084145bim.jsonz',
+        'Fl32030200010e5874e3e97e11e99ae48398da7062f220191008120205bim.jsonz',
+        'Fl321023000111978428ddcc11e99e54178307d0c26720190924114916bim.jsonz',
+        'Fl32102300012906d079ddcc11e99e54ed7a9709490320190923170801bim.jsonz',
+        'Fl3210230001e2e44147ddcb11e99e54859c4c487f7220190923170824bim.jsonz',
+        'Fl330108000103044151bed44f7598d0e442f2f97c2e20181205121637bim.jsonz',
+        'Fl3301080001d660e6513bf241efbf0039a38d41959320181205121634bim.jsonz',
+        'Fl330108000132de58189884406e87c67054015b8ed020181205121650bim.jsonz',
+        'Fl33010800013fbaeba32e3843a48f9483c89f9e92e120181206034333bim.jsonz',
+        'Fl33010800013f801891979f4c15becd5eebf5eae9cd20181205121647bim.jsonz',
+        'Fl42010500013ed500a0dce811e8a553553e376f6dfe20190803114640bim.jsonz',
+        'Fl42010500012ca5c61ddcf511e8a5535bb85ffaee3b20190910175845bim.jsonz',
+        'Fl4201050001cb2aa6fbdced11e8a55303170283ca2920190912170100bim.jsonz',
+        'Fl4201050001b947f615dcf111e8a553b7cf52cf35af20190912170028bim.jsonz',
+        'Fl420105000110be38e9dcf511e8a5532b791a1ee2c420190910175947bim.jsonz',
+        'Fl42010500018e478ab3dcd811e88790bdbb92e7fee120190603191648bim.jsonz',
+        'Fl4201050001077f36addce111e8a5534ded040d5d7c20190603191658bim.jsonz',
+        'Fl420105000152e79b7adce211e8a55337c9cf1e3bdf20190717152852bim.jsonz',
+        'Fl42010500010495727bdce311e8a5539d686e463b9120190717152934bim.jsonz',
+        'Fl42010500012298db9cdce311e8a5534d128a2b354f20190803114429bim.jsonz',
+        'Fl4201050001cf1cad1ddce311e8a553934d1b04c91820190803114512bim.jsonz',
+        'Fl4201050001d4f1ea8fdce711e8a55335c5dd75d7b320190803114559bim.jsonz',
+        'Fl42010500015ecaeaf1dce811e8a553ab01e573104520190803114726bim.jsonz',
+        'Fl420105000189c43312dce811e8a5530301735c51a020190803114808bim.jsonz',
+        'Fl4201050001afd0f3e3dce811e8a553f5b22da96b1b20190803114831bim.jsonz',
+        'Fl420105000103457586dcf211e8a553531a211276f820190910175633bim.jsonz',
+        'Fl42010500017108cf60dcee11e8a55391554ae262a520190912170227bim.jsonz',
+        'Fl420105000119b7c08edcee11e8a553abe8a598be9320190912170132bim.jsonz',
+        'Fl42010500016dc07b43dcf111e8a553e7c23f5c005c20190803114853bim.jsonz',
+        'Fl42010500018b580334dcf111e8a553db1eadfac99320190803114958bim.jsonz',
+        'Fl42010500013b806f0fdcee11e8a553edb14706cbae20190912170155bim.jsonz',
+        'Fl42010500015f8ce4eddcf411e8a5532f436ae9c16120190910175756bim.jsonz',
+        'Fl420105000187b9a94fdcf511e8a553f74f3c6c70e020190910175919bim.jsonz',
+        'Fl420105000127246764dcf711e8a55349b04e56bcfc20190715180639bim.jsonz',
+        'Fl420105000189701916dda411e8a553593d715bd0c020190726104402bim.jsonz',
+        'Fl4201050001b3a83417dda411e8a5536fdeea00e31920190529111322bim.jsonz',
+        'Fl4201050001cbec83a8dda411e8a553e9d5e46989b220190708172234bim.jsonz',
+        'Fl42010500011ce3d777626a11e9b1b401e6e3ff79df20190529111305bim.jsonz',
+        'Fl4201050001d82483b0dcf511e8a553356fcf1dd57720190910175713bim.jsonz',
+        'Fl4403040012c38b2d7981b611e9a64d2f8df58163fa20190823180122bim.jsonz',
+        'Fl4403040012ef96cffb81b611e9a64d0552bb0a85ab20190924101419bim.jsonz',
+        'Fl4403040012d9485cfa81b611e9a64d11ceb052822320190718175437bim.jsonz',
+        'Fl4403040012a3c5a1f881b611e9a64d2d7ef600a17b20190823180142bim.jsonz',
+        'Fl440304001239f96f4581b611e9a64d43a752acf96c20190905154149bim.jsonz',
+        'Fl44030400122e5e48de81b711e9a64dbbdec755c07c20190815142831bim.jsonz',
+        'Fl44030400125ba87b4681b611e9a64dbf3a1838393b20190823180229bim.jsonz',
+        'Fl44030400124f295d7f81b711e9a64d0314bee18a1720190817152204bim.jsonz',
+        'Fl44030400120337881c81b711e9a64d5908c65ec0ab20190823142759bim.jsonz',
+        'Fl44030400127b7a466181b711e9a64d558931e17c6e20190712120444bim.jsonz',
+        'Fl44030400121842578d81b711e9a64dad63b66e0c2f20190823142746bim.jsonz',
+        'Fl440304001261be991081b711e9a64d5f6f04bcc34e20190823142737bim.jsonz',
+        'Fl44030400127ab7880781b611e9a64d0d6ad5abbd1520190920162746bim.jsonz',
+        'Fl441900000531d1a578b82e48a1b6a4dcfced63bdc020191001101716bim.jsonz',
+        'Fl44190000058cf94fefd42648609c305693f88e076620190930175443bim.jsonz',
+        'Fl4419000005b98bb7a9d85840b39f56a8fe69e2741620190930175456bim.jsonz',
+        'Fl4419000005d99cddf5561e4ffc942e5a7428cad9c120191001101653bim.jsonz',
+        'Fl44190000058ed0b0e0964549e4aa9c2f75e71537e820191011145844bim.jsonz',
+        'Fl4419000005eef95195db6c4531b410974040cf5f4a20191001101610bim.jsonz',
+        'Fl4419000005fcd5559503354eb19b84cbc71187f99c20191001101729bim.jsonz',
+        'Fl110108000100100320190228022700bim.jsonz',
+        'Fl110108000100100620190228022706bim.jsonz',
+        'Fl110108000100100720190228022708bim.jsonz',
+        'Fl110108000100100820190228022709bim.jsonz',
+        'Fl110108000100100220190228022658bim.jsonz',
+        'Fl110108000100100120190228022656bim.jsonz',
+        'Fl110108000100100420190228022702bim.jsonz',
+        'Fl110108000100100520190301095138bim.jsonz'
+      ]
+    }
+  },
+  computed: {
+    ...mapGetters('layout', ['projectId', 'userId', 'secret'])
+  },
+  methods: {
+    // 初始化
+    init() {
+      this.getBuilding();
+      // this.getTypes()
+    },
+    // 获取图实例关系
+    getGraphy() {
+      getGraphyId({
+        type: "ElementSptoSpace",
+        ProjId: this.projectId,
+        secret: this.secret
+      }).then(res => {
+        if (res.data.Result == "success") {
+          this.graphyId = res.data.graph_id;
+          this.tabsList.map(t => {
+            this.getHasSpace(t.Code, t.Rel_type);
+          })
+        }
+      })
+    },
+    // 查询元空间
+    querySi() {
+      let pa = {
+        data: {
+          Filters: `FloorId='${this.buildFloorSelectd[1]}'`,
+          PageSize: 1000
+        },
+        zone: 'Ispace'
+      }
+      queryZone(pa, res => {
+        this.allSiListMap = {}
+        res.Content.map(t => {
+          let arr = t.BIMID.split(":");
+          this.allSiListMap[t.RoomID] = arr[1];
+        })
+        console.log(this.allSiListMap)
+      })
+    },
+    // 获取业务空间与元空间的关系
+    getRelationInSpSi(Code, Reltype, list) {
+      let pa = {
+        criterias: { criterias: [] },
+        ProjId: this.projectId,
+        secret: this.secret
+      }
+      list.map(t => {
+        pa.criterias.criterias.push({
+          to_id: t,
+          graph_id: this.graphyId,
+          rel_type: Reltype
+        })
+      })
+      getRelation(pa).then(res => {
+        let relList = []
+        list.map((item, index) => {
+          let children = res.data.Content[index].Content.map(i => {
+            if (!!i) {
+              return i.from_id;
+            } else {
+              return undefined;
+            }
+          });
+          relList.push({
+            id: item,
+            children: children
+          });
+        });
+        this.importOutline(Code, relList)
+      })
+    },
+    // 获取项目下建筑
+    getBuilding() {
+      let pa = {
+        Cascade: [{ name: 'floor', Orders: 'SequenceId desc' }],
+        Orders: "BuildLocalName asc",
+      }
+      buildingQuery(pa, res => {
+        this.options = res.Content.map(t => {
+          if (t.Floor) {
+            t.Floor = t.Floor.map(item => {
+              item.BuildID = item.FloorID;
+              item.BuildLocalName = item.FloorLocalName;
+              this.floorIdToMap[item.FloorID] = item.StructureInfo ? item.StructureInfo.FloorMap : ''
+              return item;
+            })
+            console.log(this.floorIdToMap)
+          } else {
+            t.Floor = []
+          }
+          return t;
+        })
+      })
+    },
+    // 切换楼层
+    changeCascader() {
+      this.getJson(this.floorIdToMap[this.buildFloorSelectd[1]])
+    },
+    // 获取tabs的列表
+    getTypes() {
+      let pa = {
+        Filters: `parentId = 'Space'`
+      }
+      queryDictionaryHead(pa, res => {
+        this.tabsList = res.Content.map(t => {
+          if (t.Name == "元空间") {
+            return undefined;
+          }
+          return t;
+        }).filter(item => item);
+      })
+    },
+    // 更新业务空间的轮廓线
+    importOutline(Code, relList) {
+      let pa = {
+        data: {
+          Content: [],
+          Projection: ['Outline']
+        },
+        zone: Code
+      }
+      relList.map(t => {
+        let obj = {
+          RoomID: t.id,
+          Outline: []
+        }
+        t.children.map(item => {
+          if (this.sourceIdToOutline[this.allSiListMap[item]]) {
+            obj.Outline.push(this.sourceIdToOutline[this.allSiListMap[item]]);
+          }
+        })
+        pa.data.Content.push(obj);
+      })
+      updateZone(pa, res => {
+        this.$message.success(`success-----${Code}`)
+      })
+    },
+    // 查询绑定了元空间的业务空间
+    getHasSpace(Code, Reltype) {
+      let param = {
+        data: {
+          criteria: {
+            id: this.buildFloorSelectd[1],
+            type: [Code],
+            "include": [ // 可选, 只查询指定图/关系中的对象
+              {
+                "graphId": this.graphyId,
+                "graphType": Code,
+                "relType": Reltype,
+                "side": "toId",
+              }
+            ]
+          },
+        },
+        ProjId: this.projectId,
+        secret: this.secret
+      }
+      getBussines2(param).then(res => {
+        if (res.data.Result == "success") {
+          if (res.data.Content && res.data.Content.length) {
+            let relationList = res.data.Content.map(item => {
+              return item.id;
+            });
+            this.getRelationInSpSi(Code, Reltype, relationList);
+          }
+        }
+      })
+    },
+    // 获取底图
+    getJson(jsonId) {
+      axios({
+        method: 'get',
+        url: `/image-service/common/file_get?systemId=revit&key=${jsonId}`,
+        data: {},
+        responseType: 'blob',
+      }).then(res => {
+        let data = null
+        let blob = res.data;
+        let reader = new FileReader();
+        reader.readAsBinaryString(blob)
+        let _this = this
+        reader.onload = function (readerEvt) {
+          let binaryString = readerEvt.target.result;
+          let base64Data = btoa(binaryString)
+          let unGzipData = pako.unzip(base64Data)
+          // data = unGzipData
+          data = unGzipData.entityList ? unGzipData.entityList[0].Elements : unGzipData.EntityList[0].Elements
+          if (data.Spaces && data.Spaces.length) {
+            data.Spaces.map(t => {
+              _this.sourceIdToOutline[t.SourceId] = t.OutLine;
+            })
+            // }
+            // if (data.SpaceList && data.SpaceList.length) {
+            //   data.SpaceList.map(items => {
+            //     _this.sourceIdToOutline[items.BimId] = items.Paths;
+            //   });
+          } else {
+            _this.$message("没有元空间数据")
+          }
+          console.log(_this.sourceIdToOutline)
+          _this.querySi();
+        };
+      });
+    },
+    updateSpOutline() {
+      this.getGraphy();
+    },
+    updateSiOutline() {
+      let pa = {
+        data: {
+          Content: [],
+          Projection: ['Outline']
+        },
+        zone: 'Ispace'
+      }
+      for (let key in this.allSiListMap) {
+        let obj = {
+          RoomID: key,
+          Outline: []
+        }
+        if (this.sourceIdToOutline[this.allSiListMap[key]]) {
+          obj.Outline = this.sourceIdToOutline[this.allSiListMap[key]];
+          pa.data.Content.push(obj);
+        }
+      }
+      if (pa.data.Content.length) {
+        updateZone(pa, res => {
+          this.$message.success(`success-----Ispace`)
+        })
+      }
+    }
+  },
+  created() {
+    this.init()
+  },
+  watch: {
+    projectId() {
+      this.init()
+    }
+  }
+}
+</script>

+ 2 - 1
src/views/ledger/cenotelist/index.vue

@@ -511,7 +511,8 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        // child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 2 - 1
src/views/ledger/facility/parts/index.vue

@@ -485,7 +485,8 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        // child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 2 - 1
src/views/ledger/rentlist/index.vue

@@ -534,7 +534,8 @@ export default {
                       tools.setDataForKey(
                         item,
                         head.Path,
-                        child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        // child.error ? "表号功能号格式错误" : "表号功能号不存在"
+                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });

+ 3 - 3
src/views/ledger/spacelist/index.vue

@@ -112,7 +112,7 @@ export default {
         children: "Floor"
       },
       floorToMap: {}, //楼层及其对应的模型图
-      FloorMap: "", //当前选中的楼层平面图
+      FloorMap: "", //当前选中的楼层对象
       buildFloorSelectd: [], //当前所选的建筑楼层
       childBackParam: {}
     };
@@ -140,7 +140,7 @@ export default {
             t.Floor = t.Floor.map(item => {
               item.BuildID = item.FloorID;
               item.BuildLocalName = item.FloorLocalName;
-              this.floorToMap[item.FloorID] = item.StructureInfo ? item.StructureInfo.FloorMap : '';
+              this.floorToMap[item.FloorID] = item;
               return item;
             })
           } else {
@@ -196,7 +196,7 @@ export default {
     //修改所选建筑楼层
     changeCascader(val) {
       // val[0]->建筑 val[1]->楼层
-      if (!this.floorToMap[val[1]]) {
+      if (!this.floorToMap[val[1]].StructureInfo || !this.floorToMap[val[1]].StructureInfo.FloorMap) {
         this.isMyTab = 2;
       }
       this.FloorMap = this.floorToMap[val[1]];

+ 28 - 4
src/views/point/config_point/edit_origin/index.vue

@@ -14,11 +14,11 @@
             <el-input type="textarea" class="edit-textarea dcenter block" v-model="formData.Description" placeholder="请维护数据源说明"></el-input>
             <el-form label-width="120px" style="width:400px;" :model="formData" class="dcenter">
                 <el-form-item label="协议类型">
-                    <el-select v-model="formData.ProtocolType" filterable placeholder="请选择">
+                    <el-select v-model="formData.ProtocolType" filterable @change="handleChangeProtocolType" placeholder="请选择">
                         <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="主机IP地址">
+                <el-form-item label="主机IP地址" v-if="formData.ProtocolType != 'common'">
                     <ip-input :ip="formData.ProtocolInfo.Ip" :port="formData.ProtocolInfo.Port" :ProtocolType="formData.ProtocolType" @change="changeItem" @deletePort="deletePort"></ip-input>
                 </el-form-item>
                 <el-form-item label="用户名/密码" v-if="(passWordArr.indexOf(formData.ProtocolType) > -1)">
@@ -28,6 +28,9 @@
                 <el-form-item label="ProgId" v-if="formData.ProtocolType == 'opc'">
                     <el-input v-model="formData.ProtocolInfo.ProgId" style="display:inline-block;width:100px;"></el-input>
                 </el-form-item>
+                <el-form-item label="属性详情" v-if="formData.ProtocolType == 'common'">
+                    <el-input type="textarea" :autosize="{ minRows: 8, maxRows: 8}" v-model="ProtocolInfo"  placeholder="请输入json格式数据" style="display:inline-block;width:400px;"> </el-input>
+                </el-form-item>
             </el-form>
         </div>
     </div>
@@ -67,6 +70,7 @@
                     },
                     Description: ""
                 },
+                ProtocolInfo:"",//自定义协议信息
                 options: [{
                     value: 'modbus-tcp',
                     label: 'Modbus TCP'
@@ -85,6 +89,9 @@
                 }, {
                     value: 'amqp',
                     label: 'AMQP'
+                }, {
+                    value: 'common',
+                    label: '其他'
                 }],
                 id: this.$route.query.key
             }
@@ -114,6 +121,13 @@
                 this.formData.ProtocolInfo.Ip = ip
                 this.formData.ProtocolInfo.Port = port
             },
+            handleChangeProtocolType(val){//切换协议类型
+                if(val == 'common'){
+                    this.formData.ProtocolStandarded = false
+                } else {
+                    this.formData.ProtocolStandarded = true
+                }
+            },
             getDataSouse() {
                 let param = {
                     Filters: {
@@ -136,6 +150,7 @@
                         }
                     } else {
                         //有信息点时
+                        this.ProtocolInfo = JSON.stringify(data.ProtocolInfo)
                     }
                     this.formData = data
                     console.log(this.formData, "formData")
@@ -146,9 +161,18 @@
                 let param = tools.deepCopy(this.formData)
                 tools.delObjKey(param, "CreateTime")
                 tools.delObjKey(param, "LastUpdate")
+                if(param.ProtocolType == 'common'){
+                    try{
+                        let ProtocolInfo = JSON.parse(this.ProtocolInfo)
+                        param.ProtocolInfo = ProtocolInfo
+                    } catch (err) {
+                        this.$message.error("属性详情格式错误!")
+                        return false
+                    }
+                }
                 if (!!this.id) {
                     console.log(param.ProtocolInfo.Port)
-                    if (param.ProtocolInfo.Port == "") {
+                    if (param.ProtocolInfo.hasOwnProperty("Port") && param.ProtocolInfo.Port == "") {
                         delete param.ProtocolType.Port
                     }
                     updateDataSource({
@@ -162,7 +186,7 @@
                         this.$message.success("更新成功!")
                     })
                 } else {
-                    param.ProjectId = this.projectId
+                    // param.ProjectId = this.projectId
                     console.log(param, "param")
                     createDataSource(param, res => {
                         console.log(res)

+ 3 - 0
src/views/point/config_point/steps/step1.vue

@@ -438,6 +438,9 @@
                                  createList[i].Type &&
                                  createList[i].hasOwnProperty("RoutingKey") &&
                                  createList[i].RoutingKey
+                                ) ||
+                                (createList[i].hasOwnProperty("JoinedInfo") &&
+                                 createList[i].JoinedInfo
                                 )
                               )) {
                                 this.$message("请输入所有必填字段(带“*”列为必填列)")

+ 2 - 2
src/views/point/config_point/steps/step3.vue

@@ -162,11 +162,11 @@
                             item.Point.DataRuleType = item.RelationList[0].DataRuleType
                             item.Point.PhysicalRelated = item.RelationList[0].Type
                             //设备-部件-空间
-                            if(item.RelationList[0].EquipmentTypeCode&&item.RelationList[0].EquipmentTypeCode!='null'){
+                            if(item.RelationList[0].TypeCode == 'Eq' || item.RelationList[0].TypeCode == 'Ec' || item.RelationList[0].TypeCode == 'Sp'){
                                 item.Point.PhysicalRelated += '-' + item.RelationList[0].EquipmentType
                             }
                             //系统
-                            if(item.RelationList[0].SystemCode&&item.RelationList[0].SystemCode!='null'){
+                            if(item.RelationList[0].TypeCode == 'Sy'){
                                 item.Point.PhysicalRelated += '-' + item.RelationList[0].Specialty
                                 item.Point.PhysicalRelated += '-' + item.RelationList[0].System
                             }

+ 0 - 2
src/views/ready/buildfloor/drawGraphy/bus.js

@@ -1,2 +0,0 @@
-import Vue from 'Vue';
-export default new Vue()

+ 6 - 3
src/views/ready/buildfloor/drawGraphy/checkGraphy.vue

@@ -9,7 +9,7 @@
       </div>
       <!-- 展示框 -->
       <div class="showBox">
-        <drawFloor ref="drawFloorDialog" :showTools="false" :id="0"></drawFloor>
+        <drawFloor ref="drawFloorDialog" :showTools="false" :id="0" :dialog="true"></drawFloor>
       </div>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -59,7 +59,9 @@ export default {
         return
       }
       let pa = {
-        Content: [{ FloorId: this.floor.FloorID, Id: this.modelIdToFloorId[this.jsonKey], BuildingId: this.floor.BuildID }]
+        FloorId: this.floor.FloorID,
+        Id: this.modelIdToFloorId[this.jsonKey],
+        BuildingId: this.floor.BuildID
       };
       bindFloorModel(pa, res => {
         this.$message.success("更新成功");
@@ -69,13 +71,14 @@ export default {
     },
     // 点击多级联动
     handleChange(val) {
-      this.$refs.drawFloorDialog.initGraphy(val[1])
+      this.$refs.drawFloorDialog.initGraphy(val[1], 1)
       this.jsonKey = val[1]
     },
     // 通过id查询文件夹下模型文件
     handleItemChange(val) {
       let data = {
         FolderId: val[0],
+        Status: '3, 31, 4',
         ProjectId: this.projectId
       };
       request.queryFloorList(data, res => {

+ 57 - 34
src/views/ready/buildfloor/drawGraphy/drawFloor.vue

@@ -9,10 +9,9 @@
 </template>
 
 <script>
-import eventBus from "./bus.js";
-import { SGraphyView } from "@sybotan-web/graphy/lib";
-import { DivideFloorScene } from "cad-engine"
-import { SColor, SPoint } from "@sybotan-web/draw/lib";
+import { SGraphyView } from "@saga-web/graphy/lib";
+import { DivideFloorScene } from "@saga-web/cad-engine/lib"
+import { SColor, SPoint } from "@saga-web/draw/lib";
 import canvasFun from "@/components/business_space/newGraphy/canvasFun"
 import { floorQuery } from "@/api/scan/request";
 export default {
@@ -30,6 +29,7 @@ export default {
       modelId: '',
       FloorID: '',
       Outline: [],
+      floorData: {}
     };
   },
   props: {
@@ -41,56 +41,79 @@ export default {
     },
     id: {
       default: 0
+    },
+    dialog: {
+      default: false
     }
   },
   created() {
     this.FloorID = this.$route.query.FloorID;
-    this.OutlineFlag = this.$route.query.OutlineFlag;
+    if (!this.dialog) {
+      this.getFloorData();
+    }
   },
   mounted() {
     this.cadWidth = document.getElementById(`drawFloor${this.id}`).offsetWidth;
     this.cadHeight = document.getElementById(`drawFloor${this.id}`).offsetHeight;
   },
   methods: {
-    initGraphy(ModelId) {
+    // 初始化canvas
+    initGraphy(Id, type) {
+      // type=1 => id:模型id
+      // type=2 => id:floormap
       let that = this;
-      that.modelId = ModelId;
+      that.modelId = Id;
       that.clearGraphy()
       that.drawMainScene = new DivideFloorScene();
       that.canvasLoading = true;
-      that.drawMainScene.getFloorData('/modelapi/base-graph/query', { ModelId: ModelId }).then(res => {
-        let Elements = res.EntityList[0].Elements;
-        let flag = false;
-        for (let key in Elements) {
-          if (Elements[key].length > 0) {
-            flag = true;
-          }
-        }
-        if (flag) {
-          that.view.scene = that.drawMainScene
-          that.view.fitSceneToView();
-          that.canvasLoading = false;
-          that.view.maxScale = that.view.scale * 10;
-          that.view.minScale = that.view.scale;
-          that.drawMainScene.isSpaceSelectable = false;
-          if (this.$refs.canvasFun) {
-            that.$refs.canvasFun.everyScale = that.view.scale;
-          }
-          if (that.OutlineFlag) {
-            this.getFloorData()
-          }
-        }
-      })
+      if (type == 1) {
+        that.drawMainScene.getFloorData('/modelapi/base-graph/query', { ModelId: Id }).then(res => {
+          that.getGraphtSuc(res)
+        })
+      } else {
+        that.drawMainScene.loadUrl(`/image-service/common/file_get?systemId=revit&key=${Id}`).then(res => {
+          that.getGraphtSuc(res)
+        })
+      }
+
     },
+    // 获取底图成功
+    getGraphtSuc(res) {
+      this.canvasLoading = false;
+      if (res == 'error') {
+        this.FloorMap = '';
+        this.$message.warning('数据解析异常');
+        return;
+      }
+      if (res.Result == 'failure') {
+        this.showTools = false;
+        this.$message.warning(res.Message);
+        return;
+      }
+      this.view.scene = this.drawMainScene;
+      this.view.fitSceneToView();
+      this.drawMainScene.isSpaceSelectable = false;
+
+      if (this.$refs.canvasFun) {
+        this.view.maxScale = this.view.scale * 10;
+        this.view.minScale = this.view.scale;
+        this.$refs.canvasFun.everyScale = this.view.scale;
+      }
+      if (this.floorData.Outline && this.floorData.Outline.length) {
+        let newArr = this.floorData.Outline.map(t => {
+          return new SPoint(t.X, t.Y);
+        })
+        this.drawMainScene.addSceneMark(newArr)
+      }
+    },
+    // 获取楼层数据
     getFloorData() {
       let pa = {
         Filters: `FloorID='${this.FloorID}'`
       }
       floorQuery(pa, res => {
-        let newArr = res.Content[0].Outline.map(t => {
-          return new SPoint(t.X, t.Y);
-        })
-        this.drawMainScene.addSceneMark(newArr)
+        this.floorData = res.Content[0];
+        this.initGraphy(this.floorData.StructureInfo.FloorMap, 2)
       })
     },
     // 清空平面图

+ 1 - 4
src/views/ready/buildfloor/index.vue

@@ -43,7 +43,7 @@
                     <i class="iconfont icon-floorplan"></i>
                   </el-badge>平面图重复
                 </p>
-                <p v-else-if="scope.row.ModelId" @click="checkDrawImg(scope.row,1)">
+                <p v-else-if="scope.row.StructureInfo?scope.row.StructureInfo.FloorMap:false" @click="checkDrawImg(scope.row,1)">
                   <i class="iconfont icon-floorplan"></i>
                   查看平面图
                 </p>
@@ -239,9 +239,6 @@ export default {
       } else {
         this.modelId = row.ModelId;
         let pa = { modelId: this.modelId, FloorID: row.FloorID, BuildID: row.BuildID }
-        if (row.Outline && row.Outline.length) {
-          pa.OutlineFlag = true;
-        }
         this.$router.push({ name: "repetitionGraphy", query: pa });
       }
     }

+ 3 - 6
src/views/ready/buildfloor/repetitionGraphy.vue

@@ -35,11 +35,8 @@ export default {
     this.modelId = this.$route.query.modelId;
     this.FloorID = this.$route.query.FloorID;
     this.BuildID = this.$route.query.BuildID;
-    this.OutlineFlag = this.$route.query.OutlineFlag;
-  },
-  mounted() {
-    this.$refs.drawFloor.initGraphy(this.modelId)
   },
+  mounted() { },
   methods: {
     // 返回路由
     backRouter() {
@@ -82,7 +79,7 @@ export default {
     // 取消
     cancel() {
       this.isEdit = false;
-      this.$refs.drawFloor.initGraphy(this.modelId)
+      this.$refs.drawFloor.getFloorData();
     },
     // 编辑平面图
     editGraphy() {
@@ -96,7 +93,7 @@ export default {
   watch: {
     modelId(n, o) {
       if (o && n != o) {
-        this.$refs.drawFloor.initGraphy(n)
+        this.$refs.drawFloor.initGraphy(n, 1)
       }
     }
   }

+ 7 - 7
src/views/ready/collectsetting/index.vue

@@ -93,21 +93,21 @@
             return {
                 value: "property",
                 options: [{
-                    label: "资产",
-                    value: "property"
-                }, {
-                    label: "系统",
-                    value: "System"
-                }, {
                     label: "设备",
                     value: "Equipment"
                 }, {
                     label: "部件",
                     value: "Component"
                 }, {
-                    label: "空间",
+                    label: "资产",
+                    value: "property"
+                }, {
+                    label: "业务空间",
                     value: "space"
                 }, {
+                    label: "系统",
+                    value: "System"
+                }, {
                     label: "租户",
                     value: "tenant"
                 }, {