import { Image, Cell, CellGroup, Tag, Button, Stepper, Icon, Popup, showConfirmDialog, showToast } from 'vant'; import { computed, defineComponent, onMounted, reactive } from 'vue'; import styles from './index.module.less'; import iconGift from './images/icon-gift.png'; import shopEmpty from './images/shop-empty.png'; import iconDateMember from './images/icon-date-member.png'; import MSticky from '@/components/m-sticky'; import MVideo from '@/components/m-video'; import { useRoute, useRouter } from 'vue-router'; import RegisterModal from './register-modal'; import { useStudentRegisterStore } from '@/store/modules/student-register-store'; import request from '@/helpers/request'; import { moneyFormat } from '@/helpers/utils'; import deepClone from '@/helpers/deep-clone'; import { storage } from '@/helpers/storage'; import { ACCESS_TOKEN } from '@/store/mutation-types'; import OWxTip from '@/components/m-wx-tip'; import MDialog from '@/components/m-dialog'; import { CurrentTime, useCountDown } from '@vant/use'; export default defineComponent({ name: 'student-register', setup() { const route = useRoute(); const studentRegisterStore = useStudentRegisterStore(); const router = useRouter(); // 初始化学校编号 studentRegisterStore.setShoolId(route.query.sId as any); const forms = reactive({ schoolId: route.query.sId as any, paymentType: '', // 支付类型 popupShow: false, popupRegister: false, details: [] as any[], schoolType: '', // 学校类型 gradeYear: '', // 学制 bugGoods: false, // 是否购买AI submitLoading: false, dialogStatus: false, dialogMessage: '', countDownTime: 60 * 1000, dialogConfig: {} as any, showMore: true }); const countDown = useCountDown({ // 倒计时 60 秒 time: forms.countDownTime, onChange(current: CurrentTime) { forms.dialogMessage = `有待支付订单,请在${Math.ceil( current.total / 1000 )}s后重试`; }, onFinish() { forms.dialogStatus = false; } }); // 查询未支付订单 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 getRegisterGoods = async () => { try { const { data } = await request.get( '/edu-app/open/userOrder/registerGoods/' + forms.schoolId, { noAuthorization: true // 是否请求接口的时候添加toekn } ); // 默认选中商品 studentRegisterStore.setVip(data.details || []); forms.details = deepClone(data.details || []); forms.bugGoods = data.bugGoods; forms.schoolType = data.schoolType; forms.gradeYear = data.gradeYear; } 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 onGoodsRemove = (item: any) => { showConfirmDialog({ message: '是否删除该商品', confirmButtonColor: '#FF8633' }).then(() => { studentRegisterStore.deleteGoods(item.productSkuId); }); }; // 登记成功之后购买 const onRegisterSubmit = async () => { try { forms.submitLoading = true; // 检测token是否失效 const Authorization = storage.get(ACCESS_TOKEN) || ''; const authInfo = await request.post('/edu-app/open/user/verification', { noAuthorization: true, data: { token: Authorization } }); // 判断当前token是否失效 if (!authInfo.data) { storage.remove(ACCESS_TOKEN); studentRegisterStore.deleteToken(); forms.popupRegister = true; return; } // 请求是否有待支付订单,如果有则自动关闭 const status = await paymentOrderUnpaid(); if (status) return; const schoolInfo = await request.get( '/edu-app/userPaymentOrder/registerStatus/' + forms.schoolId ); const vipList = studentRegisterStore.getVip; const goodsList = studentRegisterStore.getGoods; if (schoolInfo.data.hasBuyCourse && vipList.length > 0) { setTimeout(() => { showToast('您已购买乐器AI学练工具,请勿重复购买'); }, 100); return; } const params: any[] = []; vipList.forEach((vip: any) => { params.push({ 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 { data } = await request.post( '/edu-app/userPaymentOrder/executeOrder', { hideLoading: false, data: { paymentType: forms.paymentType, bizId: forms.schoolId, // 乐团编号 orderType: 'SCHOOL_REGISTER', paymentCashAmount: calcPrice.value.amount || 0, paymentCouponAmount: 0, goodsInfos: params, orderName: '学生登记', orderDesc: '学生登记' } } ); router.push({ path: '/order-detail', query: { pm: 1, // h5乐团报名 config: JSON.stringify({ ...data.paymentConfig, paymentType: data.paymentType }), orderNo: data.orderNo } }); } finally { forms.submitLoading = false; } }; onMounted(async () => { try { // 获取支付类型 const { data } = await request.get( '/edu-app/open/paramConfig/queryByParamName', { requestType: 'form', params: { paramName: 'payment_service_provider' } } ); if (data.id) { forms.paymentType = data.paramValue || ''; } getRegisterGoods(); } catch {} }); return () => (
{forms.details.map((item: any) => ( { if (studentRegisterStore.selectedVip(item.goodsId)) { studentRegisterStore.deleteVip(item.goodsId); } else { studentRegisterStore.setVip([item]); } }}> {{ icon: () => , title: () => (

{/* {item.goodsName} */} {/* 12个月 */}

{item.description}

{item.description && item.description.length >= 36 && forms.showMore ? ( { e.stopPropagation(); forms.showMore = false; }}> 查看更多 ) : ( '' )} {/*
{ e.stopPropagation(); router.push('/student-digital-tools'); }}> 查看详情 { e.stopPropagation(); forms.popupShow = true; }}> 介绍视频
*/}
) }}
{{ title: () => (
团购价: ¥ {moneyFormat(item.currentPrice)}
{item.currentPrice < item.originalPrice && ( ¥{moneyFormat(item.originalPrice)} )}
) }}
{item.membershipDays > 0 && ( {{ title: () => (
现在购买赠送 {item.membershipDays || 0} 天有效期
) }}
)}
))}
{forms.bugGoods && ( <>
{studentRegisterStore.getGoods && studentRegisterStore.getGoods.length <= 0 ? (

为你的音乐之旅做好准备

快去选购乐器吧~

) : ( studentRegisterStore.getGoods.map((goods: any) => ( {{ icon: () => ( ), title: () => (

{goods.name} {goods.brandName}

规格:{goods.spDataJson}

{goods.productSn}

onGoodsRemove(goods)}>
) }}
{{ title: () => (
团购价: ¥ {moneyFormat(goods.price)}
{goods.price < goods.originalPrice && ( ¥{moneyFormat(goods.originalPrice)} )}
) }}
)) )}
{studentRegisterStore.getGoods && studentRegisterStore.getGoods.length > 0 && ( )} )}
¥ {moneyFormat(calcPrice.value.amount)} {calcPrice.value.originAmount > calcPrice.value.amount ? ( ¥ {moneyFormat(calcPrice.value.originAmount)} ) : ( '' )}
{ const vipList = studentRegisterStore.getVip; const goodsList = studentRegisterStore.getGoods; if (vipList.length <= 0 && goodsList.length <= 0) { setTimeout(() => { showToast('请选择需要购买的商品'); }, 100); return; } if (!studentRegisterStore.getToken) { forms.popupRegister = true; } else { onRegisterSubmit(); } }}>
{forms.popupShow && ( )} (forms.popupRegister = false)} onSubmit={onRegisterSubmit} /> { const paymentConfig = forms.dialogConfig.paymentConfig; router.push({ path: '/order-detail', query: { pm: 1, // h5乐团报名 config: JSON.stringify(paymentConfig.paymentConfig), orderNo: paymentConfig.orderNo } }); countDown.pause(); }} onCancel={(val: any) => { countDown.pause(); }} /> {/* 是否在微信中打开 */}
); } });