123 lines
3.3 KiB
JavaScript
123 lines
3.3 KiB
JavaScript
import { defineStore } from "pinia";
|
|
import { ref, toRaw } from "vue";
|
|
import { apiSaveEquipment, initSceneData } from "../api/tunnelScene";
|
|
|
|
export const useModelSceneStore = defineStore("modelSceneData", () => {
|
|
let equipmentList = ref([]);
|
|
let requestOtherConfig = ref({});
|
|
|
|
function initModelData(tunnelId, otherConfig) {
|
|
return new Promise((resolve, reject) => {
|
|
handleSettingOtherConfig(otherConfig, requestOtherConfig);
|
|
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)) {
|
|
reject(3000);
|
|
return;
|
|
}
|
|
equipmentList.value.push(equipmentInfo);
|
|
apiSaveEquipment({
|
|
constructionLength: autoComputeConstructionLength(
|
|
equipmentList.value,
|
|
pointGap
|
|
),
|
|
modelEquipmentList: toRaw(equipmentList.value),
|
|
...requestOtherConfig,
|
|
})
|
|
.then((res) => {
|
|
console.log("res", res);
|
|
resolve();
|
|
})
|
|
.catch((err) => {
|
|
console.log("res", err);
|
|
equipmentList.value.pop();
|
|
reject();
|
|
});
|
|
});
|
|
}
|
|
// 删除设备
|
|
function deleteEquipment(equipmentId, pointGap) {
|
|
let equipment = null;
|
|
equipmentList.value = equipmentList.value.filter((item) => {
|
|
if (item.equipmentId === equipmentId) {
|
|
equipment = item;
|
|
}
|
|
return item.equipmentId != equipmentId;
|
|
});
|
|
|
|
return new Promise((resolve, reject) => {
|
|
apiSaveEquipment({
|
|
constructionLength: autoComputeConstructionLength(
|
|
equipmentList.value,
|
|
pointGap
|
|
),
|
|
modelEquipmentList: toRaw(equipmentList.value),
|
|
...requestOtherConfig,
|
|
})
|
|
.then((res) => {
|
|
resolve();
|
|
})
|
|
.catch((err) => {
|
|
equipmentList.value.push(equipment);
|
|
reject();
|
|
});
|
|
});
|
|
}
|
|
|
|
return {
|
|
initModelData,
|
|
addEquipment,
|
|
deleteEquipment,
|
|
};
|
|
});
|
|
|
|
function handleSettingOtherConfig(otherConfig, requestOtherConfig) {
|
|
requestOtherConfig.isDefault = otherConfig.isDefault;
|
|
requestOtherConfig.remarks = otherConfig.remarks;
|
|
requestOtherConfig.serialNumber = otherConfig.serialNumber;
|
|
requestOtherConfig.tunnelId = otherConfig.tunnelId;
|
|
requestOtherConfig.tunnelLength = otherConfig.totalLength;
|
|
requestOtherConfig.tunnelName = otherConfig.tunnelName;
|
|
}
|
|
|
|
function autoComputeConstructionLength(modelEquipmentList, pointGap) {
|
|
let maxLength = 0;
|
|
modelEquipmentList.forEach((item) => {
|
|
const length =
|
|
Number(
|
|
item.position.substring(
|
|
item.position.indexOf("_") + 1,
|
|
item.position.lastIndexOf("_")
|
|
) - 1
|
|
) * pointGap;
|
|
if (length > maxLength) {
|
|
maxLength = length;
|
|
}
|
|
});
|
|
return maxLength;
|
|
}
|
|
|
|
function hasEquipment(equipmentList, equipmentId) {
|
|
let result = false;
|
|
equipmentList.forEach((item) => {
|
|
if (item.equipmentId === equipmentId) result = true;
|
|
});
|
|
return result;
|
|
}
|