Browse Source

Merge branch 'dev'

zhangyu 5 years ago
parent
commit
e6482b1e3c
34 changed files with 1058 additions and 232 deletions
  1. 3 3
      config/dev.env.js
  2. 25 12
      config/index.js
  3. 3 3
      config/prod.env.js
  4. 46 6
      src/assets/style/iconfont/iconfont.css
  5. BIN
      src/assets/style/iconfont/iconfont.eot
  6. 30 0
      src/assets/style/iconfont/iconfont.svg
  7. BIN
      src/assets/style/iconfont/iconfont.ttf
  8. BIN
      src/assets/style/iconfont/iconfont.woff
  9. 2 1
      src/components/business_space/business/handsontable.vue
  10. 1 1
      src/components/business_space/lib/uploadImgsName.vue
  11. 28 7
      src/components/business_space/newGraphy/graphy.vue
  12. 15 11
      src/components/ledger/details/detail/exhibitionBaseInformation.vue
  13. 4 2
      src/components/ledger/details/detail/exhibitionCrux.vue
  14. 5 3
      src/components/ledger/details/detail/exhibitionEnergy.vue
  15. 2 1
      src/components/ledger/details/detail/exhibitionImage.vue
  16. 6 3
      src/components/ledger/details/detail/exhibitionMaintain.vue
  17. 7 4
      src/components/ledger/details/detail/lookFile.vue
  18. 10 7
      src/components/ledger/details/detail/lookImage.vue
  19. 14 33
      src/components/ledger/details/detail/lookVideo.vue
  20. 5 2
      src/components/ledger/details/detail/selectRadio.vue
  21. 14 10
      src/components/ready/buildfloor/addBuild.vue
  22. 1 1
      src/components/ready/buildfloor/addConnectivity.vue
  23. 5 0
      src/components/ready/buildfloor/formItems.vue
  24. 230 37
      src/components/ready/buildfloor/uploadFile.vue
  25. 3 1
      src/router/system.js
  26. 256 0
      src/views/business_space/dataUtil/topology.vue
  27. 10 3
      src/views/ledger/cenotelist/cenoteDetail/index.vue
  28. 103 36
      src/views/ledger/facility/details/index.vue
  29. 74 14
      src/views/ledger/property/details/index.vue
  30. 71 13
      src/views/ledger/spacelist/spaceDetail/index.vue
  31. 69 11
      src/views/ledger/system/systemDetail/index.vue
  32. 10 4
      src/views/ready/buildfloor/index.vue
  33. 4 2
      src/views/ready/buildfloor/repetitionGraphy.vue
  34. 2 1
      src/views/ready/collectsetting/index.vue

+ 3 - 3
config/dev.env.js

@@ -4,11 +4,11 @@ const prodEnv = require('./prod.env')
 
 module.exports = merge(prodEnv, {
     NODE_ENV: '"development"',
-    // BASE_URL: '"http://192.168.20.215"', //测试iframe地址
-    // SSO_SERVER: '"http://192.168.20.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://192.168.20.225:61614/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正式环境地址

+ 25 - 12
config/index.js

@@ -91,24 +91,30 @@ module.exports = {
       },
       '/modelapi': {
         target: 'http://mbi.sagacloud.cn:8080',
-        // target: 'http://192.168.20.218:8082',//景灏
         changeOrigin: true,
         pathRewrite: {
           "^/modelapi": "/revit-algorithm/"
         }
       },
+      '/schedulerapi': {
+        target: 'http://mbi.sagacloud.cn:8080',
+        changeOrigin: true,
+        pathRewrite: {
+            "^/schedulerapi": "/scheduler/"
+        }
+      },
     },
 
     // proxyTable: {
     //     '/admin': {
-    //         target: 'http://192.168.20.235:8080',
+    //         target: 'http://172.16.44.235:8080',
     //         changeOrigin: true,
     //         pathRewrite: {
     //             "^/admin": "/"
     //         }
     //     },
     //     '/api': {
-    //         target: 'http://192.168.20.235:8080',
+    //         target: 'http://172.16.44.235:8080',
     //         changeOrigin: true,
     //         pathRewrite: {
     //             "^/api": "/"
@@ -116,7 +122,7 @@ module.exports = {
     //     },
     //     '/data-platform-3': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.225:8080/',
+    //         target: 'http://172.16.42.210:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -124,7 +130,7 @@ module.exports = {
     //     },
     //     '/business-space': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.225:8080/',
+    //         target: 'http://172.16.42.210:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -132,7 +138,7 @@ module.exports = {
     //     },
     //     '/pointconfig': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.236:8080/',
+    //         target: 'http://172.16.44.235:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -140,7 +146,7 @@ module.exports = {
     //     },
     //     '/venders-dp': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.225:8080/',
+    //         target: 'http://172.16.42.210:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -148,7 +154,7 @@ module.exports = {
     //     },
     //     '/venders': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.225:8080/',
+    //         target: 'http://172.16.42.210:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -156,7 +162,7 @@ module.exports = {
     //     },
     //     '/ScanBuilding': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.236:8080/',
+    //         target: 'http://172.16.44.235:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -164,7 +170,7 @@ module.exports = {
     //     },
     //     '/image-service': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.225:8080/',
+    //         target: 'http://172.16.42.210:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
@@ -172,20 +178,27 @@ module.exports = {
     //     },
     //     '/godhand': {
     //         // 目标 API 地址
-    //         target: 'http://192.168.20.225:8080/',
+    //         target: 'http://172.16.42.210:8080/',
     //         // 如果要代理 websockets
     //         ws: true,
     //         // 将主机标头的原点更改为目标URL
     //         changeOrigin: false
     //     },
     //     '/modelapi': {
-    //         target: 'http://192.168.20.225:8082',
+    //         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

+ 3 - 3
config/prod.env.js

@@ -1,11 +1,11 @@
 'use strict'
 module.exports = {
     NODE_ENV: '"production"',
-    BASE_URL: '"http://192.168.20.215"', //测试iframe地址
-    SSO_SERVER: '"http://192.168.20.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://192.168.20.225:61614/stomp/"' //MQ测试环境地址
+    MQTT_SERVICE: '"ws://172.16.42.210:61614/stomp/"' //MQ测试环境地址
     // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
     // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
     // MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址

File diff suppressed because it is too large
+ 46 - 6
src/assets/style/iconfont/iconfont.css


BIN
src/assets/style/iconfont/iconfont.eot


File diff suppressed because it is too large
+ 30 - 0
src/assets/style/iconfont/iconfont.svg


BIN
src/assets/style/iconfont/iconfont.ttf


BIN
src/assets/style/iconfont/iconfont.woff


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

@@ -584,7 +584,8 @@ export default {
           }
         })
         let updateParam = {
-          Content: obj
+          Content: obj,
+          Projection: param.data.Projection
         };
         zoneUpdate(updateParam, res => {
           this.$message.success('更新成功')

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

@@ -5,7 +5,7 @@
     @click change  承接数组发生变化时触发函数
 -->
 <template>
-  <div id="sagaUploads">
+  <div id="sagaUploads" :style="{marginLeft:(isShow && imagesArr.length>2) ? '157px':'',marginTop:(isShow && imagesArr.length>2) ? '-25px':''}">
     <div class="saga-upload-images">
       <div v-if="type != 'video'" class="point-view" v-for="(item,index) in imagesArr">
         <div class="point-image">

+ 28 - 7
src/components/business_space/newGraphy/graphy.vue

@@ -582,7 +582,7 @@ export default {
         spaces = this.scene.getZoneDifference();
       }
       for (let key in spaces) {
-        spaces[key].map(t => {
+        spaces[key] = spaces[key].map(t => {
           let temp = t.map(item => {
             return {
               X: 1 * item.x.toFixed(2),
@@ -590,8 +590,10 @@ export default {
               Z: 0
             }
           })
-          zoneObj.Outline.push([temp]);
+          return temp;
         })
+        let newarr = this.makeMaxAreaFirst(spaces[key])
+        zoneObj.Outline.push(newarr);
         let curISP = this.sourceIdToISP[key];
         if (curISP) {
           curISP && IspaceIdList.push(curISP.RoomID);
@@ -650,7 +652,7 @@ export default {
         spaces = this.scene.getZoneDifference();
       }
       for (let key in spaces) {
-        spaces[key].map(t => {
+        spaces[key] = spaces[key].map(t => {
           let temp = t.map(item => {
             return {
               X: 1 * item.x.toFixed(2),
@@ -658,8 +660,10 @@ export default {
               Z: 0
             }
           })
-          zoneObj.Outline.push([temp]);
+          return temp;
         })
+        let newarr = this.makeMaxAreaFirst(spaces[key])
+        zoneObj.Outline.push(newarr);
         let curISP = this.sourceIdToISP[key];
         if (curISP) {
           curISP && IspaceIdList.push(curISP.RoomID);
@@ -820,7 +824,7 @@ export default {
       }
       for (let key in spaces) {
         let zoneObj = { Outline: [], Height: 0 }
-        spaces[key].map(t => {
+        spaces[key] = spaces[key].map(t => {
           let temp = t.map(item => {
             return {
               X: 1 * item.x.toFixed(2),
@@ -828,8 +832,10 @@ export default {
               Z: 0
             }
           })
-          zoneObj.Outline.push([temp]);
+          return temp;
         })
+        let newarr = this.makeMaxAreaFirst(spaces[key])
+        zoneObj.Outline.push(newarr);
         if (!zoneObj.Outline.length) {
           continue
         }
@@ -1023,7 +1029,8 @@ export default {
       zoneObj.BuildingId = this.buildFloor[0];
       zoneObj.FloorId = this.buildFloor[1];
       let pa = {
-        Content: [zoneObj]
+        Content: [zoneObj],
+        Projection: ['BIMLocation', 'ObjectType', 'Outline', 'Height', 'BuildingId', 'FloorId']
       }
       zoneUpdate(pa, res => {
         this.updateZoneBF(zoneObj, IspaceIdList);
@@ -1142,6 +1149,20 @@ export default {
       let scale = this.view.scale;
       this.view.scaleByPoint(val / scale, this.canvasWidth / 2, this.canvasHeight / 2);
     },
+    // 给定多个轮廓线的数据,计算得到面积最大值,并把它放置数组第一项
+    // list {XYZ}[][]
+    makeMaxAreaFirst(list) {
+      let arr = [], area = 0;
+      for (let i = 0; i < list.length; i++) {
+        let temp = this.getarea(list[i])
+        if (temp > area) {
+          arr.unshift(list[i])
+        } else {
+          arr.push(list[i])
+        }
+      }
+      return arr;
+    }
   },
   filters: {
     cutString: function (str, len) {

+ 15 - 11
src/components/ledger/details/detail/exhibitionBaseInformation.vue

@@ -6,32 +6,36 @@
       <span> {{value.InfoPointName}}:</span>
       <el-popover
         v-if="value.Path == 'EquipQRCode' || value.Path == 'RoomQRCode' || value.Path == 'ShaftQRCode'"
-        placement="top"
+        placement="right"
         width="360"
         trigger="hover">
         <p style="border-bottom: 1px solid #eee;padding:2px 0 4px 0;'">{{value.InfoPointName}}</p>
         <div style="overflow:hidden;">
-          <div style="float:left;width: 60%">
+          <div style="float:left;width: 60%" v-if="value.Value">
             <img
-              v-if="value.Value"
               style="width:200px;height:200px;"
               :src="'/image-service/common/file_get/'+ value.Value +'?systemId=dataPlatform'"
               alt="二维码"
             >
-            <span v-else>数据暂无</span>
           </div>
+          <div v-else style="width: 100%;text-align: center;padding-top: 10px">数据暂无</div>
           <div style="float:right;width: 40%;margin-top: 30px">
             <span>{{value.Value}}</span>
           </div>
         </div>
         <div style="text-align: center; margin: 0">
-          <el-button type="text" size="mini" @click="handleCopy(value.Value)">复制</el-button>
+          <el-button
+            type="text"
+            size="mini"
+            v-if="value.Value &&value.InputMode != 'F2'&& value.InputMode!='N2' "
+            @click="handleCopy(value.Value)">复制
+          </el-button>
         </div>
         <el-button slot="reference" type="text">{{value.Value ? '有' :'-'}}</el-button>
       </el-popover>
       <el-popover
         v-else-if="Array.isArray(value.Value) && value.InputMode== 'F2'"
-        placement="top"
+        placement="right"
         width="250"
         trigger="hover">
         <p style="border-bottom: 1px solid #eee;padding:2px 0 4px 0;'">{{value.InfoPointName}}</p>
@@ -44,7 +48,7 @@
       </el-popover>
       <el-popover
         v-else-if="Array.isArray(value.Value) && value.InputMode=='N2'"
-        placement="top"
+        placement="right"
         width="600"
         trigger="hover">
         <p style="border-bottom: 1px solid #eee;padding:2px 0 4px 0;'">{{value.InfoPointName}}</p>
@@ -55,8 +59,8 @@
         <el-button slot="reference" type="text">{{value.Value ? '有' :'-'}}</el-button>
       </el-popover>
       <el-popover
-        v-else-if="value.Value && value.Value.length && `${value.InfoPointName}:${value.Value}`.length>23"
-        placement="top"
+        v-else-if="value.Value && value.Value.length  && `${value.InfoPointName}:${value.Value}`.length>22 "
+        placement="right"
         width="160"
         trigger="hover">
         <p style="border-bottom: 1px solid #eee;padding:2px 0 4px 0;'">{{value.InfoPointName}}</p>
@@ -95,7 +99,7 @@
       },
       handleName(infoPoint, val) {
         let text = `${infoPoint}:${val}`
-        return text.length > 23 ? val.substring(0, 23-`${infoPoint}:`.length) + '...' : val
+        return text.length > 22 ? val.substring(0, 22-`${infoPoint}:`.length) + '...' : val
       }
     }
   }
@@ -126,7 +130,7 @@
     }
 
     .infoPoint-item {
-      width: 350px;
+      width: 335px;
       display: inline-block;
       margin-left: 20px;
     }

+ 4 - 2
src/components/ledger/details/detail/exhibitionCrux.vue

@@ -1,6 +1,8 @@
 <template>
   <section class="exhibition-crux">
-    <p class="title">{{exhibitionCrux.title}}
+    <p class="title">
+      <span class="iconfont icon-juxing"></span>
+      {{exhibitionCrux.title}}
       <span class="icon-shezhi iconfont setting" @click="setting"></span></p>
     <div>
       <div v-if="exhibitionCrux.cruxArray.length">
@@ -99,7 +101,7 @@
       font-size: 14px;
     }
     .title {
-      border-left: 8px solid black;
+      /*border-left: 8px solid black;*/
       margin: 10px 40px 0 10px;
       font-weight: 600;
       text-indent: 10px;

+ 5 - 3
src/components/ledger/details/detail/exhibitionEnergy.vue

@@ -2,7 +2,7 @@
   <div class="exhibition-energy">
     <div class="title">
       <section>
-        <h4 class="base">{{exhibitionEnergy.title}}</h4>
+        <h4 class="base" v-show="exhibitionEnergy.firstName">{{exhibitionEnergy.firstName}}</h4>
         <div v-if="exhibitionEnergy.dynamic.length">
           <div v-for="(item,index) in exhibitionEnergy.dynamic" :key="index" class="table-dynamic">
             <div class="table-title">{{item.InfoPointName}}:</div>
@@ -13,7 +13,7 @@
             </div>
           </div>
         </div>
-        <div v-else style="text-align: center">暂无数据</div>
+        <div v-else style="text-align: center;margin-top: 200px">暂无数据</div>
       </section>
     </div>
   </div>
@@ -43,7 +43,9 @@
     .table-dynamic {
       height: 85px;
       width: 100%;
-      margin: 5px 5px 5px 20px;
+      margin: 5px 0;
+      padding-left: 20px;
+      box-sizing: border-box;
     }
 
     .table-title {

+ 2 - 1
src/components/ledger/details/detail/exhibitionImage.vue

@@ -2,7 +2,8 @@
   <div class="exhibition-image">
     <p class="title">
       <span class=" icon-floorplan iconfont"></span>
-      {{exhibitionImage.title}}</p>
+      <span>{{exhibitionImage.title}}</span>
+    </p>
     <div class="image">
       <lookImage  :exhibitionImage="exhibitionImage"/>
     </div>

+ 6 - 3
src/components/ledger/details/detail/exhibitionMaintain.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="exhibition-maintain">
-    <p class="title">
-      <span class=" iconfont icon-weixiubeijing"></span>
+    <p class="title disable">
+      <span class=" iconfont icon-weixiubeijing "></span>
       {{exhibitionMaintain.title}}
-      <span class="iconfont icon-right" style="float: right;margin-right: 20px"></span></p>
+      <span class="iconfont icon-right " style="float: right;margin-right: 20px"></span></p>
   </div>
 </template>
 
@@ -22,5 +22,8 @@
       font-weight: 600;
       text-indent: 10px;
     }
+    .disable{
+      color:#ccc;
+    }
   }
 </style>

+ 7 - 4
src/components/ledger/details/detail/lookFile.vue

@@ -3,7 +3,10 @@
     <div v-if="Object.keys(exhibitionFile.list).length">
       <div v-for="(val,key,i) in exhibitionFile.list" :key="i">
         <div class="" v-for="(j,index) in val">
-          <p class="title">{{key}}</p>
+          <p class="title">
+            <span class="iconfont icon-juxing"></span>
+            {{key}}
+          </p>
           <div v-if="j.fileList !=undefined && j.fileList.length">
             <div v-for="(item,index) in j.fileList" class="content">
               <!--          图标-->
@@ -49,7 +52,7 @@
 
       //处理地址
       delFile(name) {
-        return name.length > 20 ? name.substring(0, 20) + "..." : name
+        return name && name.length > 20 ? name.substring(0, 20) + "..." : name
       },
       //点击下载
       download(key) {
@@ -137,7 +140,7 @@
 <style lang="less" scoped>
   .exhibition-file {
     .title {
-      border-left: 8px solid black;
+      /*border-left: 8px solid black;*/
       margin: 10px;
       font-weight: 600;
       text-indent: 10px;
@@ -153,7 +156,7 @@
 
     .file-box {
       border: 1px solid #eee;
-   margin: 10px;
+      margin: 10px;
       height: 88px;
 
       .file-box-left {

+ 10 - 7
src/components/ledger/details/detail/lookImage.vue

@@ -1,13 +1,16 @@
 <template>
-  <div id="sagaUploads">
+  <div id="sagaUploads-look-image">
     <div class="saga-upload-images">
       <div v-if="Object.keys(exhibitionImage.list).length">
         <div v-for="(val,key,i) in exhibitionImage.list" :key="i">
           <div class="" v-for="(j,index) in val">
-            <p class="title">{{key}}</p>
+            <p class="title">
+              <span class="iconfont icon-juxing"></span>
+              {{key}}
+            </p>
             <div v-if="j.PicList !=undefined && j.PicList.length >0">
               <template v-for="item in j.PicList">
-                <div class="point-image">
+                <div class="point-look-image">
                   <img @click="lookImg" :src="imageGetUrl + '&key=' +item.Key" alt v-load style="margin-bottom: 5px">
                   <p class="pic-name">{{handleName(item.Name)}}</p>
                 </div>
@@ -228,12 +231,12 @@
   };
 </script>
 <style lang="less">
-  #sagaUploads {
+  #sagaUploads-look-image {
     overflow: hidden;
 
     .title {
-      border-left: 8px solid black;
-      margin: 10px;
+      /*border-left: 8px solid black;*/
+      margin: 10px 10px 10px 0;
       font-weight: 600;
       text-indent: 10px;
       display: block;
@@ -273,7 +276,7 @@
         border-radius: 8px;
         bottom: 5px;
       }
-    .point-image {
+    .point-look-image {
       height: 180px;
       margin-bottom: 10px;
       position: relative;

+ 14 - 33
src/components/ledger/details/detail/lookVideo.vue

@@ -1,38 +1,25 @@
 <template>
-  <div id="sagaUploads">
+  <div id="sagaUploads-look-video">
     <div class="saga-upload-images">
-      <div v-if="Object.keys(exhibitionVideo.list).length">
-        <div v-for="(val,key,i) in exhibitionVideo.list" :key="i">
-          <div class="" v-for="(j,index) in val">
-            <p class="title">{{key}}</p>
-            <div v-if="j.PicList !=undefined && j.PicList.length">
-              <template v-for="(item,index) in j.PicList">
-                <div class="point-image">
-                  <video
-                    width="100%"
-                    height="100%;"
-                    :src="imageGetUrl + '&key=' +item.Key"
-                    controls="controls"
-                  >您的浏览器不支持 video 标签。</video>
-                </div>
-              </template>
-            </div>
-            <div v-else style="text-align: center;margin: 10px auto">暂无数据</div>
+      <div v-if="exhibitionVideo.list.length">
+        <template v-for="(item,index) in exhibitionVideo.list">
+          <div class="point-look-video">
+            <video
+              width="100%"
+              height="100%;"
+              :src="imageGetUrl + '&key=' +item.Key"
+              controls="controls"
+            >您的浏览器不支持 video 标签。</video>
           </div>
-        </div>
+        </template>
       </div>
-      <div style="text-align: center" v-else>暂无数据</div>
+      <div v-else style="text-align: center;margin: 10px auto">暂无数据</div>
     </div>
-    <details-dialog :title="'图片'" :iframeSrc="iframeSrc" :dialog="dialog" :setData="imagesArr"></details-dialog>
   </div>
 </template>
 <script>
-  import detailsDialog from "@/components/business_space/lib/detailsDia"
 
   export default {
-    components: {
-      detailsDialog
-    },
     props: ['exhibitionVideo'],
     data() {
       return {
@@ -47,12 +34,6 @@
       };
     },
     methods: {
-      //查看图片
-      lookImg() {
-        this.dialog.details = true
-        this.iframeSrc = process.env.BASE_URL + ":8890/photo-View.html"
-      },
-
       //上传
       uploadAndSubmit(item, key) {
         // var form = document.forms["demoForm"];
@@ -229,7 +210,7 @@
   };
 </script>
 <style lang="less">
-  #sagaUploads {
+  #sagaUploads-look-video {
     overflow: hidden;
 
     .title {
@@ -275,7 +256,7 @@
         bottom: 5px;
       }
 
-    .point-image {
+    .point-look-video {
       height: 180px;
       position: relative;
       overflow: hidden;

+ 5 - 2
src/components/ledger/details/detail/selectRadio.vue

@@ -1,6 +1,9 @@
 <template>
   <div class="select-radio">
-    <p class="title">{{selectRadio.information}}</p>
+    <p class="title">
+      <span class="iconfont icon-juxing"></span>
+      {{selectRadio.information}}
+    </p>
     <template>
       <el-radio-group
         style=" margin: 0 10px;"
@@ -35,7 +38,7 @@
 <style scoped lang="less">
   .select-radio {
     .title {
-      border-left: 8px solid black;
+      /*border-left: 8px solid black;*/
       margin: 10px 40px 10px 10px;
       font-weight: 600;
       text-indent: 10px;

+ 14 - 10
src/components/ready/buildfloor/addBuild.vue

@@ -43,7 +43,7 @@
             </el-input>
             <el-select
             placeholder="请选择"
-            v-else-if="item.InputMode == 'D1' || item.InputMode == 'E2'"
+            v-else-if="item.InputMode == 'D1' || item.InputMode == 'E2' || item.InputMode == 'D1L'"
             v-model="form[item.Path]"
           >
             <el-option :key="op.Name" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
@@ -67,15 +67,15 @@
              start-placeholder="开始日期"
              end-placeholder="结束日期"
            />
-             <el-cascader
-               v-else-if="item.InputMode == 'D1L'"
-               placeholder="请选择"
-               :options="item.options"
-               v-model="form[item.Path]"
-               :props="{ checkStrictly: true ,value: 'Code',label:'Name'}"
-               clearable
-               style="width: 200px"
-             />
+<!--             <el-cascader-->
+<!--               v-else-if="item.InputMode == 'D1L'"-->
+<!--               placeholder="请选择"-->
+<!--               :options="item.options"-->
+<!--               v-model="form[item.Path]"-->
+<!--               :props="{ checkStrictly: true ,value: 'Code',label:'Name'}"-->
+<!--               clearable-->
+<!--               style="width: 200px"-->
+<!--             />-->
           <el-input
             v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'"
             v-model="form[item.Path]">
@@ -276,5 +276,9 @@
       width: 100% !important;
       display: block !important;
     }
+
+    /deep/ .el-input--small {
+      width: 200px
+    }
   }
 </style>

+ 1 - 1
src/components/ready/buildfloor/addConnectivity.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog title="楼层贯通关系维护" :visible.sync="connectDialogVis" width="50%" id="messageDialog">
+  <el-dialog title="楼层贯通关系维护" :visible.sync="connectDialogVis" width="730px" id="messageDialog">
     <el-row>
       <div style="line-height:32px;">添加与{{floor.FloorLocalName}}层有贯通关系的楼层 : </div>
       <div style="width:70%">

+ 5 - 0
src/components/ready/buildfloor/formItems.vue

@@ -120,8 +120,13 @@
       font-size: 12px;
     }
   }
+
   /deep/ .FloorTypeSelect .el-form-item__content {
     width: 200px;
   }
+
+  /deep/ .el-input--small {
+    width: 200px
+  }
 }
 </style>

+ 230 - 37
src/components/ready/buildfloor/uploadFile.vue

@@ -1,56 +1,249 @@
+<!--
+  上传组件
+  type: 类型,默认image
+  identify: key值,通过val获取
+  disabled: 是否可用
+  index: 父组件的下标
+  imageIndex: 图片下标
+  isShow: 图片的显示
+ -->
 <template>
-  <el-upload
-    :before-remove="beforeRemove"
-    :file-list="fileList"
-    :limit="3"
-    :on-exceed="handleExceed"
-    :on-preview="handlePreview"
-    :on-remove="handleRemove"
-    action="https://jsonplaceholder.typicode.com/posts/"
-    class="upload-demo"
-    multiple>
-    <p
-      class="el-form-item__label"
-      style="width: 125px"
-    >{{name}}:</p>
-    <el-button
-      size="small"
-      type="text"
-    >点击上传
-    </el-button>
-    <!--    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
-  </el-upload>
+  <div id="saga-upload">
+    <div id="uploadFile">
+      <el-upload
+        class="upload-file"
+        action
+        :http-request="uploadAndSubmit"
+        :show-file-list="false"
+        drag
+      >
+        <el-button
+          size="small"
+          :type="isShow ===1 ? 'text':'primary'"
+          v-if="!readOnly"
+        >点击上传</el-button>
+        <span v-if="isShow !== 1 || isShow == undefined">
+          <div
+            slot="tip"
+            class="el-upload__tip"
+            v-if="!readOnly"
+          >请上传文件</div>
+        </span>
+
+      </el-upload>
+      <div
+        v-if="item && filesArr.length"
+        v-for="(item,index) in filesArr"
+      >
+        <el-button
+          type="text"
+          @click="download(item.Key)"
+        >
+          {{delFile(item.Name)}}</el-button>
+        <i
+          v-if="!readOnly"
+          class="el-icon-close delete-icon"
+          style="margin-left:10px; cursor:pointer"
+          @click="deleteFile(index,item)"
+        ></i>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
+  import tools from "@/utils/scan/tools";
+
   export default {
-    name: "uploadFile",
-    props: ['name'],
+    props: {
+      keysArr: {
+        type: [Array, String],
+        default: function () {
+          return []
+        }
+      },
+      readOnly: {
+        type: Boolean,
+        default: false
+      },
+      max: {
+        type: [Number, String],
+        default: 6
+      },
+      isShow: {
+        type: Number
+      },
+      contextKey: {
+        type: [String, Object]
+      },
+      defined: null
+    },
     data() {
       return {
-        fileList: [
-          // {name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'},
-          // {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}
-        ]
+        filesArr: []
       };
     },
+    created() {
+      this.fileFalg()
+    },
     methods: {
-      handleRemove(file, fileList) {
-        console.log(file, fileList);
+      //判断是否为空
+      fileFalg() {
+        let type = typeof (this.keysArr)
+        if (type == 'string') {
+          this.filesArr = [this.keysArr]
+          // this.filesArr = JSON.parse(this.keysArr)
+        } else {
+          this.filesArr = tools.deepCopy(this.keysArr)
+        }
+
+        if (!this.keysArr) {
+          this.filesArr = []
+        }
+      },
+      //处理地址
+      delFile(name) {
+        return name.length > 20 ? name.substring(0, 20) + "..." : name
       },
-      handlePreview(file) {
-        console.log(file);
+
+      resetFile() {
+        this.filesArr = []
       },
-      handleExceed(files, fileList) {
-        this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+
+
+      //点击下载
+      download(key) {
+        console.log(key)
+        window.open("/image-service/common/file_get/" + key + "?systemId=dataPlatform")
       },
-      beforeRemove(file, fileList) {
-        return this.$confirm(`确定移除 ${file.name}?`);
+
+      //删除图片
+      deleteFile(i, key) {
+        this.filesArr.splice(i, 1);
+        this.$emit("change", this.filesArr, this.defined);
+      },
+
+      //上传
+      uploadAndSubmit(item) {
+        // var form = document.forms["demoForm"];
+
+        // if (form["file"].files.length > 0) {
+        // 寻找表单域中的 <input type="file" ... /> 标签
+        // var file = form["file"].files[0];
+
+        let file = item.file;
+        // try sending
+        let reader = new FileReader();
+
+        let vm = this;
+
+        let fileType = file.name.split(".");
+        let type = fileType[fileType.length - 1];
+        let key = "&key=" + fileType[0] + file.uid + "." + type
+        let CreateTime = tools.formatDate(new Date(file.lastModified))
+        reader.onloadstart = function () {
+          // 这个事件在读取开始时触发
+        };
+        reader.onprogress = function (p) {
+          // 这个事件在读取进行中定时触发
+
+        };
+        reader.onUploadProgress = function (progressEvent) {
+          let percent = (progressEvent.loaded / progressEvent.total * 100) | 0
+          //调用onProgress方法来显示进度条,需要传递个对象 percent为进度值
+          uploader.onProgress({percent: percent})
+        }
+        reader.onload = function () {
+          // 这个事件在读取成功结束后触发
+        };
+        reader.onloadend = function () {
+          // 这个事件在读取结束后,无论成功或者失败都会触发
+          if (reader.error) {
+          } else {
+            // document.getElementById("bytesRead").textContent = file.size;
+            // 构造 XMLHttpRequest 对象,发送文件 Binary 数据
+            var xhr = new XMLHttpRequest();
+            xhr.open(
+              /* method */
+              "POST",
+              /* target url */
+              "/image-service/common/file_upload?systemId=dataPlatform&secret=9e0891a7a8c8e885&overwrite=true" + key
+              /*, async, default to true */
+            );
+            //xhr.overrideMimeType("application/octet-stream");
+            xhr.send(reader.result);
+            xhr.onreadystatechange = function () {
+              if (xhr.readyState == 4) {
+                console.log(xhr)
+                if (xhr.status == 200) {
+                  let fileObject = {
+                    Key: key.split("=")[1],
+                    Type: type,
+                    Name: file.name,
+                    CreateTime,
+                    SystemId: 'dataPlatform'
+                  }
+                  vm.filesArr.push(fileObject);
+
+                  if(vm.isShow === 1) {
+                    let oFile = {}
+                    oFile[vm.contextKey] = vm.filesArr
+                    vm.$emit("change", oFile, vm.defined);
+                  } else {
+                    vm.$emit("change", vm.filesArr, vm.defined);
+                  }
+                } else {
+                  this.$message.error(res.data.ResultMsg)
+                }
+              }
+            };
+          }
+        };
+        reader.readAsArrayBuffer(file);
+      }
+    },
+    watch: {
+      keysArr: function (val) {
+        this.fileFalg()
       }
     }
-  }
+  };
 </script>
 
-<style scoped>
+<style lang="less">
+  #saga-upload {
+    .dill-image {
+      position: absolute;
+      right: 0;
+      top: 0;
+      font-size: 20px;
+    }
 
+    .el-upload-dragger {
+      width: 180px;
+      height: 180px;
+    }
+
+    img {
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      right: 0;
+      width: 100%;
+      height: 100%;
+    }
+
+    #uploadFile {
+      .upload-file {
+        overflow: hidden;
+
+        .el-upload-dragger {
+          width: inherit;
+          height: inherit;
+          border: none;
+        }
+      }
+    }
+  }
 </style>

+ 3 - 1
src/router/system.js

@@ -85,6 +85,7 @@ import integrateResults from '@/views/screen/splitScreen/integrateresults'
 import dataUtil from '@/views/business_space/dataUtil/index'
 import dataUtil2 from '@/views/business_space/dataUtil/index2'
 import checkJsonUtil from '@/views/business_space/dataUtil/checkJsonUtil'
+import topology from '@/views/business_space/dataUtil/topology'
 
 /**市场及商务 */
 const OwnerManage = () =>
@@ -110,7 +111,8 @@ export default [{
         children: [
             { path: 'index', component: dataUtil },
             { path: 'index2', component: dataUtil2 },
-            { path: 'checkJsonUtil', component: checkJsonUtil }
+            { path: 'checkJsonUtil', component: checkJsonUtil },
+            { path: 'topology', component: topology },
         ]
     },
     // 辅助屏

+ 256 - 0
src/views/business_space/dataUtil/topology.vue

@@ -0,0 +1,256 @@
+<template>
+  <!-- 拓扑图demo -->
+  <el-container>
+    <el-aside width="200px" class="el-scrollbar">
+      <div style="height: 300px;">
+        <el-input type="textarea" v-model="ModelID" placeholder='输入业务空间轮廓线,三维数组,X,Y,Z均为大写;或者模型ID' style="height: 100%;"></el-input>
+      </div>
+      <div title="上传json文件">
+        <el-button size="mini" @click="clickInputFile" icon="el-icon-upload"></el-button>
+        <input type="file" @change="filechange" ref="file">
+      </div>
+      <div title="适配底图">
+        <el-button size="mini" @click="fitClick" icon="el-icon-crop"></el-button>
+      </div>
+      <div title="切割">
+        <el-button size="mini" @click="cut" icon="el-icon-edit"></el-button>
+      </div>
+      <div title="清除">
+        <el-button size="mini" @click="clear" icon="el-icon-refresh-left"></el-button>
+      </div>
+      <div title="定位">
+        <el-button size="mini" @click="location" icon="el-icon-position"></el-button>
+      </div>
+      <div title="开启/关闭吸附">
+        <el-button size="mini" @click="absorb" icon="el-icon-price-tag"></el-button>
+      </div>
+      <div title="矩形选择">
+        <el-button size="mini" @click="rectSelection" icon="el-icon-mouse"></el-button>
+      </div>
+      <div title="通过模型ID生成平面图">
+        <el-button size="mini" icon="el-icon-s-promotion" @click="modelChange"></el-button>
+      </div>
+      <div title="通过轮廓线生成业务空间">
+        <el-button size="mini" @click="showOutline" icon="el-icon-magic-stick"></el-button>
+      </div>
+      <div title="打印">
+        <el-button size="mini" @click="console" icon="el-icon-printer"></el-button>
+      </div>
+    </el-aside>
+    <el-main>
+      <div ref="graphy" v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
+        element-loading-background="rgba(0, 0, 0, 0.8)" style="height: 100%">
+        <canvas id="bg" :width="canvasWidth" :height="canvasHeight" ref="canvas" tabindex="0"></canvas>
+      </div>
+    </el-main>
+  </el-container>
+</template>
+<script>
+
+import { SGraphyScene } from "@saga-web/graphy/lib/";
+import { DivideFloorScene, LocationPointScene } from "@saga-web/cad-engine/lib";
+import { FloorView } from "@saga-web/cad-engine/lib/FloorView";
+export default {
+  data() {
+    return {
+      view: null,
+      scene: null,
+      flag: undefined,
+      show: true,
+      loading: false,
+      canvasWidth: 800,
+      canvasHeight: 800,
+      ModelID: "4cea832a217c11ea962ac576d98e7540"
+    }
+  },
+  mounted() {
+    this.canvasWidth = this.$refs.graphy.offsetWidth;
+    this.canvasHeight = this.$refs.graphy.offsetHeight;
+    this.createGraphy();
+    document.onkeydown = E => {
+      console.log(E)
+    }
+    window.onresize = () => {
+      this.canvasWidth = this.$refs.graphy.offsetWidth;
+      this.canvasHeight = this.$refs.graphy.offsetHeight;
+    }
+  },
+  beforeCreate() {
+    // 读取文件
+    FileReader.prototype.reading = function ({ encode } = pms) {
+      let bytes = new Uint8Array(this.result);    //无符号整型数组
+      let text = new TextDecoder(encode || 'UTF-8').decode(bytes);
+      return text;
+    };
+    /* 重写readAsBinaryString函数 */
+    FileReader.prototype.readAsBinaryString = function (f) {
+      if (!this.onload)       //如果this未重写onload函数,则创建一个公共处理方式
+        this.onload = e => {  //在this.onload函数中,完成公共处理
+          let rs = this.reading();
+          console.log(rs);
+        };
+      this.readAsArrayBuffer(f);  //内部会回调this.onload方法
+    };
+  },
+  methods: {
+    createGraphy() {
+      let that = this;
+      // this.disableRightButton()
+      this.clearGraphy()
+      that.scene = new DivideFloorScene();
+      this.loading = true;
+      that.scene.getFloorData('/modelapi/base-graph/query', { ModelId: this.ModelID }).then(res => {
+        if (res.Result == 'failure') {
+          this.$message.warning(res.Message)
+        }
+        console.log(res)
+        that.view.scene = that.scene;
+        that.view.fitSceneToView();
+        this.loading = false;
+      }).catch(err => {
+        console.log(err)
+      })
+    },
+    // 清除canvas
+    clearGraphy() {
+      if (this.view) {
+        this.view.scene = null;
+        return
+      }
+      this.view = new FloorView('bg')
+    },
+    fitClick() {
+      this.view.fitSceneToView();
+    },
+    showSpace() {
+      this.show = !this.show
+      // this.scene.isShowDoor = this.show
+      // this.scene.isShowSpace = this.show
+      this.scene.spaceList.map(t => {
+        if (!t.selected) {
+          t.visible = false;
+        }
+      })
+      this.scene.isShowColumn = this.show
+      // Opt.spaceColor = new SColor(100,100,100,100);
+    },
+    disableRightButton() {
+      this.$refs.canvas.addEventListener('contextmenu', (e) => {
+        console.log(e)
+        e.preventDefault();
+      })
+      this.scene.isShowSpace = false
+    },
+    cut() {
+      this.scene.isMarking = true;
+      console.log(this.scene)
+    },
+    console() {
+      console.log(this.scene.getSelectedSpaces())
+      this.scene.isShowColumn = false
+      this.scene.isShowWall = false
+    },
+    clear() {
+      this.scene.clearSceneMark()
+    },
+    location() {
+      // console.log(this)
+      this.view.fitSelectedToView()
+    },
+    move() {
+      this.view.isMoving = !this.view.isMoving;
+    },
+    absorb() {
+      this.scene.isAbsorbing = !this.scene.isAbsorbing;
+    },
+    rectSelection() {
+      this.scene.isRectSelection = 1;
+      console.log(this.scene)
+    },
+    showOutline() {
+      try {
+        let outline = JSON.parse(this.ModelID)
+        console.log(outline)
+        let obj = {
+          RoomLocalName: '哈哈哈哈',
+          OutLine: outline,
+          RoomID: 12312,
+          Color: "#006bd6",
+          Height: 5000,
+          HeightLightFlag: true
+        }
+        this.scene.removeAllZone()
+        this.scene.addZone(obj);
+        this.scene.zoneList[0].selected = true;
+        this.view.fitSelectedToView();
+      } catch (err) {
+        alert('格式不正确')
+      }
+    },
+    filechange(e) {
+      let file = e.target.files[0]
+      this.read(file)
+    },
+    read(f) {
+      let rd = new FileReader();
+      this.loading = true;
+      rd.onload = e => {
+        //this.readAsArrayBuffer函数内,会回调this.onload函数。在这里处理结果
+        let cont = rd.reading({ encode: 'UTF-8' });
+        let res = JSON.parse(cont);
+        this.JSON = res;
+        this.loadRes()
+      };
+      rd.readAsBinaryString(f);
+    },
+    loadRes() {
+      if (this.JSON) {
+        this.view.scene = null;
+        this.scene = new DivideFloorScene();
+        this.scene.addBaseMapItem(this.JSON.EntityList[0].Elements)
+        this.view.scene = this.scene;
+        console.log(this.scene)
+        this.view.fitSceneToView();
+      }
+      this.loading = false;
+    },
+    modelChange() {
+      console.log(this.ModelID)
+      this.createGraphy();
+    },
+    clickInputFile() {
+      this.$refs.file.click()
+    },
+  },
+}
+</script>
+<style lang="less" scoped>
+.el-container {
+  background: #fff;
+
+  /deep/ textarea.el-textarea__inner {
+    width: 100%;
+    height: 100% !important;
+  }
+
+  .el-aside {
+    padding: 10px;
+    border: 1px solid #e4e4e4;
+  }
+
+  .el-aside > div {
+    margin: 10px auto;
+    text-align: right;
+  }
+
+  .el-main {
+    padding: 10px !important;
+    border: 1px solid #e4e4e4;
+    border-left: none;
+  }
+
+  input[type="file"] {
+    display: none;
+  }
+}
+</style>

+ 10 - 3
src/views/ledger/cenotelist/cenoteDetail/index.vue

@@ -105,7 +105,7 @@
     },
     created() {
       this.params = this.$route.query;
-    this.getData();
+      this.getData();
   },
   mounted() { },
   watch: {
@@ -174,12 +174,19 @@
       this.currentRadio = val
     },
     formatDate(str) {
-      return str ? str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2) :'--'
+      if(str) {
+        if(str.includes('-')) {
+          return str
+        }else {
+          return  str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2)
+        }
+      } else {
+        return '--'
+      }
     },
     displayData(arr) {//对数据进行处理传给组件展示
       const result = {}
       arr.forEach(i => {
-
         if (this.instance.hasOwnProperty(i.Path) && this.currentRadio != 2) {
           i.value = this.instance[i.Path]
         }

+ 103 - 36
src/views/ledger/facility/details/index.vue

@@ -39,9 +39,9 @@
         <div class="content-media">
           <el-scrollbar style="height:100%;">
             <div>
-              <exhibitionImage :exhibitionImage="exhibitionImage"/>
-              <exhibitionVideo :exhibitionVideo="exhibitionVideo"/>
-              <exhibitionFile :exhibitionFile="exhibitionFile"/>
+              <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
+              <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
+              <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
             </div>
           </el-scrollbar>
         </div>
@@ -131,6 +131,7 @@
         },
         exhibitionEnergy: {
           title: '能耗信息',
+          firstName:'',
           dynamic: [],
         },
         exhibitionMaintain: {
@@ -151,9 +152,12 @@
         },
         exhibitionVideo: {
           title: '视频',
-          list: {}
+          list: []
         },
         instance: {},//实例信息处理
+        isShowImage: true,
+        isShowVideo: true,
+        isShowFile: true,
       }
     },
     methods: {
@@ -194,6 +198,7 @@
           obj = tools.flattenKeys(obj);
           this.instance = obj;
           this.handleRadios(1)
+          this.handleEnclosure() //处理图片视频文件信息
           this.pointData.forEach(item => {
             if (item.InputMode == "L" || item.InputMode == "L1" || item.InputMode == "L2" || item.InputMode == "M") {
               let cur = tools.dataForKey(this.exampleData, item.Path);
@@ -216,10 +221,13 @@
           }
           if (this.criterias.length) {
             BeatchQueryParam(params, res => {
-              res.Content.map(child => {
+              res.Content && res.Content.map(child => {
                 this.pointData.forEach(head => {
                   if (head.InfoPointCode == child.code) {
+                    console.log(head.FirstName,child,'==')
+                    this.exhibitionEnergy.firstName = head.FirstName
                     this.exhibitionEnergy.dynamic.push({
+                      FirstName:head.FirstName,
                       InfoPointCode: head.InfoPointCode,
                       InfoPointName: head.InfoPointName,
                       Path: head.Path,
@@ -237,6 +245,22 @@
 
         })
       },
+      handleEnclosure() {
+        //图片文件处理,脱离radio控制
+        let isList = this.pointData
+        let isArr = []
+        isList.map(j => {
+          if (this.instance.hasOwnProperty(j.Path)) {
+            return {
+              ...j,
+              value: this.instance[j.Path]
+            }
+          }
+        })
+        isArr = isList.filter(k => k.value)
+        this.handlePicList(isArr)
+        this.handleFileList(isArr)
+      },
       handleRadios(val) { //判断radio的值显示关键信息,基本信息,图片,文件
         let arr = []
         //关键信息点
@@ -249,13 +273,13 @@
             }
           }
         })
+
         if (val == 1) { //需采集信息
           arr = this.pointData.filter(i => i.Visible)
-
-          //  图片和的处理
-          this.handlePicList(arr)
-          //  文件处理
-          this.handleFileList(arr)
+          // //  图片和的处理
+          // this.handlePicList(arr)
+          // //  文件处理
+          // this.handleFileList(arr)
 
         } else if (val == 2) { //有值信息点
           let list = this.pointData
@@ -266,14 +290,15 @@
                 value: this.instance[j.Path]
               }
             }
-            arr = list.filter(k => k.value)
-            this.handlePicList(arr)
-            this.handleFileList(arr)
           })
+          arr = list.filter(k => k.value)
+          // this.handlePicList(arr, 2)
+          // this.handleFileList(arr, 2)
+
         } else { //全部信息点
           arr = this.pointData
-          this.handlePicList(arr)
-          this.handleFileList(arr)
+          // this.handlePicList(arr)
+          // this.handleFileList(arr)
         }
         this.displayData(arr)
       },
@@ -281,31 +306,49 @@
         let picObject = {}
         //处理数据格式
         arr.map(i => {
-            if(i.InputMode == 'F2') {
-              switch (i.Path) {
-                case 'LedgerParam.PhotoDoc.Drawing':
-                case 'LedgerParam.Siteinstall.InstallPic':
-                case 'LedgerParam.Siteinstall.InstallDrawing':
-                case 'LedgerParam.PhotoDoc.Nameplate':
-                  if (this.instance.hasOwnProperty(i.Path)) {
-                    i.PicList = this.instance[i.Path]
-                  }
-                  if (picObject[i.InfoPointName]) {
+          if (i.InputMode == 'F2') {
+            switch (i.Path) {
+              case 'LedgerParam.PhotoDoc.Drawing':
+              case 'LedgerParam.Siteinstall.InstallPic':
+              case 'LedgerParam.Siteinstall.InstallDrawing':
+              case 'LedgerParam.PhotoDoc.Nameplate':
+                if (this.instance.hasOwnProperty(i.Path)) {
+                  i.PicList = this.instance[i.Path]
+                }
+                if (picObject[i.InfoPointName]) {
 
-                  } else {
-                    picObject[i.InfoPointName] = []
-                  }
-                  picObject[i.InfoPointName].push({
-                    ...i,
-                  })
-                  break;
+                } else {
+                  picObject[i.InfoPointName] = []
+                }
+                picObject[i.InfoPointName].push({
+                  ...i,
+                })
+                break;
 
-              }
             }
+          }
 
         })
         //展示图片
         this.exhibitionImage.list = picObject
+        let isArray = [] //获取图片数组
+        for (let i in picObject) {
+          if (Array.isArray(picObject[i])) {
+            let list = picObject[i]
+            list.forEach(i => {
+              if (i.PicList) {
+                isArray.push(...i.PicList)
+              }
+            })
+          }
+        }
+        let video = isArray.filter(i => i.Type != 'image' &&i.type != 'image' )
+        this.exhibitionVideo.list = video
+          //判断是否显示图片组件
+          this.isShowImage = isArray.length ? true : false
+          //判断是否显示video组件
+          this.isShowVideo = video.length ? true : false
+
       },
       handleFileList(arr) {
         let picObject = {}
@@ -333,13 +376,35 @@
         })
         //展示文件
         this.exhibitionFile.list = picObject
+        let isArray = [] //获取文件数组
+        for (let i in picObject) {
+          if (Array.isArray(picObject[i])) {
+            let list = picObject[i]
+            list.forEach(i => {
+              if (i.fileList) {
+                isArray.push(...i.fileList)
+              }
+            })
+          }
+        }
+          //判断是否显示文件组件
+          this.isShowFile = isArray.length ? true : false
+
       },
       changeRadio(val) { //1,需采集,2,有值,3,全部
         this.handleRadios(val)
         this.currentRadio = val
       },
       formatDate(str) {
-        return str ? str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2) :'--'
+        if(str) {
+          if(str.includes('-')) {
+            return str
+          }else {
+            return  str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2)
+          }
+        } else {
+          return '--'
+        }
       },
       displayData(arr) {//对数据进行处理传给组件展示
         const result = {}
@@ -428,6 +493,7 @@
       handleChangeExample() {
         this.selectRadio.initRadio = '1'
         this.getData();
+        this.exhibitionEnergy.dynamic = []
       },
     },
     watch: {
@@ -439,7 +505,7 @@
 </script>
 
 <style scoped lang="less">
-  @bgc:#fff;
+  @bgc: #fff;
   .tableDisplay {
     .header {
       padding-bottom: 10px;
@@ -492,7 +558,7 @@
           }
 
           .content-point-right {
-            width: 350px;
+            width: 300px;
             border-left: 1px solid #ccc;
           }
         }
@@ -510,6 +576,7 @@
         }
         .content-media {
           height: calc(100% - 60px);
+          background: @bgc;
           border: 1px solid #ccc;
           box-sizing: border-box;
         }

+ 74 - 14
src/views/ledger/property/details/index.vue

@@ -30,9 +30,9 @@
         <div class="content-media">
           <el-scrollbar style="height:100%;">
             <div>
-              <exhibitionImage :exhibitionImage="exhibitionImage"/>
-              <exhibitionVideo :exhibitionVideo="exhibitionVideo"/>
-              <exhibitionFile :exhibitionFile="exhibitionFile"/>
+              <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
+              <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
+              <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
             </div>
           </el-scrollbar>
         </div>
@@ -134,6 +134,9 @@
           list: {}
         },
         instance: {},//实例信息处理
+        isShowImage: true,
+        isShowVideo: true,
+        isShowFile: true,
       }
     },
     methods: {
@@ -174,8 +177,25 @@
           obj = tools.flattenKeys(obj);
           this.instance = obj;
           this.handleRadios(1)
+          this.handleEnclosure() //处理图片视频文件信息
         })
       },
+      handleEnclosure() {
+        //图片文件处理,脱离radio控制
+        let isList = this.pointData
+        let isArr = []
+        isList.map(j => {
+          if (this.instance.hasOwnProperty(j.Path)) {
+            return {
+              ...j,
+              value: this.instance[j.Path]
+            }
+          }
+        })
+        isArr = isList.filter(k => k.value)
+        this.handlePicList(isArr)
+        this.handleFileList(isArr)
+      },
       handleRadios(val) { //判断radio的值显示关键信息,基本信息,图片,文件
         let arr = []
         //关键信息点
@@ -192,9 +212,9 @@
           arr = this.pointData.filter(i => i.Visible)
 
           //  图片和的处理
-          this.handlePicList(arr)
-          //  文件处理
-          this.handleFileList(arr)
+          // this.handlePicList(arr)
+          // //  文件处理
+          // this.handleFileList(arr)
 
         } else if (val == 2) { //有值信息点
           let list = this.pointData
@@ -206,13 +226,13 @@
               }
             }
             arr = list.filter(k => k.value)
-            this.handlePicList(arr)
-            this.handleFileList(arr)
+            // this.handlePicList(arr)
+            // this.handleFileList(arr)
           })
         } else { //全部信息点
           arr = this.pointData
-          this.handlePicList(arr)
-          this.handleFileList(arr)
+          // this.handlePicList(arr)
+          // this.handleFileList(arr)
         }
         this.displayData(arr)
       },
@@ -245,6 +265,23 @@
         })
         //展示图片
         this.exhibitionImage.list = picObject
+        let isArray = [] //获取图片数组
+        for (let i in picObject) {
+          if (Array.isArray(picObject[i])) {
+            let list = picObject[i]
+            list.forEach(i => {
+              if (i.PicList) {
+                isArray.push(...i.PicList)
+              }
+            })
+          }
+        }
+        let video = isArray.filter(i => i.Type =='video' && i.type == 'video' )
+        this.exhibitionVideo.list = video
+        //判断是否显示图片组件
+        this.isShowImage = isArray.length ? true : false
+        //判断是否显示video组件
+        this.isShowVideo = video.length ? true : false
       },
       handleFileList(arr) {
         let picObject = {}
@@ -274,13 +311,34 @@
         })
         //展示文件
         this.exhibitionFile.list = picObject
+        let isArray = [] //获取文件数组
+        for (let i in picObject) {
+          if (Array.isArray(picObject[i])) {
+            let list = picObject[i]
+            list.forEach(i => {
+              if (i.fileList) {
+                isArray.push(...i.fileList)
+              }
+            })
+          }
+        }
+        //判断是否显示文件组件
+        this.isShowFile = isArray.length ? true : false
       },
       changeRadio(val) { //1,需采集,2,有值,3,全部
         this.handleRadios(val)
         this.currentRadio = val
       },
       formatDate(str) {
-        return str ? str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2) :'--'
+        if(str) {
+          if(str.includes('-')) {
+            return str
+          }else {
+            return  str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2)
+          }
+        } else {
+          return '--'
+        }
       },
       displayData(arr) {//对数据进行处理传给组件展示
         const result = {}
@@ -380,6 +438,7 @@
 </script>
 
 <style scoped lang="less">
+  @bgc: #fff;
   .tableDisplay {
     .header {
       padding-bottom: 10px;
@@ -410,14 +469,14 @@
           height: 100px;
           margin-bottom: 10px;
           overflow: hidden;
-          background: #FFFFFF;
+          background: @bgc;
         }
         .content-showType {
           height: 50px;
           border: 1px solid #ccc;
           border-bottom: none;
           box-sizing: border-box;
-          background: #FFFFFF;
+          background: @bgc;
         }
         .content-point {
           display: flex;
@@ -425,7 +484,7 @@
           height: calc(100% - 160px);
           border: 1px solid #ccc;
           box-sizing: border-box;
-          background: #FFFFFF;
+          background: @bgc;
           .content-point-left {
             flex: 1;
           }
@@ -436,6 +495,7 @@
         margin-left: 10px;
         .content-media {
           height: 100%;
+          background: @bgc;
           border: 1px solid #ccc;
           box-sizing: border-box;
         }

+ 71 - 13
src/views/ledger/spacelist/spaceDetail/index.vue

@@ -51,9 +51,9 @@
           <div class="content-media">
             <el-scrollbar style="height:100%;">
               <div >
-                <exhibitionImage :exhibitionImage="exhibitionImage"/>
-                <exhibitionVideo :exhibitionVideo="exhibitionVideo"/>
-                <exhibitionFile :exhibitionFile="exhibitionFile"/>
+                <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
+                <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
+                <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
               </div>
             </el-scrollbar>
           </div>
@@ -145,7 +145,10 @@
         exhibitionVideo: {
           title: '视频',
           list: {}
-        }
+        },
+        isShowImage: true,
+        isShowVideo: true,
+        isShowFile: true,
       }
   },
   computed: {
@@ -214,6 +217,7 @@
         obj = tools.flattenKeys(obj);
         this.instance = obj;
         this.handleRadios(1)
+        this.handleEnclosure() //处理图片视频文件信息
         this.pointData.forEach(item => {
           if (item.InputMode == "L" || item.InputMode == "L1" || item.InputMode == "L2" || item.InputMode == "M") {
             let cur = tools.dataForKey(this.exampleData, item.Path);
@@ -254,6 +258,22 @@
         }
       })
     },
+    handleEnclosure() {
+      //图片文件处理,脱离radio控制
+      let isList = this.pointData
+      let isArr = []
+      isList.map(j => {
+        if (this.instance.hasOwnProperty(j.Path)) {
+          return {
+            ...j,
+            value: this.instance[j.Path]
+          }
+        }
+      })
+      isArr = isList.filter(k => k.value)
+      this.handlePicList(isArr)
+      this.handleFileList(isArr)
+    },
     handleRadios(val) { //判断radio的值显示关键信息,基本信息,图片,文件
       let arr = []
       //关键信息点
@@ -269,9 +289,9 @@
       if (val == 1) { //需采集信息
         arr = this.pointData.filter(i => i.Visible)
         //  图片和的处理
-        this.handlePicList(arr)
-        //  文件处理
-        this.handleFileList(arr)
+        // this.handlePicList(arr)
+        // //  文件处理
+        // this.handleFileList(arr)
 
       } else if (val == 2) { //有值信息点
         let list = this.pointData
@@ -283,13 +303,13 @@
             }
           }
           arr = list.filter(k => k.value)
-          this.handlePicList(arr)
-          this.handleFileList(arr)
+          // this.handlePicList(arr)
+          // this.handleFileList(arr)
         })
       } else { //全部信息点
         arr = this.pointData
-        this.handlePicList(arr)
-        this.handleFileList(arr)
+        // this.handlePicList(arr)
+        // this.handleFileList(arr)
       }
       this.displayData(arr)
     },
@@ -322,6 +342,23 @@
       })
       //展示图片
       this.exhibitionImage.list = picObject
+      let isArray = [] //获取图片数组
+      for (let i in picObject) {
+        if (Array.isArray(picObject[i])) {
+          let list = picObject[i]
+          list.forEach(i => {
+            if (i.PicList) {
+              isArray.push(...i.PicList)
+            }
+          })
+        }
+      }
+      let video = isArray.filter(i => i.Type != 'image' &&i.type != 'image' )
+      this.exhibitionVideo.list = video
+      //判断是否显示图片组件
+      this.isShowImage = isArray.length ? true : false
+      //判断是否显示video组件
+      this.isShowVideo = video.length ? true : false
     },
     handleFileList(arr) {
       let picObject = {}
@@ -351,13 +388,34 @@
       })
       //展示文件
       this.exhibitionFile.list = picObject
+      let isArray = [] //获取文件数组
+      for (let i in picObject) {
+        if (Array.isArray(picObject[i])) {
+          let list = picObject[i]
+          list.forEach(i => {
+            if (i.fileList) {
+              isArray.push(...i.fileList)
+            }
+          })
+        }
+      }
+      //判断是否显示文件组件
+      this.isShowFile = isArray.length ? true : false
     },
     changeRadio(val) { //1,需采集,2,有值,3,全部
       this.handleRadios(val)
       this.currentRadio = val
     },
     formatDate(str) {
-      return str ? str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2) :'--'
+      if(str) {
+        if(str.includes('-')) {
+          return str
+        }else {
+          return  str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2)
+        }
+      } else {
+        return '--'
+      }
     },
     displayData(arr) {//对数据进行处理传给组件展示
       const result = {}
@@ -525,7 +583,7 @@
             flex: 1;
           }
           .content-point-right {
-            width: 350px;
+            width: 300px;
             border-left: 1px solid #ccc;
           }
         }

+ 69 - 11
src/views/ledger/system/systemDetail/index.vue

@@ -42,9 +42,9 @@
           <div class="content-media">
             <el-scrollbar style="height:100%;">
               <div>
-                <exhibitionImage :exhibitionImage="exhibitionImage"/>
-                <exhibitionVideo :exhibitionVideo="exhibitionVideo"/>
-                <exhibitionFile :exhibitionFile="exhibitionFile"/>
+                <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
+                <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
+                <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
               </div>
             </el-scrollbar>
           </div>
@@ -144,6 +144,9 @@
           list: {}
         },
         instance: {},//实例信息处理
+        isShowImage: true,
+        isShowVideo: true,
+        isShowFile: true,
       }
   },
   computed: {
@@ -237,19 +240,36 @@
         obj = tools.flattenKeys(obj);
         this.instance = obj;
         this.handleRadios(1)
+        this.handleEnclosure() //处理图片视频文件信息
       })
     },
     deepCopy(obj) {
       return JSON.parse(JSON.stringify(obj))
     },
+    handleEnclosure() {
+      //图片文件处理,脱离radio控制
+      let isList = this.pointData
+      let isArr = []
+      isList.map(j => {
+        if (this.instance.hasOwnProperty(j.Path)) {
+          return {
+            ...j,
+            value: this.instance[j.Path]
+          }
+        }
+      })
+      isArr = isList.filter(k => k.value)
+      this.handlePicList(isArr)
+      this.handleFileList(isArr)
+    },
     handleRadios(val) { //判断radio的值显示关键信息,基本信息,图片,文件
       let arr = []
       if (val == 1) { //需采集信息
         arr = this.pointData.filter(i => i.Visible)
         //  图片和的处理
-        this.handlePicList(arr)
-        //  文件处理
-        this.handleFileList(arr)
+        // this.handlePicList(arr)
+        // //  文件处理
+        // this.handleFileList(arr)
 
       } else if (val == 2) { //有值信息点
         let list = this.pointData
@@ -261,13 +281,13 @@
             }
           }
           arr = list.filter(k => k.value)
-          this.handlePicList(arr)
-          this.handleFileList(arr)
+          // this.handlePicList(arr)
+          // this.handleFileList(arr)
         })
       } else { //全部信息点
         arr = this.pointData
-        this.handlePicList(arr)
-        this.handleFileList(arr)
+        // this.handlePicList(arr)
+        // this.handleFileList(arr)
       }
       this.displayData(arr)
     },
@@ -300,6 +320,23 @@
       })
       //展示图片
       this.exhibitionImage.list = picObject
+      let isArray = [] //获取图片数组
+      for (let i in picObject) {
+        if (Array.isArray(picObject[i])) {
+          let list = picObject[i]
+          list.forEach(i => {
+            if (i.PicList) {
+              isArray.push(...i.PicList)
+            }
+          })
+        }
+      }
+      let video = isArray.filter(i => i.Type != 'image' &&i.type != 'image' )
+      this.exhibitionVideo.list = video
+      //判断是否显示图片组件
+      this.isShowImage = isArray.length ? true : false
+      //判断是否显示video组件
+      this.isShowVideo = video.length ? true : false
     },
     handleFileList(arr) {
       let picObject = {}
@@ -329,13 +366,34 @@
       })
       //展示文件
       this.exhibitionFile.list = picObject
+      let isArray = [] //获取文件数组
+      for (let i in picObject) {
+        if (Array.isArray(picObject[i])) {
+          let list = picObject[i]
+          list.forEach(i => {
+            if (i.fileList) {
+              isArray.push(...i.fileList)
+            }
+          })
+        }
+      }
+      //判断是否显示文件组件
+      this.isShowFile = isArray.length ? true : false
     },
     changeRadio(val) { //1,需采集,2,有值,3,全部
       this.handleRadios(val)
       this.currentRadio = val
     },
     formatDate(str) {
-      return str ? str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2) :'--'
+      if(str) {
+        if(str.includes('-')) {
+          return str
+        }else {
+          return  str.substr(0,4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)+" "+str.substr(8,2) + ":" +str.substr(10,2) + ":"+str.substr(12,2)
+        }
+      } else {
+        return '--'
+      }
     },
     displayData(arr) {//对数据进行处理传给组件展示
       const result = {}

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

@@ -108,7 +108,7 @@
     <!-- 添加贯通关系弹窗 -->
     <addConnectivity @refresh="refresh" ref="addConnectivity"/>
     <!-- 查看图片弹窗 -->
-    <checkGraphy :alreadyRelatedModel='alreadyRelatedModel' @refresh="refresh" ref="checkGraphy"></checkGraphy>
+    <checkGraphy :alreadyRelatedModel='alreadyRelatedModel' @refresh="bindRefresh" ref="checkGraphy"></checkGraphy>
   </div>
 
 </template>
@@ -165,6 +165,7 @@
         alreadyRelatedModel: [],
         // currentType: 'add'
         buildMessage: {},
+        selectedBuildIndex: 0
       };
     },
     computed: {
@@ -187,12 +188,13 @@
         buildingQueryAndCount(bdParam, res => {
           this.buildList = res.Content;
           if (this.buildList.length) {
-            this.changeBuild(0);
+            this.changeBuild(this.selectedBuildIndex);
           }
         });
       },
       //change build
       changeBuild(index) {
+        this.selectedBuildIndex = index;
         this.buildList.map(item => {
           item.active = false;
           return item;
@@ -216,7 +218,7 @@
           data: {
             Orders: "sort asc,InfoPointCode asc",
             PageNumber: 1,
-            PageSize: 50
+            PageSize: 1000
           },
           type: 'Building'
         };
@@ -325,6 +327,10 @@
           }).filter(t => t);
         });
       },
+      // 绑定图以后刷新
+      bindRefresh() {
+        this.init();
+      },
       // 创建楼层成功-修改关系成功
       refresh() {
         this.getFloorTableData();
@@ -336,7 +342,7 @@
           manageDeleteFloor(delParam, res => {
             this.$message.success("删除成功");
             this.delDialogVis = false;
-            this.getFloorTableData();
+            this.init();
           });
         } else {
           //todo

+ 4 - 2
src/views/ready/buildfloor/repetitionGraphy.vue

@@ -4,7 +4,7 @@
     <div class="buttons">
       <el-button icon="el-icon-back" size="mini" @click="backRouter"></el-button>
       <el-button v-if="!isEdit" size="mini" @click="changeGraphy">替换平面图</el-button>
-      <el-button v-if="!isEdit" size="mini" @click="editGraphy">编辑平面图</el-button>
+      <el-button v-if="sign&&!isEdit" size="mini" @click="editGraphy">编辑平面图</el-button>
       <el-button v-if="isEdit" size="mini" @click="cancel">取消</el-button>
       <el-button v-if="isEdit" size="mini" @click="confirm" type="primary">确认</el-button>
       <span style="float:right;" v-if="file.FolderName">当前对应的模型文件:{{file.FolderName}} - {{file.FloorName}}</span>
@@ -32,7 +32,8 @@ export default {
       modelId: "", // 
       isEdit: false, // 是否编辑模式
       file: {},
-      alreadyRelatedModel: []
+      alreadyRelatedModel: [],
+      sign: false
     };
   },
   created() {
@@ -118,6 +119,7 @@ export default {
       floorQueryAndSign(floorParam, res => {
         this.alreadyRelatedModel = res.Content.map(t => {
           if (t.FloorID != this.FloorID) return t.ModelId
+          this.sign = t.Sign > 0
         }).filter(t => t);
       });
     },

+ 2 - 1
src/views/ready/collectsetting/index.vue

@@ -697,8 +697,9 @@
           let param = {
             data: {
               Orders: "sort asc,InfoPointCode asc",
+              Distinct: true,
               PageNumber: 1,
-              PageSize: 500
+              PageSize: 1000
             },
             type: code
           };