mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-09-17 08:46:38 +08:00
130 lines
3.5 KiB
Vue
130 lines
3.5 KiB
Vue
<template>
|
|
<div class="reset-pass">
|
|
<el-dialog v-model="showDialog" :close-on-click-modal="true" width="500px" :before-close="close" :title="title" class="reset-pass-dialog">
|
|
<div class="form">
|
|
<el-form :model="form" label-width="80px" label-position="left">
|
|
<el-tabs v-model="form.type" class="demo-tabs">
|
|
<el-tab-pane label="手机号验证" name="mobile">
|
|
<el-form-item label="手机号">
|
|
<el-input v-model="form.mobile" placeholder="请输入手机号" />
|
|
</el-form-item>
|
|
<el-form-item label="验证码">
|
|
<div class="flex">
|
|
<el-input v-model="form.code" maxlength="6" class="mr-2 w-1/2" />
|
|
<send-msg size="" :receiver="form.mobile" type="mobile" />
|
|
</div>
|
|
</el-form-item>
|
|
</el-tab-pane>
|
|
<el-tab-pane label="邮箱验证" name="email">
|
|
<el-form-item label="邮箱地址">
|
|
<el-input v-model="form.email" placeholder="请输入邮箱地址" />
|
|
</el-form-item>
|
|
<el-form-item label="验证码">
|
|
<div class="flex">
|
|
<el-input v-model="form.code" maxlength="6" class="mr-2 w-1/2" />
|
|
<send-msg size="" :receiver="form.email" type="email" />
|
|
</div>
|
|
</el-form-item>
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
|
|
<el-form-item label="新密码">
|
|
<el-input v-model="form.password" type="password" />
|
|
</el-form-item>
|
|
<el-form-item label="重复密码">
|
|
<el-input v-model="form.repass" type="password" />
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
|
|
<template #footer>
|
|
<div class="dialog-footer">
|
|
<el-button type="primary" @click="save" round> 重置密码 </el-button>
|
|
</div>
|
|
</template>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed, ref } from "vue";
|
|
import SendMsg from "@/components/SendMsg.vue";
|
|
import { ElMessage } from "element-plus";
|
|
import { httpPost } from "@/utils/http";
|
|
import { validateEmail, validateMobile } from "@/utils/validate";
|
|
|
|
const props = defineProps({
|
|
show: Boolean,
|
|
mobile: String,
|
|
});
|
|
|
|
const showDialog = computed(() => {
|
|
return props.show;
|
|
});
|
|
|
|
const title = ref("重置密码");
|
|
const form = ref({
|
|
mobile: "",
|
|
email: "",
|
|
type: "mobile",
|
|
code: "",
|
|
password: "",
|
|
repass: "",
|
|
});
|
|
|
|
const emits = defineEmits(["hide"]);
|
|
|
|
const save = () => {
|
|
if (form.value.code === "") {
|
|
return ElMessage.error("请输入验证码");
|
|
}
|
|
if (form.value.password.length < 8) {
|
|
return ElMessage.error("密码长度必须大于8位");
|
|
}
|
|
if (form.value.repass !== form.value.password) {
|
|
return ElMessage.error("两次输入密码不一致");
|
|
}
|
|
|
|
httpPost("/api/user/resetPass", form.value)
|
|
.then(() => {
|
|
ElMessage.success({
|
|
message: "重置密码成功",
|
|
duration: 1000,
|
|
onClose: () => emits("hide", false),
|
|
});
|
|
})
|
|
.catch((e) => {
|
|
ElMessage.error("重置密码失败:" + e.message);
|
|
});
|
|
};
|
|
|
|
const close = function () {
|
|
emits("hide", false);
|
|
};
|
|
</script>
|
|
|
|
<style lang="stylus">
|
|
.reset-pass {
|
|
.form {
|
|
padding 0 20px
|
|
}
|
|
|
|
.code-row {
|
|
width 100%
|
|
.send-button {
|
|
padding-left 10px
|
|
}
|
|
}
|
|
|
|
.reset-pass-dialog {
|
|
.el-dialog__footer {
|
|
text-align center
|
|
padding-top 0
|
|
}
|
|
.el-dialog__body {
|
|
padding 0
|
|
}
|
|
}
|
|
}
|
|
</style>
|