complete Complete User Request Submission section RAD-1
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
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';
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user