haojianlong před 5 roky
rodič
revize
beae322e41

+ 8 - 2
src/api/scan/request.js

@@ -833,6 +833,12 @@ export function getRentTableData(param, success) {
 }
 
 //创建租户信息
+export function queryRentTableData(param, success) {
+    let url = `${baseUrl}/datacenter/tenant/query`
+    http.postJson(url, param, success)
+}
+
+//创建租户信息
 export function createRentTableData(param, success) {
     let url = `${baseUrl}/datacenter/tenant/create`
     http.postJson(url, param, success)
@@ -864,8 +870,8 @@ export function tnRelateGeneralZone(param, success) {
 
 //租户关联默认业务空间,租户一对多,覆盖
 export function tnRelateZone(param, success) {
-    let url = `${baseUrl}/datacenter/tn-in-sp-base/link-sp`
-    http.postJson(url, param, success)
+    let url = `${baseUrl}/datacenter/tn-in-sp-base/link-sp?type=${param.type}`
+    http.postJson(url, param.data, success)
 }
 
 //关联分区空间

+ 76 - 26
src/components/ledger/rentList/roomCountDrawer.vue

@@ -1,28 +1,40 @@
 <template>
   <el-drawer title="关联的业务空间" :visible.sync="drawer" :direction="direction" :before-close="handleClose" size="20%" custom-class="room-count">
     <div class="drawer-body" :style="{height:drawerBodyHeight}">
-      <div class="default-zone zone" v-show="1">
+      <div class="default-zone zone">
         <p>默认业务空间</p>
-        <div v-for="(item,index) in zoneList.default" :key="item.RoomID" class="zoneItem">
-          {{item.BuildLocalName}}-{{item.FloorLocalName}}-{{item.RoomLocalName || item.RoomName}}
-          <i size="mini" class="el-icon-delete" title="删除" @click="deleteZoneItem('default',index)" v-if="!readonly"></i>
+        <div v-if="!(readonly&&!zoneList.default.length)">
+          <div v-for="(item,index) in zoneList.default" :key="item.RoomID" class="zoneItem">
+            {{item.BuildLocalName}}-{{item.FloorLocalName}}-{{item.RoomLocalName || item.RoomName}}
+            <i size="mini" class="el-icon-delete" title="删除" @click="deleteZoneItem('default',index)" v-if="!readonly"></i>
+          </div>
+          <div class="zoneItem" style="border:none;padding:0;" v-if="!readonly">
+            <el-cascader placeholder="请选择" v-model="GeneralVal" :options="option.GeneralZone" :props="props" filterable @expand-change="expandChange"
+              @change="change" style="width:100%;">
+            </el-cascader>
+          </div>
         </div>
-        <div class="zoneItem" style="border:none;padding:0;" v-if="!readonly">
-          <el-cascader placeholder="请选择" v-model="GeneralVal" :options="option.GeneralZone" :props="props" filterable @expand-change="expandChange"
-            @change="change" style="width:100%;">
-          </el-cascader>
+        <div v-else class="center">
+          <i class="icon-wushuju iconfont"></i>
+          暂无数据
         </div>
       </div>
-      <div class="tenant-zone zone" v-show="1">
+      <div class="tenant-zone zone">
         <p>租户业务空间</p>
-        <div v-for="(item,index) in zoneList.tenant" :key="item.RoomID" class="zoneItem">
-          {{item.BuildLocalName}}-{{item.FloorLocalName}}-{{item.RoomLocalName || item.RoomName}}
-          <i size="mini" class="el-icon-delete" title="删除" @click="deleteZoneItem('tenant',index)" v-if="!readonly"></i>
+        <div v-if="!(readonly&&!zoneList.tenant.length)">
+          <div v-for="(item,index) in zoneList.tenant" :key="item.RoomID" class="zoneItem">
+            {{item.BuildLocalName}}-{{item.FloorLocalName}}-{{item.RoomLocalName || item.RoomName}}
+            <i size="mini" class="el-icon-delete" title="删除" @click="deleteZoneItem('tenant',index)" v-if="!readonly"></i>
+          </div>
+          <div class="zoneItem" style="border:none;padding:0;" v-if="!readonly">
+            <el-cascader placeholder="请选择" v-model="TenantVal" :options="option.TenantZone" :props="props" filterable
+              @expand-change="expandChangeTenantZone" @change="changeTenantZone" style="width:100%;">
+            </el-cascader>
+          </div>
         </div>
-        <div class="zoneItem" style="border:none;padding:0;" v-if="!readonly">
-          <el-cascader placeholder="请选择" v-model="TenantVal" :options="option.TenantZone" :props="props" filterable
-            @expand-change="expandChangeTenantZone" @change="changeTenantZone" style="width:100%;">
-          </el-cascader>
+        <div v-else class="center">
+          <i class="icon-wushuju iconfont"></i>
+          暂无数据
         </div>
       </div>
     </div>
@@ -177,8 +189,26 @@ export default {
       }
       this.TenantVal = [];
     },
-    showDrawer(id) {
-      this.curTenantId = id;
+    showDrawer(tenant) {
+      this.curTenantId = tenant.TenantID;
+      if (tenant.ZoneGeneraltList) {
+        this.zoneList.default = tenant.ZoneGeneraltList.map(t => {
+          t.BuildLocalName = t.Building.BuildLocalName || t.Building.BuildName;
+          t.FloorLocalName = t.Floor.FloorLocalName || t.Floor.FloorName;
+          return t;
+        });
+      } else {
+        this.zoneList.default = [];
+      }
+      if (tenant.ZoneTenantList) {
+        this.zoneList.tenant = tenant.ZoneTenantList.map(t => {
+          t.BuildLocalName = t.Building.BuildLocalName || t.Building.BuildName;
+          t.FloorLocalName = t.Floor.FloorLocalName || t.Floor.FloorName;
+          return t;
+        });
+      } else {
+        this.zoneList.tenant = [];
+      }
       this.drawer = true;
     },
     handleClose(done) {
@@ -191,17 +221,37 @@ export default {
       this.zoneList[type].splice(index, 1);
     },
     save() {
-      let pa = {
-        SpaceIdList: [],
-        TenantId: this.curTenantId
+      let pa1 = {
+        data: {
+          SpaceIdList: [],
+          TenantId: this.curTenantId
+        },
+        type: 'GeneralZone'
       }
-      this.zoneList.default.map(t => {
-        pa.SpaceIdList.push(t.RoomID)
+      pa1.data.SpaceIdList = this.zoneList.default.map(t => {
+        return t.RoomID;
       })
-      this.zoneList.tenant.map(t => {
-        pa.SpaceIdList.push(t.RoomID)
+      let promise1 = new Promise((resolve) => {
+        tnRelateZone(pa1, res => {
+          resolve(res);
+        })
+      })
+      let pa2 = {
+        data: {
+          SpaceIdList: [],
+          TenantId: this.curTenantId
+        },
+        type: 'TenantZone'
+      }
+      pa2.data.SpaceIdList = this.zoneList.tenant.map(t => {
+        return t.RoomID;
+      })
+      let promise2 = new Promise((resolve) => {
+        tnRelateZone(pa2, res => {
+          resolve(res);
+        })
       })
-      tnRelateZone(pa, res => {
+      Promise.all([promise1, promise2]).then(values => {
         this.$message.success('关联成功');
         this.$emit('refresh');
         this.drawer = false;

+ 22 - 4
src/views/ledger/rentlist/index.vue

@@ -62,7 +62,7 @@ import text from "@/utils/handsontable/mainText"
 import roomCountDrawer from "@/components/ledger/rentList/roomCountDrawer"
 import floorCascader from "@/components/ledger/lib/floorCascader"
 import handsonTable from "@/components/common/handsontable"
-import { getDataDictionary, getRentTableHeader, getRentTableData, updataRentTableData, deleteRentTableData, saveRentRelateSpace, BeatchQueryParam } from "@/api/scan/request"
+import { getDataDictionary, getRentTableHeader, queryRentTableData, updataRentTableData, deleteRentTableData, saveRentRelateSpace, BeatchQueryParam } from "@/api/scan/request"
 import { mapGetters, mapActions } from "vuex";
 export default {
   components: {
@@ -157,11 +157,15 @@ export default {
     },
     async getTableData() {//获取表格数据
       let params = {
+        Cascade: [
+          { Name: 'zoneTenantList', Cascade: [{ Name: 'building' }, { Name: 'floor' }] },
+          { Name: 'zoneGeneraltList', Cascade: [{ Name: 'building' }, { Name: 'floor' }] }
+        ],
         Orders: "createTime desc, TenantID asc",
         PageNumber: this.page.pageNumber,
         PageSize: this.page.pageSize
       }
-      await getRentTableData(params, (res) => {
+      await queryRentTableData(params, (res) => {
         this.tableData = res.Content
         this.copyTableData = tools.deepCopy(res.Content)
         this.page.pageNumber = res.PageNumber
@@ -321,7 +325,21 @@ export default {
         readOnly: true
       }, {
         data: "RoomCount",
-        renderer: tools.num,
+        renderer: (instance, td, row, col, prop, value, cellProperties) => {
+          td.style.color = "#409EFF";
+          td.style.cursor = "pointer";
+          let num = 0;
+          let a = instance.getDataAtRowProp(row, 'ZoneGeneraltList')
+          let b = instance.getDataAtRowProp(row, 'ZoneTenantList')
+          if (a && a.length) {
+            num += a.length
+          }
+          if (b && b.length) {
+            num += b.length
+          }
+          td.innerHTML = num;
+          return td;
+        },
         readOnly: true
       })
       return data;
@@ -373,7 +391,7 @@ export default {
         //   this.roomId = ""
         // }
         // this.isTableRightShow = true;
-        this.$refs.roomCountDrawer.showDrawer(infos.TenantID)
+        this.$refs.roomCountDrawer.showDrawer(infos)
         return false
       }
       if (!this.onlyRead && showTools.InputModeArr.indexOf(inputMode) == '-1') {

+ 85 - 32
src/views/ledger/rentlist/manageTenantZone.vue

@@ -14,19 +14,22 @@
     <el-row class="main-container">
       <el-col :span="3" class="main-left">
         <div style="padding:10px;border-bottom:1px solid #e4e4e4;">
-          <el-input :placeholder="`请输入租户名称`" @keyup.enter.native="getTenant">
+          <el-input :placeholder="`请输入租户名称`" @keyup.enter.native="getTenant" v-model="keyWord">
             <i slot="suffix" class="el-input__icon el-icon-search" @click="getTenant"></i>
           </el-input>
         </div>
         <div style="overflow-y:auto;height: calc(100% - 53px);">
-          <div v-for="(item,i) in tenantList" :key="item.id" :class="{'tenantItem':true, 'active':item.active}" @click="tenantChange(i)">{{item.Name}}
+          <div v-for="(item,i) in tenantList" :key="item.TenantID" :class="{'tenantItem':true, 'active':item.active}" @click="tenantChange(i)">
+            {{item.TenantLocalName||item.TenantName}}
           </div>
         </div>
       </el-col>
       <el-col :span="21" style="height:100%;">
         <div style="height:52px;border-bottom:1px solid #e4e4e4;">
           <div v-if="onlyRead===true||onlyRead==='true'">
-            <div v-for="(bd,i) in buildList" :key="bd.id" :class="{'building':true,'active':bd.active}" @click="buildChange(i)">{{bd.Name}}</div>
+            <div v-for="(bd,i) in allBuilding" :key="bd.BuildID" :class="{'building':true,'active':bd.active}" @click="changeBuildSelect(i)">
+              {{bd.BuildLocalName||bd.BuildName}}
+            </div>
           </div>
           <div v-else style="line-height: 52px;padding:0 10px;">
             <label style="margin-right:10px;">所属建筑</label>
@@ -80,14 +83,13 @@ import { mapGetters, mapActions } from "vuex";
 import { SColor, SPoint } from "@saga-web/draw/lib";
 import { DivideFloorScene, SpaceItem, ZoneItem, FloorView } from "@saga-web/cad-engine/lib";
 import { colorArr } from "@/utils/spaceColor"
-import { buildingQuery, queryZone, tnRelateZone } from '@/api/scan/request'
+import { buildingQuery, queryZone, tnRelateZone, queryRentTableData } from '@/api/scan/request'
 export default {
   data() {
     return {
       options: [{ value: 'GeneralZone', label: '默认分区' }, { value: 'TenantZone', label: '租户分区' }],
-      value: 'GeneralZone',
-      tenantList: [{ id: 1, Name: '发发发', active: false }, { id: 2, Name: '发发发', active: false }, { id: 3, Name: '发发发', active: true }],
-      buildList: [{ id: 1, Name: "建筑1", active: false }, { id: 2, Name: "建筑2", active: true }],
+      value: 'TenantZone',
+      tenantList: [],
       floorList: [],
       canvasWidth: 800,
       canvasHeight: 800,
@@ -95,6 +97,7 @@ export default {
       allBuilding: [],
       buildSelect: 0,
       activeFloor: 0,
+      activeTentanIndex: 0,
       canvasLoading: true,
       isEdit: false,
       view: '',
@@ -103,7 +106,8 @@ export default {
         isEdit: false,
         groupSelect: true
       },
-      hasMap: true
+      hasMap: true,
+      keyWord: '', // 查询租户名称
     }
   },
   components: {
@@ -114,18 +118,17 @@ export default {
   },
   created() {
     this.onlyRead = this.$route.query.onlyRead;
-    // if (this.onlyRead) {
-    // this.getTenant();
-    // } else {
-    this.getAllBuilding();
-    // }
+    this.init();
   },
   mounted() {
     this.canvasWidth = this.$refs.graphy.offsetWidth;
     this.canvasHeight = this.$refs.graphy.offsetHeight;
   },
   methods: {
-    init() { },
+    init() {
+      this.getTenant();
+      this.getAllBuilding();
+    },
     // 返回
     goback() {
       this.$router.push({ name: 'rentlist' })
@@ -172,14 +175,18 @@ export default {
         this.floorChange(index)
       }
     },
-    // 获取列表
-    getTenant() { },
     // 建筑修改
-    buildChange(index) {
-      this.buildList.map(t => {
+    changeBuildSelect(val) {
+      this.allBuilding.map(t => {
         t.active = false;
       })
-      this.buildList[index].active = true;
+      this.allBuilding[val].active = true;
+      if (this.allBuilding[val].Floor && this.allBuilding[val].Floor.length) {
+        this.floorList = this.allBuilding[val].Floor
+        this.floorChange(0);
+      } else {
+        this.floorList = []
+      }
     },
     // 租户修改
     tenantChange(index) {
@@ -188,6 +195,34 @@ export default {
       })
       this.curTenantId = this.tenantList[index].TenantID;
       this.tenantList[index].active = true;
+      this.activeTentanIndex = index;
+      this.tenantChangeInflu(index);
+    },
+    // 租户更改引起的修改
+    tenantChangeInflu(i) {
+      if (this.onlyRead) { // 只读模式-对空间类型处理
+        let g = this.tenantList[i].ZoneGeneraltList;
+        let t = this.tenantList[i].ZoneTenantList;
+        let gFlag = g && g.length;
+        let tFlag = t && t.length;
+        if (gFlag) {
+          if (tFlag) {
+            this.options = [{ value: 'GeneralZone', label: '默认分区' }, { value: 'TenantZone', label: '租户分区' }]
+            this.value = 'TenantZone';
+          } else {
+            this.options = [{ value: 'GeneralZone', label: '默认分区' }];
+            this.value = 'GeneralZone';
+          }
+        } else {
+          if (tFlag) {
+            this.options = [{ value: 'TenantZone', label: '租户分区' }];
+            this.value = 'TenantZone';
+          } else {
+            this.options = [];
+            this.value = '';
+          }
+        }
+      }
     },
     // 楼层修改
     floorChange(index) {
@@ -200,15 +235,6 @@ export default {
 
       this.getGraphy(index)
     },
-    // 修改下拉选中的建筑
-    changeBuildSelect(val) {
-      if (this.allBuilding[val].Floor && this.allBuilding[val].Floor.length) {
-        this.floorList = this.allBuilding[val].Floor
-        this.floorChange(0);
-      } else {
-        this.floorList = []
-      }
-    },
     // canvas点击事件
     canvasClick(item, event) {
       if (!this.isEdit) {
@@ -235,6 +261,31 @@ export default {
       }
       this.view = new FloorView('floorCanvas')
     },
+    
+    // 获取列表
+    getTenant() {
+      let pa = {
+        Cascade: [
+          { Name: 'zoneTenantList' },
+          // , Cascade: [{ Name: 'building' }, { Name: 'floor' }] 
+          { Name: 'zoneGeneraltList' }
+        ],
+        Orders: "TenantID asc",
+        PageSize: 1000
+      }
+      if (this.keyWord) {
+        pa.Filters = `TenantLocalName contain '${this.keyWord}'`
+      }
+      queryRentTableData(pa, res => {
+        this.tenantList = res.Content.map(t => {
+          t.active = false;
+          return t;
+        })
+        if (this.tenantList.length) {
+          this.tenantChange(0)
+        }
+      })
+    },
     // 编辑态获取所有建筑
     getAllBuilding() {
       let pa = {
@@ -243,6 +294,7 @@ export default {
       }
       buildingQuery(pa, res => {
         this.allBuilding = res.Content.map(t => {
+          t.active = false;
           if (t.Floor) {
             t.Floor.map(item => {
               item.active = false;
@@ -335,14 +387,15 @@ export default {
     save() {
       let arr = this.scene.getSelectedZone();
       let pa = {
-        SpaceIdList: [],
-        TenantId: this.curTenantId
+        data: {
+          SpaceIdList: [],
+          TenantId: this.curTenantId
+        },
+        type: this.value
       }
       pa.SpaceIdList = arr.map(t => {
         return t.data.RoomID;
       })
-      console.log(pa)
-      return
       tnRelateZone(pa, res => {
         this.$message.success('关联成功');
       })