From ad8007fe6b00c473b7f21fc4f18af3062397a19b Mon Sep 17 00:00:00 2001 From: jcasado Date: Thu, 11 Apr 2024 13:42:37 +0200 Subject: [PATCH 01/26] refs #6641 add checkbox --- src/pages/Claim/ClaimFilter.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/pages/Claim/ClaimFilter.vue b/src/pages/Claim/ClaimFilter.vue index ee702ffdd..ef14811d1 100644 --- a/src/pages/Claim/ClaimFilter.vue +++ b/src/pages/Claim/ClaimFilter.vue @@ -149,6 +149,15 @@ const states = ref(); /> + + + + + + + + + + + + + +en: + params: + search: General search + categoryFk: Category + typeFk: Type + buyerFk: Buyer + supplierFk: Supplier + tags: Tags + tag: Tag + value: Value +es: + params: + search: Búsqueda general + categoryFk: Reino + typeFk: Tipo + buyerFk: Comprador + supplierFk: Proveedor + tags: Etiquetas + tag: Etiqueta + value: Valor + From f3b5bf7f4b1847286738ce6225ec4b70c5fba628 Mon Sep 17 00:00:00 2001 From: wbuezas Date: Tue, 23 Apr 2024 15:34:52 -0300 Subject: [PATCH 03/26] Item list filter --- src/composables/useArrayData.js | 7 +- src/pages/Item/ItemList.vue | 2 +- src/pages/Item/ItemListFilter.vue | 230 +++++++++++++++++++++--------- src/router/modules/item.js | 1 + 4 files changed, 171 insertions(+), 69 deletions(-) diff --git a/src/composables/useArrayData.js b/src/composables/useArrayData.js index 998ee0576..04d7bfef7 100644 --- a/src/composables/useArrayData.js +++ b/src/composables/useArrayData.js @@ -156,9 +156,10 @@ export function useArrayData(key, userOptions) { delete store.userParams[param]; delete params[param]; if (store.filter?.where) { - delete store.filter.where[ - Object.keys(exprBuilder ? exprBuilder(param) : param)[0] - ]; + const key = Object.keys( + exprBuilder && exprBuilder(param) ? exprBuilder(param) : param + ); + if (key[0]) delete store.filter.where[key[0]]; if (Object.keys(store.filter.where).length === 0) { delete store.filter.where; } diff --git a/src/pages/Item/ItemList.vue b/src/pages/Item/ItemList.vue index 9c1ab9df6..3b3697612 100644 --- a/src/pages/Item/ItemList.vue +++ b/src/pages/Item/ItemList.vue @@ -70,7 +70,7 @@ const exprBuilder = (param, value) => { } }; -const params = reactive({}); +const params = reactive({ isFloramondo: false, isActive: true }); const applyColumnFilter = async (col) => { try { diff --git a/src/pages/Item/ItemListFilter.vue b/src/pages/Item/ItemListFilter.vue index a99811e2f..ad6167014 100644 --- a/src/pages/Item/ItemListFilter.vue +++ b/src/pages/Item/ItemListFilter.vue @@ -4,13 +4,14 @@ import { useI18n } from 'vue-i18n'; import { onMounted } from 'vue'; import { useStateStore } from 'stores/useStateStore'; +import FetchData from 'components/FetchData.vue'; import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; import VnInput from 'src/components/common/VnInput.vue'; -import FetchData from 'components/FetchData.vue'; -import VnInputDate from 'src/components/common/VnInputDate.vue'; +import { QCheckbox } from 'quasar'; import { useArrayData } from 'composables/useArrayData'; +import { useValidator } from 'src/composables/useValidator'; import axios from 'axios'; const { t } = useI18n(); @@ -23,6 +24,7 @@ const props = defineProps({ }); const stateStore = useStateStore(); +const validationsStore = useValidator(); const itemTypesRef = ref(null); const categoriesOptions = ref([]); @@ -30,19 +32,27 @@ const itemTypesOptions = ref([]); const buyersOptions = ref([]); const suppliersOptions = ref([]); const tagValues = ref([]); +const fieldFiltersValues = ref([]); +const moreFields = ref([]); const arrayData = useArrayData(props.dataKey); -const itemTypesFilter = computed(() => { - return { - fields: ['id', 'name', 'categoryFk'], - include: 'category', - order: 'name ASC', - where: { categoryFk: arrayData.store?.userParams?.categoryFk }, - }; -}); +const itemTypesFilter = { + fields: ['id', 'name', 'categoryFk'], + include: 'category', + order: 'name ASC', + where: {}, +}; -// TODO: checkear este watch que fetchee cuando cambie categoryFk -watch(itemTypesFilter.value.where.categoryFk, () => itemTypesRef.value.fetch()); +const onCategoryChange = async (categoryFk, search) => { + if (!categoryFk) { + itemTypesFilter.where.categoryFk = null; + delete itemTypesFilter.where.categoryFk; + } else { + itemTypesFilter.where.categoryFk = categoryFk; + } + search(); + await itemTypesRef.value.fetch(); +}; const getSelectedTagValues = async (tag) => { try { @@ -62,45 +72,60 @@ const getSelectedTagValues = async (tag) => { } }; -// const applyColumnFilter = async (col) => { -// try { -// params[col.field] = col.columnFilter.filterValue; -// await arrayData.addFilter({ params }); -// } catch (err) { -// console.error('Error applying column filter', err); -// } -// }; - -const applyTags = () => { - // params.tags = tagValues.value - // .filter((tag) => tag.selectedTag && tag.value) - // .map((tag) => ({ - // tagFk: tag.selectedTag.id, - // tagName: tag.selectedTag.name, - // value: tag.value, - // })); - console.log('apply tags'); - const params = { - tags: tagValues.value - .filter((tag) => tag.selectedTag && tag.value) - .map((tag) => ({ - tagFk: tag.selectedTag.id, - tagName: tag.selectedTag.name, - value: tag.value, - })), - }; - console.log('params:: ', params); - arrayData.addFilter({ params }); - // search(); +const applyTags = (params, search) => { + params.tags = tagValues.value + .filter((tag) => tag.selectedTag && tag.value) + .map((tag) => ({ + tagFk: tag.selectedTag.id, + tagName: tag.selectedTag.name, + value: tag.value, + })); + search(); }; const removeTag = (index, params, search) => { (tagValues.value || []).splice(index, 1); - // applyTags(params, search); + applyTags(params, search); +}; + +const applyFieldFilters = (params) => { + fieldFiltersValues.value.forEach((fieldFilter) => { + if ( + fieldFilter.selectedField && + (fieldFilter.value !== null || + fieldFilter.value !== '' || + fieldFilter.value !== undefined) + ) { + params[fieldFilter.name] = fieldFilter.value; + } + }); + arrayData.applyFilter({ params }); +}; + +const removeFieldFilter = (index, params, search) => { + delete params[fieldFiltersValues.value[index].name]; + (fieldFiltersValues.value || []).splice(index, 1); + applyFieldFilters(params, search); }; onMounted(async () => { stateStore.rightDrawer = true; + if (arrayData.store?.userParams?.categoryFk) + itemTypesFilter.where.categoryFk = arrayData.store?.userParams?.categoryFk; + await itemTypesRef.value.fetch(); + const { models } = validationsStore; + const properties = models.Item?.properties || {}; + + const _moreFields = ['id', 'description', 'name', 'isActive']; + + _moreFields.forEach((field) => { + let prop = properties[field]; + moreFields.value.push({ + name: field, + label: prop ? prop.description : field, + type: prop ? prop.type : null, + }); + }); }); @@ -116,7 +141,6 @@ onMounted(async () => { url="ItemTypes" :filter="itemTypesFilter" @on-fetch="(data) => (itemTypesOptions = data)" - auto-load /> { /> @@ -136,16 +160,16 @@ onMounted(async () => { auto-load @on-fetch="(data) => (tagOptions = data)" /> - - - +
{{ itemTypesFilter }}
+ @@ -335,7 +424,13 @@ en: tags: Tags tag: Tag value: Value + isFloramondo: Floramondo + isActive: Active + description: Description + name: Name + id: ID es: + More fields: Más campos params: search: Búsqueda general categoryFk: Reino @@ -345,4 +440,9 @@ es: tags: Etiquetas tag: Etiqueta value: Valor + isFloramondo: Floramondo + isActive: Activo + description: Descripción + name: Nombre + id: ID diff --git a/src/router/modules/item.js b/src/router/modules/item.js index 41f3ec92a..a9e7090b3 100644 --- a/src/router/modules/item.js +++ b/src/router/modules/item.js @@ -6,6 +6,7 @@ export default { meta: { title: 'items', icon: 'vn:item', + moduleName: 'Item', }, component: RouterView, redirect: { name: 'ItemMain' }, From 82300fd292307a89a5397397db44add3f1ca6b17 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 24 Apr 2024 11:31:37 +0200 Subject: [PATCH 04/26] refactor: refs #7239 changed french translations --- src/components/common/VnSmsDialog.vue | 39 ++++++++++++++++----------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/components/common/VnSmsDialog.vue b/src/components/common/VnSmsDialog.vue index 59021cef4..4306beb4c 100644 --- a/src/components/common/VnSmsDialog.vue +++ b/src/components/common/VnSmsDialog.vue @@ -21,7 +21,8 @@ const props = defineProps({ }, template: { type: String, - required: true, + required: false, + default: '', }, locale: { type: String, @@ -49,7 +50,7 @@ updateMessage(); function updateMessage() { const params = props.data; - const key = `templates['${props.template}']`; + const key = props.template ? `templates['${props.template}']` : ''; message.value = t(key, params, { locale: locale.value }); } @@ -104,15 +105,14 @@ async function send() { map-options :input-debounce="0" rounded - outlined dense /> - + - + - + @@ -287,7 +289,7 @@ onMounted(async () => { class="row items-center" > - { /> - { class="row items-center" > - From ad085974dac83e25e0ef7edc82ef54e91d2c9e55 Mon Sep 17 00:00:00 2001 From: wbuezas Date: Fri, 26 Apr 2024 13:51:20 -0300 Subject: [PATCH 15/26] remove console.log --- src/pages/Item/ItemListFilter.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/Item/ItemListFilter.vue b/src/pages/Item/ItemListFilter.vue index 49aeac29f..f383a1e18 100644 --- a/src/pages/Item/ItemListFilter.vue +++ b/src/pages/Item/ItemListFilter.vue @@ -119,7 +119,6 @@ onMounted(async () => { const _moreFields = ['id', 'description', 'name', 'isActive']; _moreFields.forEach((field) => { - console.log(field); let prop = properties[field]; const label = t(`params.${field}`); moreFields.value.push({ From 4282463e51e8f140be44d5549297ad62ada548a7 Mon Sep 17 00:00:00 2001 From: wbuezas Date: Fri, 26 Apr 2024 14:29:11 -0300 Subject: [PATCH 16/26] Fill filter fields with user params --- src/pages/Item/ItemListFilter.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/pages/Item/ItemListFilter.vue b/src/pages/Item/ItemListFilter.vue index f383a1e18..2e89cdbcf 100644 --- a/src/pages/Item/ItemListFilter.vue +++ b/src/pages/Item/ItemListFilter.vue @@ -127,6 +127,17 @@ onMounted(async () => { type: prop ? prop.type : null, }); }); + + // Fill fieldFiltersValues with existent userParams + if (arrayData.store?.userParams) { + fieldFiltersValues.value = Object.entries(arrayData.store?.userParams) + .filter(([key, value]) => value && _moreFields.includes(key)) + .map(([key, value]) => ({ + name: key, + value, + selectedField: moreFields.value.find((field) => field.name === key), + })); + } }); From ce55109dd31dd19dd579b74391c35f9b1d0cca30 Mon Sep 17 00:00:00 2001 From: wbuezas Date: Fri, 26 Apr 2024 15:41:03 -0300 Subject: [PATCH 17/26] fix more fields label when selected --- src/pages/Item/ItemListFilter.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Item/ItemListFilter.vue b/src/pages/Item/ItemListFilter.vue index 2e89cdbcf..98bc74b20 100644 --- a/src/pages/Item/ItemListFilter.vue +++ b/src/pages/Item/ItemListFilter.vue @@ -369,7 +369,7 @@ onMounted(async () => { Date: Fri, 26 Apr 2024 21:05:45 +0200 Subject: [PATCH 18/26] fix: reset fieldFilter.value when change model --- src/pages/Item/ItemListFilter.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/Item/ItemListFilter.vue b/src/pages/Item/ItemListFilter.vue index 98bc74b20..a51f9ebb4 100644 --- a/src/pages/Item/ItemListFilter.vue +++ b/src/pages/Item/ItemListFilter.vue @@ -381,6 +381,7 @@ onMounted(async () => { @update:model-value=" ($event) => { fieldFilter.name = $event.name; + fieldFilter.value = null; fieldFilter.selectedField = $event; } " From 19fcacebc9969bdec3107bffcd2cc78a0bdad4bc Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 10:12:19 +0200 Subject: [PATCH 19/26] perf: VnSearchbar --- src/components/ui/VnSearchbar.vue | 1 + src/router/modules/itemType.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue index da8d43c95..344267ef7 100644 --- a/src/components/ui/VnSearchbar.vue +++ b/src/components/ui/VnSearchbar.vue @@ -108,6 +108,7 @@ async function search() { let targetUrl; if (path.endsWith('/list')) targetUrl = path.replace('/list', `/${targetId}/summary`); + if (path.endsWith('-list')) targetUrl = path.replace('-list', `/${targetId}/summary`); else if (path.includes(':id')) targetUrl = path.replace(':id', targetId); await router.push({ path: targetUrl }); diff --git a/src/router/modules/itemType.js b/src/router/modules/itemType.js index 32bd63690..3609b6688 100644 --- a/src/router/modules/itemType.js +++ b/src/router/modules/itemType.js @@ -1,7 +1,7 @@ import { RouterView } from 'vue-router'; export default { - path: '/item-type', + path: '/item/item-type', name: 'ItemType', meta: { title: 'itemType', From bdc5d7210f460909c6d3162732e49fe7ec6e28c8 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 10:12:37 +0200 Subject: [PATCH 20/26] fix: remove redirect --- src/pages/Item/ItemTypeList.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/Item/ItemTypeList.vue b/src/pages/Item/ItemTypeList.vue index 17d1c0044..e362c6726 100644 --- a/src/pages/Item/ItemTypeList.vue +++ b/src/pages/Item/ItemTypeList.vue @@ -37,7 +37,6 @@ const exprBuilder = (param, value) => ({ data-key="ItemTypeList" url="ItemTypes" :label="t('Search item type')" - :redirect="false" :info="t('Search itemType by id, name or code')" :expr-builder="exprBuilder" /> From 8c3d32ec8621a939f70cff216bfac81650cbfcd5 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 10:12:50 +0200 Subject: [PATCH 21/26] fix: remove VnFilterPanel inside Summary --- src/pages/Shelving/Card/ShelvingSummary.vue | 47 ++++----------------- 1 file changed, 8 insertions(+), 39 deletions(-) diff --git a/src/pages/Shelving/Card/ShelvingSummary.vue b/src/pages/Shelving/Card/ShelvingSummary.vue index 49470719e..649799b00 100644 --- a/src/pages/Shelving/Card/ShelvingSummary.vue +++ b/src/pages/Shelving/Card/ShelvingSummary.vue @@ -20,14 +20,14 @@ const router = useRouter(); const { t } = useI18n(); const entityId = computed(() => $props.id || route.params.id); -const isDialog = Boolean($props.id); -const hideRightDrawer = () => { - if (!isDialog) { - stateStore.rightDrawer = false; - } -}; -onMounted(hideRightDrawer); -onUnmounted(hideRightDrawer); +const isDialog = false; +// const hideRightDrawer = () => { +// if (!isDialog) { +// stateStore.rightDrawer = false; +// } +// }; +// onMounted(hideRightDrawer); +// onUnmounted(hideRightDrawer); const filter = { include: [ { @@ -46,23 +46,6 @@ const filter = { From 34c8874468fbb062117c5ee2ce1c7eaf0628cb3a Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 10:17:18 +0200 Subject: [PATCH 22/26] fix: i18n --- src/i18n/locale/es.yml | 2 +- src/pages/Item/ItemTypeList.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index 9bafd7067..fc96adbf8 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -1220,7 +1220,7 @@ item: achieved: 'Conseguido' concept: 'Concepto' state: 'Estado' -itemType: +item/itemType: pageTitles: itemType: Familia basicData: Datos básicos diff --git a/src/pages/Item/ItemTypeList.vue b/src/pages/Item/ItemTypeList.vue index e362c6726..c92385295 100644 --- a/src/pages/Item/ItemTypeList.vue +++ b/src/pages/Item/ItemTypeList.vue @@ -36,7 +36,7 @@ const exprBuilder = (param, value) => ({ From 2f55272df77a8a0fe949d2f8588eb635b36f469c Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 11:23:50 +0200 Subject: [PATCH 23/26] fix: WorkerDescriptor --- src/i18n/locale/en.yml | 14 +------- src/i18n/locale/es.yml | 17 ---------- src/pages/Item/ItemTypeCreate.vue | 8 ++--- src/pages/ItemType/Card/ItemTypeBasicData.vue | 18 +++++------ .../ItemType/Card/ItemTypeDescriptor.vue | 17 ++++++---- src/pages/ItemType/Card/ItemTypeSummary.vue | 32 +++++++++---------- src/pages/ItemType/locale/en.yml | 12 +++++++ src/pages/ItemType/locale/es.yml | 17 ++++++++++ 8 files changed, 69 insertions(+), 66 deletions(-) create mode 100644 src/pages/ItemType/locale/en.yml create mode 100644 src/pages/ItemType/locale/es.yml diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index 482c0dc7d..2b71195d1 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -1221,23 +1221,11 @@ item: minSalesQuantity: 'Cantidad mínima de venta' genus: 'Genus' specie: 'Specie' -itemType: +item/itemType: pageTitles: itemType: Item type basicData: Basic data summary: Summary - shared: - code: Code - name: Name - worker: Worker - category: Category - temperature: Temperature - summary: - id: id - life: Life - promo: Promo - itemPackingType: Item packing type - isUnconventionalSize: Is unconventional size components: topbar: {} itemsFilterPanel: diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index fc96adbf8..d1823b387 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -1225,23 +1225,6 @@ item/itemType: itemType: Familia basicData: Datos básicos summary: Resumen - shared: - code: Código - name: Nombre - worker: Trabajador - category: Reino - temperature: Temperatura - summary: - id: id - code: Código - name: Nombre - worker: Trabajador - category: Reino - temperature: Temperatura - life: Vida - promo: Promoción - itemPackingType: Tipo de embalaje - isUnconventionalSize: Es de tamaño poco convencional components: topbar: {} itemsFilterPanel: diff --git a/src/pages/Item/ItemTypeCreate.vue b/src/pages/Item/ItemTypeCreate.vue index 3540fc5af..af3dc34ea 100644 --- a/src/pages/Item/ItemTypeCreate.vue +++ b/src/pages/Item/ItemTypeCreate.vue @@ -4,7 +4,7 @@ import { useI18n } from 'vue-i18n'; import { useRouter } from 'vue-router'; import FetchData from 'components/FetchData.vue'; -import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; +import VnSelect from 'src/components/common/VnSelect.vue'; import FormModel from 'components/FormModel.vue'; import VnRow from 'components/ui/VnRow.vue'; import VnInput from 'src/components/common/VnInput.vue'; @@ -58,7 +58,7 @@ const redirectToItemTypeBasicData = (_, { id }) => { - { option-label="firstName" hide-selected /> - { /> - diff --git a/src/pages/ItemType/Card/ItemTypeSummary.vue b/src/pages/ItemType/Card/ItemTypeSummary.vue index 393675a30..62d1c74ab 100644 --- a/src/pages/ItemType/Card/ItemTypeSummary.vue +++ b/src/pages/ItemType/Card/ItemTypeSummary.vue @@ -2,6 +2,7 @@ import { ref, computed, onUpdated } from 'vue'; import { useRoute } from 'vue-router'; import { useI18n } from 'vue-i18n'; +import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue'; import CardSummary from 'components/ui/CardSummary.vue'; import VnLv from 'src/components/ui/VnLv.vue'; @@ -71,30 +72,29 @@ async function setItemTypeData(data) { {{ t('globals.summary.basicData') }} - - - + + + + + + + - - - - + + diff --git a/src/pages/ItemType/locale/en.yml b/src/pages/ItemType/locale/en.yml new file mode 100644 index 000000000..7889418ea --- /dev/null +++ b/src/pages/ItemType/locale/en.yml @@ -0,0 +1,12 @@ +shared: + code: Code + name: Name + worker: Worker + category: Category + temperature: Temperature +summary: + id: id + life: Life + promo: Promo + itemPackingType: Item packing type + isUnconventionalSize: Is unconventional size diff --git a/src/pages/ItemType/locale/es.yml b/src/pages/ItemType/locale/es.yml new file mode 100644 index 000000000..9a94dceb6 --- /dev/null +++ b/src/pages/ItemType/locale/es.yml @@ -0,0 +1,17 @@ +shared: + code: Código + name: Nombre + worker: Trabajador + category: Reino + temperature: Temperatura +summary: + id: id + code: Código + name: Nombre + worker: Trabajador + category: Reino + temperature: Temperatura + life: Vida + promo: Promoción + itemPackingType: Tipo de embalaje + isUnconventionalSize: Es de tamaño poco convencional From 7e2ec588c5e0eef9f435fb5f43e8db1cdedc89f9 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 11:24:20 +0200 Subject: [PATCH 24/26] fix: remove Warning --- src/components/ui/VnUserLink.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/ui/VnUserLink.vue b/src/components/ui/VnUserLink.vue index 47287c12b..33836550a 100644 --- a/src/components/ui/VnUserLink.vue +++ b/src/components/ui/VnUserLink.vue @@ -1,6 +1,5 @@ From 761bc7724f3eba14137f3e51fc979f5eea8eeb20 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 29 Apr 2024 11:46:40 +0200 Subject: [PATCH 26/26] fix: redirect --- src/router/modules/itemType.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/router/modules/itemType.js b/src/router/modules/itemType.js index 3609b6688..8064c41ff 100644 --- a/src/router/modules/itemType.js +++ b/src/router/modules/itemType.js @@ -9,7 +9,7 @@ export default { moduleName: 'ItemType', }, component: RouterView, - redirect: { name: 'ItemTypeCard' }, + redirect: { name: 'ItemTypeList' }, menus: { main: [], card: ['ItemTypeBasicData'],