Selaa lähdekoodia

Merge remote-tracking branch 'upstream/master'

hsh 1 vuosi sitten
vanhempi
commit
23c8ed0ab4

+ 8 - 0
src/api/surgical-management/surgery-arrangement.js

@@ -30,3 +30,11 @@ export function updateArrangement(recordId, column, value) {
         params: { recordId, column, value }
     })
 }
+
+export function notifyDoctor(data) {
+    return request({
+        url: '/surgeryArrangement/notifyDoctor',
+        method: 'post',
+        data
+    })
+}

+ 2 - 1
src/utils/emr/edit.ts

@@ -259,8 +259,9 @@ export declare type EditType = {
      * 设置 setApplicatioinContext
      * @param data 数据
      * @param filling 是否填充
+     * @param forcedReplacement 是否强制替换
      */
-    setApplicationContext: (data: any, filling: boolean) => void
+    setApplicationContext: (data: any, filling: boolean, forcedReplacement: boolean) => void
 }
 
 export declare type Runtime = {

+ 3 - 1
src/utils/store-public.ts

@@ -15,7 +15,9 @@ export const userInfoStore: ComputedRef<{
     // 名字
     name: string
     // 兼诊科室的 map
-    partTimeDeptMap: Object
+    partTimeDeptMap: {
+        [key: string]: string
+    }
     // 权限
     roles: Array<number>
     // token

+ 28 - 15
src/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue

@@ -17,12 +17,13 @@
       <el-button type="primary" icon="Upload" @click="saveVerify(1)">保存首页</el-button>
       <el-button type="success" icon="Printer" @click="beforePrint(1)">打印正面</el-button>
       <el-button type="success" icon="Printer" @click="beforePrint(2)">打印反面</el-button>
+      <el-button type="danger" icon="Refresh" @click="renewSheet">重新生成病案</el-button>
       <el-button type="primary" icon="PieChart" @click="setlUplaodClick" v-if="inOutStatus === 2">结算清单质控
       </el-button>
     </template>
     <template #aside>
       <el-table ref="asideTable" :data="overview" :height="tableHeight" stripe highlight-current-row
-                @row-click="fetchSheetInfo">
+                @row-click="handleClickOverview">
         <el-table-column prop="bedNo" label="床" width="30"></el-table-column>
         <el-table-column label="姓名" width="70">
           <template #default="scope">
@@ -990,8 +991,7 @@ import {
   getSsfzSurgeriesByIcd,
   increaseDiagWeight,
   selectSiDiagByBaDiag,
-  isMedinsSetl,
-} from '@/api/case-front-sheet'
+  isMedinsSetl} from '@/api/case-front-sheet'
 import maleIcon from '@/assets/male-icon.png'
 import femaleIcon from '@/assets/female-icon.png'
 import {ElMessage, ElNotification} from 'element-plus'
@@ -1059,7 +1059,7 @@ const searchPatient = () => {
     })
   } else {
     const currentPatient = overview.value[patientIndex]
-    fetchSheetInfo(currentPatient)
+    handleClickOverview(currentPatient)
     smoothScrollTableColumn(asideTable.value, patientIndex, currentPatient)
   }
 }
@@ -1113,6 +1113,13 @@ const fetchOverview = () => {
   })
 }
 
+const currentRow = ref({})
+
+const handleClickOverview = (row) => {
+  currentRow.value = row
+  fetchSheetInfo(row)
+}
+
 const fetchSheetInfo = (row) => {
   if (row.bah !== patient.value.bah || row.times !== patient.value.admissTimes) {
     forceVerifies.value = []
@@ -1120,12 +1127,19 @@ const fetchSheetInfo = (row) => {
   }
   row.inOutFlag = inOutStatus.value
   getSheetInfo(row).then((res) => {
+    currentRow.value.renew = false
     patient.value = res
     patient.value.bedNo = row.bedNo
     patient.value.sex = row.sex
   })
 }
 
+const renewSheet = () => {
+  patient.value = {}
+  currentRow.value.renew = true
+  fetchSheetInfo(currentRow.value)
+}
+
 const currentSRPage = ref(1)
 const showSearch = ref(false)
 const insertDiag = ref(false)
@@ -1723,19 +1737,18 @@ const beforePrint = (page) => {
     sheet: patient.value,
     page: page
   }
-  executePrintVerify(param)
-      .then(() => {
+  executePrintVerify(param).then(() => {
         execPrint(page)
-      })
-      .catch((e) => {
-        forceVerifies.value = e.data.force
-        adviceVerifies.value = e.data.advice
-        showMessageDrawer.value = true
-        if (e.data.force.length === 0) {
-          execPrint(page)
-        }
-      })
+  }).catch((e) => {
+    forceVerifies.value = e.data.force
+    adviceVerifies.value = e.data.advice
+    showMessageDrawer.value = true
+    if (e.data.force.length === 0) {
+      execPrint(page)
+    }
+  })
 }
+
 const execPrint = (page) => {
   const LODOP = getLodop()
   const prntStyle = `<style>*{font-size:10pt} table,th,td {border: 1px solid black;border-collapse: collapse;} td,th {height: 24px;padding-left: 4px;}</style>`

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

@@ -516,8 +516,8 @@ const emrEvent = {
         emrEditorMounted(categoryCode.value, editor, patientData.value)
       }
     }
-
-    if (stringIsBlank(createId) || createId === userInfoStore.value.code) {
+    // 可以编辑的才能触发
+    if (emrConfig.value.editor) {
       editor.setApplicationContext({
         endpoints: {
           app: "/bdp/dataservice/api",
@@ -534,9 +534,10 @@ const emrEvent = {
             name: userInfoStore.value.name
           }
         },
-        data: patientData.value
-      }, true)
+        data: (stringIsBlank(createId) || createId === userInfoStore.value.code) ? patientData.value : {}
+      }, true, false)
     }
+
   },
   'contentchange': (e, op) => {
     if (op.batch.type === 'persist') return
@@ -595,6 +596,7 @@ const emrEvent = {
     return true
   },
   "beforePaste": (evt, data) => {
+    console.log('beforePaste', evt, data, data.isPlainText)
     return true
   }
 }
@@ -1246,13 +1248,11 @@ const courseSegmentLocking = async () => {
           node.view.setDeletable(false);
         }
       }
-
       // 测试环境下面随便删除
       if (isDev) {
         node.view.setReadonly(false);
         node.view.setDeletable(true);
       }
-
     } else {
       node.view.setReadonly(true);
       node.view.setDeletable(false);
@@ -1269,7 +1269,6 @@ const reQueryPatientInformation = () => {
   if (readonlyPattern()) return;
   // 如果病历是空的 且创建人不是自己不触发
   if (stringIsBlank(createId) || createId !== userInfoStore.value.code) return;
-
   // 如果没有文档 id 就说明是新建的,extractData如果是空就不用调用,不然他会使用 getAppContext 里面的数据
   if (getId() && extractData.value) {
     editor.setValues(extractData.value, true, true)
@@ -1753,7 +1752,6 @@ const hisSaveEmrInit = () => {
 }
 
 
-
 let hisSaveEmr: UseEmrInitReturn = {}
 
 onMounted(async () => {

+ 9 - 6
src/views/med-tec-mod/MenZhenXiangMu.vue

@@ -162,6 +162,8 @@ import {clone} from '@/utils/clone.js'
 import {ElMessage, ElMessageBox} from 'element-plus'
 import {listIsBlank, stringIsBlank} from '@/utils/blank-utils'
 import {needRule} from "@/utils/public";
+import {userInfoStore} from "@/utils/store-public";
+import XEUtils from 'xe-utils'
 
 export default {
   setup() {
@@ -172,8 +174,6 @@ export default {
     const xiangMuZhuangTai = ref(0)
     const chargeDate = ref('')
 
-    const rolesList = store.state.user.info.roles
-
     const patient = ref({})
 
     const shouFeiData = ref([])
@@ -202,18 +202,21 @@ export default {
 
     const lingShiBaoCunJiaoFeiMingXi = ref({})
 
+    function deptList(item) {
+      return !!userInfoStore.value.partTimeDeptMap[item];
+    }
+
     const getFeiYongXinXiClick = (val) => {
       chargeDate.value = val.chargeDate
       getFeiYongXinXi(val.realNo, val.patientId, val.times, xiangMuZhuangTai.value).then((res) => {
         keQueRenData.value = []
         feiYongData.value = res
-        lingShiBaoCunJiaoFeiMingXi.value = clone(val)
-        let dept = store.state.user.info.deptCode
+        lingShiBaoCunJiaoFeiMingXi.value = XEUtils.clone(val)
         if (needRule(1)) {
-          keQueRenData.value = clone(feiYongData.value)
+          keQueRenData.value = XEUtils.clone(feiYongData.value, true)
         } else {
           keQueRenData.value = feiYongData.value.filter((item) => {
-            return item.execDept === dept || stringIsBlank(item.execDept)
+            return deptList(item.execDept) || stringIsBlank(item.execDept)
           })
         }
       })

+ 1 - 2
src/views/settings/permissions/UserRoleSettings.vue

@@ -134,8 +134,7 @@ import PageLayer from "@/layout/PageLayer";
 
 const windowSize = store.state.app.windowSize
 const tableHeight = windowSize.h - 10
-
-const competence = needRule(1)
+const competence = needRule(1, 62)
 
 const depts = ref([])
 const users = ref([])

+ 21 - 4
src/views/surgical-management/SurgeryArrangement.vue

@@ -265,18 +265,19 @@ import {
   getDicList,
   selectSurgeryArrangements,
   updateSurgeryStatus,
-  updateArrangement
+  updateArrangement,
+  notifyDoctor
 } from '@/api/surgical-management/surgery-arrangement'
 import {shortcuts} from '@/data/shortcuts.js'
-import {formatDate, formatDatetime, getDateRangeFormatDate, getDateRangeFormatDateTime, getDatetime} from '@/utils/date'
-import {listIsBlank, stringIsBlank, stringNotBlank} from '@/utils/blank-utils'
+import {formatDate, formatDatetime, getDateRangeFormatDate} from '@/utils/date'
+import {listIsBlank, stringNotBlank} from '@/utils/blank-utils'
 import store from '@/store'
 import {ElMessage, ElMessageBox} from 'element-plus'
 import PageLayer from '@/layout/PageLayer.vue'
 import Search from '@/components/search/Index.vue'
 import router from '@/router'
 import {initLodop, getLodop} from '@/utils/c-lodop'
-import {refundOrder} from "@/api/wxpay-refund";
+import cyMessageBox from "@/components/cy/message-box/src/cy-message-box";
 
 const windowSize = computed(() => {
   return store.state.app.windowSize
@@ -389,6 +390,22 @@ const changeArrangementExecuted = (row) => {
   const targetVal = row.arrangementExecuted === 0 ? 1 : 0
   updateArrangement(row.recordId, 'arrangement_executed', targetVal).then(() => {
     currentRow.value.arrangementExecuted = targetVal
+    if (targetVal === 1) {
+      cyMessageBox.confirm({
+        title: '提示',
+        message: '是否向手术医生发送通知?',
+        type: 'warning'
+      }).then(() => {
+        notifyDoctor(row).then((res2) => {
+          ElMessage({
+            message: res2,
+            type: 'success',
+            duration: 2000,
+            showClose: true
+          })
+        })
+      })
+    }
   })
 }