Browse Source

perf(i18n): improve circular dependencies

Vben 3 years ago
parent
commit
d677729acb

+ 2 - 18
src/components/Application/src/AppDarkModeToggle.vue

@@ -29,17 +29,12 @@
   export default defineComponent({
     name: 'DarkModeToggle',
     components: { SvgIcon },
-    // props: {
-    //   size: {
-    //     type: String,
-    //     default: 'default',
-    //     validate: (val) => ['default', 'large'].includes(val),
-    //   },
-    // },
     setup() {
       const { prefixCls } = useDesign('dark-mode-toggle');
       const { getDarkMode, setDarkMode, getShowDarkModeToggle } = useRootSetting();
+
       const isDark = computed(() => getDarkMode.value === ThemeEnum.DARK);
+
       function toggleDarkMode() {
         const darkMode = getDarkMode.value === ThemeEnum.DARK ? ThemeEnum.LIGHT : ThemeEnum.DARK;
         setDarkMode(darkMode);
@@ -95,16 +90,5 @@
         transform: translateX(calc(100% + 2px));
       }
     }
-
-    // &--large {
-    //   width: 70px;
-    //   height: 34px;
-    //   padding: 0 10px;
-
-    //   .@{prefix-cls}-inner {
-    //     width: 26px;
-    //     height: 26px;
-    //   }
-    // }
   }
 </style>

+ 0 - 9
src/components/Application/src/search/AppSearch.vue

@@ -1,20 +1,14 @@
 <script lang="tsx">
   import { defineComponent, ref, unref } from 'vue';
-
   import { Tooltip } from 'ant-design-vue';
   import { SearchOutlined } from '@ant-design/icons-vue';
   import AppSearchModal from './AppSearchModal.vue';
-
-  import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
   import { useI18n } from '/@/hooks/web/useI18n';
-
   export default defineComponent({
     name: 'AppSearch',
-    components: { AppSearchModal, Tooltip },
     setup() {
       const showModal = ref(false);
 
-      const { getShowSearch } = useHeaderSetting();
       const { t } = useI18n();
 
       function changeModal(show: boolean) {
@@ -22,9 +16,6 @@
       }
 
       return () => {
-        if (!unref(getShowSearch)) {
-          return null;
-        }
         return (
           <div class="p-1" onClick={changeModal.bind(null, true)}>
             <Tooltip>

+ 0 - 4
src/components/Application/src/search/AppSearchFooter.vue

@@ -2,21 +2,17 @@
   <div :class="`${prefixCls}`">
     <AppSearchKeyItem :class="`${prefixCls}__item`" icon="ant-design:enter-outlined" />
     <span>{{ t('component.app.toSearch') }}</span>
-
     <AppSearchKeyItem :class="`${prefixCls}__item`" icon="ion:arrow-up-outline" />
     <AppSearchKeyItem :class="`${prefixCls}__item`" icon="ion:arrow-down-outline" />
     <span>{{ t('component.app.toNavigate') }}</span>
     <AppSearchKeyItem :class="`${prefixCls}__item`" icon="mdi:keyboard-esc" />
-
     <span>{{ t('common.closeText') }}</span>
   </div>
 </template>
 
 <script lang="ts">
   import { defineComponent } from 'vue';
-
   import AppSearchKeyItem from './AppSearchKeyItem.vue';
-
   import { useDesign } from '/@/hooks/web/useDesign';
   import { useI18n } from '/@/hooks/web/useI18n';
   export default defineComponent({

+ 8 - 10
src/components/Application/src/search/AppSearchModal.vue

@@ -85,7 +85,7 @@
       visible: propTypes.bool,
     },
     emits: ['close'],
-    setup(_, { emit }) {
+    setup(props, { emit }) {
       const scrollWrap = ref<ElRef>(null);
       const { prefixCls } = useDesign('app-search-modal');
       const { t } = useI18n();
@@ -96,9 +96,7 @@
       const { handleSearch, searchResult, keyword, activeIndex, handleEnter, handleMouseenter } =
         useMenuSearch(refs, scrollWrap, emit);
 
-      const getIsNotData = computed(() => {
-        return !keyword || unref(searchResult).length === 0;
-      });
+      const getIsNotData = computed(() => !keyword || unref(searchResult).length === 0);
 
       const getClass = computed(() => {
         return [
@@ -109,13 +107,8 @@
         ];
       });
 
-      function handleClose() {
-        searchResult.value = [];
-        emit('close');
-      }
-
       watch(
-        () => _.visible,
+        () => props.visible,
         (v: boolean) => {
           v &&
             nextTick(() => {
@@ -124,6 +117,11 @@
         }
       );
 
+      function handleClose() {
+        searchResult.value = [];
+        emit('close');
+      }
+
       return {
         t,
         prefixCls,

+ 3 - 1
src/layouts/default/header/index.vue

@@ -33,7 +33,7 @@
 
     <!-- action  -->
     <div :class="`${prefixCls}-action`">
-      <AppSearch :class="`${prefixCls}-action__item `" />
+      <AppSearch :class="`${prefixCls}-action__item `" v-if="getShowSearch" />
 
       <ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
 
@@ -123,6 +123,7 @@
         getShowBread,
         getShowHeaderLogo,
         getShowHeader,
+        getShowSearch,
       } = useHeaderSetting();
 
       const { getShowLocalePicker } = useLocale();
@@ -190,6 +191,7 @@
         getIsMixSidebar,
         getShowSettingButton,
         getShowSetting,
+        getShowSearch,
       };
     },
   });

+ 12 - 0
src/locales/helper.ts

@@ -1,5 +1,17 @@
+import type { LocaleType } from '/#/config';
+
 import { set } from 'lodash-es';
 
+export const loadLocalePool: LocaleType[] = [];
+
+export function setHtmlPageLang(locale: LocaleType) {
+  document.querySelector('html')?.setAttribute('lang', locale);
+}
+
+export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) {
+  cb(loadLocalePool);
+}
+
 export function genMessage(langs: Record<string, Record<string, any>>, prefix = 'lang') {
   const obj: Recordable = {};
 

+ 3 - 4
src/locales/setupI18n.ts

@@ -2,8 +2,7 @@ import type { App } from 'vue';
 import type { I18n, I18nOptions } from 'vue-i18n';
 
 import { createI18n } from 'vue-i18n';
-
-import { setLoadLocalePool, setHtmlPageLang } from './useLocale';
+import { setHtmlPageLang, setLoadLocalePool } from './helper';
 import { localeSetting } from '/@/settings/localeSetting';
 import { useLocaleStoreWithOut } from '/@/store/modules/locale';
 
@@ -16,8 +15,8 @@ async function createI18nOptions(): Promise<I18nOptions> {
   const locale = localeStore.getLocale;
   const defaultLocal = await import(`./lang/${locale}.ts`);
   const message = defaultLocal.default?.message ?? {};
-  
-  setHtmlPageLang(locale)
+
+  setHtmlPageLang(locale);
   setLoadLocalePool((loadLocalePool) => {
     loadLocalePool.push(locale);
   });

+ 2 - 11
src/locales/useLocale.ts

@@ -8,6 +8,7 @@ import moment from 'moment';
 import { i18n } from './setupI18n';
 import { useLocaleStoreWithOut } from '/@/store/modules/locale';
 import { unref, computed } from 'vue';
+import { loadLocalePool, setHtmlPageLang } from './helper';
 
 interface LangModule {
   message: Recordable;
@@ -15,16 +16,6 @@ interface LangModule {
   momentLocaleName: string;
 }
 
-const loadLocalePool: LocaleType[] = [];
-
-export function setHtmlPageLang(locale: LocaleType) {
-  document.querySelector('html')?.setAttribute('lang', locale);
-}
-
-export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) {
-  cb(loadLocalePool);
-}
-
 function setI18nLanguage(locale: LocaleType) {
   const localeStore = useLocaleStoreWithOut();
 
@@ -34,7 +25,7 @@ function setI18nLanguage(locale: LocaleType) {
     (i18n.global.locale as any).value = locale;
   }
   localeStore.setLocaleInfo({ locale });
-  setHtmlPageLang(locale)
+  setHtmlPageLang(locale);
 }
 
 export function useLocale() {