Browse Source

feat: 新增设备类删除功能

yunxing 4 years ago
parent
commit
fe5a67b0fa

+ 47 - 14
src/components/editview/basePlanEditer.vue

@@ -108,6 +108,7 @@ export default {
             "SETPROJECT",
             "SETVERSION",
             "ADDEQUIP",
+            "REMOVEEQUIP",
             "ADDZONE",
             "DELETEITEM",
             "INITSTYLE",
@@ -323,6 +324,11 @@ export default {
             bus.$on("addEquipment", (equipList) => {
                 this.mergeEquipData(equipList);
             });
+            // 手动删除设备实例
+            bus.$off("removeEquipment");
+            bus.$on("removeEquipment", (equipList) => {
+                this.removeEquipment(equipList);
+            });
             // 手动添加空间实例
             bus.$off("addZone");
             bus.$on("addZone", (zoneList) => {
@@ -362,7 +368,7 @@ export default {
             });
         },
         // 读图成功回调
-        getDataSuc(res) {
+        async getDataSuc(res) {
             if (res.result == "failure") return;
             this.SETPROJECT(res.content);
             this.planContent = res.content;
@@ -389,7 +395,11 @@ export default {
             if (res.content.ruleList?.length) {
                 this.INITRULELIST(res.content.ruleList);
                 this.ruleNum = res.content.ruleList.length;
-                res.content.ruleList.forEach(async (rule) => {
+
+                const ruleList = res.content.ruleList
+                // 同步执行规则,进行设备/设备组/空间的添加,删除
+                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") {
@@ -399,21 +409,26 @@ export default {
                             const res = await spaceQuery(params);
                             if (res.result === "success") this.mergeZoneData(res.content);
                         } else if (rule?.returnType === "equipGroup") {
-                            setTimeout(() => {
-                                console.error("请求设备组数据");
-                                this.loadedRuleNum++;
-                                if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
-                            }, 1000);
+                            console.error("请求设备组数据");
+                            this.loadedRuleNum++;
+                            if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
                         }
                     } else if (rule.commond && rule.commond === "delete") {
-                        /**
-                         * 暂未实现
-                         */
-                        console.error("删除命令!!!", rule);
-                        this.loadedRuleNum++;
-                        if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
+                        // 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") {
+                            //
+                            this.loadedRuleNum++;
+                            if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
+                        }
                     }
-                });
+                }
             } else {
                 this.INITRULELIST([]);
                 if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
@@ -457,6 +472,24 @@ export default {
             this.loadedRuleNum++;
             if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
         },
+        /**
+         * 删除设备实例
+         * @param { string }  classCode 删除的设备类code值
+         */
+        removeEquipment(classCode) {
+            for (const key in this.equipItemMap) {
+                const equipItem = this.equipItemMap[key]
+                if (equipItem?.legendData?.classCode === classCode) {
+                    // 删除vuex中保存的设备实例
+                    this.REMOVEEQUIP(equipItem);
+                    // 删除图上的设备实例
+                    this.scene.removeItem(equipItem)
+                }
+            }
+            this.view.update();
+            this.loadedRuleNum++;
+            if (this.ruleNum === this.loadedRuleNum) this.loadMarkRelation();
+        },
         // 解析空间数据
         mergeZoneData(zoneList) {
             zoneList.forEach((zone) => {

+ 40 - 5
src/components/editview/leftToolBar/equipmentList.vue

@@ -83,6 +83,7 @@
 import { mapMutations, mapState } from "vuex";
 import bus from "@/bus/bus";
 import editInfoPoint from "./editInfoPoint";
+import { ruleCreate } from "@/api/labsl";
 
 export default {
     data() {
@@ -99,7 +100,7 @@ export default {
     },
     components: { editInfoPoint },
     computed: {
-        ...mapState(["editCmd", "equipmentItemList", "equipmentItemNum", "equipItemMap", "equipItemNum"]),
+        ...mapState(["editCmd", "equipmentItemList", "equipmentItemNum", "equipItemMap", "equipItemNum", "id", "graphId"]),
     },
     watch: {
         equipmentItemNum: {
@@ -123,7 +124,7 @@ export default {
         // }
     },
     methods: {
-        ...mapMutations(["SETCHOICELEHEND", "SETLEGENDOBJ"]),
+        ...mapMutations(["SETCHOICELEHEND", "SETLEGENDOBJ", "ADDRULE"]),
         // 打开添加弹窗
         openAddEquipDialog() {
             this.$emit("openAddEquipDialog");
@@ -159,8 +160,42 @@ export default {
             this.classCode = items.classCode;
             this.showEditInfoPoint = true;
         },
+        /**
+         * 删除设备类
+         */
         deleteEquipment(items) {
-            return true;
+            // console.log(items)
+            this.$confirm(`此操作将删除${items.codeName}, 是否继续?`, "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(async () => {
+                const postParams = {
+                    content: [
+                        {
+                            graphCoding: this.id,
+                            graphId: this.graphId,
+                            returnType: "equip", // 返回类型(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("removeEquipment", items.classCode);
+                    }
+                } else {
+                    this.$message.error(res.message || "删除失败");
+                }
+            });
         },
         /**
          * 点击设备,更改图chioceItem
@@ -196,7 +231,7 @@ export default {
             });
         },
         //
-        changeItem() {},
+        changeItem() { },
         // 搜索回车操作
         pressEnter() {
             const list = [];
@@ -279,7 +314,7 @@ div {
                 // width: 100px;
                 display: none;
                 .equip-delete {
-                    cursor: not-allowed;
+                    // cursor: not-allowed;
                 }
             }
             &:hover {

+ 6 - 0
src/store/index.ts

@@ -148,6 +148,12 @@ export default new Vuex.Store({
                 state.equipItemNum = Object.keys(state.equipItemMap).length;
             }
         },
+        // 删除设备实例
+        REMOVEEQUIP(state, item): void{
+            // @ts-ignore
+            delete state.equipItemMap[item.id]
+            state.equipItemNum = Object.keys(state.equipItemMap).length;
+        },
         // 添加空间实例item
         ADDZONE(state, item): void {
             // @ts-ignore