complete Complete User Request Submission section RAD-1
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
export const useAuthStore = defineStore('AuthStore', {
|
||||
state: () => ({
|
||||
loginForm:{
|
||||
email : '',
|
||||
password : '',
|
||||
remember : false,
|
||||
},
|
||||
registerForm:{
|
||||
name : '',
|
||||
email : '',
|
||||
password : '',
|
||||
password_confirmation : '',
|
||||
},
|
||||
loaderLoginForm : false,
|
||||
loaderRegisterForm : false,
|
||||
errorsLoginForm : [],
|
||||
errorsRegisterForm : [],
|
||||
}),
|
||||
actions: {
|
||||
login() {
|
||||
this.loaderLoginForm = true;
|
||||
axios.post('/admin/auth/login' , this.loginForm).then(res => {
|
||||
this.resetLoginForm();
|
||||
this.loaderLoginForm = false;
|
||||
this.errorsLoginForm = [];
|
||||
Inertia.get('/');
|
||||
}).catch(error => {
|
||||
this.loaderLoginForm = false;
|
||||
this.errorsLoginForm = error.response.data?.errors ?? [];
|
||||
});
|
||||
},
|
||||
register(){
|
||||
this.loaderRegisterForm = true;
|
||||
axios.post('/admin/auth/register' , this.registerForm).then(res => {
|
||||
this.resetRegisterForm();
|
||||
this.loaderRegisterForm = false;
|
||||
this.errorsRegisterForm = [];
|
||||
Inertia.get('/');
|
||||
}).catch(error => {
|
||||
this.loaderRegisterForm = false;
|
||||
this.errorsRegisterForm = error.response.data?.errors ?? [];
|
||||
});
|
||||
},
|
||||
resetLoginForm() {
|
||||
this.loginForm = {
|
||||
email : '',
|
||||
password : '',
|
||||
remember : false,
|
||||
}
|
||||
},
|
||||
resetRegisterForm() {
|
||||
this.registerForm = {
|
||||
name : '',
|
||||
email : '',
|
||||
password : '',
|
||||
password_confirmation : '',
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,303 @@
|
||||
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 [];
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,10 @@
|
||||
import { defineStore } from 'pinia'
|
||||
export const useGlobalStore = defineStore('GlobalStore', {
|
||||
state: () => ({
|
||||
current_user: {},
|
||||
sidebarOpen: false
|
||||
}),
|
||||
actions: {
|
||||
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,20 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
export const useMediumStore = defineStore('MediumStore', {
|
||||
state: () => ({
|
||||
mediums: [],
|
||||
loader: false,
|
||||
selected: null,
|
||||
paginate: {
|
||||
total: null,
|
||||
current_page: null,
|
||||
last_page: null,
|
||||
links: null,
|
||||
per_page: null,
|
||||
},
|
||||
}),
|
||||
actions: {
|
||||
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,164 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
export const usePermissionStore = defineStore('permissionStore', {
|
||||
state: () => ({
|
||||
createForm: {
|
||||
datetime: '',
|
||||
name : '',
|
||||
label : '',
|
||||
parent_id : '',
|
||||
},
|
||||
|
||||
loaderCreateForm: false,
|
||||
is_edit_form: false,
|
||||
errorsCreateForm: [],
|
||||
is_edit_id: null,
|
||||
|
||||
columns: [
|
||||
{
|
||||
key: 'id',
|
||||
title: 'شناسه',
|
||||
style: '!font-bold !text-sm',
|
||||
width: 60,
|
||||
},
|
||||
{
|
||||
key: 'name',
|
||||
title: 'نام مقام',
|
||||
},
|
||||
{
|
||||
key: 'label',
|
||||
title: 'نام فارسی',
|
||||
},
|
||||
{
|
||||
key: 'created_at',
|
||||
title: 'تاریخ ایجاد مقام',
|
||||
hasSort: true,
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: 'عملیات',
|
||||
hasSort: false,
|
||||
slot: true,
|
||||
width: 120
|
||||
},
|
||||
],
|
||||
endpoints: {
|
||||
index: '/admin/permissions',
|
||||
create: '/admin/permissions/create',
|
||||
store: '/admin/permissions',
|
||||
edit: (id) => `/admin/permissions/${id}/edit`,
|
||||
update: (id) => `/admin/permissions/${id}`,
|
||||
delete: (id) => `/admin/permissions/${id}`,
|
||||
bulkDelete: '/admin/permissions-bulk-delete',
|
||||
export: '/admin/permissions-export-data'
|
||||
}
|
||||
}),
|
||||
|
||||
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;
|
||||
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 = {
|
||||
datetime: '',
|
||||
name : '',
|
||||
label : '',
|
||||
parent_id : '',
|
||||
}
|
||||
this.is_edit_id = null;
|
||||
this.errorsCreateForm = [];
|
||||
},
|
||||
|
||||
setEditData(data) {
|
||||
this.is_edit_id = data.id;
|
||||
|
||||
Object.keys(this.createForm).forEach(field => {
|
||||
if (field === 'image' && data.profile_url) {
|
||||
this.createForm[field] = { url: data.profile_url };
|
||||
} else if (field === 'datetime' && 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 });
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,286 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
|
||||
export const usePetStore = defineStore('PetStore', {
|
||||
state: () => ({
|
||||
createForm: {
|
||||
name: '',
|
||||
type: '',
|
||||
gender: '',
|
||||
breed: '',
|
||||
weight: '',
|
||||
sterilized: '',
|
||||
birthday: '',
|
||||
owner_id: '',
|
||||
},
|
||||
|
||||
typeOptions: [
|
||||
{ label: 'سگ', value: 'سگ' },
|
||||
{ label: 'گربه', value: 'گربه' },
|
||||
{ label: 'پرنده', value: 'پرنده' },
|
||||
{ label: 'خرگوش', value: 'خرگوش' },
|
||||
{ label: 'همستر', value: 'همستر' },
|
||||
{ label: 'خوکچه هندی', value: 'خوکچه هندی' },
|
||||
{ label: 'لاک پشت', value: 'لاک پشت' },
|
||||
{ label: 'مار', value: 'مار' },
|
||||
{ label: 'مارمولک', value: 'مارمولک' },
|
||||
{ label: 'سایر', value: 'سایر' },
|
||||
],
|
||||
genderOptions: [
|
||||
{ label: 'نر', value: 'نر' },
|
||||
{ label: 'ماده', value: 'ماده' },
|
||||
{ label: 'نامشخص', value: 'نامشخص' },
|
||||
],
|
||||
sterilizedOptions: [
|
||||
{ label: 'عقیم شده', value: true },
|
||||
{ label: 'عقیم نشده', value: false },
|
||||
],
|
||||
loaderCreateForm: false,
|
||||
is_edit_form: false,
|
||||
errorsCreateForm: [],
|
||||
is_edit_id: null,
|
||||
filters: {},
|
||||
|
||||
columns: [
|
||||
{
|
||||
key: 'name',
|
||||
title: 'نام',
|
||||
},
|
||||
{
|
||||
key: 'type',
|
||||
title: 'نوع',
|
||||
filter: {
|
||||
type: 'multiselect',
|
||||
options: [
|
||||
{ label: 'سگ', value: 'سگ' },
|
||||
{ label: 'گربه', value: 'گربه' },
|
||||
{ label: 'پرنده', value: 'پرنده' },
|
||||
{ label: 'خرگوش', value: 'خرگوش' },
|
||||
{ label: 'همستر', value: 'همستر' },
|
||||
{ label: 'خوکچه هندی', value: 'خوکچه هندی' },
|
||||
{ label: 'لاک پشت', value: 'لاک پشت' },
|
||||
{ label: 'مار', value: 'مار' },
|
||||
{ label: 'مارمولک', value: 'مارمولک' },
|
||||
{ label: 'سایر', value: 'سایر' },
|
||||
],
|
||||
placeholder: 'انتخاب نوع...'
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'gender',
|
||||
title: 'جنسیت',
|
||||
slot: 'gender',
|
||||
filter: {
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'نر', value: 'نر' },
|
||||
{ label: 'ماده', value: 'ماده' },
|
||||
{ label: 'نامشخص', value: 'نامشخص' },
|
||||
],
|
||||
placeholder: 'انتخاب جنسیت...'
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'breed',
|
||||
title: 'نژاد',
|
||||
render: (data) => data.breed ?? 'ثبت نشده',
|
||||
},
|
||||
{
|
||||
key: 'weight',
|
||||
title: 'وزن',
|
||||
render: (data) => data.weight + ' کیلوگرم' ?? 'ثبت نشده',
|
||||
},
|
||||
{
|
||||
key: 'sterilized',
|
||||
title: 'عقیمسازی',
|
||||
slot: 'sterilized',
|
||||
render: (data) => this.getSterilized(data.sterilized),
|
||||
},
|
||||
{
|
||||
key: 'age',
|
||||
title: 'سن',
|
||||
hasSort: true,
|
||||
width: 140,
|
||||
render:(data) => data?.age ?? 'ثبت نشده',
|
||||
},
|
||||
{
|
||||
key: 'owner',
|
||||
title: 'صاحب',
|
||||
width: 200,
|
||||
slot: 'owner',
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: 'عملیات',
|
||||
hasSort: false,
|
||||
slot: true,
|
||||
},
|
||||
],
|
||||
endpoints: {
|
||||
index: '/admin/pets',
|
||||
create: '/admin/pets/create',
|
||||
store: '/admin/pets',
|
||||
edit: (id) => `/admin/pets/${id}/edit`,
|
||||
update: (id) => `/admin/pets/${id}`,
|
||||
delete: (id) => `/admin/pets/${id}`,
|
||||
bulkDelete: '/admin/pets-bulk-delete',
|
||||
export: '/admin/pets-export-data'
|
||||
}
|
||||
}),
|
||||
|
||||
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;
|
||||
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 = {
|
||||
name: '',
|
||||
type: '',
|
||||
gender: '',
|
||||
breed: '',
|
||||
weight: '',
|
||||
sterilized: '',
|
||||
birthday: '',
|
||||
owner_id: '',
|
||||
}
|
||||
this.is_edit_id = null;
|
||||
this.errorsCreateForm = [];
|
||||
},
|
||||
|
||||
setEditData(data) {
|
||||
this.is_edit_id = data.id;
|
||||
Object.keys(this.createForm).forEach(field => {
|
||||
if (field === 'sterilized') {
|
||||
this.createForm[field] = data.sterilized !== null && data.sterilized !== undefined ? data.sterilized : '';
|
||||
} 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 });
|
||||
},
|
||||
|
||||
getSterilized(sterilized) {
|
||||
const sterilizedMap = {
|
||||
true: 'info',
|
||||
false: 'secondary'
|
||||
};
|
||||
return sterilizedMap[sterilized] || 'secondary';
|
||||
},
|
||||
|
||||
updateFilters(newFilters) {
|
||||
this.filters = { ...newFilters };
|
||||
this.search({ ...this.filters });
|
||||
},
|
||||
|
||||
clearFilters() {
|
||||
this.filters = {};
|
||||
this.search();
|
||||
},
|
||||
|
||||
updateFilterValue(key, value) {
|
||||
this.filters[key] = value;
|
||||
},
|
||||
|
||||
applyFilters() {
|
||||
this.search({ ...this.filters });
|
||||
},
|
||||
|
||||
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 [];
|
||||
},
|
||||
}
|
||||
})
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,164 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
export const useRoleStore = defineStore('roleStore', {
|
||||
state: () => ({
|
||||
createForm: {
|
||||
datetime: '',
|
||||
name : '',
|
||||
label : '',
|
||||
selectedPermissionIds : {},
|
||||
},
|
||||
|
||||
loaderCreateForm: false,
|
||||
is_edit_form: false,
|
||||
errorsCreateForm: [],
|
||||
is_edit_id: null,
|
||||
|
||||
columns: [
|
||||
{
|
||||
key: 'id',
|
||||
title: 'شناسه',
|
||||
style: '!font-bold !text-sm',
|
||||
width: 60,
|
||||
},
|
||||
{
|
||||
key: 'name',
|
||||
title: 'نام مقام',
|
||||
},
|
||||
{
|
||||
key: 'label',
|
||||
title: 'نام فارسی',
|
||||
},
|
||||
{
|
||||
key: 'created_at',
|
||||
title: 'تاریخ ایجاد مقام',
|
||||
hasSort: true,
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: 'عملیات',
|
||||
hasSort: false,
|
||||
slot: true,
|
||||
width: 120
|
||||
},
|
||||
],
|
||||
endpoints: {
|
||||
index: '/admin/roles',
|
||||
create: '/admin/roles/create',
|
||||
store: '/admin/roles',
|
||||
edit: (id) => `/admin/roles/${id}/edit`,
|
||||
update: (id) => `/admin/roles/${id}`,
|
||||
delete: (id) => `/admin/roles/${id}`,
|
||||
bulkDelete: '/admin/roles-bulk-delete',
|
||||
export: '/admin/roles-export-data'
|
||||
}
|
||||
}),
|
||||
|
||||
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;
|
||||
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 = {
|
||||
datetime: '',
|
||||
name : '',
|
||||
label : '',
|
||||
selectedPermissionIds : {},
|
||||
}
|
||||
this.is_edit_id = null;
|
||||
this.errorsCreateForm = [];
|
||||
},
|
||||
|
||||
setEditData(data) {
|
||||
this.is_edit_id = data.id;
|
||||
|
||||
Object.keys(this.createForm).forEach(field => {
|
||||
if (field === 'image' && data.profile_url) {
|
||||
this.createForm[field] = { url: data.profile_url };
|
||||
} else if (field === 'datetime' && 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 });
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,100 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
|
||||
export const useSessionStore = defineStore('SessionStore', {
|
||||
state: () => ({
|
||||
loader: false,
|
||||
bulkLoader: false,
|
||||
selectedSessions: [],
|
||||
sessions: [],
|
||||
|
||||
columns: [
|
||||
{
|
||||
key: 'id',
|
||||
title: 'ایدی',
|
||||
style: '!font-medium !text-sm',
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
key: 'ip',
|
||||
title: 'آی پی دستگاه',
|
||||
style: '!font-medium !text-sm',
|
||||
width: 120,
|
||||
},
|
||||
{
|
||||
key: 'user_agent',
|
||||
title: 'نام دستگاه',
|
||||
style: '!font-medium !text-sm',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
key: 'last_activity',
|
||||
title: 'آخرین فعالیت',
|
||||
style: '!font-medium !text-xs',
|
||||
width: 140,
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: 'عملیات',
|
||||
hasSort: false,
|
||||
slot: true,
|
||||
width: 80,
|
||||
},
|
||||
],
|
||||
|
||||
endpoints: {
|
||||
index: '/admin/setting-profile/sessions',
|
||||
delete: (id) => `/admin/setting-profile/sessions/${id}`,
|
||||
bulkDelete: '/admin/setting-profile/sessions-bulk-delete',
|
||||
}
|
||||
}),
|
||||
|
||||
getters: {
|
||||
indexPageTitle: () => {
|
||||
return 'نمایش نشستهای فعال';
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
setSessions(sessions) {
|
||||
this.sessions = sessions;
|
||||
},
|
||||
|
||||
deleteSession(sessionId) {
|
||||
this.loader = true;
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.delete(this.endpoints.delete(sessionId))
|
||||
.then(response => {
|
||||
Inertia.get(this.endpoints.index);
|
||||
resolve(response);
|
||||
})
|
||||
.catch(error => {
|
||||
this.loader = false;
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
bulkDeleteSessions(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);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
setSelectedSessions(sessions) {
|
||||
this.selectedSessions = sessions;
|
||||
},
|
||||
|
||||
clearSelectedSessions() {
|
||||
this.selectedSessions = [];
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,197 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import axios from "axios";
|
||||
import { Inertia } from '@inertiajs/inertia'
|
||||
|
||||
export const useUserStore = defineStore('UserStore', {
|
||||
state: () => ({
|
||||
createForm: {
|
||||
datetime: '',
|
||||
role: {},
|
||||
words: {},
|
||||
username: '',
|
||||
email: '',
|
||||
fullname: '',
|
||||
phone: '',
|
||||
password: '',
|
||||
level: 'پزشک',
|
||||
image: '',
|
||||
password_confirmation: '',
|
||||
},
|
||||
|
||||
loaderCreateForm: false,
|
||||
is_edit_form: false,
|
||||
errorsCreateForm: [],
|
||||
is_edit_id: null,
|
||||
|
||||
columns: [
|
||||
{
|
||||
key: 'id',
|
||||
title: 'شناسه',
|
||||
style: '!font-bold !text-sm',
|
||||
width: 60,
|
||||
},
|
||||
{
|
||||
key: 'username',
|
||||
title: 'نام کاربری',
|
||||
},
|
||||
// {
|
||||
// key: 'email',
|
||||
// title: 'ایمیل',
|
||||
// },
|
||||
{
|
||||
key: 'phone',
|
||||
title: 'شماره تماس',
|
||||
render: (data) => `<pre dir="ltr" class="text-right">${data.phone}</pre>`,
|
||||
},
|
||||
{
|
||||
key: 'fullname',
|
||||
title: 'نام و نام خانوادگی',
|
||||
width: 200,
|
||||
render: (data) => data.fullname,
|
||||
},
|
||||
{
|
||||
key: 'level',
|
||||
title: 'سطح',
|
||||
},
|
||||
{
|
||||
key: 'created_at',
|
||||
title: 'تاریخ عضویت',
|
||||
hasSort: true,
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: 'عملیات',
|
||||
hasSort: false,
|
||||
slot: true,
|
||||
},
|
||||
],
|
||||
levelOptions: [
|
||||
'مدیر',
|
||||
'پزشک',
|
||||
'سرپرست',
|
||||
],
|
||||
endpoints: {
|
||||
index: '/admin/users',
|
||||
create: '/admin/users/create',
|
||||
store: '/admin/users',
|
||||
edit: (id) => `/admin/users/${id}/edit`,
|
||||
update: (id) => `/admin/users/${id}`,
|
||||
delete: (id) => `/admin/users/${id}`,
|
||||
bulkDelete: '/admin/users-bulk-delete',
|
||||
export: '/admin/users-export-data'
|
||||
}
|
||||
}),
|
||||
|
||||
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;
|
||||
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 = {
|
||||
username: '',
|
||||
role: {},
|
||||
email: '',
|
||||
fullname: '',
|
||||
phone: '',
|
||||
image: '',
|
||||
password: '',
|
||||
level: 'پزشک',
|
||||
datetime: '',
|
||||
password_confirmation: '',
|
||||
}
|
||||
this.is_edit_id = null;
|
||||
this.errorsCreateForm = [];
|
||||
},
|
||||
|
||||
setEditData(data) {
|
||||
this.is_edit_id = data.id;
|
||||
|
||||
Object.keys(this.createForm).forEach(field => {
|
||||
if (field === 'image' && data.profile_url) {
|
||||
this.createForm[field] = { url: data.profile_url };
|
||||
} else if (field === 'datetime' && 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 });
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user