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) => `
${data.document?.code}
`, }, { 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'; } } })