From ad4c34918c7b1ecb9a5b9dd9fc0caff6d9368c91 Mon Sep 17 00:00:00 2001 From: ailoooong Date: Tue, 6 Aug 2024 11:03:15 +0800 Subject: [PATCH 1/8] feat: dark --- components.d.ts | 8 +- src/App.vue | 2 +- src/assets/email.svg | 3 +- src/assets/icon-copy.svg | 2 +- src/assets/icon/icon-os.svg | 4 +- src/assets/icon/icon-outlink.svg | 2 +- src/assets/icon/openhpc4.svg | 2 +- src/assets/icon/openhpc5.svg | 2 +- src/assets/logo_dark.svg | 29 ------- src/assets/openeuler-logo-dark.svg | 1 + src/assets/style/category/detail/index.scss | 82 ++----------------- src/assets/style/element-plus/pagination.scss | 7 ++ src/assets/style/element-plus/popper.scss | 2 + src/assets/style/element-plus/table.scss | 6 ++ src/assets/style/global.scss | 5 +- src/assets/style/markdown.scss | 12 +-- src/assets/style/theme/card.scss | 9 +- src/assets/style/theme/dark.token.css | 6 +- .../style/theme/default-light.token.css | 2 +- src/assets/style/theme/dialog.scss | 3 + src/assets/style/theme/index.scss | 1 + src/assets/style/theme/rate.scss | 4 + src/assets/style/theme/tab.scss | 72 ++++++++++++++++ src/assets/svg-icons/icon-copy.svg | 2 +- src/assets/svg-icons/icon-moon.svg | 4 +- src/assets/svg-icons/icon-sun.svg | 4 +- src/assets/svg-icons/icon-time-order.svg | 4 +- src/assets/svg-icons/icon-user.svg | 4 +- src/components/AppBanner.vue | 6 +- src/components/AppFeedback.vue | 4 - src/components/OCardItem.vue | 70 +++++++--------- src/components/detail/DetailAside.vue | 7 +- src/components/detail/DetailHeader.vue | 14 ++-- src/components/detail/DetailInstall.vue | 3 +- .../feedbackHistory/FeedbackHistory.vue | 7 +- src/components/filter/FilterHeader.vue | 27 +++--- src/components/filter/FilterOrder.vue | 37 +++++++-- src/components/{ => header}/AppHeader.vue | 15 ++-- src/components/{ => header}/AppLogin.vue | 12 ++- src/components/{ => header}/HeaderNav.vue | 0 src/components/header/HeaderTheme.vue | 35 ++++++++ src/composables/useTheme.ts | 53 ++++++++++++ src/stores/common.ts | 7 ++ src/views/home/HomeField.vue | 3 +- src/views/home/HomeHeader.vue | 9 +- src/views/home/HomeNews.vue | 58 +++++-------- src/views/home/HomeVersion.vue | 4 +- src/views/solution/TheOpenHPC.vue | 4 + src/views/solution/TheOpenStack.vue | 7 ++ 49 files changed, 396 insertions(+), 270 deletions(-) delete mode 100644 src/assets/logo_dark.svg create mode 100644 src/assets/openeuler-logo-dark.svg create mode 100644 src/assets/style/theme/rate.scss rename src/components/{ => header}/AppHeader.vue (90%) rename src/components/{ => header}/AppLogin.vue (86%) rename src/components/{ => header}/HeaderNav.vue (100%) create mode 100644 src/components/header/HeaderTheme.vue create mode 100644 src/composables/useTheme.ts diff --git a/components.d.ts b/components.d.ts index c944f14..8d6c5ba 100644 --- a/components.d.ts +++ b/components.d.ts @@ -11,9 +11,9 @@ declare module 'vue' { AppBreadcrumb: typeof import('./src/components/AppBreadcrumb.vue')['default'] AppFeedback: typeof import('./src/components/AppFeedback.vue')['default'] AppFooter: typeof import('./src/components/AppFooter.vue')['default'] - AppHeader: typeof import('./src/components/AppHeader.vue')['default'] + AppHeader: typeof import('./src/components/header/AppHeader.vue')['default'] AppLoading: typeof import('./src/components/AppLoading.vue')['default'] - AppLogin: typeof import('./src/components/AppLogin.vue')['default'] + AppLogin: typeof import('./src/components/header/AppLogin.vue')['default'] AppPagination: typeof import('./src/components/AppPagination.vue')['default'] AppSection: typeof import('./src/components/AppSection.vue')['default'] AppTableToggle: typeof import('./src/components/AppTableToggle.vue')['default'] @@ -34,8 +34,10 @@ declare module 'vue' { FilterItemSkeleton: typeof import('./src/components/skeleton/FilterItemSkeleton.vue')['default'] FilterOrder: typeof import('./src/components/filter/FilterOrder.vue')['default'] FilterRadio: typeof import('./src/components/filter/FilterRadio.vue')['default'] - HeaderNav: typeof import('./src/components/HeaderNav.vue')['default'] + HeaderNav: typeof import('./src/components/header/HeaderNav.vue')['default'] + HeaderTheme: typeof import('./src/components/header/HeaderTheme.vue')['default'] HomeSkeleton: typeof import('./src/components/skeleton/HomeSkeleton.vue')['default'] + ItemTheme: typeof import('./src/components/header/ItemTheme.vue')['default'] OCardItem: typeof import('./src/components/OCardItem.vue')['default'] OCardItemSkeleton: typeof import('./src/components/skeleton/OCardItemSkeleton.vue')['default'] OCodeCopy: typeof import('./src/components/OCodeCopy.vue')['default'] diff --git a/src/App.vue b/src/App.vue index d569387..2284fbd 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,7 +9,7 @@ import enUS from '@opensig/opendesign/es/locale/lang/en-us'; import { useLangStore, useViewStore } from '@/stores/common'; import { useLocale } from '@/composables/useLocale'; -import AppHeader from '@/components/AppHeader.vue'; +import AppHeader from '@/components/header/AppHeader.vue'; import AppFooter from '@/components/AppFooter.vue'; const langStore = useLangStore(); diff --git a/src/assets/email.svg b/src/assets/email.svg index efdb177..aa010e9 100644 --- a/src/assets/email.svg +++ b/src/assets/email.svg @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/icon-copy.svg b/src/assets/icon-copy.svg index 705949c..c340cd2 100644 --- a/src/assets/icon-copy.svg +++ b/src/assets/icon-copy.svg @@ -1,3 +1,3 @@ - + diff --git a/src/assets/icon/icon-os.svg b/src/assets/icon/icon-os.svg index bfd0d10..50d95ad 100644 --- a/src/assets/icon/icon-os.svg +++ b/src/assets/icon/icon-os.svg @@ -1,5 +1,5 @@ - - + + diff --git a/src/assets/icon/icon-outlink.svg b/src/assets/icon/icon-outlink.svg index efd14b5..b284bea 100644 --- a/src/assets/icon/icon-outlink.svg +++ b/src/assets/icon/icon-outlink.svg @@ -1,4 +1,4 @@ - + diff --git a/src/assets/icon/openhpc4.svg b/src/assets/icon/openhpc4.svg index 2deb47d..18627d3 100644 --- a/src/assets/icon/openhpc4.svg +++ b/src/assets/icon/openhpc4.svg @@ -1,4 +1,4 @@ - + diff --git a/src/assets/icon/openhpc5.svg b/src/assets/icon/openhpc5.svg index 238aa83..b92dc2a 100644 --- a/src/assets/icon/openhpc5.svg +++ b/src/assets/icon/openhpc5.svg @@ -1,5 +1,5 @@ - + diff --git a/src/assets/logo_dark.svg b/src/assets/logo_dark.svg deleted file mode 100644 index c13a22f..0000000 --- a/src/assets/logo_dark.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - 切片 - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/assets/openeuler-logo-dark.svg b/src/assets/openeuler-logo-dark.svg new file mode 100644 index 0000000..2f5eed2 --- /dev/null +++ b/src/assets/openeuler-logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/style/category/detail/index.scss b/src/assets/style/category/detail/index.scss index 9c54d45..f3425fb 100644 --- a/src/assets/style/category/detail/index.scss +++ b/src/assets/style/category/detail/index.scss @@ -26,76 +26,6 @@ margin-bottom: 16px; } } -:deep(.domain-tabs) { - padding-top: 26px; - &.min { - > .o-tab-head { - .o-tab-nav-anchor { - display: none; - } - - .o-tab-nav-active { - color: var(--o-color-info1); - cursor: default; - padding: 0; - } - } - } - .o-tab-head { - display: block !important; - } - .o-tab-navs { - --tab-nav-justify: left; - margin-bottom: 24px; - } - .o-table { - word-break: break-word; - --table-edge-padding: 24px; - .arch, - .appVer { - width: 250px; - } - tbody tr:hover { - background: none; - } - } - - // 应用镜像样式 - &.tabs-switch { - .o-tab-nav-list { - background: #ededf0; - border-radius: 8px; - height: 40px; - padding: 4px; - .o-tab-nav { - margin: 0 !important; - position: relative; - padding: 2px 12px; - z-index: 3; - } - } - .o-tab-nav-anchor { - top: 0; - padding: 4px 0; - .o-tab-nav-anchor-line { - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); - border-radius: 4px; - height: 100%; - background: var(--o-color-fill2); - } - } - } - &.tabs-one { - .o-tab-nav-active { - color: var(--o-color-info1); - cursor: default; - padding: 0; - } - .o-tab-nav-anchor { - display: none; - } - } -} .code-box { position: relative; @@ -109,10 +39,10 @@ color: var(--o-color-info1); display: flex; align-items: top; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); - border-right: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid var(--o-color-control4); + border-right: 1px solid var(--o-color-control4); &:first-child { - border-top: 1px solid rgba(0, 0, 0, 0.1); + border-top: 1px solid var(--o-color-control4); } .label { background: rgba(0, 47, 167, 0.05); @@ -185,15 +115,17 @@ } .sp { margin: 32px 0 24px; - @include h3; + color: var(--o-color-info1); font-weight: 500; + @include h3; } .title { display: flex; justify-content: space-between; align-items: center; - @include h3; font-weight: 500; + color: var(--o-color-info1); + @include h3; } .ver { diff --git a/src/assets/style/element-plus/pagination.scss b/src/assets/style/element-plus/pagination.scss index 21ce7fc..138f9af 100644 --- a/src/assets/style/element-plus/pagination.scss +++ b/src/assets/style/element-plus/pagination.scss @@ -1,7 +1,11 @@ .el-pagination { --el-pagination-border-radius: 4px; + --el-pagination-button-bg-color: var(--o-color-fill2); + --el-disabled-bg-color: var(--o-color-fill2); + --el-pagination-button-color: var(--o-color-info1); .el-pager { li { + --el-pagination-button-color: var(--o-color-info1); &:hover { background-color: var(--o-color-primary2); color: var(--o-color-info1-inverse); @@ -28,6 +32,9 @@ .el-input__wrapper { box-shadow: none !important; border: 1px solid var(--o-color-control1); + background-color: var(--o-color-fill2); + --el-disabled-bg-color: var(--o-color-fill2); + --el-pagination-button-color: var(--o-color-info1); &:hover { border-color: var(--o-color-control2); } diff --git a/src/assets/style/element-plus/popper.scss b/src/assets/style/element-plus/popper.scss index 0da74ca..bdbe23c 100644 --- a/src/assets/style/element-plus/popper.scss +++ b/src/assets/style/element-plus/popper.scss @@ -1,4 +1,6 @@ .el-popper { + --el-bg-color-overlay: var(--o-color-fill2); + --el-border-color-light: var(--o-color-control1); margin: -7px 0 0; .el-popper__arrow { display: none; diff --git a/src/assets/style/element-plus/table.scss b/src/assets/style/element-plus/table.scss index 5c4987d..335bb95 100644 --- a/src/assets/style/element-plus/table.scss +++ b/src/assets/style/element-plus/table.scss @@ -2,7 +2,13 @@ #app .el-table { --el-table-header-bg-color: var(--o-color-control3-light); --el-table-border-color: var(--o-color-control4); + --el-table-tr-bg-color: var(--o-color-fill2); + --el-table-expanded-cell-bg-color: var(--o-color-fill2); + --el-table-bg-color: var(--o-color-fill2); + --el-table-row-hover-bg-color: var(--o-color-control2-light); border-radius: 4px; + --el-table-border: 1px solid var(--o-color-control4); + border-spacing: 0; @include text1; color: var(--o-color-info1); .el-table__inner-wrapper::before { diff --git a/src/assets/style/global.scss b/src/assets/style/global.scss index a4447dc..63a5e0a 100644 --- a/src/assets/style/global.scss +++ b/src/assets/style/global.scss @@ -7,11 +7,14 @@ html { --o-radius_control-m: 4px; --o-radius_control-l: 4px; - --pkg-bg: rgba(var(--o-kleinblue-6), 0.05); + --pkg-bg: #f2f4fb; --el-box-shadow-light: var(--o-shadow-2); --el-color-primary: var(--o-color-primary1); } +[data-o-theme='dark'] { + --pkg-bg: #252831; +} // tag .tags-box { diff --git a/src/assets/style/markdown.scss b/src/assets/style/markdown.scss index 78a1e7e..186115a 100644 --- a/src/assets/style/markdown.scss +++ b/src/assets/style/markdown.scss @@ -1,6 +1,8 @@ @use 'github-markdown-css/github-markdown-light.css' as *; .markdown-body { + background: var(--o-color-fill2); + color: var(--o-color-info1); details { display: block !important; } @@ -109,12 +111,10 @@ .pre-copy { cursor: pointer; position: absolute; - top: 0; - right: 0; - background-color: var(--o-color-fill1); + top: 12px; + right: 12px; + background-color: var(--pkg-bg); opacity: 1; - transition: all var(--o-duration-m1) var(--o-easing-standard-in); - padding: 12px 12px 0 0; .icon-copy { display: block; width: 24px; @@ -153,7 +153,7 @@ content: counter(num); position: absolute; border-radius: 50%; - color: var(--o-color-info1-inverse); + color: var(--o-color-white); @include text1; text-align: center; top: 0; diff --git a/src/assets/style/theme/card.scss b/src/assets/style/theme/card.scss index 4444e09..6028429 100644 --- a/src/assets/style/theme/card.scss +++ b/src/assets/style/theme/card.scss @@ -1,8 +1,7 @@ +@use '../mixin/common.scss' as *; .o-card { --card-cover-radius: 0; --card-radius: 0; - --card-shadow-hover: 0 2px 24px rgba(var(--o-kleinblue-10), 0.15); - --card-shadow-active: 0 2px 24px rgba(var(--o-kleinblue-10), 0.15); } .o-card-cover-h { --card-cover-padding: 0; @@ -10,3 +9,9 @@ a.o-card:hover .o-card-title { color: var(--o-color-primary1); } + +@include in-dark { + .o-figure img { + @include img-in-dark; + } +} diff --git a/src/assets/style/theme/dark.token.css b/src/assets/style/theme/dark.token.css index ae339c5..f20b784 100644 --- a/src/assets/style/theme/dark.token.css +++ b/src/assets/style/theme/dark.token.css @@ -48,21 +48,21 @@ * @group kleinblue * @description */ - --o-kleinblue-5: 55, 91, 184; + --o-kleinblue-5: 56, 94, 191; /** * @name * @type palette * @group kleinblue * @description */ - --o-kleinblue-6: 72, 116, 220; + --o-kleinblue-6: 77, 124, 235; /** * @name * @type palette * @group kleinblue * @description */ - --o-kleinblue-7: 105, 143, 227; + --o-kleinblue-7: 107, 146, 232; /** * @name * @type palette diff --git a/src/assets/style/theme/default-light.token.css b/src/assets/style/theme/default-light.token.css index c8b7d6c..cbe733b 100644 --- a/src/assets/style/theme/default-light.token.css +++ b/src/assets/style/theme/default-light.token.css @@ -1666,7 +1666,7 @@ * @group shadow * @description 用于卡片悬浮阴影 */ - --o-shadow-2: 0 2px 24px rgba(var(--o-mixedgray-9), 0.15); + --o-shadow-2: 0 2px 24px rgba(var(--o-mixedgray-10), 0.15); /** * @name 阴影3 * @type shadow diff --git a/src/assets/style/theme/dialog.scss b/src/assets/style/theme/dialog.scss index b967176..d387409 100644 --- a/src/assets/style/theme/dialog.scss +++ b/src/assets/style/theme/dialog.scss @@ -2,6 +2,9 @@ @use '../mixin/font.scss' as *; // 屏蔽loading 遮罩 .o-layer { + .o-dlg-header { + color: var(--o-color-info1); + } &.o-loading { --layer-mask: var(--o-color-fill1); --loading-mask-icon-color: var(--o-color-info1); diff --git a/src/assets/style/theme/index.scss b/src/assets/style/theme/index.scss index d7d93fa..3aaaeb1 100644 --- a/src/assets/style/theme/index.scss +++ b/src/assets/style/theme/index.scss @@ -10,3 +10,4 @@ @use './tag.scss' as *; @use './popup.scss' as *; @use './tab.scss' as *; +@use './rate.scss' as *; diff --git a/src/assets/style/theme/rate.scss b/src/assets/style/theme/rate.scss new file mode 100644 index 0000000..24ac53f --- /dev/null +++ b/src/assets/style/theme/rate.scss @@ -0,0 +1,4 @@ +.o-rate { + --rate-color: var(--o-color-control3); + --rate-size: 24px; +} diff --git a/src/assets/style/theme/tab.scss b/src/assets/style/theme/tab.scss index 319f4ca..d35b56e 100644 --- a/src/assets/style/theme/tab.scss +++ b/src/assets/style/theme/tab.scss @@ -1,4 +1,5 @@ .field-tabs { + --tab-nav-divider: 1px solid var(--o-color-control4); > .o-tab-head > .o-tab-navs { max-width: var(--layout-content-max-width); padding-left: var(--layout-content-padding); @@ -6,3 +7,74 @@ margin: 0 auto; } } + +.domain-tabs { + padding-top: 26px; + &.min { + > .o-tab-head { + .o-tab-nav-anchor { + display: none; + } + + .o-tab-nav-active { + color: var(--o-color-info1); + cursor: default; + padding: 0; + } + } + } + .o-tab-head { + display: block !important; + } + .o-tab-navs { + --tab-nav-justify: left; + margin-bottom: 24px; + } + .o-table { + word-break: break-word; + --table-edge-padding: 24px; + .arch, + .appVer { + width: 250px; + } + tbody tr:hover { + background: none; + } + } + + // 应用镜像样式 + &.tabs-switch { + .o-tab-nav-list { + background: var(--o-color-fill1); + border-radius: 8px; + height: 40px; + padding: 4px; + .o-tab-nav { + margin: 0 !important; + position: relative; + padding: 2px 12px; + z-index: 3; + } + } + .o-tab-nav-anchor { + top: 0; + padding: 4px 0; + .o-tab-nav-anchor-line { + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + height: 100%; + background: var(--o-color-fill2); + } + } + } + &.tabs-one { + .o-tab-nav-active { + color: var(--o-color-info1); + cursor: default; + padding: 0; + } + .o-tab-nav-anchor { + display: none; + } + } +} diff --git a/src/assets/svg-icons/icon-copy.svg b/src/assets/svg-icons/icon-copy.svg index 705949c..c340cd2 100644 --- a/src/assets/svg-icons/icon-copy.svg +++ b/src/assets/svg-icons/icon-copy.svg @@ -1,3 +1,3 @@ - + diff --git a/src/assets/svg-icons/icon-moon.svg b/src/assets/svg-icons/icon-moon.svg index 659890a..e098d21 100644 --- a/src/assets/svg-icons/icon-moon.svg +++ b/src/assets/svg-icons/icon-moon.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/assets/svg-icons/icon-sun.svg b/src/assets/svg-icons/icon-sun.svg index d389607..5bfc689 100644 --- a/src/assets/svg-icons/icon-sun.svg +++ b/src/assets/svg-icons/icon-sun.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/assets/svg-icons/icon-time-order.svg b/src/assets/svg-icons/icon-time-order.svg index 8356497..a333c8a 100644 --- a/src/assets/svg-icons/icon-time-order.svg +++ b/src/assets/svg-icons/icon-time-order.svg @@ -1,4 +1,4 @@ - - + + diff --git a/src/assets/svg-icons/icon-user.svg b/src/assets/svg-icons/icon-user.svg index 15df5c1..45fefce 100644 --- a/src/assets/svg-icons/icon-user.svg +++ b/src/assets/svg-icons/icon-user.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/src/components/AppBanner.vue b/src/components/AppBanner.vue index c0525f5..f13838c 100644 --- a/src/components/AppBanner.vue +++ b/src/components/AppBanner.vue @@ -75,7 +75,11 @@ defineExpose({ background-color: var(--o-color-primary1); overflow: hidden; } - +@include in-dark { + .banner-bg { + @include img-in-dark; + } +} .banner-bg { position: absolute; height: 100%; diff --git a/src/components/AppFeedback.vue b/src/components/AppFeedback.vue index 7519f00..f85c72d 100644 --- a/src/components/AppFeedback.vue +++ b/src/components/AppFeedback.vue @@ -142,7 +142,6 @@ const onExternalDialog = () => { clearDataAfterJump = true; }; - const goToFeedbackDetailUrl = (url: string) => { externalLink.value = decodeURIComponent(url); showExternalDlg.value = true; @@ -242,7 +241,4 @@ const jumpOut = () => { } } } -:deep(.o-rate) { - --rate-size: 24px; -} diff --git a/src/components/OCardItem.vue b/src/components/OCardItem.vue index dbf2d9c..d64c3cf 100644 --- a/src/components/OCardItem.vue +++ b/src/components/OCardItem.vue @@ -6,6 +6,7 @@ import { getTagsIcon } from '@/utils/common'; import { useLocale } from '@/composables/useLocale'; import { useI18n } from 'vue-i18n'; import { useRoute } from 'vue-router'; +import { useTheme } from '@/composables/useTheme'; import { maintainerDefaults } from '@/data/query'; import defaultImg from '@/assets/default-logo.png'; @@ -20,51 +21,34 @@ defineProps({ const route = useRoute(); const { locale } = useLocale(); const { t } = useI18n(); +const { isDark } = useTheme(); + +// 名称转换 +const pkgNameConversion = (v: string) => { + return v === 'IMAGE' ? 'app' : v.toLocaleLowerCase(); +}; // 跳转id function getQueryStr(params: PkgIdsT) { - let queryStr = ''; + if (Object.entries(params).length > 0) { + const ids = Object.entries(params) + .filter(([key, value]) => value) + .map(([key, value]) => `${pkgNameConversion(key)}PkgId=${encodeURIComponent(value)}`); - if (params.RPM) { - queryStr += `&rpmPkgId=${encodeURIComponent(params.RPM)}`; - } - if (params.IMAGE) { - queryStr += `&appPkgId=${encodeURIComponent(params.IMAGE)}`; + return ids.join('&').replace(/^&/, ''); } - if (params.EPKG) { - queryStr += `&epkgPkgId=${encodeURIComponent(params.EPKG)}`; - } - if (params.OEPKG) { - queryStr += `&oepkgPkgId=${encodeURIComponent(params.OEPKG)}`; - } - return queryStr.replace(/^&/, ''); } // Maintainer数据 function getMaintainersStr(params: PkgIdsT) { - let maintainers = ''; const line = ' ; '; - - Object.keys(params).forEach((key) => { - if (!params[key]) { - params[key] = maintainerDefaults.name; - } - }); - - if (params.RPM) { - maintainers += `${params.RPM}${line}`; - } - if (params.IMAGE) { - maintainers += `${params.IMAGE}${line}`; - } - if (params.EPKG) { - maintainers += `${params.EPKG}${line}`; - } - if (params.OEPKG) { - maintainers += `${params.OEPKG}${line}`; + const defaultName = maintainerDefaults.name; + if (params && Object.entries(params).length > 0) { + const maintainers = Object.entries(params).map(([key, value]) => (value ? value : defaultName)); + return maintainers.join(line).replace(/ ; +$/, ''); + } else { + return defaultName; } - - return maintainers.replace(/ ; +$/, ''); } const jumpTo = (id: PkgIdsT, type?: PkgTypeT) => { @@ -112,7 +96,7 @@ onMounted(() => { -

+

{{ getMaintainersStr(data.maintainers) }}

@@ -175,7 +159,7 @@ onMounted(() => { flex: 1; word-break: break-word; font-weight: 500; - + transition: all 0.3s ease; display: -webkit-box; height: 60px; overflow: hidden; @@ -205,6 +189,7 @@ onMounted(() => { margin-top: 16px; .o-icon { margin-right: 8px; + color: var(--o-color-info3); svg { width: 16px; height: 16px; @@ -212,7 +197,6 @@ onMounted(() => { } } .desc { - @include text1; margin-top: 8px; color: var(--o-color-info2); overflow: hidden; @@ -221,11 +205,14 @@ onMounted(() => { position: relative; word-break: break-all; height: 48px; - span { - color: var(--o-color-primary1); + + --linear-gradient: var(--o-mixedgray-1); + &.dark { + --linear-gradient: var(--o-mixedgray-4); } + @include text1; &::after { - background-image: linear-gradient(90deg, hsla(0, 0%, 93%, 0), hsla(0, 0%, 100%, 0.8) 59%, var(--o-color-control-light) 100%); + background-image: linear-gradient(90deg, rgba(var(--linear-gradient), 0), rgba(var(--linear-gradient), 0.8) 59%, var(--o-color-control-light) 100%); bottom: 0; content: ''; height: 24px; @@ -234,6 +221,9 @@ onMounted(() => { right: 0; width: 4em; } + span { + color: var(--o-color-primary1); + } } } } diff --git a/src/components/detail/DetailAside.vue b/src/components/detail/DetailAside.vue index a5e6c99..5da625d 100644 --- a/src/components/detail/DetailAside.vue +++ b/src/components/detail/DetailAside.vue @@ -278,9 +278,7 @@ const onCodeSuccess = () => { .detail { margin: 0 0 24px; -} -.sp { - margin-right: 20px; + color: var(--o-color-info1); } .bt { height: 100%; @@ -309,11 +307,12 @@ const onCodeSuccess = () => { } } .license { - border-top: 1px rgba(0, 0, 0, 0.1) solid; + border-top: 1px solid var(--o-color-control4); padding-top: 25px; width: 100%; display: flex; justify-content: space-between; + color: var(--o-color-info1); p + p { margin-left: 24px; } diff --git a/src/components/detail/DetailHeader.vue b/src/components/detail/DetailHeader.vue index 0823e93..de11000 100644 --- a/src/components/detail/DetailHeader.vue +++ b/src/components/detail/DetailHeader.vue @@ -9,8 +9,8 @@ import ExternalLink from '@/components/ExternalLink.vue'; import type { MaintainerT } from '@/@types/app'; import { GITEE } from '@/data/config'; -import Email from '@/assets/email.svg'; -import Gitee from '@/assets/gitee.svg'; +import IconEmail from '~icons/pkg//email.svg'; +import IconGitee from '~icons/pkg/gitee.svg'; import IconOutlink from '~icons/pkg/icon-outlink.svg'; import IconHelp from '~icons/pkg/icon-help.svg'; @@ -89,13 +89,13 @@ const scrollToAnchor = (id: string) => {

维护者:{{ maintainer.maintainerId }}

- + {{ `${GITEE}/${maintainer.maintainerGiteeId}` }}

@@ -170,14 +170,14 @@ const scrollToAnchor = (id: string) => { align-items: center; .icon-img { margin-right: 8px; + color: var(--o-color-info1); } } } .title { - font-size: 16px; - color: rgba(0, 0, 0, 0.8); - line-height: 24px; + @include text1; + color: var(--o-color-info2); margin: 24px 0px 16px 0px; } .sp { diff --git a/src/components/detail/DetailInstall.vue b/src/components/detail/DetailInstall.vue index 98786f8..944e969 100644 --- a/src/components/detail/DetailInstall.vue +++ b/src/components/detail/DetailInstall.vue @@ -29,11 +29,12 @@ defineProps({ diff --git a/src/components/AppHeader.vue b/src/components/header/AppHeader.vue similarity index 90% rename from src/components/AppHeader.vue rename to src/components/header/AppHeader.vue index f05a711..a644975 100644 --- a/src/components/AppHeader.vue +++ b/src/components/header/AppHeader.vue @@ -5,14 +5,18 @@ import { useRouter } from 'vue-router'; import { useLangStore } from '@/stores/common'; import { OPENEULER } from '@/data/config'; import { useI18n } from 'vue-i18n'; -import HeaderNav from '@/components/HeaderNav.vue'; -import AppLogin from '@/components/AppLogin.vue'; +import { useTheme } from '@/composables/useTheme'; +import HeaderNav from '@/components/header/HeaderNav.vue'; +import AppLogin from '@/components/header/AppLogin.vue'; +import HeaderTheme from '@/components/header/HeaderTheme.vue'; import openeulerLogo from '@/assets/openeuler-logo.svg'; +import openeulerLogoDark from '@/assets/openeuler-logo-dark.svg'; const { locale, t } = useI18n(); const router = useRouter(); const langStore = useLangStore(); +const { isDark } = useTheme(); watch( () => { @@ -36,7 +40,7 @@ const goHome = () => {
+
@@ -72,10 +77,10 @@ const goHome = () => { justify-content: space-between; margin: 0 auto; .logo-text { - @include h4; - color: #000; + color: var(--o-color-info1); font-weight: bold; cursor: pointer; + @include h4; } .header-left, .header-right { diff --git a/src/components/AppLogin.vue b/src/components/header/AppLogin.vue similarity index 86% rename from src/components/AppLogin.vue rename to src/components/header/AppLogin.vue index 92cf460..355bc74 100644 --- a/src/components/AppLogin.vue +++ b/src/components/header/AppLogin.vue @@ -22,9 +22,7 @@ const login = () => doLogin(); @@ -32,9 +30,8 @@ const login = () => doLogin();
-
- -
+ + \ No newline at end of file + diff --git a/src/components/HeaderNav.vue b/src/components/header/HeaderNav.vue similarity index 100% rename from src/components/HeaderNav.vue rename to src/components/header/HeaderNav.vue diff --git a/src/components/header/HeaderTheme.vue b/src/components/header/HeaderTheme.vue new file mode 100644 index 0000000..309bc71 --- /dev/null +++ b/src/components/header/HeaderTheme.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/composables/useTheme.ts b/src/composables/useTheme.ts new file mode 100644 index 0000000..33668b8 --- /dev/null +++ b/src/composables/useTheme.ts @@ -0,0 +1,53 @@ +import { watch, computed, onMounted } from 'vue'; +import { useAppearance } from '@/stores/common'; + +import { isClient } from '@opensig/opendesign'; + +const APPEARANCE_KEY = 'easysoftware-theme'; + +export const useTheme = () => { + const appearanceStore = useAppearance(); + + const isLight = computed(() => appearanceStore.value === 'light'); + const isDark = computed(() => appearanceStore.value === 'dark'); + + const changeTheme = () => { + if (isClient) { + const theme = appearanceStore.value === 'dark' ? 'light' : 'dark'; + appearanceStore.value = theme; + localStorage.setItem(APPEARANCE_KEY, theme); + } + }; + + watch( + () => { + return appearanceStore.value; + }, + (val) => { + const documentElement = document.documentElement; + val === 'light' && documentElement.removeAttribute('data-o-theme'); + val === 'dark' && documentElement.setAttribute('data-o-theme', 'dark'); + } + ); + + onMounted(() => { + let theme; + if (!localStorage.getItem(APPEARANCE_KEY)) { + const prefereDark = window.matchMedia( + '(prefers-color-scheme: dark)' + ).matches; + theme = prefereDark ? 'dark' : 'light'; + } else { + theme = localStorage.getItem(APPEARANCE_KEY); + } + + appearanceStore.value = theme === 'dark' ? 'dark' : 'light'; + }); + + return { + isLight, + isDark, + theme: appearanceStore, + changeTheme, + }; +}; diff --git a/src/stores/common.ts b/src/stores/common.ts index 4ee55f0..5bb3ae7 100644 --- a/src/stores/common.ts +++ b/src/stores/common.ts @@ -30,3 +30,10 @@ export const useViewStore = defineStore('view', { }, }, }); + + +export const useAppearance = defineStore('appearance', { + state: () => ({ + theme: 'light', + }), +}); diff --git a/src/views/home/HomeField.vue b/src/views/home/HomeField.vue index 2e3295a..26cee3d 100644 --- a/src/views/home/HomeField.vue +++ b/src/views/home/HomeField.vue @@ -57,9 +57,10 @@ const jumpTo = (name: string) => { .domain-item { margin: 0 0 40px; h3 { - @include h2; text-align: center; font-weight: 500; + color: var(--o-color-info1); + @include h2; } .domain-item-title { diff --git a/src/views/home/HomeHeader.vue b/src/views/home/HomeHeader.vue index af58e6e..880b1ae 100644 --- a/src/views/home/HomeHeader.vue +++ b/src/views/home/HomeHeader.vue @@ -51,6 +51,11 @@ onMounted(() => { - - diff --git a/src/views/home/HomeVersion.vue b/src/views/home/HomeVersion.vue index f393a87..281b1ac 100644 --- a/src/views/home/HomeVersion.vue +++ b/src/views/home/HomeVersion.vue @@ -15,7 +15,7 @@ interface DataSubT { } interface DataT { - type: string; + type?: string; id: string; children: DataSubT[]; } @@ -89,7 +89,7 @@ const formatArchItem = (items: DataItem) => { }; const formatArchData = (data: { [key: string]: DataItem }) => { - const newChildren: DataT[] = Object.entries(data).reduce((acc, [type, items]) => { + const newChildren: DataT[] = Object.entries(data).reduce((acc: DataT[], [type, items]) => { acc.push({ id: type, children: formatArchItem(items), diff --git a/src/views/solution/TheOpenHPC.vue b/src/views/solution/TheOpenHPC.vue index 251534b..505c6a4 100644 --- a/src/views/solution/TheOpenHPC.vue +++ b/src/views/solution/TheOpenHPC.vue @@ -172,6 +172,7 @@ const jumpTo = (href: string) => { svg { width: 48px; height: 48px; + fill: currentColor; } } } @@ -216,6 +217,9 @@ const jumpTo = (href: string) => { :deep(.o-card) { --card-main-padding: 40px; flex: 1; + .o-card-title { + cursor: pointer; + } &:hover { .o-card-title { color: var(--o-color-primary1); diff --git a/src/views/solution/TheOpenStack.vue b/src/views/solution/TheOpenStack.vue index 3aeed51..4560e60 100644 --- a/src/views/solution/TheOpenStack.vue +++ b/src/views/solution/TheOpenStack.vue @@ -139,6 +139,12 @@ const jumpTo = (href: string) => { diff --git a/src/assets/404-dark.png b/src/assets/404-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..43c80e1785f6d378f91123da426643f4adebd906 GIT binary patch literal 44371 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 literal 0 HcmV?d00001 diff --git a/src/assets/default-logo-cover_dark.png b/src/assets/default-logo-cover_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9bee7eb9174e5ffbb508b1edafc32f2fbcd9a33c GIT binary patch literal 3901 zcmeAS@N?(olHy`uVBq!ia0y~yVCrCCV2t5l0*V~Tx#0<<7>k44ofy`glX(f`xTHpS zruq6ZXaU(A42G$TlC0TWD?sbc{%jLjGWQm7-GIGurk zZ@H(7V@L(#+pCVe3Dn@mqRlrez-kBNGdUKnBMiHy%w60R@K! zhDQB_8GjkU!W^6u&jKVDfrS|lzhMU}aPT-_(0)pw6|7St%^s))sMv|A%`&7-18A0l z!vTZeVC@P5LI!6R8o4Nfm9*XDhnPR1A(3yYA{SVR!I?U+c8(Snp5hfefnXaN62CEn z4N_1^nBkn-;RIH~vsoVGJVqu(#=|mN&LSXpD*&Ae@xiE5M?-Zqt&V1^(ZXu9Tm{t< zqqWszt0hI-#EvwP?>S)t?w8Ju(`&JR_@>!nAZu+GN>biQm`njxgN@xNAI%S7a literal 0 HcmV?d00001 diff --git a/src/assets/home/ohpc_logo.png b/src/assets/home/ohpc_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e9483438e59e3cfd91b27b454ce77db035623398 GIT binary patch literal 8561 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

!IOkcffX?-zS${^0AhYm=EnM3NUrNkY;E zrQIt7eNgdYX84wcgP*k;cAWEfn@rQVA%&p+Am}vq6Z-TuDrbm1(ajc#^rhaP(9`kC0<@g@9gs1?P|;2#n>X_u>I z6qnRzqug&f5kwdwiyrq6OVWyG*4uw?OSVdA>?&M&L!2au6W|hL%cWgk0!1+Rew3BK z!KEIZWZcgHmgX>w+lv@t71e&KTC934Q3^`EG8WY*?H#&&az%u7(Lh(A8oC}Yq#erjH3Kw-wKE->MJ+iBH*DkyU^h_e z7YPcCq@KFK`ZOLdd@-N{rw`s|+qkP4edw~RCu^i`I>8fCf@Ze+jMEWa*@nu+$c&u( zv-a<}#EaW;A~&T0?hq?cmLG%jBEygPj`91w}Innkhx4+uUKj&i{+{#K*S+5F5=J$x^FQ7pq2B zl+3A~?|dIvEOaw}nGIWHrmTxvVB4N!&8nY8}Yi5^J5J0z$k3-jE zLq|iN=~e#0DYec2lh&512>Db@#-hpPBwP)q$o3uvoC%Qfcs)MksX#NZvkYHNDW-G% zy5DUdk4th8LT-DeejwwG!zGoXe-1iwL+T~EuD9qHM4mP^N<04)CANW_Pd-~lg=e1z zFL!@JJL($RfJ&mqTogEAQa9Q+DuJt?2Y)HGYnIVfNP&z)%ngf)eO8S6#knVibi8O? z&K_My!J?O<&WH`FHS5&(1Q&KGf2$04AVkYZu!%u#I?Ce_&bjuEuL~Cw7JKmWM!!9? z-OJmA%SI#aYvt+OQM;SFN^?n%8z|opi!{H{b@P_dN9t+$>i1Ilz24ty8-_`E(`op| z!YyQXT(<%mEwkE@4GehQI+LNk}thlzXEQpgFGAfVi>NcLuZ9P6V zT}?^tUuZ|TM?L6Bzi&O{*XkHZFZ9V%Wu$j;v@abP8doiDMH~mLyZUG#9V789Oej_I zvvkZ0{~rRSHx^5sgq>mbOBZ^yq^pxMCzn3L=W3|>U+x!pc~ghPe)wj4qHZ`-jABH& z_%?v#s8Mb#^QzC-+XYDvgXG0!Ph{fe@;O);zGxH*rv^K>Lus5Lj~mYIYaYzJrStw= zCY#;J1i*`C8l+YjeTsVe>Q6;(Uf3UY)VfM#%alsS%=UT{)ofyp{{RcxB`%%FUJG>c zo7RZQ^~CxJ*4(BkV!i%&$s&-u^_7xbJ`0q%hPmkW*~^Gwvr7#Lnv3G7p@A0)6TDET zG>x09;G@tZ(|yeAA zT(f%WT&X+0XlISgO~B)_#&OMk&_S6Q;y3BPuLI46y1(Ua&@+kv3A+K#c+XxsW}F4c zZT%BW@{NwO|8QU~KRFelI6U%Ynv!>kzDUs2J(JJw#(g28SVebTBVZe!5lhascvt%|lu#UNrSkHV=B3%rN6SrZ z2A&;4nUT)mwiS1oWaWf7I7PF5&Ci{A+#1hY% zNa+#{ySU)JKH!}%$a_2?$9&+eL69Tn8>6J`x(F(eB;>h})I~}znv3-)$HvVBtu>Ab zx6E&XmEFSokDXbt!R(FPxRWvk4DO*I>V#Ur((xV4CY>7k-P`Q5 zg}a-x(UHPbC_G(L@kAmiorhm5d$@b2B%dgMt7~X^Zhcc1Ul4An8L5bUf~UnqbRN#+ z-SE9vT66C^M&X|TT^4+%r#XB3LvRB_& zEBjd^%I~pY9Q#8|w*nD|EG)JzEU|@myCDNtOJkzH(9faZJ}tzpkFmhcVR(qvq*m+! zWBVNZmbbRQb!Q~?mx&j+8w6e|RIp6>(O*(EJiDo(eze53z`*ra-~5Y6QZiA0Q-6Br z@v=vFH!R}%|B0uLvI>nmxPC5c^UlG4(aZ=_G{F0#`+w)47*bi?qyHyFkDn<##i>})h;mXtzV_;R-&gF!-2rAm z7-|50s8JUkqtQPHA_+3CBeanJk+zc6KZCopzeQK$&z`9v>juy50Qy2_;pY15Us0d~ rJy7@?WtNsaO}N$c|Lu;d?9rVpZv+oR@sRSr-yJknbyez>?4tf3c2GPE literal 0 HcmV?d00001 diff --git a/src/assets/solution/openstack/openeuler-dark.png b/src/assets/solution/openstack/openeuler-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..16c45ddacc4da14d27965b788466f05af9233eb8 GIT binary patch literal 6386 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 R-M{}E)ReRoYvgT0{|`XK^G^T( literal 0 HcmV?d00001 diff --git a/src/assets/solution/openstack/openstacklogo-dark.png b/src/assets/solution/openstack/openstacklogo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..99a12209fc579543d634fd89ae9c80e4af03995c GIT binary patch literal 9714 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 P;jPq_b(CrpY{UN_`g?CQ literal 0 HcmV?d00001 diff --git a/src/assets/style/base.scss b/src/assets/style/base.scss index fe8eb17..6639827 100644 --- a/src/assets/style/base.scss +++ b/src/assets/style/base.scss @@ -12,8 +12,8 @@ body { scroll-behavior: smooth; box-sizing: border-box; font-family: 'PingFang SC', 'Microsoft YaHei', 'Helvetica', 'Arial', sans-serif; - width: 100%; height: 100%; + background: var(--o-color-fill2); @include text1; @include scrollbar; } diff --git a/src/assets/style/category/detail/index.scss b/src/assets/style/category/detail/index.scss index f3425fb..2a29aec 100644 --- a/src/assets/style/category/detail/index.scss +++ b/src/assets/style/category/detail/index.scss @@ -45,7 +45,7 @@ border-top: 1px solid var(--o-color-control4); } .label { - background: rgba(0, 47, 167, 0.05); + background: var(--o-color-fill3); padding: 16px 24px; color: var(--o-color-info2); min-width: 150px; @@ -86,7 +86,7 @@ align-items: center; justify-content: center; background-color: var(--o-color-primary1); - color: #fff; + color: var(--o-color-info1); padding: 10px 0px; } } @@ -129,7 +129,7 @@ } .ver { - background: rgba(var(--o-kleinblue-6), 0.05); + background: var(--o-color-fill3); @include text2; border: none; border-radius: var(--layout-pkg-radius); diff --git a/src/assets/style/element-plus/table.scss b/src/assets/style/element-plus/table.scss index 448668b..8f23d54 100644 --- a/src/assets/style/element-plus/table.scss +++ b/src/assets/style/element-plus/table.scss @@ -26,6 +26,7 @@ @include text1; font-weight: 500; color: var(--o-color-info1); + border-bottom: 0 none; } } tr:last-child { diff --git a/src/assets/style/global.scss b/src/assets/style/global.scss index fc646f1..e140180 100644 --- a/src/assets/style/global.scss +++ b/src/assets/style/global.scss @@ -25,6 +25,7 @@ html { .o-tag { cursor: pointer; --tag-padding: 2px 4px; + --tag-bd-color: var(--o-color-control3-light); &.image-icon .o-icon { color: #007af0; } @@ -35,7 +36,7 @@ html { color: #00a7b3; } &:hover { - --tag-bg-color: var(--o-color-primary4-light); + --tag-bg-color: var(--o-color-control1-light); } .o-tag-icon { height: 16px; diff --git a/src/assets/style/markdown.scss b/src/assets/style/markdown.scss index d94327a..326eb1b 100644 --- a/src/assets/style/markdown.scss +++ b/src/assets/style/markdown.scss @@ -47,6 +47,7 @@ } code { border-radius: var(--layout-pkg-radius); + background-color: var(--o-color-fill3); margin: 0 4px; } p code:first-child { @@ -91,7 +92,7 @@ th { background-color: var(--o-color-control3-light); text-align: left; - border: 0 none !important; + border-color: var(--o-color-control3-light) !important; height: 40px; } th, @@ -116,10 +117,11 @@ .pre-copy { cursor: pointer; position: absolute; - top: 12px; - right: 12px; + top: 0; + right: 0; background-color: var(--o-color-fill3); opacity: 1; + padding: 12px 12px 0 0; .icon-copy { display: block; width: 24px; diff --git a/src/assets/style/theme/dark.token.css b/src/assets/style/theme/dark.token.css index bd6bf8f..61682e6 100644 --- a/src/assets/style/theme/dark.token.css +++ b/src/assets/style/theme/dark.token.css @@ -1,5 +1,5 @@ /* theme: opendesign.dark */ -[data-o-theme='dark'] { +[data-o-theme="dark"] { /** * @name * @type palette @@ -27,7 +27,7 @@ * @group kleinblue * @description */ - --o-kleinblue-2: 18, 35, 87; + --o-kleinblue-2: 18, 34, 87; /** * @name * @type palette @@ -62,7 +62,7 @@ * @group kleinblue * @description */ - --o-kleinblue-7: 104, 142, 237; + --o-kleinblue-7: 104, 142, 237 ; /** * @name * @type palette @@ -951,7 +951,7 @@ * @group mixedgray * @description */ - --o-mixedgray-14: 255, 255, 255; + --o-mixedgray-14: 255,255, 255; /** * @name * @type palette @@ -1497,35 +1497,35 @@ * @group control * @description 常规,常用于边框 */ - --o-color-control1: rgba(var(--o-mixedgray-10), 0.25); + --o-color-control1: rgba(var(--o-mixedgray-14), 0.25); /** * @name * @type color * @group control * @description 悬浮,常用于边框 */ - --o-color-control2: rgba(var(--o-mixedgray-10), 0.6); + --o-color-control2: rgba(var(--o-mixedgray-14), 0.6); /** * @name * @type color * @group control * @description 激活,常用于边框 */ - --o-color-control3: rgba(var(--o-mixedgray-10), 0.8); + --o-color-control3: rgba(var(--o-mixedgray-14), 0.8); /** * @name * @type color * @group control * @description 禁用,常用于边框 */ - --o-color-control4: rgba(var(--o-mixedgray-10), 0.15); + --o-color-control4: rgba(var(--o-mixedgray-14), 0.15); /** * @name * @type color * @group control * @description 常规-浅,常用于背景 */ - --o-color-control1-light: rgb(var(--o-mixedgray-7), 1); + --o-color-control1-light: rgb(var(--o-mixedgray-7), 1.0); /** * @name * @type color @@ -1553,14 +1553,14 @@ * @group control * @description 很浅,常用于表格背景色 */ - --o-color-control-light: rgb(var(--o-mixedgray-4), 1); + --o-color-control-light: rgb(var(--o-mixedgray-4), 1.0); /** * @name * @type color * @group info * @description 一级/强调/标题 */ - --o-color-info1: rgba(var(--o-mixedgray-14), 1); + --o-color-info1: rgba(var(--o-mixedgray-14), 1.0); /** * @name * @type color @@ -1588,7 +1588,7 @@ * @group info * @description 一级/次强调/正文反色 */ - --o-color-info1-inverse: rgba(var(--o-mixedgray-1), 1); + --o-color-info1-inverse: rgba(var(--o-mixedgray-1), 1.0); /** * @name * @type color @@ -1616,7 +1616,7 @@ * @group mask * @description 全局遮罩 */ - --o-color-mask1: rgba(var(--o-mixedgray-14), 0.4); + --o-color-mask1: rgba(var(--o-mixedgray-1), 0.4); /** * @name * @type color @@ -2191,4 +2191,4 @@ * @description 用于大卡片、场景切换 */ --o-easing-emphasized-out: cubic-bezier(0.05, 0.7, 0.1, 1); -} +} \ No newline at end of file diff --git a/src/assets/style/theme/default-light.token.css b/src/assets/style/theme/default-light.token.css index cbe733b..b2572c8 100644 --- a/src/assets/style/theme/default-light.token.css +++ b/src/assets/style/theme/default-light.token.css @@ -1,6 +1,5 @@ /* theme: opendesign.light */ -:root, -[data-o-theme='light'] { +:root,[data-o-theme="light"] { /** * @name * @type palette @@ -21,7 +20,7 @@ * @group kleinblue * @description */ - --o-kleinblue-1: 235, 241, 250; + --o-kleinblue-1: 235, 241, 246; /** * @name * @type palette @@ -924,7 +923,7 @@ * @group mixedgray * @description */ - --o-mixedgray-10: 85, 85, 92; + --o-mixedgray-10: 85 , 85, 92; /** * @name * @type palette @@ -1498,35 +1497,35 @@ * @group control * @description 常规,常用于边框 */ - --o-color-control1: rgba(var(--o-mixedgray-10), 0.25); + --o-color-control1: rgba(var(--o-mixedgray-14), 0.25); /** * @name * @type color * @group control * @description 悬浮,常用于边框 */ - --o-color-control2: rgba(var(--o-mixedgray-10), 0.6); + --o-color-control2: rgba(var(--o-mixedgray-14), 0.6); /** * @name * @type color * @group control * @description 激活,常用于边框 */ - --o-color-control3: rgba(var(--o-mixedgray-10), 0.8); + --o-color-control3: rgba(var(--o-mixedgray-14), 0.8); /** * @name * @type color * @group control * @description 禁用,常用于边框 */ - --o-color-control4: rgba(var(--o-mixedgray-10), 0.1); + --o-color-control4: rgba(var(--o-mixedgray-14), 0.1); /** * @name * @type color * @group control * @description 常规-浅,常用于背景 */ - --o-color-control1-light: rgb(var(--o-mixedgray-5), 1); + --o-color-control1-light: rgb(var(--o-mixedgray-5), 1.0); /** * @name * @type color @@ -1554,14 +1553,14 @@ * @group control * @description 很浅,常用于表格背景色 */ - --o-color-control-light: rgb(var(--o-mixedgray-1), 1); + --o-color-control-light: rgb(var(--o-mixedgray-1), 1.0); /** * @name * @type color * @group info * @description 一级/强调/标题 */ - --o-color-info1: rgba(var(--o-mixedgray-14), 1); + --o-color-info1: rgba(var(--o-mixedgray-14), 1.0); /** * @name * @type color @@ -1589,7 +1588,7 @@ * @group info * @description 一级/次强调/正文反色 */ - --o-color-info1-inverse: rgba(var(--o-mixedgray-1), 1); + --o-color-info1-inverse: rgba(var(--o-mixedgray-1), 1.0); /** * @name * @type color @@ -1666,7 +1665,7 @@ * @group shadow * @description 用于卡片悬浮阴影 */ - --o-shadow-2: 0 2px 24px rgba(var(--o-mixedgray-10), 0.15); + --o-shadow-2: 0 2px 24px rgba(var(--o-mixedgray-9), 0.15); /** * @name 阴影3 * @type shadow @@ -2192,4 +2191,4 @@ * @description 用于大卡片、场景切换 */ --o-easing-emphasized-out: cubic-bezier(0.05, 0.7, 0.1, 1); -} +} \ No newline at end of file diff --git a/src/components/OCodeCopy.vue b/src/components/OCodeCopy.vue index 103b4c4..6d7a1bc 100644 --- a/src/components/OCodeCopy.vue +++ b/src/components/OCodeCopy.vue @@ -63,10 +63,10 @@ const copyText = (e: MouseEvent) => { cursor: pointer; position: absolute; font-size: 24px; - top: 12px; - right: 12px; + padding: 12px 12px 0 0; + top: 0; + right: 0; background-color: var(--o-color-fill3); - transition: all var(--o-duration-m1) var(--o-easing-standard-in); height: 24px; box-sizing: content-box; border-radius: 0 4px 0 0; diff --git a/src/components/ResultNoApp.vue b/src/components/ResultNoApp.vue index 8588299..4ed61bb 100644 --- a/src/components/ResultNoApp.vue +++ b/src/components/ResultNoApp.vue @@ -4,9 +4,11 @@ import { OLink, OResult, OFigure } from '@opensig/opendesign'; import { useRoute } from 'vue-router'; import { useI18n } from 'vue-i18n'; import { GITEE } from '@/data/config'; +import { useTheme } from '@/composables/useTheme'; import ExternalLink from '@/components/ExternalLink.vue'; import result404 from '@/assets/404.png'; +import result404Dark from '@/assets/404-dark.png'; const props = defineProps({ type: { @@ -15,6 +17,8 @@ const props = defineProps({ }, }); +const { isDark } = useTheme(); + const route = useRoute(); const { t } = useI18n(); @@ -47,7 +51,7 @@ const clickFeedback = () => {