feat: form `colon` support (#5156)
							parent
							
								
									38805a0e1f
								
							
						
					
					
						commit
						593916d6aa
					
				|  | @ -313,14 +313,14 @@ useVbenForm 返回的第二个参数,是一个对象,包含了一些表单 | |||
| | resetButtonOptions | 重置按钮组件参数 | `ActionButtonOptions` | - | | ||||
| | submitButtonOptions | 提交按钮组件参数 | `ActionButtonOptions` | - | | ||||
| | showDefaultActions | 是否显示默认操作按钮 | `boolean` | `true` | | ||||
| | collapsed | 是否折叠,在`是否展开,在showCollapseButton=true`时生效 | `boolean` | `false` | | ||||
| | collapsed | 是否折叠,在`showCollapseButton`为`true`时生效 | `boolean` | `false` | | ||||
| | collapseTriggerResize | 折叠时,触发`resize`事件 | `boolean` | `false` | | ||||
| | collapsedRows | 折叠时保持的行数 | `number` | `1` | | ||||
| | fieldMappingTime | 用于将表单内时间区域的应设成 2 个字段 | `[string, [string, string], string?][]` | - | | ||||
| | fieldMappingTime | 用于将表单内时间区域组件的数组值映射成 2 个字段 | `[string, [string, string], string?][]` | - | | ||||
| | commonConfig | 表单项的通用配置,每个配置都会传递到每个表单项,表单项可覆盖 | `FormCommonConfig` | - | | ||||
| | schema | 表单项的每一项配置 | `FormSchema` | - | | ||||
| | schema | 表单项的每一项配置 | `FormSchema[]` | - | | ||||
| | submitOnEnter | 按下回车健时提交表单 | `boolean` | false | | ||||
| | submitOnChange | 字段值改变时提交表单 | `boolean` | false | | ||||
| | submitOnChange | 字段值改变时提交表单(内部防抖,这个属性一般用于表格的搜索表单) | `boolean` | false | | ||||
| 
 | ||||
| ### TS 类型说明 | ||||
| 
 | ||||
|  | @ -361,6 +361,10 @@ export interface FormCommonConfig { | |||
|    * 所有表单项的控件样式 | ||||
|    */ | ||||
|   controlClass?: string; | ||||
|   /** | ||||
|    * 在表单项的Label后显示一个冒号 | ||||
|    */ | ||||
|   colon?: boolean; | ||||
|   /** | ||||
|    * 所有表单项的禁用状态 | ||||
|    * @default false | ||||
|  | @ -420,7 +424,7 @@ export interface FormSchema< | |||
|   dependencies?: FormItemDependencies; | ||||
|   /** 描述 */ | ||||
|   description?: string; | ||||
|   /** 字段名 */ | ||||
|   /** 字段名,也作为自定义插槽的名称 */ | ||||
|   fieldName: string; | ||||
|   /** 帮助信息 */ | ||||
|   help?: string; | ||||
|  | @ -443,7 +447,7 @@ export interface FormSchema< | |||
| 
 | ||||
| ```ts | ||||
| dependencies: { | ||||
|   // 只有当 name 字段的值变化时,才会触发联动 | ||||
|   // 触发字段。只有这些字段值变动时,联动才会触发 | ||||
|   triggerFields: ['name'], | ||||
|   // 动态判断当前字段是否需要显示,不显示则直接销毁 | ||||
|   if(values,formApi){}, | ||||
|  | @ -464,11 +468,11 @@ dependencies: { | |||
| 
 | ||||
| ### 表单校验 | ||||
| 
 | ||||
| 表单联动需要通过 schema 内的 `rules` 属性进行配置。 | ||||
| 表单校验需要通过 schema 内的 `rules` 属性进行配置。 | ||||
| 
 | ||||
| rules的值可以是一个字符串,也可以是一个zod的schema。 | ||||
| rules的值可以是字符串(预定义的校验规则名称),也可以是一个zod的schema。 | ||||
| 
 | ||||
| #### 字符串 | ||||
| #### 预定义的校验规则 | ||||
| 
 | ||||
| ```ts | ||||
| // 表示字段必填,默认会根据适配器的required进行国际化 | ||||
|  | @ -494,11 +498,16 @@ import { z } from '#/adapter/form'; | |||
|   rules: z.string().min(1, { message: '请输入字符串' }); | ||||
| } | ||||
| 
 | ||||
| // 可选,并且携带默认值 | ||||
| // 可选(可以是undefined),并且携带默认值。注意zod的optional不包括空字符串'' | ||||
| { | ||||
|    rules: z.string().default('默认值').optional(), | ||||
| } | ||||
| 
 | ||||
| // 可以是空字符串、undefined或者一个邮箱地址 | ||||
| { | ||||
|   rules: z.union(z.string().email().optional(), z.literal("")) | ||||
| } | ||||
| 
 | ||||
| // 复杂校验 | ||||
| { | ||||
|    z.string().min(1, { message: "请输入" }) | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ import { isEventObjectLike } from './helper'; | |||
| interface Props extends FormSchema {} | ||||
| 
 | ||||
| const { | ||||
|   colon, | ||||
|   commonComponentProps, | ||||
|   component, | ||||
|   componentProps, | ||||
|  | @ -300,7 +301,10 @@ function autofocus() { | |||
|         :required="shouldRequired && !hideRequiredMark" | ||||
|         :style="labelStyle" | ||||
|       > | ||||
|         {{ label }} | ||||
|         <template v-if="label"> | ||||
|           <span>{{ label }}</span> | ||||
|           <span v-if="colon" class="ml-[2px]">:</span> | ||||
|         </template> | ||||
|       </FormLabel> | ||||
|       <div :class="cn('relative flex w-full items-center', wrapperClass)"> | ||||
|         <FormControl :class="cn(controlClass)"> | ||||
|  |  | |||
|  | @ -86,6 +86,7 @@ const computedSchema = computed( | |||
|     formFieldProps: Record<string, any>; | ||||
|   } & Omit<FormSchema, 'formFieldProps'>)[] => { | ||||
|     const { | ||||
|       colon = false, | ||||
|       componentProps = {}, | ||||
|       controlClass = '', | ||||
|       disabled, | ||||
|  | @ -110,6 +111,7 @@ const computedSchema = computed( | |||
|           : false; | ||||
| 
 | ||||
|       return { | ||||
|         colon, | ||||
|         disabled, | ||||
|         disabledOnChangeListener, | ||||
|         disabledOnInputListener, | ||||
|  |  | |||
|  | @ -136,6 +136,10 @@ type ComponentProps = | |||
|   | MaybeComponentProps; | ||||
| 
 | ||||
| export interface FormCommonConfig { | ||||
|   /** | ||||
|    * 在Label后显示一个冒号 | ||||
|    */ | ||||
|   colon?: boolean; | ||||
|   /** | ||||
|    * 所有表单项的props | ||||
|    */ | ||||
|  |  | |||
|  | @ -16,6 +16,8 @@ const activeTab = ref('basic'); | |||
| const [BaseForm, baseFormApi] = useVbenForm({ | ||||
|   // 所有表单项共用,可单独在表单内覆盖 | ||||
|   commonConfig: { | ||||
|     // 在label后显示一个冒号 | ||||
|     colon: true, | ||||
|     // 所有表单项 | ||||
|     componentProps: { | ||||
|       class: 'w-full', | ||||
|  | @ -40,6 +42,7 @@ const [BaseForm, baseFormApi] = useVbenForm({ | |||
|       fieldName: 'username', | ||||
|       // 界面显示的label | ||||
|       label: '字符串', | ||||
|       rules: 'required', | ||||
|     }, | ||||
|     { | ||||
|       // 组件需要在 #/adapter.ts内注册,并加上类型 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Netfan
						Netfan