0
0
Fork 0

feat: frmItemProposal show

This commit is contained in:
Javier Segarra 2024-04-30 14:51:49 +02:00
parent 1d4549439c
commit 0988936884
6 changed files with 188 additions and 16 deletions

View File

@ -7,8 +7,8 @@ import FetchData from 'components/FetchData.vue';
import FormModel from 'components/FormModel.vue'; import FormModel from 'components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue'; import VnRow from 'components/ui/VnRow.vue';
import VnSelectDialog from 'src/components/common/VnSelectDialog.vue'; import VnSelectDialog from 'src/components/common/VnSelectDialog.vue';
import CreateGenusForm from './CreateGenusForm.vue'; import CreateGenusForm from '../components/CreateGenusForm.vue';
import CreateSpecieForm from './CreateSpecieForm.vue'; import CreateSpecieForm from '../components/CreateSpecieForm.vue';
const route = useRoute(); const route = useRoute();
const { t } = useI18n(); const { t } = useI18n();

View File

@ -0,0 +1,157 @@
<script setup>
import FetchData from 'components/FetchData.vue';
import { ref, reactive, computed, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import { useDialogPluginComponent } from 'quasar';
import VnInput from 'src/components/common/VnInput.vue';
import { useArrayData } from 'composables/useArrayData';
const { t } = useI18n();
const params = reactive({});
const $props = defineProps({
item: {
type: Object,
default: () => {},
},
});
const itemsProposal = ref([]);
const showProposalDialog = ref(false);
const { dialogRef, onDialogHide } = useDialogPluginComponent();
watch($props.item, (newX, oldX) => {
showProposalDialog.value = !newX;
});
const exprBuilder = (param, value) => {
switch (param) {
default:
return {};
}
};
const arrayData = useArrayData('ItemProposal', {
url: 'Items/getSimilar',
userParams: params,
order: ['itemFk'],
exprBuilder: exprBuilder,
});
const store = arrayData.store;
const defaultColumnAttrs = {
align: 'left',
sortable: true,
};
const getColumnInputEvents = (col) => {
return col.columnFilter.type === 'select'
? { 'update:modelValue': () => applyColumnFilter(col) }
: {
'keyup.enter': () => applyColumnFilter(col),
};
};
const applyColumnFilter = async (col) => {
try {
const paramKey = col.columnFilter?.filterParamKey || col.field;
params[paramKey] = col.columnFilter.filterValue;
await arrayData.addFilter({ params });
} catch (err) {
console.error('Error applying column filter', err);
}
};
const defaultColumnFilter = {
component: VnInput,
type: 'text',
filterValue: null,
event: getColumnInputEvents,
attrs: {
dense: true,
},
};
const columns = computed(() => [
{
label: t('item.fixedPrice.itemId'),
name: 'itemId',
field: 'itemFk',
...defaultColumnAttrs,
columnFilter: {
...defaultColumnFilter,
},
},
]);
// const editTableFieldsOptions = [
// {
// field: 'rate2',
// label: t('item.fixedPrice.groupingPrice'),
// component: 'input',
// attrs: {
// type: 'number',
// },
// },
// ];
</script>
<template>
<QDialog ref="dialogRef" @hide="onDialogHide" v-model="showProposalDialog">
<QCard class="q-pa-sm">
<QCardSection class="row items-center q-pb-none">
{{ $props.item }}
<span class="text-h6 text-grey">{{
t('negative.modalOrigin.title')
}}</span>
<QSpace />
<QBtn icon="close" flat round dense v-close-popup />
</QCardSection>
<QCardSection class="row items-center justify-center column items-stretch">
<span>{{ t('negative.modalOrigin.question') }}</span>
<FetchData
url="Items/getSimilar"
:filter="{
where: {
itemFk: $props.item.itemFk,
warehouseFk: $props.item.warehouseFk,
},
}"
auto-load
@on-fetch="(data) => (itemsProposal = data)"
/>
<QTable
:rows="itemsProposal"
:columns="columns"
row-key="id"
selection="multiple"
:pagination="{ rowsPerPage: 0 }"
class="full-width q-mt-md"
:no-data-label="t('globals.noResults')"
>
<template #top-row="{ cols }">
<QTr>
<QTd />
<QTd
v-for="(col, index) in cols"
:key="index"
style="max-width: 100px"
>
<component
:is="col.columnFilter.component"
v-if="col.columnFilter"
v-model="col.columnFilter.filterValue"
v-bind="col.columnFilter.attrs"
v-on="col.columnFilter.event(col)"
dense
/>
</QTd>
</QTr>
</template>
<template #body-cell-itemId="props">
<QTd class="col">{{ props }}</QTd>
</template>
</QTable></QCardSection
>
</QCard>
</QDialog>
</template>
<style lang="scss" scoped></style>
<i18n>
es:
xx: xx
</i18n>

View File

@ -207,6 +207,7 @@ const columns = computed(() => [
sortable: true, sortable: true,
}, },
]); ]);
const { dialogRef, onDialogHide } = useDialogPluginComponent();
const emit = defineEmits([...useDialogPluginComponent.emits, 'selection']); const emit = defineEmits([...useDialogPluginComponent.emits, 'selection']);
function rowsHasSelected(selection) { function rowsHasSelected(selection) {
@ -266,6 +267,9 @@ function freeFirst({ alertLevel: a }, { alertLevel: b }) {
@on-fetch="(data) => (editableStates = data)" @on-fetch="(data) => (editableStates = data)"
auto-load auto-load
/> />
<!-- <QPage class="column items-center q-pa-md">
<div class="vn-card-list"> -->
<VnPaginate <VnPaginate
:data-key="URL_KEY" :data-key="URL_KEY"
:url="`${URL_KEY}/${entityId}/detail`" :url="`${URL_KEY}/${entityId}/detail`"

View File

@ -5,7 +5,8 @@ import { useStateStore } from 'stores/useStateStore';
import VnPaginate from 'components/ui/VnPaginate.vue'; import VnPaginate from 'components/ui/VnPaginate.vue';
import TicketLackFilter from 'pages/Ticket/Negative/TicketLackFilter.vue'; import TicketLackFilter from 'pages/Ticket/Negative/TicketLackFilter.vue';
import TicketLackDetail from 'pages/Ticket/Negative/TicketLackDetail.vue'; import TicketLackDetail from 'pages/Ticket/Negative/TicketLackDetail.vue';
// import TicketLackDialogProxy from 'src/pages/Ticket/Negative/TicketLackDialogProxy.vue'; import ItemProposal from 'src/pages/Item/components/ItemProposal.vue';
import NegativeOriginDialog from 'pages/Ticket/Negative/NegativeOriginDialog.vue'; import NegativeOriginDialog from 'pages/Ticket/Negative/NegativeOriginDialog.vue';
import TotalNegativeOriginDialog from 'pages/Ticket/Negative/TotalNegativeOriginDialog.vue'; import TotalNegativeOriginDialog from 'pages/Ticket/Negative/TotalNegativeOriginDialog.vue';
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue'; import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
@ -15,20 +16,18 @@ import { useDialogPluginComponent } from 'quasar';
const stateStore = useStateStore(); const stateStore = useStateStore();
const { t } = useI18n(); const { t } = useI18n();
const selectedRows = ref([]); const selectedRows = ref([]);
const showTicketDialog = ref(false);
const showNegativeOriginDialog = ref(false); const showNegativeOriginDialog = ref(false);
const showTotalNegativeOriginDialog = ref(false); const showTotalNegativeOriginDialog = ref(false);
const showProposalDialog = ref(false);
const currentRow = ref(null); const currentRow = ref(null);
const { dialogRef, onDialogHide } = useDialogPluginComponent(); const { dialogRef, onDialogHide } = useDialogPluginComponent();
import { useRoute, useRouter } from 'vue-router';
const route = useRoute(); const viewSummary = (row) => {
const router = useRouter();
const viewSummary = async (row) => {
currentRow.value = row; currentRow.value = row;
}; };
const originDialogRef = ref(); const originDialogRef = ref();
const totalNegativeDialogRef = ref(); const totalNegativeDialogRef = ref();
const proposalDialogRef = ref();
const columns = computed(() => [ const columns = computed(() => [
{ {
name: 'minTimed', name: 'minTimed',
@ -109,10 +108,10 @@ const columns = computed(() => [
</div> </div>
</Teleport> </Teleport>
</template> </template>
<QPage class="column items-center"> <QPage class="column items-center">
<VnSubToolbar class="bg-vn-dark justify-end"> <VnSubToolbar class="bg-vn-dark justify-end">
<template #st-actions> <template #st-actions>
<!-- <div class="flex items-center q-ml-lg" style="column-gap: 1px"> -->
<QBtnGroup v-if="currentRow" push style="column-gap: 1px" <QBtnGroup v-if="currentRow" push style="column-gap: 1px"
><QBtn ><QBtn
:label="t('globals.cancel')" :label="t('globals.cancel')"
@ -141,7 +140,19 @@ const columns = computed(() => [
<QTooltip>{{ t('negative.totalNegative') }}</QTooltip> <QTooltip>{{ t('negative.totalNegative') }}</QTooltip>
</QBtn> </QBtn>
</QBtnGroup> </QBtnGroup>
<!-- </div> --> </template>
<template #st-data>
<QBtnGroup v-if="currentRow" push style="column-gap: 1px">
<QBtn
color="primary"
@click="showProposalDialog = true"
icon="vn:splitline"
>
<QTooltip bottom anchor="bottom right">
{{ t('Item proposal') }}
</QTooltip>
</QBtn></QBtnGroup
>
</template> </template>
</VnSubToolbar> </VnSubToolbar>
<div v-show="!currentRow" class="list"> <div v-show="!currentRow" class="list">
@ -221,12 +232,12 @@ const columns = computed(() => [
<div v-if="currentRow" class="list"> <div v-if="currentRow" class="list">
<TicketLackDetail :id="currentRow?.itemFk"></TicketLackDetail> <TicketLackDetail :id="currentRow?.itemFk"></TicketLackDetail>
</div> </div>
<!-- <ItemProposal
<TicketLackDialogProxy ref="proposalDialogRef"
ref="dialogRef" @hide="onDialogHide"
v-model="showTicketDialog" v-model="showProposalDialog"
:ticket="currentRow" :item="currentRow"
></TicketLackDialogProxy> --> ></ItemProposal>
<TotalNegativeOriginDialog <TotalNegativeOriginDialog
ref="totalNegativeDialogRef" ref="totalNegativeDialogRef"
v-model="showTotalNegativeOriginDialog" v-model="showTotalNegativeOriginDialog"