diff --git a/app/.vitepress/config.ts b/app/.vitepress/config.ts index c594d06d9844ce4a65c3faba76840813f0745623..15183f15915a69787ba5042b7312f937943ff710 100644 --- a/app/.vitepress/config.ts +++ b/app/.vitepress/config.ts @@ -58,6 +58,28 @@ export default { dark: 'dark-plus', }, config: (md: Markdown) => { + // 处理须知/说明/警告/注意 + md.core.ruler.before('normalize', 'replace-old-alerts', (state) => { + const src = state.src + .replace(/> *!\[\]\(.*?\/icon-note\.gif\) *\**([^\*\n\r]+)\**/g, (_, $1) => { + return `> [!NOTE]${$1}`; + }) + .replace(/> *!\[\]\(.*?\/icon-notice\.gif\) *\**([^\*\n\r]+)\**/g, (_, $1) => { + return `> [!TIP]${$1}`; + }) + .replace(/> *!\[\]\(.*?\/icon-warning\.gif\) *\**([^\*\n\r]+)\**/g, (_, $1) => { + return `> [!WARNING]${$1}`; + }) + .replace(/> *!\[\]\(.*?\/icon-caution\.gif\) *\**([^\*\n\r]+)\**/g, (_, $1) => { + return `> [!CAUTION]${$1}`; + }); + + state.src = src; + if (state.env.content) { + state.env.content = src; + } + }); + md.renderer.rules.code_inline = (tokens, idx) => { const content = tokens[idx].content; // 转义 diff --git a/app/.vitepress/plugins/replace-url-plugin.ts b/app/.vitepress/plugins/replace-url-plugin.ts new file mode 100644 index 0000000000000000000000000000000000000000..f753cf2f8d6af4b2e3bd74ef4b3fca91f1cf5bfc --- /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 067a83b162e997ea13741446cbedde87576b395c..ac9b81e9b01231c14cedd13fd224745034844514 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 0000000000000000000000000000000000000000..780b2b37759c33798e18488c4209a27279285769 --- /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 424bea698da2c6e531e0be3c5cd157af94a7e4fa..8c939e640f3c471a5a90bb4308867ab22a563623 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 0ea8cc4417ed9603faa682be7ed03209e61d0e56..bc76468e8d378e03acb4167622e30fec1bc6e268 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 ea47e9ca566d23715ca537cb32ba7586f7914c38..e5e7cd0f16f85df584b3edeaa48f074b42624547 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 0000000000000000000000000000000000000000..6ff893f84985e010d6ef69abc29442c6c536ff87 --- /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 5bfc68965118ffe7ce1238cca5bf833240cea82d..d6be0b8ae7ffe62e71d1f3c794ddf88ce97392eb 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 bd9942d4b126eebc4349d58707cffe6b1ad8a158..e27d68e3b297af2cdcd6e2823e1594ecf66b42b2 100644 --- a/app/.vitepress/src/components/FloatingButton.vue +++ b/app/.vitepress/src/components/FloatingButton.vue @@ -72,7 +72,7 @@ onMounted(() => {
- @@ -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" > @@ -200,4 +200,23 @@ onMounted(() => { } } } + +.container { + display: flex; + flex-direction: column; + padding: 12px; + background-color: var(--o-color-fill2); + border-radius: var(--o-radius-xs); + box-shadow: var(--o-shadow-2); +} + +.back-top { + margin-top: 12px; + color: var(--o-color-info1); + cursor: pointer; +} + +.icon-top { + font-size: var(--o-font_size-h2); +} diff --git a/app/.vitepress/src/components/FloatingButtonDocs.vue b/app/.vitepress/src/components/FloatingButtonDocs.vue index 61f6f1fed70f8be7f493ae282e45bbf99a4c12a9..0d835c01cf46e1c39ce35bf4d13b05afbd5b4c3b 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 2b1dadaefc246630cf5bd6e87ea9bcb61b8b342a..d7392e962b9323a7ea77ff4c51ab2962b9c51058 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 f70173a5b3de0b09d6e91a9cd7e8cb3e8620b76a..cfb4ab41e08842e2754dd869dbe8f1fac6954ead 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 8dced3fc8dc5b342e99ef30c7b636c37d5521d75..604ae8560f3001e965a90505cfd9e7786870e46c 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 646ec3e194e80906c7b7d07c0c8c997c8edbdc22..f9b4264fffa47cea7682a21d22f94909356df67e 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 b4644a02ab6225b26db17fd22a958aaa424f5d31..c2510125fc7eece98a7c5d0d720a42c39b793858 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 e4eff7c132db74a3c19f969c61582c478eb9ca28..9701b659312d57f31221b1170e7345cb69cdaca6 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 801159fa371f6d77e7f82c0611174085a678b3af..72a978b7f0c4f54650332a7e5ddd2ea30ff93b58 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 c3fbe265c00873616c5dab64e94786684e073a1f..d1af3dc76eb330f833f350511c5b298e48ecd136 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/i18n/feedback/feedback-zh.ts b/app/.vitepress/src/i18n/feedback/feedback-zh.ts index 840a99c8c39940fe6cd4ebef3006a1f83f2731cc..24bec6a7d20ad0c36f3af202532089b0ef8d47d9 100644 --- a/app/.vitepress/src/i18n/feedback/feedback-zh.ts +++ b/app/.vitepress/src/i18n/feedback/feedback-zh.ts @@ -13,7 +13,7 @@ export default { recommendTip1: '请输入您不太推荐的原因', recommendTip2: '改进哪些方面会让您更愿意推荐?', recommendTip3: '请输入您推荐的原因', - submitBusy: '您的提交过于频繁,请稍后再试', + submitBusy: '提交过于频繁,请稍后再试', feedbackFailed: '反馈失败', issueBack: '问题反馈', issueBackDecs: '获得技术团队的快速支持', diff --git a/app/.vitepress/src/layouts/LayoutDoc.vue b/app/.vitepress/src/layouts/LayoutDoc.vue index d430156b3f7b7f4023101fdde5e18f5761a34863..5c209e830f529f6f368b419c5e12bb2ac9e8753d 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(() => {