From dc68abd4d909e06570f6fc1a100a4c4b4d7c1517 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 15 Nov 2025 08:54:25 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90antd=E3=80=91=E3=80=90ai?= =?UTF-8?q?=E3=80=91=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=9A=84=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/ai/workflow/index.ts | 50 +++++++++++++------ .../conversation/ConversationList.vue | 2 +- .../src/views/ai/image/manager/index.vue | 2 +- .../src/views/ai/knowledge/document/index.vue | 2 +- .../views/ai/knowledge/knowledge/index.vue | 2 +- .../src/views/ai/knowledge/segment/index.vue | 2 +- .../src/views/ai/mindmap/manager/index.vue | 2 +- .../src/views/ai/music/manager/index.vue | 2 +- apps/web-antd/src/views/ai/workflow/data.ts | 17 ++++++- .../src/views/ai/workflow/form/index.vue | 48 ++++++++---------- .../ai/workflow/form/modules/basic-info.vue | 6 +-- apps/web-antd/src/views/ai/workflow/index.vue | 16 +++--- .../src/views/ai/image/manager/index.vue | 2 +- .../src/views/ai/knowledge/document/index.vue | 2 +- .../views/ai/knowledge/knowledge/index.vue | 2 +- .../src/views/ai/knowledge/segment/index.vue | 2 +- .../src/views/ai/mindmap/manager/index.vue | 2 +- .../src/views/ai/music/manager/index.vue | 2 +- 18 files changed, 96 insertions(+), 67 deletions(-) diff --git a/apps/web-antd/src/api/ai/workflow/index.ts b/apps/web-antd/src/api/ai/workflow/index.ts index a383d0cd0..676d6337c 100644 --- a/apps/web-antd/src/api/ai/workflow/index.ts +++ b/apps/web-antd/src/api/ai/workflow/index.ts @@ -2,28 +2,48 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; -export function getWorkflowPage(params: PageParam) { - return requestClient.get>('/ai/workflow/page', { - params, - }); +export namespace AiWorkflowApi { + /** 工作流 */ + export interface Workflow { + id?: number; // 编号 + name: string; // 工作流名称 + code: string; // 工作流标识 + graph: string; // 工作流模型 JSON 数据 + remark?: string; // 备注 + status: number; // 状态 + createTime?: Date; // 创建时间 + } } -export const getWorkflow = (id: number | string) => { - return requestClient.get(`/ai/workflow/get?id=${id}`); -}; +/** 查询工作流管理列表 */ +export function getWorkflowPage(params: PageParam) { + return requestClient.get>( + '/ai/workflow/page', + { params }, + ); +} -export const createWorkflow = (data: any) => { +/** 查询工作流详情 */ +export function getWorkflow(id: number) { + return requestClient.get(`/ai/workflow/get?id=${id}`); +} + +/** 新增工作流 */ +export function createWorkflow(data: AiWorkflowApi.Workflow) { return requestClient.post('/ai/workflow/create', data); -}; +} -export const updateWorkflow = (data: any) => { +/** 修改工作流 */ +export function updateWorkflow(data: AiWorkflowApi.Workflow) { return requestClient.put('/ai/workflow/update', data); -}; +} -export const deleteWorkflow = (id: number | string) => { +/** 删除工作流 */ +export function deleteWorkflow(id: number) { return requestClient.delete(`/ai/workflow/delete?id=${id}`); -}; +} -export const testWorkflow = (data: any) => { +/** 测试工作流 */ +export function testWorkflow(data: any) { return requestClient.post('/ai/workflow/test', data); -}; +} diff --git a/apps/web-antd/src/views/ai/chat/index/components/conversation/ConversationList.vue b/apps/web-antd/src/views/ai/chat/index/components/conversation/ConversationList.vue index 91a8281de..e6526ecf8 100644 --- a/apps/web-antd/src/views/ai/chat/index/components/conversation/ConversationList.vue +++ b/apps/web-antd/src/views/ai/chat/index/components/conversation/ConversationList.vue @@ -203,7 +203,7 @@ async function updateConversationTitle( filterConversationList.length > 0 && filterConversationList[0] && // tip:避免切换对话 activeConversationId.value === - (filterConversationList[0].id as number) + (filterConversationList[0].id!) ) { emits('onConversationClick', filterConversationList[0]); } diff --git a/apps/web-antd/src/views/ai/image/manager/index.vue b/apps/web-antd/src/views/ai/image/manager/index.vue index ad1ab7b02..62087c743 100644 --- a/apps/web-antd/src/views/ai/image/manager/index.vue +++ b/apps/web-antd/src/views/ai/image/manager/index.vue @@ -24,7 +24,7 @@ async function handleDelete(row: AiImageApi.Image) { duration: 0, }); try { - await deleteImage(row.id as number); + await deleteImage(row.id!); message.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-antd/src/views/ai/knowledge/document/index.vue b/apps/web-antd/src/views/ai/knowledge/document/index.vue index 16d0d06fd..e1dd551fa 100644 --- a/apps/web-antd/src/views/ai/knowledge/document/index.vue +++ b/apps/web-antd/src/views/ai/knowledge/document/index.vue @@ -55,7 +55,7 @@ async function handleDelete(row: AiKnowledgeDocumentApi.KnowledgeDocument) { duration: 0, }); try { - await deleteKnowledgeDocument(row.id as number); + await deleteKnowledgeDocument(row.id!); message.success($t('ui.actionMessage.deleteSuccess', [row.name])); handleRefresh(); } finally { diff --git a/apps/web-antd/src/views/ai/knowledge/knowledge/index.vue b/apps/web-antd/src/views/ai/knowledge/knowledge/index.vue index fd62c5993..6f9d1fdf9 100644 --- a/apps/web-antd/src/views/ai/knowledge/knowledge/index.vue +++ b/apps/web-antd/src/views/ai/knowledge/knowledge/index.vue @@ -45,7 +45,7 @@ async function handleDelete(row: AiKnowledgeKnowledgeApi.Knowledge) { duration: 0, }); try { - await deleteKnowledge(row.id as number); + await deleteKnowledge(row.id!); message.success($t('ui.actionMessage.deleteSuccess', [row.name])); handleRefresh(); } finally { diff --git a/apps/web-antd/src/views/ai/knowledge/segment/index.vue b/apps/web-antd/src/views/ai/knowledge/segment/index.vue index 4533882cf..363e6b1ad 100644 --- a/apps/web-antd/src/views/ai/knowledge/segment/index.vue +++ b/apps/web-antd/src/views/ai/knowledge/segment/index.vue @@ -51,7 +51,7 @@ async function handleDelete(row: AiKnowledgeSegmentApi.KnowledgeSegment) { duration: 0, }); try { - await deleteKnowledgeSegment(row.id as number); + await deleteKnowledgeSegment(row.id!); message.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-antd/src/views/ai/mindmap/manager/index.vue b/apps/web-antd/src/views/ai/mindmap/manager/index.vue index b952e87eb..5cfc0d1c4 100644 --- a/apps/web-antd/src/views/ai/mindmap/manager/index.vue +++ b/apps/web-antd/src/views/ai/mindmap/manager/index.vue @@ -31,7 +31,7 @@ async function handleDelete(row: AiMindmapApi.MindMap) { duration: 0, }); try { - await deleteMindMap(row.id as number); + await deleteMindMap(row.id!); message.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-antd/src/views/ai/music/manager/index.vue b/apps/web-antd/src/views/ai/music/manager/index.vue index 586ab19e1..bfd4d4502 100644 --- a/apps/web-antd/src/views/ai/music/manager/index.vue +++ b/apps/web-antd/src/views/ai/music/manager/index.vue @@ -24,7 +24,7 @@ async function handleDelete(row: AiMusicApi.Music) { duration: 0, }); try { - await deleteMusic(row.id as number); + await deleteMusic(row.id!); message.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-antd/src/views/ai/workflow/data.ts b/apps/web-antd/src/views/ai/workflow/data.ts index 625ec0a23..5decf9f3f 100644 --- a/apps/web-antd/src/views/ai/workflow/data.ts +++ b/apps/web-antd/src/views/ai/workflow/data.ts @@ -13,19 +13,28 @@ export function useGridFormSchema(): VbenFormSchema[] { fieldName: 'code', label: '流程标识', component: 'Input', + componentProps: { + placeholder: '请输入流程标识', + allowClear: true, + }, }, { fieldName: 'name', label: '流程名称', component: 'Input', + componentProps: { + placeholder: '请输入流程名称', + allowClear: true, + }, }, { fieldName: 'status', label: '状态', component: 'Select', componentProps: { - allowClear: true, options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'), + placeholder: '请选择状态', + allowClear: true, }, }, { @@ -46,27 +55,33 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { { field: 'id', title: '编号', + minWidth: 100, }, { field: 'code', title: '流程标识', + minWidth: 150, }, { field: 'name', title: '流程名称', + minWidth: 200, }, { field: 'createTime', title: '创建时间', + minWidth: 180, formatter: 'formatDateTime', }, { field: 'remark', title: '备注', + minWidth: 200, }, { field: 'status', title: '状态', + minWidth: 100, cellRender: { name: 'CellDict', props: { type: DICT_TYPE.COMMON_STATUS }, diff --git a/apps/web-antd/src/views/ai/workflow/form/index.vue b/apps/web-antd/src/views/ai/workflow/form/index.vue index 91f3a7778..87473798d 100644 --- a/apps/web-antd/src/views/ai/workflow/form/index.vue +++ b/apps/web-antd/src/views/ai/workflow/form/index.vue @@ -25,10 +25,27 @@ const route = useRoute(); const workflowId = ref(''); const actionType = ref(''); -// 基础信息组件引用 -const basicInfoRef = ref>(); -// 工作流设计组件引用 -const workflowDesignRef = ref>(); +const basicInfoRef = ref>(); // 基础信息组件引用 +const workflowDesignRef = ref>(); // 工作流设计组件引用 + +const currentStep = ref(-1); // 步骤控制。-1 用于,一开始全部不展示等当前页面数据初始化完成 +const steps = [ + { title: '基本信息', validator: validateBasic }, + { title: '工作流设计', validator: validateWorkflow }, +]; + +const formData: any = ref({ + id: undefined, + name: '', + code: '', + remark: '', + graph: '', + status: CommonStatusEnum.ENABLE, +}); // 表单数据 + +const llmProvider = ref([]); +const workflowData = ref({}); +provide('workflowData', workflowData); /** 步骤校验函数 */ async function validateBasic() { @@ -40,30 +57,9 @@ async function validateWorkflow() { await workflowDesignRef.value?.validate(); } -const currentStep = ref(-1); // 步骤控制。-1 用于,一开始全部不展示等当前页面数据初始化完成 - -const steps = [ - { title: '基本信息', validator: validateBasic }, - { title: '工作流设计', validator: validateWorkflow }, -]; - -// 表单数据 -const formData: any = ref({ - id: undefined, - name: '', - code: '', - remark: '', - graph: '', - status: CommonStatusEnum.ENABLE, -}); - -const llmProvider = ref([]); -const workflowData = ref({}); -provide('workflowData', workflowData); - async function initData() { if (actionType.value === 'update' && workflowId.value) { - formData.value = await getWorkflow(workflowId.value); + formData.value = await getWorkflow(workflowId.value as any); workflowData.value = JSON.parse(formData.value.graph); } const models = await getModelSimpleList(AiModelTypeEnum.CHAT); diff --git a/apps/web-antd/src/views/ai/workflow/form/modules/basic-info.vue b/apps/web-antd/src/views/ai/workflow/form/modules/basic-info.vue index 90ac727b7..a691defaa 100644 --- a/apps/web-antd/src/views/ai/workflow/form/modules/basic-info.vue +++ b/apps/web-antd/src/views/ai/workflow/form/modules/basic-info.vue @@ -8,10 +8,8 @@ import { getDictOptions } from '@vben/hooks'; import { Form, Input, Select } from 'ant-design-vue'; -// 创建本地数据副本 -const modelData = defineModel(); -// 表单引用 -const formRef = ref(); +const modelData = defineModel(); // 创建本地数据副本 +const formRef = ref(); // 表单引用 const rules: Record = { code: [{ required: true, message: '流程标识不能为空', trigger: 'blur' }], name: [{ required: true, message: '流程名称不能为空', trigger: 'blur' }], diff --git a/apps/web-antd/src/views/ai/workflow/index.vue b/apps/web-antd/src/views/ai/workflow/index.vue index a1f6eff11..60e1281bb 100644 --- a/apps/web-antd/src/views/ai/workflow/index.vue +++ b/apps/web-antd/src/views/ai/workflow/index.vue @@ -1,5 +1,6 @@ diff --git a/apps/web-ele/src/views/ai/image/manager/index.vue b/apps/web-ele/src/views/ai/image/manager/index.vue index 576490053..72830e7a9 100644 --- a/apps/web-ele/src/views/ai/image/manager/index.vue +++ b/apps/web-ele/src/views/ai/image/manager/index.vue @@ -23,7 +23,7 @@ async function handleDelete(row: AiImageApi.Image) { text: $t('ui.actionMessage.deleting', [row.id]), }); try { - await deleteImage(row.id as number); + await deleteImage(row.id!); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-ele/src/views/ai/knowledge/document/index.vue b/apps/web-ele/src/views/ai/knowledge/document/index.vue index 946962a7e..df0fc7142 100644 --- a/apps/web-ele/src/views/ai/knowledge/document/index.vue +++ b/apps/web-ele/src/views/ai/knowledge/document/index.vue @@ -54,7 +54,7 @@ async function handleDelete(row: AiKnowledgeDocumentApi.KnowledgeDocument) { text: $t('ui.actionMessage.deleting', [row.name]), }); try { - await deleteKnowledgeDocument(row.id as number); + await deleteKnowledgeDocument(row.id!); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); handleRefresh(); } finally { diff --git a/apps/web-ele/src/views/ai/knowledge/knowledge/index.vue b/apps/web-ele/src/views/ai/knowledge/knowledge/index.vue index 29db6c688..55cfbccd0 100644 --- a/apps/web-ele/src/views/ai/knowledge/knowledge/index.vue +++ b/apps/web-ele/src/views/ai/knowledge/knowledge/index.vue @@ -44,7 +44,7 @@ async function handleDelete(row: AiKnowledgeKnowledgeApi.Knowledge) { text: $t('ui.actionMessage.deleting', [row.name]), }); try { - await deleteKnowledge(row.id as number); + await deleteKnowledge(row.id!); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); handleRefresh(); } finally { diff --git a/apps/web-ele/src/views/ai/knowledge/segment/index.vue b/apps/web-ele/src/views/ai/knowledge/segment/index.vue index 6cfa04b11..980a904e4 100644 --- a/apps/web-ele/src/views/ai/knowledge/segment/index.vue +++ b/apps/web-ele/src/views/ai/knowledge/segment/index.vue @@ -50,7 +50,7 @@ async function handleDelete(row: AiKnowledgeSegmentApi.KnowledgeSegment) { text: $t('ui.actionMessage.deleting', [row.id]), }); try { - await deleteKnowledgeSegment(row.id as number); + await deleteKnowledgeSegment(row.id!); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-ele/src/views/ai/mindmap/manager/index.vue b/apps/web-ele/src/views/ai/mindmap/manager/index.vue index 3241dc59b..9684dfc51 100644 --- a/apps/web-ele/src/views/ai/mindmap/manager/index.vue +++ b/apps/web-ele/src/views/ai/mindmap/manager/index.vue @@ -30,7 +30,7 @@ async function handleDelete(row: AiMindmapApi.MindMap) { text: $t('ui.actionMessage.deleting', [row.id]), }); try { - await deleteMindMap(row.id as number); + await deleteMindMap(row.id!); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally { diff --git a/apps/web-ele/src/views/ai/music/manager/index.vue b/apps/web-ele/src/views/ai/music/manager/index.vue index 9095e1b5f..d0e04cb57 100644 --- a/apps/web-ele/src/views/ai/music/manager/index.vue +++ b/apps/web-ele/src/views/ai/music/manager/index.vue @@ -23,7 +23,7 @@ async function handleDelete(row: AiMusicApi.Music) { text: $t('ui.actionMessage.deleting', [row.id]), }); try { - await deleteMusic(row.id as number); + await deleteMusic(row.id!); ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id])); handleRefresh(); } finally {