From 7a6351a1fa5fc6e67b55c475bcd253d6d3e5d68f Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期二, 29 九月 2026 13:48:31 +0800
Subject: [PATCH] feat(wxcp): 新增企业微信模块页面与扫码登录入口
---
src/views/_core/authentication/login.vue | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/src/views/_core/authentication/login.vue b/src/views/_core/authentication/login.vue
index 16e9f68..0d0f566 100644
--- a/src/views/_core/authentication/login.vue
+++ b/src/views/_core/authentication/login.vue
@@ -5,8 +5,9 @@
import { computed, onMounted, ref } from 'vue';
-import { AuthenticationLogin, Verification, z } from '@vben/common-ui';
+import { AuthenticationLogin, VbenButton, Verification, z } from '@vben/common-ui';
import { isCaptchaEnable, isTenantEnable } from '@vben/hooks';
+import { SvgWeChatIcon } from '@vben/icons';
import { $t } from '@vben/locales';
import { useAccessStore } from '@vben/stores';
@@ -15,6 +16,7 @@
getCaptcha,
getTenantByWebsite,
getTenantSimpleList,
+ socialAuthRedirect,
} from '#/api/core/auth';
import { useAuthStore } from '#/store';
@@ -71,6 +73,37 @@
onMounted(() => {
fetchTenantList();
});
+
+// ========== 浼佷笟寰俊鐧诲綍 ==========
+
+/** 浼佷笟寰俊鐨勭ぞ浜ょ被鍨嬶紝瀵瑰簲鍚庣 SocialTypeEnum.WECHAT_ENTERPRISE */
+const WXCP_SOCIAL_TYPE = 30;
+
+const wxcpLoading = ref(false);
+
+/**
+ * 浼佷笟寰俊鎵爜鐧诲綍
+ *
+ * 娴佺▼锛氬彇鎺堟潈鍦板潃 -> 鏁撮〉璺宠浆鍒颁紒涓氬井淇℃壂鐮侀〉 -> 鎵爜鍚庝紒涓氬井淇″甫 code/state
+ * 鍥炶烦鍒� social-login 椤甸潰 -> 璇ラ〉闈㈣皟鐢� /system/auth/social-login 鎹㈠彇浠ょ墝
+ */
+async function handleWxcpLogin() {
+ try {
+ wxcpLoading.value = true;
+ // 娉ㄦ剰锛歵ype 闇�瑕佸厛 encode 涓�娆★紝閰嶅悎 social-login 椤甸潰鐨� getUrlValue() 浣跨敤锛�
+ // 鍚﹀垯浼佷笟寰俊鍥炶烦鍚� type 鍙傛暟浼氳鍚炴帀锛屽鑷存棤娉曡瘑鍒ぞ浜ょ被鍨�
+ const redirectUri = `${location.origin}/auth/social-login?${encodeURIComponent(
+ `type=${WXCP_SOCIAL_TYPE}`,
+ )}`;
+ window.location.href = await socialAuthRedirect(
+ WXCP_SOCIAL_TYPE,
+ redirectUri,
+ );
+ } catch (error) {
+ console.error('浼佷笟寰俊鐧诲綍澶辫触:', error);
+ wxcpLoading.value = false;
+ }
+}
const formSchema = computed((): VbenFormSchema[] => {
return [
@@ -134,7 +167,28 @@
:show-forget-password="false"
:show-doc-link="false"
@submit="handleLogin"
- />
+ >
+ <template #third-party-login>
+ <div class="mt-4">
+ <div class="mb-4 flex items-center justify-between">
+ <span class="w-[35%] border-b border-input dark:border-gray-600"></span>
+ <span class="text-center text-xs text-muted-foreground">
+ 鍏朵粬鐧诲綍鏂瑰紡
+ </span>
+ <span class="w-[35%] border-b border-input dark:border-gray-600"></span>
+ </div>
+ <VbenButton
+ class="w-full"
+ variant="outline"
+ :loading="wxcpLoading"
+ @click="handleWxcpLogin"
+ >
+ <SvgWeChatIcon class="mr-2 size-5" />
+ 浼佷笟寰俊鐧诲綍
+ </VbenButton>
+ </div>
+ </template>
+ </AuthenticationLogin>
<Verification
ref="verifyRef"
v-if="captchaEnable"
--
Gitblit v1.9.3