项目分析设计新增复制功能

This commit is contained in:
limengnan 2026-04-09 15:41:33 +08:00
parent 4b7966337a
commit 3d6d4d7d7d

View File

@ -19,6 +19,9 @@ import insertCss from 'insert-css'
import { updateProjects} from "@/api/business/project";
import Createscenario from '@/views/component/scenario/createscenario.vue'
import ScenarioModel from '@/views/component/scenario/index.vue'
import { addDevices } from "@/api/business/database/device";
import { saveOrUpdate} from "@/api/business/database/material";
import img1 from '@/assets/x6/1.png'
import img2 from '@/assets/x6/2.png'
import img3 from '@/assets/x6/3.png'
@ -983,22 +986,27 @@ function deleteNode() { // 删除节点
const isCopy = ref(false)
const copyNodeInfo:any = ref(null)
function copyNode() { //
if (selectedNode.value) {
try {
//
const position = selectedNode.value.position()
// 使
const newNode = selectedNode.value.clone()
copyNodeInfo.value = selectedNode.value.clone()
// 50px
newNode.position(position.x + 50, position.y + 50)
deviceTypetype.value = newNode.store.data.deviceInfo.type
copyNodeInfo.value.position(position.x + 50, position.y + 50)
// deviceTypetype.value = newNode.store.data.deviceInfo.type
//
graph.addNode(newNode)
//
// :deviceId="nodeId" :projectInfo="projectInfo"
// :deviceTypetype="deviceTypetype"
// graph.addNode(newNode)
copyDeviceInfo.value = {
oldname: copyNodeInfo.value.store.data.deviceInfo.name,
name:''
}
isMenuShow.value = false
isCopy.value = true
} catch (error) {
console.error('节点复制失败:', error)
}
@ -1394,7 +1402,6 @@ function saveDesign() { // 保存设计
}
}
console.log(devices)
const topology = {
projectId: projectInfo.value.projectId,
name: projectInfo.value.name,
@ -1436,10 +1443,110 @@ const isBoundary = ref(false)
const boundaryClick = () => {
isBoundary.value = !isBoundary.value
}
const copyDeviceInfo:any = ref({})
function dialogCopy(){
isCopy.value = false
}
const loading = ref(false)
const confirmCopyClick = async ()=>{
if(copyDeviceInfo.value.name == ''){
ElMessage({
type: "warning",
message: "请输入新设备名称",
});
return
}
loading.value = true
copyNodeInfo.value.store.data.attrs.label.text = copyDeviceInfo.value.name
copyNodeInfo.value.store.data.deviceInfo.name = copyDeviceInfo.value.name
copyNodeInfo.value.store.data.deviceInfo.code = copyDeviceInfo.value.code + '-copy'
copyNodeInfo.value.store.data.deviceInfo.deviceId = copyNodeInfo.value.id
if(copyNodeInfo.value.store.data.materialInfo != null && copyNodeInfo.value.store.data.materialInfo.materialId != null){
copyNodeInfo.value.store.data.materialInfo.materialId = copyNodeInfo.value.id
}
if(copyNodeInfo.value.store.data.changesettings != null &&
copyNodeInfo.value.store.data.changesettings.length >0){
for(let i=0;i<copyNodeInfo.value.store.data.changesettings.length;i++){
let changeSetting = copyNodeInfo.value.store.data.changesettings[i]
if(changeSetting.delayList != null && changeSetting.delayList.length >0){
for(let j=0;j<changeSetting.delayList.length;j++){
let delayList = changeSetting.delayList[j]
if(delayList.type == 'device'){
delayList.parentId = copyNodeInfo.value.id
delayList.parentName = copyDeviceInfo.value.name
}else if(delayList.type == 'material'){
delayList.parentId = copyNodeInfo.value.id
}
}
}
if(changeSetting.deviceMaterialData != null && changeSetting.deviceMaterialData.length >0){
for(let k=0;k<changeSetting.deviceMaterialData.length;k++){
let deviceMaterialData = changeSetting.deviceMaterialData[k]
if(deviceMaterialData.type == 'device'){
deviceMaterialData.parentId = copyNodeInfo.value.id
deviceMaterialData.parentName = copyDeviceInfo.value.name
}else if(deviceMaterialData.type == 'material'){
deviceMaterialData.parentId = copyNodeInfo.value.id
}
}
}
if(changeSetting.formulaData != null && changeSetting.formulaData.length >0){
for(let l=0;l<changeSetting.formulaData.length;l++){
let formulaData = changeSetting.formulaData[l]
if(typeof formulaData === 'object') {
if(formulaData.type == 'device'){
formulaData.parentId = copyNodeInfo.value.id
formulaData.parentName = copyDeviceInfo.value.name
}else if(formulaData.type == 'material'){
formulaData.parentId = copyNodeInfo.value.id
}
}
}
}
}
}
const deviceInfo = copyNodeInfo.value.store.data.deviceInfo
const materialInfo = copyNodeInfo.value.store.data.materialInfo
const result:any = await addDevices(deviceInfo);
if(result == false || result == undefined){
loading.value = false
ElMessage({
type: "success",
message: "复制失败",
});
return
}
if(materialInfo !=null && materialInfo.materialId != null){
const results:any = await saveOrUpdate(materialInfo);
if(results == false || results == undefined){
loading.value = false
ElMessage({
type: "success",
message: "复制失败",
});
return
}
}
isLock.value = true
graph.addNode(copyNodeInfo.value)
isLock.value = false
loading.value = false
saveDesign()
isCopy.value = false
}
</script>
<template>
<div class="app-layout" @click="isMenuShow = false">
<div class="app-layout" @click="isMenuShow = false" >
<div class="antvx6-header">
<div class="header-left-box">
<div class="return-icon-box" @click="closeAntvx6" title="返回工作台">
@ -1594,7 +1701,29 @@ const boundaryClick = () => {
</div>
</el-dialog>
<el-dialog v-model="isCopy" :close-on-click-modal="false"
:modal="false"
draggable
:before-close="dialogCopy"
title="复制设备"
append-to-body width="600px">
<el-form ref="infoForm" :model="copyDeviceInfo" label-width="100px"
style="width: 100%;height: 200px;margin-top: 30px;" v-loading="loading" element-loading-text="正在复制中...">
<el-form-item label="复制设备" prop="code" style="width: 100%;">
<el-input v-model="copyDeviceInfo.oldname" style="width: 100%" placeholder="" disabled></el-input>
</el-form-item>
<el-form-item label="新设备名称" prop="name" style="width: 100%;">
<el-input v-model="copyDeviceInfo.name" style="width: 100%" placeholder="请输入设备名称"></el-input>
</el-form-item>
<span class="dialog-footer"
style="display: flex;display: -webkit-flex; justify-content: flex-end;-webkit-justify-content: flex-end;">
<el-button @click="dialogCopy"> </el-button>
<el-button type="primary" @click="confirmCopyClick"> </el-button>
</span>
</el-form>
</el-dialog>