浏览代码

准备做医嘱系统

lighter 3 年之前
父节点
当前提交
918e12abd8

+ 9 - 0
src/api/inpatient/doctors-advise.js

@@ -0,0 +1,9 @@
+import request from '../../utils/request'
+
+export function selectPatientList(ward) {
+    return request({
+        url: '/doctorsAdvise/selectPatientList',
+        method: 'get',
+        params: { ward }
+    })
+}

+ 0 - 22
src/api/login.js

@@ -1,27 +1,5 @@
 import request from '../utils/request'
 
-export function login(data) {
-  return request({
-    url: '/login/login',
-    method: 'post',
-    data,
-  })
-}
-
-export function getWards() {
-  return request({
-    url: '/login/getWards',
-    method: 'get',
-  })
-}
-
-export function fetchMenus() {
-  return request({
-    url: '/login/fetchMenus',
-    method: 'get',
-  })
-}
-
 export function loginApi(data) {
   return request({
     url: '/login/login',

+ 2 - 2
src/components/medical-insurance/patient-overview/Index.vue

@@ -59,7 +59,7 @@ import dismissIcon from '@/assets/dismiss-icon.png'
 import {getOverView, getPatientInfo} from '@/api/inpatient/patient'
 import {setBaseinfo} from '@/data/inpatient'
 import {trueMedTypes} from '@/data/index'
-import {getWards} from '@/api/login'
+import {getWardsApi} from '@/api/login'
 import {allWardsVisible} from '@/utils/permission'
 
 export default {
@@ -131,7 +131,7 @@ export default {
     }
 
     onMounted(() => {
-      getWards().then((res) => {
+      getWardsApi().then((res) => {
         if (res.length > 0) {
           allWards.value = res
           currentWard.value = wardsClearable ? '' : res[0].code

+ 11 - 0
src/router/modules/dashboard.js

@@ -375,6 +375,17 @@ const route = [
                 component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/FrontSheetExport.vue')),
                 meta: {title: '病案首页导出', icon: 'iconfont icon-binganshouye3x'},
             },
+            {
+                path: 'doctorsAdvise/doctorsAdviseGenerate',
+                component: createNameComponent(() => import('@/views/hospitalization/doctors-advise/DoctorsAdviseGenerate.vue')),
+                meta: {title: '医嘱生成', icon: 'iconfont icon-binganshouye3x'},
+            },
+            {
+                path: 'doctorsAdvise/printInfusionCard',
+                component: createNameComponent(() => import('@/views/hospitalization/doctors-advise/PrintInfusionCard.vue')),
+                meta: {title: '打印输液卡', icon: 'iconfont icon-binganshouye3x'},
+            },
+
             {
                 path: 'casefrntsht/jieShouHuiZhen',
                 component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/JieShouHuiZhen.vue')),

+ 42 - 0
src/tsconfig.json

@@ -0,0 +1,42 @@
+{
+  "compilerOptions": {
+    "types": [
+      "vue/ref-macros"
+    ],
+    "target": "esnext",
+    "useDefineForClassFields": true,
+    "module": "esnext",
+    "moduleResolution": "node",
+    "strict": true,
+    "jsx": "preserve",
+    "sourceMap": true,
+    "resolveJsonModule": true,
+    "isolatedModules": true,
+    "esModuleInterop": true,
+    "experimentalDecorators": true,
+    "lib": [
+      "esnext",
+      "dom"
+    ],
+    "baseUrl": "./",
+    // 用于设置解析非相对模块名称的基本目录,相对模块不会受到baseUrl的影响
+    "paths": {
+      "@/*": [
+        "src/*"
+      ]
+    },
+    "skipLibCheck": true
+  },
+  "include": [
+    "src/**/*.ts",
+    "src/**/*.d.ts",
+    "src/**/*.tsx",
+    "src/**/*.vue",
+  ],
+  "references": [
+    {
+      "path": "./tsconfig.node.json"
+    }
+  ]
+}
+

+ 8 - 0
src/tsconfig.node.json

@@ -0,0 +1,8 @@
+{
+  "compilerOptions": {
+    "composite": true,
+    "module": "esnext",
+    "moduleResolution": "node"
+  },
+  "include": ["vite.config.ts"]
+}

+ 108 - 0
src/views/hospitalization/doctors-advise/DoctorsAdviseGenerate.vue

@@ -0,0 +1,108 @@
+<template>
+  <el-container>
+    <el-header>
+      <span>病区:</span>
+      <el-select v-model="currentWard" style="width: 100px" @change="fetchPatientList">
+        <el-option v-for="item in userWards" :key="item.code" :label="item.name" :value="item.code"></el-option>
+      </el-select>
+      <el-divider direction="vertical"></el-divider>
+      <span style="margin-left: 8px">医嘱日期:</span>
+      <el-date-picker v-model="adviseDate" :disabled-date="disabledDate" style="width: 120px"></el-date-picker>
+      <el-divider direction="vertical"></el-divider>
+      <el-button type="primary">
+        <i class="iconfont icon-yaopin" style="font-size: 12px"></i>
+        &nbsp;&nbsp;生成药品
+      </el-button>
+      <el-button type="primary">
+      <i class="iconfont icon-menzhen" style="font-size: 12px"></i>
+        &nbsp;&nbsp;生成诊疗
+      </el-button>
+    </el-header>
+    <el-main>
+      <el-table ref="patListRef" :height="tableHeight" :data="patientList" stripe highlight-current-row>
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column prop="patNo" label="住院号"></el-table-column>
+        <el-table-column prop="times" label="住院次数"></el-table-column>
+        <el-table-column prop="name" label="姓名"></el-table-column>
+        <el-table-column prop="admdate" label="入院时间"></el-table-column>
+        <el-table-column prop="bedNo" label="床号"></el-table-column>
+        <el-table-column prop="totalCharge" label="总费用"></el-table-column>
+        <el-table-column prop="balance" label="余额">
+          <template #default="scope">
+            <span v-html="coloredBalance(scope.row.balance)"></span>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-main>
+  </el-container>
+</template>
+
+<script lang="ts" setup>
+import {onMounted, Ref, ref} from "vue";
+import store from '@/store'
+import {getDate,formatDate} from '@/utils/date'
+import { ElTable } from 'element-plus'
+import {getWardsApi} from '@/api/login'
+import {selectPatientList} from '@/api/inpatient/doctors-advise'
+import Sleep from '@/utils/sleep'
+
+interface Ward {
+  code: string
+  name: string
+}
+
+interface Patient {
+  patNo: string
+  times: number
+  name: string
+  admdate: string
+  bedNo: string
+  totalCharge: number
+  balance: number
+}
+
+const nowTimestamp:number = new Date().getTime()
+const tableHeight:number = store.state.app.windowSize.h - 60;
+
+const adviseDate:Ref<string> = ref()
+
+const userWards:Ref<Ward[]> = ref()
+const currentWard:Ref<string> = ref()
+
+const patListRef:Ref<InstanceType<typeof ElTable>> = ref()
+
+const patientList:Ref<Patient[]> = ref()
+
+const disabledDate = (date):boolean => {
+  const offset:number = (nowTimestamp - date.getTime()) / 1000 / 60 / 60 / 24
+  return offset > 7 || offset < 0
+}
+
+const coloredBalance = (balance:number):string => {
+  const color:string = balance > 0 ? 'green' : balance < 0 ? 'red' : 'gray'
+  return `<span style="color: ${color}">${balance}</span>`
+}
+
+const fetchPatientList = ():void => {
+  if (currentWard.value) {
+    selectPatientList(currentWard.value).then(async res => {
+      patientList.value = res
+      await Sleep(100)
+      patientList.value.forEach((row: Patient) => {
+        if (row.balance >= 0) {
+          patListRef.value.toggleRowSelection(row, undefined)
+        }
+      })
+    })
+  }
+}
+
+onMounted(() => {
+  adviseDate.value = getDate()
+  getWardsApi().then(res => {
+    userWards.value = res
+    currentWard.value = res[0].code
+    fetchPatientList()
+  })
+})
+</script>

+ 5 - 0
src/views/hospitalization/doctors-advise/PrintInfusionCard.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    打印输液卡
+  </div>
+</template>