exercise-detail.tsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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 iconA from '../images/icon-photo.png'
  5. import { useRoute } 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. export default defineComponent({
  13. name: 'subsidy-exercise-detail',
  14. setup() {
  15. const route = useRoute()
  16. const refreshing = ref(false)
  17. const modelData = reactive({
  18. show: false,
  19. row: null as any
  20. })
  21. const data = reactive({
  22. /**补助明细 */
  23. record: {
  24. courseSalaryRecordDetailList: [] as ICourseSalaryRecordDetailItem[]
  25. } as ICourseSalaryRecordDetail
  26. })
  27. const getData = () => {
  28. request
  29. .post(`${state.platformApi}/schoolWeekSalaryRecord/detailInfo/course`, {
  30. data: {
  31. id: route.query.id,
  32. userId: state.user.data.id
  33. }
  34. })
  35. .then((res: any) => {
  36. data.record = res?.data || {}
  37. })
  38. .finally(() => {
  39. refreshing.value = false
  40. })
  41. }
  42. onMounted(() => {
  43. getData()
  44. })
  45. return () => (
  46. <div>
  47. <OSticky
  48. onGetHeight={(height: number) => {
  49. document.documentElement.style.setProperty('--header-height', height + 'px')
  50. }}
  51. >
  52. <OHeader></OHeader>
  53. </OSticky>
  54. <OFullRefresh
  55. v-model:modelValue={refreshing.value}
  56. onRefresh={getData}
  57. style="min-height: calc(100vh - var(--header-height))"
  58. >
  59. <div class={styles.wrap}>
  60. <div class={styles.item}>
  61. <Cell center class={styles.rewardItem}>
  62. {{
  63. icon: () => <img class={styles.itemPicture} src={iconA} />,
  64. title: () => (
  65. <div class={styles.itemTitle}>
  66. <span>邓同学</span>
  67. </div>
  68. ),
  69. value: () => (
  70. <div class={styles.gridItem}>
  71. <div class={styles.gridItemTop}>
  72. <span class={styles.topNum}>{data.record.actualSalary}</span>元
  73. </div>
  74. <div class={styles.valeLabel}>实际补助</div>
  75. </div>
  76. )
  77. }}
  78. </Cell>
  79. </div>
  80. {data.record.courseSalaryRecordDetailList.map((item: ICourseSalaryRecordDetailItem) => (
  81. <div class={styles.item}>
  82. <Cell
  83. center
  84. value={`${item.days}天`}
  85. isLink
  86. onClick={() => {
  87. modelData.show = true
  88. modelData.row = item
  89. }}
  90. >
  91. {{
  92. title: () => (
  93. <div class={styles.itemTitle}>
  94. <div class={styles.titleLine}></div>
  95. <span>长笛单技训练</span>
  96. </div>
  97. )
  98. }}
  99. </Cell>
  100. <Grid class={styles.grid} columnNum={3} border={false}>
  101. <GridItem>
  102. <div class={styles.gridItem}>
  103. <div class={styles.gridItemTop}>
  104. <span class={styles.topNum}>{item.expectSalary || 0}</span>元
  105. </div>
  106. <div>预计补助</div>
  107. </div>
  108. </GridItem>
  109. <GridItem>
  110. <div class={styles.gridItem}>
  111. <div class={styles.gridItemTop}>
  112. <span class={styles.topNum}>{item.reduceSalary || 0}</span>元
  113. </div>
  114. <div>考勤扣款</div>
  115. </div>
  116. </GridItem>
  117. <GridItem>
  118. <div class={styles.gridItem}>
  119. <div class={styles.gridItemTop}>
  120. <span class={styles.topNum}>{item.actualSalary || 0}</span>课元
  121. </div>
  122. <div>实际补助</div>
  123. </div>
  124. </GridItem>
  125. </Grid>
  126. </div>
  127. ))}
  128. </div>
  129. </OFullRefresh>
  130. <Popup
  131. v-model:show={modelData.show}
  132. position="bottom"
  133. closeable
  134. style={{
  135. width: '100vw',
  136. height: '80vh',
  137. '--van-popup-background': 'rgba(246,246,246,1)',
  138. '--van-nav-bar-icon-color': '#333',
  139. '--van-popup-close-icon-margin':
  140. 'calc(var(--van-nav-bar-height) / 2 - var(--van-popup-close-icon-size) / 2)'
  141. }}
  142. >
  143. <NavBar title="补助明细" />
  144. <div
  145. style={{
  146. height: 'calc(80vh - var(--van-nav-bar-height))',
  147. overflow: 'hidden',
  148. 'overflow-y': 'auto'
  149. }}
  150. >
  151. <Details item={modelData.row || {}} />
  152. </div>
  153. </Popup>
  154. </div>
  155. )
  156. }
  157. })