refactor: detect unsave and confirmation of employee

This commit is contained in:
Net 2024-08-06 15:47:33 +07:00
parent 9f86229bd2
commit 1164748e1b
2 changed files with 48 additions and 0 deletions

View file

@ -408,6 +408,31 @@ async function editCustomerForm(id: string) {
customerFormState.value.editCustomerId = id; customerFormState.value.editCustomerId = id;
} }
function employeeConfirmUnsave(close = true) {
dialog({
color: 'warning',
icon: 'mdi-alert',
title: t('form.warning.title'),
actionText: t('ok'),
persistent: true,
message: t('form.warning.unsave'),
action: () => {
employeeFormStore.resetFormDataEmployee();
employeeFormState.value.editReadonly = true;
employeeFormState.value.dialogModal = !close;
},
cancel: () => {},
});
}
function employeeFormUndo(close = true) {
if (employeeFormStore.isFormDataDifferent()) {
return employeeConfirmUnsave(close);
}
employeeFormStore.resetFormDataEmployee();
employeeFormState.value.editReadonly = true;
}
function customerConfirmUnsave(close = true) { function customerConfirmUnsave(close = true) {
dialog({ dialog({
color: 'warning', color: 'warning',
@ -1838,6 +1863,18 @@ function createEmployeeForm() {
<DialogForm <DialogForm
:title="$t('form.title.create', { name: 'Employee' })" :title="$t('form.title.create', { name: 'Employee' })"
v-model:modal="employeeFormState.dialogModal" v-model:modal="employeeFormState.dialogModal"
:undo="() => employeeFormUndo(false)"
:before-close="
() => {
console.log('asd');
if (employeeFormStore.isFormDataDifferent()) {
employeeConfirmUnsave();
return true;
}
return false;
}
"
> >
<div class="q-mx-lg q-mt-lg"> <div class="q-mx-lg q-mt-lg">
<ProfileBanner <ProfileBanner

View file

@ -243,6 +243,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
isEmployeeEdit: boolean; isEmployeeEdit: boolean;
profileSubmit: boolean; profileSubmit: boolean;
formDataEmployeeSameAddr: boolean; formDataEmployeeSameAddr: boolean;
editReadonly: boolean;
infoEmployeePersonCard: { infoEmployeePersonCard: {
id: string; id: string;
img: string; img: string;
@ -275,6 +276,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
isEmployeeEdit: false, isEmployeeEdit: false,
profileSubmit: false, profileSubmit: false,
formDataEmployeeSameAddr: true, formDataEmployeeSameAddr: true,
editReadonly: false,
infoEmployeePersonCard: [], infoEmployeePersonCard: [],
formDataEmployeeOwner: undefined, formDataEmployeeOwner: undefined,
}); });
@ -367,6 +369,13 @@ export const useEmployeeForm = defineStore('form-employee', () => {
structuredClone(defaultFormData), structuredClone(defaultFormData),
); );
function isFormDataDifferent() {
return (
JSON.stringify(resetEmployeeData) !==
JSON.stringify(currentFromDataEmployee.value)
);
}
function resetFormDataEmployee(cb?: (...args: any[]) => unknown) { function resetFormDataEmployee(cb?: (...args: any[]) => unknown) {
currentFromDataEmployee.value = structuredClone(resetEmployeeData); currentFromDataEmployee.value = structuredClone(resetEmployeeData);
cb?.(); cb?.();
@ -452,5 +461,7 @@ export const useEmployeeForm = defineStore('form-employee', () => {
assignFormDataEmployee, assignFormDataEmployee,
employeeFilterOwnerBranch, employeeFilterOwnerBranch,
isFormDataDifferent,
}; };
}); });