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 addRowNumbers = (data, page = 1, perPage = 15) => { if (!Array.isArray(data)) return data const startFrom = ((page - 1) * perPage) + 1 return data.map((item, index) => ({ ...item, num: startFrom + index })) } 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, addRowNumbers, } })