|  | @@ -22,11 +22,25 @@ import {
 | 
	
		
			
				|  |  |    showToast
 | 
	
		
			
				|  |  |  } from 'vant';
 | 
	
		
			
				|  |  |  import MProtocol from '@/components/m-protocol';
 | 
	
		
			
				|  |  | +import { state as baseState, setLogin } from '@/state';
 | 
	
		
			
				|  |  | +import qs from 'query-string';
 | 
	
		
			
				|  |  |  import MImgCode from '@/components/m-img-code';
 | 
	
		
			
				|  |  | -import { checkPhone } from '@/helpers/utils';
 | 
	
		
			
				|  |  | +import { browser, checkPhone } from '@/helpers/utils';
 | 
	
		
			
				|  |  |  import request from '@/helpers/request';
 | 
	
		
			
				|  |  |  import { useStudentRegisterStore } from '@/store/modules/student-register-store';
 | 
	
		
			
				|  |  |  import { setLoginInit, state } from '@/state';
 | 
	
		
			
				|  |  | +import deepClone from '@/helpers/deep-clone';
 | 
	
		
			
				|  |  | +import { useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | +import { ACCESS_TOKEN } from '@/store/mutation-types';
 | 
	
		
			
				|  |  | +import { storage } from '@/helpers/storage';
 | 
	
		
			
				|  |  | +import OWxTip from '@/components/m-wx-tip';
 | 
	
		
			
				|  |  | +import MDialog from '@/components/m-dialog';
 | 
	
		
			
				|  |  | +import { CurrentTime, useCountDown } from '@vant/use';
 | 
	
		
			
				|  |  | +import QrcodePayment from '../qrcode-payment';
 | 
	
		
			
				|  |  | +import UserAuth from '../component/user-auth';
 | 
	
		
			
				|  |  | +import Payment from '@/views/adapay/payment';
 | 
	
		
			
				|  |  | +import { beforeSubmit } from '../order-state';
 | 
	
		
			
				|  |  | +import OPopup from '@/components/m-popup';
 | 
	
		
			
				|  |  |  const studentRegisterStore = useStudentRegisterStore();
 | 
	
		
			
				|  |  |  const classList: any = [];
 | 
	
		
			
				|  |  |  for (let i = 1; i <= 40; i++) {
 | 
	
	
		
			
				|  | @@ -35,34 +49,14 @@ for (let i = 1; i <= 40; i++) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'register-modal',
 | 
	
		
			
				|  |  | -  props: {
 | 
	
		
			
				|  |  | -    schoolId: {
 | 
	
		
			
				|  |  | -      type: String,
 | 
	
		
			
				|  |  | -      default: ''
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    gradeYear: {
 | 
	
		
			
				|  |  | -      type: String,
 | 
	
		
			
				|  |  | -      default: ''
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    schoolType: {
 | 
	
		
			
				|  |  | -      type: String,
 | 
	
		
			
				|  |  | -      default: ''
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    giftVipDay: {
 | 
	
		
			
				|  |  | -      type: [String, Number],
 | 
	
		
			
				|  |  | -      default: ''
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    registerType: {
 | 
	
		
			
				|  |  | -      type: String,
 | 
	
		
			
				|  |  | -      default: ''
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  emits: ['close', 'submit', 'error'],
 | 
	
		
			
				|  |  | -  setup(props, { emit }) {
 | 
	
		
			
				|  |  | +  setup() {
 | 
	
		
			
				|  |  |      const studentDetails = sessionStorage.getItem('register-student');
 | 
	
		
			
				|  |  |      const countDownRef = ref();
 | 
	
		
			
				|  |  | +    const route = useRoute();
 | 
	
		
			
				|  |  | +    const router = useRouter();
 | 
	
		
			
				|  |  |      const gradeList = ref([]);
 | 
	
		
			
				|  |  |      const forms = reactive({
 | 
	
		
			
				|  |  | +      schoolId: route.query.schoolId as any,
 | 
	
		
			
				|  |  |        countDownStatus: true,
 | 
	
		
			
				|  |  |        countDownTime: 1000 * 120, // 倒计时时间
 | 
	
		
			
				|  |  |        modelValue: false, // 是否选中协议
 | 
	
	
		
			
				|  | @@ -71,7 +65,34 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        currentClassText: '',
 | 
	
		
			
				|  |  |        gradeStatus: false,
 | 
	
		
			
				|  |  |        classStatus: false,
 | 
	
		
			
				|  |  | -      loading: false
 | 
	
		
			
				|  |  | +      loading: false,
 | 
	
		
			
				|  |  | +      schoolType: '', // 学校类型
 | 
	
		
			
				|  |  | +      gradeYear: '', // 学制
 | 
	
		
			
				|  |  | +      bugGoods: false, // 是否购买AI
 | 
	
		
			
				|  |  | +      registerType: '', // 报名类型
 | 
	
		
			
				|  |  | +      giftVipDay: 0, // 赠送天数
 | 
	
		
			
				|  |  | +      dialogStatus: false,
 | 
	
		
			
				|  |  | +      dialogMessage: '',
 | 
	
		
			
				|  |  | +      dialogConfirmStatus: false,
 | 
	
		
			
				|  |  | +      paymentType: '', // 支付类型
 | 
	
		
			
				|  |  | +      contract_sign: false, // 是否实名认证
 | 
	
		
			
				|  |  | +      countDownTimePay: 60 * 1000,
 | 
	
		
			
				|  |  | +      dialogConfig: {} as any,
 | 
	
		
			
				|  |  | +      showMore: true,
 | 
	
		
			
				|  |  | +      showTips: false,
 | 
	
		
			
				|  |  | +      showButton: false,
 | 
	
		
			
				|  |  | +      showMessage: '请使用微信打开'
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const state = reactive({
 | 
	
		
			
				|  |  | +      showQrcode: false,
 | 
	
		
			
				|  |  | +      qrCodeUrl: '',
 | 
	
		
			
				|  |  | +      pay_channel: '',
 | 
	
		
			
				|  |  | +      orderInfo: {} as any, // 订单信息
 | 
	
		
			
				|  |  | +      authShow: false,
 | 
	
		
			
				|  |  | +      orderNo: null as any,
 | 
	
		
			
				|  |  | +      config: {} as any,
 | 
	
		
			
				|  |  | +      paymentStatus: false,
 | 
	
		
			
				|  |  | +      orderTimer: null as any
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |      const studentInfo = reactive({
 | 
	
		
			
				|  |  |        autoRegister: true,
 | 
	
	
		
			
				|  | @@ -82,8 +103,8 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          currentGradeNum: '',
 | 
	
		
			
				|  |  |          currentClass: '',
 | 
	
		
			
				|  |  |          gender: 1,
 | 
	
		
			
				|  |  | -        registerType: props.registerType, // 报名类型
 | 
	
		
			
				|  |  | -        giftVipDay: props.giftVipDay || 0 // 赠送会员天数
 | 
	
		
			
				|  |  | +        registerType: null as any, // 报名类型
 | 
	
		
			
				|  |  | +        giftVipDay: 0 // 赠送会员天数
 | 
	
		
			
				|  |  |        },
 | 
	
		
			
				|  |  |        grant_type: 'password',
 | 
	
		
			
				|  |  |        loginType: 'SMS',
 | 
	
	
		
			
				|  | @@ -91,6 +112,19 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        username: ''
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    const countDown = useCountDown({
 | 
	
		
			
				|  |  | +      // 倒计时 60 秒
 | 
	
		
			
				|  |  | +      time: forms.countDownTimePay,
 | 
	
		
			
				|  |  | +      onChange(current: CurrentTime) {
 | 
	
		
			
				|  |  | +        forms.dialogMessage = `有待支付订单,请在${Math.ceil(
 | 
	
		
			
				|  |  | +          current.total / 1000
 | 
	
		
			
				|  |  | +        )}s后重试`;
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      onFinish() {
 | 
	
		
			
				|  |  | +        forms.dialogStatus = false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      const onCodeSend = () => {
 | 
	
		
			
				|  |  |        forms.countDownStatus = false;
 | 
	
		
			
				|  |  |        nextTick(() => {
 | 
	
	
		
			
				|  | @@ -110,6 +144,10 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        return checkPhone(studentInfo.username) ? true : false;
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    const orderType = computed(() => {
 | 
	
		
			
				|  |  | +      return state.orderInfo.orderType;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      const onFinished = () => {
 | 
	
		
			
				|  |  |        forms.countDownStatus = true;
 | 
	
		
			
				|  |  |        countDownRef.value.reset();
 | 
	
	
		
			
				|  | @@ -121,13 +159,13 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          forms.loading = true;
 | 
	
		
			
				|  |  |          const { extra, ...res } = studentInfo;
 | 
	
		
			
				|  |  |          const result = await request.post('/edu-app/userlogin', {
 | 
	
		
			
				|  |  | -          hideLoading: false,
 | 
	
		
			
				|  |  | +          // hideLoading: false,
 | 
	
		
			
				|  |  |            requestType: 'form',
 | 
	
		
			
				|  |  |            data: {
 | 
	
		
			
				|  |  |              ...res,
 | 
	
		
			
				|  |  |              extra: JSON.stringify({
 | 
	
		
			
				|  |  |                ...extra,
 | 
	
		
			
				|  |  | -              schoolId: props.schoolId
 | 
	
		
			
				|  |  | +              schoolId: forms.schoolId
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          });
 | 
	
	
		
			
				|  | @@ -139,24 +177,33 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                ...res,
 | 
	
		
			
				|  |  |                extra: JSON.stringify({
 | 
	
		
			
				|  |  |                  ...extra,
 | 
	
		
			
				|  |  | -                schoolId: props.schoolId
 | 
	
		
			
				|  |  | +                schoolId: forms.schoolId
 | 
	
		
			
				|  |  |                })
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  |            );
 | 
	
		
			
				|  |  | -          emit('close');
 | 
	
		
			
				|  |  | -          emit('error', {
 | 
	
		
			
				|  |  | -            code: result.code,
 | 
	
		
			
				|  |  | -            message: result.message
 | 
	
		
			
				|  |  | -          });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          if (result.code === 5436) {
 | 
	
		
			
				|  |  | +            forms.showTips = true;
 | 
	
		
			
				|  |  | +            forms.showMessage = '二维码已经失效,详情请咨询学校老师';
 | 
	
		
			
				|  |  | +            forms.showButton = false;
 | 
	
		
			
				|  |  | +          } else if (result.code === 5435) {
 | 
	
		
			
				|  |  | +            forms.showTips = true;
 | 
	
		
			
				|  |  | +            forms.showMessage = result.message;
 | 
	
		
			
				|  |  | +            forms.showButton = true;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -          console.log(111);
 | 
	
		
			
				|  |  |            studentRegisterStore.setToken(
 | 
	
		
			
				|  |  |              result.data.token_type + ' ' + result.data.access_token
 | 
	
		
			
				|  |  |            );
 | 
	
		
			
				|  |  |            setLoginInit();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          emit('close');
 | 
	
		
			
				|  |  | -          emit('submit');
 | 
	
		
			
				|  |  | +          // 获取用户信息
 | 
	
		
			
				|  |  | +          const res = await request.get('/edu-app/user/getUserInfo', {
 | 
	
		
			
				|  |  | +            requestType: 'form'
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          setLogin(res.data);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          await onRegisterSubmit();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        } catch {
 | 
	
		
			
				|  |  |        } finally {
 | 
	
	
		
			
				|  | @@ -199,13 +246,13 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          { text: '八年级', value: 8 },
 | 
	
		
			
				|  |  |          { text: '九年级', value: 9 }
 | 
	
		
			
				|  |  |        ];
 | 
	
		
			
				|  |  | -      if (props.gradeYear === 'FIVE_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  | +      if (forms.gradeYear === 'FIVE_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  |          tempList.push([...five]);
 | 
	
		
			
				|  |  | -      } else if (props.gradeYear === 'SIX_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  | +      } else if (forms.gradeYear === 'SIX_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  |          tempList.push([...five, ...one]);
 | 
	
		
			
				|  |  | -      } else if (props.gradeYear === 'THREE_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  | +      } else if (forms.gradeYear === 'THREE_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  |          tempList.push([...three]);
 | 
	
		
			
				|  |  | -      } else if (props.gradeYear === 'FORE_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  | +      } else if (forms.gradeYear === 'FORE_YEAR_SYSTEM') {
 | 
	
		
			
				|  |  |          tempList.push([...one, ...three]);
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  |          tempList.push([...five, ...one, ...three]);
 | 
	
	
		
			
				|  | @@ -213,7 +260,344 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        return tempList;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    onMounted(() => {
 | 
	
		
			
				|  |  | +    const getRegisterGoods = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const { data } = await request.get(
 | 
	
		
			
				|  |  | +          '/edu-app/open/userOrder/registerGoods/' + forms.schoolId,
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            noAuthorization: true // 是否请求接口的时候添加toekn
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        // 默认选中商品
 | 
	
		
			
				|  |  | +        // studentRegisterStore.setVip(data.details || []);
 | 
	
		
			
				|  |  | +        const details = deepClone(data.details || []);
 | 
	
		
			
				|  |  | +        if (details.length > 0) {
 | 
	
		
			
				|  |  | +          forms.giftVipDay = details[0].membershipDays;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        forms.bugGoods = data.bugGoods;
 | 
	
		
			
				|  |  | +        forms.schoolType = data.schoolType;
 | 
	
		
			
				|  |  | +        forms.gradeYear = data.gradeYear;
 | 
	
		
			
				|  |  | +        forms.registerType = data.registerType;
 | 
	
		
			
				|  |  | +        studentInfo.extra.giftVipDay = forms.giftVipDay;
 | 
	
		
			
				|  |  | +        studentInfo.extra.registerType = forms.registerType;
 | 
	
		
			
				|  |  | +        if (browser().weixin) {
 | 
	
		
			
				|  |  | +          if (data.registerType !== 'BUG_GOODS' || data.schoolStatus === 0) {
 | 
	
		
			
				|  |  | +            forms.showTips = true;
 | 
	
		
			
				|  |  | +            forms.showMessage = '二维码已经失效,详情请咨询学校老师';
 | 
	
		
			
				|  |  | +            forms.showButton = false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          forms.showTips = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch {}
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 计算金额
 | 
	
		
			
				|  |  | +    const calcPrice = computed(() => {
 | 
	
		
			
				|  |  | +      let amount: number = 0; //现价
 | 
	
		
			
				|  |  | +      let originAmount: number = 0; // 原价
 | 
	
		
			
				|  |  | +      const vipList: any[] = studentRegisterStore.getVip;
 | 
	
		
			
				|  |  | +      vipList.forEach((vip: any) => {
 | 
	
		
			
				|  |  | +        amount += Number(vip.currentPrice);
 | 
	
		
			
				|  |  | +        originAmount += Number(vip.originalPrice);
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      const goodsList: any[] = studentRegisterStore.getGoods;
 | 
	
		
			
				|  |  | +      goodsList.forEach((good: any) => {
 | 
	
		
			
				|  |  | +        amount += Number(good.price) * good.quantity;
 | 
	
		
			
				|  |  | +        originAmount += Number(good.originalPrice) * good.quantity;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      return {
 | 
	
		
			
				|  |  | +        amount,
 | 
	
		
			
				|  |  | +        originAmount
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 登记成功之后购买
 | 
	
		
			
				|  |  | +    const onRegisterSubmit = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        // 请求是否有待支付订单,如果有则自动关闭
 | 
	
		
			
				|  |  | +        const status = await paymentOrderUnpaid();
 | 
	
		
			
				|  |  | +        if (status) return;
 | 
	
		
			
				|  |  | +        const schoolInfo = await request.get(
 | 
	
		
			
				|  |  | +          '/edu-app/userPaymentOrder/registerStatus/' + forms.schoolId
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        const vipList = studentRegisterStore.getVip;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (schoolInfo.data.hasBuyCourse && vipList.length > 0) {
 | 
	
		
			
				|  |  | +          forms.dialogConfirmStatus = true;
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        await paymentContinue();
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 查询未支付订单
 | 
	
		
			
				|  |  | +    const paymentOrderUnpaid = async () => {
 | 
	
		
			
				|  |  | +      let result = false;
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const { data } = await request.get('/edu-app/userPaymentOrder/unpaid');
 | 
	
		
			
				|  |  | +        // 判断是否有待支付订单
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (!data.id) return false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 判断是否可以取消订单
 | 
	
		
			
				|  |  | +        if (data.cancelPayment) {
 | 
	
		
			
				|  |  | +          await request.post(
 | 
	
		
			
				|  |  | +            '/edu-app/userPaymentOrder/cancelPayment/' + data.orderNo
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +          return false;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          forms.countDownTime = data.cancelTimes;
 | 
	
		
			
				|  |  | +          countDown.reset(Number(data.cancelTimes));
 | 
	
		
			
				|  |  | +          countDown.start();
 | 
	
		
			
				|  |  | +          forms.dialogMessage = `有待支付订单,请在${Math.ceil(
 | 
	
		
			
				|  |  | +            countDown.current.value.total / 1000
 | 
	
		
			
				|  |  | +          )}s后重试`;
 | 
	
		
			
				|  |  | +          forms.dialogStatus = true;
 | 
	
		
			
				|  |  | +          forms.dialogConfig = data;
 | 
	
		
			
				|  |  | +          result = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return result;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const paymentContinue = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const vipList = studentRegisterStore.getVip;
 | 
	
		
			
				|  |  | +        const goodsList = studentRegisterStore.getGoods;
 | 
	
		
			
				|  |  | +        const params: any[] = [];
 | 
	
		
			
				|  |  | +        vipList.forEach((vip: any) => {
 | 
	
		
			
				|  |  | +          params.push({
 | 
	
		
			
				|  |  | +            giftVipDay: vip.membershipDays,
 | 
	
		
			
				|  |  | +            goodsId: vip.goodsId,
 | 
	
		
			
				|  |  | +            goodsNum: 1,
 | 
	
		
			
				|  |  | +            goodsType: vip.goodsType,
 | 
	
		
			
				|  |  | +            paymentCashAmount: vip.currentPrice, // 现金支付金额
 | 
	
		
			
				|  |  | +            paymentCouponAmount: 0 // 优惠券金额
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        goodsList.forEach((goods: any) => {
 | 
	
		
			
				|  |  | +          params.push({
 | 
	
		
			
				|  |  | +            goodsId: goods.productId,
 | 
	
		
			
				|  |  | +            goodsNum: goods.quantity,
 | 
	
		
			
				|  |  | +            goodsType: 'INSTRUMENTS',
 | 
	
		
			
				|  |  | +            paymentCashAmount: goods.price, // 现金支付金额
 | 
	
		
			
				|  |  | +            paymentCouponAmount: 0, // 优惠券金额
 | 
	
		
			
				|  |  | +            goodsSkuId: goods.productSkuId
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        // 创建订单
 | 
	
		
			
				|  |  | +        const result = await request.post(
 | 
	
		
			
				|  |  | +          '/edu-app/userPaymentOrder/executeOrder',
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            // hideLoading: false,
 | 
	
		
			
				|  |  | +            data: {
 | 
	
		
			
				|  |  | +              registerType: forms.registerType,
 | 
	
		
			
				|  |  | +              paymentType: forms.paymentType,
 | 
	
		
			
				|  |  | +              bizId: forms.schoolId, // 乐团编号
 | 
	
		
			
				|  |  | +              orderType: 'SCHOOL_REGISTER',
 | 
	
		
			
				|  |  | +              paymentCashAmount: calcPrice.value.amount || 0,
 | 
	
		
			
				|  |  | +              paymentCouponAmount: 0,
 | 
	
		
			
				|  |  | +              goodsInfos: params,
 | 
	
		
			
				|  |  | +              orderName: '学生登记',
 | 
	
		
			
				|  |  | +              orderDesc: '学生登记'
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (result.code === 5436) {
 | 
	
		
			
				|  |  | +          forms.showTips = true;
 | 
	
		
			
				|  |  | +          forms.showMessage = '二维码已经失效,详情请咨询学校老师';
 | 
	
		
			
				|  |  | +          forms.showButton = false;
 | 
	
		
			
				|  |  | +        } else if (result.code === 5435) {
 | 
	
		
			
				|  |  | +          forms.showTips = true;
 | 
	
		
			
				|  |  | +          forms.showMessage = result.message;
 | 
	
		
			
				|  |  | +          forms.showButton = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          state.config = {
 | 
	
		
			
				|  |  | +            ...result.data.paymentConfig,
 | 
	
		
			
				|  |  | +            paymentType: result.data.paymentType
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          state.orderNo = result.data.orderNo;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          const users = baseState.user.data;
 | 
	
		
			
				|  |  | +          // 判断是否需要实名认证, 姓名,卡号 - 参数设置可以控制
 | 
	
		
			
				|  |  | +          if (
 | 
	
		
			
				|  |  | +            forms.contract_sign &&
 | 
	
		
			
				|  |  | +            (!users?.account.realName || !users?.account.idCardNo)
 | 
	
		
			
				|  |  | +          ) {
 | 
	
		
			
				|  |  | +            state.authShow = true;
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          const { data } = await request.post(
 | 
	
		
			
				|  |  | +            '/edu-app/userPaymentOrder/updateReceiveAddress',
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              // hideLoading: false,
 | 
	
		
			
				|  |  | +              data: {
 | 
	
		
			
				|  |  | +                orderNo: state.orderNo,
 | 
	
		
			
				|  |  | +                orderType: 'SCHOOL_REGISTER'
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +          state.pay_channel = data.paymentChannel;
 | 
	
		
			
				|  |  | +          if (data.status !== 'WAIT_PAY' && data.status !== 'PAYING') {
 | 
	
		
			
				|  |  | +            router.replace({
 | 
	
		
			
				|  |  | +              path: '/payment-result',
 | 
	
		
			
				|  |  | +              query: {
 | 
	
		
			
				|  |  | +                orderNo: state.orderNo
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            onCallback();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch (e: any) {
 | 
	
		
			
				|  |  | +        console.log(e, 'any');
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @description 回调,判断是否有支付渠道,如果有则直接去支付
 | 
	
		
			
				|  |  | +     * @returns void
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    const onCallback = () => {
 | 
	
		
			
				|  |  | +      const pt = state.pay_channel;
 | 
	
		
			
				|  |  | +      // 判断是否有支付方式
 | 
	
		
			
				|  |  | +      if (pt) {
 | 
	
		
			
				|  |  | +        const payCode: string = beforeSubmit(state.pay_channel);
 | 
	
		
			
				|  |  | +        onConfirm({
 | 
	
		
			
				|  |  | +          payCode,
 | 
	
		
			
				|  |  | +          pay_channel: pt
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        if (orderType.value === 'VIP') {
 | 
	
		
			
				|  |  | +          state.paymentStatus = true;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          // 直接去拉取微信支付
 | 
	
		
			
				|  |  | +          onConfirm({
 | 
	
		
			
				|  |  | +            payCode: 'payResult',
 | 
	
		
			
				|  |  | +            pay_channel: 'wx_pub'
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const onConfirm = (val: any) => {
 | 
	
		
			
				|  |  | +      const config: any = state.config;
 | 
	
		
			
				|  |  | +      state.pay_channel = val.pay_channel;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      const params = qs.stringify({
 | 
	
		
			
				|  |  | +        pay_channel: val.pay_channel,
 | 
	
		
			
				|  |  | +        wxAppId: config.wxAppId,
 | 
	
		
			
				|  |  | +        alipayAppId: config.alipayAppId,
 | 
	
		
			
				|  |  | +        paymentType: forms.paymentType,
 | 
	
		
			
				|  |  | +        body: config.body,
 | 
	
		
			
				|  |  | +        price: config.price,
 | 
	
		
			
				|  |  | +        orderNo: config.merOrderNo,
 | 
	
		
			
				|  |  | +        userId: config.userId
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      if (val.payCode === 'payResult') {
 | 
	
		
			
				|  |  | +        window.location.href =
 | 
	
		
			
				|  |  | +          window.location.origin + '/classroom-app/#/payResult?' + params;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        state.qrCodeUrl =
 | 
	
		
			
				|  |  | +          window.location.origin + '/classroom-app/#/payDefine?' + params;
 | 
	
		
			
				|  |  | +        state.showQrcode = true;
 | 
	
		
			
				|  |  | +        state.paymentStatus = false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        setTimeout(() => {
 | 
	
		
			
				|  |  | +          getPaymentOrderStatus();
 | 
	
		
			
				|  |  | +        }, 300);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 放弃支付时,则取消订单
 | 
	
		
			
				|  |  | +    const onBackOut = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        await request.post(
 | 
	
		
			
				|  |  | +          '/edu-app/userPaymentOrder/cancelPayment/' + state.orderNo
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        // router.back();
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 轮询查询订单状态
 | 
	
		
			
				|  |  | +    const getPaymentOrderStatus = async () => {
 | 
	
		
			
				|  |  | +      // 循环查询订单
 | 
	
		
			
				|  |  | +      // const orderNo = state.orderNo
 | 
	
		
			
				|  |  | +      const orderTimer = setInterval(async () => {
 | 
	
		
			
				|  |  | +        // 判断是否在当前路由,如果不是则清除定时器
 | 
	
		
			
				|  |  | +        if (route.name != 'student-register-form') {
 | 
	
		
			
				|  |  | +          clearInterval(orderTimer);
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        state.orderTimer = orderTimer;
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +          const { data } = await request.post(
 | 
	
		
			
				|  |  | +            '/edu-app/open/userOrder/paymentStatus/' + state.orderNo,
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              hideLoading: true
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          if (data.status !== 'WAIT_PAY' && data.status !== 'PAYING') {
 | 
	
		
			
				|  |  | +            // 默认关闭支付二维码弹窗
 | 
	
		
			
				|  |  | +            state.showQrcode = false;
 | 
	
		
			
				|  |  | +            clearInterval(state.orderTimer);
 | 
	
		
			
				|  |  | +            setTimeout(() => {
 | 
	
		
			
				|  |  | +              router.replace({
 | 
	
		
			
				|  |  | +                path: '/payment-result',
 | 
	
		
			
				|  |  | +                query: {
 | 
	
		
			
				|  |  | +                  orderNo: state.orderNo
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              });
 | 
	
		
			
				|  |  | +            }, 100);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } catch {
 | 
	
		
			
				|  |  | +          //
 | 
	
		
			
				|  |  | +          clearInterval(state.orderTimer);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }, 5000);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    // 实名认证成功
 | 
	
		
			
				|  |  | +    const onAuthSuccess = () => {
 | 
	
		
			
				|  |  | +      //
 | 
	
		
			
				|  |  | +      state.authShow = false;
 | 
	
		
			
				|  |  | +      paymentContinue(); // 实名成功后自动支付
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    onMounted(async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        // 获取支付类型
 | 
	
		
			
				|  |  | +        const { data } = await request.get(
 | 
	
		
			
				|  |  | +          '/edu-app/open/paramConfig/queryByParamNameList',
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            requestType: 'form',
 | 
	
		
			
				|  |  | +            params: {
 | 
	
		
			
				|  |  | +              paramNames: 'payment_service_provider,contract_sign'
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        if (data && Array.isArray(data)) {
 | 
	
		
			
				|  |  | +          data.forEach((item: any) => {
 | 
	
		
			
				|  |  | +            if (item.paramName === 'contract_sign') {
 | 
	
		
			
				|  |  | +              forms.contract_sign = item.paramValue === '1' ? true : false;
 | 
	
		
			
				|  |  | +            } else if (item.paramName === 'payment_service_provider') {
 | 
	
		
			
				|  |  | +              forms.paymentType = item.paramValue || '';
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        getRegisterGoods();
 | 
	
		
			
				|  |  | +      } catch {}
 | 
	
		
			
				|  |  |        gradeList.value = getGradeList();
 | 
	
		
			
				|  |  |        if (studentDetails) {
 | 
	
		
			
				|  |  |          const studentJson = JSON.parse(studentDetails);
 | 
	
	
		
			
				|  | @@ -436,6 +820,63 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              }}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  |          </Popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        {/* 已经购买过样品 */}
 | 
	
		
			
				|  |  | +        <MDialog
 | 
	
		
			
				|  |  | +          title="提示"
 | 
	
		
			
				|  |  | +          v-model:show={forms.dialogConfirmStatus}
 | 
	
		
			
				|  |  | +          message={'已购买会员,是否确认购买?'}
 | 
	
		
			
				|  |  | +          primaryColor="#FF8057"
 | 
	
		
			
				|  |  | +          allowHtml={true}
 | 
	
		
			
				|  |  | +          confirmButtonText="确定"
 | 
	
		
			
				|  |  | +          showCancelButton
 | 
	
		
			
				|  |  | +          onConfirm={async () => {
 | 
	
		
			
				|  |  | +            await paymentContinue();
 | 
	
		
			
				|  |  | +          }}
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <Popup
 | 
	
		
			
				|  |  | +          show={state.paymentStatus}
 | 
	
		
			
				|  |  | +          closeOnClickOverlay={false}
 | 
	
		
			
				|  |  | +          position="bottom"
 | 
	
		
			
				|  |  | +          round
 | 
	
		
			
				|  |  | +          closeOnPopstate
 | 
	
		
			
				|  |  | +          safeAreaInsetBottom
 | 
	
		
			
				|  |  | +          style={{ minHeight: '30%' }}>
 | 
	
		
			
				|  |  | +          <Payment
 | 
	
		
			
				|  |  | +            paymentConfig={state.orderInfo}
 | 
	
		
			
				|  |  | +            onClose={() => (state.paymentStatus = false)}
 | 
	
		
			
				|  |  | +            onBackOut={onBackOut}
 | 
	
		
			
				|  |  | +            onConfirm={(val: any) => onConfirm(val)}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </Popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <Popup
 | 
	
		
			
				|  |  | +          v-model:show={state.showQrcode}
 | 
	
		
			
				|  |  | +          round
 | 
	
		
			
				|  |  | +          onClose={() => {
 | 
	
		
			
				|  |  | +            // 二维码关闭时清除定时器
 | 
	
		
			
				|  |  | +            clearInterval(state.orderTimer);
 | 
	
		
			
				|  |  | +          }}>
 | 
	
		
			
				|  |  | +          <QrcodePayment
 | 
	
		
			
				|  |  | +            url={state.qrCodeUrl}
 | 
	
		
			
				|  |  | +            pay_channel={state.pay_channel}
 | 
	
		
			
				|  |  | +            orderType={orderType.value}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </Popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <OPopup v-model:modelValue={state.authShow}>
 | 
	
		
			
				|  |  | +          <UserAuth onSuccess={onAuthSuccess} hideHeader={!browser().isApp} />
 | 
	
		
			
				|  |  | +        </OPopup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        {/* 是否在微信中打开 */}
 | 
	
		
			
				|  |  | +        <OWxTip
 | 
	
		
			
				|  |  | +          show={forms.showTips}
 | 
	
		
			
				|  |  | +          message={forms.showMessage}
 | 
	
		
			
				|  |  | +          showButton={forms.showButton}
 | 
	
		
			
				|  |  | +          buttonText="刷新"
 | 
	
		
			
				|  |  | +          onConfirm={() => window.location.reload()}
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |    }
 |