feat:【antd】【ai】工作流的代码优化
This commit is contained in:
@@ -2,28 +2,48 @@ import type { PageParam, PageResult } from '@vben/request';
|
|||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
||||||
export function getWorkflowPage(params: PageParam) {
|
export namespace AiWorkflowApi {
|
||||||
return requestClient.get<PageResult<any>>('/ai/workflow/page', {
|
/** 工作流 */
|
||||||
params,
|
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<PageResult<AiWorkflowApi.Workflow>>(
|
||||||
|
'/ai/workflow/page',
|
||||||
|
{ params },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export const createWorkflow = (data: any) => {
|
/** 查询工作流详情 */
|
||||||
|
export function getWorkflow(id: number) {
|
||||||
|
return requestClient.get<AiWorkflowApi.Workflow>(`/ai/workflow/get?id=${id}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增工作流 */
|
||||||
|
export function createWorkflow(data: AiWorkflowApi.Workflow) {
|
||||||
return requestClient.post('/ai/workflow/create', data);
|
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);
|
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}`);
|
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);
|
return requestClient.post('/ai/workflow/test', data);
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ async function updateConversationTitle(
|
|||||||
filterConversationList.length > 0 &&
|
filterConversationList.length > 0 &&
|
||||||
filterConversationList[0] && // tip:避免切换对话
|
filterConversationList[0] && // tip:避免切换对话
|
||||||
activeConversationId.value ===
|
activeConversationId.value ===
|
||||||
(filterConversationList[0].id as number)
|
(filterConversationList[0].id!)
|
||||||
) {
|
) {
|
||||||
emits('onConversationClick', filterConversationList[0]);
|
emits('onConversationClick', filterConversationList[0]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ async function handleDelete(row: AiImageApi.Image) {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteImage(row.id as number);
|
await deleteImage(row.id!);
|
||||||
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ async function handleDelete(row: AiKnowledgeDocumentApi.KnowledgeDocument) {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteKnowledgeDocument(row.id as number);
|
await deleteKnowledgeDocument(row.id!);
|
||||||
message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ async function handleDelete(row: AiKnowledgeKnowledgeApi.Knowledge) {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteKnowledge(row.id as number);
|
await deleteKnowledge(row.id!);
|
||||||
message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ async function handleDelete(row: AiKnowledgeSegmentApi.KnowledgeSegment) {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteKnowledgeSegment(row.id as number);
|
await deleteKnowledgeSegment(row.id!);
|
||||||
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ async function handleDelete(row: AiMindmapApi.MindMap) {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteMindMap(row.id as number);
|
await deleteMindMap(row.id!);
|
||||||
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ async function handleDelete(row: AiMusicApi.Music) {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteMusic(row.id as number);
|
await deleteMusic(row.id!);
|
||||||
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -13,19 +13,28 @@ export function useGridFormSchema(): VbenFormSchema[] {
|
|||||||
fieldName: 'code',
|
fieldName: 'code',
|
||||||
label: '流程标识',
|
label: '流程标识',
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入流程标识',
|
||||||
|
allowClear: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'name',
|
fieldName: 'name',
|
||||||
label: '流程名称',
|
label: '流程名称',
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入流程名称',
|
||||||
|
allowClear: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldName: 'status',
|
fieldName: 'status',
|
||||||
label: '状态',
|
label: '状态',
|
||||||
component: 'Select',
|
component: 'Select',
|
||||||
componentProps: {
|
componentProps: {
|
||||||
allowClear: true,
|
|
||||||
options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
|
options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
|
||||||
|
placeholder: '请选择状态',
|
||||||
|
allowClear: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -46,27 +55,33 @@ export function useGridColumns(): VxeTableGridOptions['columns'] {
|
|||||||
{
|
{
|
||||||
field: 'id',
|
field: 'id',
|
||||||
title: '编号',
|
title: '编号',
|
||||||
|
minWidth: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'code',
|
field: 'code',
|
||||||
title: '流程标识',
|
title: '流程标识',
|
||||||
|
minWidth: 150,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'name',
|
field: 'name',
|
||||||
title: '流程名称',
|
title: '流程名称',
|
||||||
|
minWidth: 200,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'createTime',
|
field: 'createTime',
|
||||||
title: '创建时间',
|
title: '创建时间',
|
||||||
|
minWidth: 180,
|
||||||
formatter: 'formatDateTime',
|
formatter: 'formatDateTime',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'remark',
|
field: 'remark',
|
||||||
title: '备注',
|
title: '备注',
|
||||||
|
minWidth: 200,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'status',
|
field: 'status',
|
||||||
title: '状态',
|
title: '状态',
|
||||||
|
minWidth: 100,
|
||||||
cellRender: {
|
cellRender: {
|
||||||
name: 'CellDict',
|
name: 'CellDict',
|
||||||
props: { type: DICT_TYPE.COMMON_STATUS },
|
props: { type: DICT_TYPE.COMMON_STATUS },
|
||||||
|
|||||||
@@ -25,10 +25,27 @@ const route = useRoute();
|
|||||||
const workflowId = ref<string>('');
|
const workflowId = ref<string>('');
|
||||||
const actionType = ref<string>('');
|
const actionType = ref<string>('');
|
||||||
|
|
||||||
// 基础信息组件引用
|
const basicInfoRef = ref<InstanceType<typeof BasicInfo>>(); // 基础信息组件引用
|
||||||
const basicInfoRef = ref<InstanceType<typeof BasicInfo>>();
|
const workflowDesignRef = ref<InstanceType<typeof WorkflowDesign>>(); // 工作流设计组件引用
|
||||||
// 工作流设计组件引用
|
|
||||||
const workflowDesignRef = ref<InstanceType<typeof WorkflowDesign>>();
|
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<any>([]);
|
||||||
|
const workflowData = ref<any>({});
|
||||||
|
provide('workflowData', workflowData);
|
||||||
|
|
||||||
/** 步骤校验函数 */
|
/** 步骤校验函数 */
|
||||||
async function validateBasic() {
|
async function validateBasic() {
|
||||||
@@ -40,30 +57,9 @@ async function validateWorkflow() {
|
|||||||
await workflowDesignRef.value?.validate();
|
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<any>([]);
|
|
||||||
const workflowData = ref<any>({});
|
|
||||||
provide('workflowData', workflowData);
|
|
||||||
|
|
||||||
async function initData() {
|
async function initData() {
|
||||||
if (actionType.value === 'update' && workflowId.value) {
|
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);
|
workflowData.value = JSON.parse(formData.value.graph);
|
||||||
}
|
}
|
||||||
const models = await getModelSimpleList(AiModelTypeEnum.CHAT);
|
const models = await getModelSimpleList(AiModelTypeEnum.CHAT);
|
||||||
|
|||||||
@@ -8,10 +8,8 @@ import { getDictOptions } from '@vben/hooks';
|
|||||||
|
|
||||||
import { Form, Input, Select } from 'ant-design-vue';
|
import { Form, Input, Select } from 'ant-design-vue';
|
||||||
|
|
||||||
// 创建本地数据副本
|
const modelData = defineModel<any>(); // 创建本地数据副本
|
||||||
const modelData = defineModel<any>();
|
const formRef = ref(); // 表单引用
|
||||||
// 表单引用
|
|
||||||
const formRef = ref();
|
|
||||||
const rules: Record<string, Rule[]> = {
|
const rules: Record<string, Rule[]> = {
|
||||||
code: [{ required: true, message: '流程标识不能为空', trigger: 'blur' }],
|
code: [{ required: true, message: '流程标识不能为空', trigger: 'blur' }],
|
||||||
name: [{ required: true, message: '流程名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: '流程名称不能为空', trigger: 'blur' }],
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
|
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
|
||||||
|
import type { AiWorkflowApi } from '#/api/ai/workflow';
|
||||||
|
|
||||||
import { Page } from '@vben/common-ui';
|
import { Page } from '@vben/common-ui';
|
||||||
|
|
||||||
@@ -17,14 +18,14 @@ function handleRefresh() {
|
|||||||
gridApi.query();
|
gridApi.query();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 创建 */
|
/** 创建工作流 */
|
||||||
function handleCreate() {
|
function handleCreate() {
|
||||||
router.push({
|
router.push({
|
||||||
name: 'AiWorkflowCreate',
|
name: 'AiWorkflowCreate',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 编辑 */
|
/** 编辑工作流 */
|
||||||
function handleEdit(row: any) {
|
function handleEdit(row: any) {
|
||||||
router.push({
|
router.push({
|
||||||
name: 'AiWorkflowCreate',
|
name: 'AiWorkflowCreate',
|
||||||
@@ -32,17 +33,15 @@ function handleEdit(row: any) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除 */
|
/** 删除工作流 */
|
||||||
async function handleDelete(row: any) {
|
async function handleDelete(row: any) {
|
||||||
const hideLoading = message.loading({
|
const hideLoading = message.loading({
|
||||||
content: $t('ui.actionMessage.deleting', [row.name]),
|
content: $t('ui.actionMessage.deleting', [row.name]),
|
||||||
duration: 0,
|
duration: 0,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteWorkflow(row.id as number);
|
await deleteWorkflow(row.id!);
|
||||||
message.success({
|
message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
||||||
content: $t('ui.actionMessage.deleteSuccess', [row.name]),
|
|
||||||
});
|
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
hideLoading();
|
hideLoading();
|
||||||
@@ -70,12 +69,13 @@ const [Grid, gridApi] = useVbenVxeGrid({
|
|||||||
},
|
},
|
||||||
rowConfig: {
|
rowConfig: {
|
||||||
keyField: 'id',
|
keyField: 'id',
|
||||||
|
isHover: true,
|
||||||
},
|
},
|
||||||
toolbarConfig: {
|
toolbarConfig: {
|
||||||
refresh: true,
|
refresh: true,
|
||||||
search: true,
|
search: true,
|
||||||
},
|
},
|
||||||
} as VxeTableGridOptions<any>,
|
} as VxeTableGridOptions<AiWorkflowApi.Workflow>,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ async function handleDelete(row: AiImageApi.Image) {
|
|||||||
text: $t('ui.actionMessage.deleting', [row.id]),
|
text: $t('ui.actionMessage.deleting', [row.id]),
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteImage(row.id as number);
|
await deleteImage(row.id!);
|
||||||
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ async function handleDelete(row: AiKnowledgeDocumentApi.KnowledgeDocument) {
|
|||||||
text: $t('ui.actionMessage.deleting', [row.name]),
|
text: $t('ui.actionMessage.deleting', [row.name]),
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteKnowledgeDocument(row.id as number);
|
await deleteKnowledgeDocument(row.id!);
|
||||||
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ async function handleDelete(row: AiKnowledgeKnowledgeApi.Knowledge) {
|
|||||||
text: $t('ui.actionMessage.deleting', [row.name]),
|
text: $t('ui.actionMessage.deleting', [row.name]),
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteKnowledge(row.id as number);
|
await deleteKnowledge(row.id!);
|
||||||
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ async function handleDelete(row: AiKnowledgeSegmentApi.KnowledgeSegment) {
|
|||||||
text: $t('ui.actionMessage.deleting', [row.id]),
|
text: $t('ui.actionMessage.deleting', [row.id]),
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteKnowledgeSegment(row.id as number);
|
await deleteKnowledgeSegment(row.id!);
|
||||||
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ async function handleDelete(row: AiMindmapApi.MindMap) {
|
|||||||
text: $t('ui.actionMessage.deleting', [row.id]),
|
text: $t('ui.actionMessage.deleting', [row.id]),
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteMindMap(row.id as number);
|
await deleteMindMap(row.id!);
|
||||||
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ async function handleDelete(row: AiMusicApi.Music) {
|
|||||||
text: $t('ui.actionMessage.deleting', [row.id]),
|
text: $t('ui.actionMessage.deleting', [row.id]),
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await deleteMusic(row.id as number);
|
await deleteMusic(row.id!);
|
||||||
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id]));
|
||||||
handleRefresh();
|
handleRefresh();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in New Issue
Block a user