Bladeren bron

重做不良事件类型

lighter 4 maanden geleden
bovenliggende
commit
9e32d4cfaa

+ 88 - 55
src/data/adverse-event.js

@@ -125,69 +125,102 @@ export const dict = {
   ],
   categories: [
     {
+      label: '护理安全',
+      value: '护理安全',
       children: [
-        { name: '查对/识别错误', id: 'a1' },
-        { name: '跌倒/坠床', id: 'a2' },
-        { name: '住院压疮', id: 'a3' },
-        { name: '导管插入输注与管理错误', id: 'a4' },
-        { name: '标本采集应用与管理', id: 'a5' },
-        { name: '药物外渗', id: 'a6' },
-        { name: '护理诊疗常规、指南、操作规程应用与管理错误', id: 'z1' },
-        { name: '护理病历与其他诊疗文件书写与使用错误', id: 'z2' },
-        { name: '输液反应事件', id: 'z3' },
-        { name: '烧烫伤/误吸/误咽', id: 'z4' },
-        { name: '约束意外/转运意外', id: 'z5' },
-        { name: '信息传递/知情同意', id: 'z6' },
-        { name: '饮食与营养事件/物品运送', id: 'z7' },
-        { name: '住院患者失踪', id: 'z8' },
-        { name: '住院患者自杀', id: 'z9' },
-        { name: '产房新生儿被抱错等', id: 'z10' },
-        { name: '其他事件', id: 'z11' },
+        { label: '查对/识别错误', value: '查对/识别错误' },
+        { label: '跌倒/坠床', value: '跌倒/坠床' },
+        { label: '住院压疮', value: '住院压疮' },
+        { label: '导管插入输注与管理错误', value: '导管插入输注与管理错误' },
+        { label: '标本采集应用与管理', value: '标本采集应用与管理' },
+        { label: '药物外渗', value: '药物外渗' },
+        { label: '护理诊疗常规、指南、操作规程应用与管理错误', value: '护理诊疗常规、指南、操作规程应用与管理错误' },
+        { label: '护理病历与其他诊疗文件书写与使用错误', value: '护理病历与其他诊疗文件书写与使用错误' },
+        { label: '输液反应事件', value: '输液反应事件' },
+        { label: '烧烫伤/误吸/误咽', value: '烧烫伤/误吸/误咽' },
+        { label: '约束意外/转运意外', value: '约束意外/转运意外' },
+        { label: '信息传递/知情同意', value: '信息传递/知情同意' },
+        { label: '饮食与营养事件/物品运送', value: '饮食与营养事件/物品运送' },
+        { label: '住院患者失踪', value: '住院患者失踪' },
+        { label: '住院患者自杀', value: '住院患者自杀' },
+        { label: '产房新生儿被抱错等', value: '产房新生儿被抱错等' },
+        { label: '其他事件', value: '其他事件' },
       ],
-      name: '护理安全',
-      id: 'a',
     },
-
     {
       children: [
-        { name: '信息传递错误事件', id: 'b1' },
-        { name: '治疗错误事件', id: 'b2' },
-        { name: '方法/技术错误事件', id: 'b3' },
-        { name: '药物调剂分发错误事件', id: 'b4' },
-        { name: '输血事件', id: 'b5' },
-        { name: '设备仪器使用事件', id: 'b6' },
-        { name: '医疗技术检查事件', id: 'b7' },
-        { name: '物品运送事件', id: 'b8' },
-        { name: '放射安全事件', id: 'b9' },
-        { name: '诊疗记录事件', id: 'b10' },
-        { name: '知情同意事件', id: 'b11' },
-        { name: '非预期事件', id: 'b12' },
-        { name: '医护安全事件', id: 'b13' },
-        { name: '不作为事件', id: 'b14' },
-        { name: '其他事件', id: 'b15' },
+        {
+          label: '诊疗行为相关',
+          value: '诊疗行为相关',
+          children: [
+            { label: '麻醉意外及主要并发症事件', value: '麻醉意外及主要并发症事件' },
+            { label: '手术部位或术式错误事件', value: '手术部位或术式错误事件' },
+            { label: '非计划再次手术事件', value: '非计划再次手术事件' },
+            { label: '医疗处置事件', value: '医疗处置事件' },
+            { label: '给药错误事件', value: '给药错误事件' },
+            { label: '用血差错事件', value: '用血差错事件' },
+            { label: '输血不良反应事件', value: '输血不良反应事件' },
+            { label: '非计划性拔管事件', value: '非计划性拔管事件' },
+            { label: '新生儿抱错事件', value: '新生儿抱错事件' },
+            { label: '院内压力性损伤事件', value: '院内压力性损伤事件' },
+            { label: '其他事件', value: '其他事件' },
+          ]
+        },
+        {
+          label: '药物器械',
+          value: '药物器械',
+          children: [
+            { label: '植入物的不良反应事件', value: '植入物的不良反应事件' },
+            { label: '其他事件', value: '其他事件' },
+          ]
+        },
+        {
+          label: '检验检查',
+          value: '检验检查',
+          children: [
+            { label: '检验检查标本事件', value: '检验检查标本事件' },
+            { label: '检验检查操作事件', value: '检验检查操作事件' },
+            { label: '检验检查报告事件', value: '检验检查报告事件' },
+            { label: '其他事件', value: '其他事件' },
+          ]
+        },
+        {
+          label: '医院感染',
+          value: '医院感染',
+          children: [
+            { label: '呼吸机相关肺炎', value: '呼吸机相关肺炎' },
+            { label: '导尿管感染', value: '导尿管感染' },
+            { label: '中心导管相关血流感染', value: '中心导管相关血流感染' },
+            { label: '手术部位感染事件', value: '手术部位感染事件' },
+            { label: '血液透析相关感染事件', value: '血液透析相关感染事件' },
+            { label: '其他事件', value: '其他事件' },
+          ]
+        },
+        {
+          label: '意外伤害',
+          value: '意外伤害',
+          children: [
+            { label: '院内非预期心跳骤停事件', value: '院内非预期心跳骤停事件' },
+            { label: '其他事件', value: '其他事件' },
+          ]
+        },
+        {
+          label: '职业安全',
+          value: '职业安全',
+          children: [
+            { label: '锐器伤事件', value: '锐器伤事件' },
+            { label: '实验室相关事件(生物安全、危化品)', value: '实验室相关事件(生物安全、危化品)' },
+            { label: '放射相关事件', value: '放射相关事件' },
+            { label: '其他事件', value: '其他事件' },
+          ]
+        },
+        { label: '其他', value: '其他' },
       ],
-      name: '医疗安全',
-      id: 'b',
+      label: '医疗安全',
+      value: '医疗安全',
     },
-
-    // {
-    //   children: [
-    //     { name: '护理诊疗常规、指南、操作规程应用与管理错误', id: 'z1' },
-    //     { name: '护理病历与其他诊疗文件书写与使用错误', id: 'z2' },
-    //     { name: '输液反应事件', id: 'z3' },
-    //     { name: '烧烫伤/误吸/误咽', id: 'z4' },
-    //     { name: '约束意外/转运意外', id: 'z5' },
-    //     { name: '信息传递/知情同意', id: 'z6' },
-    //     { name: '饮食与营养事件/物品运送', id: 'z7' },
-    //     { name: '住院患者失踪', id: 'z8' },
-    //     { name: '住院患者自杀', id: 'z9' },
-    //     { name: '产房新生儿被抱错等', id: 'z10' },
-    //     { name: '其他事件', id: 'z11' },
-    //   ],
-    //   name: '其他',
-    //   id: 'z',
-    // },
   ],
+
   positions: [
     { id: 1, name: '助理护士' },
     { id: 2, name: '护士' },

+ 10 - 12
src/views/hospitalization/adverse-event/AllAdverseEvent.vue

@@ -70,7 +70,7 @@
   <el-dialog v-model="showViewReport" title="报告详情" fullscreen>
     <EventViewer :report="report" :disableHlbDealing="disableHlbDealing"/>
     <div style="width: 100%; text-align: right; margin: 50px 0 0 0">
-      <el-button type="primary" icon="Edit" @click="showModifyReport = true">
+      <el-button type="primary" icon="Edit" @click="editCurrentReport">
         修改此报告
       </el-button>
       <el-button type="primary" icon="Upload" @click="submitHlbDealing">
@@ -85,7 +85,7 @@
       title="修改报告"
       width="70%"
   >
-    <EventEditor :report="report"/>
+    <EventEditor ref="editorRef" :report="report"/>
     <div style="width: 100%; text-align: right; margin: 20px 0 10px 0">
       <el-button type="info" icon="Close" @click="cancelModify">取消</el-button>
       <el-button type="primary" icon="Check" @click="confirmModify">提交</el-button>
@@ -119,7 +119,7 @@ import EventPrinter from "@/views/hospitalization/adverse-event/component/EventP
 
 const dateRange = ref(null)
 const allWards = ref([])
-
+const editorRef = ref()
 const queryParam = reactive({
   start: null,
   end: null,
@@ -170,15 +170,6 @@ const disableHlbDealing = computed(() => {
   }
   return report.value.finalDealTime !== null
 })
-const disableHlbDealingBtn = computed(() => {
-  if (roles.indexOf(24) === -1 && roles.indexOf(1) === -1 && roles.indexOf(2) === -1) {
-    return true
-  }
-  if (report.value.deptDealTime === null) {
-    return true
-  }
-  return report.value.finalDealTime !== null
-})
 const viewReport = (pid) => {
   getReportDetail(pid, 'final').then((res) => {
     report.value = res
@@ -220,6 +211,13 @@ const confirmModify = () => {
   showModifyReport.value = false
 }
 
+function editCurrentReport() {
+  showModifyReport.value = true
+  nextTick(() => {
+    editorRef.value.initCascader(report.value.category)
+  })
+}
+
 const submitHlbDealing = () => {
   if (report.value.finalDealing === '未处理') {
     ElMessage({

+ 5 - 1
src/views/hospitalization/adverse-event/DealAdverseEvent.vue

@@ -34,7 +34,7 @@
   </div>
 
   <el-dialog v-model="showModifyDialog" width="70%" title="修改报告">
-    <EventEditor :report="report"/>
+    <EventEditor ref="editorRef" :report="report"/>
     <div style="width: 100%; text-align: right; margin: 20px 0 10px 0">
       <el-button type="info" icon="Close" @click="cancelModify">取消</el-button>
       <el-button type="primary" icon="Check" @click="confirmModify">提交</el-button>
@@ -55,6 +55,7 @@ import {xcMessage} from "@/utils/xiaochan-element-plus";
 import EventViewer from "@/views/hospitalization/adverse-event/component/EventViewer.vue";
 import {formatDatetime} from "@/utils/date";
 
+const editorRef = ref()
 const reports = ref([])
 const report = ref({})
 const fetchReportDetail = (val) => {
@@ -70,6 +71,9 @@ function filterHandleState(value, row) {
 const showModifyDialog = ref(false)
 const modifyReport = () => {
   showModifyDialog.value = true
+  nextTick(() => {
+    editorRef.value.initCascader(report.value.category)
+  })
 }
 const cancelModify = () => {
   showModifyDialog.value = false

+ 3 - 1
src/views/hospitalization/adverse-event/FillAderverseEvent.vue

@@ -34,7 +34,7 @@
         </el-button>
       </header>
       <div class="layout_main">
-        <EventEditor :report="report"/>
+        <EventEditor ref="editorRef" :report="report"/>
       </div>
     </div>
   </div>
@@ -52,6 +52,7 @@ const userInfo = useUserStore().userInfo
 const histories = ref([])
 const report = initReport()
 const isModify = ref(false)
+const editorRef = ref()
 const fetchHistories = () => {
   getHistories().then((res) => {
     histories.value = res
@@ -60,6 +61,7 @@ const fetchHistories = () => {
 const fetchReportDetail = (val) => {
   getReportDetail(val.pid, 'nurse').then((res) => {
     report.value = res
+    editorRef.value.initCascader(res.category)
     isModify.value = true
   })
 }

+ 31 - 5
src/views/hospitalization/adverse-event/component/EventEditor.vue

@@ -5,11 +5,18 @@
       <el-row :gutter="5" style="margin-top: 5px">
         <el-col :span="8">
           <el-tag type="info">事件类型</el-tag>
-          <el-select v-model="report.category" placeholder="请选择" filterable style="width: 100%">
-            <el-option-group v-for="group in dict.categories" :key="group.id" :label="group.name">
-              <el-option v-for="item in group.children" :key="item.id" :label="item.name" :value="group.name + ' - ' + item.name"> </el-option>
-            </el-option-group>
-          </el-select>
+<!--          <el-select v-model="report.category" placeholder="请选择" filterable style="width: 100%">-->
+<!--            <el-option-group v-for="group in dict.categories" :key="group.id" :label="group.name">-->
+<!--              <el-option v-for="item in group.children" :key="item.id" :label="item.name" :value="group.name + ' - ' + item.name"> </el-option>-->
+<!--            </el-option-group>-->
+<!--          </el-select>-->
+
+          <el-cascader
+              v-model="cascaderVal"
+              :options="dict.categories"
+              @change="handleCategoryChange"
+          />
+
         </el-col>
         <el-col :span="9">
           <el-tag type="info">发生日期:</el-tag>
@@ -161,6 +168,7 @@
 <script setup>
 import { dict } from '@/data/adverse-event'
 import {getAllDepts} from '@/api/adverse-event'
+import flatten from "xe-utils/flatten.js";
 const props = defineProps({
   report: {
     type: Object,
@@ -170,9 +178,27 @@ const props = defineProps({
 })
 
 const deptList = ref([])
+const cascaderVal = ref([])
+
+function initCascader(val) {
+  cascaderVal.value = val?.split(' - ')
+}
+
+function handleCategoryChange(val) {
+  let temp = ''
+  val.forEach(item => {
+    temp += ' - ' + item
+  })
+  nextTick(() => {
+    props.report.category = temp.substring(3)
+  })
+}
+
 onMounted(() => {
   getAllDepts().then(res => {
     deptList.value = res
   })
 })
+
+defineExpose({initCascader})
 </script>