diff --git a/CHANGELOG.md b/CHANGELOG.md index 44cbe87a8f74f7cc23f97b6702430cfc88771c52..fc6c4f25ac7f145be91aeb668164d91a0bb42d9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ### Changed - 优化ai行内聊天组件,文本框随着内容增加跟随滚动 +- 优化ai行内聊天组件终止AI逻辑 ## [0.7.41-alpha.48] - 2025-12-10 diff --git a/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.ts b/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.ts index a200eadc3dbc7ec4e2e1cfdcd74a843b345e44cd..f9c10524dd9e7bffb91f535a3dd7619f325a2c56 100644 --- a/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.ts +++ b/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.ts @@ -85,6 +85,7 @@ export const useInLineAIContainerClick = ( }, message: Ref, isLoading: Ref, + abortController: Ref, ): void => { const handMousedown = async (evt: MouseEvent): Promise => { const target = evt.target as HTMLElement; @@ -93,14 +94,9 @@ export const useInLineAIContainerClick = ( !target.closest('.ibiz-inline-ai-textarea-container') && !target.closest('.ibiz-inline-ai-alert') ) { - // loading时不可点击外部 - if (isLoading.value) { - evt.stopPropagation(); - return; - } const isChange = props.content !== message.value.content; let isClose = true; - if (isChange) { + if (isChange || isLoading.value) { isClose = await ibiz.confirm.warning({ title: ibiz.i18n.t('util.inlineAiUtil.warningTitle'), desc: ibiz.i18n.t('util.inlineAiUtil.warningDesc'), @@ -109,7 +105,13 @@ export const useInLineAIContainerClick = ( }, }); } - if (isClose) props.unMountAIChat(); + if (isClose) { + // 加载中需要取消请求 + if (isLoading.value) { + abortController.value?.abort(); + } + props.unMountAIChat(); + } } }; diff --git a/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.tsx b/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.tsx index 83aae93e9efc0d7fae0341735594e9f0934c4bdd..9d72491a6315e57bd5256c0d0063966365d358cd 100644 --- a/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.tsx +++ b/src/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.tsx @@ -152,7 +152,7 @@ export const InlineAITextArea = defineComponent({ }); // 处理点击事件 - useInLineAIContainerClick(props, message, isLoading); + useInLineAIContainerClick(props, message, isLoading, abortController); /** * @description 终止提问并关闭AI聊天