#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 qFormMixin from './qformMixin';
import keyShortcut from './keyShortcut';
import { i18n } from './i18n';
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 { openConfirmationModal } = useVnConfirm();
export default boot(({ app }) => {
app.mixin(qFormMixin);
@ -40,12 +45,70 @@ export default boot(({ app }) => {
}
console.error(error);
if (error instanceof CanceledError) {
if (error instanceof axios.CanceledError) {
const env = process.env.NODE_ENV;
if (env && env !== 'development') return;
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';
export default function useNotify() {
const notify = (message, type, icon) => {
const notify = (message, type, icon, opts = {}) => {
const defaultIcons = {
warning: 'warning',
negative: 'error',
@ -13,6 +13,7 @@ export default function useNotify() {
message: i18n.global.t(message),
type: 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 { useQuasar } from 'quasar';
export function useVnConfirm() {
const quasar = useQuasar();
const openConfirmationModal = (title, message, promise, successFn) => {
quasar
.dialog({
component: VnConfirm,
componentProps: {
const openConfirmationModal = (
title,
message,
promise,
successFn,
customHTML = {}
) => {
const { component, props } = customHTML;
Dialog.create({
component: h(
VnConfirm,
{
title: title,
message: message,
promise: promise,
},
})
.onOk(async () => {
if (successFn) successFn();
});
{ 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();
});
};
return { openConfirmationModal };

View File

@ -367,6 +367,11 @@ resetPassword:
repeatPassword: Repeat password
passwordNotMatch: Passwords don't match
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:
list:
newEntry: New entry

View File

@ -369,6 +369,11 @@ resetPassword:
repeatPassword: Repetir contraseña
passwordNotMatch: Las contraseñas no coinciden
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:
list:
newEntry: Nueva entrada

View File

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