exercise-detail.tsx 4.8 KB

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