index.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import { defineComponent, onMounted, reactive, ref, nextTick } from 'vue'
  2. import { Image, showDialog, Sticky, Tab, Tabs } from 'vant'
  3. import styles from './index.module.less'
  4. // import { useRect } from '@vant/use'
  5. import Apply from './component/apply'
  6. import Payment from './component/payment'
  7. import Order from './component/order'
  8. import { useRoute, useRouter } from 'vue-router'
  9. import { setLogout } from '@/state'
  10. import request from '@/helpers/request'
  11. export default defineComponent({
  12. name: 'pre-apply',
  13. setup() {
  14. const route = useRoute()
  15. const router = useRouter()
  16. const bannerRef = ref()
  17. const state = reactive({
  18. tabValue: 'apply',
  19. heightV: 235,
  20. registerInfo: {} as any,
  21. purchase: false, // 购买状态
  22. register: true // 是否注册
  23. })
  24. const onNext = async (name: string) => {
  25. if (name === 'payment') {
  26. await getRegisterStatus()
  27. }
  28. nextTick(() => {
  29. state.tabValue = name
  30. })
  31. }
  32. const getRegisterStatus = async () => {
  33. try {
  34. const { data } = await request.get(
  35. '/api-student/orchestraRegister/registerStatus/' + route.query.id
  36. )
  37. state.registerInfo = data || {}
  38. // 判断是否报名注册过
  39. state.register = data.register
  40. if (data.register) {
  41. nextTick(() => {
  42. state.tabValue = 'payment'
  43. })
  44. }
  45. // 购买状态, 判断是否已经购买完了
  46. if (data.purchase) {
  47. state.purchase = data.purchase
  48. nextTick(() => {
  49. state.tabValue = 'order'
  50. })
  51. }
  52. // INITIATION_SURVEY: '启蒙调查',
  53. // PRE_REGISTER: '预报名',
  54. // REGISTER: '乐团报名',
  55. // DOING: '乐团交付',
  56. // DONE: '已交付'
  57. // CLOSE: '已交付'
  58. // 判断乐团报名,只有 乐团报名 乐团交付 已交付才可以报名
  59. const oStatus = data.status // 乐团状态
  60. if (oStatus !== 'REGISTER' && oStatus !== 'DOING' && oStatus !== 'DONE') {
  61. showDialog({
  62. title: '提示',
  63. message: '乐团建设中,请稍等'
  64. }).then(() => {
  65. setLogout()
  66. const query = {
  67. returnUrl: route.path,
  68. ...route.query
  69. } as any
  70. router.replace({
  71. path: '/loginMusic',
  72. query: query
  73. })
  74. })
  75. return
  76. }
  77. if (data.registerOrchestra >= 1) {
  78. showDialog({
  79. title: '提示',
  80. message: '您已在其它乐团'
  81. }).then(() => {
  82. setLogout()
  83. const query = {
  84. returnUrl: route.path,
  85. ...route.query
  86. } as any
  87. router.replace({
  88. path: '/loginMusic',
  89. query: query
  90. })
  91. })
  92. return
  93. }
  94. } catch {
  95. //
  96. }
  97. }
  98. const getRegisterInfo = async (val: string) => {
  99. // 重新查询状态
  100. if (val === 'apply') {
  101. try {
  102. const { data } = await request.get(
  103. '/api-student/orchestraRegister/registerStatus/' + route.query.id
  104. )
  105. state.registerInfo = data || {}
  106. } catch {
  107. //
  108. }
  109. }
  110. }
  111. // 先请求接口
  112. getRegisterStatus()
  113. onMounted(() => {
  114. // const { height } = useRect(bannerRef.value)
  115. // state.heightV = height
  116. })
  117. return () => (
  118. <div class={styles.preApply}>
  119. <div class={styles.banner} ref={bannerRef}>
  120. <span>
  121. {state.registerInfo.orchestraName} <br />
  122. 乐团报名
  123. </span>
  124. </div>
  125. <Sticky position="top">
  126. <Tabs
  127. lineWidth={20}
  128. lineHeight={4}
  129. v-model:active={state.tabValue}
  130. onChange={(val: any) => getRegisterInfo(val)}
  131. >
  132. <Tab title="报名信息" name="apply" disabled={state.purchase}></Tab>
  133. <Tab title="缴费信息" name="payment" disabled={state.purchase || !state.register}></Tab>
  134. <Tab title="我的订单" name="order" disabled={!state.register}></Tab>
  135. </Tabs>
  136. </Sticky>
  137. {state.tabValue === 'apply' && (
  138. <Apply
  139. onNext={onNext}
  140. registerInfo={state.registerInfo}
  141. schoolSystem={state.registerInfo.schoolSystem}
  142. />
  143. )}
  144. {state.tabValue === 'payment' && <Payment onNext={onNext} />}
  145. {state.tabValue === 'order' && <Order onNext={onNext} />}
  146. </div>
  147. )
  148. }
  149. })