exercise-detail.tsx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import { Cell, Grid, GridItem, NavBar, Popup, Sticky } from 'vant'
  2. import { defineComponent, onMounted, reactive, ref } from 'vue'
  3. import styles from '../index.module.less'
  4. import iconTeacher from '@/common/images/icon_teacher.png'
  5. import { useRoute, useRouter } from 'vue-router'
  6. import request from '@/helpers/request'
  7. import { state } from '@/state'
  8. import OFullRefresh from '@/components/o-full-refresh'
  9. import Details from './details'
  10. import OHeader from '@/components/o-header'
  11. import OSticky from '@/components/o-sticky'
  12. import { courseEmnu } from '@/constant'
  13. import { moneyFormat } from '@/helpers/utils'
  14. import dayjs from 'dayjs'
  15. export const courseSalaryRecordDetailItem = ref<ICourseSalaryRecordDetailItem>()
  16. export default defineComponent({
  17. name: 'subsidy-exercise-detail',
  18. setup() {
  19. const route = useRoute()
  20. const router = useRouter()
  21. const refreshing = ref(false)
  22. const modelData = reactive({
  23. show: false,
  24. row: null as any
  25. })
  26. const data = reactive({
  27. /**补助明细 */
  28. record: {
  29. userName: '',
  30. avatar: '',
  31. courseSalaryRecordDetailList: [] as ICourseSalaryRecordDetailItem[]
  32. } as ICourseSalaryRecordDetail
  33. })
  34. const getData = () => {
  35. request
  36. .post(`${state.platformApi}/schoolWeekSalaryRecord/detailInfo/course`, {
  37. data: {
  38. ...route.query
  39. }
  40. })
  41. .then((res: any) => {
  42. data.record = res?.data || {}
  43. })
  44. .finally(() => {
  45. refreshing.value = false
  46. })
  47. }
  48. onMounted(() => {
  49. getData()
  50. })
  51. return () => (
  52. <div>
  53. <OSticky
  54. onGetHeight={(height: number) => {
  55. document.documentElement.style.setProperty('--header-height', height + 'px')
  56. }}
  57. >
  58. <OHeader></OHeader>
  59. </OSticky>
  60. <OFullRefresh
  61. v-model:modelValue={refreshing.value}
  62. onRefresh={getData}
  63. style="min-height: calc(100vh - var(--header-height))"
  64. >
  65. <div class={styles.wrap}>
  66. <div class={styles.item}>
  67. <Cell center class={styles.rewardItem}>
  68. {{
  69. icon: () => (
  70. <img class={styles.itemPicture} src={data.record.avatar || iconTeacher} />
  71. ),
  72. title: () => (
  73. <div class={styles.itemTitle}>
  74. <span>{data.record.userName}</span>
  75. </div>
  76. ),
  77. value: () => (
  78. <>
  79. <div class={styles.gridItem}>
  80. <div class={styles.gridItemTop}>
  81. <span class={styles.topNum} style={{ color: '#333' }}>
  82. {moneyFormat(data.record.expectSalary || 0)}
  83. </span>
  84. </div>
  85. <div class={styles.valeLabel}>预计补助</div>
  86. </div>
  87. <div class={styles.gridItem}>
  88. <div class={styles.gridItemTop}>
  89. <span class={styles.topNum}>
  90. {moneyFormat(data.record.actualSalary || 0)}
  91. </span>
  92. </div>
  93. <div class={styles.valeLabel}>实际补助</div>
  94. </div>
  95. </>
  96. )
  97. }}
  98. </Cell>
  99. </div>
  100. {data.record.courseSalaryRecordDetailList.map((item: ICourseSalaryRecordDetailItem) => (
  101. <div class={styles.item}>
  102. <Cell
  103. center
  104. value={`${dayjs(item.date).format('YYYY-MM-DD')}`}
  105. valueClass={styles.exerciseValue}
  106. isLink
  107. class={styles.itemCourseName}
  108. onClick={() => {
  109. courseSalaryRecordDetailItem.value = item
  110. router.push({
  111. path: '/subsidy-exercise-details',
  112. query: {
  113. ...route.query,
  114. courseType: item.courseType,
  115. courseSalaryId: item.courseSalaryId
  116. }
  117. })
  118. }}
  119. >
  120. {{
  121. title: () => (
  122. <div class={styles.itemTitle}>
  123. <div class={styles.titleLine}></div>
  124. <span>{courseEmnu[item.courseType]}</span>
  125. </div>
  126. )
  127. }}
  128. </Cell>
  129. <Grid class={styles.grid} columnNum={3} border={false}>
  130. <GridItem>
  131. <div class={styles.gridItem}>
  132. <div class={styles.gridItemTop}>
  133. <span class={[styles.topNum, styles.small]} style={{ color: '#333' }}>
  134. {moneyFormat(item.expectSalary || 0)}
  135. </span>
  136. </div>
  137. <div>补助标准</div>
  138. </div>
  139. </GridItem>
  140. <GridItem>
  141. <div class={styles.gridItem}>
  142. <div class={styles.gridItemTop}>
  143. <span class={[styles.topNum, styles.small]} style={{ color: '#333' }}>
  144. {moneyFormat(item.reduceSalary || 0)}
  145. </span>
  146. </div>
  147. <div>扣款金额</div>
  148. </div>
  149. </GridItem>
  150. <GridItem>
  151. <div class={styles.gridItem}>
  152. <div class={styles.gridItemTop}>
  153. <span class={[styles.topNum, styles.small]}>
  154. {moneyFormat(item.actualSalary || 0)}
  155. </span>
  156. </div>
  157. <div>实际补助</div>
  158. </div>
  159. </GridItem>
  160. </Grid>
  161. </div>
  162. ))}
  163. </div>
  164. </OFullRefresh>
  165. </div>
  166. )
  167. }
  168. })