C3DynamicForm
Пропсы формы
Форма по схеме
Входные параметры
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
schema | C3FormSchema | — | Схема формы: id, settings, rootGroup, mode/steps |
modelValue | Record<string, unknown> | undefined | Данные формы через v-model; важнее initialData |
initialData | Record<string, unknown> | undefined | Начальные данные, когда v-model не передан; копируются, оригинал не правится |
validators | Record<string, ValidatorFn> | undefined | Кастомные проверки по имени из validation.custom |
dataSourceLoaders | Record<string, DataSourceLoaderFn> | undefined | Загрузчики для source.type = 'function'; регистрируются на время жизни формы |
disabled | boolean | false | Блокирует все поля и кнопки |
readonly | boolean | false | Только просмотр: поля недоступны, отправка не срабатывает |
size | 'sm' | 'md' | 'lg' | 'md' | Размер контролов, если поле не задало свой |
hideActions | boolean | false | Скрывает блок кнопок (в мастере — вместе с «Назад»/«Далее») |
validateOn | 'change' | 'submit' | 'change' | change — проверка на лету (пустое непроведённое поле не подсвечивается), submit — только при отправке и переходе шага |
События
| Имя | Payload | Когда |
|---|---|---|
update:modelValue | Record<string, unknown> | Изменение любого поля |
submit | { event, form, valid: true } | Отправка с успешной проверкой |
invalid | Record<string, string | boolean> | Отправка с ошибками |
reset | — | Сброс формы |
stepChange | { from, to } | Смена шага в мастере |
Описание
C3DynamicForm рисует форму по схеме C3FormSchema: корневая группа или шаги (mode: 'wizard') обходятся компонентом C3DynamicGroup, каждое поле рендерит C3DynamicField с контролом из реестра по type. Состояние — в композабле useC3DynamicForm: данные, ошибки, справочники, шаги.
Группа может иметь description — он рисуется под заголовком группы и замещается слотом header. Ширина и раскладка задаются ключами columns, span, layout, height.
Дополнительная информация
Ключи группы (C3FormGroup)
id, label, description, columns (1–6), span (1–6), height (auto | equal), layout (vertical | horizontal | inline), hidden, visibleIf, repeatable с repeatMin/repeatMax, items.
Ключи поля (C3BaseField и потомки)
id, name, label, hint, required, size, hidden, visibleIf, disabledIf, requiredIf, readonlyIf, validation (min, max, minLength, maxLength, pattern, custom, message), source, props. У поля свой набор ключей зависит от type: например, inputType (text | password | email | number | tel | url | search) и placeholder у input, placeholder у select/select-menu, min/max/step у input-number, minRows/maxRows у textarea. Даты как значения inputType нет: для даты есть отдельные типы date-picker, date-range-picker, input-date и input-time.
Справочник (C3DataSource)
type: 'static' с ключом static; type: 'url' с url, method, headers, dataPath, labelKey, valueKey, cache, cacheTtl; type: 'function' с именем загрузчика и params.
Нюансы: params не подмешиваются в строку запроса — для url они участвуют только в ключе кэша, а POST отправляет телом все данные формы. Загрузчик function получает и источник, и данные формы, поэтому читает params сам. Справочник загружается при монтировании поля и при замене объекта source в схеме — на изменение других полей перезагрузки нет, для зависимых списков нужно менять source (например, в computed-схеме).
Слоты и доступное API
header— получает{ schema }; рисуется перед содержимым.footer— без props; после содержимого, до блока кнопок.actions— замещает кнопки и получает{ submit, reset, next, prev, isLastStep }(последние два — в режиме мастера).- Через
refдоступныdata,errors,validate(),validateStep(),collect(),reset(),submit(),currentStepIndex,goToStep(),nextStep(),prevStep(). - У группы и у поля есть scoped-слот
field-labelс{ field }. - Условия (
visibleIf,requiredIf,disabledIf,readonlyIf) сравнивают поле изdataоператорамиeq,neq,gt,gte,lt,lte,in,nin,contains,empty,notEmpty. Числовые операторы приводят значения к числу (нечитаемая строка — ноль),containsработает только с массивами, аempty/notEmptyне требуют ключаvalue.