diff --git a/pages/assistant/chat-service.js b/pages/assistant/chat-service.js index ef5598f..5f5e95f 100644 --- a/pages/assistant/chat-service.js +++ b/pages/assistant/chat-service.js @@ -434,6 +434,58 @@ export function activityOutlineGen(data) { }) } +/** + * AI 文件上传(喂给 Dify 开始节点的 file-list 变量)。 + * + * @param {object} file `uni.chooseImage` / `uni.chooseMessageFile` 拿到的临时文件(需有 `path`) + * @param {string} [app] 应用代号(后端按代号选择 Dify 应用凭证) + * + * `app` 不是可选项而是**硬约束**:Dify 的 `/files/upload` 按应用鉴权, + * 文件只能被「上传时所用应用」的工作流引用,换个应用引用同一个 `upload_file_id` + * 会直接报 `Invalid upload file`(issue 14 实测:chat Key 上传 → 0.2s 失败, + * creativeAssistant Key 上传 → succeeded)。 + * + * 后端 `/ai/file/upload` 不传 `app` 时保持旧行为(`type` 为空 → chat 凭证), + * 所以喂给创意助手 file-list 的附件**必须**传 `app: 'creativeAssistant'`。 + */ +export function uploadAiFile(file, app) { + const token = getToken() + const formData = { + tenantId: DEFAULT_TENANT_ID + } + if (app) { + formData.app = app + } + return new Promise((resolve, reject) => { + uni.uploadFile({ + url: `${API_BASE_URL}/ai/file/upload`, + filePath: file.path, + name: 'file', + header: token + ? { + Authorization: token + } + : {}, + formData, + success: (response) => { + try { + const result = JSON.parse(response.data || '{}') + if (result.code === 0 && result.data) { + resolve(result.data) + return + } + reject(new Error(result.message || '上传失败')) + } catch (error) { + reject(new Error('上传响应解析失败')) + } + }, + fail: (error) => { + reject(new Error(error.errMsg || '上传失败')) + } + }) + }) +} + export function buildWebSocketUrl(userId) { const url = String(API_BASE_URL || '') if (/^https?:\/\//.test(url)) { diff --git a/pages/assistant/index.vue b/pages/assistant/index.vue index e37ba1f..32489bb 100644 --- a/pages/assistant/index.vue +++ b/pages/assistant/index.vue @@ -22,7 +22,7 @@ - AI 助手 + {{ assistantTitle }} {{ activeChatTitle }} · {{ userName }} @@ -49,9 +49,9 @@ - 你好,我是 AI 团委助手 + 你好,我是 {{ assistantTitle }} - 你可以直接提问团务流程问题,我会通过实时消息回复。 + {{ assistantHint }} @@ -112,6 +112,54 @@ {{ item.label }} + + 文体 + {{ item.label }} + 字数 + {{ item.label }} + + + + 图片比例 + {{ item.label }} + + + + 参考素材 + {{ uploadingFiles ? '上传中...' : '添加附件' }} + + 最多 {{ IMAGE_FILE_LIMIT }} 个,支持图片 / 视频 / 音频 / 文档 + + + + {{ item.name }} + 移除 + + + +