123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- import { defineComponent, onMounted, reactive, ref, nextTick } from 'vue'
- import { Image, Popup, showDialog, Sticky, Tab, Tabs } from 'vant'
- import styles from './index.module.less'
- // import { useRect } from '@vant/use'
- import Apply from './component/apply'
- import Payment from './component/payment'
- import Order from './component/order'
- import { useRoute, useRouter } from 'vue-router'
- import { setLogout } from '@/state'
- import request from '@/helpers/request'
- import { browser, getUrlCode } from '@/helpers/utils'
- export default defineComponent({
- name: 'pre-apply',
- setup() {
- const route = useRoute()
- const router = useRouter()
- const state = reactive({
- tabValue: 'apply',
- heightV: 235,
- registerInfo: {} as any,
- purchase: false, // 购买状态
- register: true, // 是否注册
- // showPopup: false,
- code: '' as any,
- // 是否开启微信登录(测试使用)默认为false
- testIsWeixin: false
- })
- const onNext = async (name: string) => {
- if (name === 'payment') {
- await getRegisterStatus()
- }
- nextTick(() => {
- state.tabValue = name
- window.scrollTo(0, 0)
- })
- }
- const getRegisterStatus = async () => {
- try {
- const { data } = await request.get(
- '/api-student/orchestraRegister/registerStatus/' + route.query.id
- )
- state.registerInfo = data || {}
- // 判断是否报名注册过
- state.register = data.register
- if (data.register) {
- nextTick(() => {
- state.tabValue = 'payment'
- })
- }
- // 购买状态, 判断是否已经购买完了
- if (data.purchase) {
- state.purchase = data.purchase
- nextTick(() => {
- state.tabValue = 'order'
- })
- }
- // INITIATION_SURVEY: '启蒙调查',
- // PRE_REGISTER: '预报名',
- // REGISTER: '乐团报名',
- // DOING: '乐团交付',
- // DONE: '已交付'
- // CLOSE: '已交付'
- // 判断乐团报名,只有 乐团报名 乐团交付 已交付才可以报名
- const oStatus = data.status // 乐团状态
- if (oStatus !== 'REGISTER' && oStatus !== 'DOING' && oStatus !== 'DONE') {
- showDialog({
- title: '提示',
- message: '乐团建设中,请稍等'
- }).then(() => {
- setLogout()
- const query = {
- returnUrl: route.path,
- ...route.query
- } as any
- router.replace({
- path: '/loginMusic',
- query: query
- })
- })
- return
- }
- // 判断乐团
- if (data.registerOrchestra >= 1) {
- showDialog({
- title: '提示',
- message: '您已在其它乐团'
- }).then(() => {
- setLogout()
- const query = {
- returnUrl: route.path,
- ...route.query
- } as any
- router.replace({
- path: '/loginMusic',
- query: query
- })
- })
- return
- }
- // 判断是否有openId 并且 purchase
- // if (!data.openId && !data.purchase) {
- // if (browser().weixin) {
- // // 微信公众号支付
- // //授权
- // const code = getUrlCode()
- // if (!code) {
- // goAuth(data.wxAppId)
- // } else {
- // state.code = code
- // }
- // }
- // }
- // nextTick(() => {
- // state.tabValue = 'order'
- // })
- } catch {
- //
- }
- }
- const getRegisterInfo = async (val: string) => {
- // 重新查询状态
- if (val === 'apply') {
- try {
- const { data } = await request.get(
- '/api-student/orchestraRegister/registerStatus/' + route.query.id
- )
- state.registerInfo = data || {}
- } catch {
- //
- }
- }
- // document.getElementById('app')?.scrollTo(0, 0)
- window.scrollTo(0, 0)
- }
- const goAuth = (wxAppId: string) => {
- // 用户授权
- const urlNow = encodeURIComponent(window.location.href)
- const scope = 'snsapi_base' //snsapi_userinfo //静默授权 用户无感知
- const appid = wxAppId || 'wx8654c671631cfade'
- 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`
- window.location.replace(url)
- }
- const getAppIdAndCode = async () => {
- try {
- const { data } = await request.get('/api-student/open/paramConfig/wechatAppId')
- // 判断是否有微信appId
- if (data) {
- goAuth(data)
- }
- } catch {
- //
- }
- }
- // 先请求接口 判断是否有code
- if (state.testIsWeixin) {
- getRegisterStatus()
- } else {
- if (browser().weixin) {
- // 微信公众号支付
- //授权
- const code = getUrlCode()
- if (!code) {
- getAppIdAndCode()
- } else {
- state.code = code
- getRegisterStatus()
- }
- } else {
- setLogout()
- const query = {
- returnUrl: route.path,
- ...route.query
- } as any
- router.replace({
- path: '/loginMusic',
- query: query
- })
- }
- }
- return () => (
- <div class={styles.preApply}>
- <div class={styles.banner}>
- <p class={styles.orchestraName}>{state.registerInfo.orchestraName}</p>
- </div>
- <Sticky position="top">
- <Tabs
- lineWidth={20}
- lineHeight={4}
- v-model:active={state.tabValue}
- onChange={(val: any) => getRegisterInfo(val)}
- >
- <Tab title="报名信息" name="apply" disabled={state.purchase}></Tab>
- <Tab title="缴费信息" name="payment" disabled={state.purchase || !state.register}></Tab>
- <Tab title="我的订单" name="order" disabled={!state.register}></Tab>
- </Tabs>
- </Sticky>
- {state.tabValue === 'apply' && (
- <Apply
- onNext={onNext}
- code={state.code}
- registerInfo={state.registerInfo}
- schoolSystem={state.registerInfo.schoolSystem}
- />
- )}
- {state.tabValue === 'payment' && <Payment onNext={onNext} />}
- {state.tabValue === 'order' && <Order onNext={onNext} />}
- {/* <Popup
- v-model:show={state.showPopup}
- round
- style={{ width: '92%' }}
- closeOnClickOverlay={false}
- >
- <div class={styles.popupContainer}>
- <div class={styles.dialogTitle}>
- <i></i>
- 提示
- </div>
- <p class={styles.popupTips}>请使用微信打开</p>
- </div>
- </Popup> */}
- </div>
- )
- }
- })
|