Skip to content

Commit 4b6a9ac

Browse files
committed
fix:fix review
1 parent 393f83b commit 4b6a9ac

2 files changed

Lines changed: 3 additions & 150 deletions

File tree

packages/canvas/DesignCanvas/src/api/useCanvas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ const resetCanvasState = async (state: Partial<PageState> = {}) => {
218218

219219
nodesMap.value.clear()
220220
// 切换页面时清空所有节点的AI状态,避免旧页面的AI状态残留
221-
pageState.nodesStatus = {}
221+
pageState.aiNodesStatus = {}
222222

223223
if (pageState.pageSchema) {
224224
if (!pageState.pageSchema.children) {

packages/toolbars/save/src/js/aiSaveValidation.ts

Lines changed: 2 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
* 保存页面时的验证逻辑
33
* 检查是否有未完成的AI修改,如果有则提示用户
44
*/
5-
6-
import { useCanvas, useMessage } from '@opentiny/tiny-engine-meta-register'
7-
const { publish } = useMessage()
5+
import { useCanvas } from '@opentiny/tiny-engine-meta-register'
86

97
/**
108
* 获取所有有待处理AI修改的节点ID
@@ -30,154 +28,9 @@ const hasAnyPendingAIModification = (): boolean => {
3028
return getAllNodesWithPendingAIModification().length > 0
3129
}
3230

33-
/**
34-
* 检查是否可以保存页面
35-
* @returns { canSave: boolean, pendingNodes: Array<{nodeId: string, description: string}> }
36-
*/
37-
const validateBeforeSave = () => {
38-
if (!hasAnyPendingAIModification()) {
39-
return {
40-
canSave: true,
41-
pendingNodes: []
42-
}
43-
}
44-
45-
const pendingNodeIds = getAllNodesWithPendingAIModification()
46-
const pendingNodes = pendingNodeIds.map((nodeId) => {
47-
const { pageState } = useCanvas()
48-
const aiStatus = pageState.aiNodesStatus[nodeId] || null
49-
return {
50-
nodeId,
51-
aiStatus
52-
}
53-
})
54-
55-
return {
56-
canSave: false,
57-
pendingNodes,
58-
message: `有 ${pendingNodes.length} 个节点的AI修改未完成处理`
59-
}
60-
}
61-
62-
/**
63-
* 显示保存前验证对话框
64-
* @returns Promise<boolean> 用户是否继续保存
65-
*/
66-
const showSaveValidationDialog = async (): Promise<boolean> => {
67-
const validation = validateBeforeSave()
68-
69-
if (validation.canSave) {
70-
return true
71-
}
72-
73-
// 发布消息,让其他组件可以显示提示
74-
publish({
75-
topic: 'saveValidationFailed',
76-
data: {
77-
reason: 'pending_ai_modifications',
78-
pendingNodes: validation.pendingNodes,
79-
message: `请先完成以下 ${validation.pendingNodes.length} 个节点的AI修改选择:`
80-
}
81-
})
82-
return false
83-
}
84-
85-
/**
86-
* 获取未完成AI修改的节点信息(用于在UI中显示)
87-
*/
88-
const getPendingAIModificationsInfo = () => {
89-
const validation = validateBeforeSave()
90-
91-
if (validation.canSave) {
92-
return {
93-
hasPending: false,
94-
count: 0,
95-
nodes: []
96-
}
97-
}
98-
99-
return {
100-
hasPending: true,
101-
count: validation.pendingNodes.length,
102-
nodes: validation.pendingNodes,
103-
summary: `有 ${validation.pendingNodes.length} 个节点的AI修改等待处理`
104-
}
105-
}
106-
107-
/**
108-
* 快速采纳所有待处理的AI修改
109-
* @returns { success: boolean, adoptedCount: number }
110-
*/
111-
const adoptAllPendingModifications = () => {
112-
const pendingNodeIds = getAllNodesWithPendingAIModification()
113-
let adoptedCount = 0
114-
115-
pendingNodeIds.forEach((nodeId) => {
116-
const { adoptNodeAIModification } = useCanvas()
117-
if (adoptNodeAIModification(nodeId)) {
118-
adoptedCount++
119-
}
120-
})
121-
122-
return {
123-
success: adoptedCount > 0,
124-
adoptedCount,
125-
message: `已采纳 ${adoptedCount} 个节点的AI修改`
126-
}
127-
}
128-
129-
/**
130-
* 快速拒绝所有待处理的AI修改
131-
* @returns { success: boolean, rejectedCount: number }
132-
*/
133-
const rejectAllPendingModifications = () => {
134-
const pendingNodeIds = getAllNodesWithPendingAIModification()
135-
let rejectedCount = 0
136-
137-
pendingNodeIds.forEach((nodeId) => {
138-
const { rejectNodeAIModification } = useCanvas()
139-
if (rejectNodeAIModification(nodeId)) {
140-
rejectedCount++
141-
}
142-
})
143-
144-
return {
145-
success: rejectedCount > 0,
146-
rejectedCount,
147-
message: `已拒绝 ${rejectedCount} 个节点的AI修改`
148-
}
149-
}
150-
151-
/**
152-
* 集成到现有保存逻辑的示例
153-
*/
154-
const createSaveWithValidation = (originalSaveFunction: (...args: any[]) => any) => {
155-
return async (...args: any[]) => {
156-
// 检查是否可以保存
157-
const canSave = await showSaveValidationDialog()
158-
159-
if (!canSave) {
160-
return {
161-
success: false,
162-
reason: 'pending_ai_modifications',
163-
message: '请先完成所有AI修改的选择'
164-
}
165-
}
166-
167-
// 调用原始保存函数
168-
return originalSaveFunction(...args)
169-
}
170-
}
171-
17231
export default function () {
17332
return {
17433
getAllNodesWithPendingAIModification,
175-
hasAnyPendingAIModification,
176-
validateBeforeSave,
177-
showSaveValidationDialog,
178-
getPendingAIModificationsInfo,
179-
rejectAllPendingModifications,
180-
createSaveWithValidation,
181-
adoptAllPendingModifications
34+
hasAnyPendingAIModification
18235
}
18336
}

0 commit comments

Comments
 (0)