Prechádzať zdrojové kódy

feat> 提交空间删除功能(左侧空间列表,按照分区类型删除)

yunxing 4 rokov pred
rodič
commit
07a1e06396

+ 37 - 6
src/components/editview/basePlanEditer.vue

@@ -110,6 +110,7 @@ export default {
             "ADDEQUIP",
             "REMOVEEQUIP",
             "ADDZONE",
+            "REMOVEZONE",
             "DELETEITEM",
             "INITSTYLE",
             "INITRULELIST",
@@ -326,14 +327,19 @@ export default {
             });
             // 手动删除设备实例
             bus.$off("removeEquipment");
-            bus.$on("removeEquipment", (equipList) => {
-                this.removeEquipment(equipList);
+            bus.$on("removeEquipment", (classCode) => {
+                this.removeEquipment(classCode);
             });
             // 手动添加空间实例
             bus.$off("addZone");
             bus.$on("addZone", (zoneList) => {
                 this.mergeZoneData(zoneList);
             });
+            // 手动删除空间实例
+            bus.$off("removeZone");
+            bus.$on("removeZone", (classCode) => {
+                this.removeZone(classCode);
+            });
             // 更改设备信息点
             bus.$off("changeEquipMsgPoint");
             bus.$on("changeEquipMsgPoint", (val) => {
@@ -400,6 +406,7 @@ export default {
                 // 同步执行规则,进行设备/设备组/空间的添加,删除
                 for (let index = 0; index < ruleList.length; index++) {
                     const rule = ruleList[index];
+                    // 查询规则
                     if (rule.commond && rule.commond === "query") {
                         const params = { ...rule.params, buildingId: this.buildingId, floorId: this.floorId };
                         if (rule?.returnType === "equip") {
@@ -413,16 +420,20 @@ export default {
                             this.loadedRuleNum++;
                             if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
                         }
-                    } else if (rule.commond && rule.commond === "delete") {
+                    } else if (rule.commond && rule.commond === "delete") { // 删除规则
                         // console.error("删除命令!!!", rule);
+                        // 删除设备实例
                         if (rule?.returnType === "equip") {
                             const classCode = rule?.params?.classCode
                             if (classCode) {
                                 this.removeEquipment(classCode)
                             }
-                        } else if (rule?.returnType === "zone") {
-                            //
-                        } else if (rule?.returnType === "equipGroup") {
+                        } else if (rule?.returnType === "zone") { // 删除空间实例
+                            const classCode = rule?.params?.classCode
+                            if (classCode) {
+                                this.removeZone(classCode)
+                            }
+                        } else if (rule?.returnType === "equipGroup") { // 删除设备组
                             //
                             this.loadedRuleNum++;
                             if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
@@ -474,6 +485,7 @@ export default {
         },
         /**
          * 删除设备实例
+         * 
          * @param { string }  classCode 删除的设备类code值
          */
         removeEquipment(classCode) {
@@ -517,6 +529,25 @@ export default {
             this.loadedRuleNum++;
             if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
         },
+        /**
+         * 删除设备实例
+         * 
+         * @param { string }  classCode 删除的设备类code值
+         */
+        removeZone(classCode) {
+            for (const key in this.zoneIteMap) {
+                const zoneItem = this.zoneIteMap[key]
+                if (zoneItem?.legendData?.classCode === classCode) {
+                    // 删除vuex中保存的空间实例
+                    this.REMOVEZONE(zoneItem);
+                    // 删除图上的空间实例
+                    this.scene.removeItem(zoneItem)
+                }
+            }
+            this.view.update();
+            this.loadedRuleNum++;
+            if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
+        },
         // 加载通用元素和管线元素
         loadMarkRelation() {
             const anchorList = []; //保存锚点对象

+ 4 - 11
src/components/editview/leftToolBar/equipmentList.vue

@@ -100,17 +100,10 @@ export default {
     },
     components: { editInfoPoint },
     computed: {
-        ...mapState(["editCmd", "equipmentItemList", "equipmentItemNum", "equipItemMap", "equipItemNum", "id", "graphId"]),
+        ...mapState(["equipItemMap", "equipItemNum", "id", "graphId"]),
     },
     watch: {
-        equipmentItemNum: {
-            handler: function (val) {
-                // this.localLoading();
-                // this.getCategory(this.equipmentItemList);
-            },
-            deep: true,
-            immediate: true,
-        },
+
         equipItemNum(newV, oldV) {
             newV && this.getEquipmentList();
         },
@@ -124,7 +117,7 @@ export default {
         // }
     },
     methods: {
-        ...mapMutations(["SETCHOICELEHEND", "SETLEGENDOBJ", "ADDRULE"]),
+        ...mapMutations(["ADDRULE"]),
         // 打开添加弹窗
         openAddEquipDialog() {
             this.$emit("openAddEquipDialog");
@@ -178,7 +171,7 @@ export default {
                             returnType: "equip", // 返回类型(equip: 设备, equipGroup: 设备组, zone: 空间)
                             commond: "delete", // 命令类型(query: 查询, delete: 删除)
                             params: {
-                                classCode:items.classCode
+                                classCode: items.classCode
                             },
                         },
                     ],

+ 42 - 10
src/components/editview/leftToolBar/spaceList.vue

@@ -1,6 +1,6 @@
 <!-- 空间列表 -->
 <template>
-    <div class="equip-list">
+    <div class="space-list">
         <!-- 筛选 -->
         <div class="clp">
             <Input
@@ -22,8 +22,8 @@
                     <i v-bind:class="[items.isShow ? 'caret-icon-active' : 'caret-icon', 'el-icon-caret-bottom ']"></i>
                     <span class="code-name">{{ items.codeName }}</span>
                     <div class="action">
-                        <Icon class="equip-edit" name="edit" @click.stop.native="editEquipment(items)" />
-                        <Icon class="equip-delete" name="delete" @click.stop.native="deleteEquipment(items)" />
+                        <Icon class="equip-edit" name="edit" @click.stop.native="editSpace(items)" />
+                        <Icon class="equip-delete" name="delete" @click.stop.native="deleteSpace(items)" />
                     </div>
                 </div>
                 <!-- 空间实例列表 -->
@@ -76,9 +76,10 @@
     </div>
 </template>
 <script>
-import { mapState } from "vuex";
+import { mapState, mapMutations } from "vuex";
 import bus from "@/bus/bus";
 import editInfoPoint from "./editInfoPoint";
+import { ruleCreate } from "@/api/labsl";
 
 export default {
     data() {
@@ -95,7 +96,7 @@ export default {
     },
     components: { editInfoPoint },
     computed: {
-        ...mapState(["zoneIteMap", "zoneItemNum"]),
+        ...mapState(["zoneIteMap", "zoneItemNum", "id", "graphId"]),
     },
     watch: {
         zoneItemNum(newV) {
@@ -106,6 +107,7 @@ export default {
         this.getSpaceList();
     },
     methods: {
+        ...mapMutations(["ADDRULE"]),
         // 打开添加弹窗
         openAddSpaceDialog() {
             this.$emit("openAddSpaceDialog");
@@ -161,12 +163,42 @@ export default {
         /**
          * 编辑空间类
          */
-        editEquipment(items) {
+        editSpace(items) {
             this.classCode = items.classCode;
             this.showEditInfoPoint = true;
         },
-        deleteEquipment(items) {
-            return true;
+        deleteSpace(items) {
+            this.$confirm(`此操作将删除${items.codeName}, 是否继续?`, "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(async () => {
+                const postParams = {
+                    content: [
+                        {
+                            graphCoding: this.id,
+                            graphId: this.graphId,
+                            returnType: "zone", // 返回类型(equip: 设备, equipGroup: 设备组, zone: 空间)
+                            commond: "delete", // 命令类型(query: 查询, delete: 删除)
+                            params: {
+                                classCode: items.classCode
+                            },
+                        },
+                    ],
+                };
+                const res = await ruleCreate(postParams);
+                if (res.result === "success") {
+                    this.$message.success("删除成功");
+                    if (res.entityList && res.entityList[0]) {
+                        // 在vuex中添加 删除的规则
+                        this.ADDRULE(res.entityList[0]);
+                        // 发出删除设备指令
+                        bus.$emit("removeZone", items.classCode);
+                    }
+                } else {
+                    this.$message.error(res.message || "删除失败");
+                }
+            });
         },
         /**
          * 点击空间,更改图chioceItem
@@ -222,7 +254,7 @@ div {
     user-select: none;
 }
 
-.equip-list {
+.space-list {
     width: 100%;
     height: 100%;
     position: relative;
@@ -266,7 +298,7 @@ div {
                 // width: 100px;
                 display: none;
                 .equip-delete {
-                    cursor: not-allowed;
+                    // cursor: not-allowed;
                 }
             }
             &:hover {

+ 8 - 2
src/store/index.ts

@@ -149,9 +149,9 @@ export default new Vuex.Store({
             }
         },
         // 删除设备实例
-        REMOVEEQUIP(state, item): void{
+        REMOVEEQUIP(state, item): void {
             // @ts-ignore
-            delete state.equipItemMap[item.id]
+            delete state.equipItemMap[item.id];
             state.equipItemNum = Object.keys(state.equipItemMap).length;
         },
         // 添加空间实例item
@@ -163,6 +163,12 @@ export default new Vuex.Store({
                 state.zoneItemNum = Object.keys(state.zoneIteMap).length;
             }
         },
+        // 删除空间实例
+        REMOVEZONE(state, item): void {
+            // @ts-ignore
+            delete state.zoneIteMap[item.id];
+            state.zoneItemNum = Object.keys(state.equipItemMap).length;
+        },
         // 删除实例item
         DELETEITEM(state): void {
             // 如果实例数组中parent 为null 则删除该数组