Перейти к основному содержимому

Организация макета формы

Структура формы

Виджет редактора предоставляет несколько способов структурирования и организации макета формы. Он поддерживает разделение формы на логические группы: пакеты, секции или сворачиваемые/аккордеонные секции. Такая гибкость позволяет разработчикам создавать удобные интерфейсы, в которых поля можно группировать и легко переключаться между ними. Ниже перечислены поддерживаемые конфигурации:

Разделение формы на пакеты с отображением одного пакета

Редактор позволяет разбивать поля формы на отдельные пакеты, при этом одновременно отображается только один пакет. Это удобно для создания пошаговых форм или упрощения сложных форм.

<script setup>
import { Editor, registerEditorItem } from "@svar-ui/vue-editor";
import { Combo } from "@svar-ui/vue-core";

registerEditorItem("combo", Combo);

const items = [
{
comp: "text",
key: "name",
batch: "main",
label: "Name",
},
{
key: "theme",
batch: "cfg",
comp: "combo",
label: "Theme",
options: [
{ id: "light", label: "Light" },
{ id: "dark", label: "Dark" },
],
},
];
</script>

<template>
<Editor :items="items" activeBatch="cfg" />
</template>

В этом примере свойство activeBatch установлено в значение "cfg", поэтому отображаются только поля, назначенные пакету "cfg". Такой подход идеален для форм с несколькими логическими секциями, которые нужно показывать по одной.

switch_batches

Использование панели вкладок для переключения между пакетами

Редактор поддерживает навигацию на основе вкладок для переключения между пакетами. Этот способ подходит для форм с несколькими секциями, между которыми пользователям нужно переходить.

<script setup>
import { ref } from "vue";
import { Editor, registerEditorItem } from "@svar-ui/vue-editor";
import { Tabs, Combo } from "@svar-ui/vue-core";

registerEditorItem("combo", Combo);

const options = [
{
id: "main",
label: "Personal",
},
{
id: "cfg",
label: "Settings",
},
];

const items = [
{
comp: "text",
key: "name",
batch: "main",
label: "Name",
},
{
key: "theme",
batch: "cfg",
comp: "combo",
label: "Theme",
options: [
{ id: "light", label: "Light" },
{ id: "dark", label: "Dark" },
],
},
];

const activeBatch = ref("cfg");
</script>

<template>
<Editor :items="items" :activeBatch="activeBatch">
<Tabs :options="options" v-model:value="activeBatch"></Tabs>
</Editor>
</template>

Здесь компонент Tabs позволяет пользователям выбирать, какой пакет отображать. Привязка activeBatch обеспечивает отображение соответствующих полей в зависимости от выбранной вкладки.

Tabs


Группировка полей формы в сворачиваемые секции

Редактор поддерживает организацию полей в сворачиваемые секции, что упрощает работу с длинными формами. Каждую секцию можно открывать и закрывать.

<script setup>
import { Editor, registerEditorItem } from "@svar-ui/vue-editor";
import { Comments } from "@svar-ui/vue-comments";

registerEditorItem("comments", Comments);

const items = [
{
comp: "section",
key: "common-section",
label: "Common settings",
},
{
comp: "text",
key: "name",
label: "Name",
},
{
comp: "textarea",
key: "descr",
label: "Description",
},
{
comp: "section",
key: "comments-section",
label: "Comments",
},
{
comp: "comments",
key: "comments",
section: "comments-section",
}
];
</script>

<template>
<Editor :items="items" />
</template>

Все поля отображаются внутри сворачиваемых секций.

Секции, такие как "Common settings" и "Comments", можно сворачивать и разворачивать, позволяя пользователям сосредоточиться на конкретных частях формы.

Comments


Отображение аккордеонных секций

Аккордеонный стиль секций позволяет держать открытой только одну секцию одновременно. При открытии новой секции ранее открытая автоматически сворачивается.

<script setup>
import { Editor, registerEditorItem } from "@svar-ui/vue-editor";
import { Comments } from "@svar-ui/vue-comments";

registerEditorItem("comments", Comments);

const items = [
{
comp: "section",
key: "common-section",
label: "Common settings",
sectionMode: "accordion",
},
{
comp: "text",
key: "name",
label: "Name",
},
{
comp: "textarea",
key: "descr",
label: "Description",
},
{
comp: "section",
key: "comments-section",
label: "Comments",
sectionMode: "accordion",
},
{
comp: "comments",
key: "comments",
section: "comments-section",
}
];
</script>

<template>
<Editor :items="items" />
</template>

Все поля отображаются внутри сворачиваемых секций, но открытой может быть только одна секция одновременно.

Такая конфигурация удобна для форм, в которых в один момент нужно отображать информацию только из одной секции.

Accordion

Использование модальных секций в Editor

Модальные секции скрывают остальные поля при открытии, заменяя поля верхнего уровня содержимым выбранной секции. Это полезно для фокусировки на конкретном наборе полей ввода.

<script setup>
import { Editor, registerEditorItem } from "@svar-ui/vue-editor";
import { Comments } from "@svar-ui/vue-comments";

registerEditorItem("comments", Comments);

const items = [
{
comp: "text",
key: "name",
label: "Name",
},
{
comp: "textarea",
key: "descr",
label: "Description",
},
{
comp: "section",
key: "comments-section",
label: "Comments",
sectionMode: "exclusive",
},
{
comp: "comments",
key: "comments",
section: "comments-section",
}
];
</script>

<template>
Fields in sections are hidden by default. Clicking on a section replaces the top-level fields with the section's content.

<Editor :items="items" />
</template>

Такой подход идеален для форм, где секции должны занимать всё внимание, не отвлекая на другие поля.

sections

Совмещение полей и секций в Editor

Редактор позволяет объединять всегда видимые поля со сворачиваемыми секциями. Это удобно, когда некоторые поля должны оставаться доступными в любое время.

<script setup>
import { Editor, registerEditorItem } from "@svar-ui/vue-editor";
import { Comments } from "@svar-ui/vue-comments";

registerEditorItem("comments", Comments);

const items = [
{
comp: "text",
key: "name",
label: "Name",
},
{
comp: "textarea",
key: "descr",
label: "Description",
},
{
comp: "section",
key: "comments-section",
label: "Comments",
},
{
comp: "comments",
key: "comments",
section: "comments-section",
}
];
</script>

<template>
While `name` and `descr` fields are always visible, fields below are rendered inside a collapsible section.

<Editor :items="items" />
</template>

Такая конфигурация подходит для форм, где определённые критически важные поля должны оставаться доступными, а остальные можно сгруппировать в сворачиваемые секции.

mixed

Связанный пример: Layouts