index.tsx 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. import { defineComponent, onMounted, reactive, ref, nextTick } from 'vue'
  2. import { Image, Popup, 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. import { browser, getUrlCode } from '@/helpers/utils'
  12. export default defineComponent({
  13. name: 'pre-apply',
  14. setup() {
  15. const route = useRoute()
  16. const router = useRouter()
  17. const bannerRef = ref()
  18. const state = reactive({
  19. tabValue: 'apply',
  20. heightV: 235,
  21. registerInfo: {} as any,
  22. purchase: false, // 购买状态
  23. register: true // 是否注册
  24. // showPopup: false,
  25. // code: '' as any
  26. })
  27. const onNext = async (name: string) => {
  28. if (name === 'payment') {
  29. await getRegisterStatus()
  30. }
  31. nextTick(() => {
  32. state.tabValue = name
  33. })
  34. }
  35. const getRegisterStatus = async () => {
  36. try {
  37. const { data } = await request.get(
  38. '/api-student/orchestraRegister/registerStatus/' + route.query.id
  39. )
  40. state.registerInfo = data || {}
  41. // 判断是否报名注册过
  42. state.register = data.register
  43. if (data.register) {
  44. nextTick(() => {
  45. state.tabValue = 'payment'
  46. })
  47. }
  48. // 购买状态, 判断是否已经购买完了
  49. if (data.purchase) {
  50. state.purchase = data.purchase
  51. nextTick(() => {
  52. state.tabValue = 'order'
  53. })
  54. }
  55. // INITIATION_SURVEY: '启蒙调查',
  56. // PRE_REGISTER: '预报名',
  57. // REGISTER: '乐团报名',
  58. // DOING: '乐团交付',
  59. // DONE: '已交付'
  60. // CLOSE: '已交付'
  61. // 判断乐团报名,只有 乐团报名 乐团交付 已交付才可以报名
  62. const oStatus = data.status // 乐团状态
  63. if (oStatus !== 'REGISTER' && oStatus !== 'DOING' && oStatus !== 'DONE') {
  64. showDialog({
  65. title: '提示',
  66. message: '乐团建设中,请稍等'
  67. }).then(() => {
  68. setLogout()
  69. const query = {
  70. returnUrl: route.path,
  71. ...route.query
  72. } as any
  73. router.replace({
  74. path: '/loginMusic',
  75. query: query
  76. })
  77. })
  78. return
  79. }
  80. if (data.registerOrchestra >= 1) {
  81. showDialog({
  82. title: '提示',
  83. message: '您已在其它乐团'
  84. }).then(() => {
  85. setLogout()
  86. const query = {
  87. returnUrl: route.path,
  88. ...route.query
  89. } as any
  90. router.replace({
  91. path: '/loginMusic',
  92. query: query
  93. })
  94. })
  95. return
  96. }
  97. } catch {
  98. //
  99. }
  100. }
  101. const getRegisterInfo = async (val: string) => {
  102. // 重新查询状态
  103. if (val === 'apply') {
  104. try {
  105. const { data } = await request.get(
  106. '/api-student/orchestraRegister/registerStatus/' + route.query.id
  107. )
  108. state.registerInfo = data || {}
  109. } catch {
  110. //
  111. }
  112. }
  113. }
  114. // const getAppIdAndCode = async () => {
  115. // try {
  116. // const { data } = await request.get('/api-student/open/paramConfig/wechatAppId')
  117. // // 判断是否有微信appId
  118. // if (data) {
  119. // goAuth(data)
  120. // }
  121. // } catch {
  122. // //
  123. // }
  124. // }
  125. // const goAuth = (wxAppId: string) => {
  126. // // 用户授权
  127. // const urlNow = encodeURIComponent(window.location.href)
  128. // const scope = 'snsapi_base' //snsapi_userinfo //静默授权 用户无感知
  129. // const appid = wxAppId || 'wx8654c671631cfade'
  130. // const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${urlNow}&response_type=code&scope=${scope}&state=STATE&connect_redirect=1#wechat_redirect`
  131. // window.location.replace(url)
  132. // }
  133. // 先请求接口
  134. getRegisterStatus()
  135. onMounted(() => {
  136. // state.code = route.query.code || ''
  137. // const { height } = useRect(bannerRef.value)
  138. // state.heightV = height
  139. // 判断是否是微信,只能微信中打开
  140. // if (browser().weixin) {
  141. // // 微信公众号支付
  142. // //授权
  143. // const code = getUrlCode()
  144. // if (!code || !state.code) {
  145. // getAppIdAndCode()
  146. // } else {
  147. // state.code = code
  148. // }
  149. // } else {
  150. // state.showPopup = true
  151. // }
  152. })
  153. return () => (
  154. <div class={styles.preApply}>
  155. <div class={styles.banner} ref={bannerRef}>
  156. <span>
  157. {state.registerInfo.orchestraName} <br />
  158. 乐团报名
  159. </span>
  160. </div>
  161. <Sticky position="top">
  162. <Tabs
  163. lineWidth={20}
  164. lineHeight={4}
  165. v-model:active={state.tabValue}
  166. onChange={(val: any) => getRegisterInfo(val)}
  167. >
  168. <Tab title="报名信息" name="apply" disabled={state.purchase}></Tab>
  169. <Tab title="缴费信息" name="payment" disabled={state.purchase || !state.register}></Tab>
  170. <Tab title="我的订单" name="order" disabled={!state.register}></Tab>
  171. </Tabs>
  172. </Sticky>
  173. {state.tabValue === 'apply' && (
  174. <Apply
  175. onNext={onNext}
  176. registerInfo={state.registerInfo}
  177. schoolSystem={state.registerInfo.schoolSystem}
  178. />
  179. )}
  180. {state.tabValue === 'payment' && <Payment onNext={onNext} />}
  181. {state.tabValue === 'order' && <Order onNext={onNext} />}
  182. {/* <Popup
  183. v-model:show={state.showPopup}
  184. round
  185. style={{ width: '92%' }}
  186. closeOnClickOverlay={false}
  187. >
  188. <div class={styles.popupContainer}>
  189. <div class={styles.dialogTitle}>
  190. <i></i>
  191. 提示
  192. </div>
  193. <p class={styles.popupTips}>请使用微信打开</p>
  194. </div>
  195. </Popup> */}
  196. </div>
  197. )
  198. }
  199. })