* оптимизировал запросы выдачи пациентов, сохранения снапшотов

* доработал страницу отчета дежурного
* переделал "действия" над пациентом
* подключил виджеты на странице отчета дежурного
This commit is contained in:
brusnitsyn
2026-05-08 17:04:56 +09:00
parent 6cf1ffbb2b
commit 90e0d04dfd
17 changed files with 818 additions and 292 deletions

View File

@@ -1,59 +1,115 @@
<script setup>
import {NSpace, NDropdown, NButton, NIcon} from 'naive-ui'
import {TbExternalLink, TbEyePlus, TbClick} from "vue-icons-plus/tb"
import {computed, h} from "vue";
import { NSpace, NDropdown, NButton, NIcon } from 'naive-ui'
import {TbExternalLink, TbEyePlus, TbMessage, TbClick, TbEyeClosed} from "vue-icons-plus/tb"
import { computed, h } from "vue"
import { useDropdownActions } from '../../../../Composables/useDropdownActions.js'
const props = defineProps({
row: Object,
isMis: Boolean,
isAddObservable: Boolean
isAddObservable: Boolean,
isRemoveObservable: Boolean,
isAddObservableComment: Boolean,
onMisClick: Function,
onAddObservable: Function,
onAddObservableComment: Function,
onRemoveObservable: Function,
})
const emits = defineEmits(['addObservable', 'addObservableComment', 'removeObservable'])
const renderIcon = (icon) => {
return () => h(
NIcon,
{},
{
default: () => h(icon)
}
)
return () => h(NIcon, {}, { default: () => h(icon) })
}
const actions = computed(() => ([
// Описываем группы действий
const actionGroups = computed(() => [
{
label: 'Просмотреть в МИС',
key: 'mis',
icon: renderIcon(TbExternalLink),
show: props.isMis
key: 'external', // ключ группы для идентификатора
items: [
{
label: 'Просмотреть в МИС',
key: 'mis',
icon: TbExternalLink,
if: props.isMis
}
]
},
{
type: 'divider',
key: 'd1',
show: props.isMis && props.isAddObservable
key: 'actions',
items: [
{
label: 'Добавить на контроль',
key: 'add-observable',
icon: TbEyePlus,
if: props.isAddObservable
},
{
label: 'Добавить комментарий',
key: 'add-observable-comment',
icon: TbMessage,
if: props.isAddObservableComment
}
]
},
{
label: 'Добавить в наблюдение',
key: 'add-observable',
icon: renderIcon(TbEyePlus),
show: props.isAddObservable
},
]))
key: 'danger',
items: [
{
label: 'Снять с контроля',
key: 'remove-observable',
icon: TbEyeClosed,
if: props.isRemoveObservable
}
]
}
])
// Получаем плоский массив опций с разделителями
const actions = useDropdownActions(actionGroups.value, renderIcon)
const onOpenMis = () => {
const id = props.row.id
window.open(`https://stationar.amurzdrav.ru/prod/statist/edit/card/${id}`, '_blank')
if (props.onMisClick) {
props.onMisClick(props.row)
} else {
const id = props.row.id
window.open(`https://stationar.amurzdrav.ru/prod/statist/edit/card/${id}`, '_blank')
}
}
const onSelectOption = (key, option) => {
switch (key) {
case 'mis': onOpenMis()
break
const onSelectOption = (key) => {
const handlers = {
'mis': () => {
onOpenMis()
props.onMisClick?.(props.row)
},
'add-observable': () => {
// props.onAddObservable?.(props.row)
emits('addObservable', props.row)
},
'add-comment': () => {
// props.onAddObservableComment?.(props.row)
emits('onAddObservableComment', props.row)
},
'remove-observable': () => {
// props.onRemoveObservable?.(props.row)
emits('removeObservable', props.row)
},
}
handlers[key]?.()
}
</script>
<template>
<NSpace size="small" justify="end">
<NDropdown size="small" trigger="click" placement="bottom-end" :options="actions" @select="onSelectOption">
<NDropdown
size="small"
trigger="click"
placement="bottom-end"
:options="actions"
@select="onSelectOption"
>
<NButton secondary size="tiny">
<template #icon>
<TbClick />
@@ -63,7 +119,3 @@ const onSelectOption = (key, option) => {
</NDropdown>
</NSpace>
</template>
<style scoped>
</style>

View File

@@ -13,7 +13,7 @@ const firstOperation = computed(() => props.operations[0])
<template>
<NTooltip v-if="operations.length" :arrow="false">
<template #trigger>
<div class="absolute inset-0 p-2 pt-2.5" @click="emits('click', operations)">
<div class="absolute inset-0 p-2 pt-2.5 cursor-pointer" @click="emits('click', operations)">
{{ firstOperation?.code_service }}
</div>
</template>