From f85314c52fed1a33c42bd480c6cbea403bc61d18 Mon Sep 17 00:00:00 2001 From: Kagol Date: Sat, 3 Sep 2022 11:09:45 +0800 Subject: [PATCH 01/73] chore: release v1.0.1 --- packages/devui-vue/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devui-vue/package.json b/packages/devui-vue/package.json index 77bcea27c3..0eb166ef50 100644 --- a/packages/devui-vue/package.json +++ b/packages/devui-vue/package.json @@ -1,6 +1,6 @@ { "name": "vue-devui", - "version": "1.0.0", + "version": "1.0.1", "license": "MIT", "description": "DevUI components based on Vite and Vue3", "keywords": [ From 2489eea01be8b253e15d6817bd875fdbdbac0515 Mon Sep 17 00:00:00 2001 From: qinwencheng <157475034@qq.com> Date: Fri, 2 Sep 2022 00:39:26 +0800 Subject: [PATCH 02/73] =?UTF-8?q?fix(time-select):=20=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?#1290=20step=E5=B0=8F=E4=BA=8E=E7=AD=89=E4=BA=8E0=E6=97=B6?= =?UTF-8?q?=E4=BC=9A=E5=8D=A1=E6=AD=BB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devui-vue/devui/time-select/src/use-time-select.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/time-select/src/use-time-select.ts b/packages/devui-vue/devui/time-select/src/use-time-select.ts index 26dbd8be61..680a94df1a 100644 --- a/packages/devui-vue/devui/time-select/src/use-time-select.ts +++ b/packages/devui-vue/devui/time-select/src/use-time-select.ts @@ -50,7 +50,10 @@ export function useTimeSelect(props: TimeSelectProps, ctx: SetupContext): useTim const step = computed(() => { const stepTime = parseTimeToNumber(props.step); - return stepTime ? formatTime(stepTime) : '00:30'; + if (stepTime && stepTime.hour >= 0 && stepTime.minute >= 0 && stepTime.hour + stepTime.minute > 0) { + return formatTime(stepTime); + } + return '00:30'; }); const minTime = computed(() => { @@ -84,7 +87,7 @@ export function useTimeSelect(props: TimeSelectProps, ctx: SetupContext): useTim list.push({ value: currentTime, name: currentTime, - disabled: compareTime(current, minTime.value || '-1:-1') <= 0 || compareTime(current, maxTime.value || '24:00') > 0, + disabled: compareTime(current, minTime.value || '-1:-1') < 0 || compareTime(current, maxTime.value || '24:00') > 0, }); current = nextTime(current, step.value); } From 989aaf660222ff95e84ae2662b65efafd15ab031 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 4 Sep 2022 00:14:31 +0000 Subject: [PATCH 03/73] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b941d97b6f..fb74f536c4 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
qinwencheng

💻
Angelanana

💻
joo1es

💻 +
handsomezyw

💻 From b91f095d4e5ba41d4cc986426e5347f26c1ab19a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 4 Sep 2022 00:14:32 +0000 Subject: [PATCH 04/73] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 6213858643..9a9828265d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -544,6 +544,15 @@ "contributions": [ "code" ] + }, + { + "login": "handsomezyw", + "name": "handsomezyw", + "avatar_url": "https://avatars.githubusercontent.com/u/34366225?v=4", + "profile": "https://github.com/handsomezyw", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 10, From 29c261ca3dd9d08d2c94d4fc2e1b35bb9cc20852 Mon Sep 17 00:00:00 2001 From: liusuY Date: Sun, 4 Sep 2022 18:18:26 +0800 Subject: [PATCH 05/73] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20#1292?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/mention/src/mention.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/devui-vue/devui/mention/src/mention.tsx b/packages/devui-vue/devui/mention/src/mention.tsx index 181cc9732e..adc931280e 100644 --- a/packages/devui-vue/devui/mention/src/mention.tsx +++ b/packages/devui-vue/devui/mention/src/mention.tsx @@ -46,10 +46,14 @@ export default defineComponent({ emit('change', val.slice(1)); }, 300); - const handleBlur = () => { - setTimeout(() => { - showSuggestions.value = false; - }, 100); + const handleBlur = (e: Event) => { + const { target } = e; + const ele = document.querySelector('.devui-mention'); + if (!(ele?.contains(target as Element))) { + setTimeout(() => { + showSuggestions.value = false; + }, 100); + } }; const handleFocus = () => { @@ -116,17 +120,19 @@ export default defineComponent({ onMounted(() => { window.addEventListener('keydown', arrowKeyDown); window.addEventListener('keydown', enterKeyDown); + document.addEventListener('click', handleBlur); }); onUnmounted(() => { window.removeEventListener('keydown', arrowKeyDown); window.removeEventListener('keydown', enterKeyDown); + document.removeEventListener('click', handleBlur); }); return () => { return (
- + {showSuggestions.value ? ( loading.value ? (
加载中...
From c6d898b807cd1eb276a7e27ad3fbb624c9b50385 Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sat, 3 Sep 2022 15:17:17 +0800 Subject: [PATCH 06/73] =?UTF-8?q?fix(modal):=20=E4=BF=AE=E5=A4=8Ddialog?= =?UTF-8?q?=E7=9A=84=E4=B8=AA=E7=AC=AC=E4=B8=80=E4=B8=AAicon=E5=92=8C?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E7=9A=84=E4=B8=8D=E5=AF=B9=E9=BD=90#1300?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/modal/src/modal.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/modal/src/modal.scss b/packages/devui-vue/devui/modal/src/modal.scss index 6e4c917693..ce753279be 100644 --- a/packages/devui-vue/devui/modal/src/modal.scss +++ b/packages/devui-vue/devui/modal/src/modal.scss @@ -45,13 +45,14 @@ align-items: center; &-icon { - display: inline-block; + display: flex; + align-items: center; + justify-content: center; vertical-align: middle; margin-right: 8px; width: 24px; height: 24px; line-height: 16px; - text-align: center; } &-text { From 84c4623acd4a39ab30e17085f881ac7e204080de Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sat, 3 Sep 2022 18:36:49 +0800 Subject: [PATCH 07/73] =?UTF-8?q?fix(select):=20=E4=BF=AE=E5=A4=8Dselect?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=89=E9=A1=B9=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=EF=BC=8C=E5=85=B6=E4=BB=96=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=9A=84=E9=80=89=E9=A1=B9=E5=85=A8=E9=83=A8=E8=A2=AB=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=BA=86=20#1274?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/select/src/use-select.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/select/src/use-select.ts b/packages/devui-vue/devui/select/src/use-select.ts index dee17c7217..39823fe078 100644 --- a/packages/devui-vue/devui/select/src/use-select.ts +++ b/packages/devui-vue/devui/select/src/use-select.ts @@ -131,7 +131,7 @@ export default function useSelect( const newOption = { name: value, value: value, - _checked: false, + _checked: true, }; return value ? newOption : option; } else { @@ -236,7 +236,7 @@ export default function useSelect( const tagDelete = (data: OptionObjectItem) => { let { modelValue } = props; const checkedItems = []; - for (const child of injectOptions.value.values()) { + for (const child of selectedOptions.value) { if (data.value === child.value) { child._checked = false; } From 3c11a8d35b3e1c751f4698acb37d4d5952b93522 Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sun, 4 Sep 2022 01:39:24 +0800 Subject: [PATCH 08/73] =?UTF-8?q?fix(tabs):=20=E4=BF=AE=E5=A4=8DTabs?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E4=B8=8D=E6=88=AA=E6=96=AD=20#1062?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tabs/src/components/tab-nav/tab-nav.scss | 9 +++++++ .../tabs/src/components/tab-nav/tab-nav.tsx | 26 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss index 4b5ef22fdc..a2dda34916 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss @@ -293,6 +293,15 @@ $devui-tab-slider-bg: $devui-list-item-hover-bg; align-items: center; list-style: none; padding-left: 0; + overflow-y: hidden; + overflow-x: scroll; + // 隐藏滚动条 + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + display: none; + } li { a { diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx index c0f255e17e..b78b91f1a5 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx @@ -1,4 +1,16 @@ -import { computed, defineComponent, inject, onBeforeMount, onMounted, onUpdated, reactive, SetupContext, shallowRef, watch } from 'vue'; +import { + computed, + defineComponent, + inject, + onBeforeMount, + onMounted, + onUpdated, + reactive, + SetupContext, + shallowRef, + watch, + nextTick, +} from 'vue'; import { TabsData, tabsProps, TabsProps, TabsStateData } from '../../tabs-types'; import { useNamespace } from '../../../../shared/hooks/use-namespace'; import { useTabNavRender } from './composables/use-tab-nav-render'; @@ -35,6 +47,16 @@ export default defineComponent({ } ); + const handleTabAdd = () => { + onTabAdd(); + nextTick(() => { + // 使每次添加新tab后,滚动条都在最右侧 + if (tabsEle.value) { + tabsEle.value.scrollLeft = tabsEle.value.scrollWidth; + } + }); + }; + return () => { const closeIconEl = (item: TabsStateData) => { return tabCanClose(item) ? ( @@ -44,7 +66,7 @@ export default defineComponent({ ) : null; }; const newButton = props.addable ? ( -
  • +
  • ) : null; From dd614336368b091257489b1ef5ba4d51f53e492f Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sun, 4 Sep 2022 17:34:14 +0800 Subject: [PATCH 09/73] =?UTF-8?q?fix(tabs):=20=E4=BF=AE=E5=A4=8Dtabs?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E9=BC=A0=E6=A0=87=E6=8B=96=E5=8A=A8tab?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E6=BB=91=E5=8A=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tabs/src/components/tab-nav/tab-nav.scss | 1 + .../tabs/src/components/tab-nav/tab-nav.tsx | 64 +++++++++++++++---- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss index a2dda34916..2f3db29b8c 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss @@ -295,6 +295,7 @@ $devui-tab-slider-bg: $devui-list-item-hover-bg; padding-left: 0; overflow-y: hidden; overflow-x: scroll; + user-select: none; // 隐藏滚动条 scrollbar-width: none; -ms-overflow-style: none; diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx index b78b91f1a5..88b535905a 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx @@ -5,6 +5,7 @@ import { onBeforeMount, onMounted, onUpdated, + onUnmounted, reactive, SetupContext, shallowRef, @@ -33,9 +34,60 @@ export default defineComponent({ const { update, beforeMount, mounted, activeClick, tabCanClose } = useTabNavFunction(props, tabs, tabsList, data, ctx, tabsEle); const { onTabRemove, onTabAdd } = useTabNavEvent(ctx); + // 添加新的tab选项 + const handleTabAdd = () => { + onTabAdd(); + nextTick(() => { + // 使每次添加新tab后,滚动条都在最右侧 + if (tabsEle.value) { + tabsEle.value.scrollLeft = tabsEle.value.scrollWidth; + } + }); + }; + + // 鼠标是否在滑动 + let isSlide = false; + // tab滑动 + const handleSlideTab = (mousedownEvent: MouseEvent) => { + if (tabsEle.value) { + // 鼠标按下x坐标 + const mousedownX = mousedownEvent.clientX; + // 当前滚动条距离 + const scrollLeft = tabsEle.value.scrollLeft; + isSlide = true; + // 监听鼠标滑动 + tabsEle.value.addEventListener('mousemove', (mousemoveEvent: MouseEvent) => { + if (isSlide && tabsEle.value) { + // 当前鼠标移动x坐标 + const mousemoveX = mousemoveEvent.clientX; + // 滑动距离 + const scrollWidth = mousemoveX - mousedownX; + tabsEle.value.scrollLeft = scrollLeft - scrollWidth; + } + }); + tabsEle.value.addEventListener('mouseup', () => { + isSlide = false; + }); + tabsEle.value.addEventListener('mouseleave', () => { + isSlide = false; + }); + } + }; + onUpdated(() => update()); onBeforeMount(() => beforeMount()); - onMounted(() => mounted()); + onMounted(() => { + mounted(); + // tab超出容器后监听滑动 + if (tabsEle.value) { + tabsEle.value.addEventListener('mousedown', handleSlideTab); + } + }); + onUnmounted(() => { + if (tabsEle.value) { + tabsEle.value.removeEventListener('mousedown', handleSlideTab); + } + }); watch( () => props.modelValue, @@ -47,16 +99,6 @@ export default defineComponent({ } ); - const handleTabAdd = () => { - onTabAdd(); - nextTick(() => { - // 使每次添加新tab后,滚动条都在最右侧 - if (tabsEle.value) { - tabsEle.value.scrollLeft = tabsEle.value.scrollWidth; - } - }); - }; - return () => { const closeIconEl = (item: TabsStateData) => { return tabCanClose(item) ? ( From 905dd500e8fb18ca79e5a9191d3a65140d9ab91e Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Mon, 5 Sep 2022 11:33:22 +0800 Subject: [PATCH 10/73] =?UTF-8?q?fix(mention):=20=E4=BF=AE=E5=A4=8DMention?= =?UTF-8?q?=20=E7=BB=84=E4=BB=B6=E7=9A=84=E8=81=94=E6=83=B3=E6=96=87?= =?UTF-8?q?=E5=AD=97=E9=80=89=E4=B8=AD=E5=90=8E=E5=BA=94=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E8=BE=93=E5=85=A5=E7=9A=84=E8=81=94=E6=83=B3?= =?UTF-8?q?=E6=96=87=E6=9C=AC=EF=BC=8C=E8=80=8C=E9=9D=9E=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20#1303?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/mention/src/mention.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/mention/src/mention.tsx b/packages/devui-vue/devui/mention/src/mention.tsx index adc931280e..2674e3d4bf 100644 --- a/packages/devui-vue/devui/mention/src/mention.tsx +++ b/packages/devui-vue/devui/mention/src/mention.tsx @@ -67,7 +67,7 @@ export default defineComponent({ e.stopPropagation(); e.preventDefault(); showSuggestions.value = false; - textContext.value += item[props.dmValueParse.value as keyof IMentionSuggestionItem]; + textContext.value = textContext.value.substring(0, 1) + item[props.dmValueParse.value as keyof IMentionSuggestionItem]; }; const arrowKeyDown = (e: KeyboardEvent) => { @@ -102,7 +102,9 @@ export default defineComponent({ e.stopPropagation(); e.preventDefault(); showSuggestions.value = false; - textContext.value += filteredSuggestions.value[currentIndex.value][props.dmValueParse.value as keyof IMentionSuggestionItem]; + textContext.value = + textContext.value.substring(0, 1) + + filteredSuggestions.value[currentIndex.value][props.dmValueParse.value as keyof IMentionSuggestionItem]; emit('select', filteredSuggestions.value[currentIndex.value]); } } From af6f350e8e9bd6420ffb86967b7681ab7b0e7053 Mon Sep 17 00:00:00 2001 From: Kagol Date: Mon, 5 Sep 2022 23:34:02 +0800 Subject: [PATCH 11/73] chore: release v1.0.2 --- packages/devui-vue/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devui-vue/package.json b/packages/devui-vue/package.json index 0eb166ef50..fc88765db1 100644 --- a/packages/devui-vue/package.json +++ b/packages/devui-vue/package.json @@ -1,6 +1,6 @@ { "name": "vue-devui", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "description": "DevUI components based on Vite and Vue3", "keywords": [ From 14871bcd79d06a56715fb0184f07cb07357c1a6a Mon Sep 17 00:00:00 2001 From: Kagol Date: Tue, 6 Sep 2022 21:40:23 +0800 Subject: [PATCH 12/73] fix: fix doc 404 close #1310 --- .../docs/.vitepress/devui-theme/Layout.vue | 7 ++-- .../devui-theme/components/HomeFooter.vue | 2 +- .../devui-theme/components/NavBar.vue | 33 ++++++++++--------- .../devui-theme/components/NavLinks.vue | 3 +- .../devui-theme/components/PageToc.vue | 3 +- .../devui-theme/composables/sideBar.js | 6 ++-- .../docs/.vitepress/devui-theme/const.ts | 5 +++ 7 files changed, 35 insertions(+), 24 deletions(-) create mode 100644 packages/devui-vue/docs/.vitepress/devui-theme/const.ts diff --git a/packages/devui-vue/docs/.vitepress/devui-theme/Layout.vue b/packages/devui-vue/docs/.vitepress/devui-theme/Layout.vue index 99843d8582..2996ccec38 100644 --- a/packages/devui-vue/docs/.vitepress/devui-theme/Layout.vue +++ b/packages/devui-vue/docs/.vitepress/devui-theme/Layout.vue @@ -10,6 +10,7 @@ import HomeFooter from './components/HomeFooter.vue' import { CONTRIBUTORS_MAP } from './components/PageContributorConfig' import PageContributor from './components/PageContributor.vue' import { Button } from '@devui/button'; +import { LANG_KEY, ZH_CN, EN_US } from './const'; const Home = defineAsyncComponent(() => import('./components/Home.vue')) @@ -81,13 +82,13 @@ const pageClasses = computed(() => { // layout组件加载,初始化国际化语言. const result = location.pathname.match(/[a-zA-Z]*-[A-Z]*/) -const langList = ['zh-CN', 'en-US'] +const langList = [ZH_CN, EN_US] // 避免短横线分隔 (kebab-case)形式的路由命名导致读取语言错误 if (result && langList.includes(result[0])) { - localStorage.setItem('preferred_lang', result[0]) + localStorage.setItem(LANG_KEY, result[0]) } else { - localStorage.setItem('preferred_lang', navigator.language) + localStorage.setItem(LANG_KEY, navigator.language) } // Remove `__VP_STATIC_START__` diff --git a/packages/devui-vue/docs/.vitepress/devui-theme/components/HomeFooter.vue b/packages/devui-vue/docs/.vitepress/devui-theme/components/HomeFooter.vue index 9de704e7f2..49b246bc9e 100644 --- a/packages/devui-vue/docs/.vitepress/devui-theme/components/HomeFooter.vue +++ b/packages/devui-vue/docs/.vitepress/devui-theme/components/HomeFooter.vue @@ -23,7 +23,7 @@ const { frontmatter } = useData()
    • Ng DevUI
    • Vue DevUI
    • -
    • React DevUI
    • +
    • React DevUI
    • Ng DevUI Admin
    • DevUI Icons
    • DevUI Playground
    • diff --git a/packages/devui-vue/docs/.vitepress/devui-theme/components/NavBar.vue b/packages/devui-vue/docs/.vitepress/devui-theme/components/NavBar.vue index 38c5961239..1b74fbca6f 100644 --- a/packages/devui-vue/docs/.vitepress/devui-theme/components/NavBar.vue +++ b/packages/devui-vue/docs/.vitepress/devui-theme/components/NavBar.vue @@ -13,6 +13,7 @@ import ThemePicker from './ThemePicker.vue' import { Locale } from '@devui/locale' import enUS from '@devui/locale/lang/en-us' import zhCN from '@devui/locale/lang/zh-cn' +import { LANG_KEY, CURRENT_LANG, ZH_CN, EN_US } from '../const' // 主题切换 const THEME_MAP = { @@ -38,33 +39,33 @@ watch(currentTheme, (newVal) => { }) // 国际化 -const defaultLanguage = ref(localStorage.getItem('preferred_lang')) +const defaultLanguage = ref(CURRENT_LANG) function useTranslation(target) { defaultLanguage.value = target - localStorage.setItem('preferred_lang', target) - if (target === 'en-US') { - location.pathname = `/en-US${location.pathname}` - } else if (target === 'zh-CN') { - location.pathname = `${location.pathname.split('/en-US')[1]}` + localStorage.setItem(LANG_KEY, target) + if (target === EN_US) { + location.pathname = `/${EN_US}${location.pathname}` + } else if (target === ZH_CN) { + location.pathname = location.pathname.split(`/${EN_US}`)[1]; } } defineEmits(['toggle']) const LANG_MAP = { - 'zh-CN': '中文', - 'en-US': 'English', + [ZH_CN]: '中文', + [EN_US]: 'English', } -const currentLang = ref('zh-CN'); +const currentLang = ref(CURRENT_LANG); const app = getCurrentInstance(); const switchLang = () => { - if (currentLang.value === 'zh-CN') { - Locale.use('en-US', enUS); - currentLang.value = 'en-US'; + if (currentLang.value === ZH_CN) { + Locale.use(EN_US, enUS); + currentLang.value = EN_US; } else { - Locale.use('zh-CN', zhCN); - currentLang.value = 'zh-CN'; + Locale.use(ZH_CN, zhCN); + currentLang.value = ZH_CN; } app.appContext.config.globalProperties.langMessages.value = Locale.messages(); }; @@ -88,10 +89,10 @@ const switchLang = () => {
      - +
      theme.value.nav || repo.value || localeLinks.value) -let translationTheme = computed( () => localStorage.getItem('preferred_lang') === 'zh-CN' ? theme.value.nav : enNav ) +let translationTheme = computed( () => CURRENT_LANG === ZH_CN ? theme.value.nav : enNav )