|  | @@ -1,21 +1,25 @@
 | 
	
		
			
				|  |  |  import { defineComponent } from "vue";
 | 
	
		
			
				|  |  | -import { CellGroup, Field, Button, CountDown } from "vant";
 | 
	
		
			
				|  |  | +import { CellGroup, Field, Button, CountDown, Row, Col, Toast } from "vant";
 | 
	
		
			
				|  |  | +import ImgCode from "@/components/ImgCode";
 | 
	
		
			
				|  |  | +import { checkPhone } from "@/helpers/validate";
 | 
	
		
			
				|  |  |  import request from "@/helpers/request";
 | 
	
		
			
				|  |  | -import { setLogin, state } from "@/student/state";
 | 
	
		
			
				|  |  | +import { setLogin, state } from "@/state";
 | 
	
		
			
				|  |  |  import { removeAuth, setAuth } from "@/helpers/utils";
 | 
	
		
			
				|  |  | +import styles from "./login.module.less";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type loginType = 'PWD' | 'SMS';
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'login',
 | 
	
		
			
				|  |  |    data() {
 | 
	
		
			
				|  |  |      return {
 | 
	
		
			
				|  |  | -      loginType: 'PWD' as loginType,
 | 
	
		
			
				|  |  | +      loginType: 'SMS' as loginType,
 | 
	
		
			
				|  |  |        username: '',
 | 
	
		
			
				|  |  |        password: '',
 | 
	
		
			
				|  |  |        smsCode: '',
 | 
	
		
			
				|  |  |        countDownStatus: true, // 是否发送验证码
 | 
	
		
			
				|  |  |        countDownTime: 1000 * 120, // 倒计时时间
 | 
	
		
			
				|  |  |        countDownRef: null as any, // 倒计时实例
 | 
	
		
			
				|  |  | +      imgCodeStatus: false,
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    computed: {
 | 
	
	
		
			
				|  | @@ -26,7 +30,6 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  |          this.username && this.smsCode && (status = false);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      console.log(status, this.loginType)
 | 
	
		
			
				|  |  |        return status;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |    },
 | 
	
	
		
			
				|  | @@ -49,7 +52,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      async onLogin() {
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  |          let res: any;
 | 
	
		
			
				|  |  | -        if(this.loginType === 'PWD') {
 | 
	
		
			
				|  |  | +        if (this.loginType === 'PWD') {
 | 
	
		
			
				|  |  |            res = await request.post('/api-auth/usernameLogin', {
 | 
	
		
			
				|  |  |              data: {
 | 
	
		
			
				|  |  |                username: this.username,
 | 
	
	
		
			
				|  | @@ -79,10 +82,16 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          setLogin(userCash.data)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.directNext();
 | 
	
		
			
				|  |  | -      } catch{
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    async onSendCode() { // 发送验证码
 | 
	
		
			
				|  |  | +      if(!checkPhone(this.username)) {
 | 
	
		
			
				|  |  | +        return Toast('请输入正确的手机号码');
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.imgCodeStatus = true
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      onCodeSend() {
 | 
	
		
			
				|  |  |        this.countDownStatus = false;
 | 
	
		
			
				|  |  |        this.countDownRef.start();
 | 
	
	
		
			
				|  | @@ -92,53 +101,69 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        this.countDownRef.reset();
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      onChange() {
 | 
	
		
			
				|  |  | -      if(this.loginType === 'PWD') {
 | 
	
		
			
				|  |  | +      if (this.loginType === 'PWD') {
 | 
	
		
			
				|  |  |          this.loginType = 'SMS'
 | 
	
		
			
				|  |  | -      } else if(this.loginType === 'SMS') {
 | 
	
		
			
				|  |  | +      } else if (this.loginType === 'SMS') {
 | 
	
		
			
				|  |  |          this.loginType = 'PWD'
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    render() {
 | 
	
		
			
				|  |  |      return (
 | 
	
		
			
				|  |  | -      <div class="login">
 | 
	
		
			
				|  |  | -        <CellGroup inset>
 | 
	
		
			
				|  |  | -          <Field
 | 
	
		
			
				|  |  | -            v-model={this.username}
 | 
	
		
			
				|  |  | -            name="手机号"
 | 
	
		
			
				|  |  | -            label="手机号"
 | 
	
		
			
				|  |  | -            placeholder="手机号"
 | 
	
		
			
				|  |  | -            type="tel"
 | 
	
		
			
				|  |  | -            maxlength={11}
 | 
	
		
			
				|  |  | -          />
 | 
	
		
			
				|  |  | -          { this.loginType === 'PWD' ? <Field
 | 
	
		
			
				|  |  | -            v-model={this.password}
 | 
	
		
			
				|  |  | -            type="password"
 | 
	
		
			
				|  |  | -            name="密码"
 | 
	
		
			
				|  |  | -            label="密码"
 | 
	
		
			
				|  |  | -            placeholder="密码"
 | 
	
		
			
				|  |  | -          /> : <Field
 | 
	
		
			
				|  |  | -            v-model={this.smsCode}
 | 
	
		
			
				|  |  | -            name="验证码"
 | 
	
		
			
				|  |  | -            label="验证码"
 | 
	
		
			
				|  |  | -            placeholder="验证码"
 | 
	
		
			
				|  |  | -            type="tel"
 | 
	
		
			
				|  |  | -            maxlength={6}
 | 
	
		
			
				|  |  | -            // @ts-ignore
 | 
	
		
			
				|  |  | -            vSlots={{
 | 
	
		
			
				|  |  | -              button: () => (
 | 
	
		
			
				|  |  | -                this.countDownStatus ? <Button size="small" round type="primary" onClick={this.onCodeSend}>发送验证码</Button> :  <CountDown ref={this.countDownRef} auto-start="false" time={this.countDownTime} onFinish={this.onFinished} format="ss秒" />
 | 
	
		
			
				|  |  | -              )
 | 
	
		
			
				|  |  | -            }}
 | 
	
		
			
				|  |  | -          /> }
 | 
	
		
			
				|  |  | +      <div class={styles.login}>
 | 
	
		
			
				|  |  | +        <div class={styles.loginTitle}>您好,<br /> 欢迎使用酷乐秀</div>
 | 
	
		
			
				|  |  | +        <CellGroup class={styles.margin34} border={false}>
 | 
	
		
			
				|  |  | +          <Row style={{ marginBottom: '16px' }}>
 | 
	
		
			
				|  |  | +            <Col span={24} class={styles.formTitle}>手机号</Col>
 | 
	
		
			
				|  |  | +            <Col span={24} class="van-hairline--bottom">
 | 
	
		
			
				|  |  | +              <Field
 | 
	
		
			
				|  |  | +                v-model={this.username}
 | 
	
		
			
				|  |  | +                name="手机号"
 | 
	
		
			
				|  |  | +                placeholder="请输入您的手机号"
 | 
	
		
			
				|  |  | +                type="tel"
 | 
	
		
			
				|  |  | +                maxlength={11}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +            </Col>
 | 
	
		
			
				|  |  | +          </Row>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          {this.loginType === 'PWD' ? <Row>
 | 
	
		
			
				|  |  | +            <Col span={24} class={styles.formTitle}>密码</Col>
 | 
	
		
			
				|  |  | +            <Col span={24} class="van-hairline--bottom">
 | 
	
		
			
				|  |  | +              <Field
 | 
	
		
			
				|  |  | +                v-model={this.password}
 | 
	
		
			
				|  |  | +                type="password"
 | 
	
		
			
				|  |  | +                name="密码"
 | 
	
		
			
				|  |  | +                placeholder="请输入密码"
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +            </Col>
 | 
	
		
			
				|  |  | +          </Row> : <Row>
 | 
	
		
			
				|  |  | +            <Col span={24} class={styles.formTitle}>密码</Col>
 | 
	
		
			
				|  |  | +            <Col span={24} class="van-hairline--bottom">
 | 
	
		
			
				|  |  | +              <Field
 | 
	
		
			
				|  |  | +                v-model={this.smsCode}
 | 
	
		
			
				|  |  | +                name="验证码"
 | 
	
		
			
				|  |  | +                placeholder="请输入验证码"
 | 
	
		
			
				|  |  | +                type="tel"
 | 
	
		
			
				|  |  | +                maxlength={6}
 | 
	
		
			
				|  |  | +                // @ts-ignore
 | 
	
		
			
				|  |  | +                vSlots={{
 | 
	
		
			
				|  |  | +                  button: () => (
 | 
	
		
			
				|  |  | +                    this.countDownStatus ? <span class={styles.codeText} onClick={this.onSendCode}>获取验证码</span> : <CountDown ref={this.countDownRef} auto-start={false} time={this.countDownTime} onFinish={this.onFinished} format="ss秒" />
 | 
	
		
			
				|  |  | +                  )
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +            </Col>
 | 
	
		
			
				|  |  | +          </Row>}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          </CellGroup>
 | 
	
		
			
				|  |  | -        <div style="margin: 16px;">
 | 
	
		
			
				|  |  | +        <div class={styles.margin34}>
 | 
	
		
			
				|  |  |            <Button round block type="primary" disabled={this.codeDisable} onClick={this.onLogin}>
 | 
	
		
			
				|  |  |              提交
 | 
	
		
			
				|  |  |            </Button>
 | 
	
		
			
				|  |  | -          <Button plain onClick={this.onChange}>{ this.loginType === 'PWD' ? '验证码登录' : '密码登录' }</Button>
 | 
	
		
			
				|  |  | +          <Button block round color="#F5F7FB" onClick={this.onChange}>{this.loginType === 'PWD' ? '验证码登录' : '密码登录'}</Button>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        {this.imgCodeStatus ? <ImgCode v-model:value={this.imgCodeStatus} phone={this.username} onClose={() => { this.imgCodeStatus = false }} onSendCode={this.onCodeSend} /> : null}
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |      )
 | 
	
		
			
				|  |  |    }
 |