Files

200 lines
6.4 KiB
JavaScript

import { defineStore } from 'pinia'
import axios from "axios";
import { Inertia } from '@inertiajs/inertia'
export const useReportStore = defineStore('ReportStore', {
state: () => ({
createForm: {
document_id: '',
doctor_id: '',
medium_id: '',
status: '',
body: '',
submitted_at: '',
},
loaderCreateForm: false,
is_edit_form: false,
showCreateModal: false,
errorsCreateForm: [],
is_edit_id: null,
columns: [
{
key: 'id',
title: 'شناسه',
width: 130,
},
{
key: 'document',
title: 'شناسه پرونده',
width: 200,
render: (data) => `<pre dir="ltr" class="text-right">${data.document?.code}</pre>`,
},
{
key: 'status',
title: 'وضعیت',
slot: 'status',
},
{
key: 'doctor',
title: 'پزشک',
render: (data) => data.doctor?.fullname ?? 'ثبت نشده',
},
{
key: 'submitted_at',
title: 'تاریخ ثبت',
hasSort: true,
width: 200,
render:(data) => data.submitted_at ?? 'ثبت نشده',
},
{
key: 'actions',
title: 'عملیات',
hasSort: false,
slot: true,
},
],
endpoints: {
index: '/admin/reports',
create: '/admin/reports/create',
store: '/admin/reports',
edit: (id) => `/admin/reports/${id}/edit`,
update: (id) => `/admin/reports/${id}`,
delete: (id) => `/admin/reports/${id}`,
bulkDelete: '/admin/reports-bulk-delete',
export: '/admin/reports-export-data'
}
}),
getters: {
buttonLabel: (state) => {
return state.is_edit_id ? 'ویرایش گزارش' : 'ثبت و ایجاد گزارش جدید';
},
pageTitle: (state) => {
return state.is_edit_id ? 'ویرایش گزارش' : 'افزودن گزارش جدید';
},
indexPageTitle: (state) => {
return 'نمایش همه گزارش ها';
}
},
actions: {
async create(formData) {
return new Promise((resolve, reject) => {
this.loaderCreateForm = true;
Inertia.post(this.endpoints.store, formData, {
onSuccess: (page) => {
this.loaderCreateForm = false;
this.errorsCreateForm = [];
this.resetCreateForm();
resolve(page);
},
onError: (errors) => {
this.loaderCreateForm = false;
this.errorsCreateForm = errors;
reject(errors);
}
});
});
},
async update(id, formData) {
return new Promise((resolve, reject) => {
this.loaderCreateForm = true;
Inertia.patch(this.endpoints.update(id), formData, {
onSuccess: (page) => {
this.loaderCreateForm = false;
this.errorsCreateForm = [];
this.resetCreateForm();
resolve(page);
},
onError: (errors) => {
this.loaderCreateForm = false;
this.errorsCreateForm = errors;
reject(errors);
}
});
});
},
resetCreateForm() {
this.createForm = {
document_id: '',
doctor_id: '',
medium_id: '',
status: '',
body: '',
submitted_at: null,
}
this.is_edit_id = null;
this.errorsCreateForm = [];
this.showCreateModal = false;
},
setEditData(data) {
this.is_edit_id = data.id;
Object.keys(this.createForm).forEach(field => {
if (field === 'submitted_at' && data.submitted_at) {
this.createForm[field] = data.submitted_at;
} else if (field === 'created_at' && data.created_at) {
this.createForm[field] = data.created_at;
} else {
this.createForm[field] = data[field] || '';
}
});
},
deleteRecord(id) {
return new Promise((resolve, reject) => {
axios.delete(this.endpoints.delete(id))
.then(response => {
Inertia.get(this.endpoints.index);
resolve(response);
})
.catch(error => {
reject(error);
});
});
},
bulkDelete(ids) {
return new Promise((resolve, reject) => {
axios.post(this.endpoints.bulkDelete, { ids })
.then(response => {
Inertia.get(this.endpoints.index);
resolve(response);
})
.catch(error => {
reject(error);
});
});
},
exportData(filters = {}) {
const query = new URLSearchParams(filters).toString();
window.open(`${this.endpoints.export}?${query}`, '_blank');
},
search(params) {
return Inertia.get(this.endpoints.index, params, {
preserveState: false
});
},
navigateToPage(page) {
return Inertia.get(this.endpoints.index, { page }, { preserveState: true });
},
getStatusSeverity(status) {
const statusSeverities = {
'ثبت شده': 'info',
'در حال انجام': 'warning',
'تکمیل شده': 'success',
'رد شده': 'danger',
'لغو شده': 'secondary'
};
return statusSeverities[status] || 'secondary';
}
}
})