C3DynamicForm

Пропсы формы

Форма по схеме

playground-registration слот header: заголовок из settings — «Анкета кандидата»

Анкета

Поля сгруппаны по смыслу: описание группы объясняет блок целиком

Контакты

Имя и почта обязательны, телефон — по желанию

Как обращаться

Работа

Отдел запрашивается только у занятых полный день

Валидация min/max из схемы

Дополнительно

Событие: — · изменений: 0 · полей в данных: 1

Входные параметры

ИмяТипПо умолчаниюОписание
schemaC3FormSchema—Схема формы: id, settings, rootGroup, mode/steps
modelValueRecord<string, unknown>undefinedДанные формы через v-model; важнее initialData
initialDataRecord<string, unknown>undefinedНачальные данные, когда v-model не передан; копируются, оригинал не правится
validatorsRecord<string, ValidatorFn>undefinedКастомные проверки по имени из validation.custom
dataSourceLoadersRecord<string, DataSourceLoaderFn>undefinedЗагрузчики для source.type = 'function'; регистрируются на время жизни формы
disabledbooleanfalseБлокирует все поля и кнопки
readonlybooleanfalseТолько просмотр: поля недоступны, отправка не срабатывает
size'sm' | 'md' | 'lg''md'Размер контролов, если поле не задало свой
hideActionsbooleanfalseСкрывает блок кнопок (в мастере — вместе с «Назад»/«Далее»)
validateOn'change' | 'submit''change'change — проверка на лету (пустое непроведённое поле не подсвечивается), submit — только при отправке и переходе шага

События

ИмяPayloadКогда
update:modelValueRecord<string, unknown>Изменение любого поля
submit{ event, form, valid: true }Отправка с успешной проверкой
invalidRecord<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.
×