feat(passport): 支持邮箱和用户ID登录合并账号登录
- LoginParam 接口新增 email 和 userId 字段 - 新增 loginByEmail 和 loginByUserId 接口调用,逻辑与 login 类似 - 登录页账号输入框改为 account,支持输入邮箱或用户ID - 提交时根据账号格式(邮箱或纯数字)调用对应登录接口 - 校验规则改为校验 account 字段,格式不符时提示错误 - 手机号短信登录改用 loginBySuperAdminSms 接口替代 loginBySms - 登录成功后保存租户ID和用户ID至 localStorage - 优化登录页相关导入及逻辑,提升登录体验
This commit is contained in:
@@ -77,12 +77,12 @@
|
||||
<!-- </template>-->
|
||||
<!-- </a-input>-->
|
||||
<!-- </a-form-item>-->
|
||||
<a-form-item name="username">
|
||||
<a-form-item name="account">
|
||||
<a-input
|
||||
allow-clear
|
||||
size="large"
|
||||
v-model:value="form.userId"
|
||||
:placeholder="`用户ID`"
|
||||
v-model:value="form.account"
|
||||
placeholder="邮箱 / 用户ID"
|
||||
>
|
||||
<template #prefix>
|
||||
<UserOutlined />
|
||||
@@ -278,7 +278,12 @@
|
||||
RightOutlined
|
||||
} from '@ant-design/icons-vue';
|
||||
import { goHomeRoute, cleanPageTabs } from '@/utils/page-tab-util';
|
||||
import { login, loginBySms, getCaptcha } from '@/api/passport/login';
|
||||
import {
|
||||
loginBySuperAdminSms,
|
||||
getCaptcha,
|
||||
loginByEmail,
|
||||
loginByUserId
|
||||
} from '@/api/passport/login';
|
||||
import QrLogin from '@/components/QrLogin/index.vue';
|
||||
|
||||
import { User } from '@/api/system/user/model';
|
||||
@@ -346,8 +351,10 @@
|
||||
console.warn('获取网站配置失败,使用默认配置:', e.message);
|
||||
}
|
||||
};
|
||||
const { form } = useFormData<User>({
|
||||
userId: undefined,
|
||||
type LoginForm = User & { account?: string };
|
||||
|
||||
const { form } = useFormData<LoginForm>({
|
||||
account: '',
|
||||
username: '',
|
||||
phone: '',
|
||||
password: '',
|
||||
@@ -383,7 +390,7 @@
|
||||
|
||||
// 表单验证规则
|
||||
const rules = reactive({
|
||||
userId: [
|
||||
account: [
|
||||
{
|
||||
required: true,
|
||||
message: t('login.username'),
|
||||
@@ -479,7 +486,7 @@
|
||||
.then(() => {
|
||||
loading.value = true;
|
||||
form.code = form.smsCode?.toLowerCase();
|
||||
loginBySms(form)
|
||||
loginBySuperAdminSms(form)
|
||||
.then((msg) => {
|
||||
if (msg == '请选择登录用户') {
|
||||
showSelectLoginUser.value = true;
|
||||
@@ -524,10 +531,25 @@
|
||||
// changeCaptcha();
|
||||
// return;
|
||||
// }
|
||||
const account = (form.account || '').trim();
|
||||
// 邮箱格式判断
|
||||
const isEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(account);
|
||||
// 纯数字判断(用户ID)
|
||||
const isPureNumber = /^\d+$/.test(account);
|
||||
if (!isEmail && !isPureNumber) {
|
||||
message.error('请输入正确的邮箱或用户ID');
|
||||
return;
|
||||
}
|
||||
loading.value = true;
|
||||
form.code = form.code?.toLowerCase();
|
||||
form.phone = undefined;
|
||||
login(form)
|
||||
const payload = {
|
||||
password: form.password,
|
||||
code: form.code?.toLowerCase(),
|
||||
remember: form.remember
|
||||
};
|
||||
const loginApi = isEmail
|
||||
? loginByEmail({ ...payload, email: account })
|
||||
: loginByUserId({ ...payload, userId: account });
|
||||
loginApi
|
||||
.then((msg) => {
|
||||
if (msg == '请选择登录用户') {
|
||||
showSelectLoginUser.value = true;
|
||||
|
||||
Reference in New Issue
Block a user