mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 00:18:51 +08:00
perf: 优化国际化,路由不再传i18n
字段,平台自动读取根目录locales文件夹下文件进行国际化匹配
This commit is contained in:
parent
f35dea840e
commit
9067d88c3b
@ -82,3 +82,5 @@ menus:
|
||||
hsQrcode: Qrcode
|
||||
hsCascader: Area Cascader
|
||||
hsSwiper: Swiper Plugin
|
||||
status:
|
||||
hsLoad: Loading...
|
||||
|
@ -82,3 +82,5 @@ menus:
|
||||
hsQrcode: 二维码
|
||||
hsCascader: 区域级联选择器
|
||||
hsSwiper: Swiper插件
|
||||
status:
|
||||
hsLoad: 加载中...
|
||||
|
@ -8,7 +8,6 @@ const systemRouter = {
|
||||
meta: {
|
||||
icon: "setting",
|
||||
title: "menus.hssysManagement",
|
||||
i18n: true,
|
||||
rank: 11
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const systemRouter = {
|
||||
name: "user",
|
||||
meta: {
|
||||
icon: "flUser",
|
||||
title: "menus.hsUser",
|
||||
i18n: true
|
||||
title: "menus.hsUser"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -26,8 +24,7 @@ const systemRouter = {
|
||||
name: "role",
|
||||
meta: {
|
||||
icon: "role",
|
||||
title: "menus.hsRole",
|
||||
i18n: true
|
||||
title: "menus.hsRole"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -35,8 +32,7 @@ const systemRouter = {
|
||||
name: "dept",
|
||||
meta: {
|
||||
icon: "dept",
|
||||
title: "menus.hsDept",
|
||||
i18n: true
|
||||
title: "menus.hsDept"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -46,7 +42,6 @@ const systemRouter = {
|
||||
meta: {
|
||||
icon: "dict",
|
||||
title: "menus.hsDict",
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
}
|
||||
}
|
||||
@ -59,7 +54,6 @@ const permissionRouter = {
|
||||
meta: {
|
||||
title: "menus.permission",
|
||||
icon: "lollipop",
|
||||
i18n: true,
|
||||
rank: 7
|
||||
},
|
||||
children: [
|
||||
@ -67,8 +61,7 @@ const permissionRouter = {
|
||||
path: "/permission/page/index",
|
||||
name: "permissionPage",
|
||||
meta: {
|
||||
title: "menus.permissionPage",
|
||||
i18n: true
|
||||
title: "menus.permissionPage"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -76,7 +69,6 @@ const permissionRouter = {
|
||||
name: "permissionButton",
|
||||
meta: {
|
||||
title: "menus.permissionButton",
|
||||
i18n: true,
|
||||
authority: []
|
||||
}
|
||||
}
|
||||
@ -89,7 +81,6 @@ const frameRouter = {
|
||||
meta: {
|
||||
icon: "monitor",
|
||||
title: "menus.hsExternalPage",
|
||||
i18n: true,
|
||||
rank: 10
|
||||
},
|
||||
children: [
|
||||
@ -97,7 +88,6 @@ const frameRouter = {
|
||||
path: "/iframe/pure",
|
||||
name: "reFramePure",
|
||||
meta: {
|
||||
i18n: true,
|
||||
title: "menus.hsPureDocument",
|
||||
frameSrc: "https://pure-admin-doc.vercel.app"
|
||||
}
|
||||
@ -106,17 +96,15 @@ const frameRouter = {
|
||||
path: "/external",
|
||||
name: "https://pure-admin-doc.vercel.app",
|
||||
meta: {
|
||||
title: "menus.externalLink",
|
||||
i18n: true
|
||||
title: "menus.externalLink"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/iframe/ep",
|
||||
name: "reFrameEp",
|
||||
meta: {
|
||||
i18n: true,
|
||||
title: "menus.hsEpDocument",
|
||||
frameSrc: "https://element-plus.gitee.io/zh-CN/"
|
||||
frameSrc: "https://element-plus.org/zh-CN/"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -128,7 +116,6 @@ const tabsRouter = {
|
||||
meta: {
|
||||
icon: "IF-team-icontabs",
|
||||
title: "menus.hstabs",
|
||||
i18n: true,
|
||||
rank: 13
|
||||
},
|
||||
children: [
|
||||
@ -136,8 +123,7 @@ const tabsRouter = {
|
||||
path: "/tabs/index",
|
||||
name: "reTabs",
|
||||
meta: {
|
||||
title: "menus.hstabs",
|
||||
i18n: true
|
||||
title: "menus.hstabs"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -146,7 +132,6 @@ const tabsRouter = {
|
||||
meta: {
|
||||
title: "",
|
||||
showLink: false,
|
||||
i18n: false,
|
||||
dynamicLevel: 3,
|
||||
refreshRedirect: "/tabs/index"
|
||||
}
|
||||
|
32
package.json
32
package.json
@ -28,13 +28,13 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@amap/amap-jsapi-loader": "^1.0.1",
|
||||
"@ctrl/tinycolor": "^3.4.0",
|
||||
"@logicflow/core": "^1.1.14",
|
||||
"@logicflow/extension": "^1.1.14",
|
||||
"@ctrl/tinycolor": "^3.4.1",
|
||||
"@logicflow/core": "^1.1.15",
|
||||
"@logicflow/extension": "^1.1.15",
|
||||
"@pureadmin/components": "^1.0.6",
|
||||
"@vueuse/core": "^8.3.1",
|
||||
"@vueuse/core": "^8.4.2",
|
||||
"@vueuse/motion": "^2.0.0-beta.12",
|
||||
"@vueuse/shared": "^8.3.1",
|
||||
"@vueuse/shared": "^8.4.2",
|
||||
"@wangeditor/editor": "^5.0.1",
|
||||
"@wangeditor/editor-for-vue": "^5.1.10",
|
||||
"animate.css": "^4.1.1",
|
||||
@ -42,10 +42,10 @@
|
||||
"china-area-data": "^5.0.1",
|
||||
"cropperjs": "^1.5.12",
|
||||
"css-color-function": "^1.3.3",
|
||||
"dayjs": "^1.11.0",
|
||||
"dayjs": "^1.11.2",
|
||||
"driver.js": "^0.9.8",
|
||||
"echarts": "^5.3.2",
|
||||
"element-plus": "^2.1.11",
|
||||
"element-plus": "2.1.11",
|
||||
"element-resize-detector": "^1.2.3",
|
||||
"js-cookie": "^3.0.1",
|
||||
"jsbarcode": "^3.11.5",
|
||||
@ -56,7 +56,7 @@
|
||||
"mockjs": "^1.1.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"path": "^0.12.7",
|
||||
"pinia": "^2.0.13",
|
||||
"pinia": "^2.0.14",
|
||||
"qrcode": "^1.5.0",
|
||||
"qs": "^6.10.1",
|
||||
"resize-observer-polyfill": "^1.5.1",
|
||||
@ -68,12 +68,12 @@
|
||||
"vue-form-create2": "^1.2.8",
|
||||
"vue-i18n": "^9.2.0-beta.35",
|
||||
"vue-json-pretty": "^2.0.2",
|
||||
"vue-router": "^4.0.14",
|
||||
"vue-router": "^4.0.15",
|
||||
"vue-types": "^4.1.1",
|
||||
"vuedraggable": "4.1.0",
|
||||
"vxe-table": "^4.2.0",
|
||||
"vxe-table": "^4.2.3",
|
||||
"xe-utils": "^3.5.4",
|
||||
"xgplayer": "^2.31.4"
|
||||
"xgplayer": "^2.31.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "13.1.0",
|
||||
@ -100,8 +100,8 @@
|
||||
"@types/qs": "^6.9.7",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
||||
"@typescript-eslint/parser": "^5.10.2",
|
||||
"@vitejs/plugin-legacy": "^1.8.1",
|
||||
"@vitejs/plugin-vue": "^2.3.1",
|
||||
"@vitejs/plugin-legacy": "^1.8.2",
|
||||
"@vitejs/plugin-vue": "^2.3.2",
|
||||
"@vitejs/plugin-vue-jsx": "^1.3.10",
|
||||
"@vue/eslint-config-prettier": "^7.0.0",
|
||||
"@vue/eslint-config-typescript": "^10.0.0",
|
||||
@ -123,7 +123,7 @@
|
||||
"rimraf": "3.0.2",
|
||||
"rollup": "^2.70.1",
|
||||
"rollup-plugin-visualizer": "^5.6.0",
|
||||
"sass": "^1.50.1",
|
||||
"sass": "^1.51.0",
|
||||
"stylelint": "^14.3.0",
|
||||
"stylelint-config-html": "^1.0.0",
|
||||
"stylelint-config-prettier": "^9.0.3",
|
||||
@ -131,11 +131,11 @@
|
||||
"stylelint-config-standard": "^24.0.0",
|
||||
"stylelint-order": "^5.0.0",
|
||||
"typescript": "^4.6.3",
|
||||
"unocss": "^0.32.13",
|
||||
"unocss": "^0.33.2",
|
||||
"vite": "^2.9.6",
|
||||
"vite-plugin-mock": "^2.9.6",
|
||||
"vite-plugin-remove-console": "^0.0.7",
|
||||
"vite-svg-loader": "2.2.0",
|
||||
"vite-svg-loader": "^3.3.0",
|
||||
"vue-eslint-parser": "^8.2.0"
|
||||
},
|
||||
"repository": "git@github.com:xiaoxian521/vue-pure-admin.git",
|
||||
|
553
pnpm-lock.yaml
generated
553
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -68,7 +68,7 @@ function search() {
|
||||
resultOptions.value = flatMenusData.filter(
|
||||
menu =>
|
||||
keyword.value &&
|
||||
transformI18n(menu.meta?.title, menu.meta?.i18n)
|
||||
transformI18n(menu.meta?.title)
|
||||
.toLocaleLowerCase()
|
||||
.includes(keyword.value.toLocaleLowerCase().trim())
|
||||
);
|
||||
|
@ -157,8 +157,7 @@ function onReset() {
|
||||
parentPath: "/",
|
||||
meta: {
|
||||
title: "menus.hshome",
|
||||
icon: "home-filled",
|
||||
i18n: true
|
||||
icon: "home-filled"
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
@ -65,7 +65,7 @@ const getBreadcrumb = (): void => {
|
||||
{
|
||||
path: "/welcome",
|
||||
parentPath: "/",
|
||||
meta: { title: "menus.hshome", i18n: true }
|
||||
meta: { title: "menus.hshome" }
|
||||
} as unknown as RouteLocationMatched
|
||||
].concat(matched);
|
||||
}
|
||||
@ -104,10 +104,10 @@ const handleLink = (item: RouteLocationMatched): any => {
|
||||
<span
|
||||
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
|
||||
class="no-redirect"
|
||||
>{{ transformI18n(item.meta.title, item.meta.i18n) }}</span
|
||||
>{{ transformI18n(item.meta.title) }}</span
|
||||
>
|
||||
<a v-else @click.prevent="handleLink(item)">
|
||||
{{ transformI18n(item.meta.title, item.meta.i18n) }}
|
||||
{{ transformI18n(item.meta.title) }}
|
||||
</a>
|
||||
</el-breadcrumb-item>
|
||||
</transition-group>
|
||||
|
@ -127,7 +127,7 @@ function translationEn() {
|
||||
<div v-show="route.meta.icon" :class="['el-icon', route.meta.icon]">
|
||||
<component :is="useRenderIcon(route.meta && route.meta.icon)" />
|
||||
</div>
|
||||
<span>{{ transformI18n(route.meta.title, route.meta.i18n) }}</span>
|
||||
<span>{{ transformI18n(route.meta.title) }}</span>
|
||||
<FontIcon
|
||||
v-if="route.meta.extraIcon"
|
||||
width="30px"
|
||||
|
@ -167,13 +167,13 @@ function resolvePath(routePath) {
|
||||
:style="getDivStyle"
|
||||
>
|
||||
<span :style="getMenuTextStyle">
|
||||
{{ transformI18n(onlyOneChild.meta.title, onlyOneChild.meta.i18n) }}
|
||||
{{ transformI18n(onlyOneChild.meta.title) }}
|
||||
</span>
|
||||
</div>
|
||||
<template #title>
|
||||
<div :style="getDivStyle">
|
||||
<span v-if="!menuMode">{{
|
||||
transformI18n(onlyOneChild.meta.title, onlyOneChild.meta.i18n)
|
||||
transformI18n(onlyOneChild.meta.title)
|
||||
}}</span>
|
||||
<el-tooltip
|
||||
v-else
|
||||
@ -182,18 +182,14 @@ function resolvePath(routePath) {
|
||||
:disabled="!onlyOneChild.showTooltip"
|
||||
>
|
||||
<template #content>
|
||||
{{
|
||||
transformI18n(onlyOneChild.meta.title, onlyOneChild.meta.i18n)
|
||||
}}
|
||||
{{ transformI18n(onlyOneChild.meta.title) }}
|
||||
</template>
|
||||
<span
|
||||
ref="menuTextRef"
|
||||
:style="getMenuTextStyle"
|
||||
@mouseover="hoverMenu(onlyOneChild)"
|
||||
>
|
||||
{{
|
||||
transformI18n(onlyOneChild.meta.title, onlyOneChild.meta.i18n)
|
||||
}}
|
||||
{{ transformI18n(onlyOneChild.meta.title) }}
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<FontIcon
|
||||
@ -221,9 +217,7 @@ function resolvePath(routePath) {
|
||||
:is="useRenderIcon(props.item.meta && props.item.meta.icon)"
|
||||
/>
|
||||
</div>
|
||||
<span v-if="!menuMode">{{
|
||||
transformI18n(props.item.meta.title, props.item.meta.i18n)
|
||||
}}</span>
|
||||
<span v-if="!menuMode">{{ transformI18n(props.item.meta.title) }}</span>
|
||||
<el-tooltip
|
||||
v-else
|
||||
placement="top"
|
||||
@ -231,7 +225,7 @@ function resolvePath(routePath) {
|
||||
:disabled="!pureApp.sidebar.opened || !props.item.showTooltip"
|
||||
>
|
||||
<template #content>
|
||||
{{ transformI18n(props.item.meta.title, props.item.meta.i18n) }}
|
||||
{{ transformI18n(props.item.meta.title) }}
|
||||
</template>
|
||||
<div
|
||||
ref="menuTextRef"
|
||||
@ -239,7 +233,7 @@ function resolvePath(routePath) {
|
||||
@mouseover="hoverMenu(props.item)"
|
||||
>
|
||||
<span :style="getSpanStyle">
|
||||
{{ transformI18n(props.item.meta.title, props.item.meta.i18n) }}
|
||||
{{ transformI18n(props.item.meta.title) }}
|
||||
</span>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
|
@ -3,6 +3,7 @@ import {
|
||||
ref,
|
||||
watch,
|
||||
unref,
|
||||
toRaw,
|
||||
reactive,
|
||||
nextTick,
|
||||
computed,
|
||||
@ -318,7 +319,6 @@ function deleteDynamicTag(obj: any, current: any, tag?: string) {
|
||||
parentPath: "/",
|
||||
meta: {
|
||||
title: "menus.hshome",
|
||||
i18n: true,
|
||||
icon: "home-filled"
|
||||
}
|
||||
},
|
||||
@ -662,7 +662,7 @@ const getContextMenuStyle = computed((): CSSProperties => {
|
||||
@click="tagOnClick(item)"
|
||||
>
|
||||
<router-link :to="item.path"
|
||||
>{{ transformI18n(item.meta.title, item.meta.i18n) }}
|
||||
>{{ transformI18n(item.meta.title) }}
|
||||
</router-link>
|
||||
<span
|
||||
v-if="
|
||||
@ -702,7 +702,7 @@ const getContextMenuStyle = computed((): CSSProperties => {
|
||||
style="display: flex; align-items: center"
|
||||
>
|
||||
<li v-if="item.show" @click="selectTag(key, item)">
|
||||
<component :is="item.icon" :key="key" />
|
||||
<component :is="toRaw(item.icon)" :key="key" />
|
||||
{{ t(item.text) }}
|
||||
</li>
|
||||
</div>
|
||||
@ -736,7 +736,7 @@ const getContextMenuStyle = computed((): CSSProperties => {
|
||||
:disabled="item.disabled"
|
||||
>
|
||||
<component
|
||||
:is="item.icon"
|
||||
:is="toRaw(item.icon)"
|
||||
:key="key"
|
||||
style="margin-right: 6px"
|
||||
/>
|
||||
|
@ -1,12 +1,19 @@
|
||||
<template>
|
||||
<div class="frame" v-loading="loading">
|
||||
<div
|
||||
class="frame"
|
||||
v-loading="loading"
|
||||
:element-loading-text="t('status.hsLoad')"
|
||||
>
|
||||
<iframe :src="frameSrc" class="frame-iframe" ref="frameRef" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { useRoute } from "vue-router";
|
||||
import { ref, unref, onMounted, nextTick } from "vue";
|
||||
|
||||
const { t } = useI18n();
|
||||
const loading = ref(false);
|
||||
const currentRoute = useRoute();
|
||||
const frameSrc = ref<string>("");
|
||||
@ -45,7 +52,7 @@ onMounted(() => {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.frame {
|
||||
height: 100vh;
|
||||
height: calc(100vh - 88px);
|
||||
z-index: 998;
|
||||
|
||||
.frame-iframe {
|
||||
@ -58,6 +65,6 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
.main-content {
|
||||
margin: 0 !important;
|
||||
margin: 2px 0 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
@ -38,9 +38,8 @@ export function useNav() {
|
||||
// 动态title
|
||||
function changeTitle(meta: routeMetaType) {
|
||||
const Title = getConfig().Title;
|
||||
if (Title)
|
||||
document.title = `${transformI18n(meta.title, meta.i18n)} | ${Title}`;
|
||||
else document.title = transformI18n(meta.title, meta.i18n);
|
||||
if (Title) document.title = `${transformI18n(meta.title)} | ${Title}`;
|
||||
else document.title = transformI18n(meta.title);
|
||||
}
|
||||
|
||||
// 退出登录
|
||||
|
@ -5,7 +5,6 @@ export const routerArrays: Array<RouteConfigs> = [
|
||||
parentPath: "/",
|
||||
meta: {
|
||||
title: "menus.hshome",
|
||||
i18n: true,
|
||||
icon: "home-filled"
|
||||
}
|
||||
}
|
||||
|
@ -30,15 +30,11 @@ export const localesConfigs = {
|
||||
};
|
||||
|
||||
/**
|
||||
* 国际化转换工具函数
|
||||
* 国际化转换工具函数(自动读取根目录locales文件夹下文件进行国际化匹配)
|
||||
* @param message message
|
||||
* @param isI18n 如果true,获取对应的消息,否则返回本身
|
||||
* @returns message
|
||||
* @returns 转化后的message
|
||||
*/
|
||||
export function transformI18n(
|
||||
message: string | unknown | object = "",
|
||||
isI18n: boolean | unknown = false
|
||||
) {
|
||||
export function transformI18n(message: any = "") {
|
||||
if (!message) {
|
||||
return "";
|
||||
}
|
||||
@ -50,7 +46,11 @@ export function transformI18n(
|
||||
return message[locale?.value];
|
||||
}
|
||||
|
||||
if (isI18n) {
|
||||
const key = message.match(/(\S*)\./)?.[1];
|
||||
if (key && Object.keys(siphonI18n("zh-CN")).includes(key)) {
|
||||
return i18n.global.t.call(i18n.global.locale, message);
|
||||
} else if (!key && Object.keys(siphonI18n("zh-CN")).includes(message)) {
|
||||
// 兼容非嵌套形式的国际化写法
|
||||
return i18n.global.t.call(i18n.global.locale, message);
|
||||
} else {
|
||||
return message;
|
||||
|
@ -115,11 +115,8 @@ router.beforeEach((to: toRouteType, _from, next) => {
|
||||
if (!item.meta.title) return "";
|
||||
const Title = getConfig().Title;
|
||||
if (Title)
|
||||
document.title = `${transformI18n(
|
||||
item.meta.title,
|
||||
item.meta?.i18n
|
||||
)} | ${Title}`;
|
||||
else document.title = transformI18n(item.meta.title, item.meta?.i18n);
|
||||
document.title = `${transformI18n(item.meta.title)} | ${Title}`;
|
||||
else document.title = transformI18n(item.meta.title);
|
||||
});
|
||||
if (name) {
|
||||
if (_from?.name) {
|
||||
|
@ -8,7 +8,6 @@ const ableRouter = {
|
||||
meta: {
|
||||
icon: "ubuntu-fill",
|
||||
title: $t("menus.hsAble"),
|
||||
i18n: true,
|
||||
rank: 4
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const ableRouter = {
|
||||
name: "reWatermark",
|
||||
component: () => import("/@/views/able/watermark.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsWatermark"),
|
||||
i18n: true
|
||||
title: $t("menus.hsWatermark")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -26,8 +24,7 @@ const ableRouter = {
|
||||
name: "rePrint",
|
||||
component: () => import("/@/views/able/print.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsPrint"),
|
||||
i18n: true
|
||||
title: $t("menus.hsPrint")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -35,8 +32,7 @@ const ableRouter = {
|
||||
name: "reIconSelect",
|
||||
component: () => import("/@/views/able/icon-select.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsIconSelect"),
|
||||
i18n: true
|
||||
title: $t("menus.hsIconSelect")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -44,8 +40,7 @@ const ableRouter = {
|
||||
name: "reTimeline",
|
||||
component: () => import("/@/views/able/timeline.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsTimeline"),
|
||||
i18n: true
|
||||
title: $t("menus.hsTimeline")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -53,8 +48,7 @@ const ableRouter = {
|
||||
name: "reMenuTree",
|
||||
component: () => import("/@/views/able/menu-tree.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsMenuTree"),
|
||||
i18n: true
|
||||
title: $t("menus.hsMenuTree")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -62,8 +56,7 @@ const ableRouter = {
|
||||
name: "reLineTree",
|
||||
component: () => import("/@/views/able/line-tree.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsLineTree"),
|
||||
i18n: true
|
||||
title: $t("menus.hsLineTree")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -71,8 +64,7 @@ const ableRouter = {
|
||||
name: "reAntTabs",
|
||||
component: () => import("/@/views/able/ant-tabs.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsAntTabs"),
|
||||
i18n: true
|
||||
title: $t("menus.hsAntTabs")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -80,8 +72,7 @@ const ableRouter = {
|
||||
name: "reAntAnchor",
|
||||
component: () => import("/@/views/able/ant-anchor.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsAntAnchor"),
|
||||
i18n: true
|
||||
title: $t("menus.hsAntAnchor")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -89,8 +80,7 @@ const ableRouter = {
|
||||
name: "reAntTreeSelect",
|
||||
component: () => import("/@/views/able/ant-treeSelect.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsAntTreeSelect"),
|
||||
i18n: true
|
||||
title: $t("menus.hsAntTreeSelect")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -98,8 +88,7 @@ const ableRouter = {
|
||||
name: "reDebounce",
|
||||
component: () => import("/@/views/able/debounce.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsDebounce"),
|
||||
i18n: true
|
||||
title: $t("menus.hsDebounce")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -107,8 +96,7 @@ const ableRouter = {
|
||||
name: "reBarcode",
|
||||
component: () => import("/@/views/able/barcode.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsBarcode"),
|
||||
i18n: true
|
||||
title: $t("menus.hsBarcode")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -116,8 +104,7 @@ const ableRouter = {
|
||||
name: "reQrcode",
|
||||
component: () => import("/@/views/able/qrcode.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsQrcode"),
|
||||
i18n: true
|
||||
title: $t("menus.hsQrcode")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -125,8 +112,7 @@ const ableRouter = {
|
||||
name: "reCascader",
|
||||
component: () => import("/@/views/able/cascader.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsCascader"),
|
||||
i18n: true
|
||||
title: $t("menus.hsCascader")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -134,8 +120,7 @@ const ableRouter = {
|
||||
name: "reSwiper",
|
||||
component: () => import("/@/views/able/swiper.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsSwiper"),
|
||||
i18n: true
|
||||
title: $t("menus.hsSwiper")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const aboutRouter = {
|
||||
meta: {
|
||||
icon: "question-line",
|
||||
title: $t("menus.hsAbout"),
|
||||
i18n: true,
|
||||
rank: 15
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const aboutRouter = {
|
||||
name: "reAbout",
|
||||
component: () => import("/@/views/about/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsAbout"),
|
||||
i18n: true
|
||||
title: $t("menus.hsAbout")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const componentsRouter = {
|
||||
meta: {
|
||||
icon: "menu",
|
||||
title: $t("menus.hscomponents"),
|
||||
i18n: true,
|
||||
rank: 5
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const componentsRouter = {
|
||||
name: "video",
|
||||
component: () => import("/@/views/components/video/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsvideo"),
|
||||
i18n: true
|
||||
title: $t("menus.hsvideo")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -28,7 +26,6 @@ const componentsRouter = {
|
||||
meta: {
|
||||
title: $t("menus.hsmap"),
|
||||
keepAlive: true,
|
||||
i18n: true,
|
||||
transition: {
|
||||
name: "fade"
|
||||
}
|
||||
@ -40,7 +37,6 @@ const componentsRouter = {
|
||||
component: () => import("/@/views/components/draggable/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsdraggable"),
|
||||
i18n: true,
|
||||
transition: {
|
||||
enterTransition: "animate__zoomIn",
|
||||
leaveTransition: "animate__zoomOut"
|
||||
@ -54,7 +50,6 @@ const componentsRouter = {
|
||||
component: () => import("/@/views/components/split-pane/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hssplitPane"),
|
||||
i18n: true,
|
||||
extraIcon: {
|
||||
svg: true,
|
||||
name: "team-iconxinpinrenqiwang"
|
||||
@ -66,8 +61,7 @@ const componentsRouter = {
|
||||
name: "button",
|
||||
component: () => import("/@/views/components/button/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsbutton"),
|
||||
i18n: true
|
||||
title: $t("menus.hsbutton")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -75,8 +69,7 @@ const componentsRouter = {
|
||||
name: "cropping",
|
||||
component: () => import("/@/views/components/cropping/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hscropping"),
|
||||
i18n: true
|
||||
title: $t("menus.hscropping")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -84,8 +77,7 @@ const componentsRouter = {
|
||||
name: "countTo",
|
||||
component: () => import("/@/views/components/count-to/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hscountTo"),
|
||||
i18n: true
|
||||
title: $t("menus.hscountTo")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -93,8 +85,7 @@ const componentsRouter = {
|
||||
name: "selector",
|
||||
component: () => import("/@/views/components/selector/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsselector"),
|
||||
i18n: true
|
||||
title: $t("menus.hsselector")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -102,8 +93,7 @@ const componentsRouter = {
|
||||
name: "seamlessScroll",
|
||||
component: () => import("/@/views/components/seamless-scroll/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsseamless"),
|
||||
i18n: true
|
||||
title: $t("menus.hsseamless")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -111,8 +101,7 @@ const componentsRouter = {
|
||||
name: "contextmenu",
|
||||
component: () => import("/@/views/components/contextmenu/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hscontextmenu"),
|
||||
i18n: true
|
||||
title: $t("menus.hscontextmenu")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const editorRouter = {
|
||||
meta: {
|
||||
icon: "edit",
|
||||
title: $t("menus.hseditor"),
|
||||
i18n: true,
|
||||
rank: 2
|
||||
},
|
||||
children: [
|
||||
@ -18,7 +17,6 @@ const editorRouter = {
|
||||
component: () => import("/@/views/editor/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hseditor"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ const errorRouter = {
|
||||
meta: {
|
||||
icon: "information-line",
|
||||
title: $t("menus.hserror"),
|
||||
i18n: true,
|
||||
rank: 9
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const errorRouter = {
|
||||
name: "403",
|
||||
component: () => import("/@/views/error/403.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsfourZeroOne"),
|
||||
i18n: true
|
||||
title: $t("menus.hsfourZeroOne")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -26,8 +24,7 @@ const errorRouter = {
|
||||
name: "404",
|
||||
component: () => import("/@/views/error/404.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsfourZeroFour"),
|
||||
i18n: true
|
||||
title: $t("menus.hsfourZeroFour")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -35,8 +32,7 @@ const errorRouter = {
|
||||
name: "500",
|
||||
component: () => import("/@/views/error/500.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsFive"),
|
||||
i18n: true
|
||||
title: $t("menus.hsFive")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const flowChartRouter = {
|
||||
meta: {
|
||||
icon: "set-up",
|
||||
title: $t("menus.hsflowChart"),
|
||||
i18n: true,
|
||||
rank: 1
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const flowChartRouter = {
|
||||
name: "flowChart",
|
||||
component: () => import("/@/views/flow-chart/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsflowChart"),
|
||||
i18n: true
|
||||
title: $t("menus.hsflowChart")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const formDesignRouter = {
|
||||
meta: {
|
||||
icon: "terminal-window-line",
|
||||
title: $t("menus.hsFormDesign"),
|
||||
i18n: true,
|
||||
rank: 2
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const formDesignRouter = {
|
||||
name: "formDesign",
|
||||
component: () => import("/@/views/form-design/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsFormDesign"),
|
||||
i18n: true
|
||||
title: $t("menus.hsFormDesign")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const guideRouter = {
|
||||
meta: {
|
||||
icon: "guide",
|
||||
title: $t("menus.hsguide"),
|
||||
i18n: true,
|
||||
rank: 14
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const guideRouter = {
|
||||
name: "reGuide",
|
||||
component: () => import("/@/views/guide/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsguide"),
|
||||
i18n: true
|
||||
title: $t("menus.hsguide")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -9,7 +9,6 @@ const homeRouter = {
|
||||
meta: {
|
||||
icon: "home-filled",
|
||||
title: $t("menus.hshome"),
|
||||
i18n: true,
|
||||
rank: 0
|
||||
},
|
||||
children: [
|
||||
@ -18,8 +17,7 @@ const homeRouter = {
|
||||
name: "welcome",
|
||||
component: () => import("/@/views/welcome.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hshome"),
|
||||
i18n: true
|
||||
title: $t("menus.hshome")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -8,7 +8,6 @@ const ableRouter = {
|
||||
meta: {
|
||||
icon: "list-check",
|
||||
title: $t("menus.hsList"),
|
||||
i18n: true,
|
||||
rank: 12
|
||||
},
|
||||
children: [
|
||||
@ -19,7 +18,6 @@ const ableRouter = {
|
||||
meta: {
|
||||
icon: "card",
|
||||
title: $t("menus.hsListCard"),
|
||||
i18n: true,
|
||||
showParent: true
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ const nestedRouter = {
|
||||
meta: {
|
||||
title: $t("menus.hsmenus"),
|
||||
icon: "histogram",
|
||||
i18n: true,
|
||||
rank: 6
|
||||
},
|
||||
children: [
|
||||
@ -16,7 +15,6 @@ const nestedRouter = {
|
||||
path: "/nested/menu1",
|
||||
meta: {
|
||||
title: $t("menus.hsmenu1"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
},
|
||||
redirect: "/nested/menu1/menu1-1",
|
||||
@ -27,7 +25,6 @@ const nestedRouter = {
|
||||
name: "Menu1-1",
|
||||
meta: {
|
||||
title: $t("menus.hsmenu1-1"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
}
|
||||
},
|
||||
@ -36,7 +33,6 @@ const nestedRouter = {
|
||||
redirect: "/nested/menu1/menu1-2/menu1-2-1",
|
||||
meta: {
|
||||
title: $t("menus.hsmenu1-2"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
},
|
||||
children: [
|
||||
@ -47,7 +43,6 @@ const nestedRouter = {
|
||||
name: "Menu1-2-1",
|
||||
meta: {
|
||||
title: $t("menus.hsmenu1-2-1"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
}
|
||||
},
|
||||
@ -59,7 +54,6 @@ const nestedRouter = {
|
||||
meta: {
|
||||
title: $t("menus.hsmenu1-2-2"),
|
||||
keepAlive: true,
|
||||
i18n: true,
|
||||
extraIcon: {
|
||||
svg: true,
|
||||
name: "team-iconxinpinrenqiwang"
|
||||
@ -74,7 +68,6 @@ const nestedRouter = {
|
||||
name: "Menu1-3",
|
||||
meta: {
|
||||
title: $t("menus.hsmenu1-3"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
}
|
||||
}
|
||||
@ -86,7 +79,6 @@ const nestedRouter = {
|
||||
component: () => import("/@/views/nested/menu2/index.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsmenu2"),
|
||||
i18n: true,
|
||||
keepAlive: true
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ const pptRouter = {
|
||||
meta: {
|
||||
icon: "ppt",
|
||||
title: "PPT",
|
||||
i18n: false,
|
||||
rank: 3
|
||||
},
|
||||
children: [
|
||||
@ -18,7 +17,6 @@ const pptRouter = {
|
||||
component: IFrame,
|
||||
meta: {
|
||||
title: "PPT",
|
||||
i18n: false,
|
||||
frameSrc: "https://pipipi-pikachu.github.io/PPTist/",
|
||||
extraIcon: {
|
||||
svg: true,
|
||||
|
@ -9,7 +9,6 @@ const remainingRouter = [
|
||||
meta: {
|
||||
title: $t("menus.hslogin"),
|
||||
showLink: false,
|
||||
i18n: true,
|
||||
rank: 101
|
||||
}
|
||||
},
|
||||
@ -19,7 +18,6 @@ const remainingRouter = [
|
||||
meta: {
|
||||
icon: "home-filled",
|
||||
title: $t("menus.hshome"),
|
||||
i18n: true,
|
||||
showLink: false,
|
||||
rank: 104
|
||||
},
|
||||
|
@ -8,7 +8,6 @@ const resultRouter = {
|
||||
meta: {
|
||||
icon: "checkbox-circle-line",
|
||||
title: $t("menus.hsResult"),
|
||||
i18n: true,
|
||||
rank: 8
|
||||
},
|
||||
children: [
|
||||
@ -17,8 +16,7 @@ const resultRouter = {
|
||||
name: "reSuccess",
|
||||
component: () => import("/@/views/result/success.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsSuccess"),
|
||||
i18n: true
|
||||
title: $t("menus.hsSuccess")
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -26,8 +24,7 @@ const resultRouter = {
|
||||
name: "reFail",
|
||||
component: () => import("/@/views/result/fail.vue"),
|
||||
meta: {
|
||||
title: $t("menus.hsFail"),
|
||||
i18n: true
|
||||
title: $t("menus.hsFail")
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -17,8 +17,7 @@ export const useMultiTagsStore = defineStore({
|
||||
parentPath: "/",
|
||||
meta: {
|
||||
title: "menus.hshome",
|
||||
icon: "home-filled",
|
||||
i18n: true
|
||||
icon: "home-filled"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
@ -68,8 +68,7 @@ export const useUserStore = defineStore({
|
||||
parentPath: "/",
|
||||
meta: {
|
||||
title: "menus.hshome",
|
||||
icon: "home-filled",
|
||||
i18n: true
|
||||
icon: "home-filled"
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
@ -46,7 +46,6 @@ export const injectResponsiveStorage = (app: App, config: ServerConfigs) => {
|
||||
parentPath: "/",
|
||||
meta: {
|
||||
title: "menus.hshome",
|
||||
i18n: true,
|
||||
icon: "home-filled"
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,6 @@ const { t } = useI18n();
|
||||
interface treeNode extends TreeNode {
|
||||
meta: {
|
||||
title: string;
|
||||
i18n: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
@ -41,7 +40,7 @@ const onQueryChanged = (query: string) => {
|
||||
};
|
||||
|
||||
const filterMethod = (query: string, node: treeNode) => {
|
||||
return transformI18n(node.meta.title, node.meta.i18n)!.indexOf(query) !== -1;
|
||||
return transformI18n(node.meta.title)!.indexOf(query) !== -1;
|
||||
};
|
||||
</script>
|
||||
|
||||
|
@ -8,6 +8,6 @@ import { Amap } from "/@/components/ReMap";
|
||||
|
||||
<style scoped>
|
||||
.main-content {
|
||||
margin: 0 !important;
|
||||
margin: 2px 0 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
@ -35,7 +35,6 @@ function toDetail(index: number) {
|
||||
meta: {
|
||||
title: { zh: `No.${index} - 详情信息`, en: `No.${index} - DetailInfo` },
|
||||
showLink: false,
|
||||
i18n: false,
|
||||
dynamicLevel: 3
|
||||
}
|
||||
});
|
||||
|
@ -12,6 +12,10 @@ export default defineConfig({
|
||||
presets: [presetMini({ dark: "class" }), presetAttributify(), presetUno()],
|
||||
transformers: [transformerDirectives(), transformerVariantGroup()],
|
||||
exclude: [`${__dirname}/node_modules/**/*`],
|
||||
shortcuts: {},
|
||||
shortcuts: {
|
||||
"wh-full": "w-full h-full",
|
||||
"flex-ac": "flex justify-around items-center",
|
||||
"flex-bc": "flex justify-between items-center"
|
||||
},
|
||||
theme: {}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user