update
1.添加统一认证登陆
This commit is contained in:
@@ -25,6 +25,7 @@ import { useGlobSetting } from '/@/hooks/setting';
|
|||||||
import { JDragConfigEnum } from '/@/enums/jeecgEnum';
|
import { JDragConfigEnum } from '/@/enums/jeecgEnum';
|
||||||
import { useSso } from '/@/hooks/web/useSso';
|
import { useSso } from '/@/hooks/web/useSso';
|
||||||
import { getDictCache, setDictCache } from '/@/utils/dict';
|
import { getDictCache, setDictCache } from '/@/utils/dict';
|
||||||
|
import { loginAnYanApi } from '/@/views/system/loginmini/login.api';
|
||||||
|
|
||||||
interface UserState {
|
interface UserState {
|
||||||
userInfo: Nullable<UserInfo>;
|
userInfo: Nullable<UserInfo>;
|
||||||
@@ -174,6 +175,24 @@ export const useUserStore = defineStore({
|
|||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
async loginOne(
|
||||||
|
params: LoginParams & {
|
||||||
|
goHome?: boolean;
|
||||||
|
mode?: ErrorMessageMode;
|
||||||
|
}
|
||||||
|
): Promise<GetUserInfoModel | null> {
|
||||||
|
try {
|
||||||
|
const { goHome = true, mode, ...loginParams } = params;
|
||||||
|
const data = await loginAnYanApi(loginParams, mode);
|
||||||
|
const { token, userInfo } = data;
|
||||||
|
// save token
|
||||||
|
this.setToken(token, false);
|
||||||
|
this.setTenant(userInfo.loginTenantId);
|
||||||
|
return this.afterLoginAction(goHome, data);
|
||||||
|
} catch (error) {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* 扫码登录事件
|
* 扫码登录事件
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -13,6 +13,10 @@
|
|||||||
<div class="aui-formBox">
|
<div class="aui-formBox">
|
||||||
<div class="aui-formWell">
|
<div class="aui-formWell">
|
||||||
<div class="form-title">{{ t('sys.login.formTitle') }}</div>
|
<div class="form-title">{{ t('sys.login.formTitle') }}</div>
|
||||||
|
<a-tabs v-model:activeKey="activeKey">
|
||||||
|
<a-tab-pane key="0" tab="健康系统认证" />
|
||||||
|
<a-tab-pane key="1" tab="平台统一认证" />
|
||||||
|
</a-tabs>
|
||||||
<div class="aui-form-box" style="height: 180px">
|
<div class="aui-form-box" style="height: 180px">
|
||||||
<a-form ref="loginRef" :model="formData" @keyup.enter.native="loginHandleClick">
|
<a-form ref="loginRef" :model="formData" @keyup.enter.native="loginHandleClick">
|
||||||
<div class="aui-account">
|
<div class="aui-account">
|
||||||
@@ -37,7 +41,7 @@
|
|||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="aui-inputClear">
|
<div class="aui-inputClear" v-if="activeKey === '0'">
|
||||||
<i class="icon icon-code"></i>
|
<i class="icon icon-code"></i>
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-input
|
<a-input
|
||||||
@@ -61,19 +65,29 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="aui-flex remember">
|
<!-- <div class="aui-flex remember">-->
|
||||||
<div class="aui-flex-box">
|
<!-- <div class="aui-flex-box">-->
|
||||||
<div class="aui-choice">
|
<!-- <div class="aui-choice">-->
|
||||||
<a-input v-model:value="rememberMe" class="fix-auto-fill" type="checkbox" />
|
<!-- <a-input v-model:value="rememberMe" class="fix-auto-fill" type="checkbox" />-->
|
||||||
<span class="aui-check">{{ t('sys.login.rememberMe') }}</span>
|
<!-- <span class="aui-check">{{ t('sys.login.rememberMe') }}</span>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
</div>
|
||||||
</a-form>
|
</a-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="aui-formButton">
|
<div class="aui-formButton" style="margin-top: 10%">
|
||||||
<div class="aui-flex">
|
<div class="aui-flex" v-if="activeKey === '1'">
|
||||||
|
<a-button
|
||||||
|
:loading="loginLoading"
|
||||||
|
class="aui-link-login aui-flex-box"
|
||||||
|
type="primary"
|
||||||
|
@click="loginHandleClickOne"
|
||||||
|
>
|
||||||
|
{{ t('sys.login.loginButton') }}
|
||||||
|
</a-button>
|
||||||
|
</div>
|
||||||
|
<div class="aui-flex" v-else>
|
||||||
<a-button
|
<a-button
|
||||||
:loading="loginLoading"
|
:loading="loginLoading"
|
||||||
class="aui-link-login aui-flex-box"
|
class="aui-link-login aui-flex-box"
|
||||||
@@ -101,6 +115,7 @@
|
|||||||
import { useI18n } from '/@/hooks/web/useI18n';
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
import { useDesign } from '/@/hooks/web/useDesign';
|
import { useDesign } from '/@/hooks/web/useDesign';
|
||||||
import { encipher } from '/@/utils/jsencrypt';
|
import { encipher } from '/@/utils/jsencrypt';
|
||||||
|
import { loginAnYanApi } from '/@/views/system/loginmini/login.api';
|
||||||
|
|
||||||
const { prefixCls } = useDesign('mini-login');
|
const { prefixCls } = useDesign('mini-login');
|
||||||
const { notification, createMessage } = useMessage();
|
const { notification, createMessage } = useMessage();
|
||||||
@@ -111,6 +126,7 @@
|
|||||||
requestCodeSuccess: false,
|
requestCodeSuccess: false,
|
||||||
checkKey: null,
|
checkKey: null,
|
||||||
});
|
});
|
||||||
|
const activeKey = ref('0');
|
||||||
const rememberMe = ref<string>('0');
|
const rememberMe = ref<string>('0');
|
||||||
const type = ref<string>('login');
|
const type = ref<string>('login');
|
||||||
//账号登录表单字段
|
//账号登录表单字段
|
||||||
@@ -145,6 +161,9 @@
|
|||||||
async function loginHandleClick() {
|
async function loginHandleClick() {
|
||||||
accountLogin();
|
accountLogin();
|
||||||
}
|
}
|
||||||
|
async function loginHandleClickOne() {
|
||||||
|
accountLoginOne();
|
||||||
|
}
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => formData.password,
|
() => formData.password,
|
||||||
@@ -195,6 +214,45 @@
|
|||||||
loginLoading.value = false;
|
loginLoading.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function accountLoginOne() {
|
||||||
|
if (!formData.username) {
|
||||||
|
createMessage.warn(t('sys.login.accountPlaceholder'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!formData.password) {
|
||||||
|
createMessage.warn(t('sys.login.passwordPlaceholder'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
loginLoading.value = true;
|
||||||
|
const { userInfo } = await userStore.loginOne(
|
||||||
|
toRaw({
|
||||||
|
password: encipher(formData.password) as string,
|
||||||
|
// password: formData.password,
|
||||||
|
username: formData.username,
|
||||||
|
captcha: formData.inputCode,
|
||||||
|
checkKey: randCodeData.checkKey,
|
||||||
|
mode: 'none', //不要默认的错误提示
|
||||||
|
})
|
||||||
|
);
|
||||||
|
if (userInfo) {
|
||||||
|
notification.success({
|
||||||
|
message: t('sys.login.loginSuccessTitle'),
|
||||||
|
description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
|
||||||
|
duration: 3,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
notification.error({
|
||||||
|
message: t('sys.api.errorTip'),
|
||||||
|
description: error.message || t('sys.login.networkExceptionMsg'),
|
||||||
|
duration: 3,
|
||||||
|
});
|
||||||
|
handleChangeCheckCode();
|
||||||
|
} finally {
|
||||||
|
loginLoading.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
//加载验证码
|
//加载验证码
|
||||||
handleChangeCheckCode();
|
handleChangeCheckCode();
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
|
||||||
|
export enum Api {
|
||||||
|
loginAnYan = '/sys/loginAnYan',
|
||||||
|
}
|
||||||
|
export const loginAnYanApi = (params: any) => defHttp.post({ url: Api.loginAnYan, params });
|
||||||
Reference in New Issue
Block a user