7525-devToTest #419
|
@ -48,7 +48,11 @@ const onDataSaved = async (formData, requestResponse) => {
|
||||||
/>
|
/>
|
||||||
<FetchData
|
<FetchData
|
||||||
url="Tickets"
|
url="Tickets"
|
||||||
:filter="{ fields: ['id', 'nickname'], order: 'shipped DESC', limit: 30 }"
|
:filter="{
|
||||||
|
fields: ['id', 'nickname'],
|
||||||
|
where: { refFk: null },
|
||||||
|
order: 'shipped DESC',
|
||||||
|
}"
|
||||||
@on-fetch="(data) => (ticketsOptions = data)"
|
@on-fetch="(data) => (ticketsOptions = data)"
|
||||||
auto-load
|
auto-load
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
defineProps({
|
import { computed } from 'vue';
|
||||||
|
|
||||||
|
const $props = defineProps({
|
||||||
maxLength: {
|
maxLength: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -8,53 +10,40 @@ defineProps({
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
tag: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: 'tag',
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: 'value',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const tags = computed(() => {
|
||||||
|
return Object.keys($props.item)
|
||||||
|
.filter((i) => i.startsWith(`${$props.tag}`))
|
||||||
|
.reduce((acc, tag) => {
|
||||||
|
const n = tag.split(`${$props.tag}`)[1];
|
||||||
|
const key = `${$props.tag}${n}`;
|
||||||
|
const value = `${$props.value}${n}`;
|
||||||
|
acc[$props.item[key] ?? key] = $props.item[value] ?? '';
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="fetchedTags">
|
<div class="fetchedTags">
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
<div
|
<div
|
||||||
|
v-for="(val, key) in tags"
|
||||||
|
:key="key"
|
||||||
class="inline-tag"
|
class="inline-tag"
|
||||||
:class="{ empty: !$props.item.value5 }"
|
:title="`${key}: ${val}`"
|
||||||
:title="$props.item.tag5 + ': ' + $props.item.value5"
|
:class="{ empty: !val }"
|
||||||
>
|
>
|
||||||
{{ $props.item.value5 }}
|
{{ val }}
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="inline-tag"
|
|
||||||
:class="{ empty: !$props.item.tag6 }"
|
|
||||||
:title="$props.item.tag6 + ': ' + $props.item.value6"
|
|
||||||
>
|
|
||||||
{{ $props.item.value6 }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="inline-tag"
|
|
||||||
:class="{ empty: !$props.item.value7 }"
|
|
||||||
:title="$props.item.tag7 + ': ' + $props.item.value7"
|
|
||||||
>
|
|
||||||
{{ $props.item.value7 }}
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="inline-tag"
|
|
||||||
:class="{ empty: !$props.item.value8 }"
|
|
||||||
:title="$props.item.tag8 + ': ' + $props.item.value8"
|
|
||||||
>
|
|
||||||
{{ $props.item.value8 }}
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="inline-tag"
|
|
||||||
:class="{ empty: !$props.item.value9 }"
|
|
||||||
:title="$props.item.tag9 + ': ' + $props.item.value9"
|
|
||||||
>
|
|
||||||
{{ $props.item.value9 }}
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="inline-tag"
|
|
||||||
:class="{ empty: !$props.item.value10 }"
|
|
||||||
:title="$props.item.tag10 + ': ' + $props.item.value10"
|
|
||||||
>
|
|
||||||
{{ $props.item.value10 }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -83,9 +72,8 @@ defineProps({
|
||||||
min-width: 4rem;
|
min-width: 4rem;
|
||||||
max-width: 4rem;
|
max-width: 4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty {
|
.empty {
|
||||||
border: 1px solid $color-spacer-light;
|
border: 1px solid #2b2b2b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -410,7 +410,7 @@ const lockIconType = (groupingMode, mode) => {
|
||||||
<span v-if="props.row.item.subName" class="subName">
|
<span v-if="props.row.item.subName" class="subName">
|
||||||
{{ props.row.item.subName }}
|
{{ props.row.item.subName }}
|
||||||
</span>
|
</span>
|
||||||
<fetched-tags :item="props.row.item" :max-length="5" />
|
<FetchedTags :item="props.row.item" :max-length="5" />
|
||||||
</QTd>
|
</QTd>
|
||||||
</QTr>
|
</QTr>
|
||||||
<!-- Esta última row es utilizada para agregar un espaciado y así marcar una diferencia visual entre los diferentes buys -->
|
<!-- Esta última row es utilizada para agregar un espaciado y así marcar una diferencia visual entre los diferentes buys -->
|
||||||
|
|
|
@ -338,7 +338,7 @@ const fetchEntryBuys = async () => {
|
||||||
<span v-if="row.item.subName" class="subName">
|
<span v-if="row.item.subName" class="subName">
|
||||||
{{ row.item.subName }}
|
{{ row.item.subName }}
|
||||||
</span>
|
</span>
|
||||||
<fetched-tags :item="row.item" :max-length="5" />
|
<FetchedTags :item="row.item" :max-length="5" />
|
||||||
</QTd>
|
</QTd>
|
||||||
</QTr>
|
</QTr>
|
||||||
<!-- Esta última row es utilizada para agregar un espaciado y así marcar una diferencia visual entre los diferentes buys -->
|
<!-- Esta última row es utilizada para agregar un espaciado y así marcar una diferencia visual entre los diferentes buys -->
|
||||||
|
|
|
@ -707,7 +707,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
|
||||||
</template>
|
</template>
|
||||||
<template #body-cell-tags="{ row }">
|
<template #body-cell-tags="{ row }">
|
||||||
<QTd>
|
<QTd>
|
||||||
<fetched-tags :item="row" :max-length="6" />
|
<FetchedTags :item="row" :max-length="6" />
|
||||||
</QTd>
|
</QTd>
|
||||||
</template>
|
</template>
|
||||||
<template #body-cell-entryFk="{ row }">
|
<template #body-cell-entryFk="{ row }">
|
||||||
|
|
|
@ -459,7 +459,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
|
||||||
{{ row.name }}
|
{{ row.name }}
|
||||||
</span>
|
</span>
|
||||||
<ItemDescriptorProxy :id="row.itemFk" />
|
<ItemDescriptorProxy :id="row.itemFk" />
|
||||||
<fetched-tags :item="row" :max-length="6" />
|
<FetchedTags :item="row" :max-length="6" />
|
||||||
</QTd>
|
</QTd>
|
||||||
</template>
|
</template>
|
||||||
<template #body-cell-groupingPrice="props">
|
<template #body-cell-groupingPrice="props">
|
||||||
|
|
|
@ -521,7 +521,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
|
||||||
<template #body-cell-description="{ row }">
|
<template #body-cell-description="{ row }">
|
||||||
<QTd class="col">
|
<QTd class="col">
|
||||||
<span>{{ row.name }} {{ row.subName }}</span>
|
<span>{{ row.name }} {{ row.subName }}</span>
|
||||||
<fetched-tags :item="row" :max-length="6" />
|
<FetchedTags :item="row" :max-length="6" />
|
||||||
</QTd>
|
</QTd>
|
||||||
</template>
|
</template>
|
||||||
<template #body-cell-isActive="{ row }">
|
<template #body-cell-isActive="{ row }">
|
||||||
|
|
|
@ -81,3 +81,10 @@ itemTags:
|
||||||
searchbar:
|
searchbar:
|
||||||
label: Search item
|
label: Search item
|
||||||
info: Search by item id
|
info: Search by item id
|
||||||
|
itemType:
|
||||||
|
shared:
|
||||||
|
code: Code
|
||||||
|
name: Name
|
||||||
|
worker: Worker
|
||||||
|
category: Category
|
||||||
|
temperature: Temperature
|
||||||
|
|
|
@ -81,3 +81,10 @@ itemTags:
|
||||||
searchbar:
|
searchbar:
|
||||||
label: Buscar artículo
|
label: Buscar artículo
|
||||||
info: Buscar por id de artículo
|
info: Buscar por id de artículo
|
||||||
|
itemType:
|
||||||
|
shared:
|
||||||
|
code: Código
|
||||||
|
name: Nombre
|
||||||
|
worker: Trabajador
|
||||||
|
category: Reino
|
||||||
|
temperature: Temperatura
|
||||||
|
|
|
@ -176,10 +176,7 @@ const detailsColumns = ref([
|
||||||
{{ props.row.item.subName }}
|
{{ props.row.item.subName }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<fetched-tags
|
<FetchedTags :item="props.row.item" :max-length="5" />
|
||||||
:item="props.row.item"
|
|
||||||
:max-length="5"
|
|
||||||
/>
|
|
||||||
</QTd>
|
</QTd>
|
||||||
<QTd key="quantity" :props="props">
|
<QTd key="quantity" :props="props">
|
||||||
{{ props.row.quantity }}
|
{{ props.row.quantity }}
|
||||||
|
|
|
@ -160,7 +160,7 @@ async function confirmOrder() {
|
||||||
<span class="text-uppercase subname">
|
<span class="text-uppercase subname">
|
||||||
{{ row.item.subName }}
|
{{ row.item.subName }}
|
||||||
</span>
|
</span>
|
||||||
<fetched-tags :item="row.item" :max-length="5" />
|
<FetchedTags :item="row.item" :max-length="5" />
|
||||||
</div>
|
</div>
|
||||||
<VnLv :label="t('item')" :value="String(row.item.id)" />
|
<VnLv :label="t('item')" :value="String(row.item.id)" />
|
||||||
<VnLv
|
<VnLv
|
||||||
|
|
|
@ -77,7 +77,7 @@ const loadVolumes = async (rows) => {
|
||||||
>
|
>
|
||||||
<template #list-items>
|
<template #list-items>
|
||||||
<div class="q-mb-sm">
|
<div class="q-mb-sm">
|
||||||
<fetched-tags :item="row.item" :max-length="5" />
|
<FetchedTags :item="row.item" :max-length="5" />
|
||||||
</div>
|
</div>
|
||||||
<VnLv :label="t('item')" :value="row.item.id" />
|
<VnLv :label="t('item')" :value="row.item.id" />
|
||||||
<VnLv :label="t('subName')">
|
<VnLv :label="t('subName')">
|
||||||
|
|
|
@ -204,7 +204,7 @@ onMounted(async () => {
|
||||||
|
|
||||||
<QTd no-hover>
|
<QTd no-hover>
|
||||||
<span>{{ buy.subName }}</span>
|
<span>{{ buy.subName }}</span>
|
||||||
<fetched-tags :item="buy" :max-length="5" />
|
<FetchedTags :item="buy" :max-length="5" />
|
||||||
</QTd>
|
</QTd>
|
||||||
<QTd no-hover> {{ dashIfEmpty(buy.quantity) }}</QTd>
|
<QTd no-hover> {{ dashIfEmpty(buy.quantity) }}</QTd>
|
||||||
<QTd no-hover> {{ dashIfEmpty(buy.price) }}</QTd>
|
<QTd no-hover> {{ dashIfEmpty(buy.price) }}</QTd>
|
||||||
|
|
|
@ -71,52 +71,34 @@ function reloadData() {
|
||||||
bordered
|
bordered
|
||||||
:key="row.id"
|
:key="row.id"
|
||||||
v-for="row of rows"
|
v-for="row of rows"
|
||||||
class="card q-pt-xs q-mb-sm"
|
class="card q-px-md q-mb-sm container"
|
||||||
>
|
>
|
||||||
<QItem>
|
|
||||||
<QItemSection side-left>
|
|
||||||
<VnRow>
|
<VnRow>
|
||||||
<QField
|
<VnInput
|
||||||
:label="t('worker.pda.currentPDA')"
|
:label="t('worker.pda.currentPDA')"
|
||||||
:model-value="row?.deviceProductionFk"
|
:model-value="row?.deviceProductionFk"
|
||||||
disable
|
disable
|
||||||
>
|
/>
|
||||||
<template #control>
|
<VnInput
|
||||||
<div tabindex="0" style="padding: none">
|
:label="t('Model')"
|
||||||
<span>Id: </span>
|
:model-value="row?.deviceProduction?.modelFk"
|
||||||
<span>
|
disable
|
||||||
{{ row?.deviceProductionFk }}
|
/>
|
||||||
</span>
|
<VnInput
|
||||||
<span>{{ t('Model') }}: </span>
|
:label="t('Serial number')"
|
||||||
<span>
|
:model-value="row?.deviceProduction?.serialNumber"
|
||||||
{{ row?.deviceProduction?.modelFk }}
|
disable
|
||||||
</span>
|
/>
|
||||||
<span>{{ t('SIM serial number') }}: </span>
|
<VnInput
|
||||||
<span>
|
|
||||||
{{
|
|
||||||
row?.deviceProduction?.serialNumber
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</QField>
|
|
||||||
<QField
|
|
||||||
:label="t('Current SIM')"
|
:label="t('Current SIM')"
|
||||||
:model-value="row?.simSerialNumber"
|
:model-value="row?.simSerialNumber"
|
||||||
disable
|
disable
|
||||||
>
|
/>
|
||||||
<template #control>
|
<QBtn
|
||||||
<div tabindex="0">{{ row?.simSerialNumber }}</div>
|
flat
|
||||||
</template>
|
icon="delete"
|
||||||
</QField>
|
|
||||||
</VnRow>
|
|
||||||
</QItemSection>
|
|
||||||
<QItemSection side>
|
|
||||||
<QIcon
|
|
||||||
name="delete"
|
|
||||||
size="sm"
|
|
||||||
class="cursor-pointer"
|
|
||||||
color="primary"
|
color="primary"
|
||||||
|
class="btn-delete"
|
||||||
@click="
|
@click="
|
||||||
openConfirmationModal(
|
openConfirmationModal(
|
||||||
t(`Remove PDA`),
|
t(`Remove PDA`),
|
||||||
|
@ -128,9 +110,8 @@ function reloadData() {
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('worker.pda.removePDA') }}
|
{{ t('worker.pda.removePDA') }}
|
||||||
</QTooltip>
|
</QTooltip>
|
||||||
</QIcon>
|
</QBtn>
|
||||||
</QItemSection>
|
</VnRow>
|
||||||
</QItem>
|
|
||||||
</QCard>
|
</QCard>
|
||||||
</template>
|
</template>
|
||||||
</VnPaginate>
|
</VnPaginate>
|
||||||
|
@ -187,26 +168,20 @@ function reloadData() {
|
||||||
</QPage>
|
</QPage>
|
||||||
</template>
|
</template>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.centerCard {
|
.btn-delete {
|
||||||
padding: 5%;
|
max-width: 4%;
|
||||||
width: 100%;
|
margin-top: 30px;
|
||||||
max-width: 70%;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
.label {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
.q-field {
|
|
||||||
height: 65px;
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<i18n>
|
<i18n>
|
||||||
es:
|
es:
|
||||||
|
Model: Modelo
|
||||||
|
Serial number: Número de serie
|
||||||
|
Current SIM: SIM actual
|
||||||
|
Add new device: Añadir nuevo dispositivo
|
||||||
|
PDA deallocated: PDA desasignada
|
||||||
Remove PDA: Eliminar PDA
|
Remove PDA: Eliminar PDA
|
||||||
Do you want to remove this PDA?: ¿Desea eliminar este PDA?
|
Do you want to remove this PDA?: ¿Desea eliminar este PDA?
|
||||||
PDA deallocated: PDA desasignada
|
You can only have one PDA: Solo puedes tener un PDA si no eres autonomo
|
||||||
SIM serial number: Número de serie de la SIM
|
|
||||||
Model: Modelo
|
|
||||||
This PDA is already assigned to another user: Este PDA ya está asignado a otro usuario
|
This PDA is already assigned to another user: Este PDA ya está asignado a otro usuario
|
||||||
Add new device: Añadir nuevo dispositivo
|
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -35,7 +35,7 @@ const searchBarDataKeys = {
|
||||||
base-url="Zones"
|
base-url="Zones"
|
||||||
:descriptor="ZoneDescriptor"
|
:descriptor="ZoneDescriptor"
|
||||||
searchbar-data-key="ZoneList"
|
searchbar-data-key="ZoneList"
|
||||||
searchbar-url="Zones/filter"
|
searchbar-url="Zones"
|
||||||
searchbar-label="Search zones"
|
searchbar-label="Search zones"
|
||||||
searchbar-info="You can search by zone reference"
|
searchbar-info="You can search by zone reference"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -6,8 +6,6 @@ import { toCurrency } from 'src/filters';
|
||||||
|
|
||||||
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
||||||
import ZoneSummary from 'src/pages/Zone/Card/ZoneSummary.vue';
|
import ZoneSummary from 'src/pages/Zone/Card/ZoneSummary.vue';
|
||||||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
|
||||||
import ZoneFilterPanel from './ZoneFilterPanel.vue';
|
|
||||||
|
|
||||||
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
||||||
import { toTimeFormat } from 'src/filters/date';
|
import { toTimeFormat } from 'src/filters/date';
|
||||||
|
@ -71,35 +69,6 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const exprBuilder = (param, value) => {
|
|
||||||
switch (param) {
|
|
||||||
case 'name':
|
|
||||||
return {
|
|
||||||
name: { like: `%${value}%` },
|
|
||||||
};
|
|
||||||
case 'code':
|
|
||||||
return {
|
|
||||||
code: { like: `%${value}%` },
|
|
||||||
};
|
|
||||||
case 'agencyModeFk':
|
|
||||||
return {
|
|
||||||
agencyModeFk: value,
|
|
||||||
};
|
|
||||||
case 'search':
|
|
||||||
if (value) {
|
|
||||||
if (!isNaN(value)) {
|
|
||||||
return { id: value };
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
name: {
|
|
||||||
like: `%${value}%`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
async function clone(id) {
|
async function clone(id) {
|
||||||
const { data } = await axios.post(`Zones/${id}/clone`);
|
const { data } = await axios.post(`Zones/${id}/clone`);
|
||||||
notify(t('globals.dataSaved'), 'positive');
|
notify(t('globals.dataSaved'), 'positive');
|
||||||
|
@ -116,25 +85,6 @@ onMounted(() => (stateStore.rightDrawer = true));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<template v-if="stateStore.isHeaderMounted()">
|
|
||||||
<Teleport to="#searchbar">
|
|
||||||
<VnSearchbar
|
|
||||||
data-key="ZoneList"
|
|
||||||
url="Zones"
|
|
||||||
:filter="{
|
|
||||||
include: { relation: 'agencyMode', scope: { fields: ['name'] } },
|
|
||||||
}"
|
|
||||||
:expr-builder="exprBuilder"
|
|
||||||
:label="t('list.searchZone')"
|
|
||||||
:info="t('list.searchInfo')"
|
|
||||||
/>
|
|
||||||
</Teleport>
|
|
||||||
</template>
|
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
|
|
||||||
<QScrollArea class="fit text-grey-8">
|
|
||||||
<ZoneFilterPanel data-key="ZoneList" :expr-builder="exprBuilder" />
|
|
||||||
</QScrollArea>
|
|
||||||
</QDrawer>
|
|
||||||
<QPage class="column items-center q-pa-md">
|
<QPage class="column items-center q-pa-md">
|
||||||
<div class="vn-card-list">
|
<div class="vn-card-list">
|
||||||
<VnPaginate
|
<VnPaginate
|
||||||
|
|
|
@ -1,11 +1,72 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
import LeftMenu from 'src/components/LeftMenu.vue';
|
import LeftMenu from 'src/components/LeftMenu.vue';
|
||||||
|
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
||||||
|
import ZoneFilterPanel from './ZoneFilterPanel.vue';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
const stateStore = useStateStore();
|
const stateStore = useStateStore();
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const exprBuilder = (param, value) => {
|
||||||
|
switch (param) {
|
||||||
|
case 'name':
|
||||||
|
return {
|
||||||
|
name: { like: `%${value}%` },
|
||||||
|
};
|
||||||
|
case 'code':
|
||||||
|
return {
|
||||||
|
code: { like: `%${value}%` },
|
||||||
|
};
|
||||||
|
case 'agencyModeFk':
|
||||||
|
return {
|
||||||
|
agencyModeFk: value,
|
||||||
|
};
|
||||||
|
case 'search':
|
||||||
|
if (value) {
|
||||||
|
if (!isNaN(value)) {
|
||||||
|
return { id: value };
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
name: {
|
||||||
|
like: `%${value}%`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<template v-if="stateStore.isHeaderMounted()">
|
||||||
|
<Teleport to="#searchbar">
|
||||||
|
<VnSearchbar
|
||||||
|
data-key="ZoneList"
|
||||||
|
url="Zones"
|
||||||
|
:filter="{
|
||||||
|
include: { relation: 'agencyMode', scope: { fields: ['name'] } },
|
||||||
|
}"
|
||||||
|
:expr-builder="exprBuilder"
|
||||||
|
:label="t('list.searchZone')"
|
||||||
|
:info="t('list.searchInfo')"
|
||||||
|
custom-route-redirect-name="ZoneSummary"
|
||||||
|
/>
|
||||||
|
</Teleport>
|
||||||
|
</template>
|
||||||
|
<QDrawer
|
||||||
|
v-if="route.name === 'ZoneList'"
|
||||||
|
v-model="stateStore.rightDrawer"
|
||||||
|
side="right"
|
||||||
|
:width="256"
|
||||||
|
show-if-above
|
||||||
|
>
|
||||||
|
<QScrollArea class="fit text-grey-8">
|
||||||
|
<ZoneFilterPanel data-key="ZoneList" :expr-builder="exprBuilder" />
|
||||||
|
</QScrollArea>
|
||||||
|
</QDrawer>
|
||||||
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
||||||
<QScrollArea class="fit text-grey-8">
|
<QScrollArea class="fit text-grey-8">
|
||||||
<LeftMenu />
|
<LeftMenu />
|
||||||
|
|
|
@ -1,53 +1,85 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed, onMounted } from 'vue';
|
||||||
import ZoneFilterPanel from 'components/InvoiceOutNegativeFilter.vue';
|
|
||||||
import VnSubToolbar from 'components/ui/VnSubToolbar.vue';
|
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
|
import VnSubToolbar from 'components/ui/VnSubToolbar.vue';
|
||||||
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
|
||||||
|
import { toDateFormat } from 'src/filters/date.js';
|
||||||
|
import { useWeekdayStore } from 'src/stores/useWeekdayStore';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const arrayData = ref(null);
|
const weekdayStore = useWeekdayStore();
|
||||||
const rows = computed(() => arrayData.value.store.data);
|
|
||||||
|
const details = ref([]);
|
||||||
|
|
||||||
const columns = computed(() => [
|
const columns = computed(() => [
|
||||||
{
|
{
|
||||||
label: t('Province'),
|
label: t('upcomingDeliveries.province'),
|
||||||
//field: '',
|
name: 'province',
|
||||||
//name: '',
|
field: 'name',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Closing'),
|
label: t('upcomingDeliveries.closing'),
|
||||||
//field: '',
|
name: 'closing',
|
||||||
//name: '',
|
field: 'hour',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Id'),
|
label: t('upcomingDeliveries.id'),
|
||||||
//field: '',
|
name: 'id',
|
||||||
//name: '',
|
field: 'zoneFk',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function getWeekDay(jsonDate) {
|
const getWeekDayName = (date) => {
|
||||||
const weekDay = new Date(jsonDate).getDay();
|
const weekDay = new Date(date).getDay();
|
||||||
|
return t(`weekdays.${weekdayStore.weekdays[weekDay].code}`);
|
||||||
|
};
|
||||||
|
|
||||||
return this.days[weekDay].locale;
|
const getHeaderTitle = (date) => {
|
||||||
}
|
return `${getWeekDayName(date)} - ${toDateFormat(date)}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => weekdayStore.initStore());
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
|
<FetchData
|
||||||
<QScrollArea class="fit text-grey-8">
|
url="Zones/getUpcomingDeliveries"
|
||||||
<ZoneFilterPanel data-key="ZoneUpcoming" />
|
@on-fetch="(data) => (details = data)"
|
||||||
</QScrollArea>
|
auto-load
|
||||||
</QDrawer>
|
/>
|
||||||
<VnSubToolbar />
|
<VnSubToolbar />
|
||||||
<QPage class="column items-center q-pa-md">
|
<QPage class="column items-center q-pa-md">
|
||||||
<span>
|
<QCard class="full-width q-pa-md">
|
||||||
{{ t(`${getWeekDay(/*detail.shipped*/)}`) }} -
|
<div
|
||||||
{{ t /*'detail.shipped'*/() }}
|
v-for="(detail, index) in details"
|
||||||
|
:key="index"
|
||||||
|
class="full-width flex q-mb-lg"
|
||||||
|
>
|
||||||
|
<span class="header">
|
||||||
|
{{ getHeaderTitle(detail.shipped) }}
|
||||||
</span>
|
</span>
|
||||||
<QTable :columns="columns" :rows="rows" class="full-width q-mt-md"> </QTable>
|
<QTable flat :columns="columns" :rows="detail.lines" class="full-width" />
|
||||||
|
</div>
|
||||||
|
</QCard>
|
||||||
</QPage>
|
</QPage>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.header {
|
||||||
|
min-width: 100% !important;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding-left: 8px;
|
||||||
|
height: 35px;
|
||||||
|
border-bottom: 1px solid $primary;
|
||||||
|
background-color: var(--vn-page-color);
|
||||||
|
font-size: 19px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -5,7 +5,7 @@ zone:
|
||||||
zoneCreate: Create zone
|
zoneCreate: Create zone
|
||||||
locations: Locations
|
locations: Locations
|
||||||
deliveryDays: Delivery days
|
deliveryDays: Delivery days
|
||||||
upcomingList: Upcoming deliveries
|
upcomingDeliveries: Upcoming deliveries
|
||||||
warehouses: Warehouses
|
warehouses: Warehouses
|
||||||
list:
|
list:
|
||||||
clone: Clone
|
clone: Clone
|
||||||
|
@ -64,3 +64,7 @@ warehouses:
|
||||||
deleteSubtitle: Are you sure you want to continue?
|
deleteSubtitle: Are you sure you want to continue?
|
||||||
warehouse: Warehouse
|
warehouse: Warehouse
|
||||||
add: Add
|
add: Add
|
||||||
|
upcomingDeliveries:
|
||||||
|
province: Province
|
||||||
|
closing: Closing
|
||||||
|
id: Id
|
||||||
|
|
|
@ -5,7 +5,7 @@ zone:
|
||||||
zoneCreate: Nueva zona
|
zoneCreate: Nueva zona
|
||||||
locations: Localizaciones
|
locations: Localizaciones
|
||||||
deliveryDays: Días de entrega
|
deliveryDays: Días de entrega
|
||||||
upcomingList: Próximos repartos
|
upcomingDeliveries: Próximos repartos
|
||||||
warehouses: Almacenes
|
warehouses: Almacenes
|
||||||
list:
|
list:
|
||||||
clone: Clonar
|
clone: Clonar
|
||||||
|
@ -66,3 +66,7 @@ warehouses:
|
||||||
deleteSubtitle: ¿Seguro que quieres continuar?
|
deleteSubtitle: ¿Seguro que quieres continuar?
|
||||||
warehouse: Almacén
|
warehouse: Almacén
|
||||||
add: Añadir
|
add: Añadir
|
||||||
|
upcomingDeliveries:
|
||||||
|
province: Provincia
|
||||||
|
closing: Cierre
|
||||||
|
id: Id
|
||||||
|
|
|
@ -11,7 +11,7 @@ export default {
|
||||||
component: RouterView,
|
component: RouterView,
|
||||||
redirect: { name: 'ZoneMain' },
|
redirect: { name: 'ZoneMain' },
|
||||||
menus: {
|
menus: {
|
||||||
main: ['ZoneList', 'ZoneDeliveryDays', 'ZoneUpcomingList'],
|
main: ['ZoneList', 'ZoneDeliveryDays', 'ZoneUpcomingDeliveries'],
|
||||||
card: ['ZoneBasicData', 'ZoneWarehouses', 'ZoneHistory', 'ZoneLocations'],
|
card: ['ZoneBasicData', 'ZoneWarehouses', 'ZoneHistory', 'ZoneLocations'],
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
|
@ -57,6 +57,24 @@ export default {
|
||||||
},
|
},
|
||||||
component: () => import('src/pages/Zone/ZoneCreate.vue'),
|
component: () => import('src/pages/Zone/ZoneCreate.vue'),
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// path: 'counter',
|
||||||
|
// name: 'ZoneCounter',
|
||||||
|
// meta: {
|
||||||
|
// title: 'zoneCounter',
|
||||||
|
// icon: 'add_circle',
|
||||||
|
// },
|
||||||
|
// component: () => import('src/pages/Zone/ZoneCounter.vue'),
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
name: 'ZoneUpcomingDeliveries',
|
||||||
|
path: 'upcoming-deliveries',
|
||||||
|
meta: {
|
||||||
|
title: 'upcomingDeliveries',
|
||||||
|
icon: 'vn:calendar',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Zone/ZoneUpcoming.vue'),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,7 +15,7 @@ describe('WorkerPda', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('delete pda', () => {
|
it('delete pda', () => {
|
||||||
cy.get('.q-card > .q-item > .q-item__section--side > .q-icon').click();
|
cy.get('.btn-delete').click();
|
||||||
cy.get(
|
cy.get(
|
||||||
'.q-card__actions > .q-btn--unelevated > .q-btn__content > .block'
|
'.q-card__actions > .q-btn--unelevated > .q-btn__content > .block'
|
||||||
).click();
|
).click();
|
||||||
|
|
Loading…
Reference in New Issue