import { computed, defineComponent, nextTick, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; // import infoTitle from '../images/info-title.png'; import { Button, CountDown, Field, Form, Picker, Popup, Radio, RadioGroup, Tag, showToast } from 'vant'; import OWxTip from '@/components/m-wx-tip'; // import MProtocol from '@/components/m-protocol'; import MImgCode from '@/components/m-img-code'; 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 iconGift from '../images/icon-gift.png'; import { useRoute, useRouter } from 'vue-router'; import MSticky from '@/components/m-sticky'; // import registerBgIcon from '../images/register-bg.png'; import vipGiftIcon from '../images/vip-gift-icon.png'; // import agreeYes from '../images/agree-yes.png'; // import agreeNo from '../images/agree-no.png'; import MMessageTip from '@/components/m-message-tip'; import SelectStudent from '../modal/select-student'; import { setLoginInit } from '@/state'; import dayjs from 'dayjs'; const classList: any = []; for (let i = 1; i <= 40; i++) { classList.push({ text: i + '班', value: i }); } export default defineComponent({ name: 'register-new', emits: ['close', 'submit'], setup() { const route = useRoute(); const studentRegisterStore = useStudentRegisterStore(); // 初始化学校编号 studentRegisterStore.setShoolId(route.query.sId as any); const countDownRef = ref(); const gradeList = computed(() => { let tempList: any = []; const five = [ { text: '一年级', value: 1 }, { text: '二年级', value: 2 }, { text: '三年级', value: 3 }, { text: '四年级', value: 4 }, { text: '五年级', value: 5 } ]; const one = [{ text: '六年级', value: 6 }]; const three = [ { text: '七年级', value: 7 }, { text: '八年级', value: 8 }, { text: '九年级', value: 9 } ]; if (forms.gradeYear === 'FIVE_YEAR_SYSTEM') { tempList.push([...five]); } else if (forms.gradeYear === 'SIX_YEAR_SYSTEM') { tempList.push([...five, ...one]); } else if (forms.gradeYear === 'THREE_YEAR_SYSTEM') { tempList.push([...three]); } else if (forms.gradeYear === 'FORE_YEAR_SYSTEM') { tempList.push([...one, ...three]); } else { tempList.push([...five, ...one, ...three]); } return tempList; }); const forms = reactive({ /** 参数数据 */ queryParams: { classId: route.query.ci as any, currentGradeNum: route.query.cgn ? Number(route.query.cgn) : null, currentClass: route.query.cc ? Number(route.query.cc) : null, gradeYear: route.query.gy ? Number(route.query.gy) : null }, countDownStatus: true, countDownTime: 1000 * 120, // 倒计时时间 modelValue: false, // 是否选中协议 imgCodeStatus: false, gradeNumText: '', currentClassText: '', multi_user_limit: 1, // 限制注册学生数量 gradeStatus: false, classStatus: false, loading: false, schoolId: route.query.sId as any, showSelectStudent: false, // 选择学生 studentList: [], // 手机号关联学生列表 studentItem: {} as any, // 选择的学生 isRegister: 'create' as 'create' | 'update' | '', // 是否注册学生 isTipRegister: false, // 是否显示名字不一致 - 默认显示 isChangeSchool: false, // 是否切换学校 details: {} as any, gradeYear: null, schoolType: null, giftVipDay: null as any, showTips: false, showButton: false, showMessage: '请使用微信打开', gradePopupShow: false, gradePopupIndex: [] as any, // 年级下拉索引 classPopupShow: false, classPopupIndex: [] as any // 班级下拉索引 }); const otherParams = reactive({ showOtherSchool: false, showCloseButton: true, // 是否显示关闭按钮 showOtherMessage: '', /** limit 超限制,change 更换学生,nickname 名称不一致 */ otherType: '' as 'limit' | 'change' | 'nickname', showCancelButton: true, cancelButtonColor: '', cancelButtonText: '取消', showConfirmButton: true, confirmButtonColor: '', confirmButtonText: '确定', messageAlign: 'left' as 'center' | 'left' | 'right' }); // 班级状态 const isClassStatus = computed(() => { return { isGrade: forms.queryParams.currentGradeNum ? true : false, isClass: forms.queryParams.currentClass ? true : false }; }); const isAgree = ref(false); const studentInfo = reactive({ autoRegister: true, multiUser: true, // 是否为多用户 client_id: 'cooleshow-student', client_secret: 'cooleshow-student', extra: { nickname: '', currentGradeNum: null as any, currentClass: null as any, gender: 1, registerType: '', // 报名类型 giftVipDay: 0 // 赠送会员天数 }, grant_type: 'password', loginType: 'SMS', password: '', username: '' }); const onCodeSend = () => { forms.countDownStatus = false; nextTick(() => { countDownRef.value.start(); }); }; // 格式化提示状态 const changeTipStatus = (register: boolean, school: boolean) => { forms.isTipRegister = register; forms.isChangeSchool = school; }; const onSendCode = () => { // 发送验证码 if (!checkPhone(studentInfo.username)) { return showToast('请输入正确的手机号码'); } forms.imgCodeStatus = true; }; const getUserInfos = async () => { if ( studentInfo.password.length !== 6 || !checkPhone(studentInfo.username) ) { return; } try { const { data } = await request.get( `/edu-app/open/student/studentInfo?mobile=${studentInfo.username}&code=${studentInfo.password}&type=REGISTER&activationCodeFlag=1` ); forms.studentList = data || []; if (forms.studentList.length > 0) { const firstStudent: any = forms.studentList[0]; forms.studentItem = firstStudent; studentInfo.extra.nickname = firstStudent.nickname; if (!isClassStatus.value.isGrade) { const tempGrade: any = gradeList.value[0] || []; tempGrade?.forEach((i: any) => { if (i.value === firstStudent.currentGradeNum) { forms.gradeNumText = i.text; studentInfo.extra.currentGradeNum = firstStudent.currentGradeNum; } }); } if (!isClassStatus.value.isClass) { classList.forEach((i: any) => { if (i.value === firstStudent.currentClass) { forms.currentClassText = i.text; studentInfo.extra.currentClass = firstStudent.currentClass; } }); } studentInfo.extra.gender = firstStudent.gender; forms.isRegister = 'update'; changeTipStatus(true, false); } else { forms.isRegister = 'create'; changeTipStatus(false, false); forms.studentItem = []; } } catch { // } }; const validatePhone = computed(() => { return checkPhone(studentInfo.username) ? true : false; }); const onFinished = () => { forms.countDownStatus = true; countDownRef.value.reset(); }; // const checkSubmit = () => { const { extra } = studentInfo; if ( forms.studentItem.nickname !== extra.nickname && forms.isTipRegister ) { otherParams.showOtherMessage = '学生姓名与上次提交信息不一致,请确认修改学生信息或创建新的学生账号'; otherParams.showOtherSchool = true; otherParams.showCancelButton = true; otherParams.showCloseButton = true; otherParams.cancelButtonColor = 'linear-gradient( 224deg, #3FE1E6 0%, #00CDD4 100%)'; otherParams.cancelButtonText = '新建学生'; otherParams.confirmButtonColor = 'linear-gradient( 305deg, #40C8FF 0%, #3192FF 100%)'; otherParams.confirmButtonText = '修改信息'; otherParams.otherType = 'nickname'; otherParams.messageAlign = 'left'; return true; } // 判断新建学员是否上限了 if ( forms.isRegister === 'create' && forms.studentList.length >= forms.multi_user_limit ) { otherParams.showOtherMessage = `同一手机号最多创建${forms.multi_user_limit}个学生`; otherParams.showOtherSchool = true; otherParams.showCancelButton = false; otherParams.showCloseButton = true; otherParams.confirmButtonColor = 'linear-gradient( 305deg, #40C8FF 0%, #3192FF 100%)'; otherParams.confirmButtonText = '我知道了'; otherParams.otherType = 'limit'; otherParams.messageAlign = 'center'; return true; } // 判断是否为同一个学校 if ( forms.studentItem.schoolId && forms.studentItem.schoolId !== forms.details.id && !forms.isChangeSchool && forms.isRegister === 'update' ) { otherParams.showOtherMessage = `您已绑定【${ forms.studentItem?.schoolName || '' }】,提交后将更换到 【${forms.details.name || ''}】 ,是否确认提交?`; otherParams.showOtherSchool = true; otherParams.showCancelButton = true; otherParams.showCloseButton = false; otherParams.cancelButtonColor = ''; otherParams.cancelButtonText = '取消'; otherParams.confirmButtonColor = ''; otherParams.confirmButtonText = '确定'; otherParams.otherType = 'change'; otherParams.messageAlign = 'left'; return true; } return false; }; const onSubmit = async () => { try { if (checkForm() || checkSubmit()) return; forms.loading = true; // await request.get('/edu-app/open/student/schoolQuery', { // params: { // schoolId: forms.schoolId, // mobile: studentInfo.username // } // }); // const { extra, ...res } = studentInfo; const { extra, loginType, autoRegister, password, multiUser, ...res } = studentInfo; let tLoginType = loginType, tAutoRegister = autoRegister, tPassword = password, tMultiUser = multiUser; if (forms.isRegister === 'update') { tLoginType = 'TOKEN'; tAutoRegister = false; tPassword = forms.studentItem.token; tMultiUser = false; } const result = await request.post('/edu-app/userlogin', { hideLoading: false, requestType: 'form', data: { loginType: tLoginType, autoRegister: tAutoRegister, password: tPassword, multiUser: tMultiUser, ...res, extra: JSON.stringify({ ...extra, gradeYear: forms.queryParams.gradeYear, classId: forms.queryParams.classId, schoolId: forms.schoolId }) } }); if (result.code === 5435 || result.code === 5436) { forms.showTips = true; forms.showMessage = '报名信息更新,请刷新后重新提交'; forms.showButton = true; } else { studentRegisterStore.setToken( result.data.token_type + ' ' + result.data.access_token ); setLoginInit(); const { extra, username } = studentInfo; const registerResult = await request.post( '/edu-app/student/register', { data: { schoolId: forms.schoolId, clientType: 'STUDENT', ...extra, gradeYear: forms.queryParams.gradeYear, classId: forms.queryParams.classId, mobile: username, newRegUser: forms.isRegister === 'create' ? true : false } } ); if (registerResult.code !== 200) { if (result.code === 5435 || result.code === 5436) { forms.showTips = true; forms.showMessage = '报名信息更新,请刷新后重新提交'; forms.showButton = true; } return; } setTimeout(() => { showToast('报名成功'); }, 100); setTimeout(() => { if (browser().weixin) { // 关闭微信 (window as any).WeixinJSBridge.call('closeWindow'); } }, 1000); } } catch { // 重置信息 - 如果是新建则不提示 changeTipStatus(forms.isRegister === 'create' ? false : true, false); } finally { forms.loading = false; } }; const checkForm = () => { if (!checkPhone(studentInfo.username)) { showToast('请输入正确的手机号码'); return true; } else if (!studentInfo.password) { showToast('请输入验证码'); return true; } else if (!studentInfo.extra.nickname) { showToast('请输入学生姓名'); return true; } else if (![0, 1].includes(studentInfo.extra.gender)) { showToast('请选择性别'); return true; } else if (!studentInfo.extra.currentGradeNum) { showToast('请选择所在年级'); return true; } else if (!studentInfo.extra.currentClass) { showToast('请选择所在班级'); return true; } return false; }; const getRegisterGoods = async () => { try { const { data } = await request.get('/edu-app/open/school/detail', { params: { id: forms.schoolId }, noAuthorization: true // 是否请求接口的时候添加toekn }); forms.giftVipDay = data.giftVipDay; forms.schoolType = data.schoolType; forms.gradeYear = data.gradeYear; forms.details = data; studentInfo.extra.giftVipDay = data.giftVipDay; studentInfo.extra.registerType = data.registerType; if (browser().weixin) { if (data.status === 0) { forms.showTips = true; forms.showMessage = '二维码已经失效,详情请咨询学校老师'; forms.showButton = false; } } else { forms.showTips = true; } // 判断是否有传来的年级班级 const tempGrade: any = gradeList.value[0] || []; tempGrade?.forEach((i: any) => { if (i.value === forms.queryParams.currentGradeNum) { forms.gradeNumText = i.text; studentInfo.extra.currentGradeNum = forms.queryParams.currentGradeNum; } }); classList.forEach((i: any) => { if (i.value === forms.queryParams.currentClass) { forms.currentClassText = i.text; studentInfo.extra.currentClass = forms.queryParams.currentClass; } }); } catch {} }; onMounted(async () => { try { // 获取支付类型 let expireDay = null; const { data } = await request.get( '/edu-app/open/paramConfig/queryByParamNameList', { requestType: 'form', params: { paramNames: 'multi_user_limit,qr_code_expire_time' } } ); if (data && Array.isArray(data)) { data.forEach((item: any) => { if (item.paramName === 'multi_user_limit') { forms.multi_user_limit = item.paramValue ? Number(item.paramValue) : 1; } else if (item.paramName === 'qr_code_expire_time') { expireDay = item.paramValue ? Number(item.paramValue) : null; } }); } const createT = route.query.t; if (createT && expireDay !== null) { if (dayjs(Number(createT)).add(expireDay, 'day').isBefore(dayjs())) { forms.showTips = true; forms.showMessage = '二维码已经失效,详情请咨询学校老师'; forms.showButton = false; } } await getRegisterGoods(); } catch {} }); /** 手机号变更时清空验证码信息,用户信息 */ const phoneChangeEmptyInfo = () => { studentInfo.password = ''; studentInfo.extra.nickname = ''; if (!isClassStatus.value.isGrade) { studentInfo.extra.currentGradeNum = ''; forms.gradeNumText = ''; } if (!isClassStatus.value.isClass) { studentInfo.extra.currentClass = ''; forms.currentClassText = ''; } studentInfo.extra.gender = 1; forms.studentList = []; // 手机号关联学生列表 forms.studentItem = {}; // 选择的学生 forms.isRegister = 'create'; // 是否注册学生 forms.isTipRegister = false; // 是否显示名字不一致 - 默认显示 forms.isChangeSchool = false; // 是否切换学校 }; return () => (
现在报名立即赠送乐器AI学练工具有效期{' '} {forms.giftVipDay} 天
{ e.stopPropagation(); router.push('/preview-protocol'); }}>我已阅读并同意《音乐数字课堂学生端》注册协议