Преглед изворни кода

接口完善,实例canvas绘制

LXXXY пре 5 година
родитељ
комит
f8f8ad33f2

+ 20 - 2
src/api/point/request.js

@@ -1,5 +1,5 @@
 import fetch from './fetch'
-import { api } from './config.js'
+import { api, baseUrl } from './config.js'
 import http from './httpUtil'
 import storage from '@/framework/utils/storage'
 
@@ -25,11 +25,17 @@ export function getTabFunNumOverview(param, success) {
 export function getHistoryData(query, param, success) {
     let url = `/data-platform-3/hisdata/batch_query_period_data_by_metfun`
     let ProjectId = storage.get("global_project_selected")
+    let userName = storage.get("user_name")
     url += `?projectId=${ProjectId}`
     for (let key in query) {
         url += `&${key}=${query[key]}`
     }
-    http.postJson(url, param, success)
+    fetch({ url: url, method: 'post', data: param, headers: { 'ProjectId': ProjectId, 'Comming': 'adm', 'Account': userName } }).then((response) => {
+        success(response.data);
+    }).catch(error => {
+        console.error(error);
+    });
+    //http.postJson(url, param, success)
 }
 
 //获取表号功能号的源数据
@@ -54,4 +60,16 @@ export function addTabFunNum(param, success) {
 export function tableFuncRelatedOverview(param, success) {
     let url = `/pointconfig/report/meter-related`
     http.postJson(url, param, success)
+}
+
+//实例中查询设备信息
+export function getEquipByEqID(param, success) {
+    let url = `${baseUrl}/datacenter/equip/query`
+    http.postJson(url, param, success)
+}
+
+//获取楼层信息
+export function getFloorMsgByFloorID(param, success) {
+    let url = `${baseUrl}/datacenter/floor/query`
+    http.postJson(url, param, success)
 }

+ 20 - 6
src/components/point/report/addTabFunNum.vue

@@ -3,7 +3,7 @@
   <div id="addTabFunNum">
     <el-form :model='form' label-width="150px" ref="ruleForm" :rules="rules" style="height:300px;overflow:auto;">
       <el-form-item label="表号-功能号" prop="MeterFunc">
-        <el-input v-model="form.MeterFunc"></el-input>
+        <el-input v-model="form.MeterFunc"  placeholder="请输入表号-功能号"></el-input>
       </el-form-item>
       <el-form-item label="设定采集间隔时间" prop="CollectInterval">
         <el-input v-model="form.CollectInterval" placeholder="设定时间不能小于10s"></el-input>
@@ -11,7 +11,7 @@
       <el-form-item label="值单位" prop="Unit">
         <el-cascader :options='options' v-model='form.Unit'></el-cascader>
       </el-form-item>
-      <el-form-item label="取公式" prop="DataRuleContent">
+      <el-form-item label="取公式" prop="DataRuleContent">
         <el-input type="textarea" placeholder="请输入取值公式" v-model="form.DataRuleContent"></el-input>
       </el-form-item>
       <el-form-item label="" style="text-align:right;">
@@ -48,10 +48,10 @@ export default {
         CollectInterval: [
           { required: true, message: '请输入采集间隔时间', trigger: 'blur' }
         ],
-        DataRuleConten: [
+        Unit: [
           { required: true, message: '请选择值单位', trigger: 'change' }
         ],
-        Unit: [
+        DataRuleContent: [
           { required: true, message: '请填写取直公式', trigger: 'blur' }
         ]
       }
@@ -68,8 +68,22 @@ export default {
           this.form.Unit = this.form.Unit.toString();
           addTabFunNum(this.form, res => {
             if(res.Result && res.Result=="success"){
-              
-              this.$emit('closeDrawer');
+              this.$message({
+                showClose: true,
+                message: '添加成功',
+                type: 'success'
+              });
+              let that = this;
+              that.$emit('reloadData');
+              setTimeout(() => {
+                that.$emit('closeDrawer');
+                that.form =  {
+                  MeterFunc: '',
+                  CollectInterval: '',
+                  DataRuleContent: '',
+                  Unit: '',
+                }
+              },500);
             }
           });
         } else {

+ 6 - 6
src/components/point/report/dataSource.vue

@@ -4,22 +4,22 @@
         <div class="data-item"  v-for="form in forms" :key="form.id">
             <el-form :model="form" label-width="150px">
                 <el-form-item label="数据源名称:">
-                    {{form.Name}}
+                    {{form.Name || '--'}}
                 </el-form-item>
                 <el-form-item label="值单位说明:">
-                    {{form.ValueDescription}}
+                    {{form.ValueDescription || '--'}}
                 </el-form-item>
                 <el-form-item label="原始点位值:">
-                    {{form.Data}}
+                    {{form.Data || '--'}}
                 </el-form-item>
                 <el-form-item label="原始点位描述:">
-                    {{form.Description}}
+                    {{form.Description || '--'}}
                 </el-form-item>
                 <el-form-item label="位置标签:">
-                    {{form.LocationFlag.toString()}}
+                    {{form.LocationFlag.toString() || '--'}}
                 </el-form-item>
                 <el-form-item label="原始值处理规则详情:">
-                    {{form.DataRuleContent}}
+                    {{form.DataRuleContent  || '--'}}
                 </el-form-item>
             </el-form>
         </div>

+ 38 - 17
src/components/point/report/historyChart.vue

@@ -3,7 +3,7 @@
   <div id="historyChart">
     <!-- 精度选择 -->
     <div class="query-area">
-      <span>当下分精度下采集数量:{{ chartData.count }}</span>
+      <span>当下分精度下采集数量:{{ chartData.length }}</span>
       <el-select v-model="selectValue" style="float:right;margin-right:10px;" @change='loadTable()'>
         <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
@@ -37,15 +37,7 @@ export default {
         { value: '1day', label: '1天' },
       ],
       //数据表
-      chartData: {
-        count: 100,//总数
-        data: [
-          { date: '2019/02/01', value: 100 },//横坐标标识 纵坐标值
-          { date: '2019/02/02', value: 200 },
-          { date: '2019/02/03', value: 300 },
-          { date: '2019/02/04', value: 150 },
-        ]
-      }
+      chartData: []
     }
   },
   props: {
@@ -57,20 +49,34 @@ export default {
       let query = {
         secret: this.secret
       };
+      let nowDate = new Date().getTime();
+      let gteDate = 0;
+      if(this.selectValue == '1min' || this.selectValue == '5min'){
+        gteDate = nowDate - 3600 * 1000;
+      }
+      else if(this.selectValue == '15min' || this.selectValue == '30min'){
+        gteDate = nowDate - 24 * 3600 * 1000;
+      }
+      else{
+        gteDate = nowDate - 30 * 24 * 3600 * 1000;
+      }
       let pa = {
         criterias:[
           {
             "met_fun": this.tabFunNum,      //表号功能号
             "period": this.selectValue,
             "receivetime":{
-              "$gte":"20190522000000",
-              "$lt":"20190926000000"
+              "$gte":this.date2String(gteDate),
+              "$lt":this.date2String(nowDate)
             }
           }
         ]
       };
+      //获取历史数据
       getHistoryData(query, pa, res => {
-        // this.chartData = res;
+        console.log(res);
+        this.chartData = res[`${this.tabFunNum}`].Content;
+        console.log(this.chartData);
         //折线图参数
         let lineChartOption = {
           tooltip: {
@@ -82,7 +88,7 @@ export default {
           xAxis: {
             type: 'category',
             boundaryGap: false,
-            data: this.chartData.data.map(item => item.date)
+            data: this.chartData.map(item => item.data_time)
           },
           yAxis: {
             type: 'value',
@@ -107,7 +113,7 @@ export default {
           }],
           series: [
             {
-              name: '历史数据',
+              name: '数值',
               type: 'line',
               smooth: true,
               symbol: 'none',
@@ -124,13 +130,28 @@ export default {
                   color: 'rgb(138,151,123)'
                 }])
               },
-              data: this.chartData.data.map(item => item.value)
+              data: this.chartData.map(item => item.data_value)
             }
           ]
         };
         this.lineChart.setOption(lineChartOption);
       });
-
+    },
+    //时间戳转string
+    date2String(d){
+      let dateString = new Date(d).toLocaleString().split("/");
+      if(dateString[1].length == 1){
+        dateString[1] = '0' + dateString[1];
+      }
+      dateString = dateString.toString();
+      dateString = dateString.split(/(\d\d)/);
+      var r = [];
+      dateString.map((value, key) => {
+          if (key % 2 != 0) {
+              r.push(value);
+          }
+      })
+      return r.join("");
     },
     init() {
       this.lineChart = echarts.init(this.$refs.chart);

+ 1 - 1
src/components/point/report/integrateStatistics.vue

@@ -85,7 +85,7 @@ export default {
         }
         this.loopChartData = [
           { value: res.Content[0].RelatedCount, name: "已对实例数量" },
-          { value: res.Content[0].Sum - res.Content[0].RelatedCount, name: "其他" }
+          { value: res.Content[0].Sum - res.Content[0].RelatedCount, name: "未对应实例数量" }
         ];
 
         //环形图参数

+ 130 - 62
src/components/point/report/objectInstance.vue

@@ -5,25 +5,26 @@
     <div class="obj-item" v-for="form in forms" :key="form.id">
       <el-form :model="form" label-width="150px">
         <el-form-item label="对象类型:">
-          {{form.TypeName}}
+          {{form.TypeName || '--'}}
         </el-form-item>
         <el-form-item label="对象实例本地名称:">
-          {{form.ObjectLocalName}}
+          {{form.ObjectLocalName || '--'}}
         </el-form-item>
         <el-form-item label="对象实例本地编码:">
-          {{form.ObjectLocalCode}}
+          {{form.ObjectLocalCode || '--'}}
         </el-form-item>
         <el-form-item label="对象实例ID:">
-          {{form.ObjectID}}
+          {{form.ObjectID || '--'}}
         </el-form-item>
         <el-form-item label="信息点名称:">
-          {{form.InfomationPointName}}
+          {{form.InfomationPointName || '--'}}
         </el-form-item>
         <el-form-item label="对应值:">
-          {{ reValue }}
+          {{ reValue || '--'}}
         </el-form-item>
         <el-form-item label="对象实例位置图:">
-          <canvas height="200" width="100" class="instanceMap" :id="form.instanceId" v-loading="form.loading"></canvas>
+          <span v-if="!drawCanvas">--</span>
+          <canvas v-else height="300px" width="600" class="instanceMap" :id="form.instanceId" v-loading="form.loading"></canvas>
         </el-form-item>
       </el-form>
     </div>
@@ -34,12 +35,16 @@
 import { mapGetters, mapActions } from 'vuex'
 
 import { SGraphyView } from "@sybotan-web/graphy/lib";
-import { DivideFloorScene, } from "cad-engine"
+import { LocationPointScene, DivideFloorScene } from "cad-engine"
 import { SColor, SPoint } from "@sybotan-web/draw/lib";
 
 import {
-  getTabFunNumObjInstance
+  getTabFunNumObjInstance, getEquipByEqID, getFloorMsgByFloorID
 } from '@/api/point/request'
+import {
+  queryZone
+} from '@/api/scan/request'
+
 export default {
   data() {
     return {
@@ -48,7 +53,10 @@ export default {
       views: [],
       scenes: [],
       loading: true,
-      BSPRelaISPLists: [[]]
+      canvasLoadings: [],
+      BSPRelaISPLists: [[]],
+      refreshCanvas:'',
+      drawCanvas:true
     }
   },
   methods: {
@@ -56,72 +64,131 @@ export default {
     loadObjectInstance() {
       this.loading = true;
       let pa = {
-        Filters: "MeterFuncid='" + this.tabFunNum + "'"
+        Filters: `MeterFuncid='${this.tabFunNum}';Related='true'`//
       };
-
       let that = this;
+      //获取所有实例
       getTabFunNumObjInstance(pa, res => {
         that.loading = false;
         that.forms = res.Content;
+        //清除画布
         that.clearGraphy()
-        //加载canvas
-        // that.forms.map((key, item) => {
-        //   that.views[key] = new SGraphyView('floorCanvas')
-        //   that.scenes[key] = new DivideFloorScene();
-        //   that.forms[key].loading = flase;
+        //实例化所有实例
+        res.Content.map((item, key) => {
+          if (item.ObjectID) {
+
+            that.forms[key].instanceId = item.ObjectID;
+            console.log(item.ObjectID);
+            //设备或者组件
+            if (item.TypeCode == 'Eq' || item.TypeCode == 'Ec') {
+              let pa = {
+                Filters: `EquipID='${item.TypeCode + this.projectId.substring(2) + item.ObjectID}'`
+              }
+              getEquipByEqID(pa, res1 => {
+                console.log(res1);
+                if (res1.Content[0].LocationJson && res1.Content[0].FloorId) {
+                  let param = {
+                    Filters: `FloorId='${res1.Content[0].FloorId}'`
+                  }
+                  getFloorMsgByFloorID(param, res2 => {
+                    // this.clearGraphy();
+                    // that.refreshCanvas = new Date().getTime();
+                    if(!that.views[key]){
+                      that.views[key] = new SGraphyView(`${that.forms[key].instanceId}`)
+                    }
+                    that.views[key].scene = null;
+                    that.scenes[key] = null;
+                    console.log(that.forms[key].instanceId)
+                    that.scenes[key] = new LocationPointScene();
+                    that.canvasLoadings[key] = true;
+
+                    if (res2.Content[0].StructureInfo && res2.Content[0].StructureInfo.FloorMap) {
+                      that.scenes[key].loadUrl(`/image-service/common/file_get?systemId=revit&key=${res2.Content[0].StructureInfo.FloorMap}`).then(() => {
+                        that.forms[key].loading = false;
+                        that.views[key].scene = that.scenes[key];
+                        that.scenes[key].isSpaceSelectable = false;
+                        let canvasOption = {
+                          /** 标记的id  */
+                          Id: res1.Content[0].EquipID,
+                          /** 标记的名称  */
+                          Name: res1.Content[0].EquipName,
+                          /** X坐标 */
+                          X: res1.Content[0].LocationJson.X,
+                          /** Y坐标 */
+                          Y: -res1.Content[0].LocationJson.Y
+                        }
+                        that.scenes[key].addMarker(canvasOption);
+                        that.views[key].fitSceneToView();
+                      })
+                    }
+                  });
+                }
+              })
+            }
+            else if (item.TypeCode == 'Sp') {
+              let pa = {
+                data: {
+                  Filters: `RoomID='${item.TypeCode + this.projectId.substring(2) + item.ObjectID}'`
+                },
+                zone: item.SubTypeCode
+              }
+              queryZone(pa, res1 => {
+                if (res1.Content[0] && res1.Content[0].Outline) {
+                  let param = {
+                    Filters: `FloorId='${res1.Content[0].FloorId}'`
+                  }
+                  getFloorMsgByFloorID(param, res2 => {
+                    // this.clearGraphy();
+                    // that.refreshCanvas = new Date().getTime();
+                    if(!that.views[key]){
+                      that.views[key] = new SGraphyView(`${that.forms[key].instanceId}`)
+                    }
+                    that.views[key].scene = null;
+                    that.scenes[key] = null;
+                    that.scenes[key] = new DivideFloorScene();
+                    that.canvasLoadings[key] = true;
 
-        //   that.scenes[key].loadUrl(`/image-service/common/file_get?systemId=revit&key=${this.FloorMap}`).then(() => {
-        //     that.forms[key].loading = false;
-        //     that.views[key].scene = that.scenes[key];
-        //     let tempArr = that.BSPRelaISPLists[key].map((t, i) => {
-        //       return {
-        //         RoomLocalName: t.RoomLocalName,
-        //         OutLine: t.Outline,
-        //         RoomID: t.RoomID,
-        //         Color: new SColor(colorArr[i % colorArr.length]),
-        //       }
-        //     })
-        //     that.scenes[key].addZoneList(tempArr);
-        //     that.scenes[key].click(that, that.canvasClick)
-        //     that.views[key].fitSceneToView();
-        //     that.views[key].maxScale = that.views[key].scale * 10;
-        //     that.views[key].minScale = that.views[key].scale;
-        //     // that.$refs.canvasFun.everyScale = that.views[key].scale;
-        //   })
-        // });
+                    if (res2.Content[0].StructureInfo && res2.Content[0].StructureInfo.FloorMap) {
+                      that.scenes[key].loadUrl(`/image-service/common/file_get?systemId=revit&key=${res2.Content[0].StructureInfo.FloorMap}`).then(() => {
+                        that.forms[key].loading = false;
+                        that.views[key].scene = that.scenes[key];
+                        that.scenes[key].isSpaceSelectable = false;
+                        let canvasOption = {
+                          RoomLocalName: res1.Content[0].RoomLocalName,
+                          OutLine: res1.Content[0].Outline,
+                          RoomID: res1.Content[0].RoomID,
+                          Color: new SColor('#F9C3C3')
+                        }
+                        that.scenes[key].addZone(canvasOption);
+                        that.views[key].fitSceneToView();
+                      })
+                    }
+                  });
 
+                }
+                else{
+                  this.drawCanvas = false;
+                }
+              });
+            }
+            else {
+              this.drawCanvas = false;
+            }
+          }
+          else {
+            this.drawCanvas = false;
+          }
+        });
       })
     },
-    //清楚画布
+    //清画布
     clearGraphy() {
-      if (this.view) {
+      if (this.views.length) {
         this.views = [];
-        this.scenes = this.scenes.map(item => {
-          item.root.children = null;
-          return item;
-        })
+        // this.scenes.map(())
         this.scenes = [];
       }
-    },
-    // canvas点击事件
-    canvasClick(item, event) {
-      // this.scene.setSpaceSelectable(true);
-      // this.scene.setZoneSelectable(true);
-      // if (this.type == 4) {
-
-      // } else {
-      //   if (item instanceof SpaceItem) {
-      //     this.type = 3;
-      //     this.curZoneItem = {};
-      //     this.scene.setZoneSelectable(false);
-      //   }
-      //   if (item instanceof ZoneItem) {
-      //     this.type = 2;
-      //     this.curZoneItem = item;
-      //     this.scene.setSpaceSelectable(false);
-      //   }
-      // }
-    },
+    }
   },
   mounted() {
     this.loadObjectInstance();
@@ -155,5 +222,6 @@ export default {
   box-shadow: 2px 2px 2px 2px #aaa;
   background-color: white;
   padding: 10px 10px;
+  height: 600px;
 }
 </style>

+ 2 - 8
src/components/point/report/pointTabOverview.vue

@@ -64,14 +64,8 @@ export default {
             })
           }
         };
-        // this.mTOData= mD.map((key,item) => {
-        //   return {
-        //     "MeterFunc": key,
-        //     "DataSource": null,
-        //     "Data":item
-        //   }
-        // });
-        console.log(this.mTOData);
+
+        this.oTMData = [];
         let oD = res.Content[0].OtoM;
         for(let k in oD){
           if(oD[k].MeterList.length > 1){

+ 17 - 10
src/components/point/report/tabFunNumOverview.vue

@@ -62,12 +62,8 @@
       <objectInstance :tabFunNum='drawers[2].objId' :reValue='drawers[2].value'></objectInstance>
     </el-drawer>
     <el-dialog title="新增表号功能号" :visible.sync="drawers[3].drawer">
-      <addTabFunNum @closeDrawer="closeDrawer()"></addTabFunNum>
+      <addTabFunNum @closeDrawer="closeDrawer()" @reloadData="reloadData()"></addTabFunNum>
     </el-dialog>
-
-    <!-- <el-drawer title="新增表号功能号" :visible.sync="drawers[3].drawer" :direction="drawers[3].direction" size="50%">
-            <addTabFunNum @closeDrawer="closeDrawer()"></addTabFunNum>
-        </el-drawer> -->
   </div>
 </template>
 
@@ -110,11 +106,18 @@ export default {
   methods: {
     //抽屉处理
     handleDrawer(row, index) {
-      if (index != 3)
-        this.drawers[index].objId = row.MeterFunc;
-      if (index == 2)
-        this.drawers[index].value = row.Data? row.Data.Data : '';
-      this.drawers[index].drawer = true;
+      if (index == 2){
+        if(row.RelatedInstance > 0){
+          this.drawers[index].value = row.Data? row.Data.Data : '';
+          this.drawers[index].objId = row.MeterFunc;
+          this.drawers[index].drawer = true;
+        }
+      }
+      else{
+        if (index != 3)
+          this.drawers[index].objId = row.MeterFunc;
+        this.drawers[index].drawer = true;
+      }
     },
     //获取统计数据
     getOverViewList() {
@@ -153,6 +156,10 @@ export default {
     closeDrawer() {
       this.drawers[3].drawer = false;
     },
+    //新建自定义后重载页面
+    reloadData(){
+      this.init();
+    },
     init() {
       this.getOverViewList();
     }