refactor(items): improve edit form layout with responsive grid rows
Group related fields like name/price and category/usage. Stack fields vertically on screens smaller than 720px.
This commit is contained in:
@@ -316,15 +316,22 @@ onMounted(() => {
|
|||||||
<StatusMessage v-if="message" variant="danger">{{ message }}</StatusMessage>
|
<StatusMessage v-if="message" variant="danger">{{ message }}</StatusMessage>
|
||||||
|
|
||||||
<form v-if="!loading && options" id="item-edit-form" class="modal-edit-form" @submit.prevent="saveItem">
|
<form v-if="!loading && options" id="item-edit-form" class="modal-edit-form" @submit.prevent="saveItem">
|
||||||
<TranslationFields
|
<div class="item-edit-row item-edit-row--name-price">
|
||||||
id-prefix="item-name"
|
<TranslationFields
|
||||||
v-model:base-value="itemForm.name"
|
id-prefix="item-name"
|
||||||
v-model:translations="itemForm.translations"
|
v-model:base-value="itemForm.name"
|
||||||
field="name"
|
v-model:translations="itemForm.translations"
|
||||||
:label="t('common.name')"
|
field="name"
|
||||||
:languages="languages"
|
:label="t('common.name')"
|
||||||
required
|
:languages="languages"
|
||||||
/>
|
required
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label for="item-base-price">{{ t('pages.items.basePrice') }}</label>
|
||||||
|
<input id="item-base-price" v-model="itemForm.basePrice" type="number" min="0" step="1" inputmode="numeric" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<TranslationFields
|
<TranslationFields
|
||||||
id-prefix="item-details"
|
id-prefix="item-details"
|
||||||
@@ -352,34 +359,31 @@ onMounted(() => {
|
|||||||
@error="message = $event"
|
@error="message = $event"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="field">
|
<div class="item-edit-row item-edit-row--category-usage">
|
||||||
<label for="item-base-price">{{ t('pages.items.basePrice') }}</label>
|
<div class="field">
|
||||||
<input id="item-base-price" v-model="itemForm.basePrice" type="number" min="0" step="1" inputmode="numeric" />
|
<label for="item-category">{{ t('pages.items.category') }}</label>
|
||||||
</div>
|
<TagsSelect
|
||||||
|
id="item-category"
|
||||||
|
v-model="itemForm.categoryId"
|
||||||
|
:options="options.itemCategories"
|
||||||
|
:multiple="false"
|
||||||
|
:placeholder="t('common.select')"
|
||||||
|
:search-placeholder="t('pages.items.searchCategory')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label for="item-category">{{ t('pages.items.category') }}</label>
|
<label for="item-usage">{{ t('pages.items.usage') }}</label>
|
||||||
<TagsSelect
|
<TagsSelect
|
||||||
id="item-category"
|
id="item-usage"
|
||||||
v-model="itemForm.categoryId"
|
v-model="itemForm.usageId"
|
||||||
:options="options.itemCategories"
|
:options="options.itemUsages"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:placeholder="t('common.select')"
|
clearable
|
||||||
:search-placeholder="t('pages.items.searchCategory')"
|
:placeholder="t('common.none')"
|
||||||
/>
|
:search-placeholder="t('pages.items.searchUsage')"
|
||||||
</div>
|
/>
|
||||||
|
</div>
|
||||||
<div class="field">
|
|
||||||
<label for="item-usage">{{ t('pages.items.usage') }}</label>
|
|
||||||
<TagsSelect
|
|
||||||
id="item-usage"
|
|
||||||
v-model="itemForm.usageId"
|
|
||||||
:options="options.itemUsages"
|
|
||||||
:multiple="false"
|
|
||||||
clearable
|
|
||||||
:placeholder="t('common.none')"
|
|
||||||
:search-placeholder="t('pages.items.searchUsage')"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="check-row">
|
<div class="check-row">
|
||||||
@@ -436,3 +440,30 @@ onMounted(() => {
|
|||||||
</template>
|
</template>
|
||||||
</Modal>
|
</Modal>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.item-edit-row {
|
||||||
|
display: grid;
|
||||||
|
gap: 12px;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-edit-row--name-price {
|
||||||
|
grid-template-columns: minmax(0, 1fr) minmax(180px, 240px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-edit-row--category-usage {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-edit-row > * {
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 720px) {
|
||||||
|
.item-edit-row--name-price,
|
||||||
|
.item-edit-row--category-usage {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user