From 0e949a65b82ad98fbe12100e137a444377e56b86 Mon Sep 17 00:00:00 2001 From: Hcat <2768237203@qq.com> Date: Sat, 30 Dec 2023 16:39:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=A8=A1=E5=BC=8F=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/tunnelScene/PreviewScene.vue | 110 +++++++++++------- .../sceneClass/previewTunnelInit/index.js | 2 + src/store/modelSceneStore.js | 24 ++++ src/views/edit/edit.vue | 21 +--- src/views/tunnel/index.vue | 72 +++++++----- 5 files changed, 147 insertions(+), 82 deletions(-) diff --git a/src/components/content/tunnelScene/PreviewScene.vue b/src/components/content/tunnelScene/PreviewScene.vue index 274264f..7023ebe 100644 --- a/src/components/content/tunnelScene/PreviewScene.vue +++ b/src/components/content/tunnelScene/PreviewScene.vue @@ -49,7 +49,9 @@ import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader"; import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"; import { onMounted, reactive, ref, toRaw, getCurrentInstance } from "vue"; import { ElMessage } from "element-plus"; -// import { deleteEquipment, initData } from "./request"; +import { editTunnel, getTunnelDetail } from "@/api/tunnelManage"; + +import { useModelSceneStore } from "@/store/modelSceneStore"; // 获取html标签跟随组件dom const content = ref(null); const info = ref(null); @@ -60,23 +62,40 @@ let demo; //定义demo全局变量 const loader = new OBJLoader(); let hdrLoader = new RGBELoader(); let backColorSet = three.sRGBEncoding; - +const modelStore = useModelSceneStore(); const params = defineProps(["isedit", "tunnelId"]); //接收参数看是不是编辑模式,如果是编辑模式,则需要做一些处理 let isedit = ref(params.isedit) +// const form = ref({ +// tunnelName: "", +// serialNumber: "", +// totalLength: "", +// isDefault: false, +// remarks: "", +// }); + +// const getTunnelPreview = () => { +// getTunnelDetail(params.tunnelId).then((res) => { +// if (res?.code === 1000) { +// form.value = res.data; +// } +// }); +// }; -// watch( -// () => params.tunnelId, -// (now) => { -// params.tunnelId = now -// console.log(params.tunnelId); -// }, -// { deep: true } -// ) +watch( + () => params.tunnelId, + (now) => { + params.tunnelId = now + console.log(params.tunnelId); + // getTunnelPreview(); + // console.log(form.value); + }, + { deep: true } +) onMounted(handleMounted); // 挂载后回调 @@ -95,12 +114,13 @@ async function handleMounted() { //加载HDR背景图片 demo.loadBackground(hdrLoader, backColorSet); - watch( - () => params.tunnelId, - async () => { - const text = await initData(params.tunnelId); - } - ); + //先不加试试??? + // watch( + // () => params.tunnelId, + // async () => { + // const text = await initData(params.tunnelId); + // } + // ); // 初始化设备模型 try { //在这加载隧道 @@ -110,36 +130,44 @@ async function handleMounted() { // 给对象初加载设备模型 demo.initDevicesModel(map); // const equipmentList = await store.getEquipmentList(); - modelList.value = await initData(params.tunnelId); + modelList.value = await modelStore.initModelDataPreview(params.tunnelId); // console.log("init", params.tunnelId); - demo.previewtunnelModeInit(modelList.value); - watch( - () => params.tunnelId, - (now) => { - params.tunnelId = now - // console.log(params.tunnelId); - checkTunnelInit(modelList.value) - demo.previewtunnelModeInit(modelList.value); - }, - { deep: true } - ) + demo.previewtunnelModeInit(toRaw(modelList.value)); + // watch( + // () => params.tunnelId, + // (now) => { + // params.tunnelId = now + // // console.log(params.tunnelId); + // checkTunnelInit(modelList.value) + // demo.previewtunnelModeInit(modelList.value); + // }, + // { deep: true } + // ) // demo.previewtunnelModeInit(equipmentList); // previewEquInfProcess(modelList.value, targetP.value) } catch (err) { - console.log(err); + if (err == undefined) { + return + } else { + console.log(err); + ElMessage({ + message: "场景初始化异常---!", + type: "warning", + }); + } } } -function checkTunnelInit(equipmentList) { - equipmentList.forEach((item) => { - let equipment = toRaw(item) - console.log("我要清理掉之前的设备!!!"); - console.log(equipment); - console.log(demo.scene.getObjectByName(equipment.position)); - demo.removeEquipment(demo.scene.getObjectByName(equipment.position)); - }); -} +// function checkTunnelInit(equipmentList) { +// equipmentList.forEach((item) => { +// let equipment = toRaw(item) +// console.log("我要清理掉之前的设备!!!"); +// console.log(equipment); +// console.log(demo.scene.getObjectByName(equipment.position)); +// demo.removeEquipment(demo.scene.getObjectByName(equipment.position)); +// }); +// } // 每个模型加载回调 function loadModel(path) { @@ -202,7 +230,8 @@ function rClickCallback(demo) { function editDev(targetPoint = null) { hasDevice.value = targetPoint.hasDevice; targetP.value = targetPoint; - const equipmentList = initData(params.tunnelId) + //这里是初始化必经之路!!! + const equipmentList = modelStore.initModelDataPreview(params.tunnelId) equipmentList.then((result) => { previewEquInfProcess(result, targetP.value) }) @@ -238,7 +267,8 @@ function handleRemoveEqu() { // 对话框确认删除 function handleConfirmAddEqu() { console.log("target:", targetP.value.info); - deleteEquipment(targetP.value.info.equipmentId, pointGap) + modelStore + .deleteEquipment(targetP.value.info.equipmentId, pointGap) .then((res) => { demo.removeEquipment(targetP.value); centerDialogVisible.value = false; diff --git a/src/components/content/tunnelScene/sceneClass/previewTunnelInit/index.js b/src/components/content/tunnelScene/sceneClass/previewTunnelInit/index.js index 8ea6300..7103d7d 100644 --- a/src/components/content/tunnelScene/sceneClass/previewTunnelInit/index.js +++ b/src/components/content/tunnelScene/sceneClass/previewTunnelInit/index.js @@ -10,6 +10,8 @@ export default function previewtunnelModeInit(equipmentList) { // this.scene.getObjectByName(wall).visible = false // } // } + console.log(equipmentList); + equipmentList.forEach((item) => { this.addEquipment(this.scene.getObjectByName(item.position), item); }); diff --git a/src/store/modelSceneStore.js b/src/store/modelSceneStore.js index 98f3a94..5420cd3 100644 --- a/src/store/modelSceneStore.js +++ b/src/store/modelSceneStore.js @@ -25,6 +25,29 @@ export const useModelSceneStore = defineStore("modelSceneData", () => { }); } + function initModelDataPreview(tunnelId) { + if (tunnelId == 0) { + return new Promise((resolve, reject) => { + reject() + }) + } else { + return new Promise((resolve, reject) => { + initSceneData(tunnelId) + .then((res) => { + if (res.data.tunnelThreeConfig) { + equipmentList.value = JSON.parse(res.data.tunnelThreeConfig); + } else { + equipmentList.value = []; + } + resolve(toRaw(equipmentList.value)); + }) + .catch((error) => { + reject(); + }); + }); + } + } + function addEquipment(equipmentInfo, pointGap) { return new Promise((resolve, reject) => { if (hasEquipment(equipmentList.value, equipmentInfo.equipmentId)) { @@ -84,6 +107,7 @@ export const useModelSceneStore = defineStore("modelSceneData", () => { initModelData, addEquipment, deleteEquipment, + initModelDataPreview }; }); diff --git a/src/views/edit/edit.vue b/src/views/edit/edit.vue index 18b311c..5b5c833 100644 --- a/src/views/edit/edit.vue +++ b/src/views/edit/edit.vue @@ -20,11 +20,7 @@ - + @@ -39,14 +35,8 @@ - +