浏览代码

Merge branch 'dev'

zhangyu 5 年之前
父节点
当前提交
1401a3e584

+ 136 - 51
src/components/model/file/versionDialog.vue

@@ -6,22 +6,53 @@
         <span style="marginLeft:30px;">上传时间:{{versionData.acceptTime}}</span>
         <p style="marginTop:15px;">更新内容:</p>
         <div v-if="Object.keys(versionData.createData).length || Object.keys(versionData.deleteData).length">
+          <!-- 新增设备概要内容 -->
           <el-divider v-if="Object.keys(versionData.createData).length">新增设备概要内容</el-divider>
           <p v-if="Object.keys(versionData.createData).length" style="marginBottom:10px;">于【{{versionData.acceptTime}}】上传模型文件,新增设备实例如下:</p>
           <p v-for="(item, key) in versionData.createData" :key="'C'+key">【{{mapType[key]}}】:【{{item.length}}】个</p>
-          <el-divider v-if="Object.keys(versionData.deleteData).length">[{{Object.keys(versionData.deleteData).length}}]删除设备概要内容</el-divider>
+          <!-- 删除设备概要内容 -->
+          <el-divider v-if="Object.keys(versionData.deleteData).length">删除设备概要内容</el-divider>
           <p v-if="Object.keys(versionData.deleteData).length" style="marginBottom:10px;">于【{{versionData.acceptTime}}】上传模型文件,删除设备实例如下:</p>
           <p v-for="(item, key) in versionData.deleteData" :key="'D'+key">【{{mapType[key]}}】:【{{item.length}}】个</p>
+          <!-- 土建设备概要内容 -->
+          <el-divider v-if="versionData.buildList.length">土建设备概要内容</el-divider>
+          <p v-if="versionData.buildList.length" style="marginBottom:10px;">于【{{versionData.acceptTime}}】上传模型文件,增删土建设备实例如下:</p>
+          <p v-if="versionData.createWall.length">【新增实体墙】:【{{versionData.createWall.length}}】个</p>
+          <p v-if="versionData.deleteWall.length">【删除实体墙】:【{{versionData.deleteWall.length}}】个</p>
+          <p v-if="versionData.createVirtualWall.length">【新增虚拟墙】:【{{versionData.createVirtualWall.length}}】个</p>
+          <p v-if="versionData.deleteVirtualWall.length">【删除虚拟墙】:【{{versionData.deleteVirtualWall.length}}】个</p>
+          <p v-if="versionData.createColumn.length">【新增柱体】:【{{versionData.createColumn.length}}】个</p>
+          <p v-if="versionData.deleteColumn.length">【删除柱体】:【{{versionData.deleteColumn.length}}】个</p>
+          <!-- 新增设备 -->
           <el-divider v-if="Object.keys(versionData.createData).length">新增设备</el-divider>
           <div v-for="(item, key) in versionData.createData" :key="'CL'+key">
             <p>【{{mapType[key]}}】</p>
             <p v-for="(obj, i) in item" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;设备全局id:【{{obj.ObjId || "无"}}】;BIMID:【{{obj.BimId || "无"}}】;设备本地编码:【{{obj.LocalId || "无"}}】;设备本地名称:【{{obj.LocalName || "无"}}】;CADID:【{{obj.CadId || "无"}}】;</p>
           </div>
+          <!-- 删除设备 -->
           <el-divider v-if="Object.keys(versionData.deleteData).length">删除设备</el-divider>
           <div v-for="(item, key) in versionData.deleteData" :key="'DL'+key">
             <p>【{{mapType[key]}}】</p>
             <p v-for="(obj, i) in item" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;设备全局id:【{{obj.ObjId || "无"}}】;BIMID:【{{obj.BimId || "无"}}】;设备本地编码:【{{obj.LocalId || "无"}}】;设备本地名称:【{{obj.LocalName || "无"}}】;CADID:【{{obj.CadId || "无"}}】;</p>
           </div>
+          <!-- 新增实体墙 -->
+          <el-divider v-if="versionData.createWall.length">新增实体墙</el-divider>
+          <p v-for="(obj, i) in versionData.createWall" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;Id:【{{obj.ObjId || "无"}}】;</p>
+          <!-- 删除实体墙 -->
+          <el-divider v-if="versionData.deleteWall.length">删除实体墙</el-divider>
+          <p v-for="(obj, i) in versionData.deleteWall" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;Id:【{{obj.ObjId || "无"}}】;</p>
+          <!-- 新增虚拟墙 -->
+          <el-divider v-if="versionData.createVirtualWall.length">新增虚拟墙</el-divider>
+          <p v-for="(obj, i) in versionData.createVirtualWall" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;Id:【{{obj.ObjId || "无"}}】;</p>
+          <!-- 删除虚拟墙 -->
+          <el-divider v-if="versionData.deleteVirtualWall.length">删除虚拟墙</el-divider>
+          <p v-for="(obj, i) in versionData.deleteVirtualWall" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;Id:【{{obj.ObjId || "无"}}】;</p>
+          <!-- 新增柱体 -->
+          <el-divider v-if="versionData.createColumn.length">新增柱体</el-divider>
+          <p v-for="(obj, i) in versionData.createColumn" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;Id:【{{obj.ObjId || "无"}}】;</p>
+          <!-- 删除柱体 -->
+          <el-divider v-if="versionData.deleteColumn.length">删除柱体</el-divider>
+          <p v-for="(obj, i) in versionData.deleteColumn" :key="obj.Id">【{{i+1}}】、建筑:【{{obj.BuildingName || "无"}}】;楼层:【{{obj.FloorName || "无"}}】;Id:【{{obj.ObjId || "无"}}】;</p>
         </div>
         <div v-else>
           <div style="height: 60%;transform: translateY(50%);font-weight: normal;font-size: 12px;text-align: center;color: #909399;">
@@ -60,13 +91,25 @@ export default {
     return {
       title: "版本文件信息",
       loading: true,
+      logData: [],
       versionData: {
         userName: '',
         acceptTime: '',
         createData: {},
-        deleteData:{}
+        deleteData: {},
+        buildList: [],
+        createWall: [],
+        deleteWall: [],
+        createVirtualWall: [],
+        deleteVirtualWall: [],
+        createColumn: [],
+        deleteColumn: [],
+      },
+      mapType: {
+        'Wall': '实体墙',
+        'VirtualWall': '虚拟墙',
+        'Column': '柱体',
       },
-      mapType: { },
     }
   },
   mounted() { },
@@ -81,9 +124,13 @@ export default {
         this.versionData.userName = this.modelFile.UserName;
         this.versionData.acceptTime = this.modelFile.AcceptTime;
         let promise1 = new Promise((resolve, reject) => {
-            querySyncLogCount({Filters: `ModelId='${this.modelFile.CurrentModelId?this.modelFile.CurrentModelId:this.modelFile.Id}'`}, res => {
-                resolve(res)
-            })
+          querySyncLogCount({
+            Filters: `ModelId='${this.modelFile.CurrentModelId?this.modelFile.CurrentModelId:this.modelFile.Id}'`,
+            PageNumber: 1,
+            PageSize: 1000,
+          }, res => {
+              resolve(res)
+          })
         })
         let promise2 = new Promise((resolve, reject) => {
             getAllEqPaType({}, res => {
@@ -91,62 +138,92 @@ export default {
             })
         })
         Promise.all([promise1, promise2]).then(values => {
-          let versionData = values[0].Content, typeList = values[1].Content;
+          let typeList = values[1].Content;
+          this.logData = values[0].Content;
           typeList.forEach(item => {
             this.mapType[item.Code] = item.Name;
           });
-          console.log(this.mapType)
-          versionData.forEach(item => {
-            if(item.Operation){
-              if(this.versionData.createData[item.Type]){
-                this.versionData.createData[item.Type].push(item);
-              } else {
-                this.versionData.createData[item.Type] = [];
-                this.versionData.createData[item.Type].push(item);
-              }
-            } else {
-              if(this.versionData.deleteData[item.Type]){
-                this.versionData.deleteData[item.Type].push(item);
-              } else {
-                this.versionData.deleteData[item.Type] = [];
-                this.versionData.deleteData[item.Type].push(item);
-              }
-            }
-          });
-          this.loading = false;
-          this.$forceUpdate();
+          console.log(this.mapType);
+          if (values[0].Total / (values[0].PageSize * values[0].PageNumber) > 1) {
+            this.queryLogData(values[0].PageNumber + 1)
+          } else {
+            this.formatData();
+            this.loading = false;
+            this.$forceUpdate();
+            console.log(this.versionData);
+          }
         })
-        console.log(this.versionData)
       }
     },
+    // 格式化数据
+    formatData () {
+      this.logData.forEach(item => {
+        if (item.Type == 'Wall' || item.Type == 'VirtualWall' || item.Type == 'Column') {
+          this.versionData.buildList.push(item);
+          if (item.Type == 'Wall') {
+            if(item.Operation){//创建
+              this.versionData.createWall.push(item);
+            } else {//删除
+              this.versionData.deleteWall.push(item);
+            }
+          } else if (item.Type == 'VirtualWall') {
+            if(item.Operation){//创建
+              this.versionData.createVirtualWall.push(item);
+            } else {//删除
+              this.versionData.deleteVirtualWall.push(item);
+            }
+          } else if (item.Type == 'Column') {
+            if(item.Operation){//创建
+              this.versionData.createColumn.push(item);
+            } else {//删除
+              this.versionData.deleteColumn.push(item);
+            }
+          }
+        } else {
+          if(item.Operation){//创建
+            if(this.versionData.createData[item.Type]){
+              this.versionData.createData[item.Type].push(item);
+            } else {
+              this.versionData.createData[item.Type] = [];
+              this.versionData.createData[item.Type].push(item);
+            }
+          } else {//删除
+            if(this.versionData.deleteData[item.Type]){
+              this.versionData.deleteData[item.Type].push(item);
+            } else {
+              this.versionData.deleteData[item.Type] = [];
+              this.versionData.deleteData[item.Type].push(item);
+            }
+          }
+        }
+      });
+    },
     // 获取版本信息
     getVersionData() {
       if(this.modelFile.Id || this.modelFile.CurrentModelId){
         this.versionData.userName = this.modelFile.UserName;
         this.versionData.acceptTime = this.modelFile.AcceptTime;
-        querySyncLogCount({Filters: `ModelId='${this.modelFile.CurrentModelId?this.modelFile.CurrentModelId:this.modelFile.Id}'`}, res => {
-          res.Content.forEach(item => {
-            if(item.Operation){
-              if(this.versionData.createData[item.Type]){
-                this.versionData.createData[item.Type].push(item);
-              } else {
-                this.versionData.createData[item.Type] = [];
-                this.versionData.createData[item.Type].push(item);
-              }
-            } else {
-              if(this.versionData.deleteData[item.Type]){
-                this.versionData.deleteData[item.Type].push(item);
-              } else {
-                this.versionData.deleteData[item.Type] = [];
-                this.versionData.deleteData[item.Type].push(item);
-              }
-            }
-          });
+        this.queryLogData();
+      }
+    },
+    queryLogData(pageNum) {
+      pageNum = pageNum ? pageNum : 1
+      let params = {
+        Filters: `ModelId='${this.modelFile.CurrentModelId?this.modelFile.CurrentModelId:this.modelFile.Id}'`,
+        PageNumber: pageNum,
+        PageSize: 1000,
+      }
+      querySyncLogCount(params, res =>{
+        this.logData = this.logData.concat(res.Content);//拼接数据
+        if (res.Total / (res.PageSize * res.PageNumber) > 1) {
+          this.queryLogData(res.PageNumber + 1)
+        } else {
+          this.formatData();
           this.loading = false;
           this.$forceUpdate();
-        })
-        console.log(this.versionData)
-      }
+          console.log(this.versionData)
+        }
+      })
     },
   },
   watch: {
@@ -154,13 +231,21 @@ export default {
       handler() {
         if (this.dialogVisible) {
           this.loading = true;
+          this.logData = [];
           this.versionData = {
             userName: '',
             acceptTime: '',
             createData: {},
-            deleteData:{}
+            deleteData: {},
+            buildList: [],
+            createWall: [],
+            deleteWall: [],
+            createVirtualWall: [],
+            deleteVirtualWall: [],
+            createColumn: [],
+            deleteColumn: [],
           };
-          if(Object.keys(this.mapType).length) {
+          if(Object.keys(this.mapType).length > 3) {
             this.getVersionData();
           } else {
             this.getData();

+ 119 - 88
src/components/point/report/integrateStatistics.vue

@@ -9,7 +9,7 @@
     <!-- 图形图 -->
     <div class="statistics-chart" style="border-top:5px solid #eee;min-height: calc(65% - 3px);">
       <div class="chart-title">共包含原始点位:{{ originalPoint }} 个</div>
-      <div style="padding:15px 10%;line-height:2;">
+      <div style="padding:15px 20px;line-height:2;">
         1点位对多表号功能号:{{ pointData.oneToM.toString() }}
         <br />
         多点位对1表号功能号:{{ pointData.mToOne.toString() }}
@@ -18,7 +18,32 @@
           style="margin:-25px 0 0 50px;background:rgb(121, 187, 255);color:rgb(225, 228, 229);border:none;"></el-button>
       </div>
       <hr style="width:90%;margin-top: 1px;" />
-      <div ref="barchart" class="chart" id="barchart" :style="{height:barChartData.length * 120 + 'px'}"></div>
+      <div ref="barchart" class="" id="barchart" :style="{height:barChartData.length * 120 + 'px'}">
+        <el-row class="barchart-title">
+          <el-col :span="12">
+            <span style="background:#79bbff;"></span>已接入点位 {{pointInSum}}
+          </el-col>
+          <el-col :span="12">
+            <span style="background:#e1e4e5;"></span>未接入点位 {{pointOutSum}}
+          </el-col>
+        </el-row>
+        <div>
+          <div class="source" v-for="t in barChartData" :key="t.Id">
+            <el-row class="source-name">
+              <div :title='t.Name'>{{t.Name}}</div>
+              <div>{{t.Notrelatedall+t.Relatedall}}个原始点位</div>
+            </el-row>
+            <el-row class="source-chart already-in">
+              <el-col :style="{width:(t.widthin>1?t.widthin:1)+'%'}"></el-col>
+              <el-col>{{t.Relatedall}}</el-col>
+            </el-row>
+            <el-row class="source-chart not-in">
+              <el-col :style="{width:(t.widthout>1?t.widthout:1)+'%'}"></el-col>
+              <el-col>{{t.Notrelatedall}}</el-col>
+            </el-row>
+          </div>
+        </div>
+      </div>
     </div>
     <!-- 点位/表号功能号对应总览 -->
     <pointTabOverview ref="overviewDialog"></pointTabOverview>
@@ -43,8 +68,6 @@ export default {
     return {
       //环形图
       loopChart: null,
-      //条形图
-      barChart: null,
       //环形图数据
       loopChartData: [],
       //条形图数据
@@ -57,7 +80,9 @@ export default {
         disConn: 0//可能断数数量
       },
       //原始点数量
-      originalPoint: null
+      originalPoint: null,
+      pointInSum: 0, //左侧柱形图已接入
+      pointOutSum: 0, //左侧柱形图未接入
     };
   },
   methods: {
@@ -132,8 +157,8 @@ export default {
               avoidLabelOverlap: false,
               legendHoverLink: false,
               selectedOffset: 0,
-              label:{
-                  color:'rgb(121, 187, 255)',
+              label: {
+                color: 'rgb(121, 187, 255)',
               },
               emphasis: {
                 itemStyle: {
@@ -168,7 +193,22 @@ export default {
 
       //获取条形图数据
       getIntegrateStatisticsToBar({}, res => {
-        this.barChartData = res.Content;
+        let max = 1;
+        res.Content.forEach(t => {
+          this.pointInSum += t.Relatedall;
+          this.pointOutSum += t.Notrelatedall;
+          if (t.Relatedall > max) {
+            max = t.Relatedall
+          }
+          if (t.Notrelatedall > max) {
+            max = t.Notrelatedall
+          }
+        })
+        this.barChartData = res.Content.map(t => {
+          t.widthin = ((t.Relatedall / max) * 0.8).toFixed(2) * 100
+          t.widthout = ((t.Notrelatedall / max) * 0.8).toFixed(2) * 100
+          return t;
+        });
         this.originalPoint = (() => {
           let sum = 0;
           this.barChartData.map(item => {
@@ -176,71 +216,6 @@ export default {
           });
           return sum;
         })();
-
-        //条形图参数
-        let barOption = {
-          tooltip: {
-            trigger: "axis",
-            axisPointer: {
-              // 坐标轴指示器,坐标轴触发有效
-              type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
-            }
-          },
-          color: ['rgb(121, 187, 255)', 'rgb(225, 228, 229)'],
-          legend: {
-            data: ["已接入", "未接入"]
-          },
-          grid: {
-            left: "3%",
-            right: "4%",
-            bottom: "3%",
-            containLabel: true
-          },
-          xAxis: [
-            {
-              type: "value",
-              position: "top"
-            }
-          ],
-          yAxis: [
-            {
-              type: "category",
-              axisTick: { show: false },
-              data: this.barChartData.map(item => item.Name)
-            }
-          ],
-          series: [
-            {
-              name: "已接入",
-              type: "bar",
-              label: {
-                normal: {
-                  show: true,
-                  position: "inside"
-                }
-              },
-              data: this.barChartData.map(item => item.Relatedall)
-            },
-            {
-              name: "未接入",
-              type: "bar",
-              stack: "总量",
-              label: {
-                normal: {
-                  show: true
-                }
-              },
-              data: this.barChartData.map(item => item.Notrelatedall)
-            }
-          ]
-        };
-
-        /* 条形图高度随数量变化,延时初始化 */
-        let that = this;
-        setTimeout(() => {
-          that.barChart = echarts.init(document.getElementById("barchart"));
-          that.barChart.setOption(barOption);
-        }, 100);
       });
     },
     //点位/表号
@@ -258,8 +233,6 @@ export default {
     window.onresize = () => {
       if (that.loopChart != null)
         that.loopChart.resize();
-      if (that.barChart != null)
-        that.barChart.resize();
     };
   },
   components: {
@@ -271,18 +244,76 @@ export default {
 <style lang="less" scoped>
 #integrateStatistics {
   border-top: 5px solid #eee;
-}
-.statistics-chart {
-  min-height: calc(35% - 3px);
-}
-.chart-title {
-  padding: 5px 5%;
-  font-size: 16px;
-  font-weight: 500;
-}
-.chart {
-  min-height: 200px;
-  height: auto;
-  width: 100%;
+  .statistics-chart {
+    min-height: calc(35% - 3px);
+    .chart-title {
+      padding: 5px 20px;
+      font-size: 16px;
+      font-weight: 500;
+    }
+  }
+  .chart {
+    min-height: 200px;
+    height: auto;
+    width: 100%;
+  }
+  #barchart {
+    font-size: 12px;
+    .barchart-title {
+      margin: 15px 0;
+      .el-col {
+        padding-left: 20px;
+        span {
+          display: inline-block;
+          width: 14px;
+          height: 14px;
+          margin: 0 10px -2px 0;
+        }
+      }
+    }
+    .source {
+      margin-bottom: 15px;
+      .source-name {
+        margin-bottom: 15px;
+        div {
+          float: left;
+          box-sizing: border-box;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          white-space: nowrap;
+          &:nth-child(1) {
+            width: 65%;
+            padding-left: 20px;
+          }
+          &:nth-child(2) {
+            width: 35%;
+            text-align: right;
+            padding-right: 20px;
+          }
+        }
+      }
+      .source-chart {
+        box-sizing: border-box;
+        padding: 0 20px;
+        .el-col {
+          height: 30px;
+          &:nth-child(2) {
+            padding-left: 10px;
+            width: 20%;
+          }
+        }
+        &.already-in {
+          .el-col:nth-child(1) {
+            background: #79bbff;
+          }
+        }
+        &.not-in {
+          .el-col:nth-child(1) {
+            background: #e1e4e5;
+          }
+        }
+      }
+    }
+  }
 }
 </style>

+ 25 - 0
src/framework/style/layout.scss

@@ -17,7 +17,32 @@ body {
     width: 100%;
     height: 100%;
 }
+/*---滚动条默认显示样式--*/
+::-webkit-scrollbar-thumb{
+    height:50px;
+    outline-offset:-2px;
+    outline:2px solid #dddee0;
+    border: 2px solid #dddee0;
+    background-color: #dddee0;
+    border-radius: 4px;
+}
+
+/*---鼠标点击滚动条显示样式--*/
+::-webkit-scrollbar-thumb:hover{
+    height:50px;
+}
+
 
+/*---滚动条大小--*/
+::-webkit-scrollbar{
+    width:8px;
+    height:8px;
+}
+
+/*---滚动框背景样式--*/
+::-webkit-scrollbar-track-piece{
+    
+}
 #page-main {
     width: 100%;
     height: 100%;