Browse Source

Merge branch 'dev'

zhangyu 5 years ago
parent
commit
21d6d79022
37 changed files with 1859 additions and 503 deletions
  1. 7 7
      src/components/business_space/lib/uploadImgsName.vue
  2. 1 1
      src/components/business_space/newGraphy/graphy.vue
  3. 5 4
      src/components/data_admin/zoneInput.vue
  4. 4 4
      src/components/ledger/details/detail/exhibitionBaseInformation.vue
  5. 41 11
      src/components/ledger/details/detail/exhibitionCrux.vue
  6. 1 1
      src/components/ledger/details/detail/exhibitionEnergy.vue
  7. 1 1
      src/components/ledger/details/detail/exhibitionMaintain.vue
  8. 1 1
      src/components/ledger/details/detail/lookFile.vue
  9. 1 1
      src/components/ledger/details/detail/lookImage.vue
  10. 2 2
      src/components/ledger/details/detail/lookVideo.vue
  11. 1 1
      src/components/ledger/details/detail/selectRadio.vue
  12. 6 2
      src/components/point/dynamicdata/buildRules.vue
  13. 6 2
      src/components/point/dynamicdata/equipRules.vue
  14. 6 2
      src/components/point/dynamicdata/floorRules.vue
  15. 6 2
      src/components/point/dynamicdata/partsRules.vue
  16. 6 2
      src/components/point/dynamicdata/projectRules.vue
  17. 6 2
      src/components/point/dynamicdata/spaceRules.vue
  18. 6 2
      src/components/point/dynamicdata/systemRules.vue
  19. 6 2
      src/components/point/dynamicdata/tenantRules.vue
  20. 77 78
      src/components/ready/buildfloor/addBuild.vue
  21. 84 23
      src/components/ready/buildfloor/formItems.vue
  22. 3 3
      src/components/relation/overview/CardList.vue
  23. 8 8
      src/router/system.js
  24. 20 0
      src/views/business_space/dataUtil/topology.vue
  25. 1 0
      src/views/ledger/cenotelist/cenoteDetail/index.vue
  26. 133 104
      src/views/ledger/facility/details/index.vue
  27. 597 0
      src/views/ledger/facility/details/index_old.vue
  28. 103 78
      src/views/ledger/property/details/index.vue
  29. 516 0
      src/views/ledger/property/details/index_old.vue
  30. 24 10
      src/views/ledger/report/index.vue
  31. 72 70
      src/views/ledger/spacelist/spaceDetail/index.vue
  32. 62 62
      src/views/ledger/system/systemDetail/index.vue
  33. 1 1
      src/views/model/report/index.vue
  34. 9 5
      src/views/point/report/index.vue
  35. 4 0
      src/views/ready/buildfloor/addFloor/index.vue
  36. 22 5
      src/views/ready/buildfloor/index.vue
  37. 10 6
      src/views/relation/data/index.vue

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

@@ -346,17 +346,17 @@
   overflow: hidden;
 
   .avatar-uploader {
-    height: 180px;
-    width: 180px;
-    overflow: hidden;
+    /*height: 180px;*/
+    /*width: 180px;*/
+    /*overflow: hidden;*/
 
     .el-upload {
-      width: 180px;
-      height: 180px;
+      /*width: 180px;*/
+      /*height: 180px;*/
 
       .el-upload-dragger {
-        width: 180px;
-        height: 180px;
+        width: 180px !important;
+        height: 180px !important;
         .el-icon-plus {
           display: block;
           width: 20px;

+ 1 - 1
src/components/business_space/newGraphy/graphy.vue

@@ -92,7 +92,7 @@
     <!-- 创建新的业务空间 -->
     <createBSP ref="createBSP" @createRoom="createRoom"></createBSP>
     <!-- 批量创建选择弹窗 -->
-    <el-dialog title="提示" :visible.sync="groupCreateDialogVis" width="30%">
+    <el-dialog title="提示" :visible.sync="groupCreateDialogVis" width="30%" :close-on-click-modal="false">
       <div id="autoRelate">
         <p>批量创建面积大于此值的默认空间为业务空间:</p>
         <div style="padding:10px 20px;margin:0 0 10px 0;">

+ 5 - 4
src/components/data_admin/zoneInput.vue

@@ -12,8 +12,8 @@
             <el-option v-for="(soption,skey) in item.options" :key="skey" :label="soption.Name" :value="soption.Code">
             </el-option>
           </el-select>
-          <el-cascader v-model="item.inputValue" v-else-if="item.InputMode == 'D1L'" placeholder="请选择"
-            :props="item.props" :options="item.options" filterable :show-all-levels="false"></el-cascader>
+          <el-cascader v-model="item.inputValue" v-else-if="item.InputMode == 'D1L'" placeholder="请在台账中维护该类型信息点"
+            :props="item.props" :options="item.options" filterable clearable disabled :show-all-levels="false"></el-cascader>
           <el-input v-model="item.inputValue" v-else></el-input>
         </el-form-item>
       </div>
@@ -75,7 +75,8 @@ export default {
             item.props = {
               value: 'Code',
               label: 'Name',
-              children: 'Content'
+              children: 'Content',
+              checkStrictly: true
             }
           }
           item.options = options;
@@ -133,4 +134,4 @@ export default {
     width: 220px;
   }
 }
-</style>
+</style>

+ 4 - 4
src/components/ledger/details/detail/exhibitionBaseInformation.vue

@@ -86,7 +86,6 @@
     methods: {
       downloadFile(key) {
         window.open("/image-service/common/file_get/" + key + "?systemId=dataPlatform")
-
       },
       handleCopy(data) {
         let oInput = document.createElement('input')
@@ -98,8 +97,8 @@
         oInput.remove()
       },
       handleName(infoPoint, val) {
-        let text = `${infoPoint}:${val}`
-        return text.length > 22 ? val.substring(0, 22-`${infoPoint}:`.length) + '...' : val
+        let text = `${infoPoint}:${val}`;
+        return text.length > 22 ? val.substring(0, 22-`${infoPoint}:`.length) + '...' : val;
       }
     }
   }
@@ -114,7 +113,7 @@
       .base {
         margin: 10px;
         font-weight: 600;
-        text-indent: 10px;
+        /*text-indent: 10px;*/
         border-bottom: 1px dashed #eee;
       }
 
@@ -133,6 +132,7 @@
       width: 335px;
       display: inline-block;
       margin-left: 20px;
+      vertical-align: text-top;
     }
   }
 </style>

+ 41 - 11
src/components/ledger/details/detail/exhibitionCrux.vue

@@ -9,7 +9,7 @@
         <div class="crux-list" v-for="(item,index) in exhibitionCrux.cruxArray" :key="index">{{item.InfoPointName}}:
 
         <el-popover
-          v-if="item.value && item.value.length && item.value.length>12 && item.Path=='EquipQRCode'"
+          v-if="item.Path == 'EquipQRCode' || item.Path == 'RoomQRCode' || item.Path == 'ShaftQRCode'"
           placement="top"
           width="360"
           trigger="hover">
@@ -26,14 +26,38 @@
               <span>{{item.value}}</span>
             </div>
           </div>
-
           <div style="text-align: center; margin: 0">
             <el-button type="text" size="mini" @click="handleCopy(item.value)">复制</el-button>
           </div>
           <el-button slot="reference" type="text">{{item.value ? '有' :'-'}}</el-button>
         </el-popover>
         <el-popover
-          v-else-if="item.value && item.value.length && item.value.length>12"
+          v-else-if="Array.isArray(item.value) && item.InputMode== 'F2'"
+          placement="right"
+          width="250"
+          trigger="hover">
+          <p style="border-bottom: 1px solid #eee;padding:2px 0 4px 0;'">{{item.InfoPointName}}</p>
+          <div v-for="(pic,index) in item.value">
+            <div>图纸名称:{{pic.Name}}
+                <el-button style="" type="text" size="mini" @click="downloadFile(pic.Key)">下载</el-button>
+            </div>
+          </div>
+          <el-button slot="reference" type="text">{{item.value? '有':'-'}}</el-button>
+        </el-popover>
+        <el-popover
+          v-else-if="Array.isArray(item.value) && item.InputMode=='N2'"
+          placement="right"
+          width="600"
+          trigger="hover">
+          <p style="border-bottom: 1px solid #eee;padding:2px 0 4px 0;'">{{item.InfoPointName}}</p>
+          <p style="height: 300px;overflow: auto">{{item.value}}</p>
+          <div style="text-align: center; margin: 0">
+            <el-button type="text" size="mini" @click="handleCopy(item.value)">复制</el-button>
+          </div>
+          <el-button slot="reference" type="text">{{item.value ? '有' :'-'}}</el-button>
+        </el-popover>
+        <el-popover
+          v-else-if="item.value && item.value.length && `${item.InfoPointName}:${item.value}`.length>22"
           placement="top"
           width="160"
           trigger="hover">
@@ -42,12 +66,12 @@
           <div style="text-align: center; margin: 0">
             <el-button type="text" size="mini" @click="handleCopy(item.value)">复制</el-button>
           </div>
-          <el-button slot="reference" type="text">{{handleName(item.value)}}</el-button>
+          <el-button slot="reference" type="text">{{handleName(item.InfoPointName, item.value)}}</el-button>
         </el-popover>
         <span v-else>{{item.value}}</span>
         </div>
       </div>
-      <div style="text-align: center" v-else>暂无数据</div>
+      <!-- <div style="text-align: center" v-else>暂无数据</div> -->
     </div>
     <cruxDialog
       ref="setting"
@@ -72,6 +96,9 @@
       }
     },
     methods: {
+      downloadFile(key) {
+        window.open("/image-service/common/file_get/" + key + "?systemId=dataPlatform")
+      },
       setting() {
         this.$refs.setting.dialogOpen()
       },
@@ -87,8 +114,9 @@
         this.$message.success('复制成功')
         oInput.remove()
       },
-      handleName(val) {
-        return val.length > 10 ? val.substring(0, 10) + '...' : val
+      handleName(infoPoint, val) {
+        let text = `${infoPoint}:${val}`;
+        return text.length > 22 ? val.substring(0, 22-`${infoPoint}:`.length) + '...' : val;
       }
     }
   }
@@ -96,15 +124,16 @@
 
 <style lang="less" scoped>
   .exhibition-crux {
+    padding: 10px 0;
     /deep/ .el-button--text {
       color: #555 !important;
       font-size: 14px;
     }
     .title {
       /*border-left: 8px solid black;*/
-      margin: 10px 40px 0 10px;
+      margin: 0 20px 0 10px;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
       display: block;
       overflow: hidden;
 
@@ -115,8 +144,9 @@
     }
       .crux-list {
         display: inline-block;
-        width: 25%;
-        margin-left: 28px;
+        width: 335px;
+        margin-left: 20px;
+        vertical-align: text-top;
       }
   }
 </style>

+ 1 - 1
src/components/ledger/details/detail/exhibitionEnergy.vue

@@ -13,7 +13,7 @@
             </div>
           </div>
         </div>
-        <div v-else style="text-align: center;margin-top: 200px">暂无数据</div>
+        <!-- <div v-else style="text-align: center;margin-top: 200px">暂无数据</div> -->
       </section>
     </div>
   </div>

+ 1 - 1
src/components/ledger/details/detail/exhibitionMaintain.vue

@@ -20,7 +20,7 @@
     .title {
       margin-left: 10px;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
     }
     .disable{
       color:#ccc;

+ 1 - 1
src/components/ledger/details/detail/lookFile.vue

@@ -143,7 +143,7 @@
       /*border-left: 8px solid black;*/
       margin: 10px;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
       display: block;
       overflow: hidden;
     }

+ 1 - 1
src/components/ledger/details/detail/lookImage.vue

@@ -238,7 +238,7 @@
       /*border-left: 8px solid black;*/
       margin: 10px 10px 10px 0;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
       display: block;
       overflow: hidden;
     }

+ 2 - 2
src/components/ledger/details/detail/lookVideo.vue

@@ -214,10 +214,10 @@
     overflow: hidden;
 
     .title {
-      border-left: 8px solid black;
+      /*border-left: 8px solid black;*/
       margin: 10px;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
       display: block;
       overflow: hidden;
     }

+ 1 - 1
src/components/ledger/details/detail/selectRadio.vue

@@ -41,7 +41,7 @@
       /*border-left: 8px solid black;*/
       margin: 10px 40px 10px 10px;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
       display: inline-block;
 
     }

+ 6 - 2
src/components/point/dynamicdata/buildRules.vue

@@ -40,8 +40,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

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

@@ -40,8 +40,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="font-size:13px;margin-left: -5px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 6 - 2
src/components/point/dynamicdata/floorRules.vue

@@ -40,8 +40,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 6 - 2
src/components/point/dynamicdata/partsRules.vue

@@ -39,8 +39,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 6 - 2
src/components/point/dynamicdata/projectRules.vue

@@ -39,8 +39,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 6 - 2
src/components/point/dynamicdata/spaceRules.vue

@@ -39,8 +39,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 6 - 2
src/components/point/dynamicdata/systemRules.vue

@@ -39,8 +39,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 6 - 2
src/components/point/dynamicdata/tenantRules.vue

@@ -39,8 +39,12 @@
       </el-row>
     </div>
     <el-row>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">点位表中出现的所有{{typeName}}</el-col>
-      <el-col :span="12" style="padding-left:10px;font-size:13px;border-left:2px solid #000;">对应物理世界中的{{typeName}}实例</el-col>
+      <el-col :span="12" style="margin-left:-5px;font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        点位表中出现的所有{{typeName}}</el-col>
+      <el-col :span="12" style="font-size:13px;">
+        <span class="iconfont icon-juxing"></span>
+        对应物理世界中的{{typeName}}实例</el-col>
     </el-row>
     <!-- 列表区域 -->
     <div class="table-area">

+ 77 - 78
src/components/ready/buildfloor/addBuild.vue

@@ -20,103 +20,102 @@
           :key="item.InfoPointCode"
           v-for="item in val"
           :class="[{'upload-file':item.InputMode == 'F2' ||  item.Path === 'BuildingInfo.BuildingType.Pic'}]"
-          style="width: 50%;display: inline-block"
+          style="width: 50%;display: inline-block">
 
-        >
           <el-form-item
             :class="{FloorTypeSelect:item.InputMode == 'D1'||item.Unit}"
             :label="item.InfoPointName"
             :prop="item.InfoPointCode"
-            v-if="all||item.Visible"
-
-          >
+            v-if="all||item.Visible">
 
             <el-input
-              v-model="form[item.Path]"
               v-if="item.InputMode == 'B1' || item.InputMode == 'B2'"
-            />
-
+              v-model="form[item.Path]"/>
 
-            <el-input type="number" v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'"
-                      v-model="form[item.Path]">
+            <el-input 
+              v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'"
+              type="number"
+              v-model="form[item.Path]">
               <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
             </el-input>
+
             <el-select
-            placeholder="请选择"
-            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>
-          </el-select>
-        <el-select
-          placeholder="请选择"
-          v-else-if="item.InputMode == 'D2'"
-          v-model="form[item.Path]"
-          multiple
-          collapse-tags
-        >
-
-            <el-option :key="op.Name" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
-          </el-select>
-           <el-date-picker
-             v-model="form[item.Path]"
-             type="daterange"
-             v-else-if="item.InputMode == 'C6'"
-             value-format="yyyy-MM-dd"
-             range-separator="至"
-             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-input
-            v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'"
-            v-model="form[item.Path]">
-            <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
-          </el-input>
-          <el-date-picker
-            placeholder="选择日期"
-            value-format="yyyy-MM-dd"
-            type="date" v-else-if="item.InputMode == 'C5'" v-model="form[item.Path]">
-          </el-date-picker>
-
-          <uploadImgs
-            :readOnly="false"
-            v-else-if="item.InputMode == 'F2'&& item.Path === 'BuildingInfo.BuildingType.Pic'"
-            v-model="form[item.Path]"
-            :keysArr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[]"
-            :context-key="item.Path"
-            :isShow="1"
-            @change="changeItem"
-          />
-
-             <upload-files
-               v-model="form[item.Path]"
-               v-else-if="item.InputMode == 'F2'"
-               :readOnly="false"
-               :isShow="1"
-               :keys-arr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[] "
-               :show-file-list="false"
-               :context-key="item.Path"
-               @change="changeItem"
-             />
-            <el-input disabled title="暂不支持" v-else v-model="form[item.Path]"/>
+              v-else-if="item.InputMode == 'D1' || item.InputMode == 'E2'"
+              placeholder="请选择"
+              v-model="form[item.Path]">
+              <el-option :key="op.Name" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
+            </el-select>
+
+            <el-select
+              v-else-if="item.InputMode == 'D2'"
+              placeholder="请选择"
+              v-model="form[item.Path]"
+              multiple
+              collapse-tags>
+              <el-option :key="op.Name" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
+            </el-select>
+
+            <el-date-picker
+              v-else-if="item.InputMode == 'C6'"
+              v-model="form[item.Path]"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"/>
+
+            <el-cascader
+              v-else-if="item.InputMode == 'D1L'"
+              placeholder="请选择"
+              :options="item.options"
+              v-model="form[item.Path]"
+              :props="item.props"
+              filterable
+              :show-all-levels="false"
+              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]">
+              <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
+            </el-input>
+
+            <el-date-picker
+              v-else-if="item.InputMode == 'C5'" v-model="form[item.Path]"
+              placeholder="选择日期"
+              value-format="yyyy-MM-dd"
+              type="date">
+            </el-date-picker>
+
+            <uploadImgs
+              v-else-if="item.InputMode == 'F2'&& item.Path === 'BuildingInfo.BuildingType.Pic'"
+              :readOnly="false"
+              v-model="form[item.Path]"
+              :keysArr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[]"
+              :context-key="item.Path"
+              :isShow="1"
+              @change="changeItem"/>
+
+            <upload-files
+              v-else-if="item.InputMode == 'F2'"
+              v-model="form[item.Path]"
+              :readOnly="false"
+              :isShow="1"
+              :keys-arr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[] "
+              :show-file-list="false"
+              :context-key="item.Path"
+              @change="changeItem"/>
+
+            <el-input disabled title="暂不支持" v-else v-model="form[item.Path]"/>
+            
           </el-form-item>
         </div>
       </template>
     </el-form>
     <span
       class="dialog-footer"
-      slot="footer"
-    >
+      slot="footer">
     <el-button @click="buildDialogVis = false">取 消</el-button>
     <el-button @click="submitForm('ruleForm')" type="primary">确 定</el-button>
   </span>

+ 84 - 23
src/components/ready/buildfloor/formItems.vue

@@ -6,31 +6,74 @@
           :label="item.InfoPointName"
           :prop="item.InfoPointCode"
           v-if="all||item.Visible"
-          :class="{FloorTypeSelect:item.InputMode == 'D1'||item.Unit}"
-        >
-          <span v-if="item.InputMode == 'B1'">
-            <el-input
-              v-model="form[item.Path]"
-              :placeholder="(item.InputMode === 'B1' && item.Path==='FloorLocalID') ? '填写示例:F1、B1?':'' "
+          :class="{FloorTypeSelect:item.InputMode == 'D1'||item.Unit}">
+
+          <!--BIM模型中坐标-->
+          <el-input
+            v-model="form[item.Path]"
+            v-if="item.InfoPointCode == 'BIMLocation'"
+            disabled/>
 
-            />
-              <div
-                v-if="item.InputMode === 'B1' && item.Path==='FloorLocalID' && isShowTitle"
-                style="color: gray;font-size: 12px"
-              >用于楼层平面图切换</div>
+          <!--二维码相关-->
+          <span v-else-if="item.InfoPointCode == 'DefaultQRCode' ">
+            <el-input v-if="!form[item.Path]" v-model="form[item.Path]" disabled/>
+            <el-popover v-else placement="right" width="210" trigger="click">
+              <div style="overflow:hidden;">
+                <img
+                  style="width:200px;height:200px;"
+                  :src="'/image-service/common/file_get/'+ form[item.Path] +'?systemId=dataPlatform'"
+                  alt="二维码">
+              </div>
+              <el-button slot="reference" type="text">点击查看</el-button>
+            </el-popover>
           </span>
+
+          <span v-else-if="item.InfoPointCode == 'QRCodePic' ">
+            <el-input v-if="!form[item.Path]" v-model="form[item.Path]" disabled/>
+            <el-popover v-else placement="right" width="210" trigger="click">
+              <div style="overflow:hidden;">
+                <img
+                  style="width:200px;height:200px;"
+                  :src="'/image-service/common/file_get/'+ form[item.Path] +'?systemId=dataPlatform'"
+                  alt="二维码">
+              </div>
+              <el-button slot="reference" type="text">点击查看</el-button>
+            </el-popover>
+          </span>
+
+          <!--/二维码相关-->
+          <span v-else-if="item.InputMode == 'B1'">
+            <el-input v-model="form[item.Path]" :placeholder="(item.InputMode === 'B1' && item.Path==='FloorLocalID') ? '填写示例:F1、B1?':'' "/>
+              <div v-if="item.InputMode === 'B1' && item.Path==='FloorLocalID' && isShowTitle" style="color: gray;font-size: 12px" >
+                用于楼层平面图切换
+              </div>
+          </span>
+
           <el-input v-model="form[item.Path]" v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'" type="number">
             <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
           </el-input>
+
           <el-select v-model="form[item.Path]" placeholder="请选择" v-else-if="item.InputMode == 'D1'">
             <el-option v-for="op in item.options" :key="op.Code" :label="op.Name" :value="op.Code"></el-option>
           </el-select>
-          <el-input v-model="form[item.Path]"
-                    v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'">
+
+          <el-cascader
+              v-else-if="item.InputMode == 'D1L'"
+              placeholder="请选择"
+              :options="item.options"
+              v-model="form[item.Path]"
+              :props="item.props"
+              filterable
+              :show-all-levels="false"
+              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]">
             <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
           </el-input>
-          <el-input v-model="form[item.Path]" v-else disabled title="暂不支持"></el-input>
 
+          <el-input v-model="form[item.Path]" v-else disabled title="暂不支持"></el-input>
+<!--                    <div>{{item.InfoPointCode}}</div>-->
         </el-form-item>
       </div>
     </el-form>
@@ -39,7 +82,6 @@
 <script>
   import {getDataDictionary} from "@/api/scan/request";
 
-  //  v-for="item in InforsList" :key="item.InfoPointCode"
   export default {
     props: {
       type: {
@@ -81,25 +123,44 @@
     }
     ,
     methods: {
+
       getInforsPoint() {
         let params = {
           data: {
             Orders: "sort asc,InfoPointCode asc",
             PageNumber: 1,
-            PageSize: 50
+            PageSize: 1000
           },
           type: this.type
         };
         getDataDictionary(params, res => {
-          this.InforsList = res.Content.map(item => {
-            if (item.InputMode === 'D1') {
+          let arr = res.Content.map(item => {
+            if ((item.InputMode === 'D1' || item.InputMode === 'D2' || item.InputMode === 'E2' || item.InputMode === 'D1L') && item.DataSource) {
               item.options = JSON.parse(item.DataSource)
+              if (item.options[0] && item.options[0].Content) {
+                item.props = {
+                  value: 'Code',
+                  label: 'Name',
+                  children: 'Content',
+                  checkStrictly: true
+                }
+              }
+            }
+            switch (item.InfoPointCode) { //过滤掉待删除的
+              case 'FloorIdentity':
+              case 'RelatedSchedule':
+              case 'OutPeopleFlow':
+              case 'InPeopleFlow':
+              case 'ExsitPeopleNum':
+                break;
+              default:
+                return item
             }
-            return item
           })
+          //手动删除掉数据字典中不存在的字段,等待后台同步
+          this.InforsList = arr.filter(t => t && t.InfoPointCode != 'FloorQRCode')
         })
-      }
-      ,
+      },
       submitForm(call) {
         this.$refs.ruleForm.validate((valid) => {
           if (valid) {
@@ -108,8 +169,8 @@
             return false;
           }
         });
-      }
-      ,
+      },
+
     }
   };
 </script>

+ 3 - 3
src/components/relation/overview/CardList.vue

@@ -11,6 +11,7 @@
         v-for="(child,childIndex) in item.ChildGraphicTypeList"
       >
         <p class="relation-text">
+          <span class="iconfont icon-juxing"></span>
           <span @click="toDetail(child)" style="cursor:pointer;">
             {{child.GraphTypeName}}
             <i class="icon-zuzhiguanxi iconfont"/></span>
@@ -399,9 +400,8 @@
     .relation-text {
       overflow: hidden;
       margin-top: 10px;
-      color: @color-text;
-      border-left: 8px solid @color-text;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
+      margin-left: -3px;
       font-weight: @font-big;
 
       .pic-code {

+ 8 - 8
src/router/system.js

@@ -340,14 +340,14 @@ export default [{
             meta: {keepAlive: false, breadcrumbs: [{label: '台账管理', path: '/ledger/facility'}, {label: '设备台账'}]}
           },
           {
-            path: 'deviceDetails', 
-            name: 'deviceDetails', 
+            path: 'deviceDetails',
+            name: 'deviceDetails',
             component: deviceDetails,
             meta: {
-							keepAlive: false, 
+							keepAlive: false,
 							breadcrumbs: [
 								{label: '台账管理', path: '/ledger/facility'},
-								{label: '设备台账', path: '/ledger/facility'}, 
+								{label: '设备台账', path: '/ledger/facility'},
 								{label: '台账详情'}
 							]
             }
@@ -405,14 +405,14 @@ export default [{
                 meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility' }, { label: '资产台账' }] }
 			},
             {
-                path: 'propertyDetails', 
-                name: 'propertyDetails', 
+                path: 'propertyDetails',
+                name: 'propertyDetails',
                 component: propertyDetails,
                 meta: {
-                    keepAlive: false, 
+                    keepAlive: false,
                     breadcrumbs: [
                         {label: '台账管理', path: '/ledger/facility'},
-                        {label: '资产台账', path: '/ledger/property'}, 
+                        {label: '资产台账', path: '/ledger/property'},
                         {label: '资产详情'}
                     ]
                 }

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

@@ -221,6 +221,26 @@ export default {
     clickInputFile() {
       this.$refs.file.click()
     },
+    uuid(len, radix) {
+      var chars = '0123456789abcdef'.split('');
+      var uuid = [],
+        i;
+      radix = radix || chars.length;
+      if (len) {
+        for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
+      } else {
+        var r;
+        uuid[8] = uuid[13] = uuid[18] = uuid[23] = '';
+        uuid[14] = '4';
+        for (i = 0; i < 32; i++) {
+          if (!uuid[i]) {
+            r = 0 | Math.random() * 16;
+            uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
+          }
+        }
+      }
+      return uuid.join('');
+    }
   },
 }
 </script>

+ 1 - 0
src/views/ledger/cenotelist/cenoteDetail/index.vue

@@ -69,6 +69,7 @@
         ], //tab页
         activeTab: 'detail', //当前选中的tab
         pointData: [], //信息点数据
+        currentRadio: '1',//当前选中的select
         exampleData: {}, //实例数据
         exhibitionBaseInformation: {
           information: {}

+ 133 - 104
src/views/ledger/facility/details/index.vue

@@ -5,57 +5,65 @@
       <span :title="`${name} - ${code}`" class="details-title"><b>{{name}} - {{code}}</b></span>
     </div>
     <div class="content">
-      <div class="content-left">
-        <div class="content-keyPoint">
-          <exhibitionCrux :exhibitionCrux="exhibitionCrux" :type="type" @cruxSuccess="cruxSuccess"/>
-        </div>
-        <div class="content-showType">
-          <selectRadio
-            :selectRadio="selectRadio"
-            @changeRadio="changeRadio"
-          />
-        </div>
-        <div class="content-point">
-          <div class="content-point-left">
-            <el-scrollbar style="height:100%;">
-              <div>
+      <el-scrollbar style="height:100%;">
+        <div class="content-scrollbar">
+          <div class="content-left">
+            <div class="content-keyPoint">
+              <exhibitionCrux :exhibitionCrux="exhibitionCrux" :type="type" @cruxSuccess="cruxSuccess"/>
+            </div>
+            <div class="content-showType">
+              <selectRadio
+                :selectRadio="selectRadio"
+                @changeRadio="changeRadio"
+              />
+            </div>
+            <div class="content-point">
+              <div class="content-point-left">
                 <exhibitionBaseInformation :exhibitionBaseInformation="exhibitionBaseInformation"/>
               </div>
-            </el-scrollbar>
-          </div>
-          <div class="content-point-right">
-            <el-scrollbar style="height:100%;">
-              <div>
+              <div class="content-point-right">
                 <exhibitionEnergy :exhibitionEnergy="exhibitionEnergy"/>
               </div>
-            </el-scrollbar>
+            </div>
           </div>
-        </div>
-      </div>
-      <div class="content-right">
-        <div class="content-repair">
-          <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
-        </div>
-        <div class="content-media">
-          <el-scrollbar style="height:100%;">
-            <div>
+          <div class="content-right">
+            <div class="content-repair">
+              <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
+            </div>
+            <div class="content-media">
               <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
               <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
               <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
             </div>
-          </el-scrollbar>
+          </div>
         </div>
-      </div>
+      </el-scrollbar>
     </div>
     <div class="footer">
-      <el-select size="mini" style="float:right;margin:7px 30px 0 0" v-model="id" @change="handleChangeExample" placeholder="请选择">
-        <el-option
-          v-for="item in list"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value">
-        </el-option>
-      </el-select>
+      <el-button-group style="float:right;margin:8px 10px 0 0">
+        <el-button
+          :disabled="list.findIndex(item => item.value == id) == 0"
+          @click="handleClickPrev"
+          size="mini"
+          icon="el-icon-arrow-left">
+          上一页
+        </el-button>
+        <el-select size="mini" style="float:left;margin:0 10px;" v-model="id" @change="handleChangeExample" placeholder="请选择">
+          <el-option
+            v-for="item in list"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+        <el-button
+          :disabled="list.findIndex(item => item.value == id) == list.length-1"
+          @click="handleClickNext"
+          size="mini">
+          下一页
+          <i class="el-icon-arrow-right el-icon--right"></i>
+        </el-button>
+      </el-button-group>
     </div>
   </div>
 </template>
@@ -106,7 +114,7 @@
         list: [], //设备列表
         pointData: [], //信息点数据
         exampleData: {}, //实例数据
-        currentRadio: '',//当前选中的select
+        currentRadio: '1',//当前选中的select
         criterias: [], //动态参数
         selectRadio: {
           information: '设备信息点',
@@ -189,6 +197,10 @@
             resolve(res)
           })
         })
+        // 数据初始化
+        this.exhibitionEnergy.dynamic = [];
+        this.criterias = [];
+
         Promise.all([promise1, promise2]).then(values => {
           this.pointData = values[0].Content;
           this.exampleData = values[1].Content[0];
@@ -197,7 +209,7 @@
           let obj = this.deepCopy(values[1].Content[0]);
           obj = tools.flattenKeys(obj);
           this.instance = obj;
-          this.handleRadios(1)
+          this.handleRadios(this.currentRadio)
           this.handleEnclosure() //处理图片视频文件信息
           this.pointData.forEach(item => {
             if (item.InputMode == "L" || item.InputMode == "L1" || item.InputMode == "L2" || item.InputMode == "M") {
@@ -219,15 +231,17 @@
               criterias: this.criterias
             }
           }
+          let arr = []
           if (this.criterias.length) {
             BeatchQueryParam(params, res => {
-              res.Content && res.Content.map(child => {
+              arr = res.Content
+              arr && arr.length && arr.map(child => {
                 this.pointData.forEach(head => {
                   if (head.InfoPointCode == child.code) {
-                    console.log(head.FirstName,child,'==')
-                    this.exhibitionEnergy.firstName = head.FirstName
+                    // console.log(head.FirstName,child,'==')
+                    this.exhibitionEnergy.firstName = head.FirstName;
                     this.exhibitionEnergy.dynamic.push({
-                      FirstName:head.FirstName,
+                      FirstName: head.FirstName,
                       InfoPointCode: head.InfoPointCode,
                       InfoPointName: head.InfoPointName,
                       Path: head.Path,
@@ -239,10 +253,10 @@
                     })
                   }
                 })
-              });
+              })
             })
-          }
 
+          }
         })
       },
       handleEnclosure() {
@@ -251,10 +265,8 @@
         let isArr = []
         isList.map(j => {
           if (this.instance.hasOwnProperty(j.Path)) {
-            return {
-              ...j,
-              value: this.instance[j.Path]
-            }
+            j.value = this.instance[j.Path]
+            return j
           }
         })
         isArr = isList.filter(k => k.value)
@@ -355,11 +367,13 @@
         //处理数据格式
         arr.map(i => {
           if (i.InputMode == 'F2') {
+            console.log(i.Path, 'ppp')
             switch (i.Path) {
               case 'LedgerParam.InsuranceDoc.InsuranceFile':
               case 'LedgerParam.PhotoDoc.Archive':
               case 'LedgerParam.Siteinstall.CheckReport':
                 if (this.instance.hasOwnProperty(i.Path)) {
+                  debugger
                   i.fileList = this.instance[i.Path]
                 }
                 if (picObject[i.InfoPointName]) {
@@ -491,9 +505,21 @@
       },
       // 切换实例
       handleChangeExample() {
-        this.selectRadio.initRadio = '1'
+        this.selectRadio.initRadio = '1';
+        this.currentRadio = '1';
         this.getData();
-        this.exhibitionEnergy.dynamic = []
+      },
+      // 切换上一个实例
+      handleClickPrev() {
+        let index = this.list.findIndex(item => item.value == this.id);
+        this.id = this.list[index-1].value;
+        this.handleChangeExample();
+      },
+      // 切换下一个实例
+      handleClickNext() {
+        let index = this.list.findIndex(item => item.value == this.id);
+        this.id = this.list[index+1].value;
+        this.handleChangeExample();
       },
     },
     watch: {
@@ -522,73 +548,76 @@
     }
 
     .content {
-      display: flex;
-      flex-direction: row;
-      box-sizing: border-box;
-      height: calc(100% - 95px);
-      .content-left {
+      height: calc(100% - 77px);
+      .content-scrollbar {
         display: flex;
-        flex-direction: column;
-        flex: 1;
-        .content-keyPoint {
-          border: 1px solid #ccc;
-          box-sizing: border-box;
-          height: 100px;
-          margin-bottom: 10px;
-          overflow: hidden;
-          background: @bgc;
-        }
-        .content-showType {
-          height: 50px;
-          border: 1px solid #ccc;
-          border-bottom: none;
-          box-sizing: border-box;
-          background: @bgc;
-        }
-        .content-point {
+        height: 100%;
+        flex-direction: row;
+        box-sizing: border-box;
+        background-color: #f2f2f2;
+        .content-left {
           display: flex;
-          flex-direction: row;
-          height: calc(100% - 160px);
-          border: 1px solid #ccc;
+          flex-direction: column;
+          flex: 1;
           box-sizing: border-box;
-          background: @bgc;
-
-          .content-point-left {
-            flex: 1;
+          .content-keyPoint {
+            border: 1px solid #ccc;
+            box-sizing: border-box;
+            margin-bottom: 10px;
+            overflow: hidden;
+            background: @bgc;
+          }
+          .content-showType {
+            height: 50px;
+            border: 1px solid #ccc;
+            border-bottom: none;
+            box-sizing: border-box;
+            background: @bgc;
           }
+          .content-point {
+            display: flex;
+            flex-direction: row;
+            border: 1px solid #ccc;
+            box-sizing: border-box;
+            background: @bgc;
 
-          .content-point-right {
-            width: 300px;
-            border-left: 1px solid #ccc;
+            .content-point-left {
+              flex: 1;
+            }
+
+            .content-point-right {
+              width: 300px;
+              border-left: 1px solid #ccc;
+            }
           }
         }
-      }
-      .content-right {
-        width: 400px;
-        margin-left: 10px;
-        .content-repair {
-          height: 50px;
-          line-height: 50px;
-          margin-bottom: 10px;
-          border: 1px solid #ccc;
-          background: @bgc;
-          box-sizing: border-box;
-        }
-        .content-media {
-          height: calc(100% - 60px);
-          background: @bgc;
-          border: 1px solid #ccc;
+        .content-right {
+          width: 400px;
+          margin-left: 10px;
           box-sizing: border-box;
+          .content-repair {
+            height: 50px;
+            line-height: 50px;
+            margin-bottom: 10px;
+            border: 1px solid #ccc;
+            background: @bgc;
+            box-sizing: border-box;
+          }
+          .content-media {
+            box-sizing: border-box;
+          }
         }
       }
     }
 
     .footer {
-      margin-top: 5px;
+      position: fixed;
+      bottom: 0;
+      left: 235px;
+      width: calc(100% - 235px);
       height: 45px;
       background-color: #fff;
       box-sizing: border-box;
-      border: 1px solid #ccc;
     }
   }
 

+ 597 - 0
src/views/ledger/facility/details/index_old.vue

@@ -0,0 +1,597 @@
+<template>
+  <div class="tableDisplay">
+    <div class="header">
+      <el-button style="float:left;" size="small" type="default" icon="el-icon-back" @click="goBack"></el-button>
+      <span :title="`${name} - ${code}`" class="details-title"><b>{{name}} - {{code}}</b></span>
+    </div>
+    <div class="content">
+      <div class="content-left">
+        <div class="content-keyPoint">
+          <exhibitionCrux :exhibitionCrux="exhibitionCrux" :type="type" @cruxSuccess="cruxSuccess"/>
+        </div>
+        <div class="content-showType">
+          <selectRadio
+            :selectRadio="selectRadio"
+            @changeRadio="changeRadio"
+          />
+        </div>
+        <div class="content-point">
+          <div class="content-point-left">
+            <el-scrollbar style="height:100%;">
+              <div>
+                <exhibitionBaseInformation :exhibitionBaseInformation="exhibitionBaseInformation"/>
+              </div>
+            </el-scrollbar>
+          </div>
+          <div class="content-point-right">
+            <el-scrollbar style="height:100%;">
+              <div>
+                <exhibitionEnergy :exhibitionEnergy="exhibitionEnergy"/>
+              </div>
+            </el-scrollbar>
+          </div>
+        </div>
+      </div>
+      <div class="content-right">
+        <div class="content-repair">
+          <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
+        </div>
+        <div class="content-media">
+          <el-scrollbar style="height:100%;">
+            <div>
+              <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
+              <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
+              <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
+            </div>
+          </el-scrollbar>
+        </div>
+      </div>
+    </div>
+    <div class="footer">
+      <el-select size="mini" style="float:right;margin:7px 30px 0 0" v-model="id" @change="handleChangeExample" placeholder="请选择">
+        <el-option
+          v-for="item in list"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+    </div>
+  </div>
+</template>
+
+<script>
+  import exhibitionBaseInformation from "@/components/ledger/details/detail/exhibitionBaseInformation";
+  import exhibitionFile from "@/components/ledger/details/detail/exhibitionFile";
+  import exhibitionImage from "@/components/ledger/details/detail/exhibitionImage";
+  import exhibitionVideo from "@/components/ledger/details/detail/exhibitionVideo";
+  import exhibitionCrux from "@/components/ledger/details/detail/exhibitionCrux";
+  import exhibitionEnergy from "@/components/ledger/details/detail/exhibitionEnergy";
+  import exhibitionMaintain from "@/components/ledger/details/detail/exhibitionMaintain";
+  import selectRadio from "@/components/ledger/details/detail/selectRadio";
+  import tools from "@/utils/scan/tools"
+  import {BeatchQueryParam, getDataDictionary, queryEquip} from "@/api/scan/request";
+  import {mapGetters} from "vuex";
+
+  export default {
+    name: "deviceDetails",
+    components: {
+      exhibitionBaseInformation,
+      exhibitionFile,
+      exhibitionVideo,
+      exhibitionImage,
+      exhibitionMaintain,
+      selectRadio,
+      exhibitionCrux,
+      exhibitionEnergy
+    },
+    created() {
+      this.id = this.$route.query.equipId;
+      this.name = this.$route.query.equipName;
+      this.code = this.$route.query.equipCode;
+      this.type = this.$route.query.type;
+      this.list = this.$route.query.data;
+      this.getData();
+      console.log(this.$route.query)
+    },
+    computed: {
+      ...mapGetters("layout", ["projectId", "secret", "userId"])
+    },
+    data() {
+      return {
+        id: '', //当前设备id
+        name: '', //当前设备本地名称
+        code: '', //当前设备的本地编码
+        type: '', //设备类型
+        list: [], //设备列表
+        pointData: [], //信息点数据
+        exampleData: {}, //实例数据
+        currentRadio: '',//当前选中的select
+        criterias: [], //动态参数
+        selectRadio: {
+          information: '设备信息点',
+          initRadio: '1',
+          radioList: [
+            {
+              value: '显示需采集信息点',
+              label: '1'
+            },
+            {
+              value: '显示有值信息点',
+              label: '2'
+            },
+            {
+              value: '显示全部信息点',
+              label: '3'
+            }
+          ]
+        },
+        exhibitionBaseInformation: {
+          information: {}
+        },
+        exhibitionEnergy: {
+          title: '能耗信息',
+          firstName:'',
+          dynamic: [],
+        },
+        exhibitionMaintain: {
+          title: '维修/维保记录'
+        },
+        exhibitionFile: {
+          title: '文件',
+          list: {}
+        },
+        exhibitionCrux: {
+          title: '关键信息点:',
+          cruxArray: [],
+          allMessage: [],//全部信息点
+        },
+        exhibitionImage: {
+          title: '图片',
+          list: {}
+        },
+        exhibitionVideo: {
+          title: '视频',
+          list: []
+        },
+        instance: {},//实例信息处理
+        isShowImage: true,
+        isShowVideo: true,
+        isShowFile: true,
+      }
+    },
+    methods: {
+      deepCopy(obj) {
+        return JSON.parse(JSON.stringify(obj))
+      },
+      cruxSuccess(){
+        this.getData()
+      },
+      // 获取表头和实例数据(动态数据在组件中获取,在此格式化请求参数)
+      getData() {
+        let params1 = {
+          data: {
+            Orders: "sort asc",
+            PageNumber: 1,
+            PageSize: 1000
+          },
+          type: this.type
+        }, params2 = {
+          Filters: `EquipID='${this.id}'`,
+        };
+        let promise1 = new Promise((resolve, reject) => {
+          getDataDictionary(params1, res => {
+            resolve(res)
+          })
+        })
+        let promise2 = new Promise((resolve, reject) => {
+          queryEquip(params2, res => {
+            resolve(res)
+          })
+        })
+        Promise.all([promise1, promise2]).then(values => {
+          this.pointData = values[0].Content;
+          this.exampleData = values[1].Content[0];
+          this.name = this.exampleData.EquipLocalName?this.exampleData.EquipLocalName:this.exampleData.EquipName?this.exampleData.EquipName:'';
+          this.code = this.exampleData.EquipLocalID?this.exampleData.EquipLocalID:'';
+          let obj = this.deepCopy(values[1].Content[0]);
+          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);
+              if (cur) {
+                this.criterias.push({
+                  id: this.exampleData.EquipID,
+                  code: item.InfoPointCode
+                })
+
+              }
+            }
+          })
+
+          let params = { //获取动态参数
+            secret: this.secret,
+            ProjId: this.projectId,
+            data: {
+              criterias: this.criterias
+            }
+          }
+          if (this.criterias.length) {
+            BeatchQueryParam(params, res => {
+              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,
+                      value: child.value,
+                      data: child.data || '--',
+                      receivetime: child.receivetime || '',
+                      error: child.error || '',
+                      Unit: head.Unit || ''
+                    })
+                  }
+                })
+              });
+            })
+          }
+
+        })
+      },
+      handleEnclosure() {
+        //图片文件处理,脱离radio控制
+        let isList = this.pointData
+        let isArr = []
+        isList.map(j => {
+          if (this.instance.hasOwnProperty(j.Path)) {
+            j.value = this.instance[j.Path]
+            return j
+          }
+        })
+        isArr = isList.filter(k => k.value)
+        this.handlePicList(isArr)
+        this.handleFileList(isArr)
+      },
+      handleRadios(val) { //判断radio的值显示关键信息,基本信息,图片,文件
+        let arr = []
+        //关键信息点
+        this.exhibitionCrux.cruxArray = this.pointData.filter(i => i.KeyWord)
+        this.exhibitionCrux.cruxArray.map(i => {
+          if (this.instance.hasOwnProperty(i.Path)) {
+            return {
+              ...i,
+              value: this.instance[i.Path]
+            }
+          }
+        })
+
+        if (val == 1) { //需采集信息
+          arr = this.pointData.filter(i => i.Visible)
+          // //  图片和的处理
+          // this.handlePicList(arr)
+          // //  文件处理
+          // this.handleFileList(arr)
+
+        } else if (val == 2) { //有值信息点
+          let list = this.pointData
+          list.map(j => {
+            if (this.instance.hasOwnProperty(j.Path)) {
+              return {
+                ...j,
+                value: this.instance[j.Path]
+              }
+            }
+          })
+          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.displayData(arr)
+      },
+      handlePicList(arr) {
+        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]) {
+
+                } 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 = {}
+        //处理数据格式
+        arr.map(i => {
+          if (i.InputMode == 'F2') {
+            switch (i.Path) {
+              case 'LedgerParam.InsuranceDoc.InsuranceFile':
+              case 'LedgerParam.PhotoDoc.Archive':
+              case 'LedgerParam.Siteinstall.CheckReport':
+                if (this.instance.hasOwnProperty(i.Path)) {
+                  i.fileList = this.instance[i.Path]
+                }
+                if (picObject[i.InfoPointName]) {
+
+                } else {
+                  picObject[i.InfoPointName] = []
+                }
+                picObject[i.InfoPointName].push({
+                  ...i,
+                })
+                break
+            }
+          }
+        })
+        //展示文件
+        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) {
+        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]
+          }
+          if (i.InputMode == 'C5') {
+            if (this.instance.hasOwnProperty(i.Path)) {
+              let time = this.instance[i.Path]
+              i.value = this.formatDate(time)
+            }
+          }
+          if (i.DataSource && i.DataSource.length) {
+            let source = JSON.parse(i.DataSource)
+            //判断输入类型
+            if (i.InputMode == 'D1L') {
+              let d1l = tools.formatDataSource(i.DataSource)
+              d1l.forEach(k => {
+                if (k.Code == this.instance[i.Path]) {
+                  i.value = k.Name
+                }
+              })
+            } else if (i.InputMode == 'D2' || i.InputMode == 'C6') {
+              if (this.instance.hasOwnProperty(i.Path)) {
+                if (!Array.isArray(this.instance[i.Path])) {
+                  let transArray = this.instance[i.Path].split(',')
+                  i.value = source.filter(item => transArray.includes(item.Code)).map(item => item.Name).join(',')
+                }
+              }
+            }
+            source.forEach(j => {
+              if (j.Code == this.instance[i.Path]) {
+                console.log(j.Name)
+                i.value = j.Name
+              }
+            })
+          }
+          switch (i.InputMode) {
+            case "L":
+            case "L1":
+            case "L2":
+            case "M":
+              break;
+            default:
+              if (result[`${i.FirstName}${i.SecondName ? '/' + i.SecondName : ''}`]) {
+                result[`${i.FirstName}${i.SecondName ? '/' + i.SecondName : ''}`].paths.push({
+                  Path: i.Path,
+                  InfoPointName: i.InfoPointName,
+                  InfoPointCode: i.InfoPointCode,
+                  Value: i.value,
+                  Visible: i.Visible,
+                  KeyWord: i.KeyWord,
+                  InputMode:i.InputMode
+                })
+              } else {
+                result[`${i.FirstName}${i.SecondName ? '/' + i.SecondName : ''}`] = {
+                  paths: [{
+                    Path: i.Path,
+                    InfoPointName: i.InfoPointName,
+                    InfoPointCode: i.InfoPointCode,
+                    Value: i.value,
+                    Visible: i.Visible,
+                    KeyWord: i.KeyWord,
+                    InputMode:i.InputMode
+                  }]
+                }
+              }
+
+          }
+
+
+        })
+        this.exhibitionBaseInformation.information = result
+        this.exhibitionCrux.allMessage = result
+      },
+      goBack() {
+        this.$router.push({
+          name: "facilityLedger",
+          params: {
+            deviceId: this.type
+          }
+        })
+      },
+      // 切换实例
+      handleChangeExample() {
+        this.selectRadio.initRadio = '1'
+        this.getData();
+        this.exhibitionEnergy.dynamic = []
+      },
+    },
+    watch: {
+      projectId() {
+        this.$router.push({path: "/ledger/facility"})
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  @bgc: #fff;
+  .tableDisplay {
+    .header {
+      padding-bottom: 10px;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+      .details-title {
+        color: #333;
+        font-size: 16px;
+        margin-left: 20px;
+        line-height: 32px;
+        cursor: pointer;
+      }
+    }
+
+    .content {
+      display: flex;
+      flex-direction: row;
+      box-sizing: border-box;
+      height: calc(100% - 95px);
+      .content-left {
+        display: flex;
+        flex-direction: column;
+        flex: 1;
+        .content-keyPoint {
+          border: 1px solid #ccc;
+          box-sizing: border-box;
+          height: 100px;
+          margin-bottom: 10px;
+          overflow: hidden;
+          background: @bgc;
+        }
+        .content-showType {
+          height: 50px;
+          border: 1px solid #ccc;
+          border-bottom: none;
+          box-sizing: border-box;
+          background: @bgc;
+        }
+        .content-point {
+          display: flex;
+          flex-direction: row;
+          height: calc(100% - 160px);
+          border: 1px solid #ccc;
+          box-sizing: border-box;
+          background: @bgc;
+
+          .content-point-left {
+            flex: 1;
+          }
+
+          .content-point-right {
+            width: 300px;
+            border-left: 1px solid #ccc;
+          }
+        }
+      }
+      .content-right {
+        width: 400px;
+        margin-left: 10px;
+        .content-repair {
+          height: 50px;
+          line-height: 50px;
+          margin-bottom: 10px;
+          border: 1px solid #ccc;
+          background: @bgc;
+          box-sizing: border-box;
+        }
+        .content-media {
+          height: calc(100% - 60px);
+          background: @bgc;
+          border: 1px solid #ccc;
+          box-sizing: border-box;
+        }
+      }
+    }
+
+    .footer {
+      margin-top: 5px;
+      height: 45px;
+      background-color: #fff;
+      box-sizing: border-box;
+      border: 1px solid #ccc;
+    }
+  }
+
+  /deep/ .el-scrollbar__wrap {
+    overflow-x: hidden;
+  }
+
+</style>

+ 103 - 78
src/views/ledger/property/details/index.vue

@@ -5,48 +5,59 @@
       <span :title="`${name} - ${code}`" class="details-title"><b>{{name}} - {{code}}</b></span>
     </div>
     <div class="content">
-      <div class="content-left">
-        <div class="content-keyPoint">
-          <exhibitionCrux :exhibitionCrux="exhibitionCrux" :type="type" @cruxSuccess="cruxSuccess"/>
-
-        </div>
-        <div class="content-showType">
-          <selectRadio
-            :selectRadio="selectRadio"
-            @changeRadio="changeRadio"
-          />
-        </div>
-        <div class="content-point">
-          <div class="content-point-left">
-            <el-scrollbar style="height:100%;">
-              <div>
+      <el-scrollbar style="height:100%;">
+        <div class="content-scrollbar">
+          <div class="content-left">
+            <div class="content-keyPoint">
+              <exhibitionCrux :exhibitionCrux="exhibitionCrux" :type="type" @cruxSuccess="cruxSuccess"/>
+            </div>
+            <div class="content-showType">
+              <selectRadio
+                :selectRadio="selectRadio"
+                @changeRadio="changeRadio"
+              />
+            </div>
+            <div class="content-point">
+              <div class="content-point-left">
                 <exhibitionBaseInformation :exhibitionBaseInformation="exhibitionBaseInformation"/>
               </div>
-            </el-scrollbar>
+            </div>
           </div>
-        </div>
-      </div>
-      <div class="content-right">
-        <div class="content-media">
-          <el-scrollbar style="height:100%;">
-            <div>
+          <div class="content-right">
+            <div class="content-media">
               <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
               <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
               <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
             </div>
-          </el-scrollbar>
+          </div>
         </div>
-      </div>
+      </el-scrollbar>
     </div>
     <div class="footer">
-      <el-select size="mini" style="float:right;margin:7px 30px 0 0" v-model="id" @change="handleChangeExample" placeholder="请选择">
-        <el-option
-          v-for="item in list"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value">
-        </el-option>
-      </el-select>
+      <el-button-group style="float:right;margin:8px 10px 0 0">
+        <el-button
+          :disabled="list.findIndex(item => item.value == id) == 0"
+          @click="handleClickPrev"
+          size="mini"
+          icon="el-icon-arrow-left">
+          上一页
+        </el-button>
+        <el-select size="mini" style="float:left;margin:0 10px;" v-model="id" @change="handleChangeExample" placeholder="请选择">
+          <el-option
+            v-for="item in list"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+        <el-button
+          :disabled="list.findIndex(item => item.value == id) == list.length-1"
+          @click="handleClickNext"
+          size="mini">
+          下一页
+          <i class="el-icon-arrow-right el-icon--right"></i>
+        </el-button>
+      </el-button-group>
     </div>
   </div>
 </template>
@@ -94,7 +105,7 @@
         type: '', //资产类型
         list: [], //资产列表
         pointData: [], //信息点数据
-        currentRadio: '',//当前选中的select
+        currentRadio: '1',//当前选中的select
         selectRadio: {
           information: '设备信息点',
           initRadio: '1',
@@ -176,7 +187,7 @@
           let obj = this.deepCopy(values[1].Content[0]);
           obj = tools.flattenKeys(obj);
           this.instance = obj;
-          this.handleRadios(1)
+          this.handleRadios(this.currentRadio)
           this.handleEnclosure() //处理图片视频文件信息
         })
       },
@@ -186,10 +197,8 @@
         let isArr = []
         isList.map(j => {
           if (this.instance.hasOwnProperty(j.Path)) {
-            return {
-              ...j,
-              value: this.instance[j.Path]
-            }
+            j.value = this.instance[j.Path]
+            return j
           }
         })
         isArr = isList.filter(k => k.value)
@@ -425,9 +434,22 @@
       },
       // 切换实例
       handleChangeExample() {
-        this.selectRadio.initRadio = '1'
+        this.selectRadio.initRadio = '1';
+        this.currentRadio = '1';
         this.getData();
       },
+      // 切换上一个实例
+      handleClickPrev() {
+        let index = this.list.findIndex(item => item.value == this.id);
+        this.id = this.list[index-1].value;
+        this.handleChangeExample();
+      },
+      // 切换下一个实例
+      handleClickNext() {
+        let index = this.list.findIndex(item => item.value == this.id);
+        this.id = this.list[index+1].value;
+        this.handleChangeExample();
+      },
     },
     watch: {
       projectId() {
@@ -455,59 +477,62 @@
     }
 
     .content {
-      display: flex;
-      flex-direction: row;
-      box-sizing: border-box;
-      height: calc(100% - 95px);
-      .content-left {
+      height: calc(100% - 77px);
+      .content-scrollbar {
         display: flex;
-        flex-direction: column;
-        flex: 1;
-        .content-keyPoint {
-          border: 1px solid #ccc;
-          box-sizing: border-box;
-          height: 100px;
-          margin-bottom: 10px;
-          overflow: hidden;
-          background: @bgc;
-        }
-        .content-showType {
-          height: 50px;
-          border: 1px solid #ccc;
-          border-bottom: none;
-          box-sizing: border-box;
-          background: @bgc;
-        }
-        .content-point {
+        height: 100%;
+        flex-direction: row;
+        box-sizing: border-box;
+        background-color: #f2f2f2;
+        .content-left {
           display: flex;
-          flex-direction: row;
-          height: calc(100% - 160px);
-          border: 1px solid #ccc;
+          flex-direction: column;
+          flex: 1;
           box-sizing: border-box;
-          background: @bgc;
-          .content-point-left {
-            flex: 1;
+          .content-keyPoint {
+            border: 1px solid #ccc;
+            box-sizing: border-box;
+            margin-bottom: 10px;
+            overflow: hidden;
+            background: @bgc;
+          }
+          .content-showType {
+            height: 50px;
+            border: 1px solid #ccc;
+            border-bottom: none;
+            box-sizing: border-box;
+            background: @bgc;
+          }
+          .content-point {
+            display: flex;
+            flex-direction: row;
+            border: 1px solid #ccc;
+            box-sizing: border-box;
+            background: @bgc;
+            .content-point-left {
+              flex: 1;
+            }
           }
         }
-      }
-      .content-right {
-        width: 400px;
-        margin-left: 10px;
-        .content-media {
-          height: 100%;
-          background: @bgc;
-          border: 1px solid #ccc;
+        .content-right {
+          width: 400px;
+          margin-left: 10px;
           box-sizing: border-box;
+          .content-media {
+            box-sizing: border-box;
+          }
         }
       }
     }
 
     .footer {
-      margin-top: 5px;
+      position: fixed;
+      bottom: 0;
+      left: 235px;
+      width: calc(100% - 235px);
       height: 45px;
       background-color: #fff;
       box-sizing: border-box;
-      border: 1px solid #ccc;
     }
   }
 

+ 516 - 0
src/views/ledger/property/details/index_old.vue

@@ -0,0 +1,516 @@
+<template>
+  <div class="tableDisplay">
+    <div class="header">
+      <el-button style="float:left;" size="small" type="default" icon="el-icon-back" @click="goBack"></el-button>
+      <span :title="`${name} - ${code}`" class="details-title"><b>{{name}} - {{code}}</b></span>
+    </div>
+    <div class="content">
+      <div class="content-left">
+        <div class="content-keyPoint">
+          <exhibitionCrux :exhibitionCrux="exhibitionCrux" :type="type" @cruxSuccess="cruxSuccess"/>
+
+        </div>
+        <div class="content-showType">
+          <selectRadio
+            :selectRadio="selectRadio"
+            @changeRadio="changeRadio"
+          />
+        </div>
+        <div class="content-point">
+          <div class="content-point-left">
+            <el-scrollbar style="height:100%;">
+              <div>
+                <exhibitionBaseInformation :exhibitionBaseInformation="exhibitionBaseInformation"/>
+              </div>
+            </el-scrollbar>
+          </div>
+        </div>
+      </div>
+      <div class="content-right">
+        <div class="content-media">
+          <el-scrollbar style="height:100%;">
+            <div>
+              <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
+              <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
+              <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
+            </div>
+          </el-scrollbar>
+        </div>
+      </div>
+    </div>
+    <div class="footer">
+      <el-select size="mini" style="float:right;margin:7px 30px 0 0" v-model="id" @change="handleChangeExample" placeholder="请选择">
+        <el-option
+          v-for="item in list"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+    </div>
+  </div>
+</template>
+
+<script>
+  import exhibitionBaseInformation from "@/components/ledger/details/detail/exhibitionBaseInformation";
+  import exhibitionFile from "@/components/ledger/details/detail/exhibitionFile";
+  import exhibitionImage from "@/components/ledger/details/detail/exhibitionImage";
+  import exhibitionVideo from "@/components/ledger/details/detail/exhibitionVideo";
+  import exhibitionCrux from "@/components/ledger/details/detail/exhibitionCrux";
+  import selectRadio from "@/components/ledger/details/detail/selectRadio";
+
+  import {getDataDictionary, queryProperty} from "@/api/scan/request";
+  import {mapGetters} from "vuex";
+  import tools from "@/utils/scan/tools"
+
+
+  export default {
+    name: "propertyDetails",
+    components: {
+      exhibitionBaseInformation,
+      exhibitionFile,
+      exhibitionImage,
+      selectRadio,
+      exhibitionCrux,
+      exhibitionVideo
+    },
+    created() {
+      this.id = this.$route.query.equipId;
+      this.name = this.$route.query.equipName;
+      this.code = this.$route.query.equipCode;
+      this.type = this.$route.query.type;
+      this.list = this.$route.query.data;
+      this.getData();
+      console.log(this.$route.query)
+    },
+    computed: {
+      ...mapGetters("layout", ["projectId", "secret", "userId"])
+    },
+    data() {
+      return {
+        id: '', //当前资产id
+        name: '', //当前资产本地名称
+        code: '', //当前资产的本地编码
+        type: '', //资产类型
+        list: [], //资产列表
+        pointData: [], //信息点数据
+        currentRadio: '',//当前选中的select
+        selectRadio: {
+          information: '设备信息点',
+          initRadio: '1',
+          radioList: [
+            {
+              value: '显示需采集信息点',
+              label: '1'
+            },
+            {
+              value: '显示有值信息点',
+              label: '2'
+            },
+            {
+              value: '显示全部信息点',
+              label: '3'
+            }
+          ]
+        },
+        exhibitionBaseInformation: {
+          information: {}
+        },
+        exhibitionFile: {
+          title: '文件',
+          list: {}
+        },
+        exhibitionCrux: {
+          title: '关键信息点:',
+          cruxArray: [],
+          allMessage: [],//全部信息点
+        },
+        exhibitionImage: {
+          title: '图片',
+          list: {}
+        },
+        exhibitionVideo: {
+          title: '视频',
+          list: {}
+        },
+        instance: {},//实例信息处理
+        isShowImage: true,
+        isShowVideo: true,
+        isShowFile: true,
+      }
+    },
+    methods: {
+      deepCopy(obj) {
+        return JSON.parse(JSON.stringify(obj))
+      },
+      cruxSuccess(){
+        this.getData()
+      },
+      // 获取表头和实例数据
+      getData () {
+        let params1 = {
+          data: {
+            Orders: "sort asc",
+            PageNumber: 1,
+            PageSize: 1000
+          },
+          type: this.type
+        }, params2 = {
+          Filters: `EquipID='${this.id}'`,
+        };
+        let promise1 = new Promise((resolve, reject) => {
+          getDataDictionary(params1, res => {
+            resolve(res)
+          })
+        })
+        let promise2 = new Promise((resolve, reject) => {
+          queryProperty(params2, res => {
+            resolve(res)
+          })
+        })
+        Promise.all([promise1, promise2]).then(values => {
+          this.pointData = values[0].Content;
+          this.exampleData = values[1].Content[0];
+          this.name = this.exampleData.EquipLocalName?this.exampleData.EquipLocalName:this.exampleData.EquipName?this.exampleData.EquipName:'';
+          this.code = this.exampleData.EquipLocalID?this.exampleData.EquipLocalID:'';
+          let obj = this.deepCopy(values[1].Content[0]);
+          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)) {
+            j.value = this.instance[j.Path]
+            return j
+          }
+        })
+        isArr = isList.filter(k => k.value)
+        this.handlePicList(isArr)
+        this.handleFileList(isArr)
+      },
+      handleRadios(val) { //判断radio的值显示关键信息,基本信息,图片,文件
+        let arr = []
+        //关键信息点
+        this.exhibitionCrux.cruxArray = this.pointData.filter(i => i.KeyWord)
+        this.exhibitionCrux.cruxArray.map(i => {
+          if (this.instance.hasOwnProperty(i.Path)) {
+            return {
+              ...i,
+              value: this.instance[i.Path]
+            }
+          }
+        })
+        if (val == 1) { //需采集信息
+          arr = this.pointData.filter(i => i.Visible)
+
+          //  图片和的处理
+          // this.handlePicList(arr)
+          // //  文件处理
+          // this.handleFileList(arr)
+
+        } else if (val == 2) { //有值信息点
+          let list = this.pointData
+          list.map(j => {
+            if (this.instance.hasOwnProperty(j.Path)) {
+              return {
+                ...j,
+                value: this.instance[j.Path]
+              }
+            }
+            arr = list.filter(k => k.value)
+            // this.handlePicList(arr)
+            // this.handleFileList(arr)
+          })
+        } else { //全部信息点
+          arr = this.pointData
+          // this.handlePicList(arr)
+          // this.handleFileList(arr)
+        }
+        this.displayData(arr)
+      },
+      handlePicList(arr) {
+        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]) {
+
+                } 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 =='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 = {}
+        //处理数据格式
+        arr.map(i => {
+          if (i.InputMode == 'F2') {
+            switch (i.Path) {
+              case 'LedgerParam.InsuranceDoc.InsuranceFile':
+              case 'LedgerParam.PhotoDoc.Archive':
+              case 'LedgerParam.Siteinstall.CheckReport':
+                if (this.instance.hasOwnProperty(i.Path)) {
+                  i.fileList = this.instance[i.Path]
+                }
+                if (picObject[i.InfoPointName]) {
+
+                } else {
+                  picObject[i.InfoPointName] = []
+                }
+
+                picObject[i.InfoPointName].push({
+                  ...i,
+                })
+                break
+            }
+          }
+
+        })
+        //展示文件
+        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) {
+        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]
+          }
+          if (i.InputMode == 'C5') {
+            if (this.instance.hasOwnProperty(i.Path)) {
+             let time = this.instance[i.Path]
+              i.value = this.formatDate(time)
+            }
+          }
+          if (i.DataSource && i.DataSource.length) {
+            let source = JSON.parse(i.DataSource)
+            //判断输入类型
+            if (i.InputMode == 'D1L') {
+              let d1l = tools.formatDataSource(i.DataSource)
+              d1l.forEach(k => {
+                if (k.Code == this.instance[i.Path]) {
+                  i.value = k.Name
+                }
+              })
+            } else if (i.InputMode == 'D2' || i.InputMode == 'C6') {
+              if (this.instance.hasOwnProperty(i.Path)) {
+                if (!Array.isArray(this.instance[i.Path])) {
+                  let transArray = this.instance[i.Path].split(',')
+                  i.value = source.filter(item => transArray.includes(item.Code)).map(item => item.Name).join(',')
+                }
+              }
+            }
+            source.forEach(j => {
+              if (j.Code == this.instance[i.Path]) {
+
+                i.value = j.Name
+              }
+            })
+          }
+          switch (i.InputMode) {
+            case "L":
+            case "L1":
+            case "L2":
+            case "M":
+              break;
+            default:
+              if (result[`${i.FirstName}${i.SecondName ? '/' + i.SecondName : ''}`]) {
+                result[`${i.FirstName}${i.SecondName ? '/' + i.SecondName : ''}`].paths.push({
+                  Path: i.Path,
+                  InfoPointName: i.InfoPointName,
+                  InfoPointCode: i.InfoPointCode,
+                  Value: i.value,
+                  Visible: i.Visible,
+                  KeyWord: i.KeyWord,
+                  InputMode:i.InputMode
+                })
+              } else {
+                result[`${i.FirstName}${i.SecondName ? '/' + i.SecondName : ''}`] = {
+                  paths: [{
+                    Path: i.Path,
+                    InfoPointName: i.InfoPointName,
+                    InfoPointCode: i.InfoPointCode,
+                    Value: i.value,
+                    Visible: i.Visible,
+                    KeyWord: i.KeyWord,
+                    InputMode:i.InputMode
+                  }]
+                }
+              }
+
+          }
+
+
+        })
+        this.exhibitionBaseInformation.information = result
+        this.exhibitionCrux.allMessage = result
+      },
+      goBack () {
+        this.$router.push({
+          name: 'propertyLedger',
+          params: {
+            Family: this.type
+          }
+        })
+      },
+      // 切换实例
+      handleChangeExample() {
+        this.selectRadio.initRadio = '1'
+        this.getData();
+      },
+    },
+    watch: {
+      projectId() {
+        this.$router.push({path: "/ledger/property"})
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  @bgc: #fff;
+  .tableDisplay {
+    .header {
+      padding-bottom: 10px;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+      .details-title {
+        color: #333;
+        font-size: 16px;
+        margin-left: 20px;
+        line-height: 32px;
+        cursor: pointer;
+      }
+    }
+
+    .content {
+      display: flex;
+      flex-direction: row;
+      box-sizing: border-box;
+      height: calc(100% - 95px);
+      .content-left {
+        display: flex;
+        flex-direction: column;
+        flex: 1;
+        .content-keyPoint {
+          border: 1px solid #ccc;
+          box-sizing: border-box;
+          height: 100px;
+          margin-bottom: 10px;
+          overflow: hidden;
+          background: @bgc;
+        }
+        .content-showType {
+          height: 50px;
+          border: 1px solid #ccc;
+          border-bottom: none;
+          box-sizing: border-box;
+          background: @bgc;
+        }
+        .content-point {
+          display: flex;
+          flex-direction: row;
+          height: calc(100% - 160px);
+          border: 1px solid #ccc;
+          box-sizing: border-box;
+          background: @bgc;
+          .content-point-left {
+            flex: 1;
+          }
+        }
+      }
+      .content-right {
+        width: 400px;
+        margin-left: 10px;
+        .content-media {
+          height: 100%;
+          background: @bgc;
+          border: 1px solid #ccc;
+          box-sizing: border-box;
+        }
+      }
+    }
+
+    .footer {
+      margin-top: 5px;
+      height: 45px;
+      background-color: #fff;
+      box-sizing: border-box;
+      border: 1px solid #ccc;
+    }
+  }
+
+  /deep/ .el-scrollbar__wrap {
+    overflow-x: hidden;
+  }
+
+</style>

+ 24 - 10
src/views/ledger/report/index.vue

@@ -35,7 +35,9 @@
     <div class="progress">
       <p class="basic-statistics">基本统计</p>
       <div class="data equipment" v-if="equipCount">
-        <span class="contain-title">设备<i>{{`(${equipCount?equipCount:"0"})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          设备<i>{{`(${equipCount?equipCount:"0"})`}}</i></span>
         <div class="data-show" v-loading="isLoading" v-if="equipment.length">
           <div class="show-content" v-for="(item,index) in equipment" :key="index">
             <data-origin :id="'equipment' + index" :renderData="item"></data-origin>
@@ -53,7 +55,9 @@
         </div>
       </div>
       <div class="data assets" v-if="assetsCount">
-        <span class="contain-title">资产<i>{{`(${assetsCount?assetsCount:"0"})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          资产<i>{{`(${assetsCount?assetsCount:"0"})`}}</i></span>
         <div class="data-show" v-loading="isLoading" v-if="assets.length">
           <div class="show-content" v-for="(item,index) in assets" :key="index">
             <data-origin :id="'assets' + index" :renderData="item"></data-origin>
@@ -61,10 +65,14 @@
         </div>
       </div>
       <div class="data parts" v-if="partsCount">
-        <span class="contain-title">部件<i>{{`(${partsCount?partsCount:'0'})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          部件<i>{{`(${partsCount?partsCount:'0'})`}}</i></span>
       </div>
       <div class="data business-space" v-if="zoneSpaceCount">
-        <span class="contain-title">业务空间<i>{{`(${zoneSpaceCount?zoneSpaceCount:'0'})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          业务空间<i>{{`(${zoneSpaceCount?zoneSpaceCount:'0'})`}}</i></span>
         <div class="data-show" v-if="business.length">
           <div v-for="(item,index) in business" :key="index" class="show-content">
             <datafan :id="'datafan' + index" :renderData="item"></datafan>
@@ -72,7 +80,9 @@
         </div>
       </div>
       <div class="data " v-if="systemCount">
-        <span class="contain-title">系统<i>{{`(${systemCount?systemCount:'0'})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          系统<i>{{`(${systemCount?systemCount:'0'})`}}</i></span>
         <div class="data-show" v-loading="isLoading" v-if="sysMessageData.length">
           <div class="device-content" v-for="(item,index) in sysMessageData" :key="index">
             <data-origin :id="'origin-sys' + index" :renderData="item" :filterClass="'yes'"></data-origin>
@@ -80,7 +90,9 @@
         </div>
       </div>
       <div class="data " v-if="rentantCount">
-        <span class="contain-title">租户<i>{{`(${rentantCount?rentantCount:'0'})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          租户<i>{{`(${rentantCount?rentantCount:'0'})`}}</i></span>
         <div class="data-show" v-loading="isLoading" v-if="tenant.length">
           <div class="show-content" v-for="(item,index) in tenant" :key="index">
             <data-origin :id="'origin-tenant' + index" :renderData="item"></data-origin>
@@ -88,7 +100,9 @@
         </div>
       </div>
       <div class="data " v-if="shaftCount">
-        <span class="contain-title">竖井<i>{{`(${shaftCount?shaftCount:'0'})`}}</i></span>
+        <span class="contain-title">
+             <span class="iconfont icon-juxing"></span>
+          竖井<i>{{`(${shaftCount?shaftCount:'0'})`}}</i></span>
         <div class="data-show" v-loading="isLoading" v-if="shaft.length">
           <div class="show-content" v-for="(item,index) in shaft" :key="index">
             <datafan :id="'origin-datafan' + index" :renderData="item" v-if="!item.needCountT"></datafan>
@@ -825,11 +839,11 @@
       .contain-title {
         height: 30px;
         line-height: 30px;
-        border-left: 8px solid black;
+        /*border-left: 8px solid black;*/
         display: inline-block;
-        margin: 8px 8px;
+        margin: 8px 0;
         font-weight: 600;
-        padding-left: 8px;
+        /*padding-left: 8px;*/
         cursor: default;
 
         i {

+ 72 - 70
src/views/ledger/spacelist/spaceDetail/index.vue

@@ -19,45 +19,36 @@
       </el-row>
       <div v-if="activeTab=='detail'"  class="content">
         <iframe v-if="params.isMyTab == 1" height="100%" width="100%" :src="iframeSrc"></iframe>
-        <div v-else class="content-left">
-          <div class="content-showType">
-            <selectRadio
-              :selectRadio="selectRadio"
-              @changeRadio="changeRadio"
-            />
-          </div>
-          <div class="content-point">
-            <div class="content-point-left">
-              <el-scrollbar style="height:100%;">
-                <div >
+        <el-scrollbar v-else style="height:100%;">
+          <div class="content-scrollbar">
+            <div class="content-left">
+              <div class="content-showType">
+                <selectRadio
+                  :selectRadio="selectRadio"
+                  @changeRadio="changeRadio"
+                />
+              </div>
+              <div class="content-point">
+                <div class="content-point-left">
                   <exhibitionBaseInformation :exhibitionBaseInformation="exhibitionBaseInformation"/>
                 </div>
-              </el-scrollbar>
-            </div>
-            <div class="content-point-right">
-              <el-scrollbar style="height:100%;">
-                <div>
+                <div class="content-point-right">
                   <exhibitionEnergy :exhibitionEnergy="exhibitionEnergy" />
                 </div>
-              </el-scrollbar>
+              </div>
             </div>
-          </div>
-        </div>
-        <div class="content-right">
-          <div class="content-repair">
-            <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
-
-          </div>
-          <div class="content-media">
-            <el-scrollbar style="height:100%;">
-              <div >
+            <div class="content-right">
+              <div class="content-repair">
+                <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
+              </div>
+              <div class="content-media">
                 <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
                 <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
                 <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
               </div>
-            </el-scrollbar>
+            </div>
           </div>
-        </div>
+        </el-scrollbar>
       </div>
       <!-- 空间内设备列表--服务于空间的设备 -->
       <eqToSpaceTable v-else-if="activeTab=='Equipment' || activeTab=='EquipmentFor'" :params="params" :type="activeTab"></eqToSpaceTable>
@@ -98,6 +89,7 @@
         activeTab: 'detail', //当前选中的tab
         pointData: [], //信息点数据
         exampleData: {}, //实例数据
+        currentRadio: '1',//当前选中的select
         criterias: [], //动态参数
         instance: {},
         iframeSrc: '', //空间详情iframe
@@ -124,6 +116,7 @@
         },
         exhibitionEnergy: {
           title: '能耗信息',
+          firstName:'',
           dynamic: [],
         },
         exhibitionMaintain: {
@@ -209,6 +202,10 @@
           resolve(res)
         })
       })
+      // 数据初始化
+      this.exhibitionEnergy.dynamic = [];
+      this.criterias = [];
+
       Promise.all([promise1, promise2]).then(values => {
         this.pointData = values[0].Content;
         this.exampleData = values[1].Content[0];
@@ -216,7 +213,7 @@
         let obj = this.deepCopy(values[1].Content[0]);
         obj = tools.flattenKeys(obj);
         this.instance = obj;
-        this.handleRadios(1)
+        this.handleRadios(this.currentRadio)
         this.handleEnclosure() //处理图片视频文件信息
         this.pointData.forEach(item => {
           if (item.InputMode == "L" || item.InputMode == "L1" || item.InputMode == "L2" || item.InputMode == "M") {
@@ -241,6 +238,7 @@
             res.Content.map(child => {
               this.pointData.forEach(head => {
                 if (head.InfoPointCode == child.code) {
+                  this.exhibitionEnergy.firstName = head.FirstName;
                   this.exhibitionEnergy.dynamic.push({
                     InfoPointCode: head.InfoPointCode,
                     InfoPointName: head.InfoPointName,
@@ -264,10 +262,8 @@
       let isArr = []
       isList.map(j => {
         if (this.instance.hasOwnProperty(j.Path)) {
-          return {
-            ...j,
-            value: this.instance[j.Path]
-          }
+          j.value = this.instance[j.Path]
+          return j
         }
       })
       isArr = isList.filter(k => k.value)
@@ -522,6 +518,7 @@
 </script>
 
 <style scoped lang='less'>
+@bgc: #fff;
 .box {
   .condition {
     padding: 10px;
@@ -559,49 +556,54 @@
     }
 
     .content {
-      display: flex;
-      flex-direction: row;
-      box-sizing: border-box;
       height: calc(100% - 99px);
-      .content-left {
+      .content-scrollbar {
         display: flex;
-        flex-direction: column;
-        flex: 1;
-        .content-showType {
-          height: 50px;
-          border: 1px solid #ccc;
-          border-bottom: none;
-          box-sizing: border-box;
-        }
-        .content-point {
+        height: 100%;
+        flex-direction: row;
+        box-sizing: border-box;
+        background-color: @bgc;
+        .content-left {
           display: flex;
-          flex-direction: row;
-          height: calc(100% - 50px);
-          border: 1px solid #ccc;
-          box-sizing: border-box;
-          .content-point-left {
-            flex: 1;
+          flex-direction: column;
+          flex: 1;
+          .content-showType {
+            height: 50px;
+            border: 1px solid #ccc;
+            border-bottom: none;
+            box-sizing: border-box;
+            background: @bgc;
           }
-          .content-point-right {
-            width: 300px;
-            border-left: 1px solid #ccc;
+          .content-point {
+            display: flex;
+            flex-direction: row;
+            border: 1px solid #ccc;
+            box-sizing: border-box;
+            background: @bgc;
+            .content-point-left {
+              flex: 1;
+            }
+            .content-point-right {
+              width: 300px;
+              border-left: 1px solid #ccc;
+            }
           }
         }
-      }
-      .content-right {
-        width: 400px;
-        margin-left: 10px;
-        .content-repair {
-          height: 50px;
-          line-height: 50px;
-          margin-bottom: 10px;
-          border: 1px solid #ccc;
-          box-sizing: border-box;
-        }
-        .content-media {
-          height: calc(100% - 60px);
-          border: 1px solid #ccc;
+        .content-right {
+          width: 400px;
+          margin-left: 10px;
           box-sizing: border-box;
+          .content-repair {
+            height: 50px;
+            line-height: 50px;
+            margin-bottom: 10px;
+            border: 1px solid #ccc;
+            background: @bgc;
+            box-sizing: border-box;
+          }
+          .content-media {
+            box-sizing: border-box;
+          }
         }
       }
     }

+ 62 - 62
src/views/ledger/system/systemDetail/index.vue

@@ -18,37 +18,33 @@
         </div>
       </el-row>
       <div v-if="activeTab=='detail'" class="content">
-        <div class="content-left">
-          <div class="content-showType">
-            <selectRadio
-              :selectRadio="selectRadio"
-              @changeRadio="changeRadio"
-            />
-          </div>
-          <div class="content-point">
-            <div class="content-point-left">
-              <el-scrollbar style="height:100%;">
-                <div>
+        <el-scrollbar style="height:100%;">
+          <div class="content-scrollbar">
+            <div class="content-left">
+              <div class="content-showType">
+                <selectRadio
+                  :selectRadio="selectRadio"
+                  @changeRadio="changeRadio"
+                />
+              </div>
+              <div class="content-point">
+                <div class="content-point-left">
                   <exhibitionBaseInformation :exhibitionBaseInformation="exhibitionBaseInformation"/>
                 </div>
-              </el-scrollbar>
+              </div>
             </div>
-          </div>
-        </div>
-        <div class="content-right">
-          <div class="content-repair">
-            <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
-          </div>
-          <div class="content-media">
-            <el-scrollbar style="height:100%;">
-              <div>
+            <div class="content-right">
+              <div class="content-repair">
+                <exhibitionMaintain :exhibitionMaintain="exhibitionMaintain"/>
+              </div>
+              <div class="content-media">
                 <exhibitionImage :exhibitionImage="exhibitionImage" v-show="isShowImage"/>
                 <exhibitionVideo :exhibitionVideo="exhibitionVideo" v-show="isShowVideo"/>
                 <exhibitionFile :exhibitionFile="exhibitionFile" v-show="isShowFile"/>
               </div>
-            </el-scrollbar>
+            </div>
           </div>
-        </div>
+        </el-scrollbar>
       </div>
       <!-- 系统内设备 -->
       <deviceTable v-if="activeTab=='Equipment'" :params="params" :type="activeTab"></deviceTable>
@@ -97,7 +93,7 @@
         exampleData: {}, //实例数据
         spaceType: {},//空间种类
         floorType: {},
-        currentRadio: '',//当前选中的select
+        currentRadio: '1',//当前选中的select
         selectRadio: {
           information: '设备信息点',
           initRadio: '1',
@@ -239,7 +235,7 @@
         let obj = this.deepCopy(values[1].Content[0]);
         obj = tools.flattenKeys(obj);
         this.instance = obj;
-        this.handleRadios(1)
+        this.handleRadios(this.currentRadio)
         this.handleEnclosure() //处理图片视频文件信息
       })
     },
@@ -252,10 +248,8 @@
       let isArr = []
       isList.map(j => {
         if (this.instance.hasOwnProperty(j.Path)) {
-          return {
-            ...j,
-            value: this.instance[j.Path]
-          }
+          j.value = this.instance[j.Path]
+          return j
         }
       })
       isArr = isList.filter(k => k.value)
@@ -496,6 +490,7 @@
 </script>
 
 <style scoped lang='less'>
+@bgc: #fff;
 .box {
   .condition {
     padding: 10px;
@@ -532,45 +527,50 @@
       }
     }
     .content {
-      display: flex;
-      flex-direction: row;
-      box-sizing: border-box;
       height: calc(100% - 99px);
-      .content-left {
+      .content-scrollbar {
         display: flex;
-        flex-direction: column;
-        flex: 1;
-        .content-showType {
-          height: 50px;
-          border: 1px solid #ccc;
-          border-bottom: none;
-          box-sizing: border-box;
-        }
-        .content-point {
+        height: 100%;
+        flex-direction: row;
+        box-sizing: border-box;
+        background-color: @bgc;
+        .content-left {
           display: flex;
-          flex-direction: row;
-          height: calc(100% - 50px);
-          border: 1px solid #ccc;
-          box-sizing: border-box;
-          .content-point-left {
-            flex: 1;
+          flex-direction: column;
+          flex: 1;
+          .content-showType {
+            height: 50px;
+            border: 1px solid #ccc;
+            border-bottom: none;
+            box-sizing: border-box;
+            background: @bgc;
+          }
+          .content-point {
+            display: flex;
+            flex-direction: row;
+            border: 1px solid #ccc;
+            box-sizing: border-box;
+            background: @bgc;
+            .content-point-left {
+              flex: 1;
+            }
           }
         }
-      }
-      .content-right {
-        width: 400px;
-        margin-left: 10px;
-        .content-repair {
-          height: 50px;
-          line-height: 50px;
-          margin-bottom: 10px;
-          border: 1px solid #ccc;
-          box-sizing: border-box;
-        }
-        .content-media {
-          height: calc(100% - 60px);
-          border: 1px solid #ccc;
+        .content-right {
+          width: 400px;
+          margin-left: 10px;
           box-sizing: border-box;
+          .content-repair {
+            height: 50px;
+            line-height: 50px;
+            margin-bottom: 10px;
+            border: 1px solid #ccc;
+            background: @bgc;
+            box-sizing: border-box;
+          }
+          .content-media {
+            box-sizing: border-box;
+          }
         }
       }
     }

+ 1 - 1
src/views/model/report/index.vue

@@ -228,7 +228,7 @@
     },
     getModelFloorCount() {// 获取楼层模型文件数量,计算出检查出问题的模型文件
       let promise1 = new Promise(resolve => {
-        queryFloorList({}, res => {
+        queryFloorList({Filters:"Status=4"}, res => {
           resolve(res);
         })
       })

+ 9 - 5
src/views/point/report/index.vue

@@ -2,14 +2,18 @@
   <div>
     <!-- 系统集成统计页面 -->
     <div class="contain-block" style="width:calc(30% - 15px);margin-right:15px;min-width:385px;">
-      <span class="contain-title-leftblock">系统集成统计</span>
+      <span class="contain-title-leftblock">
+         <span class="iconfont icon-juxing"></span>
+        系统集成统计</span>
       <div class="contain-data">
         <integrateStatistics ref="chart" style="height: calc(100% - 5px);" :key="refresh"></integrateStatistics>
       </div>
     </div>
     <!-- 表号功能号总览页面 -->
     <div class="contain-block meterFunc">
-      <span class="contain-title-leftblock">表号功能号总览</span>
+      <span class="contain-title-leftblock">
+         <span class="iconfont icon-juxing"></span>
+        表号功能号总览</span>
       <div class="contain-data">
         <tabFunNumOverview ref="table" :key="refresh" @reloadData="reloadData()"></tabFunNumOverview>
       </div>
@@ -60,9 +64,9 @@ export default {
 .contain-title-leftblock {
   height: 30px;
   line-height: 30px;
-  border-left: 8px solid black;
+  /*border-left: 8px solid black;*/
   display: inline-block;
-  margin: 8px 8px;
+  margin: 8px 0;
   font-weight: 600;
   padding-left: 8px;
   cursor: default;
@@ -76,4 +80,4 @@ export default {
     width:calc(100% - 400px);
   }
 }
-</style>
+</style>

+ 4 - 0
src/views/ready/buildfloor/addFloor/index.vue

@@ -42,6 +42,10 @@
         showDialog(data) {
           this.floorData = data || {};
           this.floorData = tools.desFormatData(this.floorData)
+          //===测试代码===
+          // this.floorData.DefaultQRCode = 'Eq1101080004a93a45ce15e948dda155e9683803cf46QR'
+          // this.floorData.QRCodePic = 'Eq1101080004a93a45ce15e948dda155e9683803cf46QR'
+          //=====
           this.timeoutSetVal()
           this.dialogVisible = true;
         },

+ 22 - 5
src/views/ready/buildfloor/index.vue

@@ -16,8 +16,10 @@
             <!--              </div>-->
             <!--              <el-button slot="reference" icon="el-icon-minus" size="small" type="default"/>-->
             <!--            </el-popover>-->
-            <el-button @click="delBuild" icon="el-icon-minus" size="small" type="default"/>
-            <el-button @click="editBuild" icon="el-icon-edit-outline" size="small" type="default"/>
+            <el-button @click="delBuild" icon="el-icon-minus" size="small" type="default"
+                       :disabled="!buildList.length"/>
+            <el-button @click="editBuild" icon="el-icon-edit-outline" size="small" type="default"
+                       :disabled="!buildList.length"/>
           </div>
         </div>
         <h4>建筑</h4>
@@ -33,7 +35,7 @@
           </div>
         </div>
       </div>
-      <div class="r-table">
+      <div class="r-table" v-if="buildList.length > 0">
         <div class="action-box">
           <el-button @click="addFloor" size="small" type="default">添加楼层
           </el-button>
@@ -86,6 +88,11 @@
           </el-table>
         </div>
       </div>
+      <div v-else class="r-table" >
+      <div class="center" style="margin-top:300px;">
+        <i class="icon-wushuju iconfont"></i> 请先在左侧创建建筑
+      </div>
+      </div>
     </el-row>
     <!-- 添加-修改楼层 -->
     <addFloor :curBuildId="curBuildId" :curFloorId="curFloorId" :title="floorTitle" @refresh="refresh"
@@ -227,9 +234,17 @@
           //一级循环出来一级标签
           let list = res.Content.filter(i => (i.FirstName !== '工作历') && (i.FirstName !== '能耗信息') && (i.FirstName !== '人员信息'))
           list.map(item => {
-            console.log(item.FirstName)
-            if ((item.InputMode === 'D1' || item.InputMode === 'D2' || item.InputMode === 'E2' || item.InputMode === 'D1L') && item.DataSource != undefined) {
+            // console.log(item.FirstName)
+            if ((item.InputMode === 'D1' || item.InputMode === 'D2' || item.InputMode === 'E2' || item.InputMode === 'D1L') && item.DataSource) {
               item.options = JSON.parse(item.DataSource)
+              if (item.options[0] && item.options[0].Content) {
+                item.props = {
+                  value: 'Code',
+                  label: 'Name',
+                  children: 'Content',
+                  checkStrictly: true
+                }
+              }
             }
             if (first[item.FirstName] && first[item.FirstName].length) {
             } else {
@@ -248,6 +263,7 @@
                 SecondName: item.SecondName ? item.SecondName : "",
                 InputMode: item.InputMode,
                 options: item.options,
+                props:item.props,
                 Unit: item.Unit,
                 Path: item.Path
               })
@@ -308,6 +324,7 @@
       },
       addFloor() {
         this.curFloorId = "";
+        this.floorTitle = "添加楼层";
         this.$refs.addFloorDialog.showDialog();
       },
       // 获取列表

+ 10 - 6
src/views/relation/data/index.vue

@@ -19,7 +19,9 @@
     </div>
     <el-row :gutter="24">
       <el-col :span="12">
-        <p class="border-left-8">标准数字化交付数据(数据中心)→(物理世界)项目实际数据</p>
+        <p class="border-left-8">
+          <span class="iconfont icon-juxing"></span>
+          标准数字化交付数据(数据中心)→(物理世界)项目实际数据</p>
         <el-table
             :data="margeData(dataCenter)"
             stripe
@@ -39,7 +41,9 @@
         </el-table>
       </el-col>
       <el-col :span="12" style="padding-left: 0">
-        <p class="border-left-8">项目实际数据(物理世界)→(数据中心)标准数字化交付数据</p>
+        <p class="border-left-8">
+          <span class="iconfont icon-juxing"></span>
+          项目实际数据(物理世界)→(数据中心)标准数字化交付数据</p>
         <el-table
             :data="margeData(dataPlatForm)"
             stripe
@@ -170,10 +174,10 @@
   .container {
     overflow-x: hidden;
     .border-left-8 {
-      border-left: 8px solid black;
-      margin: 10px 0;
+      /*border-left: 8px solid black;*/
+      margin: 10px 0 10px -4px;
       font-weight: 600;
-      text-indent: 10px;
+      /*text-indent: 10px;*/
     }
 
     .banner {
@@ -204,4 +208,4 @@
     }
   }
 
-</style>
+</style>