diff --git a/apps/web-antd/src/api/core/chatflow.ts b/apps/web-antd/src/api/core/chatflow.ts index ed39adb..50da500 100644 --- a/apps/web-antd/src/api/core/chatflow.ts +++ b/apps/web-antd/src/api/core/chatflow.ts @@ -86,7 +86,11 @@ export async function sendChatFlowStream( appId: any, data: ChatflowApi.CompletionsBody, ) { - return requestClient.post(`/v1/chat/completions/stream/${appId}`, data); + return requestClient.request(`/v1/chat/completions/stream/${appId}`, { + data, + method: 'POST', + responseType: 'stream', + }); } // word diff --git a/apps/web-antd/src/router/routes/modules/aiFlow.ts b/apps/web-antd/src/router/routes/modules/aiFlow.ts index 733444e..e1dde19 100644 --- a/apps/web-antd/src/router/routes/modules/aiFlow.ts +++ b/apps/web-antd/src/router/routes/modules/aiFlow.ts @@ -1,6 +1,6 @@ import type { RouteRecordRaw } from 'vue-router'; -import { HugeAi, SvgPPT, SvgSpider, SvgWord } from '@vben/icons'; +import { HugeAi, SvgPPT, SvgRepository, SvgSpider, SvgWord } from '@vben/icons'; const routes: RouteRecordRaw[] = [ { @@ -46,6 +46,17 @@ const routes: RouteRecordRaw[] = [ authority: ['ai:ppt'], }, }, + { + name: 'repository', + path: '/ai/repository', + component: () => import('#/views/repository/index.vue'), + meta: { + icon: SvgRepository, + title: '知识库生成', + order: 4, + authority: ['ai:repository'], + }, + }, ], }, ]; diff --git a/apps/web-antd/src/views/home/index.vue b/apps/web-antd/src/views/home/index.vue index fe2e336..d6cdb38 100644 --- a/apps/web-antd/src/views/home/index.vue +++ b/apps/web-antd/src/views/home/index.vue @@ -4,7 +4,7 @@ import type { WorkflowItem } from '@vben/common-ui'; import { useRouter } from 'vue-router'; import { WorkflowsView } from '@vben/common-ui'; -import { SvgPPT, SvgSpider, SvgWord } from '@vben/icons'; +import { SvgPPT, SvgRepository, SvgSpider, SvgWord } from '@vben/icons'; const items: WorkflowItem[] = [ { @@ -25,6 +25,12 @@ const items: WorkflowItem[] = [ description: '自动生成PPT文档', path: '/ai/ppt', }, + { + icon: SvgRepository, + title: '知识库生成', + description: '自动生成知识库文档', + path: '/ai/repository', + }, ]; const router = useRouter(); diff --git a/apps/web-antd/src/views/repository/components/index.ts b/apps/web-antd/src/views/repository/components/index.ts new file mode 100644 index 0000000..e43c939 --- /dev/null +++ b/apps/web-antd/src/views/repository/components/index.ts @@ -0,0 +1,2 @@ +export { default as RepositoryListView } from './repository-list-view.vue'; +export { default as RepositoryWorkView } from './repository-work-view.vue'; diff --git a/apps/web-antd/src/views/repository/components/repository-list-view.vue b/apps/web-antd/src/views/repository/components/repository-list-view.vue new file mode 100644 index 0000000..3a63d28 --- /dev/null +++ b/apps/web-antd/src/views/repository/components/repository-list-view.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/apps/web-antd/src/views/repository/components/repository-preview.vue b/apps/web-antd/src/views/repository/components/repository-preview.vue new file mode 100644 index 0000000..c99a93d --- /dev/null +++ b/apps/web-antd/src/views/repository/components/repository-preview.vue @@ -0,0 +1,60 @@ + + + + diff --git a/apps/web-antd/src/views/repository/components/repository-work-view.vue b/apps/web-antd/src/views/repository/components/repository-work-view.vue new file mode 100644 index 0000000..ac159da --- /dev/null +++ b/apps/web-antd/src/views/repository/components/repository-work-view.vue @@ -0,0 +1,336 @@ + + + + + diff --git a/apps/web-antd/src/views/repository/index.vue b/apps/web-antd/src/views/repository/index.vue new file mode 100644 index 0000000..f49b87a --- /dev/null +++ b/apps/web-antd/src/views/repository/index.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/apps/web-antd/src/views/repository/typing.ts b/apps/web-antd/src/views/repository/typing.ts new file mode 100644 index 0000000..0c9348a --- /dev/null +++ b/apps/web-antd/src/views/repository/typing.ts @@ -0,0 +1,79 @@ +interface RepositoryTempItem { + id: string; + name: string; + workflowRunId?: string; + appId?: string; + userId?: string; + taskId?: string; + url?: string; +} + +interface RepositoryHistoryItem { + id: string; + workflowRun: { + id: string; + }; + createdByEndUser: { + id: string; + sessionId: string; + }; +} + +interface Props { + items?: RepositoryHistoryItem[]; + temp: RepositoryTempItem[]; + title: string; + loading: boolean; +} + +interface ResultItem { + key: number; + role: 'ai' | 'user'; + content: any; + footer?: any; +} + +interface WorkflowContext { + conversationId: string; + userId: string; + inputs: { + [key: string]: any; + }; + files: []; +} + +interface WorkflowResult { + data: { + outputs: { + files: [ + { + filename: string; + url: string; + }, + ]; + }; + }; +} + +interface PropsWork { + itemMessage?: ResultItem[]; + item?: RepositoryTempItem; + runWorkflow?: (appId: any, data: WorkflowContext) => Promise; +} + +interface MenuItem { + key: string; + label: string; + title: string; +} + +export type { + MenuItem, + Props, + PropsWork, + RepositoryHistoryItem, + RepositoryTempItem, + ResultItem, + WorkflowContext, + WorkflowResult, +}; diff --git a/packages/icons/src/svg/index.ts b/packages/icons/src/svg/index.ts index bb46039..75fe5f8 100644 --- a/packages/icons/src/svg/index.ts +++ b/packages/icons/src/svg/index.ts @@ -14,6 +14,7 @@ const SvgAntdvLogoIcon = createIconifyIcon('svg:antdv-logo'); const SvgSpider = createIconifyIcon('svg:la-spider'); const SvgPPT = createIconifyIcon('svg:powerpoint'); const SvgWord = createIconifyIcon('svg:word'); +const SvgRepository = createIconifyIcon('iconoir:repository'); export { SvgAntdvLogoIcon, @@ -26,6 +27,7 @@ export { SvgCardIcon, SvgDownloadIcon, SvgPPT, + SvgRepository, SvgSpider, SvgWord, };