Browse Source

修改系统所属建筑楼层关系

haojianlong 5 years ago
parent
commit
ceb894420f

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

@@ -919,6 +919,19 @@ export function queryLinkSys(param, success) {
     http.postJson(url, param, success)
 }
 
+//查询系统信息 - 建筑楼层 - 系统一对多
+export function querySysLinkBuild(param, success) {
+    let url = `${baseUrl}/datacenter/general—system/query-new`;
+    if(param.buildingId){
+        url += `?buildingId=${param.buildingId}`
+    }
+    if(param.floorId){
+        url += `&floorId=${param.floorId}`
+    }
+    http.postJson(url, param.data, success)
+}
+
+
 //设备清单 - 设备关联系统 设备1-n
 export function equipLinkSys(param, success) {
     let url = `${baseUrl}/datacenter/sy-in-eq/link-sy`;
@@ -1053,6 +1066,18 @@ export function getEquipNotInSys(param, success) {
     http.postJson(url, param.data, success)
 }
 
+//创建系统所在建筑关系,系统一对多,覆盖
+export function sysRelateBuild(param, success) {
+    let url = `${baseUrl}/datacenter/sy-in-bd/link-bd`;
+    http.postJson(url, param, success)
+}
+
+//创建系统所在楼层关系,系统一对多,覆盖
+export function sysRelateFloor(param, success) {
+    let url = `${baseUrl}/datacenter/sy-in-fl/link-fl`;
+    http.postJson(url, param, success)
+}
+
 //查询当前系统下的设备
 export function getEquipInSys(param, success) {
     let url = `${baseUrl}/equip-component/equip-query/sys-equip`;

+ 0 - 4
src/components/business_space/newGraphy/graphy.vue

@@ -679,10 +679,6 @@ export default {
     saveSvg() {
       this.view.saveSceneSvg(`${this.buildFloor[1]}.svg`, 6400, 4800);
     },
-    // 保存为svg
-    saveSvg() {
-      this.view.saveSceneSvg(`${this.buildFloor[1]}.svg`, 6400, 4800);
-    },
     // 保存json
     saveJson() {
       this.view.saveFloorJson(`${this.buildFloor[1]}.json`)

+ 58 - 22
src/components/ledger/handsontables/system.vue

@@ -32,7 +32,20 @@
     <details-dialog :iframeSrc="iframeSrc" v-if="myDialog.details" :dialog="myDialog"></details-dialog>
     <system-relevance @close="reset" :id="systemId" :dialog="myDialog"></system-relevance>
     <!-- 不支持的输入方式 -->
-    <editSysfloor ref="editFloor" @handleClickUpdate="handleClickUpdate"></editSysfloor>
+    <el-dialog title="临时维护信息点" :visible.sync="myDialog.update" @close="handleCloseUpdate" width="670px">
+      <el-row>
+        该信息点未定义对应组件,现在维护数据不确定后续是否可用。如确实需要维护,请点击<el-link @click="updateInputShow = true" type="primary" :underline="false">继续维护</el-link>。
+      </el-row>
+      <el-row style="margin-top:20px;" v-show="updateInputShow">
+        <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 8}" placeholder="请输入内容" v-model="updateInput"></el-input>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="myDialog.update = false">取 消</el-button>
+        <el-button type="primary" @click="handleClickUpdate">确 认</el-button>
+      </span>
+    </el-dialog>
+    <!-- 关联楼层 -->
+    <editSysfloor ref="editFloor" @relateSuccess="relateSuccess"></editSysfloor>
     <!-- 新增系统 -->
     <el-dialog title="确定新增系统的类型" :visible.sync="myDialog.addDevice" width="30%">
       <el-row>
@@ -48,7 +61,7 @@
 import {
   BeatchQueryParam,
   getDataDictionary,
-  queryLinkSys,
+  querySysLinkBuild,
   updateGeneralSys,
   deleteGeneralSys
 } from "@/api/scan/request"
@@ -189,17 +202,24 @@ export default {
       this.loading = true
       if (!!this.mess.deviceId) {
         let param = {
-          PageSize: this.page.size,
-          Orders: "createTime desc, SysID desc",
-          PageNumber: this.page.currentPage,
-          Filters: `category='${this.mess.deviceId}'`
+          data: {
+            PageSize: this.page.size,
+            Orders: "createTime desc, SysID desc",
+            PageNumber: this.page.currentPage,
+            Filters: `category='${this.mess.deviceId}'`
+          }
         }
         if (this.mess.buildId == "noKnow") {
-          param.Filters += `;buildingId isNull`
+          param.buildingId = 1;
         } else if (this.mess.buildId && this.mess.buildId != "all") {
-          param.Filters += `;buildingId='${this.mess.buildId}'`
+          param.buildingId = this.mess.buildId;
+        }
+        if (this.mess.floorId == "noKnow") {
+          param.floorId = 1;
+        } else if (this.mess.floorId && this.mess.floorId != "all") {
+          param.floorId = this.mess.floorId;
         }
-        queryLinkSys(param, res => {
+        querySysLinkBuild(param, res => {
           this.loading = false;
           _this.tableData = res.Content;
           _this.copyMain = tools.deepCopy(res.Content);
@@ -284,7 +304,7 @@ export default {
       }
       if (this.showType == "all") {
         data.splice(3, 0, {
-          data: "sysInBuildFloor",
+          data: "BuildingFloorInfoList",
           renderer: text.sysInBuildFloor,
           readOnly: this.onlyRead
         })
@@ -341,7 +361,7 @@ export default {
                         item,
                         head.Path,
                         // child.error ? "表号功能号格式错误" : "表号功能号不存在"
-                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
+                        child.error ? child.value ? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });
@@ -373,6 +393,7 @@ export default {
         columnSorting: true, //添加排序
         sortIndicator: true, //添加排序
         renderAllRows: true,
+        // observeChanges: false,
         // colWidths: 200,
         autoColumnSize: true,
         language: "zh-CN",
@@ -453,6 +474,9 @@ export default {
     },
     //删除资产
     async handleDeleteTableRow() {
+      if (arguments[2] == "ObserveChanges.change") {
+        return;
+      }
       this.$confirm('此操作将删除该系统, 是否继续?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
@@ -517,7 +541,7 @@ export default {
           // this.$message("开发中...")
           this.$router.push({
             path: "/ledger/systemDetail",
-            query: { SysID: infos.SysID, Name: infos.SysLocalName || infos.SysName, SysType:infos.Category }
+            query: { SysID: infos.SysID, Name: infos.SysLocalName || infos.SysName, SysType: infos.Category }
           })
           return false
         //设备二维码图片
@@ -535,25 +559,37 @@ export default {
             this.myDialog.relevance = true
           }
           return false
+        case 'BuildingFloorInfoList':
+          this.$refs.editFloor.showDialog(this.tableData[row.row]);
+          return false
         default:
           break;
       }
       if (!this.onlyRead && showTools.InputModeArr.indexOf(inputMode) == '-1') {
-        // this.updateInfoPoint = val
-        // this.updateInput = tools.dataForKey(this.tableData[row.row], val)
-        // console.log("this is ",this.tableData[row.row])
-        // let floor = tools.dataForKey(this.tableData[row.row], val);
-        this.$refs.editFloor.showDialog(this.tableData[row.row]);
+        this.updateInfoPoint = val
+        this.updateInput = tools.dataForKey(this.tableData[row.row], val)
+        this.myDialog.update = true
       }
     },
+    //关闭临时维护弹窗回调
+    handleCloseUpdate() {
+      this.updateInputShow = false
+      this.updateInfoPoint = ''
+      this.updateInput = ''
+    },
     //更新临时维护信息点
     handleClickUpdate() {
       // this.$message("更新成功");
-      // tools.setDataForKey(this.tableData[this.row], this.updateInfoPoint, this.updateInput)
-      // this.handleUpdataTable([[this.row, this.updateInfoPoint, null, this.updateInput]], "edit")
-      // this.updateInputShow = false
-      // this.myDialog.update = false
-      // this.updateInput = ''
+      tools.setDataForKey(this.tableData[this.row], this.updateInfoPoint, this.updateInput)
+      this.handleUpdataTable([[this.row, this.updateInfoPoint, null, this.updateInput]], "edit")
+      this.updateInputShow = false
+      this.myDialog.update = false
+      this.updateInput = ''
+    },
+    //关联建筑楼层成功
+    relateSuccess(data) {
+      this.tableData[this.row].BuildingFloorInfoList = data
+      // tools.setDataForKey(this.tableData[this.row], "BuildingFloorInfoList", data)
     },
     //获取被筛选掉的行号
     trimmedRows() {

+ 94 - 0
src/components/ledger/lib/buildfloorCascader.vue

@@ -0,0 +1,94 @@
+<template>
+  <el-cascader v-model="value" :options="options" :props="props" clearable ref="elCascader" @remove-tag="removeTag"></el-cascader>
+</template>
+<script>
+import { buildingQuery } from "@/api/scan/request";
+export default {
+  data() {
+    return {
+      value: [],
+      props: {
+        multiple: true,
+        checkStrictly: true,
+        value: 'BuildID',
+        label: 'BuildLocalName',
+        children: 'Floor'
+      },
+      options: []
+    }
+  },
+  props: {
+    SysID: {
+      default: ''
+    }
+  },
+  methods: {
+    getCascader() {
+      let param = {
+        Cascade: [
+          { Name: "floor", Orders: "FloorSequenceID desc" }
+        ],
+        Orders: "BuildLocalName asc",
+        PageNumber: 1,
+        PageSize: 50
+      }
+      buildingQuery(param, res => {
+        res.Content.map(t => {
+          if (t.Floor && t.Floor.length) {
+            t.Floor = t.Floor.map(item => {
+              if (item.FloorID == this.FloorID) return
+              item.BuildID = item.FloorID
+              item.BuildLocalName = item.FloorLocalName || item.FloorName
+              return item
+            }).filter(it => it)
+          }
+        })
+        this.options = res.Content
+      })
+    },
+    getSelectedNodes() {
+      let nodes = this.$refs.elCascader.getCheckedNodes();
+      let arr = [], flag = false, brr = [];
+      if (nodes.length) {
+        nodes.map(t => {
+          let obj = {
+            BuildName: t.pathLabels[0],
+            BuildID: t.path[0]
+          }
+          if (t.path.length > 1) {
+            obj.FloorName = t.pathLabels[1]
+            obj.FloorID = t.path[1]
+          } else {
+            flag = true;
+          }
+          arr.push(obj);
+        })
+        if (flag) {
+          for (let i = 0; i < arr.length; i++) {
+            for (let j = 0; j < arr.length; j++) {
+              if (!arr[i].FloorID && arr[j].FloorID && arr[i].BuildID == arr[j].BuildID) {
+                brr.push(i)
+              }
+            }
+          }
+          arr = arr.map((t, i) => {
+            if (brr.indexOf(i) > -1) {
+              return undefined;
+            }
+            return t;
+          }).filter(item => item);
+        }
+      }
+      return arr;
+    },
+    removeTag(){
+      console.log(arguments)
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.el-cascader {
+  width: 100%;
+}
+</style>

+ 46 - 22
src/components/ledger/lib/editSysFloor.vue

@@ -1,9 +1,9 @@
 <template>
   <el-dialog title="所属建筑楼层" :visible.sync="connectDialogVis" width="50%" id="messageDialog">
     <el-row>
-      <div style="line-height:32px;">添加{{floor.SysLocalName}}所属建筑楼层 : </div>
+      <div style="line-height:32px;">添加{{system.SysLocalName}}所属建筑楼层 : </div>
       <div style="width:70%">
-        <bfCascader ref="bfCascader" :FloorID="floor.FloorID"></bfCascader>
+        <bfCascader ref="bfCascader" :SysID="system.SysID"></bfCascader>
       </div>
     </el-row>
     <span slot="footer" class="dialog-footer">
@@ -13,32 +13,35 @@
   </el-dialog>
 </template>
 <script>
-import bfCascader from '@/components/ready/buildfloor/buildfloorCascader'
-import { createRelationInFloor } from "@/api/scan/request";
+import bfCascader from './buildfloorCascader'
+import { sysRelateBuild, sysRelateFloor } from "@/api/scan/request";
+import { resolve } from 'q';
 export default {
   data() {
     return {
       buildName: '',
       connectDialogVis: false,
-      floor: {}
+      system: {}
     }
   },
   components: {
     bfCascader
   },
   methods: {
-    showDialog(floor=null) {
-      if(floor){
-        this.floor = floor
-      }
-      this.connectDialogVis = true
+    showDialog(system) {
+      this.system = system;
+      this.connectDialogVis = true;
       this.$nextTick(() => {
         this.$refs.bfCascader.getCascader()
-        let arr = this.floor.FloorThroughList || [];
+        let arr = this.system.BuildingFloorInfoList || [];
         let value = []
         if (arr.length) {
           arr.map(t => {
-            value.push([t.BuildID, t.FloorID])
+            if (t.FloorID) {
+              value.push([t.BuildID, t.FloorID]);
+            } else {
+              value.push([t.BuildID])
+            }
           })
         }
         this.$refs.bfCascader.value = value
@@ -46,25 +49,46 @@ export default {
     },
     save() {
       let arr = this.$refs.bfCascader.value;
-      let param = {
-        FloorId: this.floor.FloorID,
-        FloorOtherIdList: []
-      }
+      let buildIds = [], floorIds = [];
       arr.map(t => {
-        param.FloorOtherIdList.push(t[1])
+        if (buildIds.indexOf(t[0]) < 0) {
+          buildIds.push(t[0]);
+        }
+        if (t.length > 1 && floorIds.indexOf(t[1]) < 0) {
+          floorIds.push(t[1]);
+        }
       })
-      // createRelationInFloor(param, res => {
+      let buildPa = {
+        SysId: this.system.SysID,
+        BuildingIdList: buildIds
+      }
+      let floorPa = {
+        SysId: this.system.SysID,
+        FloorIdList: floorIds
+      }
+      let promise1 = new Promise((resolve, reject) => {
+        sysRelateBuild(buildPa, res => {
+          resolve(res);
+        })
+      })
+      let primise2 = new Promise((resolve, reject) => {
+        sysRelateFloor(floorPa, res => {
+          resolve(res);
+        })
+      })
+      let buildFloor = this.$refs.bfCascader.getSelectedNodes();
+      Promise.all([promise1, primise2]).then(res => {
         this.connectDialogVis = false;
-        this.$message.success('关联成功');
-        this.$emit('handleClickUpdate')
-      // })
+        this.$message.success("关联成功");
+        this.$emit('relateSuccess', buildFloor);
+      })
     }
   }
 }
 </script>
 <style lang="less" scoped>
 #messageDialog {
-  .el-row{
+  .el-row {
     height: 50px;
     max-height: 200px;
     overflow-y: auto;

+ 11 - 19
src/utils/handsontable/mainText.js

@@ -102,27 +102,19 @@ const text = {
         td.style.color = "#409EFF";
         td.style.cursor = "pointer";
         if (value instanceof Array && value.length > 0) {
-            if (value.length == 1) {
-                td.innerHTML = !!value[0].infos ? (value[0].infos.SysLocalName || value[0].infos.SysName) : (value[0].SysLocalName || value[0].SysName)
-            } else {
-                let text = ""
-                for (let i = 0; i < value.length; i++) {
-                    if (!!value[i].SysLocalName || !!value[i].SysName) {
-                        if (i == value.length) {
-                            text += value[i].SysLocalName || value[i].SysName
-                        } else {
-                            text = value[i].SysLocalName || value[i].SysName + "、" + text
-                        }
-                    } else {
-                        if (i == value.length) {
-                            text += value[i].infos.SysLocalName || value[i].infos.SysName
-                        } else {
-                            text = value[i].infos.SysLocalName || value[i].infos.SysName + "、" + text
-                        }
-                    }
+            let text = ""
+            for (let i = 0; i < value.length; i++) {
+                if(value[i].BuildID && value[i].FloorID){
+                    text += `${value[i].BuildLocalName || value[i].BuildName}-${value[i].FloorLocalName || value[i].FloorName }、`
+                } else {
+                    text += `${value[i].BuildLocalName || value[i].BuildName}、`
                 }
-                td.innerHTML = text.substring(0, 40) + "..."
             }
+            text = text.substring(0,text.length-1);
+            if(text.length>15){
+                text = text.substring(0,15)+ "...";
+            }
+            td.innerHTML = text;
         } else {
             td.innerHTML = "无所属建筑楼层"
         }

+ 1 - 1
src/views/ledger/system/index.vue

@@ -6,7 +6,7 @@
     <saga-title :mess="mess"></saga-title>
     <div class="table-main">
       <div class="search-header">
-        <floor-cascader :type="'no'" @change="changeFloor"></floor-cascader>
+        <floor-cascader @change="changeFloor"></floor-cascader>
         <my-cascader ref="cascader" @change="changeDevice"></my-cascader>
       </div>
       <hanson-table @close="close" ref="tableMain"></hanson-table>