From bb3085ef84201ccd2dc632ba8c5097cb00258be4 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 3 Dec 2025 00:35:17 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=AC=AC=E4=B8=89=E6=96=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=85=81=E8=AE=B8=E9=80=89=E6=8B=A9logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libs/lib-server/src/user/addon/api/api.ts | 1 + packages/ui/certd-client/package.json | 10 ++-- packages/ui/certd-client/src/api/tools.ts | 2 +- .../ui/certd-client/src/store/user/index.ts | 1 + .../src/views/framework/login/index.vue | 2 +- .../views/framework/oauth/oauth-footer.vue | 8 ++- .../src/views/sys/settings/tabs/oauth.vue | 1 + .../basic/login/oauth-controller.ts | 3 ++ .../plugins/plugin-oauth/oidc/plugin-oidc.ts | 14 +++++- .../src/plugins/plugin-oauth/wx/plugin-wx.ts | 2 +- pnpm-lock.yaml | 50 +++++++++---------- 11 files changed, 57 insertions(+), 37 deletions(-) diff --git a/packages/libs/lib-server/src/user/addon/api/api.ts b/packages/libs/lib-server/src/user/addon/api/api.ts index 02ffab113..6dc8ca90a 100644 --- a/packages/libs/lib-server/src/user/addon/api/api.ts +++ b/packages/libs/lib-server/src/user/addon/api/api.ts @@ -65,6 +65,7 @@ export abstract class BaseAddon implements IAddon { http!: HttpClient; logger!: ILogger; + title!: string; diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index cfaa21aed..ffc1d0b72 100644 --- a/packages/ui/certd-client/package.json +++ b/packages/ui/certd-client/package.json @@ -33,11 +33,11 @@ "@aws-sdk/s3-request-presigner": "^3.535.0", "@certd/vue-js-cron-light": "^4.0.14", "@ctrl/tinycolor": "^4.1.0", - "@fast-crud/editor-code": "^1.27.4", - "@fast-crud/fast-crud": "^1.27.4", - "@fast-crud/fast-extends": "^1.27.4", - "@fast-crud/ui-antdv4": "^1.27.4", - "@fast-crud/ui-interface": "^1.27.4", + "@fast-crud/editor-code": "^1.27.6", + "@fast-crud/fast-crud": "^1.27.6", + "@fast-crud/fast-extends": "^1.27.6", + "@fast-crud/ui-antdv4": "^1.27.6", + "@fast-crud/ui-interface": "^1.27.6", "@iconify/tailwind": "^1.2.0", "@iconify/vue": "^4.1.1", "@manypkg/get-packages": "^2.2.2", diff --git a/packages/ui/certd-client/src/api/tools.ts b/packages/ui/certd-client/src/api/tools.ts index 47976e2e3..193a570c1 100644 --- a/packages/ui/certd-client/src/api/tools.ts +++ b/packages/ui/certd-client/src/api/tools.ts @@ -69,7 +69,7 @@ export function errorLog(error: any, notify = true) { * @description 创建一个错误 */ export function errorCreate(msg: string, notify = true, data?: any) { - const err = new CodeError(msg, data.code, data.data); + const err = new CodeError(msg, data?.code || 1, data?.data); console.error("errorCreate", err); if (notify) { uiContext.get().notification.error({ message: err.message }); diff --git a/packages/ui/certd-client/src/store/user/index.ts b/packages/ui/certd-client/src/store/user/index.ts index 2cd47a0d5..8bccf6351 100644 --- a/packages/ui/certd-client/src/store/user/index.ts +++ b/packages/ui/certd-client/src/store/user/index.ts @@ -142,6 +142,7 @@ export const useUserStore = defineStore({ url: provider.logoutUrl, method: "get", withCredentials: true, + showErrorNotify: false, }); } catch (e) { console.error("注销第三方登录失败:", e); diff --git a/packages/ui/certd-client/src/views/framework/login/index.vue b/packages/ui/certd-client/src/views/framework/login/index.vue index 9d0b44449..1b305c8d2 100644 --- a/packages/ui/certd-client/src/views/framework/login/index.vue +++ b/packages/ui/certd-client/src/views/framework/login/index.vue @@ -278,7 +278,7 @@ export default defineComponent({ //} .fs-icon { - color: rgba(0, 0, 0, 0.45); + // color: rgba(0, 0, 0, 0.45); margin-right: 4px; } 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 0af136c67..51aa252ec 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 @@ -18,6 +18,7 @@ import { computed, onMounted, ref } from "vue"; import * as api from "./api"; import { useI18n } from "vue-i18n"; import { useSettingStore } from "/@/store/settings"; +import { useRoute } from "vue-router"; const oauthProviderList = ref([]); const props = defineProps<{ @@ -30,10 +31,13 @@ const computedTitle = computed(() => { }); const settingStore = useSettingStore(); + +const route = useRoute(); +const queryOauthOnly = route.query.oauthOnly as string; onMounted(async () => { oauthProviderList.value = await api.GetOauthProviders(); //如果开启了自动跳转登录 - if (settingStore.sysPublic.oauthAutoRedirect) { + if (settingStore.sysPublic.oauthAutoRedirect && queryOauthOnly !== "false") { const firstOauth = oauthProviderList.value.find(item => item.addonId > 0); if (firstOauth) { goOauthLogin(firstOauth.name); @@ -99,7 +103,7 @@ async function goOauthLogin(type: string) { border-radius: 100px; .fs-icon { font-size: 36px; - color: #006be6 !important; + color: #006be6; margin: 0px !important; } } diff --git a/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue b/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue index 6c14f8e36..5b20c9a03 100644 --- a/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue +++ b/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue @@ -128,6 +128,7 @@ const onFinish = async (form: any) => { notification.success({ message: t("certd.saveSuccess"), }); + await loadOauthProviders(); } finally { saveLoading.value = false; } diff --git a/packages/ui/certd-server/src/controller/basic/login/oauth-controller.ts b/packages/ui/certd-server/src/controller/basic/login/oauth-controller.ts index f747247f3..6a9bd418f 100644 --- a/packages/ui/certd-server/src/controller/basic/login/oauth-controller.ts +++ b/packages/ui/certd-server/src/controller/basic/login/oauth-controller.ts @@ -255,6 +255,9 @@ export class ConnectController extends BaseController { if (logoutUrl){ provider.logoutUrl = logoutUrl; } + if(addon.icon){ + provider.icon = addon.icon; + } } } list.push(provider); diff --git a/packages/ui/certd-server/src/plugins/plugin-oauth/oidc/plugin-oidc.ts b/packages/ui/certd-server/src/plugins/plugin-oauth/oidc/plugin-oidc.ts index 6796bd637..e71045393 100644 --- a/packages/ui/certd-server/src/plugins/plugin-oauth/oidc/plugin-oidc.ts +++ b/packages/ui/certd-server/src/plugins/plugin-oauth/oidc/plugin-oidc.ts @@ -6,11 +6,21 @@ import { BuildLoginUrlReq, BuildLogoutUrlReq, IOauthProvider, OnCallbackReq } fr name: 'oidc', title: 'OIDC认证', desc: 'OpenID Connect 认证,统一认证服务', - icon:"simple-icons:fusionauth", + icon:"simple-icons:fusionauth:#006be6", showTest: false, }) export class OidcOauthProvider extends BaseAddon implements IOauthProvider { + @AddonInput({ + title: "自定义图标", + component: { + name:"fs-icon-selector", + vModel:"modelValue" + }, + required: false, + }) + icon = ""; + @AddonInput({ title: "ClientId", helper: "ClientId / appId", @@ -29,7 +39,7 @@ export class OidcOauthProvider extends BaseAddon implements IOauthProvider { @AddonInput({ title: "服务地址", - helper: "Issuer地址,去掉/.well-known/openid-configuration的服务发现地址", + helper: "Issuer地址,服务发现地址去掉/.well-known/openid-configuration", component: { placeholder: "https://oidc.example.com/oidc", }, diff --git a/packages/ui/certd-server/src/plugins/plugin-oauth/wx/plugin-wx.ts b/packages/ui/certd-server/src/plugins/plugin-oauth/wx/plugin-wx.ts index a1fc64e79..15d9ffe49 100644 --- a/packages/ui/certd-server/src/plugins/plugin-oauth/wx/plugin-wx.ts +++ b/packages/ui/certd-server/src/plugins/plugin-oauth/wx/plugin-wx.ts @@ -6,7 +6,7 @@ import { BuildLoginUrlReq, BuildLogoutUrlReq, IOauthProvider, OnCallbackReq } fr name: 'wx', title: '微信登录', desc: '微信网站应用登录', - icon: "mdi:wechat", + icon: "ion:logo-wechat:green", showTest: false, }) export class WxOauthProvider extends BaseAddon implements IOauthProvider { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df5e2e8d3..1f11bde2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1080,20 +1080,20 @@ importers: specifier: ^4.1.0 version: 4.1.0 '@fast-crud/editor-code': - specifier: ^1.27.4 - version: 1.27.4 + specifier: ^1.27.6 + version: 1.27.6 '@fast-crud/fast-crud': - specifier: ^1.27.4 - version: 1.27.4(vue@3.5.14(typescript@5.8.3)) + specifier: ^1.27.6 + version: 1.27.6(vue@3.5.14(typescript@5.8.3)) '@fast-crud/fast-extends': - specifier: ^1.27.4 - version: 1.27.4(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3)) + specifier: ^1.27.6 + version: 1.27.6(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3)) '@fast-crud/ui-antdv4': - specifier: ^1.27.4 - version: 1.27.4 + specifier: ^1.27.6 + version: 1.27.6 '@fast-crud/ui-interface': - specifier: ^1.27.4 - version: 1.27.4 + specifier: ^1.27.6 + version: 1.27.6 '@iconify/tailwind': specifier: ^1.2.0 version: 1.2.0 @@ -3411,20 +3411,20 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@fast-crud/editor-code@1.27.4': - resolution: {integrity: sha512-syuSxpNc/So5xoGGZkiC4Iqa8MdrQpeHJRqs6/A8pRUDh9UEN1iBFm8PPxmSluHc7sFXZdt0IIRfJE6sDBhRiA==} + '@fast-crud/editor-code@1.27.6': + resolution: {integrity: sha512-ynEfltaR11wVDwZjwMDlgKa7B/oudyEG5rgX8uUQbCcFb13tXArz/3KButB3+kaqQWK/jNakPhb/oM1lUkjv7g==} - '@fast-crud/fast-crud@1.27.4': - resolution: {integrity: sha512-wwTqwETgcgBa8v2P/C2MGFfAxZGvAPDFiyrg3b9k+6eMePR//RbY9+M1knsTVaHTTkabAmgwZ+OnnCJzpmnK/A==} + '@fast-crud/fast-crud@1.27.6': + resolution: {integrity: sha512-V4sma2wWFLnivJT/vxEsSX5A80IRRppD6oSq935BlQ4a8tTuZ26QNNplmhL1L6Hp5NWDBDSxKfBIuJmTMBzm4A==} - '@fast-crud/fast-extends@1.27.4': - resolution: {integrity: sha512-GVWmwondzouPsDD2mCLmxbR7RV5Cf1pJQS0nracQZfrwKsJdNcKlIZ3F3SULklAELMtW01hFbwt7VC+ZehjvAQ==} + '@fast-crud/fast-extends@1.27.6': + resolution: {integrity: sha512-85Eu7JuAQN9eRHi9vL9gunIApgayBrK9z6RIcPp0jY41nq5pKZA0DEQoU7jy1PL0bhvbtj9E22bDaA7rXqbTcw==} - '@fast-crud/ui-antdv4@1.27.4': - resolution: {integrity: sha512-WcDYmlc06/BIpOnpfN7cZuWqW2kxZC5EfazVw1IaY+kxx3eLRdWX1dShh23oZEsKdwKwGcgY7xeiptFgEpel+Q==} + '@fast-crud/ui-antdv4@1.27.6': + resolution: {integrity: sha512-Eszzn6KgLy9TrjsJOfe3FFu2yMFF/oslCwiy8jknbuiZs/PUOhIhdQgQAn5hwmqTas/T62C/9pje5DVbgOUbNA==} - '@fast-crud/ui-interface@1.27.4': - resolution: {integrity: sha512-hZJiABhXOZma6kaxes9waKMdVEjaEMUtEGZ7TIXXJuExynNOMK1AVtfgACSP5uwTj8mKxUEa7iBKx2vr9EcfFA==} + '@fast-crud/ui-interface@1.27.6': + resolution: {integrity: sha512-T6Fgwe1WUWoYMsK0uIZu4fbtaxN5IngUy/nikPREwHTePHS6br9vQTFefG8bZv5e+L381TIETXzfU70RoSJLGg==} '@fidm/asn1@1.0.4': resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==} @@ -15325,14 +15325,14 @@ snapshots: '@eslint/js@8.57.0': {} - '@fast-crud/editor-code@1.27.4': + '@fast-crud/editor-code@1.27.6': dependencies: js-yaml: 4.1.0 lodash-es: 4.17.21 monaco-editor: 0.52.2 monaco-yaml: 5.4.0(monaco-editor@0.52.2) - '@fast-crud/fast-crud@1.27.4(vue@3.5.14(typescript@5.8.3))': + '@fast-crud/fast-crud@1.27.6(vue@3.5.14(typescript@5.8.3))': dependencies: '@iconify/types': 2.0.0 file-saver: 2.0.5 @@ -15342,7 +15342,7 @@ snapshots: transitivePeerDependencies: - vue - '@fast-crud/fast-extends@1.27.4(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3))': + '@fast-crud/fast-extends@1.27.6(aws-crt@1.26.2)(vue@3.5.14(typescript@5.8.3))': dependencies: '@aws-sdk/client-s3': 3.810.0(aws-crt@1.26.2) '@aws-sdk/s3-request-presigner': 3.810.0 @@ -15372,9 +15372,9 @@ snapshots: - utf-8-validate - vue - '@fast-crud/ui-antdv4@1.27.4': {} + '@fast-crud/ui-antdv4@1.27.6': {} - '@fast-crud/ui-interface@1.27.4': + '@fast-crud/ui-interface@1.27.6': dependencies: lodash-es: 4.17.21