index.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import TheSticky from '@/components/the-sticky'
  2. import { defineComponent, onMounted, reactive } from 'vue'
  3. import styles from './index.module.less'
  4. import ColHeader from '@/components/col-header'
  5. import bgImg from '../images/bg-image.png'
  6. import { Button, List, Row, Col, Toast } from 'vant'
  7. import icon1 from './icon-1.png'
  8. import request from '@/helpers/request'
  9. import ColResult from '@/components/col-result'
  10. export default defineComponent({
  11. name: 'activation-code',
  12. setup() {
  13. // tenantActivationCode/page
  14. const state = reactive({
  15. refreshing: false,
  16. height: 0, // 页面头部高度,为了处理下拉刷新用的
  17. list: [],
  18. dataShow: true, // 判断是否有数据
  19. loading: false,
  20. finished: false,
  21. params: {
  22. page: 1,
  23. rows: 10
  24. },
  25. isClick: false,
  26. code: ''
  27. })
  28. const getList = async (hideLoading = false) => {
  29. try {
  30. if (state.isClick) return
  31. state.isClick = true
  32. const res = await request.post(
  33. '/api-student/tenantActivationCode/page',
  34. {
  35. data: {
  36. ...state.params
  37. },
  38. hideLoading: hideLoading
  39. }
  40. )
  41. state.isClick = false
  42. state.loading = false
  43. state.refreshing = false
  44. const result = res.data || {}
  45. // 处理重复请求数据
  46. if (state.list.length > 0 && result.current === 1) {
  47. return
  48. }
  49. state.list = state.list.concat(result.rows || [])
  50. state.finished = result.current >= result.pages
  51. state.params.page = result.current + 1
  52. state.dataShow = state.list.length > 0
  53. } catch {
  54. state.isClick = false
  55. state.dataShow = false
  56. state.refreshing = false
  57. state.finished = true
  58. }
  59. }
  60. const onSubmit = async () => {
  61. try {
  62. if (!state.code) {
  63. Toast('请输入激活码')
  64. return
  65. }
  66. await request.post(
  67. '/api-student/tenantActivationCode/active?activationCode=' +
  68. state.code
  69. )
  70. Toast.success('激活成功')
  71. state.params.page = 1
  72. state.list = []
  73. getList(true)
  74. } catch {
  75. //
  76. }
  77. }
  78. //
  79. const onActiveation = async (item: any) => {
  80. try {
  81. await request.post(
  82. '/api-student/tenantActivationCode/activeById?id=' + item.id
  83. )
  84. Toast.success('激活成功')
  85. state.params.page = 1
  86. state.list = []
  87. getList(true)
  88. } catch {
  89. //
  90. }
  91. }
  92. onMounted(() => {
  93. getList()
  94. })
  95. return () => (
  96. <div class={styles.activationCode}>
  97. <div class={styles.sticky}>
  98. <TheSticky position="top">
  99. <ColHeader
  100. background="transparent"
  101. isFixed={false}
  102. border={false}
  103. color="#131415"
  104. />
  105. <div class={styles.codeContainer}>
  106. <input
  107. v-model={state.code}
  108. placeholder="请输入激活码"
  109. class={styles.codeInput}
  110. maxlength={7}
  111. />
  112. <Button
  113. type="primary"
  114. round
  115. class={styles.codeBtn}
  116. block
  117. onClick={onSubmit}
  118. >
  119. 立即兑换
  120. </Button>
  121. </div>
  122. </TheSticky>
  123. <img class={styles.bgImg} src={bgImg} />
  124. <List
  125. loading-text=" "
  126. finished={state.finished}
  127. finished-text=" "
  128. onLoad={getList}
  129. style={{ overflow: 'hidden' }}
  130. >
  131. <div class={styles.colGroup}>
  132. <div class={styles.title}>
  133. <img src={icon1} />
  134. 激活记录
  135. </div>
  136. <Row class={styles.colRow}>
  137. <Col span={5}>激活码</Col>
  138. <Col span={4}>周期</Col>
  139. <Col span={6}>激活状态</Col>
  140. <Col span={9}>激活时间</Col>
  141. </Row>
  142. <div class={styles.codeList}>
  143. {state.list.map((item: any) => (
  144. <Row>
  145. <Col span={5}>{item.activationCode}</Col>
  146. <Col span={4}>6个月</Col>
  147. <Col
  148. span={6}
  149. class={item.activationStatus ? styles.c1 : styles.c3}
  150. >
  151. {item.activationStatus ? '已激活' : '待激活'}
  152. </Col>
  153. <Col span={9}>
  154. {item.activationStatus ? (
  155. item.activationTime
  156. ) : (
  157. <Button
  158. class={styles.liveBtn}
  159. color="#FE2451"
  160. onClick={() => onActiveation(item)}
  161. >
  162. 激活
  163. </Button>
  164. )}
  165. {/* 2023-07-22 12:00:02 */}
  166. </Col>
  167. </Row>
  168. ))}
  169. {!state.dataShow && (
  170. <div class={styles.emptyContainer}>
  171. <ColResult tips="暂无激活码" btnStatus={false} />
  172. </div>
  173. )}
  174. </div>
  175. </div>
  176. </List>
  177. {/* ) : (
  178. <div
  179. class={styles.emptyContainer}
  180. >
  181. <ColResult tips="暂无学练统计" btnStatus={false} />
  182. </div>
  183. )} */}
  184. </div>
  185. </div>
  186. )
  187. }
  188. })