Browse Source

电子病历完善

DESKTOP-MINPJAU\Administrator 3 years ago
parent
commit
cb0a301253

+ 38 - 1
src/components/zhu-yuan-yi-sheng/emr/EmrSnippet.vue

@@ -3,31 +3,68 @@
            :props="defaultProps"
            @node-click="handleNodeClick"
            node-key="_id"
+           @node-contextmenu="fragmentPreview"
+           :expand-on-click-node="false"
            default-expand-all/>
+  <el-dialog v-model="dialog" title="效果预览" top="2%" width="60%">
+    <div>
+      <iframe src="/emr/runtime/#/editor"
+              style="width: 100%"
+              :style="{height: getWindowSize.h / 1.2 + 'px'}"
+              ref="emrRef"/>
+    </div>
+  </el-dialog>
 </template>
 
 <script setup name='EmrSnippet'>
 
 import {getSnippet} from "@/api/zhu-yuan-yi-sheng/emr-api";
+import {getWindowSize} from "@/utils/window-size";
+import {EMRInteractive} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-init";
 
 const emit = defineEmits(['nodeClick'])
 
 let snippetData = $ref([])
+let dialog = $ref(false)
+let selectedData = $ref({})
 const defaultProps = {
   children: 'children',
   label: 'name',
 }
 
+const emrRef = ref(null)
+const currentEmr = ref(null)
+
 const handleNodeClick = (node, object, event) => {
   if (node.content) {
     emit('nodeClick', node)
   }
 }
 
+const fragmentPreview = (event, data, node) => {
+  console.log(event, data, node)
+  selectedData = data
+  dialog = true
+  if (!currentEmr.value) {
+    nextTick(() => {
+      currentEmr.value = new EMRInteractive(null, editorEvents);
+      emrRef.value.parentElement.emr = currentEmr.value
+    });
+  } else {
+    currentEmr.value.setDocument(selectedData, true, true)
+  }
+}
+
+const editorEvents = ({name}) => {
+  if (name === 'loaded') {
+    currentEmr.value.setDocument(selectedData, true, true)
+  }
+}
+
 onMounted(() => {
   getSnippet().then((res) => {
     snippetData = res
-    console.log(snippetData)
+    // console.log(snippetData)
   })
 })
 

+ 13 - 13
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-init.js

@@ -19,37 +19,37 @@ export function EMRInteractive(data, loaded) {
 
     };
 
+    this.setDocument = (data, isRender, clearUndoStack) => {
+        this.editor.setDocument(data, isRender, clearUndoStack)
+    }
+
     this.setEditorMode = (value) => {
         this.editor.setEditorMode(value)
     }
 
     this.insertSnippet = (content, styles, patientData) => {
         //病历片段相关参数
-        let object = {
+        let insertContent = {
+            // 内容
             value: content,
+            // 样式
             styles: styles,
+            // 默认值
             data: patientData,
             isFragment: true,
         }
-        console.log(object)
-        this.editor.execute("insertContents", {
-            object
-        });
+        this.editor.execute("insertContents", insertContent);
     }
 
     this.getAppContext = () => {
         return {
             endpoints: {
                 app: "/bdp/dataservice/api",
-            },
-            input: {
-                user: store.state.user.info.code,
-                name: store.state.user.info.name
-            },
-            login: {
+            }, input: {
+                user: store.state.user.info.code, name: store.state.user.info.name
+            }, login: {
                 token: store.state.user.info.token
-            },
-            data
+            }, data
         };
     };
 

+ 7 - 2
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/index.vue

@@ -9,9 +9,9 @@
 
       <div v-if="times === huanZheXinXi.admissTimes">
         <el-button type="success" icon="CircleCheck" @click="clickSaveData">保存数据</el-button>
-        <el-button type="primary" icon="Printer" @click="testPrint">打印电子病历</el-button>
         <el-button icon="Delete" type="danger" @click="clickDelete">删除电子病历</el-button>
       </div>
+      <el-button style="margin-left: 5px" type="primary" icon="Printer" @click="testPrint">打印电子病历</el-button>
       <el-button icon="RefreshLeft" @click="refreshPage">刷新页面</el-button>
     </el-header>
 
@@ -203,9 +203,14 @@ const editorEvents = ({name}) => {
   if (name === 'loaded') {
     loaded = false
     if (times !== huanZheXinXi.value.admissTimes) {
+      // 如果住院次数不一致 那么就是历史记录 那就只能只读了
       currentEmr.value.setEditorMode('readonly');
+    } else {
+      // 设置成编辑模式
+      currentEmr.value.setEditorMode('free');
     }
   } else if (name === 'contentchange') {
+    // 判断内容是否改变
     isEditorChange = true
   }
 }
@@ -255,6 +260,6 @@ onDeactivated(() => {
 <style scoped>
 .emr-iframe, iframe {
   width: 100%;
-  height: 700px;
+  height: 680px;
 }
 </style>