123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- import ColHeader from '@/components/col-header'
- import ColSearch from '@/components/col-search'
- import { Sticky, Image, List, Popup, Icon, Area, Field, Form, CellGroup, Button, Toast, Picker, DatetimePicker,Overlay,Dialog } from 'vant'
- import { defineComponent, onMounted, reactive } from 'vue'
- import styles from './index.module.less'
- import bg from './images/bg.png'
- import rejectLogo from './images/rejectLogo.png'
- import rejectSchool from './images/rejest-school.png'
- import subTitle from './images/subTitle.png'
- import centerLogo from './images/center.png'
- import studentText from './images/studentText.png'
- import { useRoute } from 'vue-router'
- import icon_arrow from './images/icon_arrow.png'
- import rejectBtn from './images/rejectBtn.png'
- import studentSuccess from './images/studentSuccess.png'
- import request from '@/helpers/request'
- import dayjs from 'dayjs'
- export default defineComponent({
- name: 'tenantStudentRejest',
- setup() {
- const route = useRoute();
- const forms = reactive({
- gender: '',
- name: '',
- phone: '',
- subjectId: '',
- subjectName:'',
- birthdate: '',
- code: '',
- genderName:'',
- tenantId:route.query.tenantId,
- });
- const data = reactive({
- schoolName: route.query.name || '',
- id:route.query.tenantId,
- cityName: '', // 所属城市
- showArea: false,
- checked: true,
- success: false,
- areaList: {} as any,
- sendMsg: '获取验证码',
- imgCodeStatus: false,
- subjectList: [],
- searchStatus: false,
- openStatus: false,
- dateState: false,
- genderState:false,
- genderList:[{text:'男',value:'1'},{text:'女',value:'0'}],
- showSuccess:false,
- secondConfirm:false,
- minDate: new Date(1980, 1, 1),
- maxDate: new Date(),
- });
- const handleSubmit = async() => {
- console.log(forms, 'forms')
- if (!forms.name) {
- Toast('请输入姓名')
- }
- if (!forms.gender) {
- Toast('请选择性别')
- }
- if (!forms.phone) {
- Toast('请输入手机号')
- }
- if (!forms.birthdate) {
- Toast('请选择出生年月')
- }
- if (!forms.code) {
- Toast('请输入验证码')
- }
- if (!forms.subjectId) {
- Toast('请选择声部')
- }
- const res = await request.post('/api-tenant/open/student/save',{ data: { ... forms},hideLoading:true})
- console.log(res)
- if(res.code == 200){
- data.showSuccess = true
- }
- if(res.code == 5004){
- data.secondConfirm = true
- }
- }
- const getSubjectList = async () => {
- try {
- const res = await request.get('/api-tenant/open/subject/queryPage',{ data: { page: 1, rows: 9999 }})
- data.subjectList = res.data.rows.map((item:any)=>{
- return {
- text:item.name,
- value:item.id
- }
- }) || []
- } catch (e) {
- console.log(e)
- }
- }
- const confirmSubject = (val: any) => {
- forms.subjectName = val.text;
- forms.subjectId = val.value;
- data.searchStatus = false
- console.log(val, 'confirmSubject')
- }
- const confirmDate = (val:any)=>{
- forms.birthdate = dayjs(val).format('YYYY-MM-DD')
- data.dateState = false
- }
- onMounted(() => {
- getSubjectList()
- })
- const confirmGender = (val:any)=>{
- if(val.value){
- forms.gender = val.value;
- forms.genderName = val.text
- }else{
- forms.gender = '';
- forms.genderName = ''
- }
- data.genderState = false
- }
- /** 发送验证码 */
- const onSendSms = async () => {
- if (!forms.phone) {
- Toast('请输入手机号码');
- return;
- }
- if (!/^1[3456789]\d{9}$/.test(forms.phone)) {
- Toast('手机号码格式不正确');
- return;
- }
- await request.post('/api-student/code/sendSmsCode', {
- requestType: 'form',
- data: {
- mobile: forms.phone,
- type: 'LOGIN'
- }
- })
- onCountDown()
- setTimeout(() => {
- Toast('验证码已发送')
- }, 100)
- };
- const onCountDown = ()=>{
- data.sendMsg='60s'
- let count = 60;
- const timer = setInterval(() => {
- count--;
- data.sendMsg= `${count}s`
- if (count <= 0) {
- data.sendMsg='获取验证码'
- clearInterval(timer);
- }
- }, 1000);
- }
- const downApp = ()=>{
- window.open(location.origin + '/student/#/download')
- data.showSuccess = false
- }
- const submitSecond = async()=>{
- try{
- const res = await request.post('/api-tenant/open/student/save',{ data: { ... forms,updateTenant:true},hideLoading:true})
- data.showSuccess=true
- data.secondConfirm=false
- }catch(e){
- console.log(e)
- }
- }
- return () =>
- <>< div class={styles.videoClass} >
- {/* <ColHeader
- class={styles.classHeader}
- border={false}
- isFixed={false}
- background="#fff"
- /> */}
- <div class={styles.resjetStudentWrap}>
- <img src={rejectLogo} class={styles.rejectLogo} alt="" />
- <img src={studentText} class={styles.studentText} alt="" />
- <img src={bg} class={styles.bgWrap} alt="" />
- <div class={styles.schoolNameWrap}>
- <img src={rejectSchool} class={styles.rejectSchool} alt="" />
- <p>{data.schoolName}</p>
- </div>
- <img class={styles.centerLogo} src={centerLogo} alt="" />
- <div class={styles.infoWrap}>
- <div class={styles.infoWrapCore}>
- <img src={subTitle} class={styles.subTitle} alt="" />
- <Form onSubmit={() => handleSubmit()}>
- <CellGroup class={styles.group} border={false}>
- <Field
- class={styles.noArrow}
- inputAlign="right"
- label="姓名"
- placeholder="请输入姓名"
- maxlength={20}
- v-model={forms.name}
- // onUpdate: modelValue={(val: string) => {
- // forms.nickname = val.trim();
- // }}
- />
- <Field
- readonly
- inputAlign="right"
- label="性别"
- placeholder="请选择性别"
- v-model={forms.genderName}
- onClick={()=>{
- data.genderState = true
- }}
- // onUpdate: modelValue={(val: string) => {
- // forms.nickname = val.trim();
- // }}
- >
- {{
- button: () => (
- <img
- style={{
- display: 'block',
- width: '12px',
- height: '12px',
- }}
- src={icon_arrow}
- />
- )
- }}
- </Field>
- <Field
- readonly
- inputAlign="right"
- label="出生日期"
- placeholder="请选择出生日期"
- maxlength={20}
- v-model={forms.birthdate}
- onClick={()=>{data.dateState = true}}
- // onUpdate: modelValue={(val: string) => {
- // forms.nickname = val.trim();
- // }}
- >
- {{
- button: () => (
- <img
- style={{
- display: 'block',
- width: '12px',
- height: '12px',
- }}
- src={icon_arrow}
- />
- )
- }}
- </Field>
- <Field
- inputAlign="right"
- label="手机号"
- class={styles.noArrow}
- maxlength={11}
- placeholder="请输入手机号码"
- v-model={forms.phone}
- />
- <div class={styles.tips}>
- 手机号码为酷乐秀机构版登录账号
- </div>
- <Field
- class={styles.inputCode}
- inputAlign="left"
- label="请输入验证码"
- labelWidth={0}
- v-model={forms.code}
- maxlength={6}>
- {{
- button: () => (
- <Button
- disabled={data.sendMsg.includes('s')}
- class={styles.sendBtn}
- onClick={() => onSendSms()}>
- {data.sendMsg}
- </Button>
- )
- }}
- </Field>
- <Field
- border={false}
- inputAlign="right"
- label="声部"
- placeholder="请选择声部"
- readonly
- v-model={forms.subjectName}
- onClick={() => (data.searchStatus = true)}>
- {{
- button: () => (
- <img
- style={{
- display: 'block',
- width: '12px',
- height: '12px',
- }}
- src={icon_arrow}
- />
- )
- }}
- </Field>
- </CellGroup>
- </Form>
- </div>
- <img src={rejectBtn} onClick={() => { handleSubmit() }} class={styles.rejectBtn} alt="" />
- </div>
- </div>
- <Popup
- show={data.searchStatus}
- position="bottom"
- round
- columns-field-names={{ text: '' }}
- safe-area-inset-bottom
- onClose={() => (data.searchStatus = false)}
- onClosed={() => (data.openStatus = false)}
- >
- <Picker columns={data.subjectList} onCancel={() => { data.searchStatus = false }} onConfirm={confirmSubject}></Picker>
- </Popup>
- <Popup
- show={data.dateState}
- position="bottom"
- round
- columns-field-names={{ text: '' }}
- safe-area-inset-bottom
- onClose={() => (data.dateState = false)}
- onClosed={() => (data.dateState = false)}
- >
- <DatetimePicker
- min-date={data.minDate}
- max-date={data.maxDate} type="date" v-model:value={forms.birthdate} onCancel={() => { data.dateState = false }} onConfirm={confirmDate}></DatetimePicker>
- </Popup>
- <Popup
- show={data.genderState}
- position="bottom"
- round
- columns-field-names={{ text: '' }}
- safe-area-inset-bottom
- onClose={() => (data.genderState = false)}
- onClosed={() => (data.genderState = false)}
- >
- <Picker columns={data.genderList} onCancel={() => { data.genderState = false }} onConfirm={confirmGender}></Picker>
- </Popup>
- <Overlay show={data.showSuccess} z-index={1000}>
- <div class={styles.showWrap}>
- <img class={styles.showWrapTop} src={studentSuccess} alt="" />
- <h2>恭喜您已成功登记为</h2>
- <h4>{data.schoolName} <span>【学员】</span> </h4>
- <p>请下载酷乐秀机构版APP进行学习</p>
- <div class={styles.downApp} onClick={downApp}>立即下载</div>
- </div>
- </Overlay>
- <Popup
- show={data.secondConfirm}
- position="center"
- round
- onClose={() => (data.secondConfirm = false)}
- onClosed={() => (data.secondConfirm = false)}
- >
- <div class={styles.secondWrap}>
- <h2>提示</h2>
- <p>当前账号已存在 <span>【机构名称】</span> ,是否</p>
- <p>确认更换到 <span>{data.schoolName}</span>吗? </p>
- <div class={styles.buttonWrap}>
- <div class={styles.closeBtn} onClick={()=>{data.secondConfirm = false}}> 取消</div>
- <div class={styles.submitBtn} onClick={submitSecond}>确定</div>
- </div>
- </div>
- </Popup>
- </div ></>
- }
- })
|