123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <template>
- <div style="width: 215px">
- <el-input v-model="filterText" placeholder="节点过滤"
- style="width: 100%"
- @input="filterChange" clearable/>
- <el-radio-group v-model="templateType" @change="typeChange">
- <el-radio-button :disabled="!editor" :label="0">全院模板</el-radio-button>
- <el-radio-button :disabled="!editor" :label="1">科室模板</el-radio-button>
- <el-radio-button :label="2">患者数据</el-radio-button>
- </el-radio-group>
- <div :style="{maxHeight : maxHeight - 100 + 'px'}"
- style="overflow: auto; "
- class="down-tree">
- <el-tree :data="treeData"
- :props="defaultProps"
- @node-click="handleNodeClick"
- node-key="_id"
- ref="treeRef"
- highlight-current
- :filter-node-method="filterNode"
- default-expand-all>
- <template #default="{ node, data }">
- <el-icon v-if="data.submit">
- <Lock/>
- </el-icon>
- <el-icon v-else>
- <Folder v-if="data.children"/>
- <Document v-else/>
- </el-icon>
- <span :title="fileName(data)">
- {{ fileName(data) }}
- </span>
- </template>
- </el-tree>
- </div>
- </div>
- </template>
- <script setup name='EmrSidebar'>
- import {
- getEmrTree,
- getPatientDataTree,
- queryWhetherThePatientHasASpecifiedMedicalRecord
- } from "@/api/zhu-yuan-yi-sheng/emr-patient";
- import {BizException, ExceptionEnum} from "@/utils/BizException";
- import {emrConfig} from '@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-init'
- import {getWardsApi} from "@/api/login";
- import {stringIsBlank} from "@/utils/blank-utils";
- const props = defineProps({
- maxHeight: {
- type: Number
- },
- huanZheXinXi: {
- type: Object
- }
- })
- let editor = emrConfig.value.editor
- const emit = defineEmits(['nodeClick', 'typeChange', 'patientMedicalRecord'])
- let returnData = $ref({
- emrTree: [],
- patientTree: []
- })
- let filterText = $ref('')
- let treeRef = $ref('')
- let key = ''
- let wardList = []
- const defaultProps = {
- children: 'children',
- label: 'name',
- }
- let templateType = $ref(0)
- const treeData = computed(() => {
- switch (templateType) {
- case 0 :
- return returnData.emrTree;
- case 1:
- return [];
- case 2:
- return returnData.patientTree;
- }
- })
- const handleNodeClick = async (val, property, event) => {
- let temp = {}
- if (templateType === 0) {
- temp = {
- documentId: null,
- categoryCode: val.code,
- categoryId: val._id,
- patientId: null,
- name: val.name,
- createId: null
- }
- if (!wardList.includes(props.huanZheXinXi.ward)) {
- BizException(ExceptionEnum.LOGICAL_ERROR, "无法创建病历,患者不属于您的科室")
- }
- } else if (templateType === 2) {
- temp = {
- documentId: val.emrDocumentId,
- categoryCode: val.emrCategoryCode,
- categoryId: null,
- patientId: null,
- name: val.name ? val.name : val.emrName,
- createId: val.createId
- }
- }
- let str = JSON.stringify(val)
- if (val.children) {
- return
- }
- if (val.labels) {
- // 根据 这个编码来限制是不是唯一一个
- if (val.labels.includes('唯一') && templateType !== 2) {
- let flag = await queryWhetherThePatientHasASpecifiedMedicalRecord({
- patNo: props.huanZheXinXi.inpatientNo,
- times: props.huanZheXinXi.admissTimes,
- emrCategoryCode: val.code
- })
- if (flag) {
- BizException(ExceptionEnum.LOGICAL_ERROR, '此病历只能创建一次。')
- }
- }
- }
- if (val.jump) {
- temp.code = val.code
- temp.value = val.value
- emit('nodeClick', temp, true, templateType);
- key = str
- } else {
- if (key !== str) {
- key = str
- emit('nodeClick', temp, false, templateType);
- }
- }
- }
- const typeChange = (val) => {
- emit("typeChange", val)
- }
- const queryHistory = async (times) => {
- templateType = 2
- returnData.patientTree = await getPatientDataTree(props.huanZheXinXi.inpatientNo, times)
- }
- const filterChange = (val) => {
- treeRef.filter(val)
- }
- const filterNode = (value, data) => {
- if (!value) return true
- return data.name.includes(value)
- }
- const changeTemplateType = (val) => {
- templateType = val
- typeChange(val)
- }
- const deleteTheSpecifiedNode = (id) => {
- for (let i = 0, len = returnData.patientTree.length; i < len; i++) {
- let item = returnData.patientTree[i]
- if (item.emrDocumentId === id) {
- returnData.patientTree.splice(i, 1)
- return
- }
- if (item.children) {
- for (let j = 0; j < item.children.length; j++) {
- let child = item.children[j]
- if (child.emrDocumentId === id) {
- item.children.splice(i, 1)
- return
- }
- }
- }
- }
- }
- let findNode = false
- const diseaseDurationRecordTime = (id, list) => {
- findNode = false
- findMedicalRecordById(id, list, returnData.patientTree)
- }
- const findMedicalRecordById = (id, roundTimes, list) => {
- for (let i = 0, len = list.length; i < len; i++) {
- if (findNode) return;
- let item = list[i]
- if (item.emrDocumentId === id) {
- findNode = true
- item.children = roundTimes
- return
- }
- if (item.children) {
- findMedicalRecordById(id, roundTimes, item.children)
- }
- }
- }
- const queryData = () => {
- getPatientDataTree(props.huanZheXinXi.inpatientNo, props.huanZheXinXi.admissTimes).then((res) => {
- if (res?.length > 0) {
- templateType = 2
- emit('patientMedicalRecord')
- }
- returnData.patientTree = res
- })
- }
- const fileName = (val) => {
- if (templateType === 2) {
- return val.name + nullToEmpty(val.createName) + nullToEmpty(val.createDate)
- } else {
- return val.name
- }
- }
- const nullToEmpty = (val) => {
- return stringIsBlank(val) ? '' : ' \\ ' + val
- }
- onMounted(() => {
- queryData()
- if (editor) {
- getWardsApi().then((res) => {
- if (res.length > 0) {
- for (let i = 0, len = res.length; i < len; i++) {
- wardList.push(res[i].code)
- }
- }
- })
- getEmrTree().then((res) => {
- returnData.emrTree = res
- })
- } else {
- templateType = 2
- }
- })
- defineExpose({
- queryHistory,
- changeTemplateType,
- deleteTheSpecifiedNode,
- diseaseDurationRecordTime,
- queryData
- })
- </script>
- <style scoped lang="scss">
- .down-tree {
- :deep(.el-tree-node.is-expanded > .el-tree-node__children) {
- display: inline;
- }
- }
- </style>
|