diff --git a/src/api/workshops.ts b/src/api/workshops.ts index 642716d..e5bda0a 100644 --- a/src/api/workshops.ts +++ b/src/api/workshops.ts @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2024-08-02 10:40:49 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-08-14 17:09:46 + * @LastEditTime: 2024-08-15 16:14:24 * @FilePath: \General-AI-Platform-Web-Client\src\api\workshops.ts * @Description: 布点 */ @@ -75,3 +75,17 @@ export const addWorkshopDevicesApi = (data?: object) => { data }); }; + +/** 编辑布点设备 data有id */ +export const editWorkshopDevicesApi = (data?: object) => { + return http.request("post", baseUrlApi("workshop_devices/"), { + data + }); +}; + +/** 删除布点设备 status: 1 */ +export const deleteWorkshopDevicesApi = (data?: object) => { + return http.request("post", baseUrlApi("workshop_devices/"), { + data: { ...data, status: 1 } + }); +}; diff --git a/src/core/plugin/ControlsPlugin.ts b/src/core/plugin/ControlsPlugin.ts index 13df367..284b8cf 100644 --- a/src/core/plugin/ControlsPlugin.ts +++ b/src/core/plugin/ControlsPlugin.ts @@ -2,7 +2,7 @@ * @Author: 秦少卫 * @Date: 2023-06-13 23:00:43 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-08-07 17:17:54 + * @LastEditTime: 2024-08-15 16:28:40 * @Description: 控制条插件 */ @@ -174,9 +174,15 @@ function deleteControl(canvas: fabric.Canvas) { if (target.action === "rotate") return true; const activeObject = canvas.getActiveObjects(); if (activeObject) { - activeObject.map(item => canvas.remove(item)); - canvas.requestRenderAll(); - canvas.discardActiveObject(); + // 发送删除事件 + canvas.fire("object:deleteObject", { + ...activeObject, + deleteCallback: () => { + activeObject.map(item => canvas.remove(item)); + canvas.requestRenderAll(); + canvas.discardActiveObject(); + } + }); } return true; } diff --git a/src/core/plugin/DeleteHotKeyPlugin.ts b/src/core/plugin/DeleteHotKeyPlugin.ts index c839510..29fb60b 100644 --- a/src/core/plugin/DeleteHotKeyPlugin.ts +++ b/src/core/plugin/DeleteHotKeyPlugin.ts @@ -2,12 +2,13 @@ * @Author: 秦少卫 * @Date: 2023-06-20 12:57:35 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-08-06 17:14:38 + * @LastEditTime: 2024-08-15 15:51:16 * @Description: 删除快捷键 */ import { fabric } from "fabric"; import Editor from "../core"; + type IEditor = Editor; // import { v4 as uuid } from 'uuid'; diff --git a/src/views/deviceSetting/components/deviceAttr.vue b/src/views/deviceSetting/components/deviceAttr.vue index 32f385e..3b604ca 100644 --- a/src/views/deviceSetting/components/deviceAttr.vue +++ b/src/views/deviceSetting/components/deviceAttr.vue @@ -6,34 +6,45 @@ import { textTypeConf } from "@/config/attribute/baseType"; import video_type_1 from "@/assets/modelSetting/video_type_1.png"; import video_type_2 from "@/assets/modelSetting/video_type_2.png"; import video_type_3 from "@/assets/modelSetting/video_type_3.png"; +import { + deleteWorkshopDevicesApi, + editWorkshopDevicesApi +} from "@/api/workshops"; +import { isSuccessApi } from "@/utils/forApi"; + +const props = defineProps({ + pointInfo: { + type: Object as Record + } +}); const event = inject("event"); const update = getCurrentInstance(); const { mixinState, canvasEditor } = useSelect(); /**业务属性 */ const formData = ref({ - iconType: 1 + icon: 1 }); const rules = { - iconType: [{ required: true, message: "请选择图标类型", trigger: "change" }] + icon: [{ required: true, message: "请选择图标类型", trigger: "change" }] }; const iconOptions = ref([ { - value: 1, + value: "1", label: "图标1", type: "1", url: video_type_1 }, { - value: 2, + value: "2", label: "图标2", type: "2", url: video_type_2 }, { - value: 3, + value: "3", label: "图标3", type: "3", url: video_type_3 @@ -181,10 +192,43 @@ const getObjectAttr = e => { const animateObject = activeObject.get("animation"); animationAttr.type = animateObject.type; } + // 设备相关属性 + if (activeObject.get("deviceInfo")) { + formData.value = activeObject.get("deviceInfo"); + } } }; +// 删除当前集合 +async function deleteDeviceObject(deleteObject) { + const currDeviceInfo = deleteObject[0].get("deviceInfo"); + console.log(currDeviceInfo, "deleteDeviceObject", deleteObject); + const resp = await deleteWorkshopDevicesApi({ + id: currDeviceInfo.id + }); + if (isSuccessApi(resp)) { + deleteObject.deleteCallback(); + } +} -const selectCancel = () => { +// 编辑当前集合 +async function editDeviceObject(callback) { + const activeObject = canvasEditor.canvas.getActiveObject(); + const currDeviceInfo = activeObject.get("deviceInfo"); + console.log(activeObject, "editDeviceObject_activeObject", currDeviceInfo); + const resp = await editWorkshopDevicesApi({ + id: currDeviceInfo.id, + device_id: currDeviceInfo.device_id, + workshop_id: currDeviceInfo.workshop_id, + x_ordinate: activeObject.get("left"), + y_ordinate: activeObject.get("top"), + icon: formData.value.icon + }); + if (isSuccessApi(resp)) { + console.log("编辑完成"); + callback(resp); + } +} +const selectCancel = e => { baseAttr.fill = ""; update?.proxy?.$forceUpdate(); }; @@ -193,10 +237,15 @@ const init = () => { // 获取字体数据 event.on("selectCancel", selectCancel); event.on("selectOne", getObjectAttr); + canvasEditor.canvas.on("object:deleteObject", deleteDeviceObject); + canvasEditor.canvas.on("mouse:up", () => { + editDeviceObject(); + }); canvasEditor.canvas.on("object:modified", getObjectAttr); // 监听 object:moving 事件以限制移动范围 canvasEditor.canvas.on("object:moving", e => { const activeObject = e.target; + // console.log(activeObject, "activeObject_moving"); if (activeObject) { constrainObjectWithinCanvas(activeObject); canvasEditor.canvas.renderAll(); @@ -238,7 +287,7 @@ const changeCommon = (key, value) => { canvasEditor.canvas.renderAll(); return; } - if (key === "iconType") { + if (key === "icon") { // 在 group 对象中查找唯一的 fabric.Image 对象 const imageObject = activeObject._objects[1]; @@ -250,16 +299,18 @@ const changeCommon = (key, value) => { if (targetIcon) { // 修改图片路径 - imageObject.setSrc( - targetIcon.url, - () => { - // 刷新画布 - console.log("Image loaded successfully activeObject_iconType"); - activeObject.addWithUpdate(); // 更新对象的坐标和边界框 - canvasEditor.canvas.renderAll(); - }, - { crossOrigin: "anonymous" } - ); + editDeviceObject(() => { + imageObject.setSrc( + targetIcon.url, + () => { + // 刷新画布 + console.log("Image loaded successfully activeObject_iconType"); + activeObject.addWithUpdate(); // 更新对象的坐标和边界框 + canvasEditor.canvas.renderAll(); + }, + { crossOrigin: "anonymous" } + ); + }); // 加载新的图片并替换旧的图片对象 // fabric.Image.fromURL( @@ -302,12 +353,14 @@ onMounted(init); onBeforeUnmount(() => { event.off("selectCancel", selectCancel); event.off("selectOne", getObjectAttr); + canvasEditor.canvas.off("object:deleteObject"); + canvasEditor.canvas.off("mouse:up"); canvasEditor.canvas.off("object:modified", getObjectAttr); canvasEditor.canvas.off("object:moving"); });