diff --git a/resources/assets/js/components/AIAssistant/index.vue b/resources/assets/js/components/AIAssistant/index.vue index 85b5ccba5..ca584e064 100644 --- a/resources/assets/js/components/AIAssistant/index.vue +++ b/resources/assets/js/components/AIAssistant/index.vue @@ -301,7 +301,9 @@ export default { const routeName = this.$store.state.routeName; const dialogId = this.$store.state.dialogId; const projectId = this.$store.getters.projectData?.id; - return `${routeName}|${dialogId}|${projectId}`; + const taskId = this.$store.state.taskId; + const dialogModalShow = this.$store.state.dialogModalShow; + return `${routeName}|${dialogId}|${projectId}|${taskId}|${dialogModalShow}`; }, }, watch: { diff --git a/resources/assets/js/components/AIAssistant/page-context.js b/resources/assets/js/components/AIAssistant/page-context.js index 1599e7926..56b9d9d59 100644 --- a/resources/assets/js/components/AIAssistant/page-context.js +++ b/resources/assets/js/components/AIAssistant/page-context.js @@ -14,6 +14,18 @@ * @returns {Object} { systemPrompt } */ export function getPageContext(store, routeParams = {}) { + // 优先检测弹窗场景 + const taskId = store.state.taskId; + if (taskId > 0) { + return getSingleTaskContext(store, { taskId }); + } + + const dialogModalShow = store.state.dialogModalShow; + const dialogId = store.state.dialogId; + if (dialogModalShow && dialogId > 0) { + return getSingleDialogContext(store, { dialogId }); + } + const routeName = store.state.routeName; const contextMap = { @@ -324,6 +336,18 @@ function getDefaultContext() { * @returns {string} 场景标识,格式如 "routeName/entityType:entityId" */ export function getSceneKey(store, routeParams = {}) { + // 优先检测弹窗场景 + const taskId = store.state.taskId; + if (taskId > 0) { + return `modal-task/task:${taskId}`; + } + + const dialogModalShow = store.state.dialogModalShow; + const dialogId = store.state.dialogId; + if (dialogModalShow && dialogId > 0) { + return `modal-dialog/dialog:${dialogId}`; + } + const routeName = store.state.routeName; const parts = [routeName || 'unknown']; diff --git a/resources/assets/js/components/AIAssistant/welcome-prompts.js b/resources/assets/js/components/AIAssistant/welcome-prompts.js index 22a72ca37..02e780ac4 100644 --- a/resources/assets/js/components/AIAssistant/welcome-prompts.js +++ b/resources/assets/js/components/AIAssistant/welcome-prompts.js @@ -97,6 +97,20 @@ function getRandomItems(arr, count) { return shuffled.slice(0, count); } +/** + * 格式化提示词:选择随机数量并转换为当前语言 + * @param {Array} rawPrompts - 原始提示词列表 + * @returns {Array} 格式化后的提示词列表 [{ text, svg }] + */ +function formatPrompts(rawPrompts) { + const displayCount = Math.floor(Math.random() * 4) + 3; // 3, 4, 5, 或 6 + const selectedPrompts = selectPrompts(rawPrompts, displayCount); + return selectedPrompts.map(item => ({ + text: getText(item.text), + svg: item.svg, + })); +} + /** * 随机选择提示词:优先展示 pin 提示,并尽量避免重复类型 * @param {Array} rawPrompts - 提示词列表 @@ -174,6 +188,18 @@ function selectPrompts(rawPrompts, count) { * @returns {Array} 快捷提示列表 [{ text, svg }],随机显示 3-6 个 */ export function getWelcomePrompts(store, routeParams = {}) { + // 优先检测弹窗场景 + const taskId = store.state.taskId; + if (taskId > 0) { + return formatPrompts(getSingleTaskPrompts()); + } + + const dialogModalShow = store.state.dialogModalShow; + const dialogId = store.state.dialogId; + if (dialogModalShow && dialogId > 0) { + return formatPrompts(getSingleDialogPrompts()); + } + const routeName = store.state.routeName; const promptsMap = { @@ -196,15 +222,7 @@ export function getWelcomePrompts(store, routeParams = {}) { const getPrompts = promptsMap[routeName]; const rawPrompts = getPrompts ? getPrompts(store, routeParams) : getDefaultPrompts(store); - // 随机选择 3-6 个提示词 - const displayCount = Math.floor(Math.random() * 4) + 3; // 3, 4, 5, 或 6 - const selectedPrompts = selectPrompts(rawPrompts, displayCount); - - // 转换文本为当前语言 - return selectedPrompts.map(item => ({ - text: getText(item.text), - svg: item.svg, - })); + return formatPrompts(rawPrompts); } /**