Skip to content

静态路由配置 ​

无子路由 ​

创建页面 ​

  • src/views/user/index.vue
vue
<script setup lang="ts">
import { Page } from "@vben/common-ui";

import { ElButton, ElMessage } from "element-plus";

function handleClick() {
  ElMessage.success("点击了按钮");
}
</script>

<template>
  <Page description="User页面" title="User使用">
    <ElCard>
      <template #header>
        <div class="flex items-center">
          <span class="flex-auto">User使用</span>
          <ElButton type="primary" @click="handleClick">点击按钮</ElButton>
        </div>
      </template>
      <Form />
    </ElCard>
  </Page>
</template>

<style lang="scss" scoped></style>

修改路由 ​

  • src/router/routes/modules/user.ts
tsx
import type { RouteRecordRaw } from "vue-router";

import { BasicLayout } from "#/layouts";
import { $t } from "#/locales";

const routes: RouteRecordRaw[] = [
  {
    component: BasicLayout,
    meta: {
      icon: "ic:baseline-person",
      keepAlive: true,
      order: 999, // 菜单排序
      title: $t("user.title"),
      hideChildrenInMenu: true,
    },
    name: "User",
    path: "/user",
    redirect: "/user/index",
    children: [
      {
        meta: {
          title: $t("user.title"),
        },
        name: "UserIndex",
        path: "/user/index",
        component: () => import("#/views/user/index.vue"),
      },
    ],
  },
];

export default routes;
  • src/locales/langs/zh-CN/user.json
json
{
  "title": "用户",
  "index": "用户管理"
}
  • src/locales/langs/en-US/user.json
json
{
  "title": "User",
  "index": "User Management"
}

有子路由 ​

创建两个页面 ​

  • src/views/blog/article/index.vue
vue
<script setup lang="ts">
import { Page } from "@vben/common-ui";

import { ElButton, ElMessage } from "element-plus";

function handleClick() {
  ElMessage.success("点击了按钮");
}
</script>

<template>
  <Page description="文章页面" title="文章详情">
    <ElCard>
      <template #header>
        <div class="flex items-center">
          <span class="flex-auto">文章详情</span>
          <ElButton type="primary" @click="handleClick">点击按钮</ElButton>
        </div>
      </template>
      <Form />
    </ElCard>
  </Page>
</template>

<style lang="scss" scoped></style>
  • src/views/blog/tags/index.vue
vue
<script setup lang="ts">
import { Page } from "@vben/common-ui";

import { ElButton, ElMessage } from "element-plus";

function handleClick() {
  ElMessage.success("点击了按钮");
}
</script>

<template>
  <Page description="标签页面" title="标签列表">
    <ElCard>
      <template #header>
        <div class="flex items-center">
          <span class="flex-auto">标签列表</span>
          <ElButton type="primary" @click="handleClick">点击按钮</ElButton>
        </div>
      </template>
      <Form />
    </ElCard>
  </Page>
</template>

<style lang="scss" scoped></style>

修改路由 ​

  • src/router/routes/modules/blog.ts
ts
import type { RouteRecordRaw } from "vue-router";

import { BasicLayout } from "#/layouts";
import { $t } from "#/locales";

const routes: RouteRecordRaw[] = [
  {
    component: BasicLayout,
    meta: {
      icon: "ic:baseline-article",
      keepAlive: true,
      order: 10_001,
      title: $t("blog.title"),
    },
    name: "Blog",
    path: "/blog",
    children: [
      {
        meta: {
          title: $t("blog.article"),
          icon: "ic:baseline-article",
        },
        name: "BlogArticle",
        path: "/blog/article",
        component: () => import("#/views/blog/article/index.vue"),
      },
      {
        meta: {
          title: $t("blog.tags"),
          icon: "ic:baseline-article",
        },
        name: "BlogTags",
        path: "/blog/tags",
        component: () => import("#/views/blog/tags/index.vue"),
      },
    ],
  },
];

export default routes;
  • src/locales/langs/zh-CN/blog.json
json
{
  "title": "博客",
  "article": "文章管理",
  "tags": "标签管理"
}
  • src/locales/langs/en-US/blog.json
json
{
  "title": "Blog",
  "article": "Articles",
  "tags": "Tags"
}

菜单隐藏 ​

  • 重点在每个路由的meta里面写
字段作用
hideInMenu在菜单中隐藏( 当前需求 )
hideInTab不在标签页(Tabs)中显示
hideInBreadcrumb不在面包屑中显示
hideChildrenInMenu隐藏所有子菜单(用于父级路由)