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-
17231export 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