From e1e694369dabf557615669ce2f71e9af70277ff6 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Wed, 07 Jan 2026 13:56:32 +0800
Subject: [PATCH] 1

---
 src/components/user/UserEditMobile.vue |  262 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 262 insertions(+), 0 deletions(-)

diff --git a/src/components/user/UserEditMobile.vue b/src/components/user/UserEditMobile.vue
new file mode 100644
index 0000000..97aa5c6
--- /dev/null
+++ b/src/components/user/UserEditMobile.vue
@@ -0,0 +1,262 @@
+<template>
+  <div v-show="isShow" class="lum-dialog-mask">
+    <el-container class="lum-dialog-box">
+      <el-header class="header" height="50px">
+        <p>绑定手机</p>
+        <p class="tools">
+          <i class="close-btn el-icon-close" @click="close" />
+        </p>
+      </el-header>
+      <el-main class="main">
+        <el-form ref="form" :model="form" :rules="rules" label-position="top">
+          <el-form-item prop="username" label="手机号">
+            <el-input
+              v-model="form.username"
+              class="cuborder-radius"
+              maxlength="11"
+              size="medium"
+              placeholder="请填写新手机号"
+              @keyup.enter.native="onSubmit('form')"
+            />
+          </el-form-item>
+          <el-form-item prop="sms_code" label="验证码">
+            <el-input
+              v-model="form.sms_code"
+              class="cuborder-radius"
+              style="width: 265px"
+              maxlength="6"
+              size="medium"
+              placeholder="验证码"
+              @keyup.enter.native="onSubmit('form')"
+            />
+            <div v-if="smsLock" class="send-code-btn disable">正在发送 ...</div>
+            <div
+              v-else-if="smsLock == false && smsLockObj.time == null"
+              class="send-code-btn"
+              @click="sendSms"
+            >
+              获取验证码
+            </div>
+            <div v-else class="send-code-btn disable">
+              重新发送({{ smsLockObj.time }}s)
+            </div>
+          </el-form-item>
+          <el-form-item prop="password" label="密码">
+            <el-input
+              v-model="form.password"
+              class="cuborder-radius no-border"
+              type="password"
+              size="medium"
+              placeholder="登录密码验证"
+              @keyup.enter.native="onSubmit('form')"
+            />
+          </el-form-item>
+          <el-form-item style="margin-top: 40px">
+            <el-button
+              class="submit-btn"
+              type="primary"
+              size="medium"
+              :loading="loading"
+              @click="onSubmit('form')"
+              >提交
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </el-main>
+    </el-container>
+  </div>
+</template>
+<script>
+import { isMobile } from '@/utils/validate'
+import SmsLock from '@/plugins/sms-lock'
+import { ServeUpdateMobile } from '@/api/user'
+import { ServeSendVerifyCode } from '@/api/common'
+
+export default {
+  name: 'UserEditMobile',
+  data() {
+    let validateMobile = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('登录手机号不能为空!'))
+      } else {
+        if (!isMobile(value)) {
+          callback(new Error('登录手机号格式不正确!'))
+        } else {
+          callback()
+        }
+      }
+    }
+
+    return {
+      loading: false,
+      form: {
+        username: '',
+        password: '',
+        sms_code: '',
+      },
+      rules: {
+        username: [
+          {
+            required: true,
+            validator: validateMobile,
+            trigger: 'blur',
+          },
+          {
+            min: 11,
+            max: 11,
+            message: '手机号格式不正确!',
+            trigger: 'blur',
+          },
+        ],
+        password: [
+          {
+            required: true,
+            message: '登录密码不能为空!',
+            trigger: 'blur',
+          },
+        ],
+        sms_code: [
+          {
+            required: true,
+            message: '验证码不能为空!',
+            trigger: 'blur',
+          },
+        ],
+      },
+
+      smsLock: false,
+      smsLockObj: null,
+      isShow: false,
+    }
+  },
+  created() {
+    this.smsLockObj = new SmsLock('EDIT_MOBILE_SMS', 120)
+  },
+  destroyed() {
+    this.smsLockObj.clearInterval()
+  },
+  methods: {
+    // 显示窗口
+    open() {
+      this.$refs['form'].resetFields()
+      this.isShow = true
+    },
+
+    // 关闭窗口
+    close() {
+      this.isShow = false
+    },
+
+    //点击发送验证码
+    sendSms() {
+      if (!isMobile(this.form.username)) {
+        this.$refs.form.validateField('username')
+        return false
+      }
+
+      this.smsLock = true
+      ServeSendVerifyCode({
+        channel: 'change_account',
+        mobile: this.form.username,
+      })
+        .then(res => {
+          if (res.code !== 200) {
+            this.$notify({
+              title: '提示',
+              message: res.message,
+            })
+            return
+          }
+
+          this.smsLockObj.start()
+          if (res.data.is_debug) {
+            this.form.sms_code = res.data.sms_code
+            setTimeout(() => {
+              this.$notify({
+                title: '提示',
+                message: '已自动填充验证码',
+                type: 'success',
+              })
+              this.form.sms_code = res.data.sms_code
+            }, 500)
+          }
+        })
+        .finally(() => {
+          this.smsLock = false
+        })
+    },
+
+    // 表单验证
+    onSubmit(formName) {
+      this.$refs[formName].validate(valid => {
+        if (!valid) return false
+        this.changeMobile()
+      })
+    },
+
+    // 提交修改手机号
+    changeMobile() {
+      this.loading = true
+      ServeUpdateMobile({
+        mobile: this.form.username,
+        sms_code: this.form.sms_code,
+        password: this.form.password,
+      })
+        .then(res => {
+          if (res.code == 200) {
+            this.$refs['form'].resetFields()
+            this.$notify({
+              title: '成功',
+              message: '更换手机号成功...',
+              type: 'success',
+            })
+            this.$emit('success')
+            this.close()
+          } else {
+            this.$message(res.message)
+          }
+        })
+        .finally(() => {
+          this.loading = false
+        })
+    },
+  },
+}
+</script>
+<style lang="less" scoped>
+.lum-dialog-box {
+  width: 450px;
+  max-width: 450px;
+
+  .main {
+    .send-code-btn {
+      width: 140px;
+      height: 36px;
+      line-height: 36px;
+      display: inline-block;
+      background: #f3ecec;
+      text-align: center;
+      color: #777373;
+      cursor: pointer;
+      user-select: none;
+      margin-left: 5px;
+      border-radius: 5px;
+
+      &:active {
+        background: #e4dbdb;
+      }
+
+      &.disable {
+        cursor: not-allowed !important;
+        background: #f7f7f7 !important;
+        color: silver !important;
+      }
+    }
+  }
+}
+
+/deep/.el-form--label-top .el-form-item__label{
+  padding: 0;
+  line-height: 30px;
+}
+</style>

--
Gitblit v1.9.3