el-form绑定更换手机号

  • 页面结构
<div class="wasker-pop" id="cellphoneModel" v-if="isShowBindPhoto">
  
  <div class="wasker-user-default" style="height: 380px">
    <div class="wasker-top">
      <div class="wasker-title">绑定的手机号码</div>
      <img src="../assets/image/close.png" @click.stop="isShowBindPhoto = false" />
   	</div>
    
    <el-form :model="BingPhoto" :rules="BingPhotorules" ref="BingPhoto" label-width="122px">
      <div class="wasker-user-default-main" style="height: 270px">
        <el-form-item label="绑定的手机号码">
          <el-input style="width: 380px;" class="bing-photo-value" type="text" disabled :value="value"></el-input>
        </el-form-item>
        <el-form-item label="绑定的手机号码" prop="mobile">
          <el-input style="width: 254px" type="text" v-model="BingPhoto.mobile" placeholder="请输入手机号码"></el-input>
        </el-form-item>
        <el-form-item label="验证码" prop="verifyCode">
          <el-input style="width: 150px" type="text" v-model="BingPhoto.verifyCode" placeholder="请输入验证码"></el-input>
          <el-button type="primary" class="get-code-btn" @click="sendVerifyCode('BingPhoto')" :disabled="disabled">
            获取验证码
            <span v-if="isShowTime">({{timing}})</span>
          </el-button>
        </el-form-item>
      </div>

      <div class="wasker-footer">
        <el-form-item>
          <el-button class="btn confrim" type="primary" @click="boundStudentPhone('BingPhoto')">绑定</el-button>
        </el-form-item>
      </div>
      
    </el-form>
  </div>
</div>
  • 表单验证
data(){
    return {
        timing: 0,
        disabled: false, //验证按钮
        value: "暂未绑定",
        userType: "", //用户角色
        studentMobile: null,
        loginCount: "", //登录次数
        BingPhoto: {
          mobile: "", //绑定手机号
          verifyCode: "", //获取验证码
        },
        BingPhotorules: {
         mobile: [
            { required: true, message: '请输入手机号码', trigger: 'blur' },
            { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机格式', trigger: 'blur' }
          ],
        },
    }
}
  • 手机号显示和隐藏

<div class="right-user-info">
  <div class="user-title">
    <div class="user-photo">
      <img style="height: 100%; width: 100%" :src="avatar" />
    </div>
    <div class="user-name" :title="actualName">{{ actualName }}</div>
    <img src="../assets/image/down.png" style="width: 8px; height: 5px; margin-left: 9px" />
  </div>
  <div class="user-wasker">
    <a id="aUserInfo" href="#" @click="sss">
      <div class="user-item">个人信息</div>
    </a>
    <div class="user-item" @click="ResetPasswordPop">密码修改</div>
    <div class="user-item" v-if="userType == 3 && !studentMobile" @click="isShowBindPhoto = true">
      绑定手机号码
    </div>
    <div class="user-item" v-if="userType == 3 && studentMobile" @click="alterPhoneModel">
      更换手机号码
    </div>
    <div class="user-item" @click="logout">退出登录</div>
  </div>
</div>
  • 手机号弹窗显示和隐藏 
getStudent() {
  let that = this;
  return $.ajax({
    type: "get",
    url: this.path + "/edu/student/getStudent?userId=" + this.userId,
    success: (data) => {
      // 首次登录显示绑定手机号码弹窗
      if (!data) return;
      that.studentMobile = data.mobile;
      // 判断一天内登录次数
      const k = "loginCountA_" + data.uid;
      const t = new Date();
      const v = [t.getFullYear(), t.getMonth(), t.getDate()].join('-');
      if (document.cookie.indexOf(k) > -1) return;
      // 学生端登录,且没有绑定手机号,一天内首次登录,则自动弹出弹窗
      if (that.loginCount == 0 && !that.studentMobile && that.userType == 3) {
        that.isShowBindPhoto = true;
        const expires = new Date(t.getFullYear(), t.getMonth(), t.getDate() + 1, 0, 0, 0);
        document.cookie = `${k}=${v}; path=/; expires=` + expires.toUTCString();
      }
    },
  });
},
  • 绑定手机号
boundStudentPhone(BingPhoto) {
  let that = this;
  if (!this.BingPhoto.verifyCode) {
    this.$message.error('请输入验证码!');
    return;
  }
  this.$refs[BingPhoto].validate(valid => {
    if (valid) {
      $.ajax({
        type: "post",
        url: this.path + "/admin/user/boundStudentPhone",
        data: { mobile: this.BingPhoto.mobile, verifyCode: this.BingPhoto.verifyCode },
        success: function (row) {
          if (row.code == 0) {
            that.$message.success(row.message);
            that.isShowBindPhoto = false;
            that.getStudent();
          } else {
            that.$message.error(row.message);
          }
        }
      });
    }
  })
},
  • 获取绑定手机验证码
  • 验证码处理
sendVerifyCode(BingPhoto) {
  let that = this;
  this.$refs[BingPhoto].validate(valid => {
    if (valid) {
      this.isShowTime = true;
      if (this.timing > 0) return;
      $.ajax({
        url: this.path + "/admin/user/sendVerifyCode",
        type: 'get',
        async: false,
        data: { phone: this.BingPhoto.mobile },
        success: function (res) {
          if (res.code == 0) {
            that.disabled = true;
            that.startInterval()
            that.$message.success(res.message)
          } else {
            that.isShowTime = false;
            that.$message.error(res.message);
          }
        }
      });
    }
  })
},
  • 验证码倒计时
// 验证码倒计时
startInterval() {
  this.timing = 60;
  var interval = setInterval(() => {
    this.timing = this.timing - 1
    if (this.timing == 0) {
      clearInterval(interval)
      this.disabled = false;
      this.isShowTime = false;
    }
  }, 1000);
},
  • 更换手机号

  • 页面结构
<!-- 更换手机号 -->
<div class="wasker-pop" id="cellphoneModel" v-if="isShowChangePhoto">
  <div class="wasker-user-default" style="height: 380px">
    <div class="wasker-top">
      <div class="wasker-title">更换手机号码</div>
      <img src="../assets/image/close.png" @click.stop="isShowChangePhoto = false" />
    </div>
    <el-form label-width="120px">
      <div class="wasker-user-default-main" style="height: 270px">
        <el-form-item label="旧手机号码:">
          <el-input style="width: 380px;" class="bing-photo-value" type="text" disabled :value="value"></el-input>
        </el-form-item>
        <el-form-item label="旧手机号码:" prop="usedMobile">
          <el-input style="width: 380px" type="text" v-model="usedMobile" placeholder="请输入旧手机号码"></el-input>
        </el-form-item>
        <el-form-item label="登录密码:" prop="mobilePass">
          <el-input style="width: 380px" type="password" v-model="mobilePass" placeholder="请输入登录密码"></el-input>
        </el-form-item>
      </div>

      <div class="wasker-footer">
        <el-form-item>
          <el-button class="btn confrim" type="primary" @click="goNext">下一步</el-button>
        </el-form-item>
      </div>
    </el-form>
  </div>
</div>
  • data属性
usedMobile: "", //旧手机号码
mobilePass: "", //登录密码
  • 处理旧号码

alterPhoneModel() {
  this.isShowChangePhoto = true;
  let phone = this.studentMobile.replace(/\D/g, '');  // 删除非数字字符
  if (/^\d{7,}$/.test(phone)) {  // 校验手机号格式
    // 隐藏中间四位数
    phone = phone.replace(/^(\d{3})\d*(\d{4})$/g, '$1****$2');
    this.value = phone;
  }
},
  • 点击下一步前的密码校验以及点击后显示弹窗
//效验手机号密码下一步弹框
goNext() {
  let that = this;
  if (!this.mobilePass || !this.usedMobile) {
    this.$message.error('手机号码或登录密码不能为空');
    return;
  }
  if (this.usedMobile != this.studentMobile) {
    this.$message.error('新旧手机号码不一致,请重新输入!');
    return;
  }
  $.ajax({
    type: "post",
    url: this.path + "/admin/user/nextMobilPhone",
    data: { userId: this.userId, mobile: this.usedMobile, mobilePass: this.mobilePass },
    success: function (row) {
      if (row.flag) {
        that.isShowChangePhoto = false;
        that.isShowNextChangePhoto = true;
      } else {
        that.$message.error(row.message);
      }
    }
  });
},
  • 更換号码

  • 页面结构
<!-- 下一步更换手机号 -->
<div class="wasker-pop" id="cellphoneModel" v-if="isShowNextChangePhoto">
  <div class="wasker-user-default" style="height: 300px">
    <div class="wasker-top">
      <div class="wasker-title">更换手机号码</div>
      <img src="../assets/image/close.png" @click.stop="isShowNextChangePhoto = false" />
    </div>
    <el-form :model="ChangePhoto" :rules="ChangePhotorules" ref="ChangePhoto" label-width="120px">
      <div class="wasker-user-default-main" style="height: 190px">
        <el-form-item label="新手机号码:" prop="newMobile">
          <el-input style="width: 290px" type="text" v-model="ChangePhoto.newMobile" placeholder="请输入手机号码"></el-input>
        </el-form-item>
        <el-form-item label="验证码" prop="newVerifyCode">
          <el-input style="width: 150px" type="text" v-model="ChangePhoto.newVerifyCode" placeholder="请输入验证码"></el-input>
          <el-button type="primary" :disabled="disabled" class="get-code-btn" @click="sendVerifyCode1('ChangePhoto')">
            获取验证码
            <span v-if="isShowTime">({{timing}})</span>
          </el-button>
        </el-form-item>
      </div>

      <div class="wasker-footer">
        <el-form-item>
          <el-button class="btn confrim" type="primary" @click="nextAlterphoneModel('ChangePhoto')">更换</el-button>
        </el-form-item>
      </div>
    </el-form>
  </div>
</div>
  • 手机号校验
 ChangePhoto: {
  newMobile: "",
  newVerifyCode: ""
},
ChangePhotorules: {
  newMobile: [
    { required: true, message: '请输入手机号码', trigger: 'blur' },
    { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机格式', trigger: 'blur' }
  ]
}
  • 绑定新手机号码
//更换手机号码
nextAlterphoneModel(ChangePhoto) {
  let that = this;
  if (!this.ChangePhoto.newVerifyCode) {
    this.$message.error('请输入验证码!');
    return;
  }
  this.$refs[ChangePhoto].validate(valid => {
    if (valid) {
      $.ajax({
        type: "post",
        url: this.path + "/admin/user/updateMobilePhone",
        data: {
          userId: this.userId, userName: this.userName, mobile: this.studentMobile, mobilePass: this.mobilePass,
          newMobile: this.ChangePhoto.newMobile, newVerifyCode: this.ChangePhoto.newVerifyCode,
        },
        success: function (row) {
          if (row.code == 0) {
            that.getStudent();
            that.$message.success(row.message);
            that.isShowNextChangePhoto = false;
          } else {
            that.$message.error(row.message);
          }
        }
      });
    }
  });
},
  • 获取更换手机号的验证码
//获取更换手机验证码
sendVerifyCode1(ChangePhoto) {
  let that = this;
  this.$refs[ChangePhoto].validate(valid => {
    if (valid) {
      this.isShowTime = true;
      if (this.timing > 0) return;
      $.ajax({
        url: this.path + "/admin/user/sendVerifyCode",
        type: 'get',
        async: false,
        data: { phone: this.ChangePhoto.newMobile },
        success: function (res) {
          if (res.code == 0) {
            that.disabled = true;
            that.startInterval()
            that.$message.success(res.message)
          } else {
            that.isShowTime = false;
            that.$message.error(res.message);
          }
        }
      });
    }
  })
},
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 el-formel-form-item 以及 el-input 组件来校验手机号。 1. 首先,需要在 el-form-item 中添加 prop 属性,指定校验规则的属性名,例如"phone"。 2. 在 el-input 中添加 v-model 属性,绑定一个数据对象,例如"formData.phone"。 3. 在 el-form-item 中添加 rules 属性,指定校验规则,例如: ```html <el-form-item label="手机号" prop="phone" :rules="[ { required: true, message: '请输入手机号', trigger: 'blur' }, { pattern: /^1[3456789]\d{9}$/, message: '手机号格式不正确', trigger: 'blur' }, ]"> <el-input v-model="formData.phone"></el-input> </el-form-item> ``` 其中,required 表示必填项,pattern 表示正则表达式校验。 4. 在表单提交时,可以通过 el-form 的 validate 方法来触发校验: ```js this.$refs.form.validate((valid) => { if (valid) { // 校验通过,可以提交表单数据 } else { // 校验不通过,提示错误信息 } }) ``` 完整示例代码: ```html <template> <el-form ref="form" :model="formData" label-width="80px"> <el-form-item label="手机号" prop="phone" :rules="[ { required: true, message: '请输入手机号', trigger: 'blur' }, { pattern: /^1[3456789]\d{9}$/, message: '手机号格式不正确', trigger: 'blur' }, ]"> <el-input v-model="formData.phone"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submit">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { formData: { phone: '' } } }, methods: { submit() { this.$refs.form.validate((valid) => { if (valid) { // 校验通过,可以提交表单数据 } else { // 校验不通过,提示错误信息 } }) } } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值