Files
onboard/resources/js/Stores/report.js
brusnitsyn 10fb138c30 * работа над функционалом автоматического заполнения
* исправил фантомный сдвиг даты
* переделал получение ФИО врачей из отделений
* добавил возможность поиска врача
* переписал сохранение отчета
2026-02-05 17:11:43 +09:00

217 lines
6.2 KiB
JavaScript

import {defineStore} from "pinia";
import {useTimestamp} from "@vueuse/core";
import {computed, ref} from "vue";
import {router} from "@inertiajs/vue3";
export const useReportStore = defineStore('reportStore', () => {
const timestampNow = useTimestamp()
const _timestampCurrent = ref(null)
const timestampCurrent = computed({
get: () => {
if (_timestampCurrent.value === null)
return timestampNow.value
return _timestampCurrent.value
},
set: (value) => {
_timestampCurrent.value = value
}
})
const timestampCurrentRange = ref([null, null])
const dataOnReport = ref(null)
// Открытие collapse из ReportSectionItem
const openedCollapsible = ref([])
const reportInfo = ref({
userId: null
})
const isLoadReportInfo = ref(false)
const patientColumns = [
{
title: '№',
width: '80',
key: 'num'
},
{
title: 'ФИО',
width: '320',
key: 'fullname'
},
{
title: 'Возраст',
key: 'age'
},
{
title: 'Дата рождения',
key: 'birth_date'
},
{
title: 'Диагноз',
key: 'mkb.ds'
}
]
const patientsData = ref({
plan: [],
emergency: [],
observation: [],
outcome: []
})
const reportForm = ref({})
// Пользователи которые находятся в том же отделении что и авторизованный пользователь
const departmentUsers = ref([])
// Нежелательные события
const unwantedEvents = ref([])
const getColumnsByKey = (keys) => {
const result = []
for (const key of keys) {
const column = patientColumns.find(item => item.key === key)
result.push(column)
}
return result
}
const sendReportForm = (assignForm) => {
const form = {
metrics: reportForm.value,
observationPatients: patientsData.value['observation'],
unwantedEvents: unwantedEvents.value,
dates: [
timestampCurrentRange.value[0],
timestampCurrentRange.value[1]
],
userId: reportInfo.value.report.userId,
reportId: reportInfo.value.report.report_id,
...assignForm
}
router.post('/report', form, {
onSuccess: () => {
window.$message.success('Отчет сохранен')
resetReportForm()
}
})
// axios.post('/api/report', form)
// .then(r => {
// window.$message.success('Отчет сохранен')
// resetReportForm()
// router.visit('/')
// })
}
const resetReportForm = () => {
reportForm.value = {}
unwantedEvents.value = []
patientsData.value.observation = []
}
const $reset = () => {
}
const getReportInfo = async () => {
isLoadReportInfo.value = true
const queryParams = {
userId: reportInfo.value.userId
}
await axios.get(`/api/report`, {
params: queryParams
})
.then((res) => {
reportInfo.value = {
...reportInfo.value,
...res.data
}
reportForm.value.metrika_item_3 = reportInfo.value.department?.recipientCount
reportForm.value.metrika_item_7 = reportInfo.value.department?.extractCount
reportForm.value.metrika_item_8 = reportInfo.value.department?.currentCount
reportForm.value.metrika_item_9 = reportInfo.value.department?.deadCount
reportForm.value.metrika_item_10 = reportInfo.value.department?.surgicalCount[1]
reportForm.value.metrika_item_11 = reportInfo.value.department?.surgicalCount[0]
unwantedEvents.value = reportInfo.value.report.unwantedEvents
timestampCurrentRange.value = [
reportInfo.value.dates.startAt,
reportInfo.value.dates.endAt,
]
})
.finally(() => {
isLoadReportInfo.value = false
})
}
const getDataOnReportDate = async (dateRange) => {
isLoadReportInfo.value = true
timestampCurrentRange.value = dateRange
openedCollapsible.value = []
patientsData.value = {
plan: [],
emergency: [],
observation: [],
outcome: []
}
const queryParams = {
userId: reportInfo.value.userId,
startAt: timestampCurrentRange.value[0],
endAt: timestampCurrentRange.value[1],
}
await axios.get(`/api/report`, {
params: queryParams
})
.then((res) => {
reportInfo.value = {
...reportInfo.value,
...res.data
}
reportForm.value.metrika_item_3 = reportInfo.value.department?.recipientCount
reportForm.value.metrika_item_7 = reportInfo.value.department?.extractCount
reportForm.value.metrika_item_8 = reportInfo.value.department?.currentCount
unwantedEvents.value = reportInfo.value.report.unwantedEvents
timestampCurrentRange.value = [
reportInfo.value.dates.startAt,
reportInfo.value.dates.endAt,
]
})
.finally(() => {
isLoadReportInfo.value = false
})
}
return {
timestampNow,
timestampCurrent,
timestampCurrentRange,
isLoadReportInfo,
dataOnReport,
patientColumns,
patientsData,
reportInfo,
reportForm,
departmentUsers,
unwantedEvents,
openedCollapsible,
getColumnsByKey,
getDataOnReportDate,
getReportInfo,
sendReportForm,
resetReportForm,
}
})