Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
>
<v-flex>
<h2 class="ellipsed">
{{ store.model.title || "..." }}
{{ model.title || "..." }}
</h2>
</v-flex>
<v-spacer />
<v-flex shrink>
<v-btn
text
color="primary"
:disabled="store.isLoading"
:disabled="isLoading"
@click.stop="navigateBack"
>
<v-icon
Expand All @@ -32,7 +32,7 @@
arrow_back
</v-icon>
<template v-if="!$vuetify.breakpoint.xsOnly">
{{ $t("common.form.cancelButtonLabel") }}
{{ t("common.form.cancelButtonLabel") }}
</template>
</v-btn>
<v-hover
Expand Down Expand Up @@ -61,7 +61,7 @@
Основные
</v-tab>
</v-tabs>
<v-card v-if="store.model">
<v-card v-if="model">
<v-form
ref="form"
@submit.prevent="onSaveAndBack"
Expand All @@ -71,27 +71,27 @@
<v-tab-item eager>
<!-- generated part -->
<vt-form-field
v-model="store.model.title"
v-model="model.title"
component="v-text-field"
:label="$t('category.form.titleLabel')"
:error-messages="$t(i18nFieldError(store.errors.title))"
:disabled="store.isLoading"
:label="t('category.form.titleLabel')"
:error-messages="getErrorMessage(errors.title)"
:disabled="isLoading"
placeholder=""
required
/><vt-form-field
v-model="store.model.orderNumber"
v-model="model.orderNumber"
component="v-text-field"
:label="$t('category.form.orderNumberLabel')"
:error-messages="$t(i18nFieldError(store.errors.orderNumber))"
:disabled="store.isLoading"
:label="t('category.form.orderNumberLabel')"
:error-messages="getErrorMessage(errors.orderNumber)"
:disabled="isLoading"
placeholder=""
required
/><vt-form-field
v-model="store.model.statusId"
v-model="model.statusId"
component="vt-status-select"
:label="$t('category.form.statusIdLabel')"
:error-messages="$t(i18nFieldError(store.errors.statusId))"
:disabled="store.isLoading"
:label="t('category.form.statusIdLabel')"
:error-messages="getErrorMessage(errors.statusId)"
:disabled="isLoading"
placeholder=""
required
compact
Expand All @@ -111,21 +111,21 @@
<v-btn
type="submit"
color="success"
:disabled="!store.isChanged || store.isLoading"
:loading="store.isLoading"
:disabled="!isChanged || isLoading"
:loading="isLoading"
:block="$vuetify.breakpoint.xsOnly"
:class="!$vuetify.breakpoint.xsOnly && 'mx-2'"
>
<v-icon left>
done
</v-icon>
{{ $t("common.form.saveAndCloseButtonLabel") }}
{{ t("common.form.saveAndCloseButtonLabel") }}
</v-btn>

<v-btn
v-if="$route.params.id"
:disabled="!store.isChanged || store.isLoading"
:loading="store.isLoading"
:disabled="!isChanged || isLoading"
:loading="isLoading"
:block="$vuetify.breakpoint.xsOnly"
:class="[
$vuetify.breakpoint.xsOnly && 'ml-0 mt-2',
Expand All @@ -135,7 +135,7 @@
color="accent"
@click.stop="onSave"
>
{{ $t("common.form.saveButtonLabel") }}
{{ t("common.form.saveButtonLabel") }}
</v-btn>
<v-spacer />
</v-layout>
Expand All @@ -150,17 +150,58 @@
</template>

<script lang="ts">
import { Component } from 'vue-property-decorator';
import { Observer } from 'mobx-vue';
import { useEntityForm } from '@/composables/useEntityForm';
import { useI18n } from '@/composables/useI18n'
import { Category as Model } from '@/services/api/factory';
import Store from '@/common/Entity/EntityModelStore';
import EntityForm from '@/common/Entity/EntityForm';
import { defineComponent } from 'vue';

@Observer
@Component
export default class Form extends EntityForm {
store: Store<Model> = new Store<Model>(Model);
}
export default defineComponent({
// eslint-disable-next-line vue/match-component-file-name
name: 'CategoryForm',

setup () {
const { t } = useI18n();

const {
tab,
form,
model,
errors,
isLoading,
isChanged,
i18nFieldError,
tabsHasError,

onSave,
onDelete,
navigateBack,
onSaveAndBack
} = useEntityForm<Model>({ Model} );

const getErrorMessage = (errorKey: string | null): string => {
const errorMessage = i18nFieldError(errorKey);
return errorMessage ? t(errorMessage) : '';
};

return {
t,
tab,
form,
model,
errors,
isLoading,
isChanged,
i18nFieldError,
tabsHasError,
getErrorMessage,

onSave,
onDelete,
navigateBack,
onSaveAndBack
};
}
});
</script>

<style scoped></style>
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,26 @@
<v-flex>
<v-layout align-center>
<h2 class="ellipsed mr-1">
{{ $t("category.list.title") }}
{{ t("category.list.title") }}
</h2>
<span
v-if="store.pagination.totalItems"
v-if="pagination.totalItems"
class="text--secondary subtitle-2"
>
{{ store.pagination.totalItems }}
{{ pagination.totalItems }}
</span>
</v-layout>
</v-flex>
<v-spacer />
<v-flex shrink>
<v-btn
small
dark
color="success"
:to="{ name: 'categoryAdd' }"
>
<v-icon left>
add
</v-icon>
{{ $t("common.list.addNewLabel") }}
<v-icon>add</v-icon>
{{ t("common.list.addNewLabel") }}
</v-btn>
</v-flex>
</v-layout>
Expand All @@ -64,9 +63,9 @@
mr-sm-2
>
<v-text-field
v-model="store.filters.title"
v-model="filters.title"
:placeholder="
$t('category.list.filter.quickFilterPlaceholder')
t('category.list.filter.quickFilterPlaceholder')
"
hide-details
@keyup.enter.native="submitFilters()"
Expand All @@ -78,18 +77,19 @@
mr-sm-10
>
<multi-filters
:filters="store.filters"
:active-filters="store.activeFilters"
:filters="filters"
:active-filters="activeFilters"
@submitFilters="submitFilters"
@update:filters="updateFilters"
/>
</v-flex>
<v-flex
v-if="$vuetify.breakpoint.smAndUp"
mt-sm-4
>
<vt-compact-pagination
:value="store.pagination.page"
:total-pages="store.pagination.totalPages"
:value="pagination.page"
:total-pages="pagination.totalPages"
@input="setCompactPagination"
/>
</v-flex>
Expand All @@ -100,9 +100,9 @@
<v-data-table
v-model="selected"
:headers="headers"
:items="store.list"
:options="store.vuetifyTableOptions"
:server-items-length="store.pagination.totalItems"
:items="list"
:options="vuetifyTableOptions"
:server-items-length="pagination.totalItems"
item-key="id"
:footer-props="{
itemsPerPageOptions: [10, 25, 50, 100, 500]
Expand All @@ -116,7 +116,7 @@
}
]"
:show-select="false"
:loading="store.isLoading"
:loading="isLoading"
fixed-header
@update:options="setPagination"
>
Expand Down Expand Up @@ -164,48 +164,76 @@
</template>

<script lang="ts">
import { Component } from 'vue-property-decorator';
import { Observer } from 'mobx-vue';
import EntityList from '@/common/Entity/EntityList';
import Store from '@/common/Entity/EntityCollectionStore';
import {
CategorySummary as Model,
CategorySearch as SearchModel
} from '@/services/api/factory';
import { computed, defineComponent } from 'vue';
import { CategorySummary, CategorySearch } from '@/services/api/factory';
import { useEntityList } from '@/composables/useEntityList';
import { useI18n } from '@/composables/useI18n';

import MultiFilters from './components/MultiListFilters.vue';

@Observer
@Component({
export default defineComponent({
// eslint-disable-next-line vue/multi-word-component-names
name: 'List',
components: { MultiFilters }
})
export default class List extends EntityList {
store: Store = new Store(Model, SearchModel);
components: { MultiFilters },

setup () {
const { t } = useI18n();

get headers () {
return [
const {
selected,
pagination,
filters,
activeFilters,
list,
isLoading,
vuetifyTableOptions,
deleteItem,
submitFilters,
setCompactPagination,
setPagination,
updateFilters
} = useEntityList(CategorySummary, CategorySearch);

const headers = computed(() => [
{
text: this.$t('category.list.headers.title'),
text: t('category.list.headers.title'),
value: 'title',
align: 'left'
},
{
text: this.$t('category.list.headers.orderNumber'),
text: t('category.list.headers.orderNumber'),
value: 'orderNumber'
},
{
text: this.$t('category.list.headers.status'),
text: t('category.list.headers.status'),
value: 'status',
sortable: false
},
{
text: this.$t('category.list.headers.actions'),
text: t('category.list.headers.actions'),
value: 'id',
sortable: false
}
];
]);

return {
t,
selected,
pagination,
filters,
activeFilters,
list,
isLoading,
vuetifyTableOptions,
deleteItem,
submitFilters,
setCompactPagination,
setPagination,
updateFilters,
headers
};
}
}
});
</script>

<style lang="scss"></style>
Loading
Loading