Files
radicall/resources/js/Admin/store/Document.js
T

304 lines
11 KiB
JavaScript

import { defineStore } from 'pinia'
import axios from "axios";
import { Inertia } from '@inertiajs/inertia'
export const useDocumentStore = defineStore('DocumentStore', {
state: () => ({
createForm: {
modality: '',
status: '',
priority: '',
note: '',
pet_id: '',
user_id: '',
submitted_at: '',
scan_date: '',
processing_deadline: '',
primary_files: [],
history_files: [],
},
loaderCreateForm: false,
is_edit_form: false,
errorsCreateForm: [],
is_edit_id: null,
columns: [
{
key: 'code',
title: 'شناسه پرونده',
width: 130,
},
{
key: 'modality',
title: 'نوع درخواست',
width: 130,
render: (data) => `<pre dir="ltr" class="text-right">${data.modality}</pre>`,
},
{
key: 'status',
title: 'وضعیت',
slot: 'status',
filter: {
type: 'dropdown',
options: [
{ label: 'ثبت شده', value: 'Registered' },
{ label: 'در حال انجام', value: 'InProgress' },
{ label: 'تکمیل شده', value: 'Completed' },
{ label: 'رد شده', value: 'Rejected' },
{ label: 'لغو شده', value: 'Cancelled' }
],
placeholder: 'انتخاب وضعیت...'
}
},
{
key: 'pet',
title: 'کیس',
slot: 'pet',
filter: {
type: 'dropdown',
dynamic: true,
search: true,
url: '/admin/pets-options',
placeholder: 'انتخاب کیس...'
}
},
{
key: 'requester',
title: 'درخواست دهنده',
width: 200,
slot: 'requester',
},
{
key: 'priority',
title: 'اولویت',
slot: 'priority',
filter: {
type: 'dropdown',
options: [
{ label: 'عادی', value: 'Medium' },
{ label: 'اورژانسی', value: 'High' },
],
placeholder: 'انتخاب اولویت...'
}
},
{
key: 'submitted_at',
title: 'تاریخ ثبت',
hasSort: true,
width: 200,
render:(data) => data.submitted_at ?? 'ثبت نشده',
},
{
key: 'processing_deadline',
title: 'تاریخ مهلت گزارش',
hasSort: true,
width: 200,
render:(data) => data.processing_deadline ?? 'ثبت نشده',
},
{
key: 'actions',
title: 'عملیات',
hasSort: false,
slot: true,
},
],
endpoints: {
index: '/admin/documents',
create: '/admin/documents/create',
store: '/admin/documents',
edit: (id) => `/admin/documents/${id}/edit`,
update: (id) => `/admin/documents/${id}`,
delete: (id) => `/admin/documents/${id}`,
bulkDelete: '/admin/documents-bulk-delete',
export: '/admin/documents-export-data'
},
statusOptions: [
{ label: 'ثبت شده', value: 'Registered' },
{ label: 'در حال انجام', value: 'InProgress' },
{ label: 'تکمیل شده', value: 'Completed' },
{ label: 'رد شده', value: 'Rejected' },
{ label: 'لغو شده', value: 'Cancelled' },
],
priorityOptions: [
{ label: 'عادی', value: 'Medium' },
{ label: 'اورژانسی', value: 'High' },
],
modalityOptions: [
{ label: 'CT', value: 'CT' },
{ label: 'MRI', value: 'MRI' },
{ label: 'X-Ray', value: 'X-Ray' },
{ label: 'Ultrasound', value: 'Ultrasound' },
{ label: 'PET', value: 'PET' },
{ label: 'other', value: 'Other' },
],
petOptions: [],
}),
getters: {
buttonLabel: (state) => {
return state.is_edit_id ? 'ویرایش پرونده' : 'ثبت و ایجاد پرونده جدید';
},
pageTitle: (state) => {
return state.is_edit_id ? 'ویرایش پرونده' : 'افزودن پرونده جدید';
},
indexPageTitle: (state) => {
return 'نمایش همه پرونده ها';
},
},
actions: {
update_and_store() {
const url = this.is_edit_id ?
this.endpoints.update(this.is_edit_id) :
this.endpoints.store;
const method = this.is_edit_id ? 'patch' : 'post';
this.loaderCreateForm = true;
this.createForm.primary_files = this.createForm.primary_files.map(file => file.id);
this.createForm.history_files = this.createForm.history_files.map(file => file.id);
axios({
method: method,
url: url,
data: this.createForm
}).then(res => {
this.errorsCreateForm = []
this.loaderCreateForm = false;
if (this.is_edit_id) {
Inertia.get(this.endpoints.edit(this.is_edit_id));
} else {
this.resetCreateForm();
Inertia.get(this.endpoints.create);
}
}).catch(error => {
this.loaderCreateForm = false;
this.errorsCreateForm = error.response.data?.errors ?? [];
});
},
resetCreateForm() {
this.createForm = {
modality: '',
status: '',
priority: '',
note: '',
pet_id: '',
user_id: '',
submitted_at: '',
scan_date: '',
processing_deadline: '',
primary_files: [],
history_files: [],
}
this.is_edit_id = null;
this.errorsCreateForm = [];
},
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 === 'scan_date' && data.scan_date) {
this.createForm[field] = data.scan_date;
} else if (field === 'processing_deadline' && data.processing_deadline) {
this.createForm[field] = data.processing_deadline;
} else if (field === 'created_at' && data.created_at) {
this.createForm[field] = data.created_at;
} else if (field === 'primary_files' && data.primary_files) {
this.createForm[field] = data.primary_files;
} else if (field === 'history_files' && data.history_files) {
this.createForm[field] = data.history_files;
} 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';
},
getPrioritySeverity(priority) {
const prioritySeverities = {
'عادی': 'info',
'اورژانسی': 'danger'
};
return prioritySeverities[priority] || 'secondary';
},
convertFiltersToArrayParams(filters) {
const params = {};
Object.keys(filters).forEach(key => {
if (Array.isArray(filters[key]) && filters[key].length > 0) {
filters[key].forEach((value, index) => {
params[`${key}[${index}]`] = value;
});
} else if (!Array.isArray(filters[key]) && filters[key]) {
params[key] = filters[key];
}
});
return params;
},
},
parseStringToArray(value) {
if (Array.isArray(value)) {
return value.filter(item => item !== '' && item != null);
}
if (value && typeof value === 'string' && value.trim() !== '') {
return value.split(',').map(item => item.trim()).filter(item => item !== '');
}
return [];
},
})