diff --git a/mock/asyncRoutes.ts b/mock/asyncRoutes.ts index 3136434..6954db3 100644 --- a/mock/asyncRoutes.ts +++ b/mock/asyncRoutes.ts @@ -9,6 +9,7 @@ const permissionRouter = { meta: { title: "message.permission", icon: "Lollipop", + i18n: true, showLink: true, rank: 3 }, @@ -18,6 +19,7 @@ const permissionRouter = { name: "permissionPage", meta: { title: "message.permissionPage", + i18n: true, showLink: true } }, @@ -26,6 +28,7 @@ const permissionRouter = { name: "permissionButton", meta: { title: "message.permissionButton", + i18n: true, showLink: true, authority: [] } diff --git a/src/components/ReIcon/index.ts b/src/components/ReIcon/index.ts index 441416b..41bf519 100644 --- a/src/components/ReIcon/index.ts +++ b/src/components/ReIcon/index.ts @@ -1,5 +1,7 @@ -import { App } from "vue"; +import { App, defineComponent } from "vue"; import icon from "./src/Icon.vue"; +import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; +import { iconComponents } from "/@/plugins/element-plus"; export const Icon = Object.assign(icon, { install(app: App) { @@ -10,3 +12,37 @@ export const Icon = Object.assign(icon, { export default { Icon }; +/** + * find icon component + * @param icon icon图标 + * @returns component + */ +export function findIconReg(icon: string) { + const faReg = /^fa-/; + if (faReg.test(icon)) { + return findIcon(icon.split(faReg)[1]); + } else { + return findIcon(icon, false); + } +} +export function findIcon(icon: String, isFa: Boolean = true) { + if (isFa) { + return defineComponent({ + name: "FaIcon", + data() { + return { icon: icon }; + }, + components: { FontAwesomeIcon }, + template: `` + }); + } else { + const components = iconComponents.filter( + component => component.name === icon + ); + if (components.length > 0) { + return components[0]; + } else { + return null; + } + } +} diff --git a/src/layout/components/navbar.vue b/src/layout/components/navbar.vue index ee1e12e..17da9d3 100644 --- a/src/layout/components/navbar.vue +++ b/src/layout/components/navbar.vue @@ -10,6 +10,7 @@ import { unref, watch, getCurrentInstance } from "vue"; import { deviceDetection } from "/@/utils/deviceDetection"; import screenfull from "../components/screenfull/index.vue"; import globalization from "/@/assets/svg/globalization.svg"; +import { transformI18n } from "/@/utils/i18n"; const instance = getCurrentInstance().appContext.config.globalProperties.$storage; @@ -17,13 +18,17 @@ const pureApp = useAppStoreHook(); const router = useRouter(); const route = useRoute(); let usename = storageSession.getItem("info")?.username; -const { locale, t } = useI18n(); +const { locale } = useI18n(); watch( () => locale.value, () => { //@ts-ignore - document.title = t(unref(route.meta.title)); // 动态title + document.title = transformI18n( + //@ts-ignore + unref(route.meta.title), + unref(route.meta.i18n) + ); // 动态title } ); diff --git a/src/layout/components/sidebar/breadCrumb.vue b/src/layout/components/sidebar/breadCrumb.vue index dbcd686..393b147 100644 --- a/src/layout/components/sidebar/breadCrumb.vue +++ b/src/layout/components/sidebar/breadCrumb.vue @@ -1,6 +1,7 @@