|
@@ -87,7 +87,7 @@ import type { BaseFormComponentType } from '@vben/common-ui';
|
|
|
import type { Component, SetupContext } from 'vue';
|
|
import type { Component, SetupContext } from 'vue';
|
|
|
import { h } from 'vue';
|
|
import { h } from 'vue';
|
|
|
|
|
|
|
|
-import { globalShareState } from '@vben/common-ui';
|
|
|
|
|
|
|
+import { globalShareState, IconPicker } from '@vben/common-ui';
|
|
|
import { $t } from '@vben/locales';
|
|
import { $t } from '@vben/locales';
|
|
|
|
|
|
|
|
import {
|
|
import {
|
|
@@ -149,6 +149,7 @@ export type ComponentType =
|
|
|
| 'TimePicker'
|
|
| 'TimePicker'
|
|
|
| 'TreeSelect'
|
|
| 'TreeSelect'
|
|
|
| 'Upload'
|
|
| 'Upload'
|
|
|
|
|
+ | 'IconPicker';
|
|
|
| BaseFormComponentType;
|
|
| BaseFormComponentType;
|
|
|
|
|
|
|
|
async function initComponentAdapter() {
|
|
async function initComponentAdapter() {
|
|
@@ -166,6 +167,7 @@ async function initComponentAdapter() {
|
|
|
return h(Button, { ...props, attrs, type: 'default' }, slots);
|
|
return h(Button, { ...props, attrs, type: 'default' }, slots);
|
|
|
},
|
|
},
|
|
|
Divider,
|
|
Divider,
|
|
|
|
|
+ IconPicker,
|
|
|
Input: withDefaultPlaceholder(Input, 'input'),
|
|
Input: withDefaultPlaceholder(Input, 'input'),
|
|
|
InputNumber: withDefaultPlaceholder(InputNumber, 'input'),
|
|
InputNumber: withDefaultPlaceholder(InputNumber, 'input'),
|
|
|
InputPassword: withDefaultPlaceholder(InputPassword, 'input'),
|
|
InputPassword: withDefaultPlaceholder(InputPassword, 'input'),
|
|
@@ -285,6 +287,8 @@ useVbenForm 返回的第二个参数,是一个对象,包含了一些表单
|
|
|
| setValues | 设置表单值, 默认会过滤不在schema中定义的field, 可通过filterFields形参关闭过滤 | `(fields: Record<string, any>, filterFields?: boolean, shouldValidate?: boolean) => Promise<void>` |
|
|
| setValues | 设置表单值, 默认会过滤不在schema中定义的field, 可通过filterFields形参关闭过滤 | `(fields: Record<string, any>, filterFields?: boolean, shouldValidate?: boolean) => Promise<void>` |
|
|
|
| getValues | 获取表单值 | `(fields:Record<string, any>,shouldValidate: boolean = false)=>Promise<void>` |
|
|
| getValues | 获取表单值 | `(fields:Record<string, any>,shouldValidate: boolean = false)=>Promise<void>` |
|
|
|
| validate | 表单校验 | `()=>Promise<void>` |
|
|
| validate | 表单校验 | `()=>Promise<void>` |
|
|
|
|
|
+| validateField | 校验指定字段 | `(fieldName: string)=>Promise<ValidationResult<unknown>>` |
|
|
|
|
|
+| isFieldValid | 检查某个字段是否已通过校验 | `(fieldName: string)=>Promise<boolean>` |
|
|
|
| resetValidate | 重置表单校验 | `()=>Promise<void>` |
|
|
| resetValidate | 重置表单校验 | `()=>Promise<void>` |
|
|
|
| updateSchema | 更新formSchema | `(schema:FormSchema[])=>void` |
|
|
| updateSchema | 更新formSchema | `(schema:FormSchema[])=>void` |
|
|
|
| setFieldValue | 设置字段值 | `(field: string, value: any, shouldValidate?: boolean)=>Promise<void>` |
|
|
| setFieldValue | 设置字段值 | `(field: string, value: any, shouldValidate?: boolean)=>Promise<void>` |
|
|
@@ -304,16 +308,19 @@ useVbenForm 返回的第二个参数,是一个对象,包含了一些表单
|
|
|
| actionWrapperClass | 表单操作区域class | `any` | - |
|
|
| actionWrapperClass | 表单操作区域class | `any` | - |
|
|
|
| handleReset | 表单重置回调 | `(values: Record<string, any>,) => Promise<void> \| void` | - |
|
|
| handleReset | 表单重置回调 | `(values: Record<string, any>,) => Promise<void> \| void` | - |
|
|
|
| handleSubmit | 表单提交回调 | `(values: Record<string, any>,) => Promise<void> \| void` | - |
|
|
| handleSubmit | 表单提交回调 | `(values: Record<string, any>,) => Promise<void> \| void` | - |
|
|
|
|
|
+| handleValuesChange | 表单值变化回调 | `(values: Record<string, any>,) => void` | - |
|
|
|
|
|
+| actionButtonsReverse | 调换操作按钮位置 | `boolean` | `false` |
|
|
|
| resetButtonOptions | 重置按钮组件参数 | `ActionButtonOptions` | - |
|
|
| resetButtonOptions | 重置按钮组件参数 | `ActionButtonOptions` | - |
|
|
|
| submitButtonOptions | 提交按钮组件参数 | `ActionButtonOptions` | - |
|
|
| submitButtonOptions | 提交按钮组件参数 | `ActionButtonOptions` | - |
|
|
|
| showDefaultActions | 是否显示默认操作按钮 | `boolean` | `true` |
|
|
| showDefaultActions | 是否显示默认操作按钮 | `boolean` | `true` |
|
|
|
-| collapsed | 是否折叠,在`是否展开,在showCollapseButton=true`时生效 | `boolean` | `false` |
|
|
|
|
|
|
|
+| collapsed | 是否折叠,在`showCollapseButton`为`true`时生效 | `boolean` | `false` |
|
|
|
| collapseTriggerResize | 折叠时,触发`resize`事件 | `boolean` | `false` |
|
|
| collapseTriggerResize | 折叠时,触发`resize`事件 | `boolean` | `false` |
|
|
|
| collapsedRows | 折叠时保持的行数 | `number` | `1` |
|
|
| collapsedRows | 折叠时保持的行数 | `number` | `1` |
|
|
|
-| fieldMappingTime | 用于将表单内时间区域的应设成 2 个字段 | `[string, [string, string], string?][]` | - |
|
|
|
|
|
|
|
+| fieldMappingTime | 用于将表单内时间区域组件的数组值映射成 2 个字段 | `[string, [string, string], string?][]` | - |
|
|
|
| commonConfig | 表单项的通用配置,每个配置都会传递到每个表单项,表单项可覆盖 | `FormCommonConfig` | - |
|
|
| commonConfig | 表单项的通用配置,每个配置都会传递到每个表单项,表单项可覆盖 | `FormCommonConfig` | - |
|
|
|
-| schema | 表单项的每一项配置 | `FormSchema` | - |
|
|
|
|
|
|
|
+| schema | 表单项的每一项配置 | `FormSchema[]` | - |
|
|
|
| submitOnEnter | 按下回车健时提交表单 | `boolean` | false |
|
|
| submitOnEnter | 按下回车健时提交表单 | `boolean` | false |
|
|
|
|
|
+| submitOnChange | 字段值改变时提交表单(内部防抖,这个属性一般用于表格的搜索表单) | `boolean` | false |
|
|
|
|
|
|
|
|
### TS 类型说明
|
|
### TS 类型说明
|
|
|
|
|
|
|
@@ -350,10 +357,21 @@ export interface FormCommonConfig {
|
|
|
* 所有表单项的props
|
|
* 所有表单项的props
|
|
|
*/
|
|
*/
|
|
|
componentProps?: ComponentProps;
|
|
componentProps?: ComponentProps;
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 是否紧凑模式(移除表单底部为显示校验错误信息所预留的空间)。
|
|
|
|
|
+ * 在有设置校验规则的场景下,建议不要将其设置为true
|
|
|
|
|
+ * 默认为false。但用作表格的搜索表单时,默认为true
|
|
|
|
|
+ * @default false
|
|
|
|
|
+ */
|
|
|
|
|
+ compact?: boolean;
|
|
|
/**
|
|
/**
|
|
|
* 所有表单项的控件样式
|
|
* 所有表单项的控件样式
|
|
|
*/
|
|
*/
|
|
|
controlClass?: string;
|
|
controlClass?: string;
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 在表单项的Label后显示一个冒号
|
|
|
|
|
+ */
|
|
|
|
|
+ colon?: boolean;
|
|
|
/**
|
|
/**
|
|
|
* 所有表单项的禁用状态
|
|
* 所有表单项的禁用状态
|
|
|
* @default false
|
|
* @default false
|
|
@@ -413,7 +431,7 @@ export interface FormSchema<
|
|
|
dependencies?: FormItemDependencies;
|
|
dependencies?: FormItemDependencies;
|
|
|
/** 描述 */
|
|
/** 描述 */
|
|
|
description?: string;
|
|
description?: string;
|
|
|
- /** 字段名 */
|
|
|
|
|
|
|
+ /** 字段名,也作为自定义插槽的名称 */
|
|
|
fieldName: string;
|
|
fieldName: string;
|
|
|
/** 帮助信息 */
|
|
/** 帮助信息 */
|
|
|
help?: string;
|
|
help?: string;
|
|
@@ -436,7 +454,7 @@ export interface FormSchema<
|
|
|
|
|
|
|
|
```ts
|
|
```ts
|
|
|
dependencies: {
|
|
dependencies: {
|
|
|
- // 只有当 name 字段的值变化时,才会触发联动
|
|
|
|
|
|
|
+ // 触发字段。只有这些字段值变动时,联动才会触发
|
|
|
triggerFields: ['name'],
|
|
triggerFields: ['name'],
|
|
|
// 动态判断当前字段是否需要显示,不显示则直接销毁
|
|
// 动态判断当前字段是否需要显示,不显示则直接销毁
|
|
|
if(values,formApi){},
|
|
if(values,formApi){},
|
|
@@ -457,11 +475,11 @@ dependencies: {
|
|
|
|
|
|
|
|
### 表单校验
|
|
### 表单校验
|
|
|
|
|
|
|
|
-表单联动需要通过 schema 内的 `rules` 属性进行配置。
|
|
|
|
|
|
|
+表单校验需要通过 schema 内的 `rules` 属性进行配置。
|
|
|
|
|
|
|
|
-rules的值可以是一个字符串,也可以是一个zod的schema。
|
|
|
|
|
|
|
+rules的值可以是字符串(预定义的校验规则名称),也可以是一个zod的schema。
|
|
|
|
|
|
|
|
-#### 字符串
|
|
|
|
|
|
|
+#### 预定义的校验规则
|
|
|
|
|
|
|
|
```ts
|
|
```ts
|
|
|
// 表示字段必填,默认会根据适配器的required进行国际化
|
|
// 表示字段必填,默认会根据适配器的required进行国际化
|
|
@@ -487,11 +505,16 @@ import { z } from '#/adapter/form';
|
|
|
rules: z.string().min(1, { message: '请输入字符串' });
|
|
rules: z.string().min(1, { message: '请输入字符串' });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 可选,并且携带默认值
|
|
|
|
|
|
|
+// 可选(可以是undefined),并且携带默认值。注意zod的optional不包括空字符串''
|
|
|
{
|
|
{
|
|
|
rules: z.string().default('默认值').optional(),
|
|
rules: z.string().default('默认值').optional(),
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 可以是空字符串、undefined或者一个邮箱地址
|
|
|
|
|
+{
|
|
|
|
|
+ rules: z.union(z.string().email().optional(), z.literal(""))
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// 复杂校验
|
|
// 复杂校验
|
|
|
{
|
|
{
|
|
|
z.string().min(1, { message: "请输入" })
|
|
z.string().min(1, { message: "请输入" })
|