#8002 addSupportService #894

Open
jorgep wants to merge 13 commits from xxxx-addSupportService into dev
6 changed files with 98 additions and 17 deletions

View File

@ -1,10 +1,15 @@
import { ref } from 'vue';
import axios from 'axios';
import { boot } from 'quasar/wrappers'; import { boot } from 'quasar/wrappers';
import qFormMixin from './qformMixin'; import qFormMixin from './qformMixin';
import keyShortcut from './keyShortcut'; import keyShortcut from './keyShortcut';
import { i18n } from './i18n';
import useNotify from 'src/composables/useNotify.js'; import useNotify from 'src/composables/useNotify.js';
import { CanceledError } from 'axios'; import VnInput from 'src/components/common/VnInput.vue';
import { useVnConfirm } from 'src/composables/useVnConfirm';
const { notify } = useNotify(); const { notify } = useNotify();
const { openConfirmationModal } = useVnConfirm();
export default boot(({ app }) => { export default boot(({ app }) => {
app.mixin(qFormMixin); app.mixin(qFormMixin);
@ -40,12 +45,70 @@ export default boot(({ app }) => {
} }
console.error(error); console.error(error);
if (error instanceof CanceledError) { if (error instanceof axios.CanceledError) {
const env = process.env.NODE_ENV; const env = process.env.NODE_ENV;
if (env && env !== 'development') return; if (env && env !== 'development') return;
message = 'Duplicate request'; message = 'Duplicate request';
} }
notify(message ?? 'globals.error', 'negative', 'error'); const { config, headers, request, status, statusText, data } = response || {};
const { params, url, method, signal, headers: confHeaders } = config || {};
const { message: resMessage, code, name } = data?.error || {};
const additionalData = {

buscar alternativa para no usar stateQuery

buscar alternativa para no usar stateQuery

Pongo location.href que sirve . Si se quiere implementar una solución más elegante como investigar la posibilidad de usar vue-router como un plugin en pinia o hacer un provide de useRoute() a nivel de la app e inyectarlo donde se necesite, pero, necesito más tiempo para probarlo. Para este caso con location.href es suficiente y efectivo

Pongo location.href que sirve . Si se quiere implementar una solución más elegante como investigar la posibilidad de usar vue-router como un plugin en pinia o hacer un provide de useRoute() a nivel de la app e inyectarlo donde se necesite, pero, necesito más tiempo para probarlo. Para este caso con location.href es suficiente y efectivo
path: location.href,
message: resMessage,
code,
request: request?.responseURL,
status,
name,
statusText: statusText,
config: {
url,
method,
params,
headers: confHeaders,
aborted: signal?.aborted,
version: headers?.['salix-version'],
},
};
const opts = {
actions: [
jorgep marked this conversation as resolved Outdated

privileges

privileges
{
icon: 'support_agent',
color: 'primary',
dense: true,
flat: false,
round: true,
handler: async () => {
const locale = i18n.global.t;
const reason = ref(
code == 'ACCESS_DENIED' ? locale('cau.askPrivileges') : ''
);
openConfirmationModal(
locale('cau.title'),
locale('cau.subtitle'),
async () => {
await axios.post('OsTickets/send-to-support', {
reason: reason.value,
additionalData,
});
},
null,
{
component: VnInput,
props: {
modelValue: reason,
'onUpdate:modelValue': (val) => (reason.value = val),
label: locale('cau.inputLabel'),
class: 'full-width',
required: true,
},
}
);
},
},
],
};
notify(message ?? 'globals.error', 'negative', 'error', opts);
Review

Utilizaría otro fichero distinto en boot para poner este codigo, ej. cau.js

Utilizaría otro fichero distinto en boot para poner este codigo, ej. `cau.js`
}; };
}); });

View File

@ -2,7 +2,7 @@ import { Notify } from 'quasar';
import { i18n } from 'src/boot/i18n'; import { i18n } from 'src/boot/i18n';
export default function useNotify() { export default function useNotify() {
const notify = (message, type, icon) => { const notify = (message, type, icon, opts = {}) => {
const defaultIcons = { const defaultIcons = {
warning: 'warning', warning: 'warning',
negative: 'error', negative: 'error',
@ -13,6 +13,7 @@ export default function useNotify() {
message: i18n.global.t(message), message: i18n.global.t(message),
type: type, type: type,
icon: icon ? icon : defaultIcons[type], icon: icon ? icon : defaultIcons[type],
...opts,
}); });
}; };

View File

@ -1,22 +1,29 @@
import { h } from 'vue';
import { Dialog } from 'quasar';
import VnConfirm from 'components/ui/VnConfirm.vue'; import VnConfirm from 'components/ui/VnConfirm.vue';
import { useQuasar } from 'quasar';
export function useVnConfirm() { export function useVnConfirm() {
const quasar = useQuasar(); const openConfirmationModal = (
title,
const openConfirmationModal = (title, message, promise, successFn) => { message,
quasar promise,
.dialog({ successFn,
component: VnConfirm, customHTML = {}
componentProps: { ) => {
const { component, props } = customHTML;
Dialog.create({
component: h(
VnConfirm,
{
title: title, title: title,
message: message, message: message,
promise: promise, promise: promise,
}, },
}) { customHTML: () => h(component, props) }
Review

Con la fn h se pueden pasar slots como parámetros.

Con la fn **h** se pueden pasar slots como parámetros.
.onOk(async () => { ),
if (successFn) successFn(); }).onOk(async () => {
}); if (successFn) successFn();
});
}; };
return { openConfirmationModal }; return { openConfirmationModal };

View File

@ -367,6 +367,11 @@ resetPassword:
repeatPassword: Repeat password repeatPassword: Repeat password
passwordNotMatch: Passwords don't match passwordNotMatch: Passwords don't match
passwordChanged: Password changed passwordChanged: Password changed
cau:
title: Send cau
subtitle: By sending this ticket, all the data related to the error, the section, the user, etc., are already sent.
inputLabel: Explain why this error should not appear
askPrivileges: Ask for privileges
entry: entry:
list: list:
newEntry: New entry newEntry: New entry

View File

@ -369,6 +369,11 @@ resetPassword:
repeatPassword: Repetir contraseña repeatPassword: Repetir contraseña
passwordNotMatch: Las contraseñas no coinciden passwordNotMatch: Las contraseñas no coinciden
passwordChanged: Contraseña cambiada passwordChanged: Contraseña cambiada
cau:
title: Enviar cau
subtitle: Al enviar este cau ya se envían todos los datos relacionados con el error, la sección, el usuario, etc
inputLabel: Explique el motivo por el que no deberia aparecer este fallo
askPrivileges: Solicitar permisos
entry: entry:
list: list:
newEntry: Nueva entrada newEntry: Nueva entrada

View File

@ -306,7 +306,7 @@ async function autofillBic(worker) {
</VnRow> </VnRow>
<VnRow> <VnRow>
<VnInput <VnInput
:label="t('worker.create.street')" :label="t('globals.street')"
:model-value="uppercaseStreetModel(data).get()" :model-value="uppercaseStreetModel(data).get()"
@update:model-value="uppercaseStreetModel(data).set" @update:model-value="uppercaseStreetModel(data).set"
:disable="data.isFreelance" :disable="data.isFreelance"