# 表单页面代码模板 使用 vee-validate + zod 验证,全部使用 Fa* 内建组件,不引入任何 Element Plus 组件。 占位符说明: - `{cname}` — 模块中文名 - `{componentName}` — 组件名(PascalCase) - `{zodSchema}` — zod 字段定义 - `{initialValues}` — 表单初始值 - `{formItems}` — FormField 列表 - `{imports}` — 需要手动 import 的组件 - `{maxWidth}` — 单列 `max-w-600px` / 双列 `max-w-1200px` - `{gridClass}` — 双列时 `grid grid-cols-1 gap-x-8 gap-y-6 items-start md:grid-cols-2` / 单列时 `space-y-6` --- ## index.vue 模板 ```vue ``` --- ## 各字段类型的 FormField 片段 ```vue {label} {label}
{label} {label} {label} {label}
{{ opt.label }}
{label} {label} {label} {label} {label} ``` --- ## zod 验证规则片段 ```typescript // 必填文本 {field}: z.string().min(1, '请输入{label}'), // 必填文本 + 最大长度 {field}: z.string().min(1, '请输入{label}').max(50, '最多50个字符'), // 必填数字(最小值) {field}: z.number({ message: '请输入{label}' }).min(0.01, '最小值为0.01'), // 必填选择(string) {field}: z.string().min(1, '请选择{label}'), // 必填选择(number) {field}: z.number({ message: '请选择{label}' }), // 布尔(开关,非必填) {field}: z.boolean(), // 数组(多选,非必填) {field}: z.array(z.string()), // 图片上传(string[],必填至少一张) {field}: z.array(z.string()).min(1, '请上传{label}'), // 非必填文本 {field}: z.string().optional(), ``` --- ## 需要手动 import 的组件 以下组件不在自动导入范围内,使用时需在 script 顶部添加 import: ```typescript import FaImageUpload from '@/ui/components/FaImageUpload/index.vue' import FaFileUpload from '@/ui/components/FaFileUpload/index.vue' import FaIconPicker from '@/ui/components/FaIconPicker/index.vue' import FaNumberField from '@/ui/components/FaNumberField/index.vue' ``` --- ## 字段类型映射表 根据用户描述的关键词选择对应组件: | 用户描述关键词 | 生成组件 | 备注 | |---|---|---| | 文本、名称、标题、账号、邮箱、手机 | `FaInput` | 默认文本输入 | | 密码 | `FaInput type="password"` | 自动添加 FaPasswordStrength | | 多行、描述、备注、内容、简介 | `FaTextarea` | | | 下拉、选择、类型、分类、状态(枚举值) | `FaSelect` | 生成 options 数组占位 | | 开关、启用、禁用、是否、boolean | `FaSwitch` | | | 复选、多选 | `FaCheckbox`(多个) | 每个选项一个 FaCheckbox,手动维护数组 | | 日期 | 原生 `` | 暂无 Fa 内建日期选择器 | | 日期时间 | 原生 `` | | | 图片、头像、封面、缩略图 | `FaImageUpload` | | | 文件、附件 | `FaFileUpload` | | | 图标 | `FaIconPicker` | | | 数字、金额、数量、年龄 | `FaNumberField` | | 字段类型不明确时,默认使用 `FaInput`。