Merge branch 'dev' into 7731-clientViesCode
This commit is contained in:
commit
9ecb734b1b
|
@ -29,5 +29,5 @@ yarn-error.log*
|
||||||
*.sln
|
*.sln
|
||||||
|
|
||||||
# Cypress directories and files
|
# Cypress directories and files
|
||||||
/tests/cypress/videos
|
/test/cypress/videos
|
||||||
/tests/cypress/screenshots
|
/test/cypress/screenshots
|
||||||
|
|
|
@ -41,7 +41,7 @@ const card = toRef(props, 'item');
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<span class="link">
|
<span class="link" @click.stop>
|
||||||
{{ card.name }}
|
{{ card.name }}
|
||||||
<ItemDescriptorProxy :id="card.id" />
|
<ItemDescriptorProxy :id="card.id" />
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -190,7 +190,10 @@ const getLocale = (label) => {
|
||||||
const globalLocale = `globals.params.${param}`;
|
const globalLocale = `globals.params.${param}`;
|
||||||
if (te(globalLocale)) return t(globalLocale);
|
if (te(globalLocale)) return t(globalLocale);
|
||||||
else if (te(t(`params.${param}`)));
|
else if (te(t(`params.${param}`)));
|
||||||
else return t(`${route.meta.moduleName.toLowerCase()}.params.${param}`);
|
else {
|
||||||
|
const camelCaseModuleName = route.meta.moduleName.charAt(0).toLowerCase() + route.meta.moduleName.slice(1);
|
||||||
|
return t(`${camelCaseModuleName}.params.${param}`);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -170,10 +170,9 @@ export function useArrayData(key, userOptions) {
|
||||||
|
|
||||||
async function addOrder(field, direction = 'ASC') {
|
async function addOrder(field, direction = 'ASC') {
|
||||||
const newOrder = field + ' ' + direction;
|
const newOrder = field + ' ' + direction;
|
||||||
let order = store.order || [];
|
const order = toArray(store.order);
|
||||||
if (typeof order == 'string') order = [order];
|
|
||||||
|
|
||||||
let index = order.findIndex((o) => o.split(' ')[0] === field);
|
let index = getOrderIndex(order, field);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
order[index] = newOrder;
|
order[index] = newOrder;
|
||||||
} else {
|
} else {
|
||||||
|
@ -190,16 +189,23 @@ export function useArrayData(key, userOptions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deleteOrder(field) {
|
async function deleteOrder(field) {
|
||||||
let order = store.order ?? [];
|
const order = toArray(store.order);
|
||||||
if (typeof order == 'string') order = [order];
|
const index = getOrderIndex(order, field);
|
||||||
|
|
||||||
const index = order.findIndex((o) => o.split(' ')[0] === field);
|
|
||||||
if (index > -1) order.splice(index, 1);
|
if (index > -1) order.splice(index, 1);
|
||||||
|
|
||||||
store.order = order;
|
store.order = order;
|
||||||
fetch({});
|
fetch({});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getOrderIndex(order, field) {
|
||||||
|
return order.findIndex((o) => o.split(' ')[0] === field);
|
||||||
|
}
|
||||||
|
|
||||||
|
function toArray(str = []) {
|
||||||
|
if (Array.isArray(str)) return str;
|
||||||
|
if (typeof str === 'string') return str.split(',').map((item) => item.trim());
|
||||||
|
}
|
||||||
|
|
||||||
function sanitizerParams(params, exprBuilder) {
|
function sanitizerParams(params, exprBuilder) {
|
||||||
for (const param in params) {
|
for (const param in params) {
|
||||||
if (params[param] === '' || params[param] === null) {
|
if (params[param] === '' || params[param] === null) {
|
||||||
|
@ -290,8 +296,7 @@ export function useArrayData(key, userOptions) {
|
||||||
|
|
||||||
Object.assign(params, store.userParams);
|
Object.assign(params, store.userParams);
|
||||||
if (params.filter) params.filter.skip = store.skip;
|
if (params.filter) params.filter.skip = store.skip;
|
||||||
if (store?.order && typeof store?.order == 'string') store.order = [store.order];
|
if (store.order) params.filter.order = toArray(store.order);
|
||||||
if (store.order?.length) params.filter.order = [...store.order];
|
|
||||||
else delete params.filter.order;
|
else delete params.filter.order;
|
||||||
|
|
||||||
return { filter, params, limit: filter.limit };
|
return { filter, params, limit: filter.limit };
|
||||||
|
|
|
@ -312,11 +312,11 @@ input::-webkit-inner-spin-button {
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-item > .q-item__section:has(.q-checkbox) {
|
.q-item > .q-item__section:has(.q-checkbox) {
|
||||||
max-width: min-content;
|
max-width: fit-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row > .column:has(.q-checkbox) {
|
.row > .column:has(.q-checkbox) {
|
||||||
max-width: min-content;
|
max-width: fit-content;
|
||||||
}
|
}
|
||||||
.q-field__inner {
|
.q-field__inner {
|
||||||
.q-field__control {
|
.q-field__control {
|
||||||
|
|
|
@ -5,6 +5,7 @@ globals:
|
||||||
quantity: Quantity
|
quantity: Quantity
|
||||||
language: Language
|
language: Language
|
||||||
entity: Entity
|
entity: Entity
|
||||||
|
preview: Preview
|
||||||
user: User
|
user: User
|
||||||
details: Details
|
details: Details
|
||||||
collapseMenu: Collapse lateral menu
|
collapseMenu: Collapse lateral menu
|
||||||
|
@ -727,62 +728,6 @@ travel:
|
||||||
destination: Destination
|
destination: Destination
|
||||||
thermograph: Thermograph
|
thermograph: Thermograph
|
||||||
travelFileDescription: 'Travel id { travelId }'
|
travelFileDescription: 'Travel id { travelId }'
|
||||||
item:
|
|
||||||
descriptor:
|
|
||||||
buyer: Buyer
|
|
||||||
color: Color
|
|
||||||
category: Category
|
|
||||||
available: Available
|
|
||||||
warehouseText: 'Calculated on the warehouse of { warehouseName }'
|
|
||||||
itemDiary: Item diary
|
|
||||||
list:
|
|
||||||
id: Identifier
|
|
||||||
stems: Stems
|
|
||||||
category: Category
|
|
||||||
typeName: Type
|
|
||||||
isActive: Active
|
|
||||||
userName: Buyer
|
|
||||||
weightByPiece: Weight/Piece
|
|
||||||
stemMultiplier: Multiplier
|
|
||||||
fixedPrice:
|
|
||||||
itemFk: Item ID
|
|
||||||
groupingPrice: Grouping price
|
|
||||||
packingPrice: Packing price
|
|
||||||
hasMinPrice: Has min price
|
|
||||||
minPrice: Min price
|
|
||||||
started: Started
|
|
||||||
ended: Ended
|
|
||||||
create:
|
|
||||||
priority: Priority
|
|
||||||
buyRequest:
|
|
||||||
requester: Requester
|
|
||||||
requested: Requested
|
|
||||||
attender: Atender
|
|
||||||
achieved: Achieved
|
|
||||||
concept: Concept
|
|
||||||
summary:
|
|
||||||
otherData: Other data
|
|
||||||
tax: Tax
|
|
||||||
botanical: Botanical
|
|
||||||
barcode: Barcode
|
|
||||||
completeName: Complete name
|
|
||||||
family: Familiy
|
|
||||||
stems: Stems
|
|
||||||
multiplier: Multiplier
|
|
||||||
buyer: Buyer
|
|
||||||
doPhoto: Do photo
|
|
||||||
intrastatCode: Intrastat code
|
|
||||||
ref: Reference
|
|
||||||
relevance: Relevance
|
|
||||||
weight: Weight (gram)/stem
|
|
||||||
units: Units/box
|
|
||||||
expense: Expense
|
|
||||||
generic: Generic
|
|
||||||
recycledPlastic: Recycled plastic
|
|
||||||
nonRecycledPlastic: Non recycled plastic
|
|
||||||
minSalesQuantity: Min sales quantity
|
|
||||||
genus: Genus
|
|
||||||
specie: Specie
|
|
||||||
components:
|
components:
|
||||||
topbar: {}
|
topbar: {}
|
||||||
itemsFilterPanel:
|
itemsFilterPanel:
|
||||||
|
|
|
@ -5,6 +5,7 @@ globals:
|
||||||
language: Idioma
|
language: Idioma
|
||||||
quantity: Cantidad
|
quantity: Cantidad
|
||||||
entity: Entidad
|
entity: Entidad
|
||||||
|
preview: Vista previa
|
||||||
user: Usuario
|
user: Usuario
|
||||||
details: Detalles
|
details: Detalles
|
||||||
collapseMenu: Contraer menú lateral
|
collapseMenu: Contraer menú lateral
|
||||||
|
@ -723,62 +724,6 @@ travel:
|
||||||
destination: Destino
|
destination: Destino
|
||||||
thermograph: Termógrafo
|
thermograph: Termógrafo
|
||||||
travelFileDescription: 'Id envío { travelId }'
|
travelFileDescription: 'Id envío { travelId }'
|
||||||
item:
|
|
||||||
descriptor:
|
|
||||||
buyer: Comprador
|
|
||||||
color: Color
|
|
||||||
category: Categoría
|
|
||||||
available: Disponible
|
|
||||||
warehouseText: 'Calculado sobre el almacén de { warehouseName }'
|
|
||||||
itemDiary: Registro de compra-venta
|
|
||||||
list:
|
|
||||||
id: Identificador
|
|
||||||
stems: Tallos
|
|
||||||
category: Reino
|
|
||||||
typeName: Tipo
|
|
||||||
isActive: Activo
|
|
||||||
weightByPiece: Peso (gramos)/tallo
|
|
||||||
userName: Comprador
|
|
||||||
stemMultiplier: Multiplicador
|
|
||||||
fixedPrice:
|
|
||||||
itemFk: ID Artículo
|
|
||||||
groupingPrice: Precio grouping
|
|
||||||
packingPrice: Precio packing
|
|
||||||
hasMinPrice: Tiene precio mínimo
|
|
||||||
minPrice: Precio min
|
|
||||||
started: Inicio
|
|
||||||
ended: Fin
|
|
||||||
create:
|
|
||||||
priority: Prioridad
|
|
||||||
summary:
|
|
||||||
otherData: Otros datos
|
|
||||||
tax: IVA
|
|
||||||
botanical: Botánico
|
|
||||||
barcode: Código de barras
|
|
||||||
completeName: Nombre completo
|
|
||||||
family: Familia
|
|
||||||
stems: Tallos
|
|
||||||
multiplier: Multiplicador
|
|
||||||
buyer: Comprador
|
|
||||||
doPhoto: Hacer foto
|
|
||||||
intrastatCode: Código intrastat
|
|
||||||
ref: Referencia
|
|
||||||
relevance: Relevancia
|
|
||||||
weight: Peso (gramos)/tallo
|
|
||||||
units: Unidades/caja
|
|
||||||
expense: Gasto
|
|
||||||
generic: Genérico
|
|
||||||
recycledPlastic: Plástico reciclado
|
|
||||||
nonRecycledPlastic: Plástico no reciclado
|
|
||||||
minSalesQuantity: Cantidad mínima de venta
|
|
||||||
genus: Genus
|
|
||||||
specie: Specie
|
|
||||||
buyRequest:
|
|
||||||
requester: Solicitante
|
|
||||||
requested: Solicitado
|
|
||||||
attender: Comprador
|
|
||||||
achieved: Conseguido
|
|
||||||
concept: Concepto
|
|
||||||
components:
|
components:
|
||||||
topbar: {}
|
topbar: {}
|
||||||
itemsFilterPanel:
|
itemsFilterPanel:
|
||||||
|
|
|
@ -152,7 +152,8 @@ const updateDateParams = (value, params) => {
|
||||||
v-if="campaignList"
|
v-if="campaignList"
|
||||||
data-key="CustomerConsumption"
|
data-key="CustomerConsumption"
|
||||||
url="Clients/consumption"
|
url="Clients/consumption"
|
||||||
:order="['itemTypeFk', 'itemName', 'itemSize', 'description']"
|
:order="['itemTypeFk', 'itemName', 'itemSize', 'description']"
|
||||||
|
:filter="{ where: { clientFk: route.params.id } }"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
search-url="consumption"
|
search-url="consumption"
|
||||||
:user-params="userParams"
|
:user-params="userParams"
|
||||||
|
|
|
@ -187,14 +187,18 @@ const debtWarning = computed(() => {
|
||||||
</QBtn>
|
</QBtn>
|
||||||
<QBtn
|
<QBtn
|
||||||
:to="{
|
:to="{
|
||||||
name: 'AccountSummary',
|
name: 'OrderList',
|
||||||
params: { id: entity.id },
|
query: {
|
||||||
|
createForm: JSON.stringify({
|
||||||
|
clientFk: entity.id,
|
||||||
|
}),
|
||||||
|
},
|
||||||
}"
|
}"
|
||||||
size="md"
|
size="md"
|
||||||
icon="face"
|
icon="vn:basketadd"
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
<QTooltip>{{ t('Go to user') }}</QTooltip>
|
<QTooltip>{{ t('globals.pageTitles.createOrder') }}</QTooltip>
|
||||||
</QBtn>
|
</QBtn>
|
||||||
<QBtn
|
<QBtn
|
||||||
v-if="entity.supplier"
|
v-if="entity.supplier"
|
||||||
|
@ -218,14 +222,9 @@ en:
|
||||||
unpaidDated: 'Date {dated}'
|
unpaidDated: 'Date {dated}'
|
||||||
unpaidAmount: 'Amount {amount}'
|
unpaidAmount: 'Amount {amount}'
|
||||||
es:
|
es:
|
||||||
Go to module index: Ir al índice del módulo
|
|
||||||
Customer ticket list: Listado de tickets del cliente
|
Customer ticket list: Listado de tickets del cliente
|
||||||
Customer invoice out list: Listado de facturas del cliente
|
Customer invoice out list: Listado de facturas del cliente
|
||||||
New order: Nuevo pedido
|
|
||||||
New ticket: Nuevo ticket
|
|
||||||
Go to user: Ir al usuario
|
|
||||||
Go to supplier: Ir al proveedor
|
Go to supplier: Ir al proveedor
|
||||||
Customer unpaid: Cliente impago
|
|
||||||
Unpaid: Impagado
|
Unpaid: Impagado
|
||||||
unpaidDated: 'Fecha {dated}'
|
unpaidDated: 'Fecha {dated}'
|
||||||
unpaidAmount: 'Importe {amount}'
|
unpaidAmount: 'Importe {amount}'
|
||||||
|
|
|
@ -51,7 +51,6 @@ const openCreateForm = (type) => {
|
||||||
};
|
};
|
||||||
const clientFk = {
|
const clientFk = {
|
||||||
ticket: 'clientId',
|
ticket: 'clientId',
|
||||||
order: 'clientFk',
|
|
||||||
};
|
};
|
||||||
const key = clientFk[type];
|
const key = clientFk[type];
|
||||||
if (!key) return;
|
if (!key) return;
|
||||||
|
@ -70,11 +69,6 @@ const openCreateForm = (type) => {
|
||||||
{{ t('globals.pageTitles.createTicket') }}
|
{{ t('globals.pageTitles.createTicket') }}
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
<QItem v-ripple clickable @click="openCreateForm('order')">
|
|
||||||
<QItemSection>
|
|
||||||
{{ t('globals.pageTitles.createOrder') }}
|
|
||||||
</QItemSection>
|
|
||||||
</QItem>
|
|
||||||
<QItem v-ripple clickable>
|
<QItem v-ripple clickable>
|
||||||
<QItemSection @click="showSmsDialog()">{{ t('Send SMS') }}</QItemSection>
|
<QItemSection @click="showSmsDialog()">{{ t('Send SMS') }}</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
|
|
|
@ -408,7 +408,7 @@ function handleLocation(data, location) {
|
||||||
order: ['id DESC'],
|
order: ['id DESC'],
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #rightMenu>
|
<template #advanced-menu>
|
||||||
<CustomerFilter data-key="CustomerList" />
|
<CustomerFilter data-key="CustomerList" />
|
||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
|
|
|
@ -214,7 +214,7 @@ const toCustomerSamples = () => {
|
||||||
<template #custom-buttons>
|
<template #custom-buttons>
|
||||||
<QBtn
|
<QBtn
|
||||||
:disabled="isLoading || !sampleType?.hasPreview"
|
:disabled="isLoading || !sampleType?.hasPreview"
|
||||||
:label="t('Preview')"
|
:label="t('globals.preview')"
|
||||||
:loading="isLoading"
|
:loading="isLoading"
|
||||||
@click.stop="getPreview()"
|
@click.stop="getPreview()"
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -353,7 +353,6 @@ es:
|
||||||
Its only used when sample is sent: Se utiliza únicamente cuando se envía la plantilla
|
Its only used when sample is sent: Se utiliza únicamente cuando se envía la plantilla
|
||||||
To who should the recipient replay?: ¿A quien debería responder el destinatario?
|
To who should the recipient replay?: ¿A quien debería responder el destinatario?
|
||||||
Edit address: Editar dirección
|
Edit address: Editar dirección
|
||||||
Preview: Vista previa
|
|
||||||
Email cannot be blank: Debes introducir un email
|
Email cannot be blank: Debes introducir un email
|
||||||
Choose a sample: Selecciona una plantilla
|
Choose a sample: Selecciona una plantilla
|
||||||
Choose a company: Selecciona una empresa
|
Choose a company: Selecciona una empresa
|
||||||
|
|
|
@ -147,7 +147,7 @@ es:
|
||||||
Supplier card: Ficha del proveedor
|
Supplier card: Ficha del proveedor
|
||||||
All travels with current agency: Todos los envíos con la agencia actual
|
All travels with current agency: Todos los envíos con la agencia actual
|
||||||
All entries with current supplier: Todas las entradas con el proveedor actual
|
All entries with current supplier: Todas las entradas con el proveedor actual
|
||||||
Go to module index: Ir al índice del modulo
|
Show entry report: Ver informe del pedido
|
||||||
Inventory entry: Es inventario
|
Inventory entry: Es inventario
|
||||||
Virtual entry: Es una redada
|
Virtual entry: Es una redada
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -205,7 +205,7 @@ const columns = computed(() => [
|
||||||
userFilter: entryFilter,
|
userFilter: entryFilter,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #rightMenu>
|
<template #advanced-menu>
|
||||||
<EntryFilter data-key="EntryList" />
|
<EntryFilter data-key="EntryList" />
|
||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
|
@ -231,7 +231,7 @@ const columns = computed(() => [
|
||||||
>
|
>
|
||||||
<QTooltip>{{
|
<QTooltip>{{
|
||||||
t(
|
t(
|
||||||
'entry.list.tableVisibleColumns.isExcludedFromAvailable'
|
'entry.list.tableVisibleColumns.isExcludedFromAvailable',
|
||||||
)
|
)
|
||||||
}}</QTooltip>
|
}}</QTooltip>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
|
|
|
@ -1,19 +1,11 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import VnCard from 'components/common/VnCard.vue';
|
import VnCardBeta from 'components/common/VnCardBeta.vue';
|
||||||
import ItemDescriptor from './ItemDescriptor.vue';
|
import ItemDescriptor from './ItemDescriptor.vue';
|
||||||
import ItemListFilter from '../ItemListFilter.vue';
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<VnCard
|
<VnCardBeta
|
||||||
data-key="Item"
|
data-key="Item"
|
||||||
base-url="Items"
|
base-url="Items"
|
||||||
:descriptor="ItemDescriptor"
|
:descriptor="ItemDescriptor"
|
||||||
:filter-panel="ItemListFilter"
|
|
||||||
search-data-key="ItemList"
|
|
||||||
:searchbar-props="{
|
|
||||||
url: 'Items/filter',
|
|
||||||
label: 'searchbar.label',
|
|
||||||
info: 'searchbar.info',
|
|
||||||
}"
|
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -6,18 +6,17 @@ import VnImg from 'src/components/ui/VnImg.vue';
|
||||||
import VnTable from 'components/VnTable/VnTable.vue';
|
import VnTable from 'components/VnTable/VnTable.vue';
|
||||||
import { toDate } from 'src/filters';
|
import { toDate } from 'src/filters';
|
||||||
import FetchedTags from 'src/components/ui/FetchedTags.vue';
|
import FetchedTags from 'src/components/ui/FetchedTags.vue';
|
||||||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
|
||||||
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
||||||
import ItemSummary from '../Item/Card/ItemSummary.vue';
|
import ItemSummary from '../Item/Card/ItemSummary.vue';
|
||||||
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||||
import ItemDescriptorProxy from './Card/ItemDescriptorProxy.vue';
|
import ItemDescriptorProxy from './Card/ItemDescriptorProxy.vue';
|
||||||
import ItemTypeDescriptorProxy from './ItemType/Card/ItemTypeDescriptorProxy.vue';
|
import ItemTypeDescriptorProxy from './ItemType/Card/ItemTypeDescriptorProxy.vue';
|
||||||
import { cloneItem } from 'src/pages/Item/composables/cloneItem';
|
import { cloneItem } from 'src/pages/Item/composables/cloneItem';
|
||||||
import RightMenu from 'src/components/common/RightMenu.vue';
|
|
||||||
import ItemListFilter from './ItemListFilter.vue';
|
import ItemListFilter from './ItemListFilter.vue';
|
||||||
import VnInput from 'src/components/common/VnInput.vue';
|
import VnInput from 'src/components/common/VnInput.vue';
|
||||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
import VnSection from 'src/components/common/VnSection.vue';
|
||||||
|
|
||||||
const entityId = computed(() => route.params.id);
|
const entityId = computed(() => route.params.id);
|
||||||
const { openCloneDialog } = cloneItem();
|
const { openCloneDialog } = cloneItem();
|
||||||
|
@ -25,9 +24,11 @@ const { viewSummary } = useSummaryDialog();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const tableRef = ref();
|
const tableRef = ref();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
const dataKey = 'ItemList';
|
||||||
const validPriorities = ref([]);
|
const validPriorities = ref([]);
|
||||||
const defaultTag = ref();
|
const defaultTag = ref();
|
||||||
const defaultPriority = ref();
|
const defaultPriority = ref();
|
||||||
|
|
||||||
const itemFilter = {
|
const itemFilter = {
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
|
@ -324,166 +325,174 @@ onBeforeMount(async () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<VnSearchbar
|
<VnSection
|
||||||
data-key="ItemList"
|
:data-key="dataKey"
|
||||||
:label="t('item.searchbar.label')"
|
:columns="columns"
|
||||||
:info="t('item.searchbar.info')"
|
prefix="item"
|
||||||
/>
|
:array-data-props="{
|
||||||
<RightMenu>
|
url: 'Items/filter',
|
||||||
<template #right-panel>
|
order: ['isActive DESC', 'name', 'id'],
|
||||||
|
userFilter: itemFilter,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #advanced-menu>
|
||||||
<ItemListFilter data-key="ItemList" />
|
<ItemListFilter data-key="ItemList" />
|
||||||
</template>
|
</template>
|
||||||
</RightMenu>
|
<template #body>
|
||||||
<VnTable
|
<VnTable
|
||||||
v-if="defaultTag"
|
v-if="defaultTag"
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
data-key="ItemList"
|
:data-key="dataKey"
|
||||||
url="Items/filter"
|
:columns="columns"
|
||||||
:create="{
|
:right-search="false"
|
||||||
urlCreate: 'Items/new',
|
redirect="Item"
|
||||||
title: t('item.list.newItem'),
|
:create="{
|
||||||
onDataSaved: ({ id }) => tableRef.redirect(`${id}/basic-data`),
|
urlCreate: 'Items/new',
|
||||||
formInitialData: {
|
title: t('item.list.newItem'),
|
||||||
editorFk: entityId,
|
onDataSaved: ({ id }) => tableRef.redirect(`${id}/basic-data`),
|
||||||
tag: defaultTag,
|
formInitialData: {
|
||||||
priority: defaultPriority,
|
editorFk: entityId,
|
||||||
},
|
tag: defaultTag,
|
||||||
}"
|
priority: defaultPriority,
|
||||||
:order="['isActive DESC', 'name', 'id']"
|
},
|
||||||
:columns="columns"
|
}"
|
||||||
redirect="Item"
|
:is-editable="false"
|
||||||
:is-editable="false"
|
|
||||||
:right-search="false"
|
|
||||||
:filter="itemFilter"
|
|
||||||
>
|
|
||||||
<template #column-image="{ row }">
|
|
||||||
<VnImg
|
|
||||||
:id="row?.id"
|
|
||||||
zoom-resolution="1600x900"
|
|
||||||
:zoom="true"
|
|
||||||
class="rounded"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
<template #column-id="{ row }">
|
|
||||||
<span class="link" @click.stop>
|
|
||||||
{{ row.id }}
|
|
||||||
<ItemDescriptorProxy :id="row.id" />
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<template #column-typeName="{ row }">
|
|
||||||
<span class="link" @click.stop>
|
|
||||||
{{ row.typeName }}
|
|
||||||
{{ row.typeFk }}
|
|
||||||
<ItemTypeDescriptorProxy :id="row.typeFk" />
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<template #column-userName="{ row }">
|
|
||||||
<span class="link" @click.stop>
|
|
||||||
{{ row.userName }}
|
|
||||||
<WorkerDescriptorProxy :id="row.buyerFk" />
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<template #column-description="{ row }">
|
|
||||||
<div class="row column full-width justify-between items-start">
|
|
||||||
{{ row?.name }}
|
|
||||||
<div v-if="row?.subName" class="subName">
|
|
||||||
{{ row?.subName.toUpperCase() }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<FetchedTags :item="row" />
|
|
||||||
</template>
|
|
||||||
<template #more-create-dialog="{ data }">
|
|
||||||
<VnInput
|
|
||||||
v-model="data.provisionalName"
|
|
||||||
:label="t('globals.description')"
|
|
||||||
:is-required="true"
|
|
||||||
/>
|
|
||||||
<VnSelect
|
|
||||||
url="Tags"
|
|
||||||
v-model="data.tag"
|
|
||||||
:label="t('globals.tag')"
|
|
||||||
:fields="['id', 'name']"
|
|
||||||
option-label="name"
|
|
||||||
option-value="id"
|
|
||||||
:is-required="true"
|
|
||||||
:sort-by="['name ASC']"
|
|
||||||
>
|
>
|
||||||
<template #option="scope">
|
<template #column-image="{ row }">
|
||||||
<QItem v-bind="scope.itemProps">
|
<VnImg
|
||||||
<QItemSection>
|
:id="row?.id"
|
||||||
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
|
zoom-resolution="1600x900"
|
||||||
<QItemLabel caption> #{{ scope.opt?.id }} </QItemLabel>
|
:zoom="true"
|
||||||
</QItemSection>
|
class="rounded"
|
||||||
</QItem>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</VnSelect>
|
<template #column-id="{ row }">
|
||||||
<VnSelect
|
<span class="link" @click.stop>
|
||||||
:options="validPriorities"
|
{{ row.id }}
|
||||||
v-model="data.priority"
|
<ItemDescriptorProxy :id="row.id" />
|
||||||
:label="t('item.create.priority')"
|
</span>
|
||||||
:is-required="true"
|
|
||||||
/>
|
|
||||||
<VnSelect
|
|
||||||
url="ItemTypes"
|
|
||||||
v-model="data.typeFk"
|
|
||||||
:label="t('item.list.typeName')"
|
|
||||||
:fields="['id', 'code', 'name']"
|
|
||||||
option-label="name"
|
|
||||||
option-value="id"
|
|
||||||
:is-required="true"
|
|
||||||
>
|
|
||||||
<template #option="scope">
|
|
||||||
<QItem v-bind="scope.itemProps">
|
|
||||||
<QItemSection>
|
|
||||||
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
|
|
||||||
<QItemLabel caption>
|
|
||||||
{{ scope.opt?.code }} #{{ scope.opt?.id }}
|
|
||||||
</QItemLabel>
|
|
||||||
</QItemSection>
|
|
||||||
</QItem>
|
|
||||||
</template>
|
</template>
|
||||||
</VnSelect>
|
<template #column-typeName="{ row }">
|
||||||
<VnSelect
|
<span class="link" @click.stop>
|
||||||
url="Intrastats"
|
{{ row.typeName }}
|
||||||
v-model="data.intrastatFk"
|
{{ row.typeFk }}
|
||||||
:label="t('globals.intrastat')"
|
<ItemTypeDescriptorProxy :id="row.typeFk" />
|
||||||
:fields="['id', 'description']"
|
</span>
|
||||||
option-label="description"
|
|
||||||
option-value="id"
|
|
||||||
:is-required="true"
|
|
||||||
>
|
|
||||||
<template #option="scope">
|
|
||||||
<QItem v-bind="scope.itemProps">
|
|
||||||
<QItemSection>
|
|
||||||
<QItemLabel>{{ scope.opt?.description }}</QItemLabel>
|
|
||||||
<QItemLabel caption> #{{ scope.opt?.id }} </QItemLabel>
|
|
||||||
</QItemSection>
|
|
||||||
</QItem>
|
|
||||||
</template>
|
</template>
|
||||||
</VnSelect>
|
<template #column-userName="{ row }">
|
||||||
<VnSelect
|
<span class="link" @click.stop>
|
||||||
url="Origins"
|
{{ row.userName }}
|
||||||
v-model="data.originFk"
|
<WorkerDescriptorProxy :id="row.buyerFk" />
|
||||||
:label="t('globals.origin')"
|
</span>
|
||||||
:fields="['id', 'code', 'name']"
|
|
||||||
option-label="code"
|
|
||||||
option-value="id"
|
|
||||||
:is-required="true"
|
|
||||||
>
|
|
||||||
<template #option="scope">
|
|
||||||
<QItem v-bind="scope.itemProps">
|
|
||||||
<QItemSection>
|
|
||||||
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
|
|
||||||
<QItemLabel caption>
|
|
||||||
{{ scope.opt?.code }} #{{ scope.opt?.id }}
|
|
||||||
</QItemLabel>
|
|
||||||
</QItemSection>
|
|
||||||
</QItem>
|
|
||||||
</template>
|
</template>
|
||||||
</VnSelect>
|
<template #column-description="{ row }">
|
||||||
|
<div class="row column full-width justify-between items-start">
|
||||||
|
{{ row?.name }}
|
||||||
|
<div v-if="row?.subName" class="subName">
|
||||||
|
{{ row?.subName.toUpperCase() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<FetchedTags :item="row" :columns="3" />
|
||||||
|
</template>
|
||||||
|
<template #more-create-dialog="{ data }">
|
||||||
|
<VnInput
|
||||||
|
v-model="data.provisionalName"
|
||||||
|
:label="t('globals.description')"
|
||||||
|
:is-required="true"
|
||||||
|
/>
|
||||||
|
<VnSelect
|
||||||
|
url="Tags"
|
||||||
|
v-model="data.tag"
|
||||||
|
:label="t('globals.tag')"
|
||||||
|
:fields="['id', 'name']"
|
||||||
|
option-label="name"
|
||||||
|
option-value="id"
|
||||||
|
:is-required="true"
|
||||||
|
:sort-by="['name ASC']"
|
||||||
|
>
|
||||||
|
<template #option="scope">
|
||||||
|
<QItem v-bind="scope.itemProps">
|
||||||
|
<QItemSection>
|
||||||
|
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
|
||||||
|
<QItemLabel caption>
|
||||||
|
#{{ scope.opt?.id }}
|
||||||
|
</QItemLabel>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
</template>
|
||||||
|
</VnSelect>
|
||||||
|
<VnSelect
|
||||||
|
:options="validPriorities"
|
||||||
|
v-model="data.priority"
|
||||||
|
:label="t('item.create.priority')"
|
||||||
|
:is-required="true"
|
||||||
|
/>
|
||||||
|
<VnSelect
|
||||||
|
url="ItemTypes"
|
||||||
|
v-model="data.typeFk"
|
||||||
|
:label="t('item.list.typeName')"
|
||||||
|
:fields="['id', 'code', 'name']"
|
||||||
|
option-label="name"
|
||||||
|
option-value="id"
|
||||||
|
:is-required="true"
|
||||||
|
>
|
||||||
|
<template #option="scope">
|
||||||
|
<QItem v-bind="scope.itemProps">
|
||||||
|
<QItemSection>
|
||||||
|
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
|
||||||
|
<QItemLabel caption>
|
||||||
|
{{ scope.opt?.code }} #{{ scope.opt?.id }}
|
||||||
|
</QItemLabel>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
</template>
|
||||||
|
</VnSelect>
|
||||||
|
<VnSelect
|
||||||
|
url="Intrastats"
|
||||||
|
v-model="data.intrastatFk"
|
||||||
|
:label="t('globals.intrastat')"
|
||||||
|
:fields="['id', 'description']"
|
||||||
|
option-label="description"
|
||||||
|
option-value="id"
|
||||||
|
:is-required="true"
|
||||||
|
>
|
||||||
|
<template #option="scope">
|
||||||
|
<QItem v-bind="scope.itemProps">
|
||||||
|
<QItemSection>
|
||||||
|
<QItemLabel>{{ scope.opt?.description }}</QItemLabel>
|
||||||
|
<QItemLabel caption>
|
||||||
|
#{{ scope.opt?.id }}
|
||||||
|
</QItemLabel>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
</template>
|
||||||
|
</VnSelect>
|
||||||
|
<VnSelect
|
||||||
|
url="Origins"
|
||||||
|
v-model="data.originFk"
|
||||||
|
:label="t('globals.origin')"
|
||||||
|
:fields="['id', 'code', 'name']"
|
||||||
|
option-label="code"
|
||||||
|
option-value="id"
|
||||||
|
:is-required="true"
|
||||||
|
>
|
||||||
|
<template #option="scope">
|
||||||
|
<QItem v-bind="scope.itemProps">
|
||||||
|
<QItemSection>
|
||||||
|
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
|
||||||
|
<QItemLabel caption>
|
||||||
|
{{ scope.opt?.code }} #{{ scope.opt?.id }}
|
||||||
|
</QItemLabel>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
</template>
|
||||||
|
</VnSelect>
|
||||||
|
</template>
|
||||||
|
</VnTable>
|
||||||
</template>
|
</template>
|
||||||
</VnTable>
|
</VnSection>
|
||||||
</template>
|
</template>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.subName {
|
.subName {
|
||||||
|
@ -497,5 +506,4 @@ es:
|
||||||
New item: Nuevo artículo
|
New item: Nuevo artículo
|
||||||
Create Item: Crear artículo
|
Create Item: Crear artículo
|
||||||
You can search by id: Puedes buscar por id
|
You can search by id: Puedes buscar por id
|
||||||
Preview: Vista previa
|
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref, onMounted } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { onMounted } from 'vue';
|
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
|
|
||||||
import FetchData from 'components/FetchData.vue';
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
@ -233,7 +232,7 @@ onMounted(async () => {
|
||||||
<QItemSection>
|
<QItemSection>
|
||||||
<VnSelect
|
<VnSelect
|
||||||
:label="t('params.buyerFk')"
|
:label="t('params.buyerFk')"
|
||||||
v-model="params.buyerFk"
|
v-model="params.workerFk"
|
||||||
@update:model-value="searchFn()"
|
@update:model-value="searchFn()"
|
||||||
:options="buyersOptions"
|
:options="buyersOptions"
|
||||||
option-value="id"
|
option-value="id"
|
||||||
|
@ -266,10 +265,10 @@ onMounted(async () => {
|
||||||
<QItem v-bind="scope.itemProps">
|
<QItem v-bind="scope.itemProps">
|
||||||
<QItemSection>
|
<QItemSection>
|
||||||
<QItemLabel>
|
<QItemLabel>
|
||||||
{{ scope.opt?.name}}
|
{{ scope.opt?.name }}
|
||||||
</QItemLabel>
|
</QItemLabel>
|
||||||
<QItemLabel caption>
|
<QItemLabel caption>
|
||||||
{{ `#${scope.opt?.id } , ${ scope.opt?.nickname}` }}
|
{{ `#${scope.opt?.id} , ${scope.opt?.nickname}` }}
|
||||||
</QItemLabel>
|
</QItemLabel>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
|
@ -369,7 +368,7 @@ onMounted(async () => {
|
||||||
:model-value="fieldFilter.selectedField"
|
:model-value="fieldFilter.selectedField"
|
||||||
:options="moreFields"
|
:options="moreFields"
|
||||||
option-label="label"
|
option-label="label"
|
||||||
option-value="label"
|
option-value="label"
|
||||||
dense
|
dense
|
||||||
outlined
|
outlined
|
||||||
rounded
|
rounded
|
||||||
|
|
|
@ -1,20 +1,12 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import VnCard from 'components/common/VnCard.vue';
|
import VnCardBeta from 'components/common/VnCardBeta.vue';
|
||||||
import ItemTypeDescriptor from 'src/pages/Item/ItemType/Card/ItemTypeDescriptor.vue';
|
import ItemTypeDescriptor from 'src/pages/Item/ItemType/Card/ItemTypeDescriptor.vue';
|
||||||
import ItemTypeFilter from 'src/pages/Item/ItemType/ItemTypeFilter.vue';
|
|
||||||
import ItemTypeSearchbar from '../ItemTypeSearchbar.vue';
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<VnCard
|
<VnCardBeta
|
||||||
data-key="ItemTypeSummary"
|
data-key="ItemTypeSummary"
|
||||||
base-url="ItemTypes"
|
base-url="ItemTypes"
|
||||||
:descriptor="ItemTypeDescriptor"
|
:descriptor="ItemTypeDescriptor"
|
||||||
:filter-panel="ItemTypeFilter"
|
/>
|
||||||
search-data-key="ItemTypeList"
|
|
||||||
search-url="ItemTypes"
|
|
||||||
>
|
|
||||||
<template #searchbar>
|
|
||||||
<ItemTypeSearchbar />
|
|
||||||
</template>
|
|
||||||
</VnCard>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -63,7 +63,3 @@ const setData = (entity) => (data.value = useCardDescription(entity.code, entity
|
||||||
</CardDescriptor>
|
</CardDescriptor>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
|
||||||
es:
|
|
||||||
Go to module index: Ir al índice del módulo
|
|
||||||
</i18n>
|
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
<script setup>
|
|
||||||
import { useI18n } from 'vue-i18n';
|
|
||||||
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
|
|
||||||
import VnInput from 'src/components/common/VnInput.vue';
|
|
||||||
const { t } = useI18n();
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
dataKey: {
|
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const emit = defineEmits(['search']);
|
|
||||||
const exprBuilder = (param, value) => {
|
|
||||||
switch (param) {
|
|
||||||
case 'name':
|
|
||||||
return {
|
|
||||||
name: { like: `%${value}%` },
|
|
||||||
};
|
|
||||||
case 'code':
|
|
||||||
return {
|
|
||||||
code: { like: `%${value}%` },
|
|
||||||
};
|
|
||||||
case 'search':
|
|
||||||
if (value) {
|
|
||||||
if (!isNaN(value)) {
|
|
||||||
return { id: value };
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
or: [
|
|
||||||
{
|
|
||||||
name: {
|
|
||||||
like: `%${value}%`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
code: {
|
|
||||||
like: `%${value}%`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<VnFilterPanel
|
|
||||||
:data-key="props.dataKey"
|
|
||||||
:search-button="true"
|
|
||||||
@search="emit('search')"
|
|
||||||
search-url="table"
|
|
||||||
:expr-builder="exprBuilder"
|
|
||||||
>
|
|
||||||
<template #tags="{ tag, formatFn }">
|
|
||||||
<div class="q-gutter-x-xs">
|
|
||||||
<strong>{{ t(`params.${tag.label}`) }}: </strong>
|
|
||||||
<span>{{ formatFn(tag.value) }}</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #body="{ params }">
|
|
||||||
<QItem>
|
|
||||||
<QItemSection>
|
|
||||||
<VnInput :label="t('Name')" v-model="params.name" is-outlined />
|
|
||||||
</QItemSection>
|
|
||||||
</QItem>
|
|
||||||
<QItem>
|
|
||||||
<QItemSection>
|
|
||||||
<VnInput v-model="params.code" :label="t('Code')" is-outlined />
|
|
||||||
</QItemSection>
|
|
||||||
</QItem>
|
|
||||||
</template>
|
|
||||||
</VnFilterPanel>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<i18n>
|
|
||||||
en:
|
|
||||||
params:
|
|
||||||
name: Name
|
|
||||||
code: Code
|
|
||||||
es:
|
|
||||||
params:
|
|
||||||
name: Nombre
|
|
||||||
code: Código
|
|
||||||
Name: Nombre
|
|
||||||
Code: Código
|
|
||||||
</i18n>
|
|
|
@ -1,19 +0,0 @@
|
||||||
<script setup>
|
|
||||||
import VnSearchbar from 'components/ui/VnSearchbar.vue';
|
|
||||||
import { useI18n } from 'vue-i18n';
|
|
||||||
const { t } = useI18n();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<VnSearchbar
|
|
||||||
data-key="ItemTypeList"
|
|
||||||
url="ItemTypes"
|
|
||||||
:label="t('Search item type')"
|
|
||||||
:info="t('Search itemType by id, name or code')"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
<i18n>
|
|
||||||
es:
|
|
||||||
Search item type: Buscar familia
|
|
||||||
Search itemType by id, name or code: Buscar familia por id, nombre o código
|
|
||||||
</i18n>
|
|
|
@ -15,3 +15,5 @@ itemType:
|
||||||
promo: Promo
|
promo: Promo
|
||||||
itemPackingType: Item packing type
|
itemPackingType: Item packing type
|
||||||
isUnconventionalSize: Is unconventional size
|
isUnconventionalSize: Is unconventional size
|
||||||
|
search: Search item type
|
||||||
|
searchInfo: Search item type by id, name or code
|
||||||
|
|
|
@ -15,3 +15,5 @@ itemType:
|
||||||
promo: Promoción
|
promo: Promoción
|
||||||
itemPackingType: Tipo de embalaje
|
itemPackingType: Tipo de embalaje
|
||||||
isUnconventionalSize: Es de tamaño poco convencional
|
isUnconventionalSize: Es de tamaño poco convencional
|
||||||
|
search: Buscar familia
|
||||||
|
searchInfo: Buscar familia por id, nombre o código
|
||||||
|
|
|
@ -1,17 +1,50 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import ItemTypeSearchbar from 'src/pages/Item/ItemType/ItemTypeSearchbar.vue';
|
|
||||||
import VnTable from 'components/VnTable/VnTable.vue';
|
import VnTable from 'components/VnTable/VnTable.vue';
|
||||||
import FetchData from 'components/FetchData.vue';
|
import FetchData from 'components/FetchData.vue';
|
||||||
import RightMenu from 'src/components/common/RightMenu.vue';
|
|
||||||
import ItemTypeFilter from './ItemType/ItemTypeFilter.vue';
|
|
||||||
import WorkerDescriptorProxy from '../Worker/Card/WorkerDescriptorProxy.vue';
|
import WorkerDescriptorProxy from '../Worker/Card/WorkerDescriptorProxy.vue';
|
||||||
|
import VnSection from 'src/components/common/VnSection.vue';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const tableRef = ref();
|
const tableRef = ref();
|
||||||
const itemCategoriesOptions = ref([]);
|
const itemCategoriesOptions = ref([]);
|
||||||
const temperatureOptions = ref([]);
|
const temperatureOptions = ref([]);
|
||||||
|
const dataKey = 'ItemTypeList';
|
||||||
|
|
||||||
|
const exprBuilder = (param, value) => {
|
||||||
|
switch (param) {
|
||||||
|
case 'name':
|
||||||
|
return {
|
||||||
|
name: { like: `%${value}%` },
|
||||||
|
};
|
||||||
|
case 'code':
|
||||||
|
return {
|
||||||
|
code: { like: `%${value}%` },
|
||||||
|
};
|
||||||
|
case 'search':
|
||||||
|
if (value) {
|
||||||
|
if (!isNaN(value)) {
|
||||||
|
return { id: value };
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
or: [
|
||||||
|
{
|
||||||
|
name: {
|
||||||
|
like: `%${value}%`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: {
|
||||||
|
like: `%${value}%`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const columns = computed(() => [
|
const columns = computed(() => [
|
||||||
{
|
{
|
||||||
|
@ -103,49 +136,53 @@ const columns = computed(() => [
|
||||||
@on-fetch="(data) => (temperatureOptions = data)"
|
@on-fetch="(data) => (temperatureOptions = data)"
|
||||||
auto-load
|
auto-load
|
||||||
/>
|
/>
|
||||||
<RightMenu>
|
<VnSection
|
||||||
<template #right-panel>
|
:data-key="dataKey"
|
||||||
<ItemTypeFilter data-key="ItemTypeList" />
|
:columns="columns"
|
||||||
</template>
|
prefix="itemType"
|
||||||
</RightMenu>
|
:array-data-props="{
|
||||||
<ItemTypeSearchbar />
|
url: 'ItemTypes',
|
||||||
<VnTable
|
order: 'name ASC',
|
||||||
ref="tableRef"
|
exprBuilder,
|
||||||
data-key="ItemTypeList"
|
userFilter: {
|
||||||
url="ItemTypes"
|
include: {
|
||||||
:create="{
|
relation: 'worker',
|
||||||
urlCreate: 'ItemTypes',
|
scope: {
|
||||||
title: t('Create ItemTypes'),
|
fields: ['id'],
|
||||||
onDataSaved: () => tableRef.reload(),
|
include: {
|
||||||
formInitialData: {},
|
relation: 'user',
|
||||||
}"
|
scope: {
|
||||||
:user-filter="{
|
fields: ['id', 'name'],
|
||||||
include: {
|
},
|
||||||
relation: 'worker',
|
|
||||||
scope: {
|
|
||||||
fields: ['id'],
|
|
||||||
include: {
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['id', 'name'],
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}"
|
}"
|
||||||
order="name ASC"
|
|
||||||
:columns="columns"
|
|
||||||
auto-load
|
|
||||||
:right-search="false"
|
|
||||||
redirect="item/item-type"
|
|
||||||
>
|
>
|
||||||
<template #column-workerFk="{ row }">
|
<template #body>
|
||||||
<span class="link" @click.stop>
|
<VnTable
|
||||||
{{ row.worker?.user?.name }}
|
ref="tableRef"
|
||||||
<WorkerDescriptorProxy :id="row.workerFk" />
|
:data-key="dataKey"
|
||||||
</span>
|
:create="{
|
||||||
|
urlCreate: 'ItemTypes',
|
||||||
|
title: t('Create ItemTypes'),
|
||||||
|
onDataSaved: () => tableRef.reload(),
|
||||||
|
formInitialData: {},
|
||||||
|
}"
|
||||||
|
:columns="columns"
|
||||||
|
auto-load
|
||||||
|
redirect="item/item-type"
|
||||||
|
>
|
||||||
|
<template #column-workerFk="{ row }">
|
||||||
|
<span class="link" @click.stop>
|
||||||
|
{{ row.worker?.user?.name }}
|
||||||
|
<WorkerDescriptorProxy :id="row.workerFk" />
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</VnTable>
|
||||||
</template>
|
</template>
|
||||||
</VnTable>
|
</VnSection>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
|
|
|
@ -180,44 +180,46 @@ item:
|
||||||
intrastat: Intrastat
|
intrastat: Intrastat
|
||||||
origin: Origin
|
origin: Origin
|
||||||
buyRequest:
|
buyRequest:
|
||||||
ticketId: 'Ticket ID'
|
ticketId: Ticket ID
|
||||||
shipped: 'Shipped'
|
shipped: Shipped
|
||||||
requester: 'Requester'
|
requester: Requester
|
||||||
requested: 'Requested'
|
requested: Requested
|
||||||
price: 'Price'
|
price: Price
|
||||||
attender: 'Attender'
|
attender: Attender
|
||||||
item: 'Item'
|
item: Item
|
||||||
achieved: 'Achieved'
|
achieved: Achieved
|
||||||
concept: 'Concept'
|
concept: Concept
|
||||||
state: 'State'
|
state: State
|
||||||
summary:
|
summary:
|
||||||
basicData: 'Basic data'
|
basicData: Basic data
|
||||||
otherData: 'Other data'
|
otherData: Other data
|
||||||
description: 'Description'
|
description: Description
|
||||||
tax: 'Tax'
|
tax: Tax
|
||||||
tags: 'Tags'
|
tags: Tags
|
||||||
botanical: 'Botanical'
|
botanical: Botanical
|
||||||
barcode: 'Barcode'
|
barcode: Barcode
|
||||||
name: 'Nombre'
|
name: Name
|
||||||
completeName: 'Nombre completo'
|
completeName: Complete name
|
||||||
family: 'Familia'
|
family: Family
|
||||||
size: 'Medida'
|
size: Size
|
||||||
origin: 'Origen'
|
origin: Origin
|
||||||
stems: 'Tallos'
|
stems: Stems
|
||||||
multiplier: 'Multiplicador'
|
multiplier: Multiplier
|
||||||
buyer: 'Comprador'
|
buyer: Buyer
|
||||||
doPhoto: 'Do photo'
|
doPhoto: Do photo
|
||||||
intrastatCode: 'Código intrastat'
|
intrastatCode: Intrastat code
|
||||||
intrastat: 'Intrastat'
|
intrastat: 'Intrastat'
|
||||||
ref: 'Referencia'
|
ref: Reference
|
||||||
relevance: 'Relevancia'
|
relevance: Relevance
|
||||||
weight: 'Peso (gramos)/tallo'
|
weight: Weight (gram)/stem
|
||||||
units: 'Unidades/caja'
|
units: Units/box
|
||||||
expense: 'Gasto'
|
expense: Expense
|
||||||
generic: 'Genérico'
|
generic: Generic
|
||||||
recycledPlastic: 'Plástico reciclado'
|
recycledPlastic: Recycled plastic
|
||||||
nonRecycledPlastic: 'Plástico no reciclado'
|
nonRecycledPlastic: Non recycled plastic
|
||||||
minSalesQuantity: 'Cantidad mínima de venta'
|
minSalesQuantity: Min sales quantity
|
||||||
genus: 'Genus'
|
genus: Genus
|
||||||
specie: 'Specie'
|
specie: Specie
|
||||||
regularizeStock: Regularize stock
|
search: 'Search item'
|
||||||
|
searchInfo: 'You can search by id'
|
||||||
|
regularizeStock: Regularize stock
|
|
@ -73,9 +73,6 @@ itemTags:
|
||||||
addTag: Añadir etiqueta
|
addTag: Añadir etiqueta
|
||||||
tag: Etiqueta
|
tag: Etiqueta
|
||||||
value: Valor
|
value: Valor
|
||||||
searchbar:
|
|
||||||
label: Buscar artículo
|
|
||||||
info: Buscar por id de artículo
|
|
||||||
itemType:
|
itemType:
|
||||||
shared:
|
shared:
|
||||||
code: Código
|
code: Código
|
||||||
|
@ -108,9 +105,6 @@ item:
|
||||||
concept: Concepto
|
concept: Concepto
|
||||||
denyOptions: Denegado
|
denyOptions: Denegado
|
||||||
scopeDays: Días en adelante
|
scopeDays: Días en adelante
|
||||||
searchbar:
|
|
||||||
label: Buscar artículo
|
|
||||||
info: Puedes buscar por id
|
|
||||||
descriptor:
|
descriptor:
|
||||||
item: Artículo
|
item: Artículo
|
||||||
buyer: Comprador
|
buyer: Comprador
|
||||||
|
@ -182,35 +176,35 @@ item:
|
||||||
intrastat: Intrastat
|
intrastat: Intrastat
|
||||||
origin: Origen
|
origin: Origen
|
||||||
summary:
|
summary:
|
||||||
basicData: 'Datos básicos'
|
basicData: Datos básicos
|
||||||
otherData: 'Otros datos'
|
otherData: Otros datos
|
||||||
description: 'Descripción'
|
description: Descripción
|
||||||
tax: 'IVA'
|
tax: IVA
|
||||||
tags: 'Etiquetas'
|
tags: Etiquetas
|
||||||
botanical: 'Botánico'
|
botanical: Botánico
|
||||||
barcode: 'Código de barras'
|
barcode: Código de barras
|
||||||
name: 'Nombre'
|
name: Nombre
|
||||||
completeName: 'Nombre completo'
|
completeName: Nombre completo
|
||||||
family: 'Familia'
|
family: Familia
|
||||||
size: 'Medida'
|
size: Medida
|
||||||
origin: 'Origen'
|
origin: Origen
|
||||||
stems: 'Tallos'
|
stems: Tallos
|
||||||
multiplier: 'Multiplicador'
|
multiplier: Multiplicador
|
||||||
buyer: 'Comprador'
|
buyer: Comprador
|
||||||
doPhoto: 'Hacer foto'
|
doPhoto: Hacer foto
|
||||||
intrastatCode: 'Código intrastat'
|
intrastatCode: Código intrastat
|
||||||
intrastat: 'Intrastat'
|
intrastat: Intrastat
|
||||||
ref: 'Referencia'
|
ref: Referencia
|
||||||
relevance: 'Relevancia'
|
relevance: Relevancia
|
||||||
weight: 'Peso (gramos)/tallo'
|
weight: Peso (gramos)/tallo
|
||||||
units: 'Unidades/caja'
|
units: Unidades/caja
|
||||||
expense: 'Gasto'
|
expense: Gasto
|
||||||
generic: 'Genérico'
|
generic: Genérico
|
||||||
recycledPlastic: 'Plástico reciclado'
|
recycledPlastic: Plástico reciclado
|
||||||
nonRecycledPlastic: 'Plástico no reciclado'
|
nonRecycledPlastic: Plástico no reciclado
|
||||||
minSalesQuantity: 'Cantidad mínima de venta'
|
minSalesQuantity: Cantidad mínima de venta
|
||||||
genus: 'Genus'
|
genus: Genus
|
||||||
specie: 'Specie'
|
specie: Specie
|
||||||
regularizeStock: Regularizar stock
|
regularizeStock: Regularizar stock
|
||||||
buyRequest:
|
buyRequest:
|
||||||
ticketId: 'ID Ticket'
|
ticketId: 'ID Ticket'
|
||||||
|
@ -222,4 +216,6 @@ item:
|
||||||
item: 'Artículo'
|
item: 'Artículo'
|
||||||
achieved: 'Conseguido'
|
achieved: 'Conseguido'
|
||||||
concept: 'Concepto'
|
concept: 'Concepto'
|
||||||
state: 'Estado'
|
state: 'Estado'
|
||||||
|
search: 'Buscar artículo'
|
||||||
|
searchInfo: 'Puedes buscar por id'
|
|
@ -290,7 +290,7 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t('salesTicketsTable.preview'),
|
title: t('globals.preview'),
|
||||||
icon: 'preview',
|
icon: 'preview',
|
||||||
color: 'primary',
|
color: 'primary',
|
||||||
action: (row) => viewSummary(row.id, TicketSummary),
|
action: (row) => viewSummary(row.id, TicketSummary),
|
||||||
|
|
|
@ -33,7 +33,6 @@ salesTicketsTable:
|
||||||
isFragile: Is fragile
|
isFragile: Is fragile
|
||||||
zone: Zone
|
zone: Zone
|
||||||
goToLines: Go to lines
|
goToLines: Go to lines
|
||||||
preview: Preview
|
|
||||||
total: Total
|
total: Total
|
||||||
preparation: H.Prep
|
preparation: H.Prep
|
||||||
payMethod: Pay method
|
payMethod: Pay method
|
||||||
|
|
|
@ -115,6 +115,7 @@ const removeTagGroupParam = (params, search, valIndex) => {
|
||||||
} else {
|
} else {
|
||||||
params.tagGroups.splice(valIndex, 1);
|
params.tagGroups.splice(valIndex, 1);
|
||||||
}
|
}
|
||||||
|
search();
|
||||||
};
|
};
|
||||||
|
|
||||||
const setCategoryList = (data) => {
|
const setCategoryList = (data) => {
|
||||||
|
|
|
@ -142,7 +142,7 @@ const total = computed(() => {
|
||||||
const openDmsUploadDialog = async () => {
|
const openDmsUploadDialog = async () => {
|
||||||
dmsDialog.value.rowsToCreateInvoiceIn = selectedRows.value
|
dmsDialog.value.rowsToCreateInvoiceIn = selectedRows.value
|
||||||
.filter(
|
.filter(
|
||||||
(agencyTerm) => agencyTerm.supplierFk === selectedRows.value?.[0].supplierFk
|
(agencyTerm) => agencyTerm.supplierFk === selectedRows.value?.[0].supplierFk,
|
||||||
)
|
)
|
||||||
.map((agencyTerm) => ({
|
.map((agencyTerm) => ({
|
||||||
routeFk: agencyTerm.routeFk,
|
routeFk: agencyTerm.routeFk,
|
||||||
|
@ -277,5 +277,4 @@ es:
|
||||||
Price: Precio
|
Price: Precio
|
||||||
Received: Recibida
|
Received: Recibida
|
||||||
Autonomous: Autónomos
|
Autonomous: Autónomos
|
||||||
Preview: Vista previa
|
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -112,7 +112,7 @@ const removeSelection = async () => {
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
selectedRows.value.map((roadmap) => {
|
selectedRows.value.map((roadmap) => {
|
||||||
axios.delete(`Roadmaps/${roadmap.id}`);
|
axios.delete(`Roadmaps/${roadmap.id}`);
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -236,6 +236,5 @@ es:
|
||||||
Plate: Matrícula
|
Plate: Matrícula
|
||||||
Price: Precio
|
Price: Precio
|
||||||
Observations: Observaciones
|
Observations: Observaciones
|
||||||
Preview: Vista previa
|
|
||||||
Select the estimated date of departure (ETD): Selecciona la fecha estimada de salida
|
Select the estimated date of departure (ETD): Selecciona la fecha estimada de salida
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -33,7 +33,6 @@ route:
|
||||||
Mark as served: Mark as served
|
Mark as served: Mark as served
|
||||||
Download selected routes as PDF: Download selected routes as PDF
|
Download selected routes as PDF: Download selected routes as PDF
|
||||||
Add ticket: Add ticket
|
Add ticket: Add ticket
|
||||||
Preview: Preview
|
|
||||||
Summary: Summary
|
Summary: Summary
|
||||||
Route is closed: Route is closed
|
Route is closed: Route is closed
|
||||||
Route is not served: Route is not served
|
Route is not served: Route is not served
|
||||||
|
|
|
@ -33,7 +33,7 @@ route:
|
||||||
Mark as served: Marcar como servidas
|
Mark as served: Marcar como servidas
|
||||||
Download selected routes as PDF: Descargar rutas seleccionadas como PDF
|
Download selected routes as PDF: Descargar rutas seleccionadas como PDF
|
||||||
Add ticket: Añadir tickets
|
Add ticket: Añadir tickets
|
||||||
Preview: Vista previa
|
preview: Vista previa
|
||||||
Summary: Resumen
|
Summary: Resumen
|
||||||
Route is closed: La ruta está cerrada
|
Route is closed: La ruta está cerrada
|
||||||
Route is not served: La ruta no está servida
|
Route is not served: La ruta no está servida
|
||||||
|
|
|
@ -188,7 +188,6 @@ const getEntryQueryParams = (supplier) => {
|
||||||
es:
|
es:
|
||||||
All entries with current supplier: Todas las entradas con proveedor actual
|
All entries with current supplier: Todas las entradas con proveedor actual
|
||||||
Go to client: Ir a cliente
|
Go to client: Ir a cliente
|
||||||
Go to module index: Ir al índice del módulo
|
|
||||||
Inactive supplier: Proveedor inactivo
|
Inactive supplier: Proveedor inactivo
|
||||||
Unverified supplier: Proveedor no verificado
|
Unverified supplier: Proveedor no verificado
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -239,7 +239,6 @@ function ticketFilter(ticket) {
|
||||||
<i18n>
|
<i18n>
|
||||||
es:
|
es:
|
||||||
This ticket is deleted: Este ticket está eliminado
|
This ticket is deleted: Este ticket está eliminado
|
||||||
Go to module index: Ir al índice del modulo
|
|
||||||
Client inactive: Cliente inactivo
|
Client inactive: Cliente inactivo
|
||||||
Client not checked: Cliente no verificado
|
Client not checked: Cliente no verificado
|
||||||
Client has debt: Cliente con deuda
|
Client has debt: Cliente con deuda
|
||||||
|
|
|
@ -14,6 +14,9 @@ const filter = {
|
||||||
'warehouseOutFk',
|
'warehouseOutFk',
|
||||||
'cargoSupplierFk',
|
'cargoSupplierFk',
|
||||||
'agencyModeFk',
|
'agencyModeFk',
|
||||||
|
'isRaid',
|
||||||
|
'isDelivered',
|
||||||
|
'isReceived',
|
||||||
],
|
],
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -85,7 +85,6 @@ const setData = (entity) => (data.value = useCardDescription(entity.ref, entity.
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
es:
|
es:
|
||||||
Go to module index: Ir al índice del módulo
|
|
||||||
The travel will be deleted: El envío será eliminado
|
The travel will be deleted: El envío será eliminado
|
||||||
Do you want to delete this travel?: ¿Quieres eliminar este envío?
|
Do you want to delete this travel?: ¿Quieres eliminar este envío?
|
||||||
All travels with current agency: Todos los envíos con la agencia actual
|
All travels with current agency: Todos los envíos con la agencia actual
|
||||||
|
|
|
@ -11,7 +11,7 @@ const { t } = useI18n();
|
||||||
const counters = ref({
|
const counters = ref({
|
||||||
alquilerBandeja: { count: 0, id: 96001, title: 'CC Bandeja', isTray: true },
|
alquilerBandeja: { count: 0, id: 96001, title: 'CC Bandeja', isTray: true },
|
||||||
bandejaRota: { count: 0, id: 88381, title: 'CC Bandeja Rota', isTray: true },
|
bandejaRota: { count: 0, id: 88381, title: 'CC Bandeja Rota', isTray: true },
|
||||||
carryOficial: { count: 0, id: 96000, title: 'CC Carry OFICIAL TAG5' },
|
carryOficial: { count: 0, id: 96000, title: 'CC Carry OFICIAL TAG6' },
|
||||||
candadoRojo: { count: 0, id: 96002, title: 'CC Carry NO OFICIAL' },
|
candadoRojo: { count: 0, id: 96002, title: 'CC Carry NO OFICIAL' },
|
||||||
sacadores: { count: 0, id: 142260, title: 'CC Sacadores' },
|
sacadores: { count: 0, id: 142260, title: 'CC Sacadores' },
|
||||||
sinChapa: { count: 0, id: 2214, title: 'DC Carry Sin Placa CC' },
|
sinChapa: { count: 0, id: 2214, title: 'DC Carry Sin Placa CC' },
|
||||||
|
|
|
@ -10,6 +10,7 @@ import axios from 'axios';
|
||||||
import VnImg from 'src/components/ui/VnImg.vue';
|
import VnImg from 'src/components/ui/VnImg.vue';
|
||||||
import EditPictureForm from 'components/EditPictureForm.vue';
|
import EditPictureForm from 'components/EditPictureForm.vue';
|
||||||
import WorkerDescriptorMenu from './WorkerDescriptorMenu.vue';
|
import WorkerDescriptorMenu from './WorkerDescriptorMenu.vue';
|
||||||
|
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
@ -115,10 +116,13 @@ const handlePhotoUpdated = (evt = false) => {
|
||||||
:value="entity.user?.emailUser?.email"
|
:value="entity.user?.emailUser?.email"
|
||||||
copy
|
copy
|
||||||
/>
|
/>
|
||||||
<VnLv
|
<VnLv :label="t('worker.list.department')">
|
||||||
:label="t('worker.list.department')"
|
<template #value>
|
||||||
:value="entity.department ? entity.department.department.name : null"
|
<span class="link" v-text="entity.department?.department?.name" />
|
||||||
/>
|
<DepartmentDescriptorProxy :id="entity.department?.department?.id" />
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
|
|
||||||
<VnLv :value="entity.phone">
|
<VnLv :value="entity.phone">
|
||||||
<template #label>
|
<template #label>
|
||||||
{{ t('globals.phone') }}
|
{{ t('globals.phone') }}
|
||||||
|
|
|
@ -66,7 +66,3 @@ const setData = (entity) => {
|
||||||
</CardDescriptor>
|
</CardDescriptor>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
|
||||||
es:
|
|
||||||
Go to module index: Ir al índice del módulo
|
|
||||||
</i18n>
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ const redirectToZoneSummary = (id) => {
|
||||||
color="primary"
|
color="primary"
|
||||||
@click.stop="viewSummary(props.row.id, ZoneSummary)"
|
@click.stop="viewSummary(props.row.id, ZoneSummary)"
|
||||||
>
|
>
|
||||||
<QTooltip>{{ t('zoneClosingTable.preview') }}</QTooltip>
|
<QTooltip>{{ t('globals.preview') }}</QTooltip>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
</div>
|
</div>
|
||||||
</QTd>
|
</QTd>
|
||||||
|
|
|
@ -50,8 +50,7 @@ deliveryPanel:
|
||||||
postcode: Postcode
|
postcode: Postcode
|
||||||
query: Query
|
query: Query
|
||||||
noEventsWarning: No service for the specified zone
|
noEventsWarning: No service for the specified zone
|
||||||
zoneClosingTable:
|
|
||||||
preview: Preview
|
|
||||||
warehouses:
|
warehouses:
|
||||||
deleteTitle: This item will be deleted
|
deleteTitle: This item will be deleted
|
||||||
deleteSubtitle: Are you sure you want to continue?
|
deleteSubtitle: Are you sure you want to continue?
|
||||||
|
|
|
@ -15,7 +15,6 @@ import Entry from './entry';
|
||||||
import roadmap from './roadmap';
|
import roadmap from './roadmap';
|
||||||
import Parking from './parking';
|
import Parking from './parking';
|
||||||
import Agency from './agency';
|
import Agency from './agency';
|
||||||
import ItemType from './itemType';
|
|
||||||
import Zone from './zone';
|
import Zone from './zone';
|
||||||
import Account from './account';
|
import Account from './account';
|
||||||
import Monitor from './monitor';
|
import Monitor from './monitor';
|
||||||
|
@ -38,7 +37,6 @@ export default [
|
||||||
roadmap,
|
roadmap,
|
||||||
Parking,
|
Parking,
|
||||||
Agency,
|
Agency,
|
||||||
ItemType,
|
|
||||||
Zone,
|
Zone,
|
||||||
Account,
|
Account,
|
||||||
Monitor,
|
Monitor,
|
||||||
|
|
|
@ -1,52 +1,197 @@
|
||||||
import { RouterView } from 'vue-router';
|
import { RouterView } from 'vue-router';
|
||||||
|
|
||||||
|
const itemCard = {
|
||||||
|
name: 'ItemCard',
|
||||||
|
path: ':id',
|
||||||
|
component: () => import('src/pages/Item/Card/ItemCard.vue'),
|
||||||
|
redirect: { name: 'ItemSummary' },
|
||||||
|
meta: {
|
||||||
|
menu: [
|
||||||
|
'ItemBasicData',
|
||||||
|
'ItemTags',
|
||||||
|
'ItemLastEntries',
|
||||||
|
'ItemTax',
|
||||||
|
'ItemBotanical',
|
||||||
|
'ItemShelving',
|
||||||
|
'ItemBarcode',
|
||||||
|
'ItemDiary',
|
||||||
|
'ItemLog',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: 'ItemSummary',
|
||||||
|
path: 'summary',
|
||||||
|
meta: {
|
||||||
|
title: 'summary',
|
||||||
|
icon: 'launch',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemSummary.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'basic-data',
|
||||||
|
name: 'ItemBasicData',
|
||||||
|
meta: {
|
||||||
|
title: 'basicData',
|
||||||
|
icon: 'vn:settings',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemBasicData.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'tags',
|
||||||
|
name: 'ItemTags',
|
||||||
|
meta: {
|
||||||
|
title: 'tags',
|
||||||
|
icon: 'vn:tags',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemTags.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'last-entries',
|
||||||
|
name: 'ItemLastEntries',
|
||||||
|
meta: {
|
||||||
|
title: 'lastEntries',
|
||||||
|
icon: 'vn:regentry',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemLastEntries.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'tax',
|
||||||
|
name: 'ItemTax',
|
||||||
|
meta: {
|
||||||
|
title: 'tax',
|
||||||
|
icon: 'vn:tax',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemTax.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'botanical',
|
||||||
|
name: 'ItemBotanical',
|
||||||
|
meta: {
|
||||||
|
title: 'botanical',
|
||||||
|
icon: 'vn:botanical',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemBotanical.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'shelving',
|
||||||
|
name: 'ItemShelving',
|
||||||
|
meta: {
|
||||||
|
title: 'shelving',
|
||||||
|
icon: 'vn:inventory',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemShelving.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'barcode',
|
||||||
|
name: 'ItemBarcode',
|
||||||
|
meta: {
|
||||||
|
title: 'barcode',
|
||||||
|
icon: 'vn:barcode',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemBarcode.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'diary',
|
||||||
|
name: 'ItemDiary',
|
||||||
|
meta: {
|
||||||
|
title: 'diary',
|
||||||
|
icon: 'vn:transaction',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemDiary.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'log',
|
||||||
|
name: 'ItemLog',
|
||||||
|
meta: {
|
||||||
|
title: 'log',
|
||||||
|
icon: 'vn:History',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/Card/ItemLog.vue'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const itemTypeCard = {
|
||||||
|
name: 'ItemTypeCard',
|
||||||
|
path: ':id',
|
||||||
|
component: () => import('src/pages/Item/ItemType/Card/ItemTypeCard.vue'),
|
||||||
|
redirect: { name: 'ItemTypeSummary' },
|
||||||
|
meta: {
|
||||||
|
menu: ['ItemTypeBasicData', 'ItemTypeLog'],
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'summary',
|
||||||
|
name: 'ItemTypeSummary',
|
||||||
|
meta: {
|
||||||
|
title: 'summary',
|
||||||
|
icon: 'launch',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/ItemType/Card/ItemTypeSummary.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'basic-data',
|
||||||
|
name: 'ItemTypeBasicData',
|
||||||
|
meta: {
|
||||||
|
title: 'basicData',
|
||||||
|
icon: 'vn:settings',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/ItemType/Card/ItemTypeBasicData.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'log',
|
||||||
|
name: 'ItemTypeLog',
|
||||||
|
meta: {
|
||||||
|
title: 'log',
|
||||||
|
icon: 'vn:History',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Item/ItemType/Card/ItemTypeLog.vue'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
path: '/item',
|
|
||||||
name: 'Item',
|
name: 'Item',
|
||||||
|
path: '/item',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'items',
|
title: 'items',
|
||||||
icon: 'vn:item',
|
icon: 'vn:item',
|
||||||
moduleName: 'Item',
|
moduleName: 'Item',
|
||||||
keyBinding: 'a',
|
keyBinding: 'a',
|
||||||
},
|
menu: [
|
||||||
component: RouterView,
|
|
||||||
redirect: { name: 'ItemMain' },
|
|
||||||
menus: {
|
|
||||||
main: [
|
|
||||||
'ItemList',
|
'ItemList',
|
||||||
'WasteBreakdown',
|
'WasteBreakdown',
|
||||||
'ItemFixedPrice',
|
'ItemFixedPrice',
|
||||||
'ItemRequest',
|
'ItemRequest',
|
||||||
'ItemTypeList',
|
'ItemTypeList',
|
||||||
],
|
],
|
||||||
card: [
|
|
||||||
'ItemBasicData',
|
|
||||||
'ItemLog',
|
|
||||||
'ItemDiary',
|
|
||||||
'ItemTags',
|
|
||||||
'ItemTax',
|
|
||||||
'ItemBotanical',
|
|
||||||
'ItemBarcode',
|
|
||||||
'ItemShelving',
|
|
||||||
'ItemLastEntries',
|
|
||||||
'ItemTags',
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
|
component: RouterView,
|
||||||
|
redirect: { name: 'ItemMain' },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '',
|
|
||||||
name: 'ItemMain',
|
name: 'ItemMain',
|
||||||
|
path: '',
|
||||||
component: () => import('src/components/common/VnModule.vue'),
|
component: () => import('src/components/common/VnModule.vue'),
|
||||||
redirect: { name: 'ItemList' },
|
redirect: { name: 'ItemIndexMain' },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'list',
|
path: '',
|
||||||
name: 'ItemList',
|
name: 'ItemIndexMain',
|
||||||
meta: {
|
redirect: { name: 'ItemList' },
|
||||||
title: 'list',
|
|
||||||
icon: 'view_list',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/ItemList.vue'),
|
component: () => import('src/pages/Item/ItemList.vue'),
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: 'ItemList',
|
||||||
|
path: 'list',
|
||||||
|
meta: {
|
||||||
|
title: 'list',
|
||||||
|
icon: 'view_list',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
itemCard,
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'request',
|
path: 'request',
|
||||||
|
@ -80,120 +225,21 @@ export default {
|
||||||
component: () => import('src/pages/Item/ItemFixedPrice.vue'),
|
component: () => import('src/pages/Item/ItemFixedPrice.vue'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'create',
|
path: 'item-type',
|
||||||
name: 'ItemCreate',
|
name: 'ItemTypeMain',
|
||||||
meta: {
|
redirect: { name: 'ItemTypeList' },
|
||||||
title: 'itemCreate',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/ItemCreate.vue'),
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
path: 'item-type-list',
|
|
||||||
name: 'ItemTypeList',
|
|
||||||
meta: {
|
|
||||||
title: 'family',
|
|
||||||
icon: 'contact_support',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/ItemTypeList.vue'),
|
component: () => import('src/pages/Item/ItemTypeList.vue'),
|
||||||
},
|
children: [
|
||||||
],
|
{
|
||||||
},
|
name: 'ItemTypeList',
|
||||||
{
|
path: 'list',
|
||||||
name: 'ItemCard',
|
meta: {
|
||||||
path: ':id',
|
title: 'family',
|
||||||
component: () => import('src/pages/Item/Card/ItemCard.vue'),
|
icon: 'contact_support',
|
||||||
redirect: { name: 'ItemSummary' },
|
},
|
||||||
children: [
|
},
|
||||||
{
|
itemTypeCard,
|
||||||
name: 'ItemSummary',
|
],
|
||||||
path: 'summary',
|
|
||||||
meta: {
|
|
||||||
title: 'summary',
|
|
||||||
icon: 'launch',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemSummary.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'basic-data',
|
|
||||||
name: 'ItemBasicData',
|
|
||||||
meta: {
|
|
||||||
title: 'basicData',
|
|
||||||
icon: 'vn:settings',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemBasicData.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'tags',
|
|
||||||
name: 'ItemTags',
|
|
||||||
meta: {
|
|
||||||
title: 'tags',
|
|
||||||
icon: 'vn:tags',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemTags.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'last-entries',
|
|
||||||
name: 'ItemLastEntries',
|
|
||||||
meta: {
|
|
||||||
title: 'lastEntries',
|
|
||||||
icon: 'vn:regentry',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemLastEntries.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'tax',
|
|
||||||
name: 'ItemTax',
|
|
||||||
meta: {
|
|
||||||
title: 'tax',
|
|
||||||
icon: 'vn:tax',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemTax.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'botanical',
|
|
||||||
name: 'ItemBotanical',
|
|
||||||
meta: {
|
|
||||||
title: 'botanical',
|
|
||||||
icon: 'local_florist',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemBotanical.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'shelving',
|
|
||||||
name: 'ItemShelving',
|
|
||||||
meta: {
|
|
||||||
title: 'shelving',
|
|
||||||
icon: 'vn:inventory',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemShelving.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'barcode',
|
|
||||||
name: 'ItemBarcode',
|
|
||||||
meta: {
|
|
||||||
title: 'barcode',
|
|
||||||
icon: 'vn:barcode',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemBarcode.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'diary',
|
|
||||||
name: 'ItemDiary',
|
|
||||||
meta: {
|
|
||||||
title: 'diary',
|
|
||||||
icon: 'vn:transaction',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemDiary.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'log',
|
|
||||||
name: 'ItemLog',
|
|
||||||
meta: {
|
|
||||||
title: 'log',
|
|
||||||
icon: 'vn:History',
|
|
||||||
},
|
|
||||||
component: () => import('src/pages/Item/Card/ItemLog.vue'),
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
import { RouterView } from 'vue-router';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
path: '/item/item-type',
|
|
||||||
name: 'ItemType',
|
|
||||||
meta: {
|
|
||||||
title: 'itemType',
|
|
||||||
icon: 'contact_support',
|
|
||||||
moduleName: 'ItemType',
|
|
||||||
},
|
|
||||||
component: RouterView,
|
|
||||||
redirect: { name: 'ItemTypeList' },
|
|
||||||
menus: {
|
|
||||||
main: [],
|
|
||||||
card: ['ItemTypeBasicData', 'ItemTypeLog'],
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
name: 'ItemTypeCard',
|
|
||||||
path: ':id',
|
|
||||||
component: () => import('src/pages/Item/ItemType/Card/ItemTypeCard.vue'),
|
|
||||||
redirect: { name: 'ItemTypeSummary' },
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
name: 'ItemTypeSummary',
|
|
||||||
path: 'summary',
|
|
||||||
meta: {
|
|
||||||
title: 'summary',
|
|
||||||
},
|
|
||||||
component: () =>
|
|
||||||
import('src/pages/Item/ItemType/Card/ItemTypeSummary.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'ItemTypeBasicData',
|
|
||||||
path: 'basic-data',
|
|
||||||
meta: {
|
|
||||||
title: 'basicData',
|
|
||||||
icon: 'vn:settings',
|
|
||||||
},
|
|
||||||
component: () =>
|
|
||||||
import('src/pages/Item/ItemType/Card/ItemTypeBasicData.vue'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'log',
|
|
||||||
name: 'ItemTypeLog',
|
|
||||||
meta: {
|
|
||||||
title: 'log',
|
|
||||||
icon: 'vn:History',
|
|
||||||
},
|
|
||||||
component: () =>
|
|
||||||
import('src/pages/Item/ItemType/Card/ItemTypeLog.vue'),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
|
@ -9,7 +9,6 @@ import invoiceIn from './modules/invoiceIn';
|
||||||
import wagon from './modules/wagon';
|
import wagon from './modules/wagon';
|
||||||
import supplier from './modules/supplier';
|
import supplier from './modules/supplier';
|
||||||
import travel from './modules/travel';
|
import travel from './modules/travel';
|
||||||
import ItemType from './modules/itemType';
|
|
||||||
import shelving from 'src/router/modules/shelving';
|
import shelving from 'src/router/modules/shelving';
|
||||||
import order from 'src/router/modules/order';
|
import order from 'src/router/modules/order';
|
||||||
import entry from 'src/router/modules/entry';
|
import entry from 'src/router/modules/entry';
|
||||||
|
@ -88,7 +87,6 @@ const routes = [
|
||||||
entry,
|
entry,
|
||||||
parking,
|
parking,
|
||||||
agency,
|
agency,
|
||||||
ItemType,
|
|
||||||
zone,
|
zone,
|
||||||
account,
|
account,
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue