* оптимизировал запросы выдачи пациентов, сохранения снапшотов
* доработал страницу отчета дежурного * переделал "действия" над пациентом * подключил виджеты на странице отчета дежурного
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user