Przeglądaj źródła

病历记录只记录修改不记录插入和删除,解锁病历限制默认三天,无法修改。

xiaochan 2 lat temu
rodzic
commit
1cea8210d9

+ 8 - 1
src/components/zhu-yuan-yi-sheng/emr/EmrQualityControlRelieve/EmrDialog.vue

@@ -15,6 +15,7 @@
             <el-form-item label="有效时间:">
                 <el-date-picker v-model="data.effectiveTime"
                                 type="datetime"
+                                disabled
                                 :disabled-date="disDate"
                                 style="width: 180px"
                                 format="YYYY-MM-DD HH:mm:ss"
@@ -36,12 +37,13 @@
 import XcDialogV2 from "@/components/xiao-chan/dialog/XcDialogV2.vue";
 import {requestToUnlockMedicalRecords} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
 import {getServerDateApi} from "@/api/public-api";
-import {getFormatDatetime} from "@/utils/date";
+import {getDateRangeFormatDate, getFormatDatetime} from "@/utils/date";
 import {xcMessage} from "@/utils/xiaochan-element-plus";
 import {stringIsBlank} from "@/utils/blank-utils";
 import {
     query
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
+import moment from "moment";
 
 const props = defineProps({
     newDate: null
@@ -81,6 +83,11 @@ const disDate = (time) => {
     return time.getTime() < props.newDate.getTime();
 }
 
+onMounted(async () => {
+    let d = await getServerDateApi();
+    data.value.effectiveTime = getFormatDatetime(moment(d).add(3, 'day'))
+})
+
 </script>
 
 <style scoped lang="scss">

+ 67 - 46
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/EmrMain.vue

@@ -457,7 +457,7 @@ let loaded = $ref(false)
 // 是否 改变了数据
 let isEditorChange = $ref(false)
 // 是否开启审阅模式
-let reviewMode = $ref(0)
+let reviewMode = $ref(2)
 // 跳转定位
 let jumpPositioning = {
     value: '',
@@ -534,12 +534,13 @@ const emrEvent = {
         // 设置 编辑器的模式
         setEditorModeFun()
         // 设置病程记录中的跳转锚点
-        await courseSegmentLocking()
+        courseSegmentLocking()
         // 设置病程记录跳转
         setTheProgressAnchor()
         // 删除指定的数据元
         deleteDataElement()
         // 是否开启审阅模式
+        reviewMode = 2
         isRevisionMode()
         // 电子病历的质控限制 现在已经不需要限制医生了
         // await medicalRecordQualityControl()
@@ -549,6 +550,7 @@ const emrEvent = {
         reQueryPatientInformation()
         // 每一个病历只能一个人编辑
         await editJudgment()
+
     },
 
     'contentchange': (e, op) => {
@@ -584,6 +586,38 @@ const emrEvent = {
     },
     "editorModeChange": () => {
         readonlyPattern()
+    },
+    "insertFragment": async (evt, rootView, nodes, fragment, defaultData) => {
+        //插入的内容是区域片段
+        if (nodes.length === 1 && nodes[0].view && nodes[0].view.type === 'area') {
+            let view = nodes[0].view
+            let modelService = editor.ModelService;
+            let node = view.model
+            let walker = modelService.createTreeWalker(node);
+            let values = modelService.getElementsDataFromWalker(walker, '编辑者');
+            let newDate = await getServerDateApi()
+            view.setAttribute('userInfo', {
+                createId: userData.code,
+                createDate: newDate,
+                referPhysician: extractFields('管床医生编码'),
+                consultPhysician: extractFields('主治医生编码'),
+                deptDirector: extractFields('主任医生编码'),
+                name: values['查房标题'].value
+            })
+        }
+    },
+    "areaFocus": (evt, view) => {
+        let modelService = editor.ModelService;
+        let node = view.model
+
+        let walker = modelService.createTreeWalker(node);
+        let values = modelService.getElementsDataFromWalker(walker, '编辑者');
+        let editorCode = values['编辑者']?.value[0]?.code;
+        openTheTraceByUser(editorCode)
+    },
+    "areaBlur": () => {
+        // 区域失去焦点
+        // editor.setRevisionMode('off')
     }
 }
 
@@ -893,7 +927,7 @@ const positioningTime = (val, code) => {
  * @param styles
  * @param code 片段编码
  */
-const clickSnippet = ({content, styles, code}) => {
+const clickSnippet = async ({content, styles, code}) => {
     let temp = copyEnum[code]
     let data = patientData
     if (temp) {
@@ -922,8 +956,9 @@ const clickSnippet = ({content, styles, code}) => {
         styles: styles,
         isFragment: true,
         // 就是在这里填充的值
-        defaultData: data
+        defaultData: data,
     }
+    editor.setRevisionMode('off')
     editor.execute("insertContents", insertContent);
     if (isReadonly) {
         lastView.setAttribute('readonly', true);
@@ -982,19 +1017,27 @@ const setEditorModeFun = () => {
             if (doctorLevel === 3) {
                 currentEmr.value.callMethod('setEditorMode', 'free');
             }
-        }
-        // 如果创建人不是自己就要开启审阅
-        if (createId === userData.code) {
-            editor.setRevisionMode('off')
-        } else if (createId != null) {
-            xcMessage.warning('当前病历创建人不是您,你的操作将会留痕。')
-            editor.setRevisionMode('on')
+            // 如果创建人不是自己就要开启审阅
+            openTheTraceByUser(createId)
         }
     } else {
         currentEmr.value.callMethod('setEditorMode', 'readonly')
     }
 }
 
+/**
+ * 根据用户的id来判断是否开启流痕
+ * @param editorCode
+ */
+const openTheTraceByUser = (editorCode) => {
+    if (editorCode === userData.code) {
+        editor.setRevisionMode('off')
+    } else {
+        editor.setRevisionMode('on')
+        xcMessage.warning('当前病历创建人不是您,你的操作将会留痕。')
+    }
+}
+
 /**
  * 设置跳转锚点
  */
@@ -1009,31 +1052,11 @@ const setTheProgressAnchor = () => {
  * 病程记录专用,
  * 设置段落锁定,和设置跳转锚点
  */
-const courseSegmentLocking = async () => {
+const courseSegmentLocking = () => {
     if (!categoryCode.includes(emrCodeEnum.courseRecord)) {
         return
     }
     let root = currentEmr.value.getRoot()
-    let tempFlag = false
-
-    // if (!canIUnlockIt(unlockEnum.病历质控)) {
-    //     let {
-    //         flag,
-    //         message
-    //     } = await createRestrictions(categoryCode, stringNotBlank(documentId) ? documentId : '', props.huanZheXinXi.inpatientNo + "_" + props.huanZheXinXi.admissTimes + '_' + doctorLevel);
-    //     console.log(flag, message)
-    //     if (flag) {
-    //         // 如果是空的病历那么就说明是新建的那么就需要跳转到空的编辑器并且跳转。
-    //         if (stringIsBlank(documentId)) {
-    //             emptyEditor();
-    //             BizException(ExceptionEnum.LOGICAL_ERROR, message)
-    //         } else {
-    //             // 如果不是空的就提示锁住主要片段就可以了。
-    //             xcMessage.error(message)
-    //         }
-    //         tempFlag = true
-    //     }
-    // }
 
     if (documentId) {
         let courseTitles = [];
@@ -1050,6 +1073,7 @@ const courseSegmentLocking = async () => {
                 values = modelService.getElementsDataFromWalker(walker, '编辑者');
                 // node.view.el.firstElementChild.textContent 如果title不是数据元
                 // values['查房标题'].value 如果title是数据元
+                setUpDiseaseCourseInfo(node, values)
                 courseTitles.push({
                     code: '查房时间',
                     name: values['查房标题']?.value,
@@ -1065,6 +1089,7 @@ const courseSegmentLocking = async () => {
                 if (emrConfig.value.editor) {
                     let editorCode = values['编辑者']?.value[0]?.code;
                     if (editorCode) {
+                        // 只有自己可以删除自己创建的片段
                         if (editorCode === loginUserCode) {
                             node.view.setReadonly(false);
                             node.view.setDeletable(true);
@@ -1074,7 +1099,7 @@ const courseSegmentLocking = async () => {
                                 node.view.setDeletable(false);
                             } else {
                                 node.view.setReadonly(false);
-                                node.view.setDeletable(true);
+                                node.view.setDeletable(false);
                             }
                         } else if (doctorLevel === 2) {
                             if (editorCode === extractFields('主任医生编码')) {
@@ -1082,34 +1107,30 @@ const courseSegmentLocking = async () => {
                                 node.view.setDeletable(false);
                             } else {
                                 node.view.setReadonly(false);
-                                node.view.setDeletable(true);
+                                node.view.setDeletable(false);
+
                             }
                         } else if (doctorLevel === 3) {
                             node.view.setReadonly(false);
-                            node.view.setDeletable(true);
+                            node.view.setDeletable(false);
+
                         }
                     }
                 } else {
                     node.view.setReadonly(true);
                     node.view.setDeletable(false);
                 }
-
-                // if (tempFlag && values['查房标题']?.value === '首次病程记录') {
-                //     node.view.setReadonly(true);
-                //     node.view.setDeletable(false);
-                // }
             }
         }
         emrSidebarRef.value.diseaseDurationRecordTime(documentId, courseTitles);
-    } else {
-        for (let node of root.getChildren()) {
-            if (node.view && node.type === 'area') {
-                node.view.setAttribute('userInfo', {code: userData.code, name: userData.name})
-            }
-        }
     }
 }
 
+
+const setUpDiseaseCourseInfo = (node, values) => {
+    // console.log(node, values)
+}
+
 /**
  * 删除数据元,
  * 根据男性女性删除 月经史 数据元