From eabfcf2ca5d656e2b18e48d869acba4f35d08c87 Mon Sep 17 00:00:00 2001 From: luckyasme <807254037@qq.com> Date: Wed, 30 Jul 2025 15:24:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?sync:=20=E5=90=8C=E6=AD=A5website-v2?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/.vitepress/plugins/replace-url-plugin.ts | 51 ++++++ .../src/assets/style/theme/dropdown.scss | 4 + .../src/assets/style/theme/icon.scss | 7 + .../src/assets/style/theme/index.scss | 1 + .../src/assets/svg-icons/icon-header-moon.svg | 6 +- .../assets/svg-icons/icon-header-person.svg | 6 +- .../src/assets/svg-icons/icon-locale.svg | 3 + .../src/assets/svg-icons/icon-sun-outline.svg | 6 +- .../src/components/FloatingButton.vue | 2 +- .../src/components/FloatingButtonDocs.vue | 4 + .../src/components/GiteeViewSource.vue | 55 +++++-- app/.vitepress/src/components/ImgZoomDrag.vue | 150 +++++++++--------- app/.vitepress/src/components/doc/DocMenu.vue | 3 +- .../src/components/doc/DocPagination.vue | 147 ++++++++++++----- app/.vitepress/src/components/doc/DocType.vue | 4 + .../src/components/doc/DocTypeMobile.vue | 1 + .../src/components/doc/DocVersion.vue | 7 +- .../src/components/doc/DocVersionMobile.vue | 4 + .../feedback/FloatingButtonHome.vue | 3 + .../src/components/header/HeaderCode.vue | 9 +- .../src/components/header/HeaderLanguage.vue | 73 +++++---- .../src/components/header/HeaderLogin.vue | 17 +- .../src/components/header/HeaderNav.vue | 3 +- .../src/components/header/HeaderNavMoblie.vue | 5 +- .../src/components/header/HeaderSearch.vue | 4 +- .../src/components/header/HeaderTheme.vue | 9 +- .../src/components/header/NavContent.vue | 18 +-- .../src/components/markdown/MarkdownImage.vue | 13 +- .../src/components/markdown/MarkdownTitle.vue | 79 ++++----- app/.vitepress/src/layouts/LayoutDoc.vue | 7 +- app/.vitepress/src/utils/element.ts | 17 ++ app/.vitepress/src/views/home/TheHome.vue | 5 +- .../views/home/components/HomeSectionCard.vue | 29 +++- app/vite.config.ts | 5 +- package.json | 1 + scripts/dev.js | 33 ++++ scripts/gen-toc.js | 4 +- scripts/merge.js | 3 +- scripts/pre-dev.js | 23 ++- scripts/utils/common.js | 2 +- tsconfig.node.json | 15 +- 41 files changed, 558 insertions(+), 280 deletions(-) create mode 100644 app/.vitepress/plugins/replace-url-plugin.ts create mode 100644 app/.vitepress/src/assets/style/theme/icon.scss create mode 100644 app/.vitepress/src/assets/svg-icons/icon-locale.svg create mode 100644 scripts/dev.js diff --git a/app/.vitepress/plugins/replace-url-plugin.ts b/app/.vitepress/plugins/replace-url-plugin.ts new file mode 100644 index 0000000..f753cf2 --- /dev/null +++ b/app/.vitepress/plugins/replace-url-plugin.ts @@ -0,0 +1,51 @@ +import { Plugin } from 'vitepress'; + +const OPENEULER_ORG_URL = 'https://www.openeuler.org'; +const OPENEULER_ATOM_URL = 'https://www.openeuler.openatom.cn'; + +export default function replaceUrlPlugin(): Plugin { + let envVar: string; + let sourceUrl: string | null; + + return { + name: 'replace-url', + enforce: 'post', + + configResolved(resolvedConfig) { + envVar = resolvedConfig.env.VITE_MAIN_DOMAIN_URL; + + if (!envVar) { + console.error( + '[replaceUrlPlugin] 未设置 VITE_MAIN_DOMAIN_URL 环境变量' + ); + return; + } + + if (envVar === OPENEULER_ATOM_URL) { + sourceUrl = OPENEULER_ORG_URL; + } else if (envVar === OPENEULER_ORG_URL) { + sourceUrl = OPENEULER_ATOM_URL; + } else { + console.warn( + `[replaceUrlPlugin] 未知的 VITE_MAIN_DOMAIN_URL 值: ${envVar},不执行替换` + ); + sourceUrl = null; + } + }, + + transform(code, id) { + const SUPPORTED_FILE_TYPES = /\.(html|md|vue|js|ts|jsx|tsx)$/; + + if ( + sourceUrl && + SUPPORTED_FILE_TYPES.test(id) && + !id.includes('node_modules') + ) { + const regex = new RegExp(sourceUrl, 'g'); + return code.replace(regex, envVar); + } + + return code; + }, + }; +} diff --git a/app/.vitepress/src/assets/style/theme/dropdown.scss b/app/.vitepress/src/assets/style/theme/dropdown.scss index 067a83b..ac9b81e 100644 --- a/app/.vitepress/src/assets/style/theme/dropdown.scss +++ b/app/.vitepress/src/assets/style/theme/dropdown.scss @@ -1,3 +1,7 @@ .o-dropdown-list { --dropdown-list-radius: 4px; } + +.o-dropdown-item { + --dropdown-item-color-hover: var(--dropdown-item-color); +} \ No newline at end of file diff --git a/app/.vitepress/src/assets/style/theme/icon.scss b/app/.vitepress/src/assets/style/theme/icon.scss new file mode 100644 index 0000000..780b2b3 --- /dev/null +++ b/app/.vitepress/src/assets/style/theme/icon.scss @@ -0,0 +1,7 @@ +.o-icon { + svg { + width: 1em; + height: 1em; + } +} + diff --git a/app/.vitepress/src/assets/style/theme/index.scss b/app/.vitepress/src/assets/style/theme/index.scss index 424bea6..8c939e6 100644 --- a/app/.vitepress/src/assets/style/theme/index.scss +++ b/app/.vitepress/src/assets/style/theme/index.scss @@ -15,3 +15,4 @@ @use './textarea.scss' as *; @use './link.scss' as *; @use './breadcrumb.scss' as *; +@use './icon.scss' as *; diff --git a/app/.vitepress/src/assets/svg-icons/icon-header-moon.svg b/app/.vitepress/src/assets/svg-icons/icon-header-moon.svg index 0ea8cc4..bc76468 100644 --- a/app/.vitepress/src/assets/svg-icons/icon-header-moon.svg +++ b/app/.vitepress/src/assets/svg-icons/icon-header-moon.svg @@ -1,3 +1,3 @@ - - - + + + \ No newline at end of file diff --git a/app/.vitepress/src/assets/svg-icons/icon-header-person.svg b/app/.vitepress/src/assets/svg-icons/icon-header-person.svg index ea47e9c..e5e7cd0 100644 --- a/app/.vitepress/src/assets/svg-icons/icon-header-person.svg +++ b/app/.vitepress/src/assets/svg-icons/icon-header-person.svg @@ -1,3 +1,3 @@ - - - + + + \ No newline at end of file diff --git a/app/.vitepress/src/assets/svg-icons/icon-locale.svg b/app/.vitepress/src/assets/svg-icons/icon-locale.svg new file mode 100644 index 0000000..6ff893f --- /dev/null +++ b/app/.vitepress/src/assets/svg-icons/icon-locale.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/.vitepress/src/assets/svg-icons/icon-sun-outline.svg b/app/.vitepress/src/assets/svg-icons/icon-sun-outline.svg index 5bfc689..d6be0b8 100644 --- a/app/.vitepress/src/assets/svg-icons/icon-sun-outline.svg +++ b/app/.vitepress/src/assets/svg-icons/icon-sun-outline.svg @@ -1,3 +1,3 @@ - - - + + + \ No newline at end of file diff --git a/app/.vitepress/src/components/FloatingButton.vue b/app/.vitepress/src/components/FloatingButton.vue index bd9942d..942be7c 100644 --- a/app/.vitepress/src/components/FloatingButton.vue +++ b/app/.vitepress/src/components/FloatingButton.vue @@ -93,7 +93,7 @@ onMounted(() => { :visible="dialogVisible" :phone-half-full="true" :style="{ '--dlg-head-padding': '16px 24px 0', '--dlg-body-padding': '24px 24px 16px', '--dlg-padding-body-top': '12px', '--dlg-radius': '4px 4px 0 0' }" - class="feedback-mb-dialog" + :scroller="false" @change="change" > diff --git a/app/.vitepress/src/components/FloatingButtonDocs.vue b/app/.vitepress/src/components/FloatingButtonDocs.vue index 61f6f1f..0d835c0 100644 --- a/app/.vitepress/src/components/FloatingButtonDocs.vue +++ b/app/.vitepress/src/components/FloatingButtonDocs.vue @@ -443,6 +443,9 @@ const submitArticleFeedback = () => { } diff --git a/app/.vitepress/src/components/ImgZoomDrag.vue b/app/.vitepress/src/components/ImgZoomDrag.vue index 2b1dada..d7392e9 100644 --- a/app/.vitepress/src/components/ImgZoomDrag.vue +++ b/app/.vitepress/src/components/ImgZoomDrag.vue @@ -1,5 +1,5 @@ diff --git a/app/.vitepress/src/components/header/HeaderNav.vue b/app/.vitepress/src/components/header/HeaderNav.vue index f70173a..cfb4ab4 100644 --- a/app/.vitepress/src/components/header/HeaderNav.vue +++ b/app/.vitepress/src/components/header/HeaderNav.vue @@ -442,8 +442,7 @@ const reportNavClick = (path: string[]) => { } .icon { - height: 16px; - width: 16px; + font-size: 16px; padding-left: 6px; } } diff --git a/app/.vitepress/src/components/header/HeaderNavMoblie.vue b/app/.vitepress/src/components/header/HeaderNavMoblie.vue index 8dced3f..604ae85 100644 --- a/app/.vitepress/src/components/header/HeaderNavMoblie.vue +++ b/app/.vitepress/src/components/header/HeaderNavMoblie.vue @@ -319,8 +319,7 @@ const linkClick = () => { margin: var(--o-gap-4) 0; .icon { - height: 16px; - width: 16px; + font-size: 16px; margin-left: var(--o-gap-2); } } @@ -337,7 +336,7 @@ const linkClick = () => { } .icon { - width: 16px; + font-size: 16px; margin-left: var(--o-gap-2); } } diff --git a/app/.vitepress/src/components/header/HeaderSearch.vue b/app/.vitepress/src/components/header/HeaderSearch.vue index 646ec3e..f9b4264 100644 --- a/app/.vitepress/src/components/header/HeaderSearch.vue +++ b/app/.vitepress/src/components/header/HeaderSearch.vue @@ -401,9 +401,7 @@ const closeSearch = () => { color: var(--o-color-info1); padding-top: var(--o-gap-1); cursor: pointer; - svg { - width: var(--o-icon_size-s); - } + font-size: var(--o-icon_size-s); } } } diff --git a/app/.vitepress/src/components/header/HeaderTheme.vue b/app/.vitepress/src/components/header/HeaderTheme.vue index b4644a0..c251012 100644 --- a/app/.vitepress/src/components/header/HeaderTheme.vue +++ b/app/.vitepress/src/components/header/HeaderTheme.vue @@ -84,11 +84,14 @@ watch( .theme-box-pc { display: flex; align-items: center; + height: 100%; cursor: pointer; color: var(--o-color-info1); - .icon svg { - width: var(--o-icon_size-s); - height: var(--o-icon_size-s); + .icon { + font-size: var(--o-icon_size-m); + @include hover { + color: var(--o-color-primary1); + } } @include respond-to('<=pad_v') { display: none; diff --git a/app/.vitepress/src/components/header/NavContent.vue b/app/.vitepress/src/components/header/NavContent.vue index e4eff7c..9701b65 100644 --- a/app/.vitepress/src/components/header/NavContent.vue +++ b/app/.vitepress/src/components/header/NavContent.vue @@ -55,8 +55,8 @@ const onClickNavLink = (item?: any) => { @link-click="linkClick" > {{ subItem.NAME }} - - + + { @link-click="linkClick" > {{ system.NAME }} - - + + @@ -101,8 +101,8 @@ const onClickNavLink = (item?: any) => { @link-click="linkClick" > {{ subItem.NAME }} - - + + { @link-click="linkClick" > {{ system.NAME }} - - + + @@ -153,7 +153,7 @@ const onClickNavLink = (item?: any) => { } .icon { - width: var(--o-icon_size-xs); + font-size: var(--o-icon_size-xs); margin-left: var(--o-gap-2); } diff --git a/app/.vitepress/src/components/markdown/MarkdownImage.vue b/app/.vitepress/src/components/markdown/MarkdownImage.vue index 801159f..72a978b 100644 --- a/app/.vitepress/src/components/markdown/MarkdownImage.vue +++ b/app/.vitepress/src/components/markdown/MarkdownImage.vue @@ -136,20 +136,23 @@ const onCloseZoom = () => { } .close-btn { + z-index: 2; position: absolute; + top: 12px; + right: 12px; + display: flex; + align-items: center; + justify-content: center; width: 32px; height: 32px; background-color: rgba(var(--o-black), 0.4); border: 1px solid rgba(var(--o-black), 0.1); border-radius: var(--o-radius-xs); - z-index: 2; - top: 12px; - right: 12px; cursor: pointer; + .icon { color: var(--o-color-white); - margin-top: 3px; - margin-left: 3px; + font-size: 24px; } @include respond-to('phone') { diff --git a/app/.vitepress/src/components/markdown/MarkdownTitle.vue b/app/.vitepress/src/components/markdown/MarkdownTitle.vue index c3fbe26..d1af3dc 100644 --- a/app/.vitepress/src/components/markdown/MarkdownTitle.vue +++ b/app/.vitepress/src/components/markdown/MarkdownTitle.vue @@ -69,21 +69,23 @@ const onClickCopyLink = (e: MouseEvent) => { @@ -91,61 +93,50 @@ const onClickCopyLink = (e: MouseEvent) => { .title-wrap { position: relative; display: inline-flex; - align-items: center; cursor: pointer; + .title { + flex: 1; + display: inline; + overflow-wrap: break-word; + word-wrap: break-word; + word-break: normal; + } + span { display: inline-flex; } - .o-icon { + .pin, + .copy-link { @include h2; - - svg { - width: 24px; - height: 24px; - - @include respond-to('laptop') { - width: 20px; - height: 20px; - } - @include respond-to('pad_h') { - width: 18px; - height: 18px; - } - @include respond-to('pad_v') { - width: 18px; - height: 18px; - } - @include respond-to('phone') { - width: 16px; - height: 16px; - } - } } - .link { - display: inline-flex; - align-items: center; + .copy-link-wrap { + position: relative; + width: 1em; + height: 1em; + margin-left: 6px; + clear: both; - @include hover { - color: var(--o-color-primary1); + @include respond-to('<=laptop') { + margin-left: 4px; } } .copy-link { - margin-left: 6px; + position: absolute; + top: 2px; - @include respond-to('<=laptop') { - margin-left: 4px; + @include hover { + color: var(--o-color-primary1); } } .pin { position: absolute; left: -28px; - top: 50%; - transform: translateY(-50%); + top: 4px; padding-right: 4px; transition: opacity var(--o-duration-l) var(--o-easing-standard-in); opacity: 0; diff --git a/app/.vitepress/src/layouts/LayoutDoc.vue b/app/.vitepress/src/layouts/LayoutDoc.vue index d430156..5c209e8 100644 --- a/app/.vitepress/src/layouts/LayoutDoc.vue +++ b/app/.vitepress/src/layouts/LayoutDoc.vue @@ -78,7 +78,6 @@ const updateExpandedKeys = () => { }; watch(lang, () => { - console.log(lang.value); setTimeout(updateExpandedKeys, 300); }) @@ -413,7 +412,7 @@ onUnmounted(() => {