Index.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <div>
  3. <div style="height: 6px"></div>
  4. <el-select v-model="currentWard" :clearable="wardsClearable" style="width: 90px" @change="fetchOverviews">
  5. <el-option v-for="item in allWards" :key="item.code" :label="item.name" :value="item.code"></el-option>
  6. </el-select>
  7. <el-select v-model="currentMedType" clearable style="width: 90px" @change="handleMedTypeChange">
  8. <el-option v-for="item in trueMedTypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
  9. </el-select>
  10. <el-select v-model="currentStatus" clearable style="width: 90px">
  11. <el-option :value="0" label="未登记"></el-option>
  12. <el-option :value="1" label="已登记"></el-option>
  13. </el-select>
  14. <el-table
  15. :data="cptOverviews.slice((currentPage - 1) * 17, currentPage * 17)"
  16. :height="visibleWindowSize.height - props.subtractHeight"
  17. highlight-current-row
  18. stripe
  19. @row-click="handleClickOverview"
  20. @selection-change="handleSelectionChange"
  21. >
  22. <el-table-column v-if="showSelection" type="selection" width="20"></el-table-column>
  23. <el-table-column label="床" prop="bedNo" width="30"></el-table-column>
  24. <el-table-column label="姓名" width="70">
  25. <template #default="scope">
  26. <div style="display: flex; align-items: center">
  27. <img :src="scope.row.sex === 1 ? maleIcon : femaleIcon" class="sex-icon"/>
  28. {{ scope.row.name }}
  29. </div>
  30. </template>
  31. </el-table-column>
  32. <el-table-column label="住院号" prop="inpatientNo" width="65"></el-table-column>
  33. <el-table-column label="次数" width="45">
  34. <template #default="scope">
  35. <div style="display: flex; align-items: center">
  36. {{ scope.row.admissTimes }}&nbsp;
  37. <img v-if="scope.row.dismissOrder > 0" :src="dismissIcon" class="sex-icon"/>
  38. </div>
  39. </template>
  40. </el-table-column>
  41. <el-table-column align="center" label="状态" props="status" width="45">
  42. <template #default="scope">
  43. <span v-html="getStatusFlag(scope.row.status)"></span>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. <el-pagination :hide-on-single-page="false" :page-size="17" :total="cptOverviews.length" layout="prev, pager, next"
  48. small @current-change="handleCurrentPageChange">
  49. </el-pagination>
  50. </div>
  51. </template>
  52. <script>
  53. import {computed, onMounted, ref} from 'vue'
  54. import store from '@/store'
  55. import maleIcon from '@/assets/male-icon.png'
  56. import femaleIcon from '@/assets/female-icon.png'
  57. import dismissIcon from '@/assets/dismiss-icon.png'
  58. import {getOverView, getPatientInfo} from '@/api/inpatient/patient'
  59. import {setBaseinfo} from '@/data/inpatient'
  60. import {trueMedTypes} from '@/data'
  61. import {getWardsApi} from '@/api/login'
  62. import {allWardsVisible} from '@/utils/permission'
  63. import {visibleWindowSize} from '@/utils/window-size'
  64. export default {
  65. props: {
  66. showSelection: {
  67. type: Boolean,
  68. default: false,
  69. },
  70. subtractHeight: {
  71. type: Number,
  72. default: 100
  73. }
  74. },
  75. emits: [],
  76. setup(props, ctx) {
  77. const wardsClearable = allWardsVisible()
  78. const currentWard = ref('')
  79. const currentMedType = computed({
  80. get: () => {
  81. return store.state.ptnt.currentMedType
  82. },
  83. set: (val) => {
  84. store.commit('ptnt/setCurrentMedType', val)
  85. store.commit('ptnt/setBaseinfo', {totalCharge: '0.00', chargeYb: '0.00'})
  86. },
  87. })
  88. const currentStatus = ref('')
  89. const allWards = ref([])
  90. const overviews = ref([])
  91. const currentPage = ref(1)
  92. const handleCurrentPageChange = (val) => {
  93. currentPage.value = val
  94. }
  95. const tableHieght = computed(() => {
  96. return store.state.app.windowSize.h - 75
  97. })
  98. const cptOverviews = computed(() => {
  99. if (currentMedType.value) {
  100. if (currentStatus.value !== '') {
  101. return overviews.value.filter((item) => {
  102. return item.medType === currentMedType.value && item.status === currentStatus.value
  103. })
  104. }
  105. return overviews.value.filter((item) => {
  106. return item.medType === currentMedType.value
  107. })
  108. }
  109. if (currentStatus.value !== '') {
  110. return overviews.value.filter((item) => {
  111. return item.status === currentStatus.value
  112. })
  113. }
  114. return overviews.value
  115. })
  116. const fetchOverviews = () => {
  117. store.commit('user/wardChange', currentWard.value)
  118. getOverView(currentWard.value).then((res) => {
  119. overviews.value = res
  120. })
  121. }
  122. const handleClickOverview = (row) => {
  123. store.commit('ptnt/setOverview', row)
  124. getPatientInfo(row.inpatientNo).then((res) => {
  125. setBaseinfo(res)
  126. })
  127. }
  128. const handleSelectionChange = (val) => {
  129. store.commit('ptnt/setSelections', val)
  130. }
  131. const handleMedTypeChange = (val) => {
  132. store.commit('ptnt/setInjuryMode', val === '42')
  133. }
  134. onMounted(() => {
  135. getWardsApi().then((res) => {
  136. if (res.length > 0) {
  137. allWards.value = res
  138. currentWard.value = wardsClearable ? '' : res[0].code
  139. fetchOverviews()
  140. }
  141. })
  142. })
  143. return {
  144. maleIcon,
  145. femaleIcon,
  146. dismissIcon,
  147. wardsClearable,
  148. trueMedTypes,
  149. currentWard,
  150. currentMedType,
  151. currentStatus,
  152. allWards,
  153. tableHieght,
  154. cptOverviews,
  155. currentPage,
  156. overviews,
  157. handleCurrentPageChange,
  158. getStatusFlag,
  159. fetchOverviews,
  160. handleClickOverview,
  161. handleSelectionChange,
  162. handleMedTypeChange,
  163. visibleWindowSize,
  164. props
  165. }
  166. },
  167. }
  168. function getStatusFlag(val) {
  169. if (val === 1) {
  170. return '<span style="color: green">已登记</span>'
  171. }
  172. return '<span style="color:red">未登记</span>'
  173. }
  174. </script>
  175. <style scoped>
  176. :deep(.el-header) {
  177. padding: 0 !important;
  178. }
  179. :deep(.el-input__inner) {
  180. padding: 0 8px 0 6px;
  181. }
  182. </style>