Browse Source

模型质量报告

yangjunjing 5 years ago
parent
commit
4f4ae298dd

+ 1 - 1
src/components/echarts/doughnut.vue

@@ -1,5 +1,5 @@
 <template>
-    <div style="width:100%;height:100%;" :id="id">
+    <div style="width:100%;height:100%;textAlign:center;" :id="id">
     </div>
 </template>
 <script>

+ 1 - 15
src/components/echarts/fanChart.vue

@@ -1,6 +1,6 @@
 <template>
   <!-- 饼图 -->
-  <div style="width:100%;height:100%;" :id="id">
+  <div style="width:100%;height:100%;textAlign:center;margin:-15px 0;" :id="id">
   </div>
 </template>
 <script>
@@ -73,20 +73,6 @@ export default {
           }
         ]
       }
-      // if(this.type == 'type'){
-      // options.graphic = {
-      //   type: 'text',
-      //   left: 'center',
-      //   top: 'center',
-      //   style: {
-      //     text: `总数${this.sum || ''}`,
-      //     textAlign: 'center',
-      //     fill: '#000',
-      //     width: 30,
-      //     height: 30
-      //   }
-      // }
-      // }
       this.myCharts = echarts.init(document.getElementById(this.id))
       this.myCharts.setOption(options)
     },

+ 94 - 0
src/components/ledger/report/datafan.vue

@@ -0,0 +1,94 @@
+<template>
+  <div class="saga-fill">
+    <div class="mess-view">
+      <el-tooltip class="item" effect="dark" content="Bottom Left 提示文字" placement="bottom-start">
+        <i class="el-icon-info"><span>{{renderData.Name}}</span></i>
+      </el-tooltip>
+    </div>
+    <div class="doughnut-view">
+      <fan-chart v-if="renderData.Sum"></fan-chart>
+      <div v-else class="center">
+        <i class="icon-wushuju iconfont"></i>
+        暂无数据
+      </div>
+    </div>
+    <slot></slot>
+  </div>
+</template>
+
+<script>
+import fanChart from "@/components/echarts/fanChart"
+export default {
+  data() {
+    return {
+      echartsData: []
+    }
+  },
+  created() {
+    this.changeData();
+  },
+  components: {
+    fanChart
+  },
+  methods: {
+    changeData() {
+      this.echartsData = [
+        {
+          name: "已关联:" + this.renderData.Related,
+          value: this.renderData.Related
+        },
+        {
+          name: "未关联:" + this.renderData.Notrelated,
+          value: this.renderData.Notrelated
+        },
+        {
+          name: "未使用:" + this.renderData.Notused,
+          value: this.renderData.Notused
+        },
+      ]
+    }
+  },
+  props: {
+    id: {
+      type: String,
+      default: function createRandomId() {
+        return (Math.random() * 10000000).toString(16).substr(0, 4) + '-' + (new Date()).getTime() + '-' + Math.random().toString().substr(2, 5);
+      }
+    },
+    renderData: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+}
+</script>
+
+<style lang="less">
+.mess-view {
+  box-sizing: border-box;
+  border-bottom: 1px solid #ddd;
+  padding: 10px 20px 10px 15px;
+  .saga-title {
+    font-size: 14px;
+    color: #333;
+    font-weight: 600;
+    line-height: 14px;
+  }
+  i {
+    span {
+      padding-left: 6px;
+    }
+  }
+}
+.saga-fill {
+  width: 100%;
+  .doughnut-view {
+    height: 165px;
+    width: 100%;
+    padding: 0 5px;
+    box-sizing: border-box;
+  }
+}
+</style>

+ 37 - 11
src/components/ledger/report/dataorigin.vue

@@ -1,11 +1,19 @@
 <template>
-  <div class="doughnut-view">
-    <doughnut v-if="renderData.Sum" type="type" width="200" height="200" :sum="renderData.Sum" :name="renderData.Name" :renderData="echartsData"
-      :id="id"></doughnut>
-    <div v-else class="center">
-      <i class="icon-wushuju iconfont"></i>
-      暂无数据
+  <div class="saga-fill">
+    <div class="mess-view">
+      <el-tooltip class="item" effect="dark" content="Bottom Left 提示文字" placement="bottom-start">
+        <i class="el-icon-info"><span>{{renderData.Name}}</span></i>
+      </el-tooltip>
     </div>
+    <div class="doughnut-view">
+      <doughnut v-if="renderData.Sum" type="type" width="200" height="200" :sum="renderData.Sum" :name="renderData.Name" :renderData="echartsData"
+        :id="id"></doughnut>
+      <div v-else class="center">
+        <i class="icon-wushuju iconfont"></i>
+        暂无数据
+      </div>
+    </div>
+    <slot></slot>
   </div>
 </template>
 
@@ -59,11 +67,29 @@ export default {
 </script>
 
 <style lang="less">
-.doughnut-view {
-  background: white;
-  height: 165px;
-  width: 200px;
-  padding: 0 5px;
+.mess-view {
   box-sizing: border-box;
+  border-bottom: 1px solid #ddd;
+  padding: 10px 20px 10px 15px;
+  .saga-title {
+    font-size: 14px;
+    color: #333;
+    font-weight: 600;
+    line-height: 14px;
+  }
+  i {
+    span {
+      padding-left: 6px;
+    }
+  }
+}
+.saga-fill {
+  width: 100%;
+  .doughnut-view {
+    height: 165px;
+    width: 100%;
+    padding: 0 5px;
+    box-sizing: border-box;
+  }
 }
 </style>

+ 2 - 2
src/router/system.js

@@ -162,8 +162,8 @@ export default [{
             },
         ]
     },
-    { path: '/deleted', name: 'deleted', component: deleted },
-    { path: '/supplement', name: 'supplement', component: supplement },
+    { path: '/model/report/deleted', name: 'deleted', component: deleted },
+    { path: '/model/report/supplement', name: 'supplement', component: supplement },
     // 系统集成
     {
         path: '/point',

+ 22 - 31
src/views/ledger/report/index.vue

@@ -33,31 +33,29 @@
       </ul>
     </div>
     <div class="progress">
-      <p>基本统计</p>
+      <p class="basic-statistics">基本统计</p>
       <div class="data equipment">
         <!-- 设备:本期只做前三个 -->
         <span class="contain-title">设备{{}}</span>
         <div class="data-show">
           <div v-for="(item,index) in list" :key="index" class="show-content">
-            <el-tooltip class="item" effect="dark" content="Bottom Center 提示文字" placement="bottom">
-              <i class="el-icon-info"></i>
-              <span>未关联资产</span>
-            </el-tooltip>
             <data-origin :id="'origin' + index" :renderData="item"></data-origin>
           </div>
         </div>
       </div>
       <div class="data assets">
         <span class="contain-title">资产{{}}</span>
-        <div>
-          <fan-chart></fan-chart>
-        </div>
       </div>
       <div class="data parts">
         <span class="contain-title">部件{{}}</span>
       </div>
       <div class="data business-space">
         <span class="contain-title">业务空间{{}}</span>
+        <div class="data-show">
+          <div v-for="(item,index) in list" :key="index" class="show-content">
+            <datafan :id="'origin' + index" :renderData="item"></datafan>
+          </div>
+        </div>
       </div>
       <div class="data system">
         <!-- 系统:本期只查询总数 -->
@@ -75,8 +73,8 @@
 
 <script>
 import dataOrigin from "@/components/ledger/report/dataorigin"
+import datafan from "@/components/ledger/report/datafan"
 import { queryDataSourceCount, synchronizeProj } from "@/fetch/point_http"
-import fanChart from "@/components/echarts/fanChart"
 export default {
   data() {
     return {
@@ -106,7 +104,7 @@ export default {
   },
   components: {
     dataOrigin,
-    fanChart
+    datafan
   },
   mounted() { },
   created() {
@@ -152,41 +150,34 @@ export default {
 }
 .progress {
   width: 100%;
-  p {
+  .basic-statistics {
     border-bottom: 1px dashed #c9c9c9;
     padding-bottom: 10px;
     margin-bottom: 10px;
   }
   .data {
-    overflow: hidden;
     .contain-title {
-      display: block;
-      float: left;
       height: 30px;
-      width: 100%;
       line-height: 30px;
       border-left: 8px solid black;
+      display: inline-block;
       margin: 8px 8px;
       font-weight: 600;
       padding-left: 8px;
       cursor: default;
     }
-    .data-show {
-      width: 100%;
-      display: flex;
-      padding: 10px;
-      box-sizing: border-box;
-      flex-wrap: wrap;
-      margin: 0 10px 10px 0;
-      .show-content {
-        width: 20%;
-        background: white;
-        border: 1px solid  #c9c9c9;
-        padding: 10px;
-        box-sizing: border-box;
-        margin: 0 10px 10px 0;
-      }
-    }
+  }
+}
+.data-show {
+  width: 100%;
+  display: flex;
+  flex-wrap: wrap;
+  .show-content {
+    background: white;
+    width: 15%;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    border: 1px solid #c9c9c9;
   }
 }
 </style>

+ 60 - 22
src/views/model/report/deleted.vue

@@ -7,7 +7,8 @@
           <h4>{{'四位序列号'}}<el-badge value="待删除" class="item"></el-badge>
           </h4>
           <h4>{{"XXXX建筑模型夹"}}-{{"XXX层"}}-{{"待删除设备名称XXXXXXXXXXXXX"}}</h4>
-          <b>BIM ID:{{'XXXXXXX'}}</b>
+          <b>BIM ID:<span @dblclick="copyContent" id="copy">{{'12d13fs13f1sd313'}}</span></b><span class="copy" @click="clickCopy">点击复制</span>
+          <input id="copyContent" type="text" @dblclick="copyContent" style="border:none;opacity:0;position:absolute;top:0;left:0;">
           <p style="margin-top:30px;">Revit族:{{'XXXXXXX'}}</p>
           <p>设计图纸中编码:{{'XXXXXXX'}}</p>
           <p><span>设备类型:{{'XXXXXXX'}}</span><span>设备ID:{{'XXXXXXX'}}</span></p>
@@ -84,29 +85,59 @@ export default {
   },
   mounted() { },
   created() {
-
+    this.PageSetup();
   },
   methods: {
+    copyContent(element) {
+      // 双击复制
+      let content = element.target.innerText;
+      let inputObj = document.getElementById('copyContent');
+      inputObj.value = content;
+      inputObj.select();
+      document.execCommand("Copy");
+      this.$message({
+        message: '复制成功',
+        type: 'success',
+        duration: 1000
+      });
+    },
+    clickCopy() {
+      // 点击复制
+      let target = document.getElementById('copy');
+      let content = target.innerText;
+      let inputObj = document.getElementById('copyContent');
+      inputObj.value = content;
+      inputObj.select();
+      document.execCommand("Copy");
+      this.$message({
+        message: '复制成功',
+        type: 'success',
+        duration: 1000
+      });
+    },
+    PageSetup() {
 
+    }
   }
 }
 </script>
 
-<style lang="less">
-body {
-  width: 100%;
-  height: 100%;
-  background: #f2f2f2;
-}
-</style>
 <style lang="less" scoped>
+// 取消打印功能默认的左右边距
+@media print {
+  @page {
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
 .box {
-  height: 100%;
-  width: 1000px;
+  background: #f2f2f2;
   margin: 0 auto;
   .content-box {
+    width: 1000px;
+    margin: 0 auto;
     background: white;
-    padding: 20px 24px;
+    padding: 10px 4px 10px 20px;
     box-sizing: border-box;
     .content-top {
       display: flex;
@@ -114,6 +145,7 @@ body {
         flex: 1;
       }
       .details {
+        margin-right: 10px;
         .el-badge {
           margin: 10px 0 0 10px;
         }
@@ -124,15 +156,21 @@ body {
             width: 200px;
           }
         }
+        .copy {
+          color: #409eff;
+          margin-left: 20px;
+        }
       }
       .plan {
-        padding: 0 10px;
+        padding-left: 20px;
         box-sizing: border-box;
         p {
           width: 100%;
           margin: 10px 0 10px 0;
           span {
             float: right;
+            padding-right: 20px;
+            box-sizing: border-box;
           }
         }
       }
@@ -140,22 +178,22 @@ body {
     .content-bottom {
       width: 100%;
       margin-top: 20px;
-      display: flex;
-      flex-wrap: wrap;
-      .explain,
-      .photo {
+      overflow: hidden;
+      .photo,
+      .explain {
+        float: left;
         width: 50%;
       }
       .photo {
-        padding: 10px;
-        overflow: hidden;
-        margin-bottom: 20px;
         box-sizing: border-box;
-        p{
+        margin-bottom: 24px;
+        p {
           margin-bottom: 10px;
         }
         span {
           float: right;
+          padding-right: 20px;
+          box-sizing: border-box;
         }
       }
       .explain {
@@ -170,7 +208,7 @@ body {
         .explain-content {
           padding: 10px;
           width: 100%;
-          height: 300px;
+          height: 290px;
           box-sizing: border-box;
         }
       }

+ 27 - 9
src/views/model/report/index.vue

@@ -49,6 +49,10 @@
           </el-table>
         </div>
       </div>
+      <!-- <el-pagination class="right" v-show="tableData && tableData.length" @size-change="handleSizeChange" @current-change="handleCurrentChange" -->
+      <el-pagination class="right" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.pageNumber"
+        :page-sizes="page.pageSizes" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="page.total">
+      </el-pagination>
     </div>
   </div>
 </template>
@@ -77,6 +81,12 @@ export default {
         "Success": "msg-icon el-icon-success success-color",
         "Error": "msg-icon el-icon-error error-color",
       },
+      page: {
+        pageSize: 50,
+        pageSizes: [10, 20, 50, 100],
+        pageNumber: 1,
+        total: 0
+      },
     }
   },
   mounted() { },
@@ -88,18 +98,26 @@ export default {
       // 切换tab时执行
       console.log(tab, 3939)
     },
-    buttonOperation(e) {
-      // 点击顶部按钮的操作
-      console.log(e, 333)
-    },
     del() {
-      let jumpRouter = this.$router.resolve({ path: '/deleted' })
+      // 点击需从模型中删除的设备
+      let jumpRouter = this.$router.resolve({ path: '/model/report/deleted' })
       window.open(jumpRouter.href, '_blank')
     },
     supplement() {
-      let jumpRouter = this.$router.resolve({ path: '/supplement' })
+      // 点击模型待补充的设备
+      let jumpRouter = this.$router.resolve({ path: '/model/report/supplement' })
       window.open(jumpRouter.href, '_blank')
-    }
+    },
+    // 切换每页显示数量
+    handleSizeChange(val) {
+      this.page.pageSize = val;
+      // this.getTableData();
+    },
+    // 切换页码
+    handleCurrentChange(val) {
+      this.page.pageNumber = val;
+      // this.getTableData();
+    },
   }
 }
 </script>
@@ -127,7 +145,7 @@ export default {
   height: calc(100% - 90px);
   background: white;
   .content-box {
-    height: calc(100% - 56px);
+    height: calc(100% - 105px);
     .table {
       margin-top: 15px;
     }
@@ -140,7 +158,7 @@ export default {
     text-decoration: none;
     color: #606266 !important;
     padding: 4px 15px;
-    border: 1px solid #DCDFE6;
+    border: 1px solid #dcdfe6;
     border-radius: 3px;
     margin-right: 10px;
   }

+ 57 - 21
src/views/model/report/supplement.vue

@@ -7,7 +7,8 @@
           <h4>{{'四位序列号'}}<el-badge value="待补充" class="item"></el-badge>
           </h4>
           <h4>{{"XXXX建筑模型夹"}}-{{"XXX层"}}-{{"待删除设备名称XXXXXXXXXXXXX"}}</h4>
-          <b>标记码:{{'XXXXXXX'}}</b>
+          <b>标记码:<span @dblclick="copyContent" id="copy">{{'12d13fs13f1sd313'}}</span></b><span class="copy" @click="clickCopy">点击复制</span>
+          <input id="copyContent" type="text" @dblclick="copyContent" style="border:none;opacity:0;position:absolute;top:0;left:0;">
           <p style="margin-top:30px;">建议使用的Revit族:{{'XXXXXXX'}}</p>
           <p>设计图纸中编码:{{'XXXXXXX'}}</p>
           <p><span>设备类型:{{'XXXXXXX'}}</span><span>设备ID:{{'XXXXXXX'}}</span></p>
@@ -76,26 +77,54 @@ export default {
 
   },
   methods: {
-
+    copyContent(element) {
+      // 双击复制
+      let content = element.target.innerText;
+      let inputObj = document.getElementById('copyContent');
+      inputObj.value = content;
+      inputObj.select();
+      document.execCommand("Copy");
+      this.$message({
+        message: '复制成功',
+        type: 'success',
+        duration: 1000
+      });
+    },
+    clickCopy() {
+      // 点击复制
+      let target = document.getElementById('copy');
+      let content = target.innerText;
+      let inputObj = document.getElementById('copyContent');
+      inputObj.value = content;
+      inputObj.select();
+      document.execCommand("Copy");
+      this.$message({
+        message: '复制成功',
+        type: 'success',
+        duration: 1000
+      });
+    }
   }
 }
 </script>
 
-<style lang="less">
-body {
-  width: 100%;
-  height: 100%;
-  background: #f2f2f2;
-}
-</style>
+
 <style lang="less" scoped>
+// 取消打印功能默认的左右边距
+@media print {
+  @page {
+    margin-left: 0;
+    margin-right: 0;
+  }
+}
 .box {
-  height: 100%;
-  width: 1000px;
+  background: #f2f2f2;
   margin: 0 auto;
   .content-box {
+    width: 1000px;
+    margin: 0 auto;
     background: white;
-    padding: 20px 24px;
+    padding: 10px 4px 10px 20px;
     box-sizing: border-box;
     .content-top {
       display: flex;
@@ -103,6 +132,7 @@ body {
         flex: 1;
       }
       .details {
+        margin-right: 10px;
         .el-badge {
           margin: 10px 0 0 10px;
         }
@@ -113,15 +143,21 @@ body {
             width: 200px;
           }
         }
+        .copy {
+          color: #409eff;
+          margin-left: 20px;
+        }
       }
       .plan {
-        padding: 0 10px;
+        padding-left: 20px;
         box-sizing: border-box;
         p {
           width: 100%;
           margin: 10px 0 10px 0;
           span {
             float: right;
+            padding-right: 20px;
+            box-sizing: border-box;
           }
         }
       }
@@ -129,22 +165,22 @@ body {
     .content-bottom {
       width: 100%;
       margin-top: 20px;
-      display: flex;
-      flex-wrap: wrap;
-      .explain,
-      .photo {
+      overflow: hidden;
+      .photo,
+      .explain {
+        float: left;
         width: 50%;
       }
       .photo {
-        padding: 10px;
-        overflow: hidden;
-        margin-bottom: 20px;
         box-sizing: border-box;
+        margin-bottom: 24px;
         p {
           margin-bottom: 10px;
         }
         span {
           float: right;
+          padding-right: 20px;
+          box-sizing: border-box;
         }
       }
       .explain {
@@ -159,7 +195,7 @@ body {
         .explain-content {
           padding: 10px;
           width: 100%;
-          height: 300px;
+          height: 290px;
           box-sizing: border-box;
         }
       }