import type { VbenFormSchema } from '#/adapter/form'; import { z } from '@vben/common-ui'; import { BpmModelFormType, DICT_TYPE } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { getCategorySimpleList } from '#/api/bpm/category'; import { getFormSimpleList } from '#/api/bpm/form'; /** 基本信息表单 */ export function useBaseInfoFormSchema(): VbenFormSchema[] { return [ { fieldName: 'id', component: 'Input', dependencies: { triggerFields: [''], show: () => false, }, }, { fieldName: 'key', label: '流程标识', component: 'Input', componentProps: { placeholder: '请输入流程标识,以字母或下划线开头', allowClear: true, }, dependencies: { triggerFields: ['id'], disabled: (values) => !!values.id, }, rules: z .string() .regex( /^[a-z_][-\w.$]*$/i, '只能包含字母、数字、下划线、连字符和点号,且必须以字母或下划线开头', ), help: '新建后,流程标识不可修改!', }, { fieldName: 'name', label: '流程名称', component: 'Input', componentProps: { placeholder: '请输入流程名称', allowClear: true, }, dependencies: { triggerFields: ['id'], disabled: (values) => !!values.id, }, rules: 'required', help: '新建后,流程名称不可修改!', }, { fieldName: 'category', label: '流程分类', component: 'ApiSelect', componentProps: { api: () => getCategorySimpleList(), placeholder: '请选择流程分类', labelField: 'code', valueField: 'code', allowClear: true, }, rules: 'required', }, { fieldName: 'icon', label: '流程图标', component: 'ImageUpload', componentProps: { maxNumber: 1, placeholder: '请上传流程图标', }, }, { fieldName: 'description', label: '流程描述', component: 'Textarea', componentProps: { placeholder: '请输入流程描述', allowClear: true, }, }, { fieldName: 'type', label: '流程类型', component: 'RadioGroup', componentProps: { options: getDictOptions(DICT_TYPE.BPM_MODEL_TYPE, 'number'), buttonStyle: 'solid', optionType: 'button', }, rules: 'required', }, { fieldName: 'visible', label: '是否可见', component: 'RadioGroup', componentProps: { options: getDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING, 'boolean'), buttonStyle: 'solid', optionType: 'button', }, rules: z.boolean().optional().default(true), }, { fieldName: 'startUserType', label: '谁可以发起', component: 'Input', }, { fieldName: 'managerUserIds', label: '流程管理员', component: 'Input', rules: 'required', }, { fieldName: 'startUserType', label: '谁可以发起', component: 'Input', }, ]; } /** 基本信息表单 */ export function useFormDesignFormSchema(): VbenFormSchema[] { return [ { fieldName: 'formType', label: '表单类型', component: 'RadioGroup', componentProps: { options: getDictOptions(DICT_TYPE.BPM_MODEL_FORM_TYPE, 'number'), buttonStyle: 'solid', optionType: 'button', }, rules: z.number().default(BpmModelFormType.NORMAL), }, { fieldName: 'formId', label: '流程表单', component: 'ApiSelect', componentProps: { api: () => getFormSimpleList(), labelField: 'name', valueField: 'id', allowClear: true, placeholder: '请选择流程表单', }, dependencies: { triggerFields: ['formType'], show: (values) => values.formType === BpmModelFormType.NORMAL, }, rules: 'required', }, { fieldName: 'formCustomCreatePath', label: '表单提交路由', component: 'Input', componentProps: { placeholder: '请输入表单提交路由', allowClear: true, }, dependencies: { triggerFields: ['formType'], show: (values) => values.formType === BpmModelFormType.CUSTOM, }, help: '自定义表单的提交路径,使用 Vue 的路由地址, 例如说: bpm/oa/leave/create.vue', rules: 'required', }, { fieldName: 'formCustomViewPath', label: '表单查看地址', component: 'Input', componentProps: { placeholder: '请输入表单查看的组件地址', allowClear: true, }, dependencies: { triggerFields: ['formType'], show: (values) => values.formType === BpmModelFormType.CUSTOM, }, help: '自定义表单的查看组件地址,使用 Vue 的组件地址,例如说:bpm/oa/leave/detail.vue', rules: 'required', }, ]; }