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