From 9cead8075b8dc13539d3a7e23bcc99a23deb7c04 Mon Sep 17 00:00:00 2001 From: Kven <2955163637@qq.com> Date: Fri, 16 May 2025 17:44:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(@vben/common-ui):=20=E4=BC=98=E5=8C=96AI?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 AI 工作流相关的路由和页面组件 - 实现 AI 平台信息获取、WORD 生成和 PPT 生成等功能 -优化模板选择和历史记录展示逻辑 - 新增聊天参数获取和删除功能 - 更新相关 API接口 --- apps/web-antd/src/api/core/chatflow.ts | 16 +- apps/web-antd/src/api/core/workflow.ts | 4 +- .../src/router/routes/modules/aiFlow.ts | 53 ++ .../web-antd/src/router/routes/modules/ppt.ts | 19 - .../src/router/routes/modules/spider.ts | 19 - .../src/router/routes/modules/word.ts | 19 - apps/web-antd/src/views/ppt/index.vue | 49 +- apps/web-antd/src/views/ppt/index2.vue | 615 ----------------- apps/web-antd/src/views/spider/index.vue | 121 ++-- apps/web-antd/src/views/word/index.vue | 82 ++- apps/web-antd/src/views/word/index2.vue | 635 ------------------ .../common-ui/src/ui/ppt/ppt-list-view.vue | 222 +++++- .../common-ui/src/ui/ppt/ppt-work-view.vue | 373 +++++++--- .../src/ui/spider/spider-list-view.vue | 214 +++++- .../src/ui/spider/spider-preview.vue | 56 ++ .../src/ui/spider/spider-work-view.vue | 370 ++++++---- .../common-ui/src/ui/word/word-list-view.vue | 215 +++++- .../common-ui/src/ui/word/word-work-view.vue | 492 ++++++++++---- packages/icons/src/iconify/index.ts | 1 + 19 files changed, 1780 insertions(+), 1795 deletions(-) create mode 100644 apps/web-antd/src/router/routes/modules/aiFlow.ts delete mode 100644 apps/web-antd/src/router/routes/modules/ppt.ts delete mode 100644 apps/web-antd/src/router/routes/modules/spider.ts delete mode 100644 apps/web-antd/src/router/routes/modules/word.ts delete mode 100644 apps/web-antd/src/views/ppt/index2.vue delete mode 100644 apps/web-antd/src/views/word/index2.vue create mode 100644 packages/effects/common-ui/src/ui/spider/spider-preview.vue diff --git a/apps/web-antd/src/api/core/chatflow.ts b/apps/web-antd/src/api/core/chatflow.ts index 239b8bd..50086e9 100644 --- a/apps/web-antd/src/api/core/chatflow.ts +++ b/apps/web-antd/src/api/core/chatflow.ts @@ -34,6 +34,12 @@ export namespace ChatflowApi { createAt: string; updatedAt: string; } + + export interface deleteParams { + userId: string; + conversationId: string; + appId: string; + } } // 聊天流 @@ -65,6 +71,10 @@ export async function getChatList( // return requestClient.post('/v1/chat/messages', data); // }; // -// export function deleteChatflow(data){ -// return requestClient.delete('/v1/chat/messages/suggested', data); -// }; +export function deleteChatflow(data: ChatflowApi.deleteParams) { + return requestClient.delete('/v1/chat/conversation', { params: data }); +} + +export function getChatParameters(appId: string) { + return requestClient.get(`/v1/chat/parameters/${appId}`); +} diff --git a/apps/web-antd/src/api/core/workflow.ts b/apps/web-antd/src/api/core/workflow.ts index 7aedaa2..9f41a96 100644 --- a/apps/web-antd/src/api/core/workflow.ts +++ b/apps/web-antd/src/api/core/workflow.ts @@ -49,5 +49,7 @@ export function getWorkflowInfo(data: WorkflowApi.WorkflowLogParams) { } export function getWorkflowList(params: WorkflowApi.WorkflowLogParams) { - return requestClient.get(`/v1/workflow/list/${params.appid}`); + return requestClient.get(`/v1/workflow/list/${params.appid}`, { + params, + }); } diff --git a/apps/web-antd/src/router/routes/modules/aiFlow.ts b/apps/web-antd/src/router/routes/modules/aiFlow.ts new file mode 100644 index 0000000..53fecbd --- /dev/null +++ b/apps/web-antd/src/router/routes/modules/aiFlow.ts @@ -0,0 +1,53 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { HugeAi, SvgPPT, SvgSpider, SvgWord } from '@vben/icons'; + +const routes: RouteRecordRaw[] = [ + { + name: 'aiflow', + path: '/aiflow', + meta: { + icon: HugeAi, + title: 'AI工作流', + order: 4, + authority: ['system'], + }, + children: [ + { + name: 'spider', + path: '/aiflow/spider', + component: () => import('#/views/spider/index.vue'), + meta: { + icon: SvgSpider, + title: 'AI平台信息获取', + order: 1, + authority: ['dify:server:init'], + }, + }, + { + name: 'word', + path: '/aiflow/word', + component: () => import('#/views/word/index.vue'), + meta: { + icon: SvgWord, + title: 'AI申报书WORD生成', + order: 2, + authority: ['dify:chat:send'], + }, + }, + { + name: 'ppt', + path: '/aiflow/ppt', + component: () => import('#/views/ppt/index.vue'), + meta: { + icon: SvgPPT, + title: 'PPT自动生成', + order: 3, + authority: ['dify:workflow:run'], + }, + }, + ], + }, +]; + +export default routes; diff --git a/apps/web-antd/src/router/routes/modules/ppt.ts b/apps/web-antd/src/router/routes/modules/ppt.ts deleted file mode 100644 index 9a16113..0000000 --- a/apps/web-antd/src/router/routes/modules/ppt.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; - -import { SvgPPT } from '@vben/icons'; - -const routes: RouteRecordRaw[] = [ - { - name: 'ppt', - path: '/ppt', - component: () => import('#/views/ppt/index.vue'), - meta: { - icon: SvgPPT, - title: 'PPT自动生成', - order: 3, - authority: ['dify:workflow:run'], - }, - }, -]; - -export default routes; diff --git a/apps/web-antd/src/router/routes/modules/spider.ts b/apps/web-antd/src/router/routes/modules/spider.ts deleted file mode 100644 index 7ac8bd6..0000000 --- a/apps/web-antd/src/router/routes/modules/spider.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; - -import { SvgSpider } from '@vben/icons'; - -const routes: RouteRecordRaw[] = [ - { - name: 'spider', - path: '/spider', - component: () => import('#/views/spider/index.vue'), - meta: { - icon: SvgSpider, - title: '数据爬取', - order: 1, - authority: ['dify:server:init'], - }, - }, -]; - -export default routes; diff --git a/apps/web-antd/src/router/routes/modules/word.ts b/apps/web-antd/src/router/routes/modules/word.ts deleted file mode 100644 index 9254152..0000000 --- a/apps/web-antd/src/router/routes/modules/word.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; - -import { SvgWord } from '@vben/icons'; - -const routes: RouteRecordRaw[] = [ - { - name: 'word', - path: '/word', - component: () => import('#/views/word/index.vue'), - meta: { - icon: SvgWord, - title: 'Word自动生成', - order: 2, - authority: ['dify:chat:send'], - }, - }, -]; - -export default routes; diff --git a/apps/web-antd/src/views/ppt/index.vue b/apps/web-antd/src/views/ppt/index.vue index a76a309..32cad99 100644 --- a/apps/web-antd/src/views/ppt/index.vue +++ b/apps/web-antd/src/views/ppt/index.vue @@ -3,7 +3,7 @@ import type { PPTTempItem } from '@vben/common-ui'; import { onMounted, reactive, ref } from 'vue'; -import { PptHistoryView, PptListView, PptWorkView } from '@vben/common-ui'; +import { PptListView, PptWorkView } from '@vben/common-ui'; import { message } from 'ant-design-vue'; @@ -11,7 +11,7 @@ import { getWorkflowInfo, getWorkflowList, sendWorkflow } from '#/api'; let temp = reactive({ id: 'ee3889b6-50fa-463e-b956-3b93447727fc', - name: '从可研申报书生成科技项目PPT', + name: '海南科技项目可研报告PPT生成', }); interface ResultItem { key: number; @@ -29,7 +29,6 @@ const getLogs = async (appid: string) => { const res = await getWorkflowList({ appid, limit: 5, - page: 1, }); hitsory.value = res; loading.value = false; @@ -69,24 +68,32 @@ onMounted(() => { + + diff --git a/apps/web-antd/src/views/ppt/index2.vue b/apps/web-antd/src/views/ppt/index2.vue deleted file mode 100644 index 2120508..0000000 --- a/apps/web-antd/src/views/ppt/index2.vue +++ /dev/null @@ -1,615 +0,0 @@ - - - diff --git a/apps/web-antd/src/views/spider/index.vue b/apps/web-antd/src/views/spider/index.vue index c8865a5..905b2a5 100644 --- a/apps/web-antd/src/views/spider/index.vue +++ b/apps/web-antd/src/views/spider/index.vue @@ -1,58 +1,101 @@ + + diff --git a/apps/web-antd/src/views/word/index.vue b/apps/web-antd/src/views/word/index.vue index bf15156..4837790 100644 --- a/apps/web-antd/src/views/word/index.vue +++ b/apps/web-antd/src/views/word/index.vue @@ -3,19 +3,25 @@ import type { WordTempItem } from '@vben/common-ui'; import { onMounted, reactive, ref } from 'vue'; -import { WordHistoryView, WordListView, WordWorkView } from '@vben/common-ui'; +import { WordListView, WordWorkView } from '@vben/common-ui'; -import { message } from 'ant-design-vue'; +import { message, notification } from 'ant-design-vue'; -import { getChatList, sendChatflow } from '#/api'; +import { + deleteChatflow, + getChatList, + getChatParameters, + sendChatflow, +} from '#/api'; let temp = reactive({ id: 'baca08c1-e92b-4dc9-a445-3584803f54d4', - name: '职业创新申报书', + name: '海南职创申报书生成', }); const hitsory = ref([]); const loading = ref(true); +const params = ref({}); const getLogs = async (appid: string) => { loading.value = true; @@ -40,8 +46,32 @@ const getLogs = async (appid: string) => { }; function handleClickMode(item: WordTempItem) { - message.success(`已选取${item.name}为模板`); + notification.success({ + message: `${item.name}`, + description: '已选取', + duration: 3, + }); temp = item; + getParameters(temp.id); +} + +async function deleteLog(item: any) { + const res = await deleteChatflow({ + appId: temp.id, + id: item, + userId: '1562', + }); + if (res.code === 0) { + message.success('删除成功'); + getLogs(temp.id); + } else { + message.error('删除失败'); + } +} + +async function getParameters(id: string) { + const res = await getChatParameters(id); + params.value = res.suggestedQuestions; } function handleClick(item: WordTempItem) { @@ -51,24 +81,38 @@ function handleClick(item: WordTempItem) { onMounted(() => { getLogs(temp.id); + getParameters(temp.id); }); + + diff --git a/apps/web-antd/src/views/word/index2.vue b/apps/web-antd/src/views/word/index2.vue deleted file mode 100644 index 8bd564c..0000000 --- a/apps/web-antd/src/views/word/index2.vue +++ /dev/null @@ -1,635 +0,0 @@ - - - diff --git a/packages/effects/common-ui/src/ui/ppt/ppt-list-view.vue b/packages/effects/common-ui/src/ui/ppt/ppt-list-view.vue index 98ebe02..7562aa1 100644 --- a/packages/effects/common-ui/src/ui/ppt/ppt-list-view.vue +++ b/packages/effects/common-ui/src/ui/ppt/ppt-list-view.vue @@ -1,38 +1,210 @@ + + diff --git a/packages/effects/common-ui/src/ui/ppt/ppt-work-view.vue b/packages/effects/common-ui/src/ui/ppt/ppt-work-view.vue index 5f918df..204cf17 100644 --- a/packages/effects/common-ui/src/ui/ppt/ppt-work-view.vue +++ b/packages/effects/common-ui/src/ui/ppt/ppt-work-view.vue @@ -1,21 +1,30 @@ - diff --git a/packages/effects/common-ui/src/ui/spider/spider-list-view.vue b/packages/effects/common-ui/src/ui/spider/spider-list-view.vue index 6f590d0..f76464c 100644 --- a/packages/effects/common-ui/src/ui/spider/spider-list-view.vue +++ b/packages/effects/common-ui/src/ui/spider/spider-list-view.vue @@ -1,45 +1,205 @@ + + diff --git a/packages/effects/common-ui/src/ui/spider/spider-preview.vue b/packages/effects/common-ui/src/ui/spider/spider-preview.vue new file mode 100644 index 0000000..6a407ae --- /dev/null +++ b/packages/effects/common-ui/src/ui/spider/spider-preview.vue @@ -0,0 +1,56 @@ + + diff --git a/packages/effects/common-ui/src/ui/spider/spider-work-view.vue b/packages/effects/common-ui/src/ui/spider/spider-work-view.vue index 09cd637..12d2e23 100644 --- a/packages/effects/common-ui/src/ui/spider/spider-work-view.vue +++ b/packages/effects/common-ui/src/ui/spider/spider-work-view.vue @@ -1,8 +1,13 @@