This commit is contained in:
lzp
2026-03-13 11:20:15 +08:00
25 changed files with 2177 additions and 294 deletions

View File

@@ -1,15 +1,11 @@
import { getTaskidResult } from '@/api/flow-canvas'
interface NodeOptions {
id?: string
position?: { x: number, y: number }
positionX?: number
positionY?: number
component?: any
}
import { ElMessage } from 'element-plus'
// interface NodeOptions {
// }
export class GenerateManager {
stateManager: any
taskIds: string[] = []
getTaskIdsImgTime: any
constructor(options) {
this.stateManager = options.stateManager;
}
@@ -19,19 +15,63 @@ export class GenerateManager {
}
/** 添加taskId */
addTaskId(TaskId: any) {
this.stateManager.addTaskId(TaskId)
addTaskId(generateData: any,nodeId: string) {
this.taskIds.push({
...generateData,
nodeId,
})
this.getTasksIdImg()
}
/** 添加taskId */
async getTasksIdImg(list) {
let taskIds = list.map((item)=>item.taskId)
getTaskidResult({taskIds}).then((rv)=>{
console.log(rv)
})
async getTasksIdImg() {
clearInterval(this.getTaskIdsImgTime)
this.getTaskIdsImgTime = setInterval(()=>{
let taskIds = this.taskIds.map((item)=>item.taskId)
getTaskidResult({taskIds}).then((rv:any)=>{
//找出成功和失败的任务
let returnedTasks = rv.filter((item)=>item.status == 'RETURNED' || item.status == 'FAILED')
if(returnedTasks.length == 0)return
//剔除调成功的
let taskIds_ = JSON.parse(JSON.stringify(this.taskIds))
this.taskIds = taskIds_.filter(itemA =>
!returnedTasks.some(itemB => itemB.taskId === itemA.taskId)
)
//把成功的提取出来并且更新到node中
const result = returnedTasks.filter(itemA =>
taskIds_.some(itemB => {
itemA.nodeId = itemB.nodeId
return itemB.taskId === itemA.taskId
})
)
result.forEach(item => {
this.stateManager.getNodeById(item.nodeId).data.data.imageProcessTasks.forEach((nodeDataItem:any)=>{
if(item.taskId == nodeDataItem.taskId){
if(item.status == 'FAILED'){
this.stateManager.deleteNode(item.nodeId)
ElMessage.error(item.errorMessage)
}else if(item.status == 'RETURNED'){
nodeDataItem.url = item.url
nodeDataItem.createTime = item.createTime
nodeDataItem.status = item.status
}
}
})
})
if(this.taskIds.length == 0)clearInterval(this.getTaskIdsImgTime)
}).catch(()=>{
clearInterval(this.getTaskIdsImgTime)
console.warn('获取taskId图片失败')
})
}, 3000)
}
/** 更新taskId */
updateTaskId(taskId: string) {
this.stateManager.getNodeById()
}
dispose() {
this.taskIds = []
clearInterval(this.getTaskIdsImgTime)
}
}

View File

@@ -10,6 +10,8 @@ interface NodeData {
disableDelete?: boolean// 是否禁用删除
disableCopy?: boolean// 是否禁用复制
originalImage?: string// 要进行生成的图片
createIndexPosition?: number// 创建索引位置
isActive?: boolean// 是否激活
}
interface NodeOptions {
id?: string
@@ -68,9 +70,11 @@ export class NodeManager {
const options_ = {
...(options ? options : {}),
component: NODE_COMPONENT.RESULT_IMAGE,
positionY: options?.positionY || 0,
data: {
tier: NODE_DATATIER.RESULT_IMAGE,
type: NODE_DATATYPE.RESULT_IMAGE,
createIndexPosition: options?.data?.createIndexPosition || 1,
isHeader: true,
...(options?.data || {}),
},

View File

@@ -1,5 +1,5 @@
import { ref, computed } from "vue";
import { NODE_TYPE } from '../tools/index.d'
import { NODE_TYPE, NODE_DATATYPE } from '../tools/index.d'
import { ElMessageBox } from 'element-plus'
import i18n from '@/lang'
const t = i18n.global.t
@@ -35,12 +35,14 @@ export class StateManager {
flowManager: any
nodeManager: any
toolManager: any
generateManager: any
// 设置管理器
setManager(options) {
options.eventManager && (this.eventManager = options.eventManager)
options.flowManager && (this.flowManager = options.flowManager)
options.nodeManager && (this.nodeManager = options.nodeManager)
options.toolManager && (this.toolManager = options.toolManager)
options.generateManager && (this.generateManager = options.generateManager)
}
constructor(options) {
this.vueFlow = options.vueFlow
@@ -87,12 +89,14 @@ export class StateManager {
source: source,
target: target,
selectable: false,
visible: (node.data.type !== NODE_DATATYPE.RESULT_IMAGE || node.data.isActive),
type: 'default'
})
}
})
return arr
})
window.nodes = this.nodes
}
/** 设置激活节点 */
@@ -131,8 +135,8 @@ export class StateManager {
/** 获取节点 */
getNodeById(id: string) { return this.nodes.value.find((node: NodesItem) => node.id === id) }
/** 获取下级节点 */
getSubordNodeById(id: string) { return this.nodes.value.find((node: NodesItem) => node.data.superiorID === id) }
getLastNode() { return this.nodes.value[this.nodes.value.length - 1] }
getSubordNodeByID(id: string) { return this.nodes.value.find((node: NodesItem) => node.data.superiorID === id) }
getLastNode() { console.log(this.nodes.value); return this.nodes.value[this.nodes.value.length - 1] }
/** 设置工具 */
setTool(tool: string) { this.tool.value = tool }
/** 设置光标 */
@@ -183,6 +187,20 @@ export class StateManager {
this.nodes.value = JSON.parse(state.nodes)
}
/** 显示指定子节点和父节点连接线,隐藏父节点和其他子节点链接线, */
showNodeConnections(id: string) {
const node = this.getNodeById(id)
if(node.data.component != NODE_DATATYPE.RESULT_IMAGE && node.data.superiorID) return
let edges_ = JSON.parse(JSON.stringify(this.edges.value))
this.nodes.value.forEach((nodeItem) => {
if(node.data.superiorID === nodeItem.data.superiorID && nodeItem.id == id) {
nodeItem.data.isActive = true
}else if(node.data.superiorID == nodeItem.data.superiorID){
nodeItem.data.isActive = false
}
})
}
dispose() {
this.historyList.value = []
this.historyIndex.value = 0