From de59371f50991a0dbee997eb4a13fd3f5f415ffd Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期五, 21 三月 2025 09:45:21 +0800 Subject: [PATCH] feat(login): 添加 Keycloak 登录支持 --- src/views/login.vue | 60 ++++++++++++++++++++++++++++++------------------------------ 1 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/views/login.vue b/src/views/login.vue index aabf2aa..50d0cb7 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -2,17 +2,17 @@ <div class="login"> <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"> <div class="title-box"> - <h3 class="title">RuoYi-Vue-Plus澶氱鎴风鐞嗙郴缁�</h3> + <h3 class="title">鍏板疂杞﹂棿璐ㄩ噺绠$悊绯荤粺</h3> <lang-select /> </div> <el-form-item v-if="tenantEnabled" prop="tenantId"> - <el-select v-model="loginForm.tenantId" filterable :placeholder="$t('login.selectPlaceholder')" style="width: 100%"> + <el-select v-model="loginForm.tenantId" filterable :placeholder="proxy.$t('login.selectPlaceholder')" style="width: 100%"> <el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"></el-option> <template #prefix><svg-icon icon-class="company" class="el-input__icon input-icon" /></template> </el-select> </el-form-item> <el-form-item prop="username"> - <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" :placeholder="$t('login.username')"> + <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" :placeholder="proxy.$t('login.username')"> <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> </el-input> </el-form-item> @@ -22,7 +22,7 @@ type="password" size="large" auto-complete="off" - :placeholder="$t('login.password')" + :placeholder="proxy.$t('login.password')" @keyup.enter="handleLogin" > <template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template> @@ -33,7 +33,7 @@ v-model="loginForm.code" size="large" auto-complete="off" - :placeholder="$t('login.code')" + :placeholder="proxy.$t('login.code')" style="width: 63%" @keyup.enter="handleLogin" > @@ -43,37 +43,37 @@ <img :src="codeUrl" class="login-code-img" @click="getCode" /> </div> </el-form-item> - <el-checkbox v-model="loginForm.rememberMe" style="margin: 0 0 25px 0">{{ $t('login.rememberPassword') }}</el-checkbox> + <el-checkbox v-model="loginForm.rememberMe" style="margin: 0 0 25px 0">{{ proxy.$t('login.rememberPassword') }}</el-checkbox> <el-form-item style="float: right"> - <el-button circle :title="$t('login.social.wechat')" @click="doSocialLogin('wechat')"> - <svg-icon icon-class="wechat" /> +<!-- <el-button circle :title="proxy.$t('login.social.wechat')" @click="doSocialLogin('wechat')">--> +<!-- <svg-icon icon-class="wechat" />--> +<!-- </el-button>--> + <el-button circle :title="proxy.$t('login.social.keycloak')" @click="doSocialLogin('keycloak')"> + <svg-icon icon-class="keycloak" /> </el-button> - <el-button circle :title="$t('login.social.maxkey')" @click="doSocialLogin('maxkey')"> - <svg-icon icon-class="maxkey" /> - </el-button> - <el-button circle :title="$t('login.social.topiam')" @click="doSocialLogin('topiam')"> - <svg-icon icon-class="topiam" /> - </el-button> - <el-button circle :title="$t('login.social.gitee')" @click="doSocialLogin('gitee')"> - <svg-icon icon-class="gitee" /> - </el-button> - <el-button circle :title="$t('login.social.github')" @click="doSocialLogin('github')"> - <svg-icon icon-class="github" /> - </el-button> +<!-- <el-button circle :title="proxy.$t('login.social.topiam')" @click="doSocialLogin('topiam')">--> +<!-- <svg-icon icon-class="topiam" />--> +<!-- </el-button>--> +<!-- <el-button circle :title="proxy.$t('login.social.gitee')" @click="doSocialLogin('gitee')">--> +<!-- <svg-icon icon-class="gitee" />--> +<!-- </el-button>--> +<!-- <el-button circle :title="proxy.$t('login.social.github')" @click="doSocialLogin('github')">--> +<!-- <svg-icon icon-class="github" />--> +<!-- </el-button>--> </el-form-item> <el-form-item style="width: 100%"> <el-button :loading="loading" size="large" type="primary" style="width: 100%" @click.prevent="handleLogin"> - <span v-if="!loading">{{ $t('login.login') }}</span> - <span v-else>{{ $t('login.logging') }}</span> + <span v-if="!loading">{{ proxy.$t('login.login') }}</span> + <span v-else>{{ proxy.$t('login.logging') }}</span> </el-button> <div v-if="register" style="float: right"> - <router-link class="link-type" :to="'/register'">{{ $t('login.switchRegisterPage') }}</router-link> + <router-link class="link-type" :to="'/register'">{{ proxy.$t('login.switchRegisterPage') }}</router-link> </div> </el-form-item> </el-form> <!-- 搴曢儴 --> <div class="el-login-footer"> - <span>Copyright 漏 2018-2024 鐤媯鐨勭嫯瀛怢i All Rights Reserved.</span> + <span>Copyright 漏 2018-2024 涓婃捣鍏版郸鏅鸿兘绉戞妧鏈夐檺鍏徃 All Rights Reserved.</span> </div> </div> </template> @@ -87,14 +87,16 @@ import { HttpStatus } from '@/enums/RespEnum'; import { useI18n } from 'vue-i18n'; +const { proxy } = getCurrentInstance() as ComponentInternalInstance; + const userStore = useUserStore(); const router = useRouter(); const { t } = useI18n(); const loginForm = ref<LoginData>({ tenantId: '000000', - username: 'admin', - password: 'admin123', + username: '', + password: '', rememberMe: false, code: '', uuid: '' @@ -124,7 +126,7 @@ watch( () => router.currentRoute.value, (newRoute: any) => { - redirect.value = newRoute.query && decodeURIComponent(newRoute.query.redirect); + redirect.value = newRoute.query && newRoute.query.redirect && decodeURIComponent(newRoute.query.redirect); }, { immediate: true } ); @@ -221,9 +223,7 @@ }; onMounted(() => { - getCode(); - initTenantList(); - getLoginData(); + doSocialLogin('keycloak') }); </script> -- Gitblit v1.9.3