|
@@ -0,0 +1,204 @@
|
|
|
+<template>
|
|
|
+ <Header />
|
|
|
+
|
|
|
+ <div class="root">
|
|
|
+ <div class="content">
|
|
|
+ <h1>更换绑定邮箱</h1>
|
|
|
+ <el-form :model="form" ref="formRef">
|
|
|
+ <el-form-item prop="email">
|
|
|
+ <el-input v-model="form.email" placeholder="输入新邮箱" :prefix-icon="Postcard" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item prop="text">
|
|
|
+ <div class="captcha">
|
|
|
+ <el-input v-model="form.text" placeholder="输入验证码" class="captcha-input"
|
|
|
+ :prefix-icon="Finished" />
|
|
|
+ <img alt="验证码" :src="ImageCaptcha" @click="getCaptcha">
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item prop="code">
|
|
|
+ <el-input v-model="form.code" placeholder="邮箱验证码" :prefix-icon="Finished">
|
|
|
+ <template #append>
|
|
|
+ <div @click="sendEmail" v-if="time === 0">获取验证码</div>
|
|
|
+ <div disabled v-else>{{ time }} s</div>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <button @click="Submit()">提交</button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <Footer />
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import Header from '../../../components/Header.vue';
|
|
|
+import Footer from '../../../components/Footer.vue';
|
|
|
+import { App } from '../../../app/app';
|
|
|
+import { useRouter } from 'vue-router';
|
|
|
+import { ServerAPI } from '../../../app/lib/ServerAPI';
|
|
|
+import { Postcard, Finished } from '@element-plus/icons-vue';
|
|
|
+
|
|
|
+let router = useRouter();
|
|
|
+
|
|
|
+if (!App.hasUser()) {
|
|
|
+ ElMessage.error('请登录!')
|
|
|
+ router.replace({
|
|
|
+ name: "Login"
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+let ImageCaptcha = ref('');
|
|
|
+let time = ref(0);
|
|
|
+let disabled = ref(false);
|
|
|
+let formRef = ref();
|
|
|
+let form = reactive({
|
|
|
+ email: App.user.email,
|
|
|
+ text: '',
|
|
|
+ code: ''
|
|
|
+});
|
|
|
+
|
|
|
+let getCaptcha = () => {
|
|
|
+ ServerAPI.ImageCaptcha((r) => {
|
|
|
+ if (!r || r.code != 0)
|
|
|
+ ElMessage.error(`获取图片验证码失败!${r.msg}`);
|
|
|
+
|
|
|
+ ImageCaptcha.value = r.data.img;
|
|
|
+ form.id = r.data.id;
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ getCaptcha()
|
|
|
+})
|
|
|
+
|
|
|
+let settime = () => {
|
|
|
+ time.value = 60;
|
|
|
+ const timer = setInterval(() => {
|
|
|
+ if (time.value > 0) {
|
|
|
+ time.value--;
|
|
|
+ } else {
|
|
|
+ clearInterval(timer)
|
|
|
+ }
|
|
|
+ }, 1000)
|
|
|
+}
|
|
|
+
|
|
|
+let sendEmail = () => {
|
|
|
+ if (disabled.value)
|
|
|
+ return ElMessage.warning('您的操作太快了,休息一下吧!');
|
|
|
+ if (form.email == '')
|
|
|
+ return ElMessage.error('请填写邮箱');
|
|
|
+ if (form.text == '')
|
|
|
+ return ElMessage.error('请填写图片验证码');
|
|
|
+
|
|
|
+ disabled.value = true;
|
|
|
+ ServerAPI.SendEmail(form.email, form.text, form.id, 'bind', (r) => {
|
|
|
+ if (r && r.code === 0) {
|
|
|
+ ElMessage.success('发送邮箱验证码成功!');
|
|
|
+ settime();
|
|
|
+ disabled.value = false;
|
|
|
+ } else {
|
|
|
+ ElMessage.error(`获取邮箱验证码失败!${r.msg || ''}`);
|
|
|
+ disabled.value = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+let Submit = () => {
|
|
|
+ if (form.email === '' || form.code === '' || form.text === '')
|
|
|
+ return ElMessage.error('请确保每项不能为空');
|
|
|
+
|
|
|
+ ServerAPI.BindEmail(App.user.uuid, App.user.session, form.email, form.code, (res) => {
|
|
|
+ if (!res || res.code !== 0){
|
|
|
+ getCaptcha();
|
|
|
+ return ElMessage.error(`绑定失败!${res.msg || ''}`);
|
|
|
+ }
|
|
|
+
|
|
|
+ App.refershUser(res.data);
|
|
|
+ ElMessage.success('绑定成功!');
|
|
|
+ router.push('/UpdateInfo');
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.root {
|
|
|
+ min-height: 75vh;
|
|
|
+}
|
|
|
+
|
|
|
+.content {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-direction: column;
|
|
|
+ background-color: rgba(255, 255, 255, 0.7);
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ height: 350px;
|
|
|
+ width: 650px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ border-radius: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.content .input {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.content h1 {
|
|
|
+ color: #337ecc;
|
|
|
+ font-size: 1.6em;
|
|
|
+ margin: 0;
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.el-input {
|
|
|
+ border-radius: 15px;
|
|
|
+ height: 50px;
|
|
|
+}
|
|
|
+
|
|
|
+.content .captcha {
|
|
|
+ display: flex;
|
|
|
+ height: 50px;
|
|
|
+}
|
|
|
+
|
|
|
+.content button {
|
|
|
+ width: 180px;
|
|
|
+ height: 40px;
|
|
|
+ margin-top: 10px;
|
|
|
+ font-size: 1em;
|
|
|
+ border: none;
|
|
|
+ border-radius: 10px;
|
|
|
+ background-color: #337ecc;
|
|
|
+ color: #fff;
|
|
|
+}
|
|
|
+
|
|
|
+@media only screen and (max-width: 768px) {
|
|
|
+ .content {
|
|
|
+ width: 80%;
|
|
|
+ height: 350px;
|
|
|
+ padding: 25px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-input {
|
|
|
+ height: 40px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .content .captcha {
|
|
|
+ height: 40px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .content button {
|
|
|
+ height: 35px;
|
|
|
+ width: 150px;
|
|
|
+ font-size: 0.9em;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|