Bladeren bron

病历质控查询

xiaochan 2 jaren geleden
bovenliggende
commit
1fe90d8404

+ 8 - 0
src/api/zhu-yuan-yi-sheng/emr-control-rule.js

@@ -118,3 +118,11 @@ export function getMyUnlockByPatNo(patNo, times) {
     })
 }
 
+
+export function specifyAdmissionQualityControl(start,end) {
+    return request({
+        url: url + '/specifyAdmissionQualityControl',
+        method: 'get',
+        params: {start, end}
+    })
+}

+ 9 - 0
src/api/zhu-yuan-yi-sheng/emr-patient.js

@@ -55,6 +55,15 @@ export function deletePatientEmrByDocumentId(documentId) {
     })
 }
 
+
+export function audit(documentId) {
+    return request({
+        url: url + 'audit',
+        method: 'get',
+        params: {documentId}
+    })
+}
+
 export function existCourseRecord(patNo, times) {
     return request({
         url: url + 'existCourseRecord',

+ 7 - 7
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/emrControlRule.vue → src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/EmrControlRuleDialog.vue

@@ -17,7 +17,7 @@
   </xc-dialog-v2>
 </template>
 
-<script setup name='emrControlRule'>
+<script setup name='EmrControlRuleDialog'>
 import {accessToYourOwnPatientMedicalRecords} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
 import XcDialogV2 from "@/components/xiao-chan/dialog/XcDialogV2.vue";
 import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
@@ -28,12 +28,12 @@ const dialog = ref(false)
 
 onMounted(() => {
 
-  accessToYourOwnPatientMedicalRecords().then((res) => {
-    patientList.value = res
-    if (patientList.value.length > 0) {
-      dialog.value = true
-    }
-  })
+  // accessToYourOwnPatientMedicalRecords().then((res) => {
+  //   patientList.value = res
+  //   if (patientList.value.length > 0) {
+  //     dialog.value = true
+  //   }
+  // })
 
 })
 

+ 1 - 1
src/router/modules/dashboard.js

@@ -592,7 +592,7 @@ const route = [
             },
             {
                 path: 'emrControlRule',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule.vue')),
+                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/EmrControlRule.vue')),
                 meta: {title: '病历质控规则'},
             },
             {

+ 1 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/Home.vue

@@ -38,7 +38,7 @@ import {
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
 import PatientList from "@/components/zhu-yuan-yi-sheng/public/PatientList";
 import {getJyJcZdTree} from "@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing";
-import EmrControlRule from "@/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/emrControlRule.vue";
+import EmrControlRule from "@/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/EmrControlRuleDialog.vue";
 import YzTag from "@/components/zhu-yuan-yi-sheng/YzTag.vue";
 import {useElementSize} from "@vueuse/core";
 import router from "@/router";

+ 0 - 305
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule.vue

@@ -1,305 +0,0 @@
-<template>
-    <page-layer>
-        <template #header>
-            指定入院
-            <el-date-picker
-                    type="date"
-                    :clearable="false"
-                    style="width: 120px"
-                    v-model="date"/>
-            时间患者
-            <el-button @click="confirmToModifyTheAdmissionTime">确定</el-button>
-            <el-button type="primary" @click="queryQualityControlData">查询质控数据</el-button>
-        </template>
-
-        <template #main>
-            <el-tabs>
-                <el-tab-pane label="质控">
-                    <xc-dialog-v2 v-model="dialog"
-                                  title="病历时效限制">
-                        <el-form :label-width="120">
-
-                            <el-form-item label="质控名称:">
-                                <el-input v-model="ruleForm.name"/>
-                            </el-form-item>
-
-                            <el-form-item label="入参数据元:">
-                                <el-select v-model="ruleForm.sql" ref="selectRef">
-                                    <el-option v-for="item in ruleDataElement"
-                                               :label="item.name"
-                                               :value="item.sql_sentence"
-                                               :key="item.sql_sentence"
-                                               :title="item.group_name"
-                                    ></el-option>
-                                </el-select>
-                            </el-form-item>
-
-                            <el-form-item label="住院医师(小时):">
-                                <el-input v-model.number="ruleForm.prescription">
-                                    <template #prepend>
-                                        {{ selectRef?.selectedLabel + '/' }} 创建时间
-                                    </template>
-                                    <template #append> 小时后</template>
-                                </el-input>
-                            </el-form-item>
-
-                            <el-form-item label="上级医生(小时):">
-                                <el-input v-model.number="ruleForm.superiorDoctorTime">
-                                    <template #prepend>
-                                        {{ selectRef?.selectedLabel + '/' }} 创建时间
-                                    </template>
-                                    <template #append> 小时后</template>
-                                </el-input>
-                            </el-form-item>
-
-                            <el-form-item label="病历编码:">
-                                <el-tree-select
-                                        style="width: 100%"
-                                        class="tree-select"
-                                        v-model="ruleForm.medicalRecordCode"
-                                        :data="emrTree"
-                                        multiple
-                                        :props="defaultProps"
-                                        check-strictly
-                                        :render-after-expand="false">
-                                </el-tree-select>
-                            </el-form-item>
-
-                            <el-form-item label="提示语:">
-                                <el-input v-model="ruleForm.promptStatement" show-word-limit maxlength="50"/>
-                            </el-form-item>
-
-                            <el-form-item>
-                                <el-switch
-                                        v-model="ruleForm.offOrOnRule"
-                                        :active-value="1"
-                                        :inactive-value="0"
-                                        active-text="开启"
-                                        inactive-text="关闭"/>
-                            </el-form-item>
-
-                        </el-form>
-
-                        <template #footer>
-                            <el-button @click="cancel">取消</el-button>
-                            <el-button v-if="ruleForm.id == null" @click="confirm">确认</el-button>
-                            <el-button v-else @click="modify">修改</el-button>
-                        </template>
-
-                    </xc-dialog-v2>
-                    <xc-table :local-data="data" :height="150">
-                        <el-table-column label="质控名称" prop="name"/>
-                        <el-table-column label="时效(小时)" prop="prescription"/>
-                        <el-table-column label="上级医生时效(小时)" prop="superiorDoctorTime"/>
-                        <el-table-column label="描述" prop="promptStatement"/>
-                        <el-table-column label="是否开启" prop="offOrOnRule">
-                            <template #default="{row}">
-                                <el-switch
-                                        v-model="row.offOrOnRule"
-                                        :active-value="1"
-                                        :inactive-value="0"
-                                        @change="onOff(row.id,row.offOrOnRule)"
-                                        active-text="开启"
-                                        inactive-text="关闭"/>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="操作">
-                            <template #default="{row}">
-                                <el-button type="danger" @click="deleteQualityControl(row.id)">删除</el-button>
-                                <el-button type="warning" @click="clickModifyButton(row)">修改</el-button>
-                                <el-button type="primary" @click="newlyAdded">新增</el-button>
-                            </template>
-                        </el-table-column>
-                    </xc-table>
-                </el-tab-pane>
-                <el-tab-pane label="质控数据">
-                    <xc-table :local-data="rulePatInfoData" :height="150">
-                        <el-table-column label="住院号" prop="inpatientNo"/>
-                        <el-table-column label="次数" prop="admissTimes"/>
-                        <el-table-column label="姓名" prop="name"/>
-                        <el-table-column label="科室名称" prop="deptName"/>
-                        <el-table-column label="管床医生" prop="tubeBedDoctorName"/>
-                        <el-table-column label="入院时间" prop="admissDate"/>
-                        <el-table-column label="入院诊断" prop="diagnosisOfAdmission"/>
-                        <el-table-column label="病室" prop="medicalHistoryTyping"/>
-                        <el-table-column label="提示语句" prop="promptStatements"/>
-                        <el-table-column label="消息" prop="message"/>
-                    </xc-table>
-                </el-tab-pane>
-            </el-tabs>
-        </template>
-
-    </page-layer>
-
-</template>
-
-<script setup name='EmrControlRule'>
-import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
-import {onMounted, ref} from "vue";
-import XcDialogV2 from "@/components/xiao-chan/dialog/XcDialogV2.vue";
-import {
-    getEmrTree,
-} from "@/api/zhu-yuan-yi-sheng/emr-patient";
-import {
-    addRule,
-    getAvailableObjects,
-    hospitalWidePatients,
-    getRuleList,
-    switchQualityControl,
-    deleteRuleById,
-    modifyQualityControl,
-    modifyTheAdmissionQualityControlTime,
-    getAdmissDate
-} from '@/api/zhu-yuan-yi-sheng/emr-control-rule'
-import {ElMessageBox} from "element-plus";
-import {formatDate} from "@/utils/date";
-import PageLayer from "@/layout/PageLayer.vue";
-
-const data = ref([])
-const dialog = ref(false)
-const emrTree = ref([])
-const ruleDataElement = ref([])
-const date = ref()
-const rulePatInfoData = ref([])
-
-const defaultProps = {
-    children: 'children',
-    label: 'name',
-    value: 'code',
-}
-
-const ruleForm = ref({
-    id: null,
-    type: 1,
-    medicalRecordCode: [],
-    offOrOnRule: 1,
-    promptStatement: '',
-    name: '',
-    sql: '',
-    prescription: 24,
-    superiorDoctorTime: 24,
-})
-
-const selectRef = ref(null)
-
-const cancel = () => {
-    ruleForm.value = {
-        id: null,
-        type: 1,
-        medicalRecordCode: [],
-        offOrOnRule: 1,
-        promptStatement: '',
-        name: '',
-        sql: '',
-        prescription: 24,
-        superiorDoctorTime: 24,
-    }
-    dialog.value = false
-}
-
-const confirm = () => {
-    ruleForm.value.type = 1
-    addRule(ruleForm.value)
-}
-
-const modify = async () => {
-    await modifyQualityControl(ruleForm.value)
-    cancel()
-    await queryRule()
-}
-
-const newlyAdded = () => {
-    cancel()
-    dialog.value = true
-}
-
-const onOff = async (id, val) => {
-    await switchQualityControl(id, val)
-}
-
-const deleteQualityControl = (val) => {
-    ElMessageBox.confirm('是否要删除该质控!', '提示', {
-        type: 'warning'
-    }).then(() => {
-        deleteRuleById(val)
-    }).catch(() => {
-    })
-
-}
-
-const clickModifyButton = (val) => {
-    ruleForm.value = val
-    dialog.value = true
-}
-
-const queryRule = () => {
-    getRuleList().then((res) => {
-        data.value = res
-    })
-    getAdmissDate().then((res) => {
-        date.value = res
-    })
-
-}
-
-const confirmToModifyTheAdmissionTime = () => {
-    modifyTheAdmissionQualityControlTime(formatDate(date.value))
-}
-
-const queryQualityControlData = () => {
-    hospitalWidePatients().then((res) => {
-        rulePatInfoData.value = res
-    })
-}
-
-onMounted(() => {
-    getEmrTree('hosp').then((res) => {
-        emrTree.value = res.all[0].children
-    })
-    queryRule()
-    getAvailableObjects().then((res) => {
-        ruleDataElement.value = res
-    })
-})
-
-</script>
-
-<style lang="scss">
-.tree-select {
-  .el-select-dropdown__item.hover,
-  .el-select-dropdown__item:hover {
-    background-color: #f5f7fa !important;
-    color: black;
-  }
-}
-
-.select_div {
-  min-height: 20px;
-  width: 100%;
-  border: 1px solid;
-  border-radius: 4px;
-
-  table-layout: fixed;
-  word-break: break-all;
-  overflow: hidden;
-
-  .select_input {
-    margin-left: 3px;
-  }
-
-  span {
-    border-radius: 2px;
-    background-color: #f0f2f5;
-    padding: 0 5px;
-    margin: 4px;
-
-    i {
-      cursor: pointer;
-      font-size: 12px;
-      width: 14px;
-      height: 14px;
-      border-radius: 50%;
-    }
-  }
-}
-</style>

+ 118 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/EmrControlRule.vue

@@ -0,0 +1,118 @@
+<template>
+    <page-layer>
+        <template #header>
+            入院区间:
+            <el-date-picker
+                    :shortcuts="shortcuts"
+                    style="width: 220px"
+                    type="daterange"
+                    v-model="intervalPatients"/>
+            <el-button type="primary" @click="queryQualityControlData">查询质控数据</el-button>
+        </template>
+
+        <template #main>
+            <el-tabs v-model="tabsModel">
+                <el-tab-pane label="质控数量" name="质控数量">
+                    <rule-total/>
+                </el-tab-pane>
+
+                <el-tab-pane label="详情" name="详情">
+                    <rule-sift :data="ruleReturnData.details"/>
+                </el-tab-pane>
+
+                <template v-for="(val, key) in siftData">
+                    <el-tab-pane :label="key" :name="key">
+                        <rule-sift :data="val"/>
+                    </el-tab-pane>
+                </template>
+
+            </el-tabs>
+        </template>
+
+    </page-layer>
+
+</template>
+
+<script setup name='EmrControlRule'>
+import {onMounted} from "vue";
+import {
+    specifyAdmissionQualityControl
+} from '@/api/zhu-yuan-yi-sheng/emr-control-rule'
+import {getDateRangeFormatDate} from "@/utils/date";
+import PageLayer from "@/layout/PageLayer.vue";
+import {shortcuts} from "@/data/shortcuts";
+import RuleTotal
+    from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/RuleTotal.vue";
+import {
+    numberToArray,
+    ruleReturnData, siftData, tabsModel
+} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/rule-store";
+import RuleSift from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/RuleSift.vue";
+
+const intervalPatients = ref([])
+const queryQualityControlData = () => {
+    let {startTime, endTime} = getDateRangeFormatDate(intervalPatients.value)
+
+    specifyAdmissionQualityControl(startTime, endTime).then(res => {
+        siftData.value = {}
+        ruleReturnData.value = res
+        numberToArrayFunc()
+        console.log(res)
+    })
+}
+
+const numberToArrayFunc = () => {
+    numberToArray.value = []
+    for (let key in ruleReturnData.value.numberOfQuestions) {
+        numberToArray.value.push({
+            name: key,
+            total: ruleReturnData.value.numberOfQuestions[key]
+        })
+    }
+}
+
+onMounted(() => {
+    intervalPatients.value = shortcuts[2].value
+})
+
+</script>
+
+<style lang="scss">
+.tree-select {
+  .el-select-dropdown__item.hover,
+  .el-select-dropdown__item:hover {
+    background-color: #f5f7fa !important;
+    color: black;
+  }
+}
+
+.select_div {
+  min-height: 20px;
+  width: 100%;
+  border: 1px solid;
+  border-radius: 4px;
+
+  table-layout: fixed;
+  word-break: break-all;
+  overflow: hidden;
+
+  .select_input {
+    margin-left: 3px;
+  }
+
+  span {
+    border-radius: 2px;
+    background-color: #f0f2f5;
+    padding: 0 5px;
+    margin: 4px;
+
+    i {
+      cursor: pointer;
+      font-size: 12px;
+      width: 14px;
+      height: 14px;
+      border-radius: 50%;
+    }
+  }
+}
+</style>

+ 60 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/RuleSift.vue

@@ -0,0 +1,60 @@
+<template>
+    <xc-table :local-data="props.data"
+              :default-expand-all="false"
+              :final-height="getWindowSize.h / 1.2">
+        <el-table-column type="expand">
+            <template #default="{row}">
+                <JsonViewer :value="row.mapMessage"
+                            copyable
+                            :expandDepth="3"/>
+            </template>
+        </el-table-column>
+        <el-table-column prop="inpatientNo" label="住院号" width="220"/>
+        <el-table-column prop="admissTimes" label="次数" width="120"/>
+        <el-table-column prop="name" label="姓名" width="220"/>
+        <el-table-column prop="deptName" label="科室" width="220"/>
+        <el-table-column prop="tubeBedDoctorName" label="管床医生" width="220"/>
+        <el-table-column prop="admissDate" label="入院时间" width="220"/>
+        <el-table-column prop="mapMessage" label="详情" show-overflow-tooltip>
+            <template #header>
+                <el-button @click="exportExcel">导出Excel</el-button>
+            </template>
+            <template #default="{row}">
+                {{ mapToStr(row) }}
+            </template>
+        </el-table-column>
+    </xc-table>
+</template>
+
+<script setup name='RuleSift'>
+import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
+import {getWindowSize} from "@/utils/window-size";
+import {mapToStr} from "./rule-store";
+import {Export} from "@/utils/ExportExcel";
+
+const props = defineProps({
+    data: Array
+})
+
+const exportExcel = () => {
+    const title = {
+        inpatientNo: '住院号',
+        admissTimes: '次数',
+        name: '姓名',
+        deptName: '科室',
+        tubeBedDoctorName: '管床医生',
+        admissDate: '入院时间',
+        message: '详情',
+    }
+    Export(props.data, title, "质控数据")
+}
+
+onMounted(() => {
+    console.log(props.data)
+})
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 48 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/RuleTotal.vue

@@ -0,0 +1,48 @@
+<template>
+    <xc-table :local-data="numberToArray"
+              :final-height="getWindowSize.h / 1.2">
+        <el-table-column prop="name" label="质控名称"/>
+        <el-table-column prop="total" label="总数"/>
+        <el-table-column label="操作">
+            <template #default="{row}">
+                <el-button @click="detailClick(row)" text plain type="primary">详情</el-button>
+            </template>
+        </el-table-column>
+    </xc-table>
+</template>
+
+<script setup name='RuleTotal'>
+import {
+    numberToArray, ruleReturnData, siftData, tabsModel,
+} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/rule-store";
+import {getWindowSize} from "@/utils/window-size";
+import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
+import {BizException, ExceptionEnum} from "@/utils/BizException";
+
+const detailClick = ({name, total}) => {
+    if (total === 0) {
+        BizException(ExceptionEnum.MESSAGE_ERROR, "没有指定的病历。")
+    }
+    let data = [];
+    for (let i = 0, len = ruleReturnData.value.details.length; i < len; i++) {
+        let item = JSON.parse(JSON.stringify(ruleReturnData.value.details[i]))
+        if (item.mapMessage && item.mapMessage[name]) {
+            for (let key in item.mapMessage) {
+                if (key !== name) {
+                    delete item.mapMessage[key]
+                }
+            }
+            item.message = JSON.stringify(item.mapMessage[name])
+            data.push(item)
+        }
+    }
+    siftData.value[name] = data;
+    tabsModel.value = name;
+}
+
+</script>
+
+<style scoped lang="scss">
+
+
+</style>

+ 20 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrControlRule/rule-store.ts

@@ -0,0 +1,20 @@
+import {Ref, ref} from "vue";
+
+export const numberToArray = ref([])
+
+export const siftData = ref({})
+
+export const tabsModel = ref('质控数量')
+
+
+export const mapToStr = (row) => {
+    return JSON.stringify(row.mapMessage)
+}
+export const ruleReturnData: Ref<{
+    numberOfQuestions: object,
+    details: Array<any>
+}> = ref({
+        numberOfQuestions: {},
+        details: [],
+    }
+)

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

@@ -22,6 +22,9 @@
             <el-button @click="recoveryDialog = true">
                 恢复
             </el-button>
+            <el-button @click="auditClick" type="primary">
+                审核
+            </el-button>
         </el-button-group>
         <el-divider direction="vertical"/>
         <el-button-group>
@@ -34,6 +37,7 @@
                        title="drg的预分组">
                 DRG分组
             </el-button>
+            <emr-result-returns/>
         </el-button-group>
         <el-divider direction="vertical"/>
         <!--   恢复到上一次保存的状态   -->
@@ -403,7 +407,7 @@ import {
     copyEnum,
     getEmrCopy,
     delEmrCopy,
-    completeModeSwitch, query, canIUnlockIt, unlockEnum
+    completeModeSwitch, query, canIUnlockIt, unlockEnum, emrMitt
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
 import {ElMessage, ElMessageBox} from "element-plus";
 import {BizException, ExceptionEnum} from "@/utils/BizException";
@@ -412,6 +416,7 @@ import store from "@/store";
 import {onBeforeRouteLeave} from "vue-router";
 import {getServerDateApi, getUuid} from "@/api/public-api";
 import {
+    audit,
     getDrgIntelligentGrouping,
     getExtractDataElement, hotSearchSorting,
     submitMedicalRecord
@@ -426,12 +431,13 @@ import EmrPopup from "@/components/zhu-yuan-yi-sheng/emr/EmrPopup.vue";
 import EmrAuxiliaryTools from "@/components/zhu-yuan-yi-sheng/emr/auxiliary-tools/EmrAuxiliaryTools.vue";
 import sleep from "@/utils/sleep";
 import EmrWebSocket from "@/components/zhu-yuan-yi-sheng/emr/web-socket/EmrWebSocket.vue";
-import {stringIsBlank, stringNotBlank} from "@/utils/blank-utils";
-import {createRestrictions} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
+import {stringIsBlank} from "@/utils/blank-utils";
 import {needRule} from "@/utils/public";
 import {isThereADoctorEditing} from "@/api/zhu-yuan-yi-sheng/emr-socket";
-import {onBeforeUnmount, onDeactivated, onUnmounted} from "vue";
+import {onDeactivated} from "vue";
 import EmrFirstPageOfMedicalRecord from "@/components/zhu-yuan-yi-sheng/emr/EmrFirstPageOfMedicalRecord.vue";
+import EmrResultReturns
+    from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrResultReturns.vue";
 
 
 const props = defineProps({
@@ -558,8 +564,6 @@ const emrEvent = {
         // 是否开启审阅模式
         reviewMode = 2
         isRevisionMode()
-        // 电子病历的质控限制 现在已经不需要限制医生了
-        // await medicalRecordQualityControl()
         // 判断是否只读
         readonlyPattern()
         // 填充患者数据
@@ -853,6 +857,18 @@ const clickDelete = () => {
     });
 }
 
+/**
+ * 上级医生审核
+ */
+const auditClick = () => {
+    if (doctorLevel < 2) {
+        BizException(ExceptionEnum.MESSAGE_ERROR, '您不是改患者的上级医生,无法进行该操作。')
+    }
+    whetherThereIsAMedicalRecordId()
+    waitForLoadingToComplete()
+    audit(documentId)
+}
+
 const whetherThereIsAMedicalRecordId = () => {
     if (!documentId) {
         BizException(ExceptionEnum.MESSAGE_ERROR, "请先选择患者的病历。")
@@ -1088,7 +1104,8 @@ const courseSegmentLocking = async () => {
         let courseTitles = [];
         let loginUserCode = userData.code;
         循环病程返回数据元((value, node) => {
-            courseTitles.push({
+            let fragment = node.getAttribute('fragment')
+            let pushData = {
                 code: '查房时间',
                 name: value['查房标题']?.value,
                 value: value['查房时间']?.value,
@@ -1098,8 +1115,13 @@ const courseSegmentLocking = async () => {
                 createName: createName,
                 createDate: value['查房时间']?.value,
                 createId: createId,
-                type: 'category'
-            })
+                type: 'category',
+            }
+            if (fragment != null) {
+                pushData.trueCreationTime = fragment?.creationTime
+            }
+            courseTitles.push(pushData);
+
             if (emrConfig.value.editor) {
                 let editorCode = value['编辑者']?.value[0]?.code;
                 if (editorCode) {
@@ -1498,46 +1520,6 @@ const monitorPageRefresh = (event) => {
     }
 }
 
-const medicalRecordQualityControl = async () => {
-    // 空的编辑器,不触发这个
-    if (stringIsBlank(categoryCode)) {
-        return
-    }
-    // 如果有申请就不触发
-    if (canIUnlockIt(unlockEnum.病历质控)) {
-        return
-    }
-
-    if (stringIsBlank(documentId)) {
-        let {
-            flag,
-            message
-        } = await createRestrictions(categoryCode, '', props.huanZheXinXi.inpatientNo + "_" + props.huanZheXinXi.admissTimes + '_' + doctorLevel)
-        if (flag) {
-            emptyEditor()
-            BizException(ExceptionEnum.LOGICAL_ERROR, message)
-        } else {
-            if (stringNotBlank(message)) {
-                xcMessage.success(message);
-            }
-        }
-    } else {
-        if (categoryCode !== emrCodeEnum.courseRecord) {
-            let {
-                flag,
-                message
-            } = await createRestrictions(categoryCode, documentId, props.huanZheXinXi.inpatientNo + "_" + props.huanZheXinXi.admissTimes + '_' + doctorLevel)
-
-            if (flag) {
-                editor.setEditorMode('readonly')
-                ElMessageBox.alert(message, '提示', {type: 'error'}).then(r => {
-                }).catch(() => {
-                })
-            }
-        }
-    }
-}
-
 /**
  * 打开已经保存了的病历
  * @param id 病历 id
@@ -1576,6 +1558,10 @@ onMounted(async () => {
     })
     autoSaveFunc()
 
+    emrMitt.on('editor', () => {
+        return editor
+    })
+
     watch(() => visibility.value, () => {
         // 离开页面的时候清空定时器
         if (visibility.value === 'hidden' && isEditorChange) {
@@ -1687,20 +1673,14 @@ const 解析病程记录 = () => {
             if (!fragmentData.creationTime) {
                 tempDate = values['查房时间']?.value
             }
-            data = {
-                name: values['查房标题']?.value,
-                createId: fragmentData.createId,
-                creationTime: tempDate,
-                referPhysician: extractFields('管床医生编码'),
-                consultPhysician: extractFields('主治医生编码'),
-                deptDirector: extractFields('主任医生编码'),
-            }
+            data = fragmentData
+            data.creationTime = tempDate
         }
         if (!data.creationTime) {
-            node.view.setAttribute('fragment', undefined)
             saveDialog.close()
             BizException(ExceptionEnum.MESSAGE_ERROR, '片段中存在异常查房时间,请检查。')
         }
+        node.view.setAttribute('fragment', data)
         fragment.push(data)
     })
     saveDialog.analyzeTheCourseOfTheDisease = false

+ 48 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrResultReturns.vue

@@ -0,0 +1,48 @@
+<template>
+    <el-popover :width="0">
+        <template #reference>
+            <el-button>
+                结果回报
+            </el-button>
+        </template>
+
+        <el-button v-for="item in requiteList" @click="createAnObject(item.code)">
+            {{ item.name }}
+        </el-button>
+
+    </el-popover>
+
+</template>
+
+<script setup name='EmrResultReturns'>
+import {emrMitt} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
+
+
+const requiteList = [
+    {name: 'CT检查结果', code: 'CT检查结果'},
+    {name: '磁共振检查结果', code: '磁共振检查结果'},
+    {name: '病理结果', code: '病理结果'},
+    {name: '细菌培养结果', code: '细菌培养结果'},
+]
+
+const createAnObject = (name) => {
+    let editor = emrMitt.emit('editor');
+    if (editor == null) return
+
+    editor.execute('insertContents', {
+        value: [
+            {
+                type: 'smarttext',
+                tips: name,
+                element: {code: {business: name, internal: '', dataElement: ''}, name: name, type: 'element'}
+            },
+        ], isPuzzlepiece: true, defaultValue: ''
+    })
+
+}
+
+</script>
+
+<style scoped lang="scss">
+
+</style>