Bläddra i källkod

入院登记时添加更多的必填项

lighter 3 år sedan
förälder
incheckning
e83d0c386b

+ 22 - 0
src/api/dictionary/fetch-dictionaries.js

@@ -0,0 +1,22 @@
+import request from '../../utils/request'
+
+export function fetchCountryDictionary() {
+  return request({
+    url: '/fetchDictionaries/country',
+    method: 'get',
+  })
+}
+
+export function fetchNationDictionary() {
+  return request({
+    url: '/fetchDictionaries/nation',
+    method: 'get',
+  })
+}
+
+export function fetchRelationDictionary() {
+  return request({
+    url: '/fetchDictionaries/relation',
+    method: 'get',
+  })
+}

+ 8 - 9
src/layout/Header/Breadcrumb.vue

@@ -1,9 +1,8 @@
 <template>
-  <el-breadcrumb class="app-breadcrumb hidden-sm-and-down" separator="/">
+  <el-breadcrumb class="app-breadcrumb" separator="/">
     <transition-group appear name="breadcrumb">
       <el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
-        <span v-if="item.redirect === 'noRedirect' || index === levelList.length - 1"
-              class="no-redirect">{{ item.meta.title }}</span>
+        <span v-if="item.redirect === 'noRedirect' || index === levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
         <a v-else @click.prevent="handleLink(item)">
           {{ item.meta.title }}
         </a>
@@ -13,8 +12,8 @@
 </template>
 
 <script>
-import {defineComponent, ref, watch} from 'vue'
-import {useRoute, useRouter} from 'vue-router'
+import { defineComponent, ref, watch } from 'vue'
+import { useRoute, useRouter } from 'vue-router'
 
 export default defineComponent({
   name: 'BreadCrumb',
@@ -29,18 +28,18 @@ export default defineComponent({
     }
     getBreadcrumb()
     watch(
-        () => route.path,
-        () => getBreadcrumb()
+      () => route.path,
+      () => getBreadcrumb()
     )
     const handleLink = (item) => {
-      const {redirect, path} = item
+      const { redirect, path } = item
       if (redirect) {
         router.push(redirect.toString())
         return
       }
       router.push(path)
     }
-    return {levelList, handleLink}
+    return { levelList, handleLink }
   },
 })
 </script>

+ 43 - 0
src/layout/Header/functionList/download.vue

@@ -0,0 +1,43 @@
+<template>
+  <div title="下载">
+    <el-dropdown style="margin: 0 10px" trigger="click" @command="downloadReadCard">
+      <el-icon style="font-size: 18px"><Download /></el-icon>
+      <template #dropdown>
+        <el-dropdown-menu>
+          <el-dropdown-item command="thcardreader">读卡插件安装包</el-dropdown-item>
+          <el-dropdown-item command="framework" divided>.Net Framework</el-dropdown-item>
+          <el-dropdown-item command="chrome90" divided>高版本Chrome浏览器</el-dropdown-item>
+        </el-dropdown-menu>
+      </template>
+    </el-dropdown>
+  </div>
+</template>
+
+<script>
+import { defineComponent } from 'vue'
+
+export default defineComponent({
+  name: 'download',
+  setup() {
+    return {
+      downloadReadCard,
+    }
+  },
+})
+
+function downloadReadCard(command) {
+  let filename
+  switch (command) {
+    case 'thcardreader':
+      filename = '读卡插件.msi'
+      break
+    case 'framework':
+      filename = '.NET Framework 4.6.1.exe'
+      break
+    case 'chrome90':
+      filename = 'chrome90.exe'
+      break
+  }
+  window.open(`http://webhis.thyy.cn:8080/download/${filename}`, '_blank')
+}
+</script>

+ 2 - 2
src/layout/Header/functionList/message.vue

@@ -1,7 +1,7 @@
 <template>
-  <div title="消息" @click="showMessageLayer">
+  <div title="消息" @click="showMessageLayer" style="height: 18px">
     <el-badge :hidden="unreadCount <= 0" :value="unreadCount" :max="99" type="danger">
-      <i class="sfont el-icon-message"></i>
+      <el-icon><Message /></el-icon>
     </el-badge>
   </div>
   <div v-if="messageLayerVisible" class="message-layer">

+ 7 - 7
src/layout/Header/functionList/sizeChange.vue

@@ -14,9 +14,9 @@
 </template>
 
 <script>
-import {defineComponent, computed, unref} from 'vue'
-import {useRoute} from 'vue-router'
-import {useStore} from 'vuex'
+import { defineComponent, computed, unref } from 'vue'
+import { useRoute } from 'vue-router'
+import { useStore } from 'vuex'
 
 export default defineComponent({
   setup() {
@@ -24,11 +24,11 @@ export default defineComponent({
     const route = useRoute()
     const elementSize = computed(() => store.state.app.elementSize)
     const list = [
-      {size: 'large', name: '大'},
-      {size: 'default', name: '中'},
-      {size: 'small', name: '小'},
+      { size: 'large', name: '大' },
+      { size: 'default', name: '中' },
+      { size: 'small', name: '小' },
     ]
-    const {fullPath} = unref(route)
+    const { fullPath } = unref(route)
     return {
       list,
       elementSize,

+ 12 - 6
src/layout/Header/index.vue

@@ -10,16 +10,19 @@
     <div class="right-box">
       <!-- 快捷功能按钮 -->
       <div class="function-list">
-        <div class="function-list-item hidden-sm-and-down" style="margin-right: 10px">
+        <div class="function-list-item">
+          <Download />
+        </div>
+        <div class="function-list-item">
           <Message />
         </div>
-        <div class="function-list-item hidden-sm-and-down">
+        <div class="function-list-item">
           <Full-screen />
         </div>
         <div class="function-list-item">
           <SizeChange />
         </div>
-        <div class="function-list-item hidden-sm-and-down">
+        <div class="function-list-item">
           <Theme />
         </div>
       </div>
@@ -29,7 +32,7 @@
         <el-dropdown>
           <span class="el-dropdown-link">
             {{ username }}
-            <i class="el-icon-arrow-down el-icon--right"></i>
+            <el-icon><ArrowDown /></el-icon>
           </span>
           <template #dropdown>
             <el-dropdown-menu>
@@ -47,6 +50,7 @@
 <script>
 import { computed, defineComponent, reactive } from 'vue'
 import { useStore } from 'vuex'
+import Download from './functionList/download.vue'
 import Message from './functionList/message.vue'
 import FullScreen from './functionList/fullscreen.vue'
 import SizeChange from './functionList/sizeChange.vue'
@@ -56,6 +60,7 @@ import PasswordLayer from './passwordLayer.vue'
 
 export default defineComponent({
   components: {
+    Download,
     Message,
     FullScreen,
     Breadcrumb,
@@ -72,7 +77,6 @@ export default defineComponent({
     const ybCode = computed(() => {
       return store.getters['user/info'].ybCode
     })
-    // console.log(store.state.user.info)
     const layer = reactive({
       show: false,
       showButton: true,
@@ -82,7 +86,6 @@ export default defineComponent({
       store.commit('app/isCollapseChange', !isCollapse.value)
     }
 
-    // login out the system
     const loginOut = () => {
       store.dispatch('user/loginOut')
     }
@@ -161,6 +164,9 @@ header {
       display: flex;
       justify-content: center;
       align-items: center;
+      :hover {
+        cursor: pointer;
+      }
 
       :deep(i) {
         color: var(--system-header-text-color);

+ 2 - 11
src/layout/Tabs/index.vue

@@ -18,9 +18,6 @@
           </el-dropdown-menu>
         </template>
       </el-dropdown>
-      <el-tooltip :content="contentFullScreen ? '退出全屏' : '内容全屏'" class="item" effect="dark" placement="bottom">
-        <el-icon><Fullscreen @click="onFullscreen" /></el-icon>
-      </el-tooltip>
     </div>
   </div>
 </template>
@@ -31,7 +28,6 @@ import { computed, nextTick, ref, watch } from 'vue'
 import { useStore } from 'vuex'
 import { useRoute, useRouter } from 'vue-router'
 import tabsHook from './tabsHook'
-import Fullscreen from '../Header/functionList/fullscreen.vue'
 
 const store = useStore()
 const route = useRoute()
@@ -41,7 +37,6 @@ const defaultMenu = {
   path: '/dashboard',
   meta: { title: '首页', hideClose: true },
 }
-const contentFullScreen = computed(() => store.state.app.contentFullScreen)
 const currentDisabled = computed(() => route.path === defaultMenu.path)
 
 const activeMenu = ref('')
@@ -61,11 +56,6 @@ router.afterEach(() => {
   initMenu(route)
 })
 
-// 全屏
-function onFullscreen() {
-  store.commit('app/contentFullScreenChange', !contentFullScreen.value)
-}
-
 // 关闭当前标签,首页不关闭
 function closeCurrentRoute() {
   if (route.path !== defaultMenu.path) {
@@ -197,8 +187,9 @@ initMenu(route)
   box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);
 
   .handle {
-    min-width: 95px;
+    min-width: 35px;
     height: 100%;
+    background-color: rgb(228, 228, 228);
     display: flex;
     align-items: center;
 

+ 149 - 76
src/views/medical-insurance/inpatient/AdmRegistration.vue

@@ -12,73 +12,114 @@
     <el-main>
       <el-tag type="info">病人基本信息</el-tag>
       <div style="height: 4px"></div>
-      <el-row>
-        <el-col :span="2" style="text-align: right">住院号:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.inpatientNo" disabled></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">住院次数:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.admissTimes" disabled></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">身份证号:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.socialNo"></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">出生日期:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.birthDate" disabled></el-input>
-        </el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="2" style="text-align: right">姓名:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.name"></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">性别:</el-col>
-        <el-col :span="4">
-          <el-select v-model="patient.sex" placeholder="请选择">
+
+      <el-descriptions :column="3" border>
+        <el-descriptions-item>
+          <template #label> 住院号 </template>
+          {{ patient.inpatientNo }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 住院次数 </template>
+          {{ patient.admissTimes }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 出生日期 </template>
+          {{ patient.birthDate }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label>入院日期 </template>
+          {{ patient.admissDate }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 病区 </template>
+          {{ patient.admissWardName }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 入院诊断 </template>
+          <div style="width: 180px" class="ellipsis-text" :title="patient.admissDiagStr">{{ patient.admissDiagStr }}</div>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 小科室 </template>
+          {{ patient.smallDeptName }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 入院医生 </template>
+          {{ patient.admissPhysicianName }}
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label>身份证号 </template>
+          <el-input v-model="patient.socialNo" style="width: 180px" clearable></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 姓名 </template>
+          <el-input v-model="patient.name" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 性别 </template>
+          <el-select v-model="patient.sex" placeholder=" " style="width: 180px">
             <el-option v-for="item in sexes" :key="item.code" :label="item.name" :value="item.code"></el-option>
           </el-select>
-        </el-col>
-        <el-col :span="2" style="text-align: right">联系电话:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.homeTel"></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">入院日期:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.admissDate" disabled></el-input>
-        </el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="2" style="text-align: right">管床医生:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.referPhysicianName" readonly @click="searchPhysician"></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">病区:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.admissWardName" disabled></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">入院医生:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.admissPhysicianName" disabled></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">入院诊断:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.admissDiagStr" disabled></el-input>
-        </el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="2" style="text-align: right">小科室:</el-col>
-        <el-col :span="4">
-          <el-input v-model="patient.smallDeptName" disabled></el-input>
-        </el-col>
-        <el-col :span="2" style="text-align: right">登记日期:</el-col>
-        <el-col :span="4">
-          <el-date-picker v-model="patient.ybRegisterDate" placeholder="选择日期时间" style="width: 172px" type="datetime" @change="formatYbRegisterDate"></el-date-picker>
-        </el-col>
-        <el-col :span="2" style="text-align: right">参保地区:</el-col>
-        <el-col :span="4">
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 联系电话 </template>
+          <el-input v-model="patient.homeTel" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 管床医生 </template>
+          <el-input v-model="patient.referPhysicianName" readonly @click="searchPhysician(1)" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 责任护士 </template>
+          <el-input v-model="patient.dutyNurseName" readonly @click="searchPhysician(2)" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 国籍 </template>
+          <el-select v-model="patient.country" style="width: 180px" filterable>
+            <el-option v-for="item in countries" :key="item.code" :label="item.name" :value="item.code">
+              <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
+              <el-divider direction="vertical"></el-divider>
+              <span>{{ item.name }}</span>
+            </el-option>
+          </el-select>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 民族 </template>
+          <el-select v-model="patient.nation" style="width: 180px" filterable>
+            <el-option v-for="item in nations" :key="item.code" :label="item.name" :value="item.code">
+              <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
+              <el-divider direction="vertical"></el-divider>
+              <span>{{ item.name }}</span>
+            </el-option>
+          </el-select>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 联系人姓名 </template>
+          <el-input v-model="patient.contactName" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 联系人关系 </template>
+          <el-select v-model="patient.contactRelation" style="width: 180px" filterable>
+            <el-option v-for="item in relations" :key="item.code" :label="item.name" :value="item.code">
+              <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
+              <el-divider direction="vertical"></el-divider>
+              <span>{{ item.name }}</span>
+            </el-option>
+          </el-select>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 联系人地址 </template>
+          <el-input v-model="patient.contactAddrName" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 联系人电话 </template>
+          <el-input v-model="patient.contactPhone" style="width: 180px"></el-input>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 登记日期 </template>
+          <el-date-picker v-model="patient.ybRegisterDate" placeholder="选择日期时间" style="width: 180px" type="datetime" @change="formatYbRegisterDate"></el-date-picker>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 参保地区 </template>
           <el-select v-if="injuryMode" v-model="patient.injuryArea" placeholder="工伤参保地" size="small">
             <el-option v-for="item in injuryAreas" :key="item.code" :label="item.name" :value="item.code">
               <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
@@ -86,25 +127,26 @@
               <span>{{ item.name }}</span>
             </el-option>
           </el-select>
-          <el-select v-else v-model="patient.admdvs" clearable filterable placeholder="请选择">
+          <el-select v-else v-model="patient.admdvs" clearable filterable placeholder="请选择" style="width: 180px">
             <el-option v-for="item in admdvs" :key="item.code" :label="item.name" :value="item.code">
               <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
               <el-divider direction="vertical"></el-divider>
               <span>{{ item.name }}</span>
             </el-option>
           </el-select>
-        </el-col>
-        <el-col :span="2" style="text-align: right">医疗类别:</el-col>
-        <el-col :span="4">
-          <el-select v-model="patient.medType" clearable placeholder="请选择" @change="handleSelectMedType">
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template #label> 医疗类别 </template>
+          <el-select v-model="patient.medType" clearable placeholder="请选择" @change="handleSelectMedType" style="width: 180px">
             <el-option v-for="item in medTypes" :key="item.code" :disabled="item.disabled" :label="item.name" :value="item.code">
               <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
               <el-divider direction="vertical"></el-divider>
               <span>{{ item.name }}</span>
             </el-option>
           </el-select>
-        </el-col>
-      </el-row>
+        </el-descriptions-item>
+      </el-descriptions>
+
       <div style="margin-top: 16px">
         <el-tag type="info"> 医保入院诊断(*自费患者无需填写*)</el-tag>
         <el-button circle icon="Plus" title="添加入院诊断" type="primary" @click="openDiagDialog"></el-button>
@@ -260,6 +302,7 @@ import store from '@/store'
 import { computed, onActivated, onDeactivated, onMounted, reactive, ref, watchEffect } from 'vue'
 import { getZyInYbDiags, saveZyInYbDiags, submitSiPatientInfo } from '@/api/yibao/patient'
 import { getAllSpecialDiags } from '@/api/yibao/dictionary'
+import { fetchCountryDictionary, fetchNationDictionary, fetchRelationDictionary } from '@/api/dictionary/fetch-dictionaries'
 import { cptSex } from '@/utils/computed'
 import { admdvs, diagTypes, sexes } from '@/data/index'
 import { nullPatient } from '@/utils/validate'
@@ -324,6 +367,9 @@ export default {
     })
 
     const medTypes = ref([])
+    const countries = ref([])
+    const nations = ref([])
+    const relations = ref([])
     const diagItem = ref({})
     const showSearchSpecialDiag = ref(false)
     const insuinfo = ref([])
@@ -478,16 +524,31 @@ export default {
       })
     }
 
-    const searchPhysician = () => {
-      searchParams.title = '管床医生'
+    const searchPhysician = (flag) => {
+      switch (flag) {
+        case 1:
+          searchParams.title = '管床医生'
+          break
+        case 2:
+          searchParams.title = '责任护士'
+          break
+      }
       searchParams.target = 'physician'
       searchParams.showSearch = true
     }
 
     const handleClickSearchItem = (item) => {
       if (searchParams.target === 'physician') {
-        patient.value.referPhysician = item.code
-        patient.value.referPhysicianName = item.name
+        switch (searchParams.title) {
+          case '管床医生':
+            patient.value.referPhysician = item.code
+            patient.value.referPhysicianName = item.name
+            break
+          case '责任护士':
+            patient.value.dutyNurse = item.code
+            patient.value.dutyNurseName = item.name
+            break
+        }
       } else if (searchParams.target === 'diag' || searchParams.target === 'injurydiag') {
         diagItem.value.icdCode = item.icdCode
         diagItem.value.icdText = item.icdText
@@ -783,6 +844,15 @@ export default {
       getMedTypesByFlag('hospitalization').then((res) => {
         medTypes.value = res
       })
+      fetchCountryDictionary().then((res) => {
+        countries.value = res
+      })
+      fetchNationDictionary().then((res) => {
+        nations.value = res
+      })
+      fetchRelationDictionary().then((res) => {
+        relations.value = res
+      })
     })
 
     return {
@@ -791,6 +861,9 @@ export default {
       sexes,
       admdvs,
       medTypes,
+      countries,
+      nations,
+      relations,
       insuinfo,
       zyInYbDiags,
       showSearchSpecialDiag,

+ 0 - 30
src/views/medical-insurance/inpatient/Home.vue

@@ -15,19 +15,6 @@
           </span>
           &nbsp;&nbsp;
           <el-button type="primary" icon="Postcard" @click="checkIdCard">身份信息</el-button>
-          <el-dropdown style="margin: 0 10px" trigger="click" @command="downloadReadCard">
-            <el-button type="primary">
-              下载读卡程序&nbsp;<el-icon><ArrowDown /></el-icon>
-            </el-button>
-            <template #dropdown>
-              <el-dropdown-menu>
-                <el-dropdown-item command="thcardreader">读卡插件安装包</el-dropdown-item>
-                <el-dropdown-item command="framework" divided>.Net Framework</el-dropdown-item>
-                <el-dropdown-item command="chrome90" divided>高版本Chrome浏览器</el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
-
           <el-button style="margin-left: 10px" type="success" icon="Document" @click="getRegInfo">登记信息 </el-button>
           <el-button style="margin-left: 10px" type="danger" icon="MagicStick" @click="toEmpiView">360视图 </el-button>
         </el-header>
@@ -130,7 +117,6 @@ export default {
       getRegInfo,
       toEmpiView,
       searchPatient,
-      downloadReadCard,
       handleSelectSearchMehtod,
     }
   },
@@ -163,20 +149,4 @@ function makeOverview(val) {
     status: val.mdtrtId || val.injurySerialNo ? 1 : 0,
   }
 }
-
-function downloadReadCard(command) {
-  let filename
-  switch (command) {
-    case 'thcardreader':
-      filename = '读卡插件.msi'
-      break
-    case 'framework':
-      filename = '.NET Framework 4.6.1.exe'
-      break
-    case 'chrome90':
-      filename = 'chrome90.exe'
-      break
-  }
-  window.open(`http://172.16.32.160:8080/download/${filename}`, '_blank')
-}
 </script>