|
|
@@ -6,6 +6,7 @@ import DataPickerModal from './components/DataPickerModal.vue';
|
|
|
import aiCloseIcon from '@/assets/images/ventAI/dataPicker/AI-close.svg';
|
|
|
import aiOpenIcon from '@/assets/images/ventAI/dataPicker/AI-open.svg';
|
|
|
import { getActions } from '/@/qiankun/state';
|
|
|
+import { StreamError } from '/@/views/ventAI/manageAssistent/api';
|
|
|
|
|
|
// ─── 全局开关:控制悬停模式浮动按钮是否启用 ─────────────────────────────────
|
|
|
const STORAGE_KEY = 'dataPickerHoverEnabled';
|
|
|
@@ -338,6 +339,25 @@ export function useDataPicker(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /** 点击解读失败时,把结构化 StreamError 转成可读文案 */
|
|
|
+ function formatClickError(e: any): string {
|
|
|
+ const fallback = e?.message || '请求失败';
|
|
|
+ if (e instanceof StreamError && e.status === 429) {
|
|
|
+ if (typeof e.retryAfter === 'number') {
|
|
|
+ const minutes = Math.ceil(e.retryAfter / 60);
|
|
|
+ return `${fallback}(约${minutes < 1 ? '不到 1 分钟' : `${minutes} 分钟`}后恢复)`;
|
|
|
+ }
|
|
|
+ return `${fallback}(请稍后再试)`;
|
|
|
+ }
|
|
|
+ if (e instanceof StreamError && e.status === 413 && (!e.message || e.message === 'HTTP错误: 413')) {
|
|
|
+ return '附件体积超过上限,请减小文件后重试';
|
|
|
+ }
|
|
|
+ if (e instanceof StreamError && e.status === 404 && (!e.message || e.message === 'HTTP错误: 404')) {
|
|
|
+ return '会话不存在或无权访问';
|
|
|
+ }
|
|
|
+ return fallback;
|
|
|
+ }
|
|
|
+
|
|
|
// 点击触发
|
|
|
function handleClick(item: any) {
|
|
|
modalVisible.value = true;
|
|
|
@@ -356,7 +376,7 @@ export function useDataPicker(
|
|
|
|
|
|
request
|
|
|
.catch((e: any) => {
|
|
|
- error.value = e?.message || '请求失败';
|
|
|
+ error.value = formatClickError(e);
|
|
|
})
|
|
|
.finally(() => {
|
|
|
loading.value = false;
|