complete Complete User Request Submission section RAD-1

This commit is contained in:
2026-01-03 19:14:30 +03:30
commit 7137ec5792
393 changed files with 152602 additions and 0 deletions
+63
View File
@@ -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 : '',
}
},
}
})
+303
View File
@@ -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 [];
},
})
+10
View File
@@ -0,0 +1,10 @@
import { defineStore } from 'pinia'
export const useGlobalStore = defineStore('GlobalStore', {
state: () => ({
current_user: {},
sidebarOpen: false
}),
actions: {
}
})
+20
View File
@@ -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: {
}
})
+164
View File
@@ -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 });
}
}
})
+286
View File
@@ -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 [];
},
}
})
+199
View File
@@ -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';
}
}
})
+164
View File
@@ -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 });
}
}
})
+100
View File
@@ -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 = [];
}
}
})
+197
View File
@@ -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 });
}
}
})