提交 0d733b2d 作者: 方治民

feat: 添加 TODO 功能菜单

上级 4dc33865
...@@ -162,7 +162,7 @@ export default { ...@@ -162,7 +162,7 @@ export default {
page: '引导页', page: '引导页',
}, },
example: { example: {
example: '示例', example: '示例',
api: 'API 示例', api: 'API 示例',
hideLayout: '测试 - 隐藏布局', hideLayout: '测试 - 隐藏布局',
fullScreen: '测试 - 自动全屏', fullScreen: '测试 - 自动全屏',
...@@ -174,8 +174,43 @@ export default { ...@@ -174,8 +174,43 @@ export default {
account_detail: '账号详情', account_detail: '账号详情',
password: '修改密码', password: '修改密码',
dept: '部门管理', dept: '部门管理',
post: '岗位管理',
menu: '菜单管理', menu: '菜单管理',
role: '角色管理', role: '角色管理',
dict: '字典管理',
category: '类别管理',
region: '地区管理',
},
monitor: {
moduleName: '系统监控',
schedule: '定时任务',
log: {
moduleName: '日志管理',
login: '登录日志',
operate: '操作日志',
},
server: '性能监控',
sql: 'SQL 监控',
trace: '请求追踪',
user: '在线用户',
},
tools: {
moduleName: '系统工具',
file: '文件管理',
database: '数据源管理',
form: '表单设计',
process: '流程设计',
online: {
moduleName: '在线开发',
form: '在线表单',
report: '在线报表',
chart: '在线图表',
},
doc: {
moduleName: '系统文档',
api: 'API 文档',
database: '数据库文档',
},
}, },
table: { table: {
table: 'Table', table: 'Table',
......
...@@ -9,8 +9,8 @@ const setup: AppRouteModule = { ...@@ -9,8 +9,8 @@ const setup: AppRouteModule = {
component: LAYOUT, component: LAYOUT,
redirect: '/example/index', redirect: '/example/index',
meta: { meta: {
orderNo: 90001, orderNo: 90000,
icon: 'healthicons:virus-lab-research-test-tube-outline', icon: 'fluent-emoji-high-contrast:test-tube',
title: t('routes.demo.example.example'), title: t('routes.demo.example.example'),
}, },
children: [ children: [
...@@ -20,7 +20,6 @@ const setup: AppRouteModule = { ...@@ -20,7 +20,6 @@ const setup: AppRouteModule = {
component: () => import('/@/views/demo/example/index.vue'), component: () => import('/@/views/demo/example/index.vue'),
meta: { meta: {
title: t('routes.demo.example.api'), title: t('routes.demo.example.api'),
icon: 'healthicons:virus-lab-research-test-tube-outline',
}, },
}, },
{ {
...@@ -29,7 +28,6 @@ const setup: AppRouteModule = { ...@@ -29,7 +28,6 @@ const setup: AppRouteModule = {
component: () => import('/@/views/demo/example/index.vue'), component: () => import('/@/views/demo/example/index.vue'),
meta: { meta: {
title: t('routes.demo.example.hideLayout'), title: t('routes.demo.example.hideLayout'),
icon: 'healthicons:virus-lab-research-test-tube-outline',
hideLayout: true, hideLayout: true,
}, },
}, },
...@@ -39,7 +37,6 @@ const setup: AppRouteModule = { ...@@ -39,7 +37,6 @@ const setup: AppRouteModule = {
component: () => import('/@/views/demo/example/index.vue'), component: () => import('/@/views/demo/example/index.vue'),
meta: { meta: {
title: t('routes.demo.example.fullScreen'), title: t('routes.demo.example.fullScreen'),
icon: 'healthicons:virus-lab-research-test-tube-outline',
hideLayout: true, hideLayout: true,
autoFullScreen: true, autoFullScreen: true,
}, },
......
import type { AppRouteModule } from '/@/router/types'
import { LAYOUT } from '/@/router/constant'
import { t } from '/@/hooks/web/useI18n'
const monitor: AppRouteModule = {
path: '/monitor',
name: 'Monitor',
component: LAYOUT,
redirect: '/monitor/server',
meta: {
orderNo: 2002,
icon: 'tabler:heart-rate-monitor',
title: t('routes.demo.monitor.moduleName'),
},
children: [
{
path: 'user',
name: 'UserMonitor',
meta: {
title: t('routes.demo.monitor.user'),
icon: 'mdi:user-group',
},
component: () => import('/@/views/demo/monitor/server/index.vue'),
},
{
path: 'server',
name: 'ServerMonitor',
meta: {
title: t('routes.demo.monitor.server'),
icon: 'carbon:cloud-lightning',
},
component: () => import('/@/views/demo/monitor/server/index.vue'),
},
{
path: 'sql',
name: 'SqlMonitor',
meta: {
title: t('routes.demo.monitor.sql'),
icon: 'mdi:sql-query',
},
component: () => import('/@/views/demo/monitor/sql/index.vue'),
},
{
path: 'trace',
name: 'TraceMonitor',
meta: {
title: t('routes.demo.monitor.trace'),
icon: 'icon-park-outline:trace',
},
component: () => import('/@/views/demo/monitor/trace/index.vue'),
},
{
path: 'schedule',
name: 'ScheduleManagement',
meta: {
title: t('routes.demo.monitor.schedule'),
icon: 'ic:outline-access-time',
},
component: () => import('/@/views/demo/monitor/schedule/index.vue'),
},
{
path: 'log',
name: 'LogMonitor',
component: LAYOUT,
redirect: '/system/log/login',
meta: {
title: t('routes.demo.monitor.log.moduleName'),
icon: 'icon-park-outline:log',
},
children: [
{
path: 'login',
name: 'LogLoginMonitor',
meta: {
title: t('routes.demo.monitor.log.login'),
icon: 'mdi:login-variant',
},
component: () => import('/@/views/demo/monitor/log/login/index.vue'),
},
{
path: 'operate',
name: 'LogOperateMonitor',
meta: {
title: t('routes.demo.monitor.log.operate'),
icon: 'carbon:operations-record',
},
component: () => import('/@/views/demo/monitor/log/operate/index.vue'),
},
],
},
],
}
export default monitor
...@@ -9,7 +9,7 @@ const setup: AppRouteModule = { ...@@ -9,7 +9,7 @@ const setup: AppRouteModule = {
component: LAYOUT, component: LAYOUT,
redirect: '/setup/index', redirect: '/setup/index',
meta: { meta: {
orderNo: 90000, orderNo: 90001,
hideChildrenInMenu: true, hideChildrenInMenu: true,
icon: 'whh:paintroll', icon: 'whh:paintroll',
title: t('routes.demo.setup.page'), title: t('routes.demo.setup.page'),
......
import type { AppRouteModule } from '/@/router/types'
import { LAYOUT } from '/@/router/constant'
import { t } from '/@/hooks/web/useI18n'
const system: AppRouteModule = {
path: '/system',
name: 'System',
component: LAYOUT,
redirect: '/system/menu',
meta: {
orderNo: 2000,
icon: 'ion:settings-outline',
title: t('routes.demo.system.moduleName'),
},
children: [
{
path: 'menu',
name: 'MenuManagement',
meta: {
title: t('routes.demo.system.menu'),
icon: 'carbon:menu',
ignoreKeepAlive: true,
},
component: () => import('/@/views/demo/system/menu/index.vue'),
},
{
path: 'role',
name: 'RoleManagement',
meta: {
title: t('routes.demo.system.role'),
icon: 'carbon:user-role',
ignoreKeepAlive: true,
},
component: () => import('/@/views/demo/system/role/index.vue'),
},
{
path: 'dept',
name: 'DeptManagement',
meta: {
title: t('routes.demo.system.dept'),
icon: 'mingcute:department-line',
ignoreKeepAlive: true,
},
component: () => import('/@/views/demo/system/dept/index.vue'),
},
{
path: 'post',
name: 'PostManagement',
meta: {
title: t('routes.demo.system.post'),
icon: 'mdi:account-tie',
ignoreKeepAlive: true,
},
component: () => import('/@/views/demo/system/post/index.vue'),
},
{
path: 'account',
name: 'AccountManagement',
meta: {
title: t('routes.demo.system.account'),
icon: 'mdi:user',
ignoreKeepAlive: false,
},
component: () => import('/@/views/demo/system/account/index.vue'),
},
{
path: 'dict',
name: 'DictManagement',
meta: {
title: t('routes.demo.system.dict'),
icon: 'mdi:dictionary',
ignoreKeepAlive: false,
},
component: () => import('/@/views/demo/system/dict/index.vue'),
},
{
path: 'category',
name: 'CategoryManagement',
meta: {
title: t('routes.demo.system.category'),
icon: 'material-symbols:category-outline',
ignoreKeepAlive: false,
},
component: () => import('/@/views/demo/system/category/index.vue'),
},
{
path: 'region',
name: 'RegionManagement',
meta: {
title: t('routes.demo.system.region'),
icon: 'majesticons:map-marker-area-line',
ignoreKeepAlive: false,
},
component: () => import('/@/views/demo/system/region/index.vue'),
},
],
}
export default system
import type { AppRouteModule } from '/@/router/types'
import { LAYOUT } from '/@/router/constant'
import { t } from '/@/hooks/web/useI18n'
const tools: AppRouteModule = {
path: '/tools',
name: 'Tools',
component: LAYOUT,
redirect: '/tools/database',
meta: {
orderNo: 2001,
icon: 'carbon:tools',
title: t('routes.demo.tools.moduleName'),
},
children: [
{
path: 'file',
name: 'FileTools',
meta: {
title: t('routes.demo.tools.file'),
icon: 'material-symbols:attach-file',
},
component: () => import('/@/views/demo/tools/file/index.vue'),
},
{
path: 'form',
name: 'FormTools',
meta: {
title: t('routes.demo.tools.form'),
icon: 'fluent:form-multiple-20-regular',
},
component: () => import('/@/views/demo/tools/form/index.vue'),
},
{
path: 'process',
name: 'ProcessTools',
meta: {
title: t('routes.demo.tools.process'),
icon: 'fluent-mdl2:server-processes',
},
component: () => import('/@/views/demo/tools/process/index.vue'),
},
{
path: 'database',
name: 'DatabaseTools',
meta: {
title: t('routes.demo.tools.database'),
icon: 'mdi:database-lock-outline',
},
component: () => import('/@/views/demo/tools/database/index.vue'),
},
{
path: 'online',
name: 'OnlineTools',
component: LAYOUT,
redirect: '/tools/online/form',
meta: {
title: t('routes.demo.tools.online.moduleName'),
icon: 'material-symbols:cloud-done-outline-sharp',
},
children: [
{
path: 'form',
name: 'OnlineFormTools',
meta: {
title: t('routes.demo.tools.online.form'),
icon: 'fluent:form-20-regular',
},
component: () => import('/@/views/demo/tools/online/form/index.vue'),
},
{
path: 'report',
name: 'OnlineReportTools',
meta: {
title: t('routes.demo.tools.online.report'),
icon: 'carbon:report',
},
component: () => import('/@/views/demo/tools/online/report/index.vue'),
},
{
path: 'chart',
name: 'OnlineChartTools',
meta: {
title: t('routes.demo.tools.online.chart'),
icon: 'ic:baseline-bar-chart',
},
component: () => import('/@/views/demo/tools/online/chart/index.vue'),
},
],
},
{
path: 'doc',
name: 'DocTools',
component: LAYOUT,
redirect: '/tools/doc/api',
meta: {
title: t('routes.demo.tools.doc.moduleName'),
icon: 'iconoir:doc-search-alt',
},
children: [
{
path: 'api',
name: 'DocApiTools',
meta: {
title: t('routes.demo.tools.doc.api'),
icon: 'ant-design:api-outlined',
},
component: () => import('/@/views/demo/tools/doc/api/index.vue'),
},
{
path: 'database',
name: 'DocDatabaseTools',
meta: {
title: t('routes.demo.tools.doc.database'),
icon: 'mdi:database-eye-outline',
},
component: () => import('/@/views/demo/tools/doc/database/index.vue'),
},
],
},
],
}
export default tools
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="登录日志">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="操作日志">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="定时任务">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="性能监控">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="SQL 监控">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="请求跟踪">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="在线用户">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="账号管理">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="部门管理">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="字典管理">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="菜单管理">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="岗位管理">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
<script lang="ts" setup>
import { PageWrapper } from '/@/components/Page'
const text = ref('Hello World! 👋')
</script>
<template>
<PageWrapper title="Example" content="角色管理">
<div class="title">{{ text }}</div>
</PageWrapper>
</template>
<style lang="less" scoped>
/* ... */
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论