index.tsx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import { defineComponent, reactive, onMounted, computed } from 'vue'
  2. import { Cell, Grid, GridItem, Progress, Icon, List } from 'vant'
  3. import OEmpty from '@/components/o-empty'
  4. import styles from './index.module.less'
  5. import OSticky from '@/components/o-sticky'
  6. import OHeader from '@/components/o-header'
  7. import request from '@/helpers/request'
  8. import dayjs from 'dayjs'
  9. import { moneyFormat } from '@/helpers/utils'
  10. import { postMessage } from '@/helpers/native-message'
  11. export default defineComponent({
  12. name: 'practice-rewards',
  13. setup() {
  14. const state = reactive({
  15. list: [] as any,
  16. listState: {
  17. dataShow: true, // 判断是否有数据
  18. loading: false,
  19. finished: false
  20. },
  21. statistics: {
  22. totalTrainingSalary: 0,
  23. waitSalary: 0
  24. }
  25. })
  26. const getStatistics = async () => {
  27. try {
  28. const { data } = await request.post('/api-school/schoolWeekSalaryRecord/trainingStatistics')
  29. console.log(data)
  30. state.statistics = {
  31. totalTrainingSalary: data.totalTrainingSalary || 0,
  32. waitSalary: data.waitSalary || 0
  33. }
  34. } catch {
  35. //
  36. }
  37. }
  38. const getList = async () => {
  39. try {
  40. const res = await request.post('/api-school/schoolWeekSalaryRecord/trainingList', {
  41. data: {}
  42. })
  43. const result = res.data || []
  44. // 处理重复请求数据
  45. if (state.list.length > 0 && result.current === 1) {
  46. return
  47. }
  48. state.list = res.data || []
  49. state.listState.dataShow = state.list.length > 0
  50. } catch {
  51. state.listState.dataShow = false
  52. }
  53. }
  54. onMounted(() => {
  55. getStatistics()
  56. getList()
  57. })
  58. return () => (
  59. <div class={styles.practiceRewards}>
  60. <OSticky position="top" style={{ background: 'transparent' }}>
  61. <OHeader border={false} background={'transparent'}>
  62. {/* {{
  63. right: () => (
  64. <span
  65. class={styles.btn}
  66. onClick={() => {
  67. // MANAGE,COURSE,TRAINING
  68. postMessage({
  69. api: 'open_app_page',
  70. content: {
  71. action: 'app',
  72. pageTag: 'settlementRecord',
  73. url: '',
  74. params: JSON.stringify({ type: 'TRAINING' })
  75. }
  76. })
  77. }}
  78. >
  79. 结算记录
  80. </span>
  81. )
  82. }} */}
  83. </OHeader>
  84. <div class={styles.headerContainer}>
  85. <div class={styles.headerContent}>
  86. <div class={styles.priceTitle}>待结算金额 (元)</div>
  87. <div class={styles.priceCount}>
  88. <span>¥</span>
  89. {moneyFormat(state.statistics.waitSalary)}
  90. </div>
  91. <span
  92. class={styles.btn}
  93. onClick={() => {
  94. // MANAGE,COURSE,TRAINING
  95. postMessage({
  96. api: 'open_app_page',
  97. content: {
  98. action: 'app',
  99. pageTag: 'settlementRecord',
  100. url: '',
  101. params: JSON.stringify({ type: 'TRAINING' })
  102. }
  103. })
  104. }}
  105. >
  106. 结算记录
  107. </span>
  108. </div>
  109. </div>
  110. </OSticky>
  111. {state.listState.dataShow ? (
  112. state.list.map((item: any) => (
  113. <div class={styles.gridGroup}>
  114. <Cell center isLink to={'/practice-rewards-detail?id=' + item.id}>
  115. {{
  116. title: () => (
  117. <div class={styles.itemTitle}>
  118. <span style={{ fontFamily: 'DINA' }}>
  119. {dayjs(item.startTime).format('YYYY-MM-DD')} 至{' '}
  120. {dayjs(item.endTime).format('YYYY-MM-DD')}
  121. </span>
  122. <span class={[styles.status, !item.settleFlag && styles.red]}>
  123. {!item.settleFlag ? '待结算' : '已结算'}
  124. </span>
  125. </div>
  126. )
  127. }}
  128. </Cell>
  129. <Grid class={styles.grid} columnNum={2} border={false}>
  130. <GridItem class={styles.gridBorderRight}>
  131. <div class={[styles.gridItem]}>
  132. <div class={styles.gridItemTop}>
  133. <span class={styles.topNum} style={{ color: '#333' }}>
  134. {item.targetNum || 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} style={{ color: '#333' }}>
  144. {moneyFormat(item.totalSalary || 0)}
  145. </span>
  146. </div>
  147. <div>奖励金额</div>
  148. </div>
  149. </GridItem>
  150. </Grid>
  151. </div>
  152. ))
  153. ) : (
  154. <OEmpty btnStatus={false} tips="暂无练习奖励记录" />
  155. )}
  156. </div>
  157. )
  158. }
  159. })