74 lines
2.5 KiB
JavaScript
74 lines
2.5 KiB
JavaScript
import VnInput from 'src/components/common/VnInput.vue';
|
|
import { useVnConfirm } from 'src/composables/useVnConfirm';
|
|
import axios from 'axios';
|
|
import { ref } from 'vue';
|
|
import { i18n } from 'src/boot/i18n';
|
|
import useNotify from 'src/composables/useNotify.js';
|
|
|
|
export async function useCau(res, message) {
|
|
const { notify } = useNotify();
|
|
const { openConfirmationModal } = useVnConfirm();
|
|
const { config, headers, request, status, statusText, data } = res || {};
|
|
const { params, url, method, signal, headers: confHeaders } = config || {};
|
|
const { message: resMessage, code, name } = data?.error || {};
|
|
delete confHeaders?.Authorization;
|
|
|
|
const additionalData = {
|
|
path: location.hash,
|
|
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: [
|
|
{
|
|
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',
|
|
autofocus: true,
|
|
},
|
|
},
|
|
);
|
|
},
|
|
},
|
|
],
|
|
};
|
|
|
|
notify(message ?? 'globals.error', 'negative', 'error', opts);
|
|
}
|