Merge branch 'main' of ssh://18.167.251.121:10002/aidlab/FiDA_Front

This commit is contained in:
2026-03-30 17:11:59 +08:00
12 changed files with 105 additions and 35 deletions

View File

@@ -38,10 +38,10 @@
<button class="export" @click="emit('import-local')">
<span class="text">本地导入</span>
</button> -->
<button class="workbench" @click="onWorkbench">
<!-- <button class="workbench" @click="onWorkbench">
<span class="icon"><svg-icon name="dc-workbench" size="20" /></span>
<span class="text">{{ $t('DepthCanvas.save') }}</span>
</button>
</button> -->
</div>
</template>

View File

@@ -189,6 +189,10 @@
// const canvas = canvasManager.processCanvasDisUrlJSON(object)
// console.log(canvas)
}
defineExpose({
onWorkbench
})
</script>
<style lang="less">
@import '@vue-flow/core/dist/style.css';

View File

@@ -1,7 +1,7 @@
<template>
<fullscreen-dialog v-model="dialogVisible" @close="onClose" hide-destroy>
<div class="canvas-box">
<depth-canvas :config="config" @workbench="onWorkbench" />
<depth-canvas ref="depthCanvasRef" :config="config" @workbench="onWorkbench" />
</div>
</fullscreen-dialog>
</template>
@@ -22,6 +22,7 @@
onWorkbench(options) {},
onClose() {}
})
const depthCanvasRef = ref(null)
const open = async (options) => {
config.value = options
@@ -61,8 +62,9 @@
}
// 关闭
const onClose = () => {
dialogVisible.value = false
config.value.onClose?.()
depthCanvasRef.value.onWorkbench()
// dialogVisible.value = false
// config.value.onClose?.()
}
defineExpose({

View File

@@ -100,6 +100,7 @@ export class AISelectboxToolManager {
this.demoObject = null
}
createIndicatorObject() {
this.clearIndicatorObject()
const rect = new fabric.Rect({
left: this.startX,
top: this.startY,
@@ -198,8 +199,8 @@ export class AISelectboxToolManager {
if (!this.isDragging) return;
this.isDragging = false;
const object = this.indicatorObject.toJSON("evented")
if (object.width === 0) object.width = 100
if (object.height === 0) object.height = 100
// if (object.width === 0) object.width = 100
// if (object.height === 0) object.height = 100
this.clearIndicatorObject()
this.canvasManager.canvas.renderAll()

View File

@@ -15,13 +15,7 @@ fabric.Object.prototype.toObject_ = fabric.Object.prototype.toObject
fabric.Object.prototype.toObject = function () {
const args = [...arguments]
const arr = [...fabric.Object.prototype.customProperties]
args.forEach(v => {
if (typeof v === 'string') {
arr.push(v)
} else if (Array.isArray(v)) {
arr.push(...v)
}
})
args.forEach(v => (Array.isArray(v) ? arr.push(...v) : arr.push(v)))
if (this.fill?.source === null) {
let image = new Image()
image.crossOrigin = 'anonymous'
@@ -159,6 +153,7 @@ export class CanvasManager {
this.canvas.add(obj)
const id = obj?.info?.id || ""
if (id) {
this.sortActiveObject(obj)
await this.layerManager.updateLayers(!!obj.info.parentId)
this.renderAll()
await this.layerManager.updateLayerThumbnailsById(id)
@@ -173,6 +168,21 @@ export class CanvasManager {
this.renderAll()
}
}
/** 根据激活对象排序当前对象 */
async sortActiveObject(object: any) {
const activeID = this.layerManager.activeID.value;
if (!activeID) return
const activeObject = this.getObjectById(activeID)
if (!activeObject) return
if (object.type !== "group") {
const parentId = activeObject.info?.parentId
if (!object.info.parentId) object.info.parentId = parentId
}
const index = this.getObjects().indexOf(activeObject)
this.canvas.moveTo(object, index + 1)
// await this.sortObjectByIds(ids, isRecord)
}
/** 更新子图层裁剪区域 */
async updateSubLayerClipPath() {

View File

@@ -3,9 +3,42 @@ import { NODE_TYPE, NODE_DATATYPE } from '../tools/index.d'
import { ElMessageBox } from 'element-plus'
import i18n from '@/lang'
import { putSketchFlowCanvas } from '@/api/flow-canvas'
import myEvent from '@/utils/myEvent'
const t = i18n.global.t
//推送到对话框的助手
const chatAssistant = {
[NODE_DATATYPE.TO_REAL_STYLE]:{
content: t('flowCanvas.toRealStyleDesignAssistant'),
nodeType:NODE_DATATYPE.TO_REAL_STYLE,
},
[NODE_DATATYPE.CANVAS_MODE]:{
content: t('flowCanvas.surfaceEditCanvasDesignAssistant'),
nodeType:NODE_DATATYPE.CANVAS_MODE,
},
[NODE_DATATYPE.SURFACE_EDIT]:{
content: t('flowCanvas.surfaceEditAIDesignAssistant'),
nodeType:NODE_DATATYPE.SURFACE_EDIT,
},
[NODE_DATATYPE.COLOR_PALETTE]:{
content: t('flowCanvas.colorPaletteDesignAssistant'),
nodeType:NODE_DATATYPE.COLOR_PALETTE,
},
[NODE_DATATYPE.SCENE_COMPOSITION]:{
content: t('flowCanvas.threeModelDesignAssistant'),
nodeType:NODE_DATATYPE.SCENE_COMPOSITION,
},
[NODE_DATATYPE.TO_3D_MODEL]:{
content: t('flowCanvas.threeModelDesignAssistant'),
nodeType:NODE_DATATYPE.TO_3D_MODEL,
},
[NODE_DATATYPE.TO_3VIEW]:{
content: t('flowCanvas.threeModelDesignAssistant'),
nodeType:NODE_DATATYPE.TO_3VIEW,
},
}
export interface NodesItem {
id: string
type: string
@@ -117,6 +150,7 @@ export class StateManager {
this.nodes.value.push(node);
this.recordState()
this.exportFlow()
if(chatAssistant[node.data.type])myEvent.emit('assistantPushChat',chatAssistant[node.data.type])
}
/** 删除节点 */
async deleteNode(id: string) {
@@ -133,7 +167,7 @@ export class StateManager {
getSuperiorNodeImage(superiorID: string) {
const superiorNode = this.getNodeById(superiorID)
if(!superiorNode){
ElMessage.error(t('flowCanvas.cannotFindSuperiorImage'))
// ElMessage.error(t('flowCanvas.cannotFindSuperiorImage'))
return null
}
const superiorNodeUrl = superiorNode.data.data.imageProcessTasks.filter((item)=>{