DoctorsAdviseGenerate.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <el-container>
  3. <el-header>
  4. <span>病区:</span>
  5. <el-select v-model="currentWard" style="width: 100px" @change="fetchPatientList">
  6. <el-option v-for="item in userWards" :key="item.code" :label="item.name" :value="item.code"></el-option>
  7. </el-select>
  8. <el-divider direction="vertical"></el-divider>
  9. <span style="margin-left: 8px">医嘱日期:</span>
  10. <el-date-picker v-model="adviseDate" :disabled-date="disabledDate" style="width: 120px"></el-date-picker>
  11. <el-divider direction="vertical"></el-divider>
  12. <el-button type="primary">
  13. <i class="iconfont icon-yaopin" style="font-size: 12px"></i>
  14. &nbsp;&nbsp;生成药品
  15. </el-button>
  16. <el-button type="primary">
  17. <i class="iconfont icon-menzhen" style="font-size: 12px"></i>
  18. &nbsp;&nbsp;生成诊疗
  19. </el-button>
  20. </el-header>
  21. <el-main>
  22. <el-table ref="patListRef" :height="tableHeight" :data="patientList" stripe highlight-current-row>
  23. <el-table-column type="selection"></el-table-column>
  24. <el-table-column prop="patNo" label="住院号"></el-table-column>
  25. <el-table-column prop="times" label="住院次数"></el-table-column>
  26. <el-table-column prop="name" label="姓名"></el-table-column>
  27. <el-table-column prop="admdate" label="入院时间"></el-table-column>
  28. <el-table-column prop="bedNo" label="床号"></el-table-column>
  29. <el-table-column prop="totalCharge" label="总费用"></el-table-column>
  30. <el-table-column prop="balance" label="余额">
  31. <template #default="scope">
  32. <span v-html="coloredBalance(scope.row.balance)"></span>
  33. </template>
  34. </el-table-column>
  35. </el-table>
  36. </el-main>
  37. </el-container>
  38. </template>
  39. <script lang="ts" setup>
  40. import {onMounted, Ref, ref} from "vue";
  41. import store from '@/store'
  42. import {getDate,formatDate} from '@/utils/date'
  43. import { ElTable } from 'element-plus'
  44. import {getWardsApi} from '@/api/login'
  45. import {selectPatientList} from '@/api/inpatient/doctors-advise'
  46. import Sleep from '@/utils/sleep'
  47. interface Ward {
  48. code: string
  49. name: string
  50. }
  51. interface Patient {
  52. patNo: string
  53. times: number
  54. name: string
  55. admdate: string
  56. bedNo: string
  57. totalCharge: number
  58. balance: number
  59. }
  60. const nowTimestamp:number = new Date().getTime()
  61. const tableHeight:number = store.state.app.windowSize.h - 60;
  62. const adviseDate:Ref<string> = ref()
  63. const userWards:Ref<Ward[]> = ref()
  64. const currentWard:Ref<string> = ref()
  65. const patListRef:Ref<InstanceType<typeof ElTable>> = ref()
  66. const patientList:Ref<Patient[]> = ref()
  67. const disabledDate = (date):boolean => {
  68. const offset:number = (nowTimestamp - date.getTime()) / 1000 / 60 / 60 / 24
  69. return offset > 7 || offset < 0
  70. }
  71. const coloredBalance = (balance:number):string => {
  72. const color:string = balance > 0 ? 'green' : balance < 0 ? 'red' : 'gray'
  73. return `<span style="color: ${color}">${balance}</span>`
  74. }
  75. const fetchPatientList = ():void => {
  76. if (currentWard.value) {
  77. selectPatientList(currentWard.value).then(async res => {
  78. patientList.value = res
  79. await Sleep(100)
  80. patientList.value.forEach((row: Patient) => {
  81. if (row.balance >= 0) {
  82. patListRef.value.toggleRowSelection(row, undefined)
  83. }
  84. })
  85. })
  86. }
  87. }
  88. onMounted(() => {
  89. adviseDate.value = getDate()
  90. getWardsApi().then(res => {
  91. userWards.value = res
  92. currentWard.value = res[0].code
  93. fetchPatientList()
  94. })
  95. })
  96. </script>