Change layout CustomerDescriptor Actions #931
|
@ -0,0 +1,8 @@
|
||||||
|
import { openURL } from 'quasar';
|
||||||
|
|||||||
|
const defaultWindowFeatures = {
|
||||||
|
noopener: true,
|
||||||
|
noreferrer: true,
|
||||||
|
};
|
||||||
|
export default function (url, windowFeatures = defaultWindowFeatures, fn = undefined) {
|
||||||
|
openURL(url, fn, windowFeatures);
|
||||||
|
}
|
|
@ -174,23 +174,6 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
||||||
>
|
>
|
||||||
<QTooltip>{{ t('Customer ticket list') }}</QTooltip>
|
<QTooltip>{{ t('Customer ticket list') }}</QTooltip>
|
||||||
</QBtn>
|
</QBtn>
|
||||||
<QBtn
|
|
||||||
:to="{
|
|
||||||
name: 'TicketList',
|
|
||||||
query: {
|
|
||||||
table: JSON.stringify({
|
|
||||||
clientFk: entity.id,
|
|
||||||
}),
|
|
||||||
createForm: JSON.stringify({ clientId: entity.id }),
|
|
||||||
},
|
|
||||||
}"
|
|
||||||
size="md"
|
|
||||||
color="primary"
|
|
||||||
target="_blank"
|
|
||||||
icon="vn:ticketAdd"
|
|
||||||
>
|
|
||||||
<QTooltip>{{ t('New ticket') }}</QTooltip>
|
|
||||||
</QBtn>
|
|
||||||
<QBtn
|
<QBtn
|
||||||
:to="{
|
:to="{
|
||||||
name: 'InvoiceOutList',
|
name: 'InvoiceOutList',
|
||||||
|
@ -202,23 +185,6 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
||||||
>
|
>
|
||||||
<QTooltip>{{ t('Customer invoice out list') }}</QTooltip>
|
<QTooltip>{{ t('Customer invoice out list') }}</QTooltip>
|
||||||
</QBtn>
|
</QBtn>
|
||||||
<QBtn
|
|
||||||
:to="{
|
|
||||||
name: 'OrderList',
|
|
||||||
query: {
|
|
||||||
table: JSON.stringify({
|
|
||||||
clientFk: entity.id,
|
|
||||||
}),
|
|
||||||
createForm: JSON.stringify({ clientFk: entity.id }),
|
|
||||||
},
|
|
||||||
}"
|
|
||||||
size="md"
|
|
||||||
target="_blank"
|
|
||||||
icon="vn:basketadd"
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
<QTooltip>{{ t('New order') }}</QTooltip>
|
|
||||||
</QBtn>
|
|
||||||
<QBtn
|
<QBtn
|
||||||
:to="{
|
:to="{
|
||||||
name: 'AccountSummary',
|
name: 'AccountSummary',
|
||||||
|
|
|
@ -6,8 +6,8 @@ import axios from 'axios';
|
||||||
import { useQuasar } from 'quasar';
|
import { useQuasar } from 'quasar';
|
||||||
|
|
||||||
import useNotify from 'src/composables/useNotify';
|
import useNotify from 'src/composables/useNotify';
|
||||||
|
|
||||||
import VnSmsDialog from 'src/components/common/VnSmsDialog.vue';
|
import VnSmsDialog from 'src/components/common/VnSmsDialog.vue';
|
||||||
|
import useOpenURL from 'src/composables/useOpenURL';
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
customer: {
|
customer: {
|
||||||
|
@ -15,7 +15,6 @@ const $props = defineProps({
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const { notify } = useNotify();
|
const { notify } = useNotify();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const quasar = useQuasar();
|
const quasar = useQuasar();
|
||||||
|
@ -40,9 +39,42 @@ const sendSms = async (payload) => {
|
||||||
notify(error.message, 'positive');
|
notify(error.message, 'positive');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const openCreateForm = (type) => {
|
||||||
|
const query = {
|
||||||
jorgep
commented
Solo cambia el parámetro que pasas a openWindow, porque no llamas directamente a openWindow con el parámetro (order || ticket) y que este cree la query? Solo cambia el parámetro que pasas a openWindow, porque no llamas directamente a openWindow con el parámetro (order || ticket) y que este cree la query?
De paso, si lo ves útil, mira a ver si puedes usar esto: https://quasar.dev/quasar-utils/other-utils#openurl para no usar window.open
jsegarra
commented
Me gusta lo de quasar, creo nadie lo usa, creo composable! Me gusta lo de quasar, creo nadie lo usa, creo composable!
Por otra parte, fijate que las claves de query.createForm no coinciden para los 2 modelos
jorgep
commented
Tienes razón, cambia 1, de todas maneras el 90% de ambas fn es el mismo código, Usar solo 1 fn. Tienes razón, cambia 1, de todas maneras el 90% de ambas fn es el mismo código, Usar solo 1 fn.
|
|||||||
|
table: {
|
||||||
|
clientFk: $props.customer.id,
|
||||||
|
},
|
||||||
|
createForm: {
|
||||||
|
addressId: $props.customer.defaultAddressFk,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const clientFk = {
|
||||||
|
ticket: 'clientId',
|
||||||
|
order: 'clientFk',
|
||||||
|
};
|
||||||
|
const key = clientFk[type];
|
||||||
|
if (!key) return;
|
||||||
|
query.createForm[key] = $props.customer.id;
|
||||||
|
|
||||||
|
const params = Object.entries(query)
|
||||||
|
.map(([key, value]) => `${key}=${JSON.stringify(value)}`)
|
||||||
|
.join('&');
|
||||||
|
useOpenURL(`/#/${type}/list?${params}`);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<QItem v-ripple clickable @click="openCreateForm('ticket')">
|
||||||
|
<QItemSection>
|
||||||
|
{{ t('globals.pageTitles.createTicket') }}
|
||||||
|
</QItemSection>
|
||||||
|
</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>
|
||||||
|
|
|
@ -45,6 +45,13 @@ const userParams = {
|
||||||
from: null,
|
from: null,
|
||||||
to: null,
|
to: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
initializeFromQuery();
|
||||||
|
stateStore.rightDrawer = true;
|
||||||
|
if (!route.query.createForm) return;
|
||||||
|
onClientSelected(JSON.parse(route.query.createForm));
|
||||||
|
});
|
||||||
// Método para inicializar las variables desde la query string
|
// Método para inicializar las variables desde la query string
|
||||||
const initializeFromQuery = () => {
|
const initializeFromQuery = () => {
|
||||||
const query = route.query.table ? JSON.parse(route.query.table) : {};
|
const query = route.query.table ? JSON.parse(route.query.table) : {};
|
||||||
|
@ -301,11 +308,6 @@ const getDateColor = (date) => {
|
||||||
if (comparation < 0) return 'bg-success';
|
if (comparation < 0) return 'bg-success';
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
initializeFromQuery();
|
|
||||||
stateStore.rightDrawer = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
async function makeInvoice(ticket) {
|
async function makeInvoice(ticket) {
|
||||||
const ticketsIds = ticket.map((item) => item.id);
|
const ticketsIds = ticket.map((item) => item.id);
|
||||||
const { data } = await axios.post(`Tickets/invoiceTicketsAndPdf`, { ticketsIds });
|
const { data } = await axios.post(`Tickets/invoiceTicketsAndPdf`, { ticketsIds });
|
||||||
|
|
Loading…
Reference in New Issue
💯