Jelajahi Sumber

Merge branch 'dev' of http://39.106.8.246:3003/web/ibms into dev

shaun-sheep 5 tahun lalu
induk
melakukan
1e2d48682c
30 mengubah file dengan 896 tambahan dan 363 penghapusan
  1. 6 6
      config/dev.env.js
  2. 189 189
      config/index.js
  3. 1 1
      package.json
  4. 2 2
      src/api/topo/index.js
  5. 4 8
      src/views/ledger/report/indexExport.vue
  6. 29 0
      src/components/model/file/addFloorDialog.vue
  7. 1 0
      src/components/model/file/floorTable.vue
  8. 1 0
      src/components/model/file/modelLog.vue
  9. 4 3
      src/components/model/file/nodeDialog.vue
  10. 1 0
      src/components/model/file/pathCard.vue
  11. 30 5
      src/components/model/file/replaceModelDialog.vue
  12. 7 3
      src/components/point/dynamicdata/buildRules.vue
  13. 10 6
      src/components/point/dynamicdata/equipRules.vue
  14. 5 1
      src/components/point/dynamicdata/floorRules.vue
  15. 1 1
      src/components/point/dynamicdata/locationCascader.vue
  16. 5 1
      src/components/point/dynamicdata/partsRules.vue
  17. 5 1
      src/components/point/dynamicdata/projectRules.vue
  18. 5 1
      src/components/point/dynamicdata/spaceRules.vue
  19. 5 1
      src/components/point/dynamicdata/systemRules.vue
  20. 5 1
      src/components/point/dynamicdata/tenantRules.vue
  21. 41 7
      src/framework/layout/PageHeader.vue
  22. 7 5
      src/framework/layout/layout-store.js
  23. 381 0
      src/utils/getFirstLetter.js
  24. TEMPAT SAMPAH
      src/views/business_space/dataUtil/2.jpg
  25. 19 8
      src/views/business_space/dataUtil/topology.vue
  26. 7 2
      src/views/ledger/report/index.vue
  27. 1 0
      src/views/model/file/index.vue
  28. 103 101
      src/views/model/file/pathcontrol/index.vue
  29. 13 4
      src/views/point/dynamicdata/addRelation/spaceRela/index.vue
  30. 8 6
      src/views/ready/collectsetting/index.vue

+ 6 - 6
config/dev.env.js

@@ -4,12 +4,12 @@ const prodEnv = require('./prod.env')
 
 module.exports = merge(prodEnv, {
     NODE_ENV: '"development"',
-    // BASE_URL: '"http://172.16.44.215"', //测试iframe地址
-    // SSO_SERVER: '"http://172.16.44.235:8081"', //测试环境
+    BASE_URL: '"http://172.16.44.215"', //测试iframe地址
+    SSO_SERVER: '"http://172.16.44.235:8081"', //测试环境
     // BASE_URL: '"http://192.168.20.236"', //(新)测试iframe地址
     // SSO_SERVER: '"http://192.168.20.236:8086"', //(新)测试环境
-    // MQTT_SERVICE: '"ws://172.16.42.210:61614/stomp/"' //MQ测试环境地址
-    SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
-    BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
-    MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
+    MQTT_SERVICE: '"ws://172.16.42.210:61614/stomp/"' //MQ测试环境地址
+    // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
+    // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
+    // MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
 })

+ 189 - 189
config/index.js

@@ -10,197 +10,197 @@ module.exports = {
     assetsSubDirectory: 'static',
     assetsPublicPath: '/',
 
-    proxyTable: {//正式环境
-      '/admin': {
-        target: 'http://mbi.sagacloud.cn:8080',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/admin": "/"
-        }
-      },
-      '/api': {
-        target: 'http://mbi.sagacloud.cn:8080',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/api": "/"
-        }
-      },
-      '/data-platform-3': {
-        // 目标 API 地址
-        target: 'http://api.sagacloud.cn/',
-        // 如果要代理 websockets
-        ws: true,
-        // 将主机标头的原点更改为目标URL
-        changeOrigin: false
-      },
-      '/business-space': {
-        // 目标 API 地址
-        target: 'http://api.sagacloud.cn',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/business-space": "/dp-auxiliary/business-space/"
-        }
-      },
-      '/pointconfig': {
-        // 目标 API 地址
-        target: 'http://mbi.sagacloud.cn:8080/',
-        // 如果要代理 websockets
-        ws: true,
-        // 将主机标头的原点更改为目标URL
-        changeOrigin: false
-      },
-      '/venders-dp': {
-        // 目标 API 地址
-        target: 'http://api.sagacloud.cn',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/venders-dp": "/dp-auxiliary/venders-dp/"
-        }
-      },
-      '/venders': {
-        // 目标 API 地址
-        target: 'http://api.sagacloud.cn',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/venders": "/dp-auxiliary/venders/"
-        }
-      },
-      '/ScanBuilding': {
-        // 目标 API 地址
-        target: 'http://mbi.sagacloud.cn:8080/',
-        // 如果要代理 websockets
-        ws: true,
-        // 将主机标头的原点更改为目标URL
-        changeOrigin: false
-      },
-      '/image-service': {
-        // 目标 API 地址
-        target: 'http://api.sagacloud.cn',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/image-service": "/dp-auxiliary/image-service/"
-        }
-      },
-      '/godhand': {
-        // 目标 API 地址
-        target: 'http://api.sagacloud.cn',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/godhand": "/dp-auxiliary/godhand/"
-        }
-      },
-      '/modelapi': {
-        target: 'http://mbi.sagacloud.cn:8080',
-        changeOrigin: true,
-        pathRewrite: {
-          "^/modelapi": "/revit-algorithm/"
-        }
-      },
-      '/schedulerapi': {
-        target: 'http://mbi.sagacloud.cn:8080',
-        changeOrigin: true,
-        pathRewrite: {
-            "^/schedulerapi": "/scheduler/"
-        }
-      },
-    },
-
-    // proxyTable: {
-    //     '/admin': {
-    //         target: 'http://172.16.44.235:8080',
-    //         changeOrigin: true,
-    //         pathRewrite: {
-    //             "^/admin": "/"
-    //         }
-    //     },
-    //     '/api': {
-    //         target: 'http://172.16.44.235:8080',
-    //         changeOrigin: true,
-    //         pathRewrite: {
-    //             "^/api": "/"
-    //         }
-    //     },
-    //     '/data-platform-3': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.42.210:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/business-space': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.42.210:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/pointconfig': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.44.235:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/venders-dp': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.42.210:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/venders': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.42.210:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/ScanBuilding': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.44.235:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/image-service': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.42.210:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/godhand': {
-    //         // 目标 API 地址
-    //         target: 'http://172.16.42.210:8080/',
-    //         // 如果要代理 websockets
-    //         ws: true,
-    //         // 将主机标头的原点更改为目标URL
-    //         changeOrigin: false
-    //     },
-    //     '/modelapi': {
-    //         target: 'http://172.16.42.210:8082',
-    //         // target: 'http://192.168.20.218:8082',//景灏
-    //         changeOrigin: true,
-    //         pathRewrite: {
-    //             "^/modelapi": "/"
-    //         }
-    //     },
-    //     '/schedulerapi': {
-    //       target: 'http://172.16.42.210:8081',
-    //       changeOrigin: true,
-    //       pathRewrite: {
-    //           "^/schedulerapi": "/"
-    //       }
-    //     },
+    // proxyTable: {//正式环境
+    //   '/admin': {
+    //     target: 'http://mbi.sagacloud.cn:8080',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/admin": "/"
+    //     }
+    //   },
+    //   '/api': {
+    //     target: 'http://mbi.sagacloud.cn:8080',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/api": "/"
+    //     }
+    //   },
+    //   '/data-platform-3': {
+    //     // 目标 API 地址
+    //     target: 'http://api.sagacloud.cn/',
+    //     // 如果要代理 websockets
+    //     ws: true,
+    //     // 将主机标头的原点更改为目标URL
+    //     changeOrigin: false
+    //   },
+    //   '/business-space': {
+    //     // 目标 API 地址
+    //     target: 'http://api.sagacloud.cn',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/business-space": "/dp-auxiliary/business-space/"
+    //     }
+    //   },
+    //   '/pointconfig': {
+    //     // 目标 API 地址
+    //     target: 'http://mbi.sagacloud.cn:8080/',
+    //     // 如果要代理 websockets
+    //     ws: true,
+    //     // 将主机标头的原点更改为目标URL
+    //     changeOrigin: false
+    //   },
+    //   '/venders-dp': {
+    //     // 目标 API 地址
+    //     target: 'http://api.sagacloud.cn',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/venders-dp": "/dp-auxiliary/venders-dp/"
+    //     }
+    //   },
+    //   '/venders': {
+    //     // 目标 API 地址
+    //     target: 'http://api.sagacloud.cn',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/venders": "/dp-auxiliary/venders/"
+    //     }
+    //   },
+    //   '/ScanBuilding': {
+    //     // 目标 API 地址
+    //     target: 'http://mbi.sagacloud.cn:8080/',
+    //     // 如果要代理 websockets
+    //     ws: true,
+    //     // 将主机标头的原点更改为目标URL
+    //     changeOrigin: false
+    //   },
+    //   '/image-service': {
+    //     // 目标 API 地址
+    //     target: 'http://api.sagacloud.cn',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/image-service": "/dp-auxiliary/image-service/"
+    //     }
+    //   },
+    //   '/godhand': {
+    //     // 目标 API 地址
+    //     target: 'http://api.sagacloud.cn',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/godhand": "/dp-auxiliary/godhand/"
+    //     }
+    //   },
+    //   '/modelapi': {
+    //     target: 'http://mbi.sagacloud.cn:8080',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //       "^/modelapi": "/revit-algorithm/"
+    //     }
+    //   },
+    //   '/schedulerapi': {
+    //     target: 'http://mbi.sagacloud.cn:8080',
+    //     changeOrigin: true,
+    //     pathRewrite: {
+    //         "^/schedulerapi": "/scheduler/"
+    //     }
+    //   },
     // },
 
+    proxyTable: {
+        '/admin': {
+            target: 'http://172.16.44.235:8080',
+            changeOrigin: true,
+            pathRewrite: {
+                "^/admin": "/"
+            }
+        },
+        '/api': {
+            target: 'http://172.16.44.235:8080',
+            changeOrigin: true,
+            pathRewrite: {
+                "^/api": "/"
+            }
+        },
+        '/data-platform-3': {
+            // 目标 API 地址
+            target: 'http://172.16.42.210:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/business-space': {
+            // 目标 API 地址
+            target: 'http://172.16.42.210:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/pointconfig': {
+            // 目标 API 地址
+            target: 'http://172.16.44.235:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/venders-dp': {
+            // 目标 API 地址
+            target: 'http://172.16.42.210:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/venders': {
+            // 目标 API 地址
+            target: 'http://172.16.42.210:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/ScanBuilding': {
+            // 目标 API 地址
+            target: 'http://172.16.44.235:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/image-service': {
+            // 目标 API 地址
+            target: 'http://172.16.42.210:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/godhand': {
+            // 目标 API 地址
+            target: 'http://172.16.42.210:8080/',
+            // 如果要代理 websockets
+            ws: true,
+            // 将主机标头的原点更改为目标URL
+            changeOrigin: false
+        },
+        '/modelapi': {
+            target: 'http://172.16.42.210:8082',
+            // target: 'http://192.168.20.218:8082',//景灏
+            changeOrigin: true,
+            pathRewrite: {
+                "^/modelapi": "/"
+            }
+        },
+        '/schedulerapi': {
+          target: 'http://172.16.42.210:8081',
+          changeOrigin: true,
+          pathRewrite: {
+              "^/schedulerapi": "/"
+          }
+        },
+    },
+
     // Various Dev Server settings
     host: '0.0.0.0', // can be overwritten by process.env.HOST
     port: 28080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined

+ 1 - 1
package.json

@@ -23,7 +23,7 @@
     "@saga-web/cad-engine": "2.0.560",
     "@saga-web/draw": "2.1.75",
     "@saga-web/graphy": "2.1.47",
-    "@saga-web/topology": "1.0.77",
+    "@saga-web/topology": "1.0.82",
     "axios": "^0.18.0",
     "echarts": "^4.1.0",
     "el-cascader-multi": "^1.1.8",

+ 2 - 2
src/api/topo/index.js

@@ -9,6 +9,6 @@ export function topoCreate(param, success) {
 
 // 查询拓扑图
 export function topoQuery(param, success) {
-  let url = `${baseUrl}/datacenter/topo/query`;
-  httputils.postJson(url, param, success)
+  let url = `${baseUrl}/datacenter/topo/query?type=${param.type}`;
+  httputils.postJson(url, param.data||{}, success)
 }

+ 4 - 8
src/views/ledger/report/indexExport.vue

@@ -1,13 +1,9 @@
 <template>
   <div>
-    <el-row style="margin-top: 30px;">
-      <span>请选择要导出的数据:</span>
-      <el-select v-model="value" placeholder="请选择">
-        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
-      </el-select>
-      <el-button @click="handleClickDownload" type="primary" :loading="loading" style="margin-left: 15px;">导出Excel</el-button>
-    </el-row>
-    <div style="text-align:center;font-size:25px;margin-top:20%;">当前页面中的为临时功能,完整版正在设计中……</div>
+    <el-select v-model="value" placeholder="请选择">
+      <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+    </el-select>
+    <el-button @click="handleClickDownload" type="primary" :loading="loading" style="margin-left: 15px;margin-right: 10px;">导出Excel</el-button>
   </div>
 </template>
 

+ 29 - 0
src/components/model/file/addFloorDialog.vue

@@ -25,6 +25,16 @@
             <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
           </el-upload>
         </el-form-item>
+        <el-form-item label="revit版本:">
+          <el-select v-model="form.revitVersion" placeholder="请选择">
+            <el-option
+              v-for="item in revitVersionList"
+              :key="`revit-${item.value}`"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="模型所属楼层:">
           <div class="floorModle">
             <el-select v-model="form.floorTypeVal" placeholder="请选择">
@@ -88,6 +98,7 @@ export default {
     return {
       form: {
         desc: "", //描述
+        revitVersion: "2017", //revit默认版本
         floorTypeVal: "F", //楼层类型得值
         interlayerTypeVal: "M1", //夹层类型得值
         haveInterlayer: false, //是否有夹层
@@ -95,6 +106,20 @@ export default {
         floorNum: 1 //楼层
       },
       fileList: [], //上传楼层列表
+      revitVersionList: [
+        {
+          value: "2016",
+          label: "2016"
+        },
+        {
+          value: "2017",
+          label: "2017"
+        },
+        {
+          value: "2018",
+          label: "2018"
+        }
+      ],
       floorType: [
         {
           value: "F",
@@ -137,6 +162,8 @@ export default {
       let FloorName = null;
       if (this.form.file == null) {
         this.$message.error("模型文件不能为空!");
+      } else if (!this.form.revitVersion) {
+        this.$message.error("revit版本不能为空!");
       } else {
         let FloorName = null;
         // 根据是否有夹层拼接楼层名
@@ -161,6 +188,7 @@ export default {
             FileName: this.form.file.name,
             FloorName: FloorName,
             FolderId: this.FolderId,
+            RevitVersion: this.form.revitVersion,
             Note: this.form.desc,
             ProjectId: this.projectId,
             ReplaceReason: null,
@@ -212,6 +240,7 @@ export default {
       if (val) {
         this.handleRemove();
         this.form = {
+          revitVersion: "2017", //revit默认版本
           desc: "", //描述
           floorTypeVal: "F", //楼层类型得值
           interlayerTypeVal: "M1", //夹层类型得值

+ 1 - 0
src/components/model/file/floorTable.vue

@@ -21,6 +21,7 @@
           <i v-show="scope.row.Version && scope.row.Status == 4" class="iconfont icon-warn" style="cursor:pointer;position:relative;top:1px;" title="查看版本更新信息" @click="handleClickVersion(scope.row)"></i>
         </template>
       </el-table-column>
+      <el-table-column prop="RevitVersion" label="revit版本"></el-table-column>
       <el-table-column prop="AcceptTime" label="上传时间" width="200"></el-table-column>
       <el-table-column prop="UserName" label="上传人"></el-table-column>
       <el-table-column prop="address" align="center" label="操作" width="240">

+ 1 - 0
src/components/model/file/modelLog.vue

@@ -13,6 +13,7 @@
                   <i v-show="scope.row.Version && scope.row.Status == 4" class="iconfont icon-warn" style="cursor:pointer;" title="查看版本更新信息" @click="handleClickVersion(scope.row)"></i>
                 </template>
               </el-table-column>
+              <el-table-column prop="RevitVersion" label="revit版本"></el-table-column>
               <el-table-column prop="AcceptTime" label="上传时间"></el-table-column>
               <el-table-column prop="UserName" label="上传人"></el-table-column>
               <el-table-column prop="address" label="操作">

+ 4 - 3
src/components/model/file/nodeDialog.vue

@@ -10,7 +10,7 @@
             <i class="el-icon-close" v-else></i>
             {{t.name}}
           </p>
-          <p>非强制检查项</p>
+          <p v-if="check[checkType].notCheckList.length">非强制检查项</p>
           <p v-for="(t,i) in check[checkType].notCheckList" :key='-i-1'>
             <i class="el-icon-check" v-if="!t.check"></i>
             <i class="el-icon-close" v-else></i>
@@ -23,7 +23,7 @@
       <p>处理结果</p>
       <div class="gray-border"></div>
     </div>
-    <div class="err-des">
+    <div class="err-des" v-if="errMsg">
       <p>错误说明</p>
       <div>{{errMsg}}</div>
     </div>
@@ -69,9 +69,10 @@ export default {
     };
   },
   methods: {
-    showDialog(msg, type) {
+    showDialog(msg, type, title) {
       this.errMsg = msg.ErrorMsg || '';
       this.checkType = type || '';
+      this.title = title
       if (type) {
         this.check[type].checkList.forEach(t => {
           if (t.value && t.value == 'GridCheck') {

+ 1 - 0
src/components/model/file/pathCard.vue

@@ -52,6 +52,7 @@ export default {
   border: 1px solid transparent;
   box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.1);
   border-radius: 4px;
+  cursor: pointer;
   &.borderY {
     border-color: #fcc636;
   }

+ 30 - 5
src/components/model/file/replaceModelDialog.vue

@@ -14,7 +14,7 @@
           <el-upload
             class="upload-demo"
             ref="upload"
-            action="https://jsonplaceholder.typicode.com/posts/"
+            action="/modelapi/model-file/upload"
             :on-preview="handlePreview"
             :on-remove="handleRemove"
             :file-list="fileList"
@@ -25,6 +25,16 @@
             <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
           </el-upload>
         </el-form-item>
+        <el-form-item label="revit版本:">
+          <el-select v-model="form.revitVersion" placeholder="请选择">
+            <el-option
+              v-for="item in revitVersionList"
+              :key="`revit-${item.value}`"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="选择模型文件替换原因:">
           <ul>
             <li>
@@ -59,10 +69,26 @@ export default {
   data() {
     return {
       form: {
+        // revitVersion: this.replaceModelItem.RevitVersion?this.replaceModelItem.RevitVersion:"2017", //revit默认版本
+        revitVersion: "2017", //revit默认版本
         file: null, //上传文件
         ReplaceReason: "0",
         finishTime: ""
       },
+      revitVersionList: [
+        {
+          value: "2016",
+          label: "2016"
+        },
+        {
+          value: "2017",
+          label: "2017"
+        },
+        {
+          value: "2018",
+          label: "2018"
+        }
+      ],
       isChioce: true, //是否可以选择替换原因
       fileList: []
     };
@@ -74,18 +100,17 @@ export default {
     onSubmit() {
       if (this.form.file == null) {
         this.$message.error("模型文件不能为空!");
+      } else if (!this.form.revitVersion) {
+        this.$message.error("revit版本不能为空!");
       } else {
         this.$emit("updataModel", {
           file: this.form.file,
+          revitVersion: this.form.revitVersion,
           replaceModelItem: this.replaceModelItem
         });
         this.handleClose();
       }
     },
-    // /上传到服务器/
-    submitUpload() {
-      this.$refs.upload.submit();
-    },
     handleClose() {
       this.$emit("closeReplaceModelDia");
     },

+ 7 - 3
src/components/point/dynamicdata/buildRules.vue

@@ -220,7 +220,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.BuildID == item.BuildID) {
-                  item.ObjectLocalName = t.BuildLocalName;
+                  if (t.BuildLocalName && t.BuildLocalID) {
+                    item.ObjectLocalName = t.BuildLocalName + '/' + t.BuildLocalID;
+                  } else if (t.BuildLocalName || t.BuildLocalID) {
+                    item.ObjectLocalName = t.BuildLocalName || t.BuildLocalID;
+                  }
                 }
               })
             })
@@ -228,8 +232,8 @@ export default {
             this.tableData = dyData;
           })
         } else {
-            this.loading = false;
-            this.tableData = dyData;
+          this.loading = false;
+          this.tableData = dyData;
         }
         this.page.total = res.PageSize < 50 ? res.PageSize : res.Total;
       });

+ 10 - 6
src/components/point/dynamicdata/equipRules.vue

@@ -60,9 +60,9 @@
         </el-table-column>
         <el-table-column prop="Datasource" label="数据源" show-overflow-tooltip min-width="100"></el-table-column>
         <el-table-column prop="SubTypeName" :label="`数字字典${typeName}类型`" show-overflow-tooltip min-width="100"></el-table-column>
-        <el-table-column prop="ObjectLocalName" :label="`对应的${typeName}实例`" show-overflow-tooltip min-width="100" class-name="td-bl">
+        <el-table-column prop="ObjectLocalName" :label="`对应的${typeName}实例`" show-overflow-tooltip min-width="125" class-name="td-bl">
         </el-table-column>
-        <el-table-column label="实例所在建筑楼层" min-width="100">
+        <el-table-column label="实例所在建筑楼层" min-width="125">
           <template slot-scope="scope">
             <el-tooltip
               :content="scope.row.BuildLocalName?scope.row.FloorLocalName?scope.row.BuildLocalName+'-'+scope.row.FloorLocalName:scope.row.BuildLocalName:''"
@@ -73,7 +73,7 @@
             </el-tooltip>
           </template>
         </el-table-column>
-        <el-table-column prop="RoomLocalName" label="实例所在业务空间" show-overflow-tooltip min-width="200"></el-table-column>
+        <el-table-column prop="RoomLocalName" label="实例所在业务空间" show-overflow-tooltip min-width="150"></el-table-column>
         <el-table-column prop="action" label="操作" min-width="100">
           <template slot-scope="scope">
             <el-tooltip class="item" effect="dark" content="清除对应规则" placement="left">
@@ -221,7 +221,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.EquipID == item.EquipID) {
-                  item.ObjectLocalName = t.EquipLocalName;
+                  if (t.EquipLocalName && t.EquipLocalID) {
+                    item.ObjectLocalName = t.EquipLocalName + '/' + t.EquipLocalID;
+                  } else if (t.EquipLocalName || t.EquipLocalID) {
+                    item.ObjectLocalName = t.EquipLocalName || t.EquipLocalID;
+                  }
                   item.FloorLocalName = t.Floor ? t.Floor.FloorLocalName : '';
                   item.BuildLocalName = t.Building ? t.Building.BuildLocalName : '';
                   item.RoomLocalName = '';
@@ -238,8 +242,8 @@ export default {
             this.tableData = dyData;
           })
         } else {
-            this.loading = false;
-            this.tableData = dyData;
+          this.loading = false;
+          this.tableData = dyData;
         }
         this.page.total = res.PageSize < 50 ? res.PageSize : res.Total;
       });

+ 5 - 1
src/components/point/dynamicdata/floorRules.vue

@@ -229,7 +229,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.FloorID == item.FloorID) {
-                  item.ObjectLocalName = t.FloorLocalName;
+                  if (t.FloorLocalName && t.FloorLocalID) {
+                    item.ObjectLocalName = t.FloorLocalName + '/' + t.FloorLocalID;
+                  } else if (t.FloorLocalName || t.FloorLocalID) {
+                    item.ObjectLocalName = t.FloorLocalName || t.FloorLocalID;
+                  }
                   item.ObjectSequenceID = t.FloorSequenceID;
                   item.BuildLocalName = t.Building ? t.Building.BuildLocalName : '';
                 }

+ 1 - 1
src/components/point/dynamicdata/locationCascader.vue

@@ -62,7 +62,7 @@ export default {
           } else if (node.level == 3) {
             let pa = {
               PageSize: 1000,
-              ObjectType: node.path[2],
+              ZoneType: node.path[2],
               Filters: `BuildingId='${node.path[0]}';FloorId='${node.path[1]}'`
             };
             zoneQuery(pa, res => {

+ 5 - 1
src/components/point/dynamicdata/partsRules.vue

@@ -219,7 +219,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.EquipID == item.EquipID) {
-                  item.ObjectLocalName = t.EquipLocalName;
+                  if (t.EquipLocalName && t.EquipLocalID) {
+                    item.ObjectLocalName = t.EquipLocalName + '/' + t.EquipLocalID;
+                  } else if (t.EquipLocalName || t.EquipLocalID) {
+                    item.ObjectLocalName = t.EquipLocalName || t.EquipLocalID;
+                  }
                 }
               })
             })

+ 5 - 1
src/components/point/dynamicdata/projectRules.vue

@@ -225,7 +225,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.ProjID == item.ProjID) {
-                  item.ObjectLocalName = t.ProjLocalName;
+                  if (t.ProjLocalName && t.ProjLocalID) {
+                    item.ObjectLocalName = t.ProjLocalName + '/' + t.ProjLocalID;
+                  } else if (t.ProjLocalName || t.ProjLocalID) {
+                    item.ObjectLocalName = t.ProjLocalName || t.ProjLocalID;
+                  }
                 }
               })
             })

+ 5 - 1
src/components/point/dynamicdata/spaceRules.vue

@@ -220,7 +220,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.RoomID == item.RoomID) {
-                  item.ObjectLocalName = t.RoomLocalName;
+                  if (t.RoomLocalName && t.RoomLocalID) {
+                    item.ObjectLocalName = t.RoomLocalName + '/' + t.RoomLocalID;
+                  } else if (t.RoomLocalName || t.RoomLocalID) {
+                    item.ObjectLocalName = t.RoomLocalName || t.RoomLocalID;
+                  }
                   item.BuildLocalName = t.Building ? t.Building.BuildLocalName : '';
                   item.FloorLocalName = t.Floor ? t.Floor.FloorLocalName : '';
                 }

+ 5 - 1
src/components/point/dynamicdata/systemRules.vue

@@ -217,7 +217,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.SysID == item.SysID) {
-                  item.ObjectLocalName = t.SysLocalName;
+                  if (t.SysLocalName && t.SysLocalID) {
+                    item.ObjectLocalName = t.SysLocalName + '/' + t.SysLocalID;
+                  } else if (t.SysLocalName || t.SysLocalID) {
+                    item.ObjectLocalName = t.SysLocalName || t.SysLocalID;
+                  }
                 }
               })
             })

+ 5 - 1
src/components/point/dynamicdata/tenantRules.vue

@@ -220,7 +220,11 @@ export default {
             dyData.forEach(item => {
               Data.forEach(t => {
                 if (t.TenantID == item.TenantID) {
-                  item.ObjectLocalName = t.TenantLocalName;
+                  if (t.TenantLocalName && t.TenantLocalID) {
+                    item.ObjectLocalName = t.TenantLocalName + '/' + t.TenantLocalID;
+                  } else if (t.TenantLocalName || t.TenantLocalID) {
+                    item.ObjectLocalName = t.TenantLocalName || t.TenantLocalID;
+                  }
                   item.RoomLocalName = '';
                   if (t.ZoneTenantList) {
                     t.ZoneTenantList.forEach(it => {

+ 41 - 7
src/framework/layout/PageHeader.vue

@@ -11,8 +11,10 @@
             </div>
         </div>
         <div id='page-header-data-menu' class='data-menu'>
-            <el-select v-model='selectedProjectId' placeholder='请选择'>
-                <el-option v-for='item in projects' :key='item.id' :label='item.name' :value='item.id'></el-option>
+            <el-select v-model='selectedProjectId' placeholder='请选择' filterable>
+                <el-option-group v-for="group in projectGropList" :key="group.label" :label="group.label">
+                    <el-option v-for='item in group.options' :key='item.id' :label='item.name' :value='item.id'></el-option>
+                </el-option-group>
             </el-select>
         </div>
         <div id='page-header-user-menu' class='user-menu'>
@@ -40,6 +42,7 @@
 <script>
 import frameworkApi from '@/api/framework'
 import { mapGetters, mapMutations } from 'vuex'
+import getFirstLetter from '@/utils/getFirstLetter'
 import MessageSever from '../components/messagesever/index'
 import lStorage from '@/utils/localStorage'
 export default {
@@ -51,7 +54,38 @@ export default {
         }
     },
     computed: {
-        ...mapGetters('layout', ['sidebarClosed', 'userInfo', 'projects', 'projectId'])
+        ...mapGetters('layout', ['sidebarClosed', 'userInfo', 'projects', 'projectId']),
+        projectGropList () {
+            const cacheInfo = lStorage.get('historyInfo')?lStorage.get('historyInfo'):{}
+            let options = [{
+                label: '最近使用',
+                options: []
+            }]
+            const projectHistory = cacheInfo[this.userInfo.userName] || []
+            options[0].options = projectHistory.map(projectId => {
+                let obj = this.projects.find(project => {
+                    return project.id === projectId
+                })
+                return obj?obj:[]
+            })
+
+            let helpObj = {}
+            this.projects.forEach(p => {
+                const label = getFirstLetter((p.name || p.id).slice(0, 1))
+                if (helpObj[label]) {
+                    helpObj[label].push(p)
+                } else {
+                    helpObj[label] = [p]
+                }
+            })
+            const arr = Object.keys(helpObj).sort().map(label => {
+                return {
+                    label: label,
+                    options: helpObj[label]
+                }
+            })
+            return [...(options[0].options.length > 0 ? options : []), ...arr]
+        }
     },
     watch: {
         selectedProjectId(n, o) {
@@ -76,12 +110,12 @@ export default {
         }
     },
     created() {
-        let cacheInfo = lStorage.get('cacheInfo')?lStorage.get('cacheInfo'):{}
+        let cacheInfo = lStorage.get('historyInfo')?lStorage.get('historyInfo'):{}
         if(cacheInfo[this.userInfo.userName] && 
-            cacheInfo[this.userInfo.userName].projectId && 
-            this.projects.some((item) => {return item.id == cacheInfo[this.userInfo.userName].projectId})
+            cacheInfo[this.userInfo.userName][0] && 
+            this.projects.some((item) => {return item.id == cacheInfo[this.userInfo.userName][0]})
         ){
-            this.selectedProjectId = cacheInfo[this.userInfo.userName].projectId
+            this.selectedProjectId = cacheInfo[this.userInfo.userName][0]
         } else {
             this.selectedProjectId = this.projectId
         }

+ 7 - 5
src/framework/layout/layout-store.js

@@ -72,15 +72,17 @@ export default {
         lStorage.set('screen_data', {path: val, data: {}})
       },
       setprojectId: (state, val) => {
-        let cacheInfo = lStorage.get('cacheInfo') ? lStorage.get('cacheInfo') : {}
+        lStorage.remove('cacheInfo') //待删除(删除用户浏览器无用缓存)
+        let cacheInfo = lStorage.get('historyInfo') ? lStorage.get('historyInfo') : {}
         state.projectId = val
         localStorage.setItem('projectId', val)
         if (cacheInfo[state.userInfo.userName]) {
-          cacheInfo[state.userInfo.userName].projectId = val
-          lStorage.set('cacheInfo', cacheInfo)
+          // cacheInfo[state.userInfo.userName].projectId = val
+          cacheInfo[state.userInfo.userName] = [...new Set([val, ...cacheInfo[state.userInfo.userName]])].slice(0,3)
+          lStorage.set('historyInfo', cacheInfo)
         } else {
-          cacheInfo[state.userInfo.userName] = {projectId: val}
-          lStorage.set('cacheInfo', cacheInfo)
+          cacheInfo[state.userInfo.userName] = [val]
+          lStorage.set('historyInfo', cacheInfo)
         }
         storage.set(KEY_PROJECT_SELECTED, val)
         state.projects.map((item) => {

File diff ditekan karena terlalu besar
+ 381 - 0
src/utils/getFirstLetter.js


TEMPAT SAMPAH
src/views/business_space/dataUtil/2.jpg


+ 19 - 8
src/views/business_space/dataUtil/topology.vue

@@ -3,7 +3,7 @@
   <el-container>
     <el-aside width="200px" class="el-scrollbar">
       <div title="查询">
-        <el-button size="mini" @click="queryGraphy" icon="el-icon-notebook-2">查询</el-button>
+        <el-button size="mini" @click="queryGraphy" icon="el-icon-search">查询</el-button>
       </div>
       <div title="保存">
         <el-button size="mini" @click="saveGraphy" icon="el-icon-notebook-2">保存</el-button>
@@ -75,14 +75,14 @@ export default {
         {
           Id: this.uuid(),
           Size: {
-            Width: 100,
-            Height: 100
+            Width: 145,
+            Height: 89
           },
           Pos: {},
           img: require('./2.jpg'),
           ImgSource: this.img2,
           Name: '测试2',
-          AnchorList: [{ Pos: { X: 0, Y: -50 }, Id: this.uuid() }, { Pos: { X: -50, Y: 0 }, Id: this.uuid() }, { Pos: { X: 50, Y: 0 }, Id: this.uuid() }]
+          AnchorList: [{ Pos: { X: 0, Y: -44 }, Id: this.uuid() }, { Pos: { X: -72, Y: 0 }, Id: this.uuid() }, { Pos: { X: 72, Y: 0 }, Id: this.uuid() }]
         },
         {
           Id: this.uuid(),
@@ -140,6 +140,7 @@ export default {
       this.clearGraphy();
       this.scene = new TopoScene()
       this.view.scene = this.scene;
+      this.scene.callback = this.equipClick
     },
     // 清除canvas
     clearGraphy() {
@@ -155,11 +156,15 @@ export default {
     },
     additem(i) {
       let equipdata = this.equipList[i]
-      let curEquip = this.scene.createItem(equipdata);
-      this.scene.click(curEquip, this.equipClick)
+      this.scene.createItem(equipdata);
     },
     drawline() {
-      this.scene.isLining = true;
+      if (this.scene.lineType) {
+        this.scene.lineType = 0;
+        console.log('change')
+        return
+      }
+      this.scene.lineType = 1;
     },
     // 清除默认左右键事件
     disableRightButton() {
@@ -298,8 +303,14 @@ export default {
     },
     //查询
     queryGraphy() {
+      console.log(this.scene)
       topoQuery({ type: 'eq2sp_for' }, res => {
-        console.log(res);
+        console.log(res.Content[0])
+        // this.scene.loadData({
+        // equipList: res.Content[0].NodeList,
+        // relationList: res.Content[0].RelationList,
+        // })
+        // this.view.fitSceneToView()
       })
     }
   },

+ 7 - 2
src/views/ledger/report/index.vue

@@ -33,7 +33,10 @@
       </ul>
     </div>
     <div class="progress">
-      <p class="basic-statistics">基本统计</p>
+      <p class="basic-statistics">
+        基本统计
+        <data-export style="float:right"></data-export>
+      </p>
       <div class="data equipment" v-if="equipCount">
         <span class="contain-title">
              <span class="iconfont icon-juxing"></span>
@@ -142,6 +145,7 @@
   } from "@/api/scan/request";
   import dataOrigin from "@/components/ledger/report/dataorigin";
   import datafan from "@/components/ledger/report/datafan";
+  import dataExport from "@/components/ledger/report/dataexport";
 
   export default {
     data() {
@@ -243,7 +247,8 @@
     },
     components: {
       dataOrigin,
-      datafan
+      datafan,
+      dataExport,
     },
     mounted() {
     },

+ 1 - 0
src/views/model/file/index.vue

@@ -287,6 +287,7 @@ export default {
         FileName: data.file.name,
         FloorName: data.replaceModelItem.FloorName,
         FolderId: data.replaceModelItem.FolderId,
+        RevitVersion: data.revitVersion,
         Note: data.replaceModelItem.Note,
         ProjectId: this.projectId,
         ReplaceReason: 0,

+ 103 - 101
src/views/model/file/pathcontrol/index.vue

@@ -33,10 +33,10 @@
                 <i class="el-icon-success" style="color:#67C23A"></i>模型中转站
               </div>
               <div class="first-content">
-                <p>模型文件存储于OSS服务器</p>
+                <p>模型文件存储于OSS服务器</p>
               </div>
-              <img v-if="!SchedulerCheck.BeginTime" class="status row-waiting-manage" src="@/assets/image/model/waitingManageGray.png" />
-              <img v-else-if="SchedulerCheck.BeginTime&&!SchedulerCheck.EndTime" class="status row-waiting-manage"
+              <img v-if="!UploadState.EndTime" class="status row-waiting-manage" src="@/assets/image/model/waitingManageGray.png" />
+              <img v-else-if="UploadState.EndTime&&!SchedulerCheck.EndTime" class="status row-waiting-manage"
                 src="@/assets/image/model/waitingManageBlue.png" />
               <img v-else class="status row-waiting-manage" src="@/assets/image/model/waitingManageGreen.png" />
 
@@ -45,8 +45,8 @@
               <img v-else class="status up-model" src="@/assets/image/model/upModelGreen.png" />
 
               <!-- 调度器1 -->
-              <div class="path-tips shadow-box" style="top:67px;left:291px;" @click="getNodeDes"
-                v-if='SchedulerCheck.BeginTime&&!SchedulerCheck.EndTime'>
+              <div class="path-tips shadow-box" style="top:67px;left:291px;" @click="getNodeDes(SchedulerCheck,'等待调度器分配', true)"
+                v-if='SchedulerCheck.BeginTime'>
                 <i class="el-icon-error" v-if="SchedulerCheck.HasError"></i>
                 <i class="el-icon-warning" v-else-if="SchedulerCheck.HasRetry"></i>
                 <p>耗时: {{SchedulerCheck.TakeTime||'--'}}</p>
@@ -59,7 +59,7 @@
             <p style="float:left;width:100%;text-align:center;margin-top:73px;color:#acb5bb;font-size:12px;">本地电脑主机</p>
           </el-row>
           <!-- 上传模型文件 -->
-          <div class="path-tips shadow-box" style="top:189px;left:190px;" @click="getNodeDes">
+          <div class="path-tips shadow-box" style="top:189px;left:190px;" @click="getNodeDes(UploadState,'上传模型文件', true)">
             <i class="el-icon-error" v-if="UploadState.HasError"></i>
             <i class="el-icon-warning" v-else-if="UploadState.HasRetry"></i>
             <p>耗时: {{UploadState.TakeTime||'--'}}</p>
@@ -99,8 +99,9 @@
                 </el-row>
               </el-row>
               <!-- 下载模型文件1 -->
-              <img v-if="!UploadState.EndTime" class="status down-model" src="@/assets/image/model/downModelGray.png" />
-              <img v-else-if="UploadState.EndTime&&!SchedulerCheck.EndTime" class="status down-model" src="@/assets/image/model/downModelBlue.png" />
+              <img v-if="!SchedulerCheck.BeginTime" class="status down-model" src="@/assets/image/model/downModelGray.png" />
+              <img v-else-if="SchedulerCheck.BeginTime&&!SchedulerCheck.EndTime" class="status down-model"
+                src="@/assets/image/model/downModelBlue.png" />
               <img v-else class="status down-model" src="@/assets/image/model/downModelGreen.png" />
               <!-- 下载模型文件2 -->
               <img v-if="!SchedulerExport.BeginTime" class="status down-model-sec" src="@/assets/image/model/downModelGray.png" />
@@ -124,21 +125,21 @@
             </pathCard>
             <pathCard class="revit-item" :title="'导出模型json数据并压缩存储'" @click="getNodeDes" :data="ModelExport"></pathCard>
             <!-- 调度器2 -->
-            <img v-if="!SchedulerExport.BeginTime" class="status row-waiting-manage" src="@/assets/image/model/waitingManageGray.png" />
-            <img v-else-if="SchedulerExport.BeginTime&&!SchedulerExport.EndTime" class="status row-waiting-manage"
+            <img v-if="!ModelCheck.EndTime" class="status row-waiting-manage" src="@/assets/image/model/waitingManageGray.png" />
+            <img v-else-if="ModelCheck.EndTime&&!SchedulerExport.EndTime" class="status row-waiting-manage"
               src="@/assets/image/model/waitingManageBlue.png" />
             <img v-else class="status row-waiting-manage" src="@/assets/image/model/waitingManageGreen.png" />
             <!-- 等待解析 -->
-            <img v-if="!JsonAnalysis.BeginTime" class="status waiting-anl" src="@/assets/image/model/waitingAnlGray.png" />
-            <img v-else-if="JsonAnalysis.BeginTime&&!JsonAnalysis.EndTime" class="status waiting-anl" src="@/assets/image/model/waitingAnlBlue.png" />
+            <img v-if="!ModelExport.EndTime" class="status waiting-anl" src="@/assets/image/model/waitingAnlGray.png" />
+            <img v-else-if="ModelExport.EndTime&&!JsonAnalysis.EndTime" class="status waiting-anl" src="@/assets/image/model/waitingAnlBlue.png" />
             <img v-else class="status waiting-anl" src="@/assets/image/model/waitingAnlGreen.png" />
             <!-- 未通过 -->
             <img v-if="ModelCheck.Remove||ModelExport.Remove" class="status del-model" src="@/assets/image/model/delModelBlue.png" />
             <img v-else class="status del-model" src="@/assets/image/model/delModelGray.png" />
 
             <!-- 调度器2 -->
-            <div class="path-tips shadow-box" style="top:114px;left:329px;" @click="getNodeDes"
-              v-if="SchedulerExport.BeginTime&&!SchedulerExport.EndTime">
+            <div class="path-tips shadow-box" style="top:114px;left:329px;" @click="getNodeDes(SchedulerExport,'等待调度器分配', true)"
+              v-if="SchedulerExport.BeginTime">
               <i class="el-icon-error" v-if="SchedulerExport.HasError"></i>
               <i class="el-icon-warning" v-else-if="SchedulerExport.HasRetry"></i>
               <p>耗时: {{SchedulerExport.TakeTime||'--'}}</p>
@@ -151,16 +152,16 @@
             <p style="float:left;width:100%;text-align:center;margin-top:83px;color:#acb5bb;font-size:12px;">revit本地服务器集群</p>
           </el-row>
           <!-- 下载模型文件1 -->
-          <div class="path-tips shadow-box up-model-tips" @click="getNodeDes">
+          <div class="path-tips shadow-box up-model-tips" @click="getNodeDes(ModelCheck,'下载模型文件', true)">
             <i class="el-icon-error" v-if="ModelCheck.HasError"></i>
             <i class="el-icon-warning" v-else-if="ModelCheck.HasRetry"></i>
-            <p>耗时: {{ModelCheck.DownTakeTime||'--'}}</p>
+            <p>耗时: {{SchedulerCheck.TakeTime||'--'}}</p>
             <p>平均下载速度: {{ModelCheckSpeed}}</p>
-            <p>开始时间: {{UploadState.EndTime||'--'}}</p>
+            <p>开始时间: {{SchedulerCheck.BeginTime||'--'}}</p>
             <p>结束时间: {{SchedulerCheck.EndTime||'--'}}</p>
           </div>
           <!-- 下载模型文件2 -->
-          <div class="path-tips shadow-box up-model-tips2" @click="getNodeDes">
+          <div class="path-tips shadow-box up-model-tips2" @click="getNodeDes(ModelExport,'下载模型文件', true)">
             <i class="el-icon-error" v-if="ModelExport.HasError"></i>
             <i class="el-icon-warning" v-else-if="ModelExport.HasRetry"></i>
             <p>耗时: {{ModelExport.DownTakeTime||'--'}}</p>
@@ -169,7 +170,7 @@
             <p>结束时间: {{ModelExport.JsonzBeginTime||'--'}}</p>
           </div>
           <!-- 存储json -->
-          <div class="path-tips shadow-box up-json-tips" @click="getNodeDes">
+          <div class="path-tips shadow-box up-json-tips" @click="getNodeDes(ModelExport,'存储json数据', true)">
             <i class="el-icon-error" v-if="ModelExport.HasError"></i>
             <i class="el-icon-warning" v-else-if="ModelExport.HasRetry"></i>
             <p>耗时: {{ModelExport.JsonzTakeTime||'--'}}</p>
@@ -178,7 +179,7 @@
             <p>结束时间: {{ModelExport.JsonzEndTime||'--'}}</p>
           </div>
           <!-- 下载json压缩包 -->
-          <div class="path-tips shadow-box down-json-tips" @click="getNodeDes">
+          <div class="path-tips shadow-box down-json-tips" @click="getNodeDes(JsonAnalysis,'下载json压缩包', true)">
             <i class="el-icon-error" v-if="JsonAnalysis.HasError"></i>
             <i class="el-icon-warning" v-else-if="JsonAnalysis.HasRetry"></i>
             <p>耗时: {{JsonAnalysis.TakeTime||'--'}}</p>
@@ -193,21 +194,38 @@
         </div>
         <div class="third-column column">
           <div>
-            <div id="webDatabase" class="shadow-box">
-              <div style="background:#b8c5d0;height:20px;"></div>
-              <div>
-                <div style="text-align:center;">
-                  <i class="iconfont icon-project-o" style="color:#dee6ec;font-size:40px"></i>
-                  <p style="color:#676767">web服务数据库</p>
+            <div id="webDatabase">
+              <div class="shadow-box">
+                <div style="background:#b8c5d0;height:20px;"></div>
+                <div>
+                  <div style="text-align:center;">
+                    <i class="iconfont icon-project-o" style="color:#dee6ec;font-size:40px"></i>
+                    <p style="color:#676767">web服务数据库</p>
+                  </div>
                 </div>
+                <img class="status column-up" src="@/assets/image/model/columnGray.png" />
+                <img class="status right-down" src="@/assets/image/model/rightDownGray.png" />
+              </div>
+              <div class="shadow-box">
+                <div style="background:#b8c5d0;height:20px;"></div>
+                <div>
+                  <div style="text-align:center;">
+                    <i class="iconfont icon-project-o" style="color:#dee6ec;font-size:40px"></i>
+                    <p style="color:#676767">数据中心数据库</p>
+                  </div>
+                </div>
+                <img class="status column-up" src="@/assets/image/model/columnGray.png" />
+              </div>
+              <div class="shadow-box">
+                <div style="background:#b8c5d0;height:20px;"></div>
+                <div>
+                  <div style="text-align:center;">
+                    <i class="iconfont icon-project-o" style="color:#dee6ec;font-size:40px"></i>
+                    <p style="color:#676767">web服务数据库</p>
+                  </div>
+                </div>
+                <img class="status column-up" src="@/assets/image/model/columnGray.png" />
               </div>
-              <img v-if="1||!SaveData.BeginTime" class="status column-up" src="@/assets/image/model/columnGray.png" />
-              <!-- <img v-else-if="SaveData.BeginTime&&!SaveData.EndTime" class="status column-up" src="@/assets/image/model/columnBlue.png" />
-              <img v-else class="status column-up" src="@/assets/image/model/columnGreen.png" /> -->
-
-              <img v-if="1||!MultiFloorCheck.BeginTime" class="status right-down" src="@/assets/image/model/rightDownGray.png" />
-              <!-- <img v-else-if="MultiFloorCheck.BeginTime&&!MultiFloorCheck.EndTime" class="status right-down" src="@/assets/image/model/rightDownBlue.png" />
-              <img v-else class="status right-down" src="@/assets/image/model/rightDownGreen.png" /> -->
             </div>
           </div>
           <el-row id="webServer">
@@ -216,7 +234,8 @@
             <pathCard class="webServer-item" :title="'建筑模型检查'" :data="MultiFloorCheck" @click="getNodeDes">
               <p>共检查项: 2项</p>
             </pathCard>
-            <pathCard class="webServer-item" :title="'处理模型数据格式'" :data="SyncDatacenter" @click="getNodeDes"></pathCard>
+            <pathCard class="webServer-item" :title="'存储数据到数据中心'" :data="SyncDatacenter" @click="getNodeDes"></pathCard>
+            <pathCard class="webServer-item" :title="'记录增删日志'" @click="getNodeDes" :data="SaveLog"></pathCard>
 
             <img v-if="!SaveData.BeginTime" class="status path1 path" src="@/assets/image/model/arrowGray.png" />
             <img v-else-if="SaveData.BeginTime&&!SaveData.EndTime" class="status path1 path" src="@/assets/image/model/arrowBlue.png" />
@@ -237,39 +256,17 @@
             <img v-if="MultiFloorCheck.GridCheck||MultiFloorCheck.LevelCheck" class="status del-model" src="@/assets/image/model/delModelBlue.png" />
             <img v-else class="status del-model" src="@/assets/image/model/delModelGray.png" />
 
-            <p style="float:left;width:100%;text-align:center;margin-top:83px;color:#acb5bb;font-size:12px;">模型web服务器</p>
+            <img v-if="1" class="status path5 path" src="@/assets/image/model/arrowGray.png" />
+            <!-- <img v-else-if="2" class="status path1" src="@/assets/image/model/arrowBlue.png" />
+            <img v-else class="status path1" src="@/assets/image/model/arrowGreen.png" /> -->
+
+            <p style="float:left;width:100%;padding-left:714px;margin-top:83px;color:#acb5bb;font-size:12px;">模型web服务器</p>
           </el-row>
           <div id="thirdDel" class="delModel">
             <i class="iconfont icon-delate" style="color:#89969F;font-size:30px;line-height:1;margin-left:-6px"></i>
             <p>放弃文件</p>
           </div>
         </div>
-        <div class="forth-column column">
-          <div>
-            <div id="dataCenterDatabase" class="shadow-box">
-              <div style="background:#b8c5d0;height:20px;"></div>
-              <div>
-                <div style="text-align:center;">
-                  <i class="iconfont icon-project-o" style="color:#dee6ec;font-size:40px"></i>
-                  <p style="color:#676767">数据中心数据库</p>
-                </div>
-              </div>
-
-              <img v-if="1" class="status column-up" src="@/assets/image/model/columnGray.png" />
-              <!-- <img v-else-if="2" class="status column-up" src="@/assets/image/model/columnBlue.png" />
-              <img v-else class="status column-up" src="@/assets/image/model/columnGreen.png" /> -->
-            </div>
-          </div>
-          <el-row id="dataCenterServer">
-            <pathCard :title="'储存模型数据并记录增删日志'" @click="getNodeDes" :data="SaveLog"></pathCard>
-
-            <img v-if="1" class="status path1" src="@/assets/image/model/arrowGray.png" />
-            <!-- <img v-else-if="2" class="status path1" src="@/assets/image/model/arrowBlue.png" />
-            <img v-else class="status path1" src="@/assets/image/model/arrowGreen.png" /> -->
-
-            <p style="float:left;width:100%;text-align:center;margin-top:83px;color:#acb5bb;font-size:12px;">数据中心服务器 </p>
-          </el-row>
-        </div>
         <div class="fifth-column column">
           <pathCard class="finish-item" :title="'完成'" :data="SaveLog" :isCustomize="true">
             <p>后续关系计算...</p>
@@ -325,9 +322,9 @@ export default {
     }
   },
   mounted() {
-    // Bus.$on('modelStatusChange', message => {
-    //   this.init()
-    // })
+    Bus.$on('modelStatusChange', message => {
+      this.init()
+    })
   },
   created() {
     this.Id = this.$route.query.Id
@@ -351,14 +348,17 @@ export default {
       }
     },
     // 弹窗
-    getNodeDes(data, title) {
+    getNodeDes(data, title, flag) {
       let type = '';
+      if (flag && !data.errMsg) {
+        return
+      }
       if (title == '楼层模型检查') {
         type = 'firstCheck'
       } else if (title == '建筑模型检查') {
         type = 'secondCheck'
       }
-      this.$refs.nodeDialog.showDialog(data, type)
+      this.$refs.nodeDialog.showDialog(data, type, title)
     },
     // 获取流转状态
     getMessage() {
@@ -460,8 +460,8 @@ export default {
       } else {
         this.UploadStateSpeed = '--'
       }
-      if (this.UploadState.EndTime && this.SchedulerCheck.EndTime) {
-        sTime = new Date(this.UploadState.EndTime).getTime();
+      if (this.SchedulerCheck.BeginTime && this.SchedulerCheck.EndTime) {
+        sTime = new Date(this.SchedulerCheck.BeginTime).getTime();
         eTime = new Date(this.SchedulerCheck.EndTime).getTime();
         if (sTime != eTime) {
           this.ModelCheckSpeed = this.formatSpeed(this.Size / (eTime - sTime))
@@ -752,21 +752,43 @@ export default {
           }
         }
         &.third-column {
-          width: 1544px;
+          width: 1946px;
           margin-left: 200px;
           #webDatabase {
+            & > div {
+              display: inline-block;
+              position: relative;
+              width: 130px;
+              height: 144px;
+              .column-up {
+                top: 158px;
+                left: 63px;
+                transform: scale(1.1);
+              }
+              .right-down {
+                left: 130px;
+                top: 103px;
+              }
+              &:nth-child(1) {
+                margin-left: 500px;
+              }
+              &:nth-child(2) {
+                margin-left: 672px;
+              }
+              &:nth-child(3) {
+                margin-left: 271px;
+              }
+            }
+          }
+          #dataCenterDatabase {
             width: 130px;
             height: 144px;
-            margin-left: 500px;
+            margin: 0 auto;
             .column-up {
               top: 158px;
-              left: 565px;
+              left: 165px;
               transform: scale(1.1);
             }
-            .right-down {
-              right: 560px;
-              top: 103px;
-            }
           }
           #webServer {
             border: 2px dashed #b8c5d0;
@@ -794,8 +816,11 @@ export default {
             .path4 {
               left: 1520px;
             }
+            .path5 {
+              left: 1923px;
+            }
             .del-model {
-              right: 517px;
+              right: 919px;
               top: 168px;
             }
           }
@@ -803,33 +828,9 @@ export default {
             margin: 48px 0 0 925px;
           }
         }
-        &.forth-column {
-          width: 335px;
-          margin-left: 70px;
-          margin-right: 87px;
-          #dataCenterDatabase {
-            width: 130px;
-            height: 144px;
-            margin: 0 auto;
-            .column-up {
-              top: 158px;
-              left: 165px;
-              transform: scale(1.1);
-            }
-          }
-          #dataCenterServer {
-            border: 2px dashed #b8c5d0;
-            margin-top: 240px;
-            padding: 16px 16px 0;
-            height: 270px;
-            .path1 {
-              top: 95px;
-              left: 311px;
-            }
-          }
-        }
         &.fifth-column {
           width: auto;
+          margin-left: 88px;
           .finish-item {
             margin-top: 403px;
           }
@@ -847,6 +848,7 @@ export default {
     width: 204px;
     height: 93px;
     padding: 10px;
+    cursor: pointer;
     i {
       position: absolute;
       font-size: 16px;

+ 13 - 4
src/views/point/dynamicdata/addRelation/spaceRela/index.vue

@@ -396,20 +396,29 @@ export default {
         PageNumber: this.rPage.pageNumber,
         PageSize: this.rPage.pageSize,
         Cascade: [{ Name: 'building' }, { Name: 'floor' }, { Name: 'zoneName' }],
-        Filters: 'not RoomID isNull'
+        Filters: 'not RoomID isNull',
+        ZoneTypeList: []
       };
       //处理查询条件
       if (this.form.SubTypeName.length) {
-        pa.Filters += `;ObjectType in ${JSON.stringify(this.form.SubTypeName)}`
+        pa.ZoneTypeList = this.form.SubTypeName
       }
       if (this.form.ObjectLocalName && this.form.ObjectLocalName.length) {
         pa.Filters += `;RoomLocalName contain "${this.form.ObjectLocalName}"`;
       }
       if (this.form.locationVal.length > 0) {
-        pa.Filters += `;BuildingId="${this.form.locationVal[0]}"`;
+        if (this.form.locationVal[0] == "unknowBuild") {
+          pa.BuildingId = 'isnull';
+        } else {
+          pa.BuildingId = this.form.locationVal[0];
+        }
       }
       if (this.form.locationVal.length > 1) {
-        pa.Filters += `;FloorId="${this.form.locationVal[1]}"`;
+        if (this.form.locationVal[1] == "unknowFloor") {
+          pa.FloorId = 'isnull';
+        } else {
+          pa.FloorId = this.form.locationVal[1];
+        }
       }
       let pa2 = {
         Filters: `TypeName='${this.typeName}'`

+ 8 - 6
src/views/ready/collectsetting/index.vue

@@ -134,7 +134,7 @@
     },
     data() {
       return {
-        value: "property",
+        value: "Equipment",
         stepActive: '0',
         options: [{
           label: "设备",
@@ -579,6 +579,7 @@
         this.active = "";
         this.searchVal = "";
         this.allFamily =[];
+        this.isLoading = true;
         if (this.value == "property") {
           queryFamilyAll(res => {
             this.allFamily = res.Content.map((item) => {
@@ -592,7 +593,6 @@
           })
         } else if (this.value == "space") {
           queryDictionaryHead({Filters: "parentId = 'Space';Code != 'Ispace'"}, res => {
-            this.isLoading = false
             this.allFamily = res.Content.map(item => {
               return {
                 "code": item.Code,
@@ -600,21 +600,22 @@
               }
             })
             console.log(this.allFamily)
+            this.isLoading = false
             this.familySort();
           })
         } else if (this.value == "tenant") {
           this.allFamily = [{
             "code": "Tenant",
             "name": "租户"
-          }
-          ]
+          }]
+          this.isLoading = false
           this.familySort()
         } else if (this.value == "shaft") {
           this.allFamily = [{
             "code": "Shaft",
             "name": "竖井"
-          }
-          ]
+          }]
+          this.isLoading = false
           this.familySort()
         } else {
           queryPhysicsAllType(this.value, res => {
@@ -624,6 +625,7 @@
                 name: item.Name
               }
             })
+            this.isLoading = false
             this.familySort()
           })
         }