iter(g135): 表单支持多列布局
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { h } from '@ui-arch/frame';
|
||||
import { button } from './button.js';
|
||||
import { grid } from './grid.js';
|
||||
import type { FormItemHandle, FormItemProps, FormProps, FormRule } from './types.js';
|
||||
|
||||
/*** 执行规则的同步部分(required / min / max / pattern);null 通过,字符串为错误消息 ***/
|
||||
@@ -124,11 +125,13 @@ export function form(props: FormProps, items: FormItemHandle[]): HTMLElement {
|
||||
props.onSubmit?.();
|
||||
};
|
||||
|
||||
const fields = items.map((i) => i.el); // 字段节点:单列直接铺,多列交给栅格
|
||||
const board = props.columns && props.columns > 1 ? grid({ columns: props.columns, gutter: 'lg' }, ...fields) : fields; // 多列布局复用 grid
|
||||
const el = h(
|
||||
'form',
|
||||
{ class: props.layout === 'horizontal' ? 'ua-form ua-form-h' : 'ua-form' },
|
||||
props.errorSummary === false ? null : summary, // 汇总条:关掉时连节点都不插
|
||||
...items.map((i) => i.el),
|
||||
board, // 多列时是一层 grid,单列时是字段数组(h 自动扁平化)
|
||||
actions,
|
||||
);
|
||||
el.addEventListener('submit', (e) => {
|
||||
|
||||
@@ -400,6 +400,7 @@ export interface FormItemHandle {
|
||||
/*** 表单容器入参 ***/
|
||||
export interface FormProps {
|
||||
layout?: 'vertical' | 'horizontal'; // 布局方向;缺省 vertical
|
||||
columns?: 1 | 2 | 3; // 字段列数:>1 时字段走栅格铺列(窄屏自动单列);缺省 1
|
||||
submitText?: string; // 提交按钮文案;缺省「提交」
|
||||
resetText?: string; // 重置按钮文案;缺省不渲染重置按钮
|
||||
onSubmit?: () => void; // 全部字段校验通过后的提交回调
|
||||
|
||||
Reference in New Issue
Block a user