فهرست منبع

新增添加租户页面

zhangyu 6 سال پیش
والد
کامیت
08daad5004

+ 9 - 8
src/api/scan/fetch.js

@@ -22,14 +22,15 @@ service.interceptors.request.use(config => {
 //response拦截器
 service.interceptors.response.use(
     response => {
-        let resp = response.data;
-        let result = resp.result || resp.Result
-        if (result == 'success' || result == 'Success') {
-            return response
-        } else {
-            let msg = resp.message ? resp.message : resp.ResultMsg;
-            Message.error({ message: msg });
-        }        
+        // let resp = response.data;
+        // let result = resp.result || resp.Result
+        return response
+        // if (result == 'success' || result == 'Success') {
+        //     return response
+        // } else {
+        //     let msg = resp.message ? resp.message : resp.ResultMsg? resp.ResultMsg: resp.Message;
+        //     Message.error({ message: msg });
+        // }        
     },
     error => {
         console.log('err' + error)

+ 1 - 1
src/api/scan/httpUtil.js

@@ -9,7 +9,7 @@ function successResponse(vm, response, success, failed) {
             success(resp);
         }
     } else {
-        let msg = resp.message ? resp.message : resp.ResultMsg || resp.resultMsg;
+        let msg = resp.message ? resp.message : resp.ResultMsg || resp.resultMsg || resp.Message;
         Message.error({ message: msg });
         if (failed) {
             failed(resp);

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

@@ -749,6 +749,13 @@ export function getCenoteTableData(param, success) {
     http.postJson(url, data, success)
 }
 
+//添加竖井信息
+export function createCenoteTableData(param, success) {
+    let url = `${baseUrl}/datacenter/shaft/create?projectId=${param.ProjId}&secret=${param.secret}`
+    let data = param.data
+    http.postJson(url, data, success)
+}
+
 //修改竖井信息
 export function updataCenoteTableData(param, success) {
     let url = `${baseUrl}/datacenter/shaft/update?projectId=${param.ProjId}&secret=${param.secret}`
@@ -784,6 +791,13 @@ export function getRentTableData(param, success) {
     http.postJson(url, data, success)
 }
 
+//创建租户信息
+export function createRentTableData(param, success) {
+    let url = `${baseUrl}/datacenter/tenant/create?projectId=${param.ProjId}&secret=${param.secret}`
+    let data = param.data
+    http.postJson(url, data, success)
+}
+
 //修改租户信息
 export function updataRentTableData(param, success) {
     let url = `${baseUrl}/datacenter/tenant/update?projectId=${param.ProjId}&secret=${param.secret}`
@@ -798,6 +812,13 @@ export function deleteRentTableData(param, success) {
     http.postJson(url, data, success)
 }
 
+//关联分区空间
+export function saveRentRelateSpace(param, success) {
+    let url = `${baseUrl}/datacenter/tenant/relateSpace?projectId=${param.ProjId}&secret=${param.secret}`
+    let data = param.data
+    http.postJson(url, data, success)
+}
+
 //扫楼创建资产
 export function createFmList(param, success) {
     let url = `${api}/service/fm/create`

+ 11 - 4
src/router/system.js

@@ -44,7 +44,8 @@ import auth from '@/views/system/auth'
 import noUser from '@/views/system/nouser'
 
 /** 租户管理 */
-import rentlist from '@/views/rent/rentlist'
+import rentlist from '@/views/rent/rentlist/index'
+import rentadd from '@/views/rent/rentlist/rentadd/index'
 
 
 export default [
@@ -158,19 +159,19 @@ export default [
                 path: 'parts',
                 name: 'partsLedger',
                 component: partsLedger,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility' }, { label: '设备清单 / 包含的部件' }] }
+                meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility' }, { label: '包含的部件' }] }
             },
             {
                 path: 'partsmanage',
                 name: 'partsmanageLedger',
                 component: partsmanageLedger,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility' }, { label: '设备清单 / 管理部件' }] },
+                meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility' }, { label: '管理部件' }] },
             },
             {
                 path: 'addparts',
                 name: 'addparts',
                 component: addparts,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility/partsmanage' }, { label: '设备清单 / 管理部件 / 添加部件' }] },
+                meta: { keepAlive: false, breadcrumbs: [{ label: '台账管理', path: '/ledger/facility' }, { label: '添加部件' }] },
             },
             
             {
@@ -245,6 +246,12 @@ export default [
                 name: 'rentlist',
                 component: rentlist,
                 meta: { keepAlive: false, breadcrumbs: [{ label: '租户管理', path: '/rent/rentlist' }, { label: '租户清单' }] }
+            },
+            {
+                path: 'rentadd',
+                name: 'rentadd',
+                component: rentadd,
+                meta: { keepAlive: false, breadcrumbs: [{ label: '租户管理', path: '/rent/rentlist' }, { label: '添加租户' }] }
             }
         ]
     },

+ 2 - 2
src/utils/handsontable/notShow.js

@@ -606,7 +606,7 @@ const showTools = {
                         readOnly: onlyRead,
                         chosenOptions: {
                             multiple: true, //多选
-                            data: item.optionList || ""
+                            data: item.DataSource? tools.formatDataSource(item.DataSource): ""
                         }
                     };
                 } else if (item.InputMode == "E1") {//单选
@@ -616,7 +616,7 @@ const showTools = {
                         editor: "chosen",
                         readOnly: onlyRead,
                         chosenOptions: {
-                            data: item.optionList || ""
+                            data: item.DataSource? tools.formatDataSource(item.DataSource): ""
                         }
                     };
                 } else if (item.InputMode == "A1" || item.InputMode == "A2") {

+ 21 - 0
src/utils/scan/tools.js

@@ -447,6 +447,27 @@ tools.dateAddYear = function(date, yearCount) {
     return result;
 }
 
+tools.formatDataSource = function (data) {
+    let options
+    let arr = []
+    try{
+        options = JSON.parse(data)
+        if(options) {
+            for(var key in options) {
+                arr.push({
+                    Code: key,
+                    Name: options[key]
+                }) 
+            }
+            return arr
+        } else {
+            return arr
+        }
+    }catch(err){
+        return arr
+    }
+}
+
 function dateToDate(date) {
     var sDate = new Date();
     if (typeof date == 'object' && typeof new Date().getMonth == "function") {

+ 51 - 7
src/views/ledger/cenotelist/index.vue

@@ -14,7 +14,7 @@
           :value="item.value">
         </el-option>
       </el-select>
-      <el-button>添加竖井</el-button>
+      <el-button @click="createTableData">添加竖井</el-button>
       <el-button @click="getTableHeader">刷新</el-button>
       <el-button v-show="!onlyRead" @click="undo">撤销</el-button>
     </el-row>
@@ -68,7 +68,7 @@ import text from "@/utils/handsontable/mainText"
 
 import cenoteType from "@/components/ledger/lib/cenoteType";
 import handsonTable from "@/components/common/handsontable";
-import { getCenoteType, getCenoteTableHeader, getCenoteTableData, updataCenoteTableData, deleteCenoteTableData, saveCenoteRelateSpace } from "@/api/scan/request"
+import { getCenoteType, getCenoteTableHeader, getCenoteTableData, updataCenoteTableData, deleteCenoteTableData, saveCenoteRelateSpace, createCenoteTableData } from "@/api/scan/request"
 import { mapGetters, mapActions } from "vuex";
 export default {
   components: {
@@ -171,6 +171,33 @@ export default {
         }
       })
     },
+    // 添加竖井信息
+    async createTableData() {
+      const params = {
+        ProjId: this.projectId,
+        secret: this.secret,
+        data: {}
+      }
+      createCenoteTableData(params, (res) => {
+        let id = res.Id
+        if (this.tableData.length) {
+            let data = this.tableExample.getSourceData()
+            data.unshift({
+                ShaftID: id
+            })
+            this.tableExample.loadData(data)
+            this.tableExample.updateSettings({
+                maxRows: data.length
+            })
+        } else {
+            this.tableData = [{
+                ShaftID: id
+            }]
+            this.initTable()
+        }
+        this.$message.success("添加成功!")
+      })
+    },
     // 修改表格内容
     async updateTableData(data, change) {
       let param = {
@@ -195,7 +222,7 @@ export default {
     // 删除表格数据
     async deleteTableData(params) {
       await deleteCenoteTableData(params, (res) => {
-        this.$message.success("删除成功")
+        this.$message.success("删除成功!")
         this.getTableHeader()
       })
     },
@@ -215,10 +242,30 @@ export default {
         this.getTableHeader()
       })
     },
+    // 添加竖井数据
+    handleCreateTableData() {
+      if (this.tableData.length) {
+          let data = this.tableExample.getSourceData()
+          data.unshift({
+              
+          })
+          this.tableExample.loadData(data)
+          this.tableExample.updateSettings({
+              maxRows: data.length
+          })
+          this.createTableData()
+      } else {
+          this.tableData = [{
+              
+          }]
+          this.initTable()
+          this.createTableData()
+      }
+    },
     // 删除表格行
     handleDeleteTableRow() {
       let params = tools.differenceArr(this.tableData, this.copyTableData)
-      if (params.length < 1) {
+      if (params.length < 1 || this.tableData > this.copyTableData) {
         return
       }
       let param = {
@@ -303,9 +350,6 @@ export default {
       let arr = tools.copyArr(list);
       arr.map((item) => { //缺少信息点
         item.Visible = true
-        if (item.InputMode == "E1") {
-          item.optionList = this.cenoteTypeList
-        }
       })
       let data = showTools.showHeaderTypes(arr, this.onlyRead, false, this.allMess)
       data.unshift({

+ 34 - 28
src/views/rent/rentlist/index.vue

@@ -15,7 +15,7 @@
           :value="item.value">
         </el-option>
       </el-select>
-      <el-button>添加租户</el-button>
+      <el-button @click="handleCreateTableData">添加租户</el-button>
       <el-button @click="getTableHeader">刷新</el-button>
       <el-button v-show="!onlyRead" @click="undo">撤销</el-button>
     </el-row>
@@ -42,8 +42,8 @@
             v-model="relationids">
           </el-input>
           <el-row class="right" v-show="!onlyRead">
-            <el-button>取消</el-button>
-            <el-button type="primary">保存</el-button>
+            <el-button @click="handleCloseRight">取消</el-button>
+            <el-button type="primary" @click="saveSpaceList">保存</el-button>
           </el-row>
         </div>
       </div>
@@ -69,7 +69,7 @@ import text from "@/utils/handsontable/mainText"
 
 import floorCascader from "@/components/ledger/lib/floorCascader"
 import handsonTable from "@/components/common/handsontable"
-import { getCenoteType, getRentTableHeader, getRentTableData, updataRentTableData, deleteRentTableData } from "@/api/scan/request"
+import { getRentTableHeader, getRentTableData, updataRentTableData, deleteRentTableData, saveRentRelateSpace } from "@/api/scan/request"
 import { mapGetters, mapActions } from "vuex";
 export default {
   components: {
@@ -82,7 +82,6 @@ export default {
       floorId: null,//楼层id
       cenoteId: "",//租户类型id
       shaftId: "",//要操作的租户id
-      cenoteTypeList: [],
       isTableRightShow: false,
       relationids: "",
       options: [{
@@ -115,7 +114,6 @@ export default {
     ])
   },
   created() {
-    this.getCenoteTypeData()
     this.getTableHeader()
   },
   // watch: {
@@ -124,21 +122,6 @@ export default {
   //     }
   // },
   methods: {
-    // 获取租户类型
-    async getCenoteTypeData() {
-      let param = {
-        ProjId: this.projectId,
-        secret: this.secret,
-        data: {}
-      }
-      await getCenoteType (param, res => {
-        let data = res.Content
-        this.cenoteTypeList = data.map((item) => {
-          item.Code = item.ID
-          return item
-        })
-      })
-    },
     // 获取表头数据(初始化表格)
     async getTableHeader() {
       let param = {
@@ -209,6 +192,22 @@ export default {
         
       })
     },
+    //保存元空间关联
+    async saveSpaceList() {
+      let data = {
+        
+      }
+      const params = {
+        ProjId: this.projectId,
+        secret: this.secret,
+        data: data
+      }
+      this.$message.error("后台未返回租赁空间信息,请设置参数!")
+      await saveRentRelateSpace(params, (res) => {
+        this.$message.success("关联成功!")
+        this.getTableHeader()
+      })
+    },
     // 删除表格数据
     async deleteTableData(params) {
       await deleteRentTableData(params, (res) => {
@@ -216,6 +215,10 @@ export default {
         this.getTableHeader()
       })
     },
+    // 添加租户数据
+    handleCreateTableData() {
+      this.$router.push({ name: 'rentadd' })
+    },
     // 删除表格行
     handleDeleteTableRow() {
       let params = tools.differenceArr(this.tableData, this.copyTableData)
@@ -305,21 +308,19 @@ export default {
         readArr.push("Own")
       }
       let data = showTools.changeHeader(arr, readArr, this.onlyRead, false, this.allMess)
-      data.unshift("关联的元空间");
+      data.unshift("操作");
       return data;
     },
     formatHeaderType(list) {//格式化表头头映射的数据
       let arr = tools.copyArr(list);
       arr.map((item) => { //缺少信息点
         item.Visible = true
-        if (item.InputMode == "E1") {
-          item.optionList = this.cenoteTypeList
-        }
       })
       let data = showTools.showHeaderTypes(arr, this.onlyRead, false, this.allMess)
       data.unshift({
-        data: "SpaceCount",
-        readOnly: this.onlyRead
+        data: "caozuo",
+        renderer: tools.lookDetails,
+        readOnly: true
       })
       return data;
     },
@@ -355,8 +356,13 @@ export default {
       this.row = row.row //要操作的列号
       this.messKey = val //要操作的列类型
       this.shaftId = infos.ShaftID //要操作的数据id
+      //点击操作跳转详情
+      if (val === "caozuo") {
+        this.$message("请设置要跳转的详情页地址")
+        // window.open(`http://47.94.89.44:8058/spread?id=${infos.id}&pid=${this.projectId}&secret=${this.secret}`,"_blank")
+      }
       //点击关联的元空间
-      if (val === "SpaceCount") {
+      if (val === "租赁空间") {
         this.isTableRightShow = true;
       }
     },

+ 303 - 0
src/views/rent/rentlist/rentadd/index.vue

@@ -0,0 +1,303 @@
+<template>
+  <div id="deviceList">
+    <el-row class="right">
+      <!-- <span style="float:left;">当前选择的部件类型:{{page.total || '--'}}</span> -->
+      <span>增加</span>
+      <el-input v-model="addNum" style="width:40px;" size="small"></el-input>
+      <span>个租户</span>
+      <el-button @click="handleAddTableRow">增加</el-button>
+    </el-row>
+    <div class="tableBox">
+      <div class="center middle_sty" style="flex:2;" v-show="tableData && !tableData.length">
+        <p>
+          <i class="iconwushuju iconfont"></i>
+          暂无数据
+        </p>
+      </div>
+      <div class="tableLeft" v-show="tableData && tableData.length">
+        <handson-table ref="table"></handson-table>
+      </div>
+    </div>
+    <el-row class="center">
+      <el-button type="primary" size="medium" @click="handleCreateTableData">创建租户</el-button>
+    </el-row>
+  </div>
+</template>
+<script>
+import tools from "@/utils/scan/tools"
+import handsonUtils from "@/utils/hasontableUtils"
+import showTools from "@/utils/handsontable/notShow"
+import text from "@/utils/handsontable/mainText"
+import session from "@/framework/utils/storage"
+
+import handsonTable from "@/components/common/handsontable"
+import { getRentTableHeader, createRentTableData } from "@/api/scan/request"
+import { mapGetters, mapActions } from "vuex";
+export default {
+  components: {
+    handsonTable
+  },
+  data() {
+    return {
+      buildId: null,//建筑id
+      floorId: null,//楼层id
+      addNum: 1,
+      cenoteId: "",//租户类型id
+      shaftId: "",//要操作的租户id
+      isTableRightShow: false,
+      relationids: "",
+      onlyRead: false,
+      allMess: true,
+      tableHeader: [],
+      tableData: session.get("rentAddData")? session.get("rentAddData"): [{}],
+      copyTableData: [],
+      assetGroupList: [],
+      graphyId: null
+    };
+  },
+  computed: {
+    ...mapGetters("layout", [
+        "projectId",
+        "secret",
+        "userId"
+    ])
+  },
+  created() {
+    this.getTableHeader()
+  },
+  // watch: {
+
+  // },
+  methods: {
+    // 获取表头数据(初始化表格)
+    async getTableHeader() {
+      let param = {
+        ProjId: this.projectId,
+        secret: this.secret,
+        data: {
+          "CollectFlag": this.allMess
+        }
+      }
+      await getRentTableHeader(param, res => {
+        this.tableHeader = res.Content
+        this.initTable()
+      })
+    },
+    // 创建租户数据
+    async handleCreateTableData() {
+      const params = {
+        ProjId: this.projectId,
+        secret: this.secret,
+        data: this.tableData
+      }
+      await createRentTableData(params, (res) => {
+        this.$message.success("添加成功!")
+        session.remove("rentAddData")
+        this.$router.push({ name: 'rentlist'})
+      })
+    },
+    // 删除表格行
+    handleDeleteTableRow() {
+      this.$message.success("删除成功")
+      session.set("rentAddData", this.tableData)
+    },
+    // 添加行
+    handleAddTableRow() {
+      let addRowLength = this.addNum
+      for(let i = 0; i < addRowLength; i++){
+        this.tableData.push({})
+      }
+      session.set("rentAddData", this.tableData)
+      this.initTable()
+    },
+    //修改
+    handleUpdataTable(changeData, source) {
+      if (!this.onlyRead) {
+        if (changeData) {
+          let trimmedArr = this.trimmedRows();
+          let param = handsonUtils.getParam(changeData, source, this.tableExample, trimmedArr);
+          let data = [];
+          for (let i = 0; i < param.length; i++) {
+            data.push(param[i]);
+          }
+
+          // 存在data进行修改请求
+          if (data && data.length) {
+            data.map((item, index) => {
+              let key = changeData[index][1]
+              item[key] = item[key] != ""? item[key]: null
+            });
+          }
+        }
+      }
+      session.set("rentAddData", this.tableData)
+    },
+    //关闭右侧关联元空间输入按钮
+    handleCloseRight() {
+      this.isTableRightShow = false
+    },
+    formatHeaderData(list) {//格式化表头显示的数据
+      let arr = tools.copyArr(list)
+      arr.map((item) => {
+        item.Visible = true
+      })
+      let readArr = ["A1", "A2", "B1", "C5", "D1", "D2", "E1", "F1", "F2", "L", "L1", "L2", "N2", "X"]
+      if (!this.onlyRead) {
+        readArr.push("Own")
+      }
+      let data = showTools.changeHeader(arr, readArr, this.onlyRead, false, this.allMess)
+      // data.unshift("关联的元空间");
+      return data;
+    },
+    formatHeaderType(list) {//格式化表头头映射的数据
+      let arr = tools.copyArr(list);
+      arr.map((item) => { //缺少信息点
+        item.Visible = true
+      })
+      let data = showTools.showHeaderTypes(arr, this.onlyRead, false, this.allMess)
+      // data.unshift({
+      //   data: "SpaceCount",
+      //   readOnly: this.onlyRead
+      // })
+      return data;
+    },
+    initTable() {//实例化表格
+      let settings = {
+        data: this.tableData,
+        colHeaders: this.formatHeaderData(this.tableHeader),
+        columns: this.formatHeaderType(this.tableHeader),
+        rowHeights: 30,
+        maxRows: this.tableData.length,
+        contextMenu: {
+          items: {
+            remove_row: {
+              name: "删除租户"
+            }
+          }
+        },
+        // 事件
+        afterChange: this.handleUpdataTable, //修改后
+        afterFilter: this.trimmedRows, //排序前
+        afterRemoveRow: this.handleDeleteTableRow, //右键删除
+        afterOnCellMouseDown: this.handleTdClick //鼠标点击
+      };
+      this.$nextTick(() => {
+        console.log(this.$refs.table);
+        this.tableExample = this.$refs.table.init(settings);
+      });
+    },
+    //获取到了正确的信息
+    getInfors(infos, row) {
+      //其他的开始判断
+      let val = this.tableExample.colToProp(row.col);
+      this.row = row.row //要操作的列号
+      this.messKey = val //要操作的列类型
+      this.shaftId = infos.ShaftID //要操作的数据id
+      //点击关联的元空间
+      // if (val === "SpaceCount") {
+      //   this.isTableRightShow = true;
+      // }
+    },
+    //表格点击事件
+    handleTdClick(el, rowArr) {
+      //点击的是表头
+      if (rowArr.row < 0) {
+        return;
+      }
+      //被筛选过后的数组
+      let trimmedArr = this.trimmedRows();
+      //是否启用了排序
+      let isSort = this.tableExample.getPlugin("columnSorting").isSorted();
+      if (trimmedArr.length && isSort) {
+        let sortArr = this.myHotArr.getPlugin("columnSorting").rowsMapper
+          .__arrayMap;
+        let infos = this.tableData[trimmedArr[sortArr[rowArr.row]]];
+        this.getInfors(infos, { row: sortArr[rowArr.row], col: rowArr.col });
+      } else if (isSort) {
+        //排序后的数组
+        let sortArr = this.tableExample.getPlugin("columnSorting").rowsMapper.__arrayMap;
+        let infos = this.tableData[sortArr[rowArr.row]];
+        this.getInfors(infos, { row: sortArr[rowArr.row], col: rowArr.col });
+      } else if (trimmedArr.length) {
+        let infos = this.tableData[trimmedArr[rowArr.row]];
+        this.getInfors(infos, { row: trimmedArr[rowArr.row], col: rowArr.col });
+      } else {
+        let infos = this.tableData[rowArr.row];
+        this.getInfors(infos, rowArr);
+      }
+    },
+    //获取被筛选掉的行号
+    trimmedRows() {
+      // var plugin = hot.getPlugin('trimRows').trimmedRows;//获取被筛选掉的行号
+      var plugin = this.tableExample.getPlugin("trimRows").trimmedRows;
+      let dataLength = this.tableData.length;
+      let dataArr = new Array();
+      for (let i = 0; i < dataLength; i++) {
+        dataArr.push(i);
+      }
+      if (plugin.length <= 0) {
+        dataArr = undefined;
+      } else {
+        dataArr = this.array_diff(dataArr, plugin);
+      }
+      return dataArr || [];
+      // var DataArray = new Array();
+
+      // for (var i = 0; i < plugin.length; i++) {
+      //     // 通过行号获取数据
+      //     DataArray.push(this.tableExample.getSourceDataAtRow(plugin[i]));
+      // }
+    },
+    //去除数组中相同的元素
+    array_diff(a, b) {
+      for (var i = 0; i < b.length; i++) {
+        for (var j = 0; j < a.length; j++) {
+          if (a[j] == b[i]) {
+            a.splice(j, 1);
+            j = j - 1;
+          }
+        }
+      }
+      return a;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+#deviceList {
+  overflow: hidden;
+  height: 100%;
+  background-color: #f6f6f6;
+  position: relative;
+  .search-header {
+    overflow: hidden;
+    padding:0 10px 10px 10px;
+    border-bottom: 1px solid #bcbcbc;
+  }
+  .tableBox {
+    display: flex;
+    height: calc(100% - 100px);
+    margin-top: 10px;
+    .tableLeft {
+      flex: 2;
+    }
+    .tableRight {
+      flex: 1;
+      // display: none;
+      border-left: 1px solid #dadada;
+      padding: 5px 15px;
+      margin-right: 5px;
+      box-shadow: 0px 1px 5px 0px rgba(59, 66, 84, 0.15);
+      .table_right_box::after{
+        display: block;
+        content: "";
+        clear: both;
+      }
+      .close_right {
+        float: right;
+        cursor: pointer;
+      }
+    }
+  }
+}
+</style>