forked from verdnatura/salix-front
Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix-front into 6336-migrationClaim-v5
This commit is contained in:
commit
12ca0faf21
|
@ -112,9 +112,7 @@ async function search(evt) {
|
||||||
isLoading.value = true;
|
isLoading.value = true;
|
||||||
const filter = { ...userParams.value };
|
const filter = { ...userParams.value };
|
||||||
store.userParamsChanged = true;
|
store.userParamsChanged = true;
|
||||||
store.filter.skip = 0;
|
arrayData.reset(['skip', 'filter.skip', 'page']);
|
||||||
store.skip = 0;
|
|
||||||
store.page = 1;
|
|
||||||
const { params: newParams } = await arrayData.addFilter({ params: userParams.value });
|
const { params: newParams } = await arrayData.addFilter({ params: userParams.value });
|
||||||
userParams.value = newParams;
|
userParams.value = newParams;
|
||||||
|
|
||||||
|
@ -138,9 +136,7 @@ async function reload() {
|
||||||
async function clearFilters() {
|
async function clearFilters() {
|
||||||
isLoading.value = true;
|
isLoading.value = true;
|
||||||
store.userParamsChanged = true;
|
store.userParamsChanged = true;
|
||||||
store.filter.skip = 0;
|
arrayData.reset(['skip', 'filter.skip', 'page']);
|
||||||
store.skip = 0;
|
|
||||||
store.page = 1;
|
|
||||||
// Filtrar los params no removibles
|
// Filtrar los params no removibles
|
||||||
const removableFilters = Object.keys(userParams.value).filter((param) =>
|
const removableFilters = Object.keys(userParams.value).filter((param) =>
|
||||||
$props.unremovableParams.includes(param)
|
$props.unremovableParams.includes(param)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { onMounted, ref, watch } from 'vue';
|
import { onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useArrayData } from 'composables/useArrayData';
|
import { useArrayData } from 'composables/useArrayData';
|
||||||
|
|
||||||
|
@ -95,6 +95,8 @@ onMounted(async () => {
|
||||||
mounted.value = true;
|
mounted.value = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
onBeforeUnmount(() => arrayData.reset());
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.data,
|
() => props.data,
|
||||||
() => {
|
() => {
|
||||||
|
@ -118,8 +120,7 @@ const addFilter = async (filter, params) => {
|
||||||
|
|
||||||
async function fetch(params) {
|
async function fetch(params) {
|
||||||
useArrayData(props.dataKey, params);
|
useArrayData(props.dataKey, params);
|
||||||
store.filter.skip = 0;
|
arrayData.reset(['filter.skip', 'skip']);
|
||||||
store.skip = 0;
|
|
||||||
await arrayData.fetch({ append: false });
|
await arrayData.fetch({ append: false });
|
||||||
if (!store.hasMoreData) {
|
if (!store.hasMoreData) {
|
||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
|
|
|
@ -103,8 +103,7 @@ async function search() {
|
||||||
const staticParams = Object.entries(store.userParams).filter(
|
const staticParams = Object.entries(store.userParams).filter(
|
||||||
([key, value]) => value && (props.staticParams || []).includes(key)
|
([key, value]) => value && (props.staticParams || []).includes(key)
|
||||||
);
|
);
|
||||||
store.skip = 0;
|
arrayData.reset(['skip', 'page']);
|
||||||
store.page = 1;
|
|
||||||
|
|
||||||
if (props.makeFetch)
|
if (props.makeFetch)
|
||||||
await arrayData.applyFilter({
|
await arrayData.applyFilter({
|
||||||
|
|
|
@ -18,7 +18,8 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
setOptions();
|
setOptions();
|
||||||
store.skip = 0;
|
arrayDataStore.reset(['skip']);
|
||||||
|
|
||||||
const query = route.query;
|
const query = route.query;
|
||||||
const searchUrl = store.searchUrl;
|
const searchUrl = store.searchUrl;
|
||||||
if (query[searchUrl]) {
|
if (query[searchUrl]) {
|
||||||
|
@ -126,6 +127,10 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
||||||
delete store[option];
|
delete store[option];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reset(opts = []) {
|
||||||
|
if (arrayDataStore.get(key)) arrayDataStore.reset(key, opts);
|
||||||
|
}
|
||||||
|
|
||||||
function cancelRequest() {
|
function cancelRequest() {
|
||||||
if (canceller) {
|
if (canceller) {
|
||||||
canceller.abort();
|
canceller.abort();
|
||||||
|
@ -149,9 +154,8 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
||||||
userParams = sanitizerParams(userParams, store?.exprBuilder);
|
userParams = sanitizerParams(userParams, store?.exprBuilder);
|
||||||
|
|
||||||
store.userParams = userParams;
|
store.userParams = userParams;
|
||||||
store.skip = 0;
|
arrayDataStore.reset(['skip', 'filter.skip', 'page']);
|
||||||
store.filter.skip = 0;
|
|
||||||
store.page = 1;
|
|
||||||
await fetch({ append: false });
|
await fetch({ append: false });
|
||||||
return { filter, params };
|
return { filter, params };
|
||||||
}
|
}
|
||||||
|
@ -187,7 +191,6 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
||||||
store.page += 1;
|
store.page += 1;
|
||||||
|
|
||||||
await fetch({ append: true });
|
await fetch({ append: true });
|
||||||
updateStateParams();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function refresh() {
|
async function refresh() {
|
||||||
|
@ -241,5 +244,6 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
||||||
updateStateParams,
|
updateStateParams,
|
||||||
isLoading,
|
isLoading,
|
||||||
deleteOption,
|
deleteOption,
|
||||||
|
reset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1009,6 +1009,14 @@ supplier:
|
||||||
payDay: Pay day
|
payDay: Pay day
|
||||||
account: Account
|
account: Account
|
||||||
newSupplier: New supplier
|
newSupplier: New supplier
|
||||||
|
tableVisibleColumns:
|
||||||
|
id: Id
|
||||||
|
name: Name
|
||||||
|
nif: NIF/CIF
|
||||||
|
nickname: Alias
|
||||||
|
account: Account
|
||||||
|
payMethod: Pay Method
|
||||||
|
payDay: Pay Day
|
||||||
summary:
|
summary:
|
||||||
responsible: Responsible
|
responsible: Responsible
|
||||||
notes: Notes
|
notes: Notes
|
||||||
|
|
|
@ -982,6 +982,14 @@ supplier:
|
||||||
payDay: Día de pago
|
payDay: Día de pago
|
||||||
account: Cuenta
|
account: Cuenta
|
||||||
newSupplier: Nuevo proveedor
|
newSupplier: Nuevo proveedor
|
||||||
|
tableVisibleColumns:
|
||||||
|
id: Id
|
||||||
|
name: Nombre
|
||||||
|
nif: NIF/CIF
|
||||||
|
nickname: Alias
|
||||||
|
account: Cuenta
|
||||||
|
payMethod: Método de pago
|
||||||
|
payDay: Dia de pago
|
||||||
summary:
|
summary:
|
||||||
responsible: Responsable
|
responsible: Responsable
|
||||||
notes: Notas
|
notes: Notas
|
||||||
|
|
|
@ -13,7 +13,7 @@ const { t } = useI18n();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const stateStore = computed(() => useStateStore());
|
const stateStore = computed(() => useStateStore());
|
||||||
const rows = ref([]);
|
const rows = ref([]);
|
||||||
const totalAmount = ref(0);
|
const totalAmount = ref();
|
||||||
|
|
||||||
const filter = {
|
const filter = {
|
||||||
include: [
|
include: [
|
||||||
|
@ -75,7 +75,7 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: (value) => value.user.name,
|
field: (value) => value?.user?.name,
|
||||||
label: t('Created by'),
|
label: t('Created by'),
|
||||||
name: 'createdBy',
|
name: 'createdBy',
|
||||||
},
|
},
|
||||||
|
@ -87,7 +87,7 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: (value) => value.greugeType.name,
|
field: (value) => value?.greugeType?.name,
|
||||||
label: t('Type'),
|
label: t('Type'),
|
||||||
name: 'type',
|
name: 'type',
|
||||||
},
|
},
|
||||||
|
@ -108,26 +108,9 @@ const setRows = (data) => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<FetchData :filter="filter" @on-fetch="setRows" auto-load url="greuges" />
|
<FetchData :filter="filter" @on-fetch="setRows" auto-load url="greuges" />
|
||||||
<template v-if="stateStore.isHeaderMounted()">
|
|
||||||
<Teleport to="#actions-append">
|
|
||||||
<div class="row q-gutter-x-sm">
|
|
||||||
<QBtn
|
|
||||||
flat
|
|
||||||
@click="stateStore.toggleRightDrawer()"
|
|
||||||
round
|
|
||||||
dense
|
|
||||||
icon="menu"
|
|
||||||
>
|
|
||||||
<QTooltip bottom anchor="bottom right">
|
|
||||||
{{ t('globals.collapseMenu') }}
|
|
||||||
</QTooltip>
|
|
||||||
</QBtn>
|
|
||||||
</div>
|
|
||||||
</Teleport>
|
|
||||||
</template>
|
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="300" show-if-above>
|
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="300" show-if-above>
|
||||||
<QCard class="full-width q-pa-sm">
|
<QCard class="full-width q-pa-sm">
|
||||||
<h6 class="flex justify-end q-my-lg q-pr-lg" v-if="totalAmount">
|
<h6 class="flex justify-end q-my-lg q-pr-lg" v-if="totalAmount !== undefined">
|
||||||
<span class="color-vn-label q-mr-md">{{ t('Total') }}:</span>
|
<span class="color-vn-label q-mr-md">{{ t('Total') }}:</span>
|
||||||
{{ toCurrency(totalAmount) }}
|
{{ toCurrency(totalAmount) }}
|
||||||
</h6>
|
</h6>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import VnCard from 'components/common/VnCard.vue';
|
import VnCard from 'components/common/VnCard.vue';
|
||||||
import OrderDescriptor from 'pages/Order/Card/OrderDescriptor.vue';
|
import OrderDescriptor from 'pages/Order/Card/OrderDescriptor.vue';
|
||||||
import OrderFilter from './OrderFilter.vue';
|
import OrderFilter from './OrderFilter.vue';
|
||||||
|
import OrderSearchbar from './OrderSearchbar.vue';
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<VnCard
|
<VnCard
|
||||||
|
@ -10,7 +11,9 @@ import OrderFilter from './OrderFilter.vue';
|
||||||
:descriptor="OrderDescriptor"
|
:descriptor="OrderDescriptor"
|
||||||
:filter-panel="OrderFilter"
|
:filter-panel="OrderFilter"
|
||||||
search-data-key="OrderList"
|
search-data-key="OrderList"
|
||||||
searchbar-label="Search order"
|
>
|
||||||
searchbar-info="ypu can search by order id or name"
|
<template #searchbar>
|
||||||
/>
|
<OrderSearchbar />
|
||||||
|
</template>
|
||||||
|
</VnCard>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -9,8 +9,6 @@ import { dashIfEmpty } from 'src/filters';
|
||||||
import VnUserLink from 'src/components/ui/VnUserLink.vue';
|
import VnUserLink from 'src/components/ui/VnUserLink.vue';
|
||||||
import VnTitle from 'src/components/common/VnTitle.vue';
|
import VnTitle from 'src/components/common/VnTitle.vue';
|
||||||
|
|
||||||
onUpdated(() => summaryRef.value.fetch());
|
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const roleState = useRole();
|
const roleState = useRole();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
|
@ -1,26 +1,81 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { computed, ref } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useRouter } from 'vue-router';
|
import VnTable from 'components/VnTable/VnTable.vue';
|
||||||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
import VnSearchbar from 'components/ui/VnSearchbar.vue';
|
||||||
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
import RightMenu from 'components/common/RightMenu.vue';
|
||||||
import CardList from 'src/components/ui/CardList.vue';
|
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
|
||||||
import SupplierSummary from './Card/SupplierSummary.vue';
|
|
||||||
import SupplierListFilter from './SupplierListFilter.vue';
|
import SupplierListFilter from './SupplierListFilter.vue';
|
||||||
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
|
||||||
import RightMenu from 'src/components/common/RightMenu.vue';
|
|
||||||
|
|
||||||
const router = useRouter();
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const { viewSummary } = useSummaryDialog();
|
const tableRef = ref();
|
||||||
|
|
||||||
function navigate(id) {
|
const columns = computed(() => [
|
||||||
router.push({ path: `/supplier/${id}` });
|
{
|
||||||
}
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.id'),
|
||||||
const redirectToCreateView = () => {
|
name: 'id',
|
||||||
router.push({ name: 'SupplierCreate' });
|
isTitle: true,
|
||||||
};
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.name'),
|
||||||
|
name: 'socialName',
|
||||||
|
create: true,
|
||||||
|
component: 'input',
|
||||||
|
columnField: {
|
||||||
|
component: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.nif'),
|
||||||
|
name: 'nif',
|
||||||
|
component: 'input',
|
||||||
|
columnField: {
|
||||||
|
component: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.nickname'),
|
||||||
|
name: 'alias',
|
||||||
|
component: 'input',
|
||||||
|
columnField: {
|
||||||
|
component: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.account'),
|
||||||
|
name: 'account',
|
||||||
|
component: 'input',
|
||||||
|
columnField: {
|
||||||
|
component: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.payMethod'),
|
||||||
|
name: 'payMethod',
|
||||||
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'payMethods',
|
||||||
|
fields: ['id', 'name'],
|
||||||
|
},
|
||||||
|
columnField: {
|
||||||
|
component: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('supplier.list.tableVisibleColumns.payDay'),
|
||||||
|
name: 'payDat',
|
||||||
|
component: 'input',
|
||||||
|
columnField: {
|
||||||
|
component: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -30,56 +85,25 @@ const redirectToCreateView = () => {
|
||||||
<SupplierListFilter data-key="SuppliersList" />
|
<SupplierListFilter data-key="SuppliersList" />
|
||||||
</template>
|
</template>
|
||||||
</RightMenu>
|
</RightMenu>
|
||||||
<QPage class="column items-center q-pa-md">
|
<VnTable
|
||||||
<div class="vn-card-list">
|
ref="tableRef"
|
||||||
<VnPaginate data-key="SuppliersList" url="Suppliers/filter">
|
data-key="SuppliersList"
|
||||||
<template #body="{ rows }">
|
url="Suppliers/filter"
|
||||||
<CardList
|
save-url="Suppliers/crud"
|
||||||
v-for="row of rows"
|
redirect="supplier"
|
||||||
:key="row.id"
|
:create="{
|
||||||
:title="row.socialName"
|
urlCreate: 'Suppliers/newSupplier',
|
||||||
:id="row.id"
|
title: t('Create Supplier'),
|
||||||
@click="navigate(row.id)"
|
onDataSaved: ({ id }) => tableRef.redirect(id),
|
||||||
>
|
formInitialData: {},
|
||||||
<template #list-items>
|
}"
|
||||||
<VnLv label="NIF/CIF" :value="row.nif" />
|
order="id ASC"
|
||||||
<VnLv label="Alias" :value="row.alias" />
|
:columns="columns"
|
||||||
<VnLv
|
default-mode="table"
|
||||||
:label="t('supplier.list.payMethod')"
|
auto-load
|
||||||
:value="row.payMethod"
|
:right-search="false"
|
||||||
|
:use-model="true"
|
||||||
/>
|
/>
|
||||||
<VnLv
|
|
||||||
:label="t('supplier.list.payDeadline')"
|
|
||||||
:title-label="t('invoiceOut.list.created')"
|
|
||||||
:value="row.payDem"
|
|
||||||
/>
|
|
||||||
<VnLv
|
|
||||||
:label="t('supplier.list.payDay')"
|
|
||||||
:value="row.payDay"
|
|
||||||
/>
|
|
||||||
<VnLv
|
|
||||||
:label="t('supplier.list.account')"
|
|
||||||
:value="row.account"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
<template #actions>
|
|
||||||
<QBtn
|
|
||||||
:label="t('components.smartCard.openSummary')"
|
|
||||||
@click.stop="viewSummary(row.id, SupplierSummary)"
|
|
||||||
color="primary"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</CardList>
|
|
||||||
</template>
|
|
||||||
</VnPaginate>
|
|
||||||
</div>
|
|
||||||
<QPageSticky :offset="[20, 20]">
|
|
||||||
<QBtn fab icon="add" color="primary" @click="redirectToCreateView()" />
|
|
||||||
<QTooltip>
|
|
||||||
{{ t('supplier.list.newSupplier') }}
|
|
||||||
</QTooltip>
|
|
||||||
</QPageSticky>
|
|
||||||
</QPage>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
|
|
|
@ -182,7 +182,7 @@ const columns = computed(() => [
|
||||||
<VnTable
|
<VnTable
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
data-key="TravelList"
|
data-key="TravelList"
|
||||||
url="Travels"
|
url="Travels/filter"
|
||||||
:create="{
|
:create="{
|
||||||
urlCreate: 'Travels',
|
urlCreate: 'Travels',
|
||||||
title: t('Create Travels'),
|
title: t('Create Travels'),
|
||||||
|
|
|
@ -3,13 +3,7 @@ import { defineStore } from 'pinia';
|
||||||
|
|
||||||
export const useArrayDataStore = defineStore('arrayDataStore', () => {
|
export const useArrayDataStore = defineStore('arrayDataStore', () => {
|
||||||
const state = ref({});
|
const state = ref({});
|
||||||
|
const defaultOpts = {
|
||||||
function get(key) {
|
|
||||||
return state.value[key];
|
|
||||||
}
|
|
||||||
|
|
||||||
function set(key) {
|
|
||||||
state.value[key] = {
|
|
||||||
filter: {},
|
filter: {},
|
||||||
userFilter: {},
|
userFilter: {},
|
||||||
userParams: {},
|
userParams: {},
|
||||||
|
@ -17,7 +11,6 @@ export const useArrayDataStore = defineStore('arrayDataStore', () => {
|
||||||
limit: 10,
|
limit: 10,
|
||||||
skip: 0,
|
skip: 0,
|
||||||
order: '',
|
order: '',
|
||||||
data: ref(),
|
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
userParamsChanged: false,
|
userParamsChanged: false,
|
||||||
exprBuilder: null,
|
exprBuilder: null,
|
||||||
|
@ -25,15 +18,41 @@ export const useArrayDataStore = defineStore('arrayDataStore', () => {
|
||||||
navigate: null,
|
navigate: null,
|
||||||
page: 1,
|
page: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function get(key) {
|
||||||
|
return state.value[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
function set(key) {
|
||||||
|
state.value[key] = getDefaultState();
|
||||||
}
|
}
|
||||||
|
|
||||||
function clear(key) {
|
function clear(key) {
|
||||||
delete state.value[key];
|
delete state.value[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reset(key, opts = []) {
|
||||||
|
if (!opts.length) state.value[key] = getDefaultState();
|
||||||
|
else
|
||||||
|
opts.forEach((opt) => {
|
||||||
|
if (opt.includes('.')) {
|
||||||
|
const [parent, child] = opt.split('.');
|
||||||
|
state.value[key][parent][child] = defaultOpts[child];
|
||||||
|
} else if (Object.hasOwn(state.value[key], opt))
|
||||||
|
state.value[key][opt] = defaultOpts[opt];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDefaultState() {
|
||||||
|
return Object.assign(JSON.parse(JSON.stringify(defaultOpts)), {
|
||||||
|
data: ref(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
get,
|
get,
|
||||||
set,
|
set,
|
||||||
clear,
|
clear,
|
||||||
|
reset,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue