CheckExamIndex.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <window-size>
  3. <van-cell title="选择日期区间" :value="date" @click="showDateShortcuts = true" />
  4. <van-dialog v-model:show="showDateShortcuts" @confirm="onConfirmShortcuts">
  5. <div style="display:flex; justify-content: center; padding: 30px 0 20px 0">
  6. <van-radio-group v-model="chosenShortcut">
  7. <van-radio name="oneWeek" style="margin-bottom: 12px">近一周</van-radio>
  8. <van-radio name="threeMonths" style="margin-bottom: 12px">近三月</van-radio>
  9. <van-radio name="halfYear" style="margin-bottom: 12px">近半年</van-radio>
  10. <van-radio name="oneYear" style="margin-bottom: 12px">近一年</van-radio>
  11. <van-radio name="diy">自定义</van-radio>
  12. </van-radio-group>
  13. </div>
  14. </van-dialog>
  15. <van-calendar v-model:show="showDateRange"
  16. :min-date="minDate"
  17. :max-date="maxDate"
  18. type="range"
  19. @confirm="onConfirm" />
  20. <div v-show="examIndex.length > 0">
  21. <div style="height: 5px"></div>
  22. <van-tag type="success" size="large" round plain>已发布报告</van-tag>
  23. <div style="height: 5px"></div>
  24. <div :style="scrollStyle">
  25. <div v-for="item in examIndex" :key="item.ordr_ID">
  26. <van-cell
  27. :title="item.aply_CTNT"
  28. :label="item.ordr_CREATE_DATE"
  29. is-link
  30. center
  31. :to="'/checkExamDetail/' + item.ordr_ID + '/' + patientId"
  32. >
  33. </van-cell>
  34. <div style="height: 5px"></div>
  35. </div>
  36. </div>
  37. </div>
  38. <van-empty :image="empty" description="您当前没有报告项目" v-show="examIndex.length === 0" />
  39. </window-size>
  40. </template>
  41. <script setup>
  42. import store from '../../../store'
  43. import empty from '../../../assets/empty.png'
  44. import { useRouter } from 'vue-router'
  45. import { computed, onMounted, ref } from 'vue'
  46. import { checkExamIndex } from '../../../api/check-exam'
  47. import {formatDate, getDateRangeByOffsetDays} from '../../../utils/date'
  48. const router = useRouter()
  49. const patientId = router.currentRoute.value.params.patientId
  50. const scrollStyle = {
  51. height: store.state.screenSize.h - 125 + 'px',
  52. overflowY: 'auto',
  53. }
  54. const date = ref('')
  55. const minDate = ref(new Date(2012, 0, 1))
  56. const maxDate = ref(new Date())
  57. const showDateShortcuts = ref(false)
  58. const chosenShortcut = ref('oneWeek')
  59. const onConfirmShortcuts = () => {
  60. switch (chosenShortcut.value) {
  61. case 'oneWeek':
  62. makeOffset(7).then((range) => {
  63. queryInspectionIndex(range[0], range[1])
  64. })
  65. return
  66. case 'threeMonths':
  67. makeOffset(90).then((range) => {
  68. queryInspectionIndex(range[0], range[1])
  69. })
  70. return;
  71. case 'halfYear':
  72. makeOffset(183).then((range) => {
  73. queryInspectionIndex(range[0], range[1])
  74. })
  75. return
  76. case 'oneYear':
  77. makeOffset(365).then((range) => {
  78. queryInspectionIndex(range[0], range[1])
  79. })
  80. return;
  81. default:
  82. showDateRange.value = true
  83. return;
  84. }
  85. }
  86. const makeOffset = (offsetDays) => {
  87. return new Promise((resolve, reject) => {
  88. const temp = getDateRangeByOffsetDays(offsetDays)
  89. const dateRange = [temp.start, temp.end]
  90. store.dispatch({
  91. type: 'storeExamDateRange',
  92. dateRange: dateRange
  93. }).then(() => {
  94. date.value = dateRange[0] + ' - ' + dateRange[1]
  95. resolve(dateRange)
  96. })
  97. })
  98. }
  99. const showDateRange = ref(false)
  100. const examIndex = computed(() => {
  101. return store.state.examIndexArray
  102. })
  103. const onConfirm = (values) => {
  104. showDateRange.value = false
  105. const start = formatDate(values[0])
  106. const end = formatDate(values[1])
  107. store.dispatch({
  108. type: 'storeExamDateRange',
  109. dateRange: [start, end]
  110. }).then(() => {
  111. date.value = `${start} - ${end}`
  112. queryInspectionIndex(start, end)
  113. })
  114. }
  115. const queryInspectionIndex = (start, end) => {
  116. const param = {
  117. patientId,
  118. start: start,
  119. end: end,
  120. }
  121. checkExamIndex(param).then((res) => {
  122. store.commit('SET_EXAMINDEXARRAY', res)
  123. })
  124. }
  125. onMounted(() => {
  126. let storeRange = store.state.examDateRange
  127. if (storeRange.length === 0) {
  128. makeOffset(30).then((range) => {
  129. date.value = range[0] + ' - ' + range[1]
  130. queryInspectionIndex(range[0], range[1])
  131. })
  132. } else {
  133. date.value = storeRange[0] + ' - ' + storeRange[1]
  134. if (examIndex.value.length === 0) {
  135. queryInspectionIndex(storeRange[0], storeRange[1])
  136. }
  137. }
  138. })
  139. </script>