|
@@ -368,9 +368,23 @@
|
|
|
maxlength="20"
|
|
|
minlength="1"
|
|
|
show-word-limit/>
|
|
|
+
|
|
|
+ <br> <br>
|
|
|
+
|
|
|
+ <el-alert type="warning" title="正在解析病程记录,请稍等。" v-if="解析病程提示"/>
|
|
|
+ <el-alert type="success" title="解析完成,点击确认即可。" v-else/>
|
|
|
+
|
|
|
<template #footer>
|
|
|
- <el-button @click="saveDialog.close" type="danger">取消</el-button>
|
|
|
- <el-button @click="saveDialog.submit" type="primary">确认</el-button>
|
|
|
+ <el-button @click="saveDialog.close"
|
|
|
+ :disabled="saveDialog.analyzeTheCourseOfTheDisease"
|
|
|
+ type="danger">
|
|
|
+ 取消
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="saveDialog.submit"
|
|
|
+ :disabled="saveDialog.analyzeTheCourseOfTheDisease"
|
|
|
+ type="primary">
|
|
|
+ 确认
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</xc-dialog-v2>
|
|
|
|
|
@@ -471,6 +485,8 @@ let createId = null;
|
|
|
let extractData = $ref({})
|
|
|
let editorMod = $ref(false)
|
|
|
|
|
|
+let fragmentsCannotBeInserted = false
|
|
|
+
|
|
|
let currentEditorUser = $ref(null)
|
|
|
|
|
|
let foldBothSides = $ref({
|
|
@@ -534,7 +550,7 @@ const emrEvent = {
|
|
|
// 设置 编辑器的模式
|
|
|
setEditorModeFun()
|
|
|
// 设置病程记录中的跳转锚点
|
|
|
- courseSegmentLocking()
|
|
|
+ await courseSegmentLocking()
|
|
|
// 设置病程记录跳转
|
|
|
setTheProgressAnchor()
|
|
|
// 删除指定的数据元
|
|
@@ -550,7 +566,6 @@ const emrEvent = {
|
|
|
reQueryPatientInformation()
|
|
|
// 每一个病历只能一个人编辑
|
|
|
await editJudgment()
|
|
|
-
|
|
|
},
|
|
|
|
|
|
'contentchange': (e, op) => {
|
|
@@ -588,6 +603,7 @@ const emrEvent = {
|
|
|
readonlyPattern()
|
|
|
},
|
|
|
"insertFragment": async (evt, rootView, nodes, fragment, defaultData) => {
|
|
|
+ fragmentsCannotBeInserted = true
|
|
|
//插入的内容是区域片段
|
|
|
if (nodes.length === 1 && nodes[0].view && nodes[0].view.type === 'area') {
|
|
|
let view = nodes[0].view
|
|
@@ -596,15 +612,16 @@ const emrEvent = {
|
|
|
let walker = modelService.createTreeWalker(node);
|
|
|
let values = modelService.getElementsDataFromWalker(walker, '编辑者');
|
|
|
let newDate = await getServerDateApi()
|
|
|
- view.setAttribute('userInfo', {
|
|
|
+ view.setAttribute('fragment', {
|
|
|
+ name: values['查房标题'].value,
|
|
|
createId: userData.code,
|
|
|
createDate: newDate,
|
|
|
referPhysician: extractFields('管床医生编码'),
|
|
|
consultPhysician: extractFields('主治医生编码'),
|
|
|
deptDirector: extractFields('主任医生编码'),
|
|
|
- name: values['查房标题'].value
|
|
|
})
|
|
|
}
|
|
|
+ fragmentsCannotBeInserted = false
|
|
|
},
|
|
|
"areaFocus": (evt, view) => {
|
|
|
let modelService = editor.ModelService;
|
|
@@ -613,7 +630,9 @@ const emrEvent = {
|
|
|
let walker = modelService.createTreeWalker(node);
|
|
|
let values = modelService.getElementsDataFromWalker(walker, '编辑者');
|
|
|
let editorCode = values['编辑者']?.value[0]?.code;
|
|
|
- openTheTraceByUser(editorCode)
|
|
|
+ if (editorCode) {
|
|
|
+ openTheTraceByUser(editorCode)
|
|
|
+ }
|
|
|
},
|
|
|
"areaBlur": () => {
|
|
|
// 区域失去焦点
|
|
@@ -627,9 +646,9 @@ let saveDialog = $ref({
|
|
|
name: '',
|
|
|
cb: null,
|
|
|
err: null,
|
|
|
+ analyzeTheCourseOfTheDisease: false,
|
|
|
prompt: (name, cb, err) => {
|
|
|
saveDialog.name = name
|
|
|
- saveDialog.dialog = true
|
|
|
saveDialog.cb = cb
|
|
|
saveDialog.err = err
|
|
|
nextTick(async () => {
|
|
@@ -718,13 +737,16 @@ const clickSaveData = async () => {
|
|
|
patNo: props.huanZheXinXi.inpatientNo,
|
|
|
times: props.huanZheXinXi.admissTimes,
|
|
|
emrName: templateName,
|
|
|
- categoryId: categoryId
|
|
|
+ categoryId: categoryId,
|
|
|
+ fragment: []
|
|
|
}
|
|
|
objectValuesCannotBeNull(data)
|
|
|
data.emrDataElement = editor.getDataElements('business')
|
|
|
if (categoryCode === emrCodeEnum.courseRecord) {
|
|
|
templateName = '病程记录'
|
|
|
}
|
|
|
+ saveDialog.dialog = true
|
|
|
+ data.fragment = await 解析病程记录()
|
|
|
saveDialog.prompt(templateName, async (value) => {
|
|
|
data.name = value
|
|
|
let newDate = await getServerDateApi()
|
|
@@ -928,6 +950,12 @@ const positioningTime = (val, code) => {
|
|
|
* @param code 片段编码
|
|
|
*/
|
|
|
const clickSnippet = async ({content, styles, code}) => {
|
|
|
+
|
|
|
+ // 为了防止上一次插入还没有完成,就再次插入了
|
|
|
+ if (fragmentsCannotBeInserted) {
|
|
|
+ BizException(ExceptionEnum.MESSAGE_ERROR, '请勿点击过快。')
|
|
|
+ }
|
|
|
+
|
|
|
let temp = copyEnum[code]
|
|
|
let data = patientData
|
|
|
if (temp) {
|
|
@@ -1052,85 +1080,65 @@ const setTheProgressAnchor = () => {
|
|
|
* 病程记录专用,
|
|
|
* 设置段落锁定,和设置跳转锚点
|
|
|
*/
|
|
|
-const courseSegmentLocking = () => {
|
|
|
+const courseSegmentLocking = async () => {
|
|
|
if (!categoryCode.includes(emrCodeEnum.courseRecord)) {
|
|
|
return
|
|
|
}
|
|
|
- let root = currentEmr.value.getRoot()
|
|
|
-
|
|
|
if (documentId) {
|
|
|
let courseTitles = [];
|
|
|
let loginUserCode = userData.code;
|
|
|
- let modelService = editor.ModelService;
|
|
|
- let walker, values;
|
|
|
- for (let node of root.getChildren()) {
|
|
|
- if (node.view && node.type === 'area') {
|
|
|
- if (!walker) {
|
|
|
- walker = modelService.createTreeWalker(node);
|
|
|
- } else {
|
|
|
- modelService.setWalkerRoot(walker, node);
|
|
|
- }
|
|
|
- values = modelService.getElementsDataFromWalker(walker, '编辑者');
|
|
|
- // node.view.el.firstElementChild.textContent 如果title不是数据元
|
|
|
- // values['查房标题'].value 如果title是数据元
|
|
|
- setUpDiseaseCourseInfo(node, values)
|
|
|
- courseTitles.push({
|
|
|
- code: '查房时间',
|
|
|
- name: values['查房标题']?.value,
|
|
|
- value: values['查房时间']?.value,
|
|
|
- emrDocumentId: documentId,
|
|
|
- emrCategoryCode: categoryCode,
|
|
|
- jump: true,
|
|
|
- createName: createName,
|
|
|
- createDate: values['查房时间']?.value,
|
|
|
- createId: createId,
|
|
|
- type: 'category'
|
|
|
- })
|
|
|
- if (emrConfig.value.editor) {
|
|
|
- let editorCode = values['编辑者']?.value[0]?.code;
|
|
|
- if (editorCode) {
|
|
|
- // 只有自己可以删除自己创建的片段
|
|
|
- if (editorCode === loginUserCode) {
|
|
|
+ await 循环病程返回数据元((value, node) => {
|
|
|
+ courseTitles.push({
|
|
|
+ code: '查房时间',
|
|
|
+ name: value['查房标题']?.value,
|
|
|
+ value: value['查房时间']?.value,
|
|
|
+ emrDocumentId: documentId,
|
|
|
+ emrCategoryCode: categoryCode,
|
|
|
+ jump: true,
|
|
|
+ createName: createName,
|
|
|
+ createDate: value['查房时间']?.value,
|
|
|
+ createId: createId,
|
|
|
+ type: 'category'
|
|
|
+ })
|
|
|
+ if (emrConfig.value.editor) {
|
|
|
+ let editorCode = value['编辑者']?.value[0]?.code;
|
|
|
+ if (editorCode) {
|
|
|
+ // 只有自己可以删除自己创建的片段
|
|
|
+ if (editorCode === loginUserCode) {
|
|
|
+ node.view.setReadonly(false);
|
|
|
+ node.view.setDeletable(true);
|
|
|
+ } else if (doctorLevel === 1) {
|
|
|
+ if (editorCode !== loginUserCode) {
|
|
|
+ node.view.setReadonly(true);
|
|
|
+ node.view.setDeletable(false);
|
|
|
+ } else {
|
|
|
node.view.setReadonly(false);
|
|
|
- node.view.setDeletable(true);
|
|
|
- } else if (doctorLevel === 1) {
|
|
|
- if (editorCode !== loginUserCode) {
|
|
|
- node.view.setReadonly(true);
|
|
|
- node.view.setDeletable(false);
|
|
|
- } else {
|
|
|
- node.view.setReadonly(false);
|
|
|
- node.view.setDeletable(false);
|
|
|
- }
|
|
|
- } else if (doctorLevel === 2) {
|
|
|
- if (editorCode === extractFields('主任医生编码')) {
|
|
|
- node.view.setReadonly(true);
|
|
|
- node.view.setDeletable(false);
|
|
|
- } else {
|
|
|
- node.view.setReadonly(false);
|
|
|
- node.view.setDeletable(false);
|
|
|
-
|
|
|
- }
|
|
|
- } else if (doctorLevel === 3) {
|
|
|
+ node.view.setDeletable(false);
|
|
|
+ }
|
|
|
+ } else if (doctorLevel === 2) {
|
|
|
+ if (editorCode === extractFields('主任医生编码')) {
|
|
|
+ node.view.setReadonly(true);
|
|
|
+ node.view.setDeletable(false);
|
|
|
+ } else {
|
|
|
node.view.setReadonly(false);
|
|
|
node.view.setDeletable(false);
|
|
|
|
|
|
}
|
|
|
+ } else if (doctorLevel === 3) {
|
|
|
+ node.view.setReadonly(false);
|
|
|
+ node.view.setDeletable(false);
|
|
|
}
|
|
|
- } else {
|
|
|
- node.view.setReadonly(true);
|
|
|
- node.view.setDeletable(false);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ node.view.setReadonly(true);
|
|
|
+ node.view.setDeletable(false);
|
|
|
}
|
|
|
- }
|
|
|
+ })
|
|
|
emrSidebarRef.value.diseaseDurationRecordTime(documentId, courseTitles);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
-const setUpDiseaseCourseInfo = (node, values) => {
|
|
|
- // console.log(node, values)
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* 删除数据元,
|
|
|
* 根据男性女性删除 月经史 数据元
|
|
@@ -1639,6 +1647,81 @@ const changeClear = () => {
|
|
|
isEditorChange = false
|
|
|
}
|
|
|
|
|
|
+const 解析病程记录 = async () => {
|
|
|
+ if (categoryCode !== emrCodeEnum.courseRecord) {
|
|
|
+ saveDialog.analyzeTheCourseOfTheDisease = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+ saveDialog.analyzeTheCourseOfTheDisease = true
|
|
|
+ let fragment = []
|
|
|
+ await 循环病程返回数据元((values, node) => {
|
|
|
+ let data
|
|
|
+ let fragmentData = node.view.getAttribute('fragment')
|
|
|
+ // 以前老数据是没有的所以做不到质控
|
|
|
+ if (typeof fragmentData === 'undefined') {
|
|
|
+ data = {
|
|
|
+ name: values['查房标题']?.value,
|
|
|
+ createId: values['编辑者']?.value[0]?.code,
|
|
|
+ creationTime: values['查房时间']?.value,
|
|
|
+ referPhysician: values['编辑者']?.value[0]?.code,
|
|
|
+ consultPhysician: values['上级医师签名']?.value[0]?.code,
|
|
|
+ deptDirector: extractFields('主任医生编码'),
|
|
|
+ }
|
|
|
+ if (!data.name) {
|
|
|
+ positioningTime(data.creationTime, '查房时间')
|
|
|
+ saveDialog.close()
|
|
|
+ BizException(ExceptionEnum.MESSAGE_ERROR, '片段中存在异常标题,请检查。')
|
|
|
+ }
|
|
|
+ if (!data.creationTime) {
|
|
|
+ saveDialog.close()
|
|
|
+ BizException(ExceptionEnum.MESSAGE_ERROR, '片段中存在异常查房时间,请检查。')
|
|
|
+ }
|
|
|
+ node.view.setAttribute('fragment', data)
|
|
|
+ } else {
|
|
|
+ data = {
|
|
|
+ name: values['查房标题']?.value,
|
|
|
+ createId: fragmentData.createId,
|
|
|
+ creationTime: fragmentData.createDate,
|
|
|
+ referPhysician: extractFields('管床医生编码'),
|
|
|
+ consultPhysician: extractFields('主治医生编码'),
|
|
|
+ deptDirector: extractFields('主任医生编码'),
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fragment.push(data)
|
|
|
+ })
|
|
|
+ saveDialog.analyzeTheCourseOfTheDisease = false
|
|
|
+ return fragment
|
|
|
+}
|
|
|
+
|
|
|
+const 解析病程提示 = computed(() => {
|
|
|
+ if (categoryCode !== emrCodeEnum.courseRecord) {
|
|
|
+ return false
|
|
|
+ } else {
|
|
|
+ return saveDialog.analyzeTheCourseOfTheDisease
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const 循环病程返回数据元 = (callback) => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ let root = currentEmr.value.getRoot()
|
|
|
+ let walker, values;
|
|
|
+ let modelService = editor.ModelService;
|
|
|
+ for (let node of root.getChildren()) {
|
|
|
+ if (node.view && node.type === 'area') {
|
|
|
+ if (!walker) {
|
|
|
+ walker = modelService.createTreeWalker(node);
|
|
|
+ } else {
|
|
|
+ modelService.setWalkerRoot(walker, node);
|
|
|
+ }
|
|
|
+ values = modelService.getElementsDataFromWalker(walker, '编辑者');
|
|
|
+ callback(values, node)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resolve()
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
defineExpose({
|
|
|
closeBothSides,
|
|
|
headerRef,
|