7373 </template >
7474 </tr-container >
7575 <tiny-dialog-box v-model:visible =" showPreview" title =" 当前AI渲染效果" width =" 80%" >
76- <schema-renderer :schema =" currentSchema" ></schema-renderer >
76+ <schema-renderer v-if = " showPreview " :schema =" currentSchema" ></schema-renderer >
7777 </tiny-dialog-box >
7878 </div >
7979 </Teleport >
@@ -93,7 +93,6 @@ import {
9393 TrFeedback ,
9494 TrAttachments
9595} from ' @opentiny/tiny-robot'
96- import type { BubbleRoleConfig } from ' @opentiny/tiny-robot'
9796import { IconNewSession } from ' @opentiny/tiny-robot-svgs'
9897import SchemaRenderer from ' @opentiny/tiny-schema-renderer'
9998import RobotSettingPopover from ' ./RobotSettingPopover.vue'
@@ -211,7 +210,6 @@ export default {
211210 ... currentSchema .value ,
212211 componentName: pageState .pageSchema .componentName
213212 }
214-
215213 importSchema (value )
216214 setSaved (false )
217215 showPreview .value = false
@@ -254,26 +252,18 @@ export default {
254252 const regex = / ```json([\s\S ] *? )```/
255253 const match = chatMessage ?.content .match (regex )
256254
257- if (match && match [1 ]) {
258- // const jsonContent = match[1].trim().replace(
259- // /(\s*)([a-zA-Z0-9_]+)(\s*):/g, // 匹配 key:
260- // '$1"$2"$3:' // 替换成 "key":
261- // )
262- const jsonContent = chatMessage ?.content .replace (/ ^ ```json| ```$ / g , ' ' ).trim ()
263- const newValue = JSON .parse (jsonContent ).map ((op ) => fixedJson (op ))
264-
265- if (newValue && isValidFastJsonPatch (newValue )) {
266- // 使用 applyPatch 修改 Schema
267- const result = newValue .reduce (jsonpatch .applyReducer , pageState .pageSchema )
268-
269- sessionProcess .messages .push (
270- getAiRespMessage (JSON .stringify (pageState .pageSchema , null , 2 ), chatMessage .role )
271- )
272- sessionProcess .displayMessages .push (getAiDisplayMessage (MESSAGE_TIP , chatMessage .role , result , res .id ))
273- messages .value [messages .value .length - 1 ].content = MESSAGE_TIP
274- messages .value [messages .value .length - 1 ].schema = result
275- messages .value [messages .value .length - 1 ].id = res .id
276- }
255+ if (match && match [1 ] && JSON .parse (match [1 ]) && isValidFastJsonPatch (JSON .parse (match [1 ]))) {
256+ const newValue = JSON .parse (match [1 ])
257+ // 使用 applyPatch 修改 Schema
258+ const result = newValue .reduce (jsonpatch .applyReducer , pageState .pageSchema )
259+
260+ sessionProcess .messages .push (
261+ getAiRespMessage (JSON .stringify (pageState .pageSchema , null , 2 ), chatMessage .role )
262+ )
263+ sessionProcess .displayMessages .push (getAiDisplayMessage (MESSAGE_TIP , chatMessage .role , result , res .id ))
264+ messages .value [messages .value .length - 1 ].content = MESSAGE_TIP
265+ messages .value [messages .value .length - 1 ].schema = result
266+ messages .value [messages .value .length - 1 ].id = res .id
277267 } else {
278268 sessionProcess .messages .push (getAiRespMessage (chatMessage ?.content ))
279269 sessionProcess .displayMessages .push (getAiRespMessage (chatMessage ?.content ))
@@ -523,7 +513,7 @@ export default {
523513 },
524514 actions: [
525515 { name: ' preview' , label: ' 预览' , icon: previewIcon },
526- { name: ' run' , label: ' 运行 ' , icon: saveIcon }
516+ { name: ' run' , label: ' 应用 ' , icon: saveIcon }
527517 ],
528518 onAction(name ) {
529519 currentSchema .value = getItemSchema (bubbleProps )?.schema || {}
@@ -542,10 +532,10 @@ export default {
542532 })
543533
544534 // 处理文件选择事件
545- const handleSingleFilesSelected = (files : FileList | null ) => {
546- if (! files .length ) return
535+ const handleSingleFilesSelected = (files : FileList | null , retry = false ) => {
536+ if (! files .length && ! retry ) return
547537
548- if (files && files .length > 1 ) {
538+ if (files && files .length > 1 && ! retry ) {
549539 Notify ({
550540 type: ' error' ,
551541 message: ' 当前仅支持上传一张图片' ,
@@ -555,7 +545,7 @@ export default {
555545 return
556546 }
557547
558- if (files && files .length > 0 ) {
548+ if (files && files .length > 0 && ! retry ) {
559549 // 将选中的文件转换为 Attachment 格式并添加到附件列表
560550 const newAttachments = Array .from (files ).map ((file , index ) => ({
561551 uid: ` ${Date .now ()}-${index } ` ,
@@ -567,38 +557,38 @@ export default {
567557 messageType: ' uploading' ,
568558 file: file
569559 }))
570-
571560 singleAttachmentItems .value .push (... newAttachments )
561+ }
572562
573- // 开始上传
574- const formData = new FormData ()
575- formData .append (' modelName' , String (sessionProcess .foundationModel .model ))
576- formData .append (' apiKey' , String (sessionProcess .foundationModel .apiKey ))
577- formData .append (' file' , files [0 ])
563+ // 开始上传
564+ const formData = new FormData ()
565+ const fileData = retry ? files : files [0 ]
566+ formData .append (' modelName' , String (sessionProcess .foundationModel .model ))
567+ formData .append (' apiKey' , String (sessionProcess .foundationModel .apiKey ))
568+ formData .append (' file' , fileData )
578569
579- try {
580- getMetaApi (META_SERVICE .Http )
581- .post (' /app-center/api/ai/uploadFile' , formData , {
582- headers: {
583- ' Content-Type' : ' multipart/form-data'
584- }
585- })
586- .then ((res ) => {
587- if (res ?.url ) {
588- imageUrl .value = res .url
589- singleAttachmentItems .value [0 ].status = ' done'
590- singleAttachmentItems .value [0 ].isUploading = false
591- singleAttachmentItems .value [0 ].messageType = ' success'
592- } else {
593- imageUrl .value = ' '
594- singleAttachmentItems .value [0 ].status = ' error'
595- singleAttachmentItems .value [0 ].isUploading = false
596- singleAttachmentItems .value [0 ].messageType = ' error'
597- }
598- })
599- } catch (error ) {
600- console .error (' 上传失败' , error )
601- }
570+ try {
571+ getMetaApi (META_SERVICE .Http )
572+ .post (' /app-center/api/ai/uploadFile' , formData , {
573+ headers: {
574+ ' Content-Type' : ' multipart/form-data'
575+ }
576+ })
577+ .then ((res ) => {
578+ if (res ?.url ) {
579+ imageUrl .value = res .url
580+ singleAttachmentItems .value [0 ].status = ' done'
581+ singleAttachmentItems .value [0 ].isUploading = false
582+ singleAttachmentItems .value [0 ].messageType = ' success'
583+ } else {
584+ imageUrl .value = ' '
585+ singleAttachmentItems .value [0 ].status = ' error'
586+ singleAttachmentItems .value [0 ].isUploading = false
587+ singleAttachmentItems .value [0 ].messageType = ' error'
588+ }
589+ })
590+ } catch (error ) {
591+ console .error (' 上传失败' , error )
602592 }
603593 }
604594
@@ -607,7 +597,7 @@ export default {
607597 }
608598
609599 const handleSingleFileRetry = (file ) => {
610- handleSingleFilesSelected ([ file ] )
600+ handleSingleFilesSelected (file , true )
611601 }
612602
613603 return {
0 commit comments