diff --git a/apps/web-antd/src/api/core/chatflow.ts b/apps/web-antd/src/api/core/chatflow.ts index 50086e9..45fc7ab 100644 --- a/apps/web-antd/src/api/core/chatflow.ts +++ b/apps/web-antd/src/api/core/chatflow.ts @@ -40,6 +40,13 @@ export namespace ChatflowApi { conversationId: string; appId: string; } + + export interface ChatMessageParams { + userId: string; + conversationId: string; + firstId: string; + limit: string; + } } // 聊天流 @@ -78,3 +85,10 @@ export function deleteChatflow(data: ChatflowApi.deleteParams) { export function getChatParameters(appId: string) { return requestClient.get(`/v1/chat/parameters/${appId}`); } + +export function getChatflowMessage( + appId: string, + data: ChatflowApi.ChatMessageParams, +) { + return requestClient.post(`/v1/chat/messages/${appId}`, data); +} diff --git a/apps/web-antd/src/api/core/index.ts b/apps/web-antd/src/api/core/index.ts index 1243365..c39d529 100644 --- a/apps/web-antd/src/api/core/index.ts +++ b/apps/web-antd/src/api/core/index.ts @@ -5,5 +5,6 @@ export * from './log'; export * from './menu'; export * from './role'; export * from './server'; +export * from './spider'; export * from './user'; export * from './workflow'; diff --git a/apps/web-antd/src/api/core/spider.ts b/apps/web-antd/src/api/core/spider.ts new file mode 100644 index 0000000..182d5a8 --- /dev/null +++ b/apps/web-antd/src/api/core/spider.ts @@ -0,0 +1,18 @@ +import { requestClient } from '#/api/request'; + +// 全国公共资源爬虫 +export function runSpider(data: any) { + return requestClient.post(`/spider/run`, { data }); +} + +export function getSpiderStatus() { + return requestClient.get(`/spider/status`); +} + +export function getSpiderLogs() { + return requestClient.get(`/v1/workflow/list`); +} + +export function stopSpider() { + return requestClient.get(`/spider/stop`); +} diff --git a/apps/web-antd/src/router/routes/modules/aiFlow.ts b/apps/web-antd/src/router/routes/modules/aiFlow.ts index 53fecbd..2566224 100644 --- a/apps/web-antd/src/router/routes/modules/aiFlow.ts +++ b/apps/web-antd/src/router/routes/modules/aiFlow.ts @@ -15,7 +15,7 @@ const routes: RouteRecordRaw[] = [ children: [ { name: 'spider', - path: '/aiflow/spider', + path: '/ai/spider', component: () => import('#/views/spider/index.vue'), meta: { icon: SvgSpider, @@ -26,7 +26,7 @@ const routes: RouteRecordRaw[] = [ }, { name: 'word', - path: '/aiflow/word', + path: '/ai/word', component: () => import('#/views/word/index.vue'), meta: { icon: SvgWord, @@ -37,7 +37,7 @@ const routes: RouteRecordRaw[] = [ }, { name: 'ppt', - path: '/aiflow/ppt', + path: '/ai/ppt', component: () => import('#/views/ppt/index.vue'), meta: { icon: SvgPPT, diff --git a/apps/web-antd/src/views/home/index.vue b/apps/web-antd/src/views/home/index.vue index 6aa7953..adc29db 100644 --- a/apps/web-antd/src/views/home/index.vue +++ b/apps/web-antd/src/views/home/index.vue @@ -11,19 +11,19 @@ const items: WorkflowItem[] = [ icon: SvgSpider, title: '数据抓取工具', description: '自动抓取', - path: '/spider', + path: '/ai/spider', }, { icon: SvgWord, title: 'Word文档生成工具', description: '自动生成word文档', - path: '/word', + path: '/ai/word', }, { icon: SvgPPT, title: 'PPT生成工具', description: '自动生成PPT文档', - path: '/ppt', + path: '/ai/ppt', }, ]; const router = useRouter(); diff --git a/apps/web-antd/src/views/ppt/index.vue b/apps/web-antd/src/views/ppt/index.vue index 32cad99..c68b88f 100644 --- a/apps/web-antd/src/views/ppt/index.vue +++ b/apps/web-antd/src/views/ppt/index.vue @@ -5,7 +5,7 @@ import { onMounted, reactive, ref } from 'vue'; import { PptListView, PptWorkView } from '@vben/common-ui'; -import { message } from 'ant-design-vue'; +import { notification } from 'ant-design-vue'; import { getWorkflowInfo, getWorkflowList, sendWorkflow } from '#/api'; @@ -58,7 +58,11 @@ async function handleClick(item: PPTTempItem) { } async function handleClickMode(item: PPTTempItem) { - message.success(`已选取${item.name}为模板`); + notification.success({ + message: `${item.name}`, + description: '已选取', + duration: 3, + }); temp = item; } diff --git a/apps/web-antd/src/views/spider/index.vue b/apps/web-antd/src/views/spider/index.vue index 905b2a5..a567ae3 100644 --- a/apps/web-antd/src/views/spider/index.vue +++ b/apps/web-antd/src/views/spider/index.vue @@ -7,8 +7,8 @@ import { SpiderListView, SpiderWorkView } from '@vben/common-ui'; import { notification } from 'ant-design-vue'; -import { getWorkflowInfo, getWorkflowList, sendWorkflow } from '#/api'; - +import { getWorkflowInfo, getWorkflowList, runSpider } from '#/api'; +// sendWorkflow interface ResultItem { key: number; role: 'ai' | 'user'; @@ -82,7 +82,7 @@ async function handleClickMode(item: PPTTempItem) { diff --git a/apps/web-antd/src/views/word/index.vue b/apps/web-antd/src/views/word/index.vue index 4837790..bb61cfa 100644 --- a/apps/web-antd/src/views/word/index.vue +++ b/apps/web-antd/src/views/word/index.vue @@ -9,11 +9,19 @@ import { message, notification } from 'ant-design-vue'; import { deleteChatflow, + getChatflowMessage, getChatList, getChatParameters, sendChatflow, } from '#/api'; +interface ResultItem { + key: number; + role: 'ai' | 'user'; + content: string; + footer?: any; +} + let temp = reactive({ id: 'baca08c1-e92b-4dc9-a445-3584803f54d4', name: '海南职创申报书生成', @@ -54,11 +62,12 @@ function handleClickMode(item: WordTempItem) { temp = item; getParameters(temp.id); } +const itemMessage = ref([]); async function deleteLog(item: any) { const res = await deleteChatflow({ appId: temp.id, - id: item, + conversationId: item, userId: '1562', }); if (res.code === 0) { @@ -74,9 +83,33 @@ async function getParameters(id: string) { params.value = res.suggestedQuestions; } -function handleClick(item: WordTempItem) { - message.error('暂不支持查看历史'); - temp = item; +async function handleClick(item: string) { + const res = await getChatflowMessage(temp.id, { + userId: '1562', + firstId: '', + conversationId: item, + limit: '', + }); + itemMessage.value = []; + if (res.data.length > 0) { + res.data.forEach((msg) => { + if (msg.inputs) { + itemMessage.value.push({ + key: itemMessage.value.length + 1, + role: 'user', // 'user' or 'ai' + content: msg.inputs.projectName, + footer: msg.footer, + }); + } + if (msg.answer) { + itemMessage.value.push({ + key: itemMessage.value.length + 1, + role: 'ai', + content: msg.answer, + }); + } + }); + } } onMounted(() => { @@ -101,6 +134,7 @@ onMounted(() => { :item="temp" :params-data="params" :run-chatflow="sendChatflow" + :item-message="itemMessage" /> 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 7562aa1..4a13e08 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 @@ -101,7 +101,7 @@ const openKeys = ref([]); v-model:selected-keys="selectedKeys" mode="vertical" class="mode" - :items="items" + :items="itemsData" @click="handleMenuClick" /> diff --git a/packages/effects/common-ui/src/ui/ppt/ppt-perview.vue b/packages/effects/common-ui/src/ui/ppt/ppt-perview.vue index cc99f5b..9131f1f 100644 --- a/packages/effects/common-ui/src/ui/ppt/ppt-perview.vue +++ b/packages/effects/common-ui/src/ui/ppt/ppt-perview.vue @@ -37,7 +37,7 @@ const [Drawer, drawerApi] = useVbenDrawer({ const data = drawerApi.getData>(); if (data) { isLoading.value = true; // 开始加载文档,开启加载状态 - pptx.value = `/pptx/${data}`; // 更新 docx 的值 + pptx.value = `/pptx/${data}`; // 更新 pptx 的值 } // url.value = drawerApi.getData>(); } 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 204cf17..2140f31 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 @@ -14,8 +14,8 @@ import { PaperClipOutlined, UserOutlined, } from '@ant-design/icons-vue'; -import { Badge, Button, Flex, Typography } from 'ant-design-vue'; -import { Attachments, Bubble, Sender } from 'ant-design-x-vue'; +import { Badge, Button, Flex, Space, Typography } from 'ant-design-vue'; +import { Attachments, Bubble, Sender, Welcome } from 'ant-design-x-vue'; import WordPreview from '../word/word-preview.vue'; @@ -342,7 +342,7 @@ watch( h( Button, { - size: 'nomarl', + size: 'normal', type: 'primary', style: { marginLeft: '10px', @@ -373,8 +373,22 @@ watch(
+ + + {