Pārlūkot izejas kodu

模型质量报告、数据质量报告

yangjunjing 5 gadi atpakaļ
vecāks
revīzija
4e2ec66a79

+ 7 - 0
src/api/model/report.js

@@ -3,18 +3,25 @@ import { Message } from 'element-ui';
 import axios from 'axios'
 const baseUrl = '/modelapi';
 
+// 导出模型问题报告
 export function exportReport(params, success) {
     httputils.postJson(`${baseUrl}/upload-json-zip/upload`, params, success)
 }
 
+// 查询楼层列表
 export function queryFloorList(params, success) {
     return httputils.postJson(`${baseUrl}/model-floor/query-list`, params, success)
 }
 
+// 获取项目下所有模型文件夹
 export function queryModel(params, success) {
     return httputils.postJson(`${baseUrl}/model-folder/query`, params, success)
 }
 
 export function queryReportList(params, success) {
     return httputils.postJson(`${baseUrl}/report/list/non-blocking`, params, success)
+}
+
+export function queryLostReportList(params, success) {
+    return httputils.postJson(`${baseUrl}/model-floor/query-list-missing`, params, success)
 }

+ 6 - 0
src/api/scan/request.js

@@ -1617,6 +1617,12 @@ export function notSyncRelationData(param, success) {
     http.postJson(url, param, success)
 }
 
+// 不能同步到物理世界的对象
+export function notSyncObject(param, success) {
+    let url = `${baseUrl}/equip-component/dict-custom/data-count`
+    http.postJson(url, param, success)
+}
+
 // 岗位和关联的资产信息点值不一致
 export function postRelationInforAtpism(param, success) {
     let url = `${baseUrl}/datacenter//statistics/eq2pe-count`

+ 12 - 5
src/views/ledger/report/index.vue

@@ -5,28 +5,28 @@
         <li>
           <p class="list-num">
             <i class='el-icon-s-order'></i>
-            {{lederDelObjectCount}}
+            {{lederDelObjectCount?lederDelObjectCount:'0'}}
           </p>
           <p class="list-text">台账中待删除的对象</p>
         </li>
         <li>
           <p class="list-num">
             <i class="el-icon-s-help"></i>
-            {{22}}
+            {{notSyncObjectCount?notSyncObjectCount:'0'}}
           </p>
           <p class="list-text">不能同步到物理世界的对象</p>
         </li>
         <li>
           <p class="list-num">
             <i class="el-icon-s-marketing"></i>
-            {{notSyncDataCount}}
+            {{notSyncDataCount?notSyncDataCount:'0'}}
           </p>
           <p class="list-text">不能同步到物理世界的关系数据</p>
         </li>
         <li>
           <p class="list-num">
             <i class="el-icon-s-release"></i>
-            {{postRelationInforCount}}
+            {{postRelationInforCount?postRelationInforCount:'0'}}
           </p>
           <p class="list-text">岗位和关联的资产信息点值不一致</p>
         </li>
@@ -120,6 +120,7 @@ import { mapGetters } from "vuex";
 import {
   getCenoteType,
   queryLederDelObject,
+  notSyncObject,
   notSyncRelationData,
   postRelationInforAtpism,
   countEquip,
@@ -144,6 +145,7 @@ export default {
   data() {
     return {
       lederDelObjectCount: null,// 台账中待删除的对象
+      notSyncObjectCount: null,// 不能同步到物理世界的对象
       notSyncDataCount: null,// 不能同步到物理世界的关系数据
       postRelationInforCount: null,// 岗位和关联的资产信息点值不一致
       equipCount: null,// 设备总数
@@ -247,7 +249,6 @@ export default {
     this.getPartsCount();
     this.getSystemCount();
     this.getTenantCount();
-    // this.getShaftCount();
     this.getShaftFunType();
   },
   computed: {
@@ -326,6 +327,9 @@ export default {
       })
 
       // 不能同步到物理世界的对象
+      notSyncObject(this.params, res => {
+        this.notSyncObjectCount = res.Count;
+      })
 
       // 不能同步到物理世界的关系数据
       notSyncRelationData(this.params, res => {
@@ -337,6 +341,9 @@ export default {
         this.postRelationInforCount = res.Count;
       })
     },
+    getNotSyncObject() {
+
+    },
     getEquipCount() {// 获取设备总数
       countEquip(this.params, res => {
         this.equipCount = res.Count;

+ 168 - 57
src/views/model/report/index.vue

@@ -17,9 +17,7 @@
           <template v-for="(item,index) in tableList">
             <el-tab-pane :name="item.Code" :key="index" :label="item.Name">
               <span slot="label">
-                <!-- <i :class="iconClassMap[scope.row.Type]?iconClassMap[scope.row.Type]:'msg-icon el-icon-warning warning-color'"
-                  style="font-size:14px;"></i>-->
-                <i :class="'msg-icon el-icon-error error-color'" style="font-size:14px;"></i>
+                <i :class="floorIconType?'msg-icon el-icon-error error-color':'msg-icon el-icon-success success-color'" style="font-size:14px;"></i>
                 <span>{{ item.Name }}</span>
               </span>
             </el-tab-pane>
@@ -35,20 +33,90 @@
         <div class="table" style="width: 100%;height: calc(100% - 47px)">
           <el-table ref="multipleTable" :data="tableData" stripe height="100%" :header-cell-style="headerStyle" v-loading='loading'>
             <el-table-column prop="FloorName" label="模型楼层" fixed width="150"></el-table-column>
-            <el-table-column prop="functionNo" label="待删除设备数量" fixed width="150"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label="待补充设备数量" fixed width="150"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label="有问题的检查项" fixed width="150"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='构件范围检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='设备族编码检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='部件所在位置检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='柱边界检查' width="200"></el-table-column>
-            <el-table-column prop="ConnectorCheck" label='连接件检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='系统类型名称检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='未在空间中的设备' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='管段检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='管网及相关设备检查' width="200"></el-table-column>
-            <el-table-column prop="functionNoDynamicData" label='Revit族参数完整性检查' width="200"></el-table-column>
-            <el-table-column prop="XyzOverlapCheck" label='xyz坐标重叠检查' width="200"></el-table-column>
+            <el-table-column prop="functionNo" label="待删除设备数量" fixed width="150">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.toBeDel" class="item" :type='scope.row.toBeDel?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="" label="待补充设备数量" fixed width="150">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.toBeSupplement" class="item" :type='scope.row.toBeSupplement?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="itemsProblemsCheck" label="有问题的检查项" fixed width="150">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.itemsProblemsCheck" class="item" :type='scope.row.itemsProblemsCheck?"warning":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="ElementRangeCheck" label='构件范围检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.ElementRangeCheck" class="item" :type='scope.row.ElementRangeCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="FamilyNameCheck" label='设备族编码检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.FamilyNameCheck" class="item" :type='scope.row.FamilyNameCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="EquipPartLocationCheck" label='部件所在位置检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.EquipPartLocationCheck" class="item" :type='scope.row.EquipPartLocationCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="ColumnCheck" label='柱边界检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.ColumnCheck" class="item" :type='scope.row.ColumnCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="ConnectorCheck" label='连接件检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.ConnectorCheck" class="item" :type='scope.row.ConnectorCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="SystemNameCheck" label='系统类型名称检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.SystemNameCheck" class="item" :type='scope.row.SystemNameCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="EquipInSpaceCheck" label='未在空间中的设备' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.EquipInSpaceCheck" class="item" :type='scope.row.EquipInSpaceCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="PipeCheck" label='管段检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.PipeCheck" class="item" :type='scope.row.PipeCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="SystemReferEquipCheck" label='管网及相关设备检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.SystemReferEquipCheck" class="item" :type='scope.row.SystemReferEquipCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="ParameterIntegrityCheck" label='Revit族参数完整性检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.ParameterIntegrityCheck" class="item" :type='scope.row.ParameterIntegrityCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
+            <el-table-column prop="XyzOverlapCheck" label='xyz坐标重叠检查' width="200">
+              <template slot-scope="scope">
+                <el-badge :value="scope.row.XyzOverlapCheck" class="item" :type='scope.row.XyzOverlapCheck?"danger":"success"'>
+                </el-badge>
+              </template>
+            </el-table-column>
             <template slot="empty">
               <div style="height: 60%;transform: translate(-22%,50%);">
                 <i class="icon-wushuju iconfont"></i>
@@ -69,7 +137,7 @@
 import { mapGetters } from "vuex";
 import dasBoard from "@/views/dasboard/index";
 import request from "@/api/model/file.js";
-import { exportReport, queryFloorList, queryModel, queryReportList } from "@/api/model/report.js";
+import { exportReport, queryFloorList, queryModel, queryReportList, queryLostReportList } from "@/api/model/report.js";
 export default {
   components: {
     dasBoard
@@ -88,10 +156,6 @@ export default {
         color: '#2b2b2b',
         lineHeight: '30px'
       },
-      iconClassMap: { // 模型文件夹icon映射
-        "Success": "msg-icon el-icon-success success-color",
-        "Error": "msg-icon el-icon-error error-color",
-      },
       page: {
         pageSize: 50,
         pageSizes: [10, 20, 50, 100],
@@ -104,7 +168,8 @@ export default {
         Bary: [],
         Fary: [],
         regex: /^(B||F)(\d)/
-      }
+      },
+      floorIconType: null
     }
   },
   mounted() { },
@@ -119,7 +184,7 @@ export default {
     ...mapGetters('layout', ['projectId'])
   },
   methods: {
-    getlostFloors(ary, eng, FloorName) {
+    getlostFloors(ary, eng, FloorName) {// 获取缺失楼层
       let newAry = ary[0];
       if (newAry.FloorName !== '1') {
         ary.unshift({ FloorName: `${1}` })
@@ -166,7 +231,7 @@ export default {
         this.getModelFloor();
       });
     },
-    getModelFloorCount() {
+    getModelFloorCount() {// 获取楼层模型文件数量,计算出检查出问题的模型文件
       queryFloorList(this.params, res => {
         this.modelFloorCount = res.Total;
         res.Content.map(item => {
@@ -185,52 +250,98 @@ export default {
       //   console.log(res,3958)
       // });
     },
-    getData(tab) {
-      // 切换tab时执行
+    getData(tab) {// 切换tab时执行
       this.getExportReport();
       this.getModelFloor();
     },
     getModelFloor() {// 获取当前楼层下的模型楼层
       let params = {
         ProjectId: this.projectId,
-        Id: `${this.activeTab}`
+        Id: `${this.activeTab}`,
+        PageNumber: this.page.pageNumber,
+        PageSize: this.page.pageSize
       }
       queryReportList(params, res => {
-        let FloorName = res.Content;
-        let that = this;
-        if (res.Content.length > 1) {
-          res.Content.map(item => {
-            // this.tableData = [];
-            // let FloorN = item.FloorName;
-            // if (this.lostFloort.regex.test(FloorN)) {
-            //   FloorN.replace(/^(B||F)(\d)/, function (a, b, c) {
-            //     if (b === "B") {
-            //       item.FloorName = c;
-            //       that.lostFloort.Bary.push(item);
-            //     } else if (b === "F") {
-            //       item.FloorName = c;
-            //       that.lostFloort.Fary.push(item);
-            //     }
-            //   })
-            // } else {
-            //   that.lostFloort.ary.push(item)
-            // }
-          })
-          this.tableData = [];
-          console.log(this.lostFloort.Bary, 12)
-          console.log(this.lostFloort.Fary, 14)
+        if (res.Content) {
+          let that = this;
+          this.FloorName = res.Content;
+          this.lostFloort.ary = [];
+          this.lostFloort.Bary = [];
+          this.lostFloort.Fary = [];
+          for (let i = 0; i < this.FloorName.length; i++) {
+            let it = this.FloorName[i];
+            if (this.lostFloort.regex.test(it.FloorName)) {
+              it.FloorName.replace(/^(B||F)(\d)/g, function (a, b, c) {
+                if (b === "B") {
+                  it.FloorName = c;
+                  that.lostFloort.Bary.push(it);
+                } else if (b === "F") {
+                  it.FloorName = c;
+                  that.lostFloort.Fary.push(it);
+                }
+              })
+            } else {
+              this.lostFloort.ary.push(it)
+            }
+          }
           if (this.lostFloort.Bary.length > 0) {
-            this.getlostFloors(this.lostFloort.Bary, "B", FloorName);
+            this.getlostFloors(this.lostFloort.Bary, "B", this.FloorName)
           }
           if (this.lostFloort.Fary.length > 0) {
-            this.getlostFloors(this.lostFloort.Fary, "F", FloorName);
+            this.getlostFloors(this.lostFloort.Fary, "F", this.FloorName)
           }
-          this.tableData = [...this.lostFloort.ary, ...this.lostFloort.Bary, ...this.lostFloort.Fary];
+          if (this.lostFloort.Bary.length < 0 && this.lostFloort.Fary.length < 0) {
+            this.tableData = res.Content;
+          } else {
+            this.tableData = [...this.lostFloort.ary, ...this.lostFloort.Bary, ...this.lostFloort.Fary]
+          }
+          let i;
+          let j = 0;
+          this.tableData.map(item => {
+            i = 0;
+            for (let key in item) {
+              if (item[key] > 0) {
+                i += 1;
+              }
+            }
+            if (item.ColumnCheck !== undefined) {
+              item.itemsProblemsCheck = i;
+              item.toBeDel = 10;
+              item.toBeSupplement = 6;
+            }
+            if (item.itemsProblemsCheck) {
+              j += 1;
+              this.floorIconType = j;
+            }
+          })
         } else {
-          this.tableData = res.Content;
+          this.tableData = [];
         }
+        this.getLostModelFloor();
       })
     },
+    getLostModelFloor() {
+      let param = {
+        ProjectId: this.projectId,
+        Filters: `FolderId=${this.activeTab};Status=4`,
+        PageNumber: this.page.pageNumber,
+        PageSize: this.page.pageSize
+      }
+      // queryLostReportList(param, res => {
+      //   console.log(res, 'lost');
+      //   this.LostFloorName = res.Content;
+      //   for (let i = 0; i < this.LostFloorName.length; i++) {
+      //     for (let j = 0; j < this.FloorName.length; j++) {
+      //       if (this.LostFloorName[i].FloorName == this.FloorName.FloorName) {
+      //         continue;
+      //       } else {
+      //         this.FloorName.splice(i, 0, this.LostFloorName[i])
+      //       }
+      //     }
+      //   }
+      //   this.tableData = this.FloorName;
+      // })
+    },
     del() {
       // 点击需从模型中删除的设备
       let jumpRouter = this.$router.resolve({ path: '/model/report/deleted' })
@@ -244,12 +355,12 @@ export default {
     // 切换每页显示数量
     handleSizeChange(val) {
       this.page.pageSize = val;
-      // this.getTableData();
+      this.getModelFloor();
     },
     // 切换页码
     handleCurrentChange(val) {
       this.page.pageNumber = val;
-      // this.getTableData();
+      this.getModelFloor();
     },
   }
 }