From 7aa0c7e491fe660abb62e68792ff5474f19bd5b8 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Thu, 14 May 2026 01:39:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BD=A9=E8=99=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=80=89=E6=8B=A9=E5=A4=9A=E7=A7=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/system/settings/service/models.ts | 1 + .../src/store/settings/api.basic.ts | 1 + .../certd-client/src/views/certd/mine/api.ts | 9 +- .../src/views/certd/mine/user-profile.vue | 18 ++- .../src/views/framework/oauth/api.ts | 3 +- .../views/framework/oauth/oauth-footer.vue | 26 +++- .../src/views/sys/settings/api.ts | 2 +- .../src/views/sys/settings/tabs/oauth.vue | 11 ++ .../metadata/addon_oauth_clogin.yaml | 37 +++--- .../basic/login/oauth-controller.ts | 75 +++++++++-- .../sys/settings/sys-settings-controller.ts | 1 + .../src/modules/auto/auto-fix.test.ts | 123 +++++++++++++++++- .../certd-server/src/modules/auto/auto-fix.ts | 67 +++++++++- .../modules/login/service/login-service.ts | 3 +- .../src/plugins/plugin-oauth/api.ts | 4 +- .../plugin-oauth/oauth2/plugin-clogin.ts | 78 ++++++----- 16 files changed, 371 insertions(+), 88 deletions(-) diff --git a/packages/libs/lib-server/src/system/settings/service/models.ts b/packages/libs/lib-server/src/system/settings/service/models.ts index 89e96760f..c8daffbaf 100644 --- a/packages/libs/lib-server/src/system/settings/service/models.ts +++ b/packages/libs/lib-server/src/system/settings/service/models.ts @@ -64,6 +64,7 @@ export class SysPublicSettings extends BaseSettings { type: string; title: string; addonId: number; + icon?: string; }> = {}; notice?: string; diff --git a/packages/ui/certd-client/src/store/settings/api.basic.ts b/packages/ui/certd-client/src/store/settings/api.basic.ts index 4134621de..1d6a248f2 100644 --- a/packages/ui/certd-client/src/store/settings/api.basic.ts +++ b/packages/ui/certd-client/src/store/settings/api.basic.ts @@ -85,6 +85,7 @@ export type SysPublicSetting = { type: string; title: string; addonId: number; + icon?: string; } >; // 系统通知 diff --git a/packages/ui/certd-client/src/views/certd/mine/api.ts b/packages/ui/certd-client/src/views/certd/mine/api.ts index c30fb7d78..5cabbd16c 100644 --- a/packages/ui/certd-client/src/views/certd/mine/api.ts +++ b/packages/ui/certd-client/src/views/certd/mine/api.ts @@ -68,20 +68,23 @@ export async function GetOauthProviders() { }); } -export async function UnbindOauth(type: string) { +export async function UnbindOauth(type: string, subtype?: string) { return await request({ url: "/oauth/unbind", method: "POST", - data: { type }, + data: { + type: subtype ? `${type}:${subtype}` : type, + }, }); } -export async function OauthBoundUrl(type: string) { +export async function OauthBoundUrl(type: string, subtype?: string) { return await request({ url: "/oauth/login", method: "POST", data: { type, + subtype, forType: "bind", }, }); diff --git a/packages/ui/certd-client/src/views/certd/mine/user-profile.vue b/packages/ui/certd-client/src/views/certd/mine/user-profile.vue index c7160cae3..8fb3e8145 100644 --- a/packages/ui/certd-client/src/views/certd/mine/user-profile.vue +++ b/packages/ui/certd-client/src/views/certd/mine/user-profile.vue @@ -78,11 +78,11 @@ 未绑定 - + 解绑 - + 绑定 @@ -214,7 +214,7 @@ async function loadOauthProviders() { const computedOauthBounds = computed(() => { const list = oauthProviders.value.map(item => { - const bound = oauthBounds.value.find(bound => bound.type === item.name); + const bound = oauthBounds.value.find(bound => bound.type === buildOauthBoundType(item)); return { ...item, bound, @@ -223,20 +223,24 @@ const computedOauthBounds = computed(() => { return list; }); -async function unbind(type: string) { +function buildOauthBoundType(item: any) { + return item.subtype ? `${item.name}:${item.subtype}` : item.name; +} + +async function unbind(item: any) { Modal.confirm({ title: "确认解绑吗?", okText: "确认", okType: "danger", onOk: async () => { - await api.UnbindOauth(type); + await api.UnbindOauth(item.name, item.subtype); await loadOauthBounds(); }, }); } -async function bind(type: string) { - const res = await api.OauthBoundUrl(type); +async function bind(item: any) { + const res = await api.OauthBoundUrl(item.name, item.subtype); const loginUrl = res.loginUrl; window.location.href = loginUrl; } diff --git a/packages/ui/certd-client/src/views/framework/oauth/api.ts b/packages/ui/certd-client/src/views/framework/oauth/api.ts index 1c5ab8ae5..2149b767a 100644 --- a/packages/ui/certd-client/src/views/framework/oauth/api.ts +++ b/packages/ui/certd-client/src/views/framework/oauth/api.ts @@ -2,7 +2,7 @@ import { request } from "/src/api/service"; const apiPrefix = "/oauth"; -export async function OauthLogin(type: string, forType?: string, from?: string) { +export async function OauthLogin(type: string, forType?: string, from?: string, subtype?: string) { return await request({ url: apiPrefix + `/login`, method: "post", @@ -10,6 +10,7 @@ export async function OauthLogin(type: string, forType?: string, from?: string) type, forType: forType || "login", from: from || "web", + subtype, }, }); } diff --git a/packages/ui/certd-client/src/views/framework/oauth/oauth-footer.vue b/packages/ui/certd-client/src/views/framework/oauth/oauth-footer.vue index 00f3a97a9..c76738684 100644 --- a/packages/ui/certd-client/src/views/framework/oauth/oauth-footer.vue +++ b/packages/ui/certd-client/src/views/framework/oauth/oauth-footer.vue @@ -5,8 +5,8 @@
-