vben
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVben Admin 开发技能
Vben Admin 开发技能
基于 Vben Admin 5.0 文档的专业开发指导技能,帮助快速开发中后台管理系统。
基于 Vben Admin 5.0 文档的专业开发指导技能,帮助快速开发中后台管理系统。
项目结构
项目结构
采用 Monorepo 架构,核心目录:
├── apps/ # 应用目录
│ ├── web-antd/ # Ant Design Vue 应用
│ ├── web-ele/ # Element Plus 应用
│ ├── web-naive/ # Naive UI 应用
│ └── backend-mock/ # Mock 后端服务
├── packages/ # 共享包
│ ├── @core/ # 核心包(UI组件、布局等)
│ ├── effects/ # 副作用包(权限、请求、hooks等)
│ ├── stores/ # 状态管理
│ ├── locales/ # 国际化
│ └── utils/ # 工具函数
└── internal/ # 内部工具配置采用 Monorepo 架构,核心目录:
├── apps/ # 应用目录
│ ├── web-antd/ # Ant Design Vue 应用
│ ├── web-ele/ # Element Plus 应用
│ ├── web-naive/ # Naive UI 应用
│ └── backend-mock/ # Mock 后端服务
├── packages/ # 共享包
│ ├── @core/ # 核心包(UI组件、布局等)
│ ├── effects/ # 副作用包(权限、请求、hooks等)
│ ├── stores/ # 状态管理
│ ├── locales/ # 国际化
│ └── utils/ # 工具函数
└── internal/ # 内部工具配置常用命令
常用命令
bash
undefinedbash
undefined开发
开发
pnpm dev:antd # 启动 Ant Design 应用
pnpm dev:ele # 启动 Element Plus 应用
pnpm dev:naive # 启动 Naive UI 应用
pnpm dev:antd # 启动 Ant Design 应用
pnpm dev:ele # 启动 Element Plus 应用
pnpm dev:naive # 启动 Naive UI 应用
构建
构建
pnpm build # 构建所有应用
pnpm build:antd # 构建指定应用
pnpm build # 构建所有应用
pnpm build:antd # 构建指定应用
其他
其他
pnpm lint # 代码检查
pnpm check:type # 类型检查
pnpm reinstall # 重新安装依赖
undefinedpnpm lint # 代码检查
pnpm check:type # 类型检查
pnpm reinstall # 重新安装依赖
undefined核心开发指南
核心开发指南
路由与菜单
路由与菜单
路由配置位于 目录:
src/router/routes/modules/ts
import type { RouteRecordRaw } from 'vue-router';
const routes: RouteRecordRaw[] = [
{
meta: {
icon: 'mdi:home',
title: $t('page.home.title'),
authority: ['admin'], // 权限控制
order: 1000, // 菜单排序
keepAlive: true, // 开启缓存
hideInMenu: false, // 菜单中隐藏
hideInTab: false, // 标签页中隐藏
},
name: 'Home',
path: '/home',
component: () => import('#/views/home/index.vue'),
},
];
export default routes;路由配置位于 目录:
src/router/routes/modules/ts
import type { RouteRecordRaw } from 'vue-router';
const routes: RouteRecordRaw[] = [
{
meta: {
icon: 'mdi:home',
title: $t('page.home.title'),
authority: ['admin'], // 权限控制
order: 1000, // 菜单排序
keepAlive: true, // 开启缓存
hideInMenu: false, // 菜单中隐藏
hideInTab: false, // 标签页中隐藏
},
name: 'Home',
path: '/home',
component: () => import('#/views/home/index.vue'),
},
];
export default routes;权限控制
权限控制
三种模式在 中配置:
preferences.tsts
import { defineOverridesPreferences } from '@vben/preferences';
export const overridesPreferences = defineOverridesPreferences({
app: {
accessMode: 'frontend', // 'frontend' | 'backend' | 'mixed'
},
});按钮级权限:
vue
<script setup>
import { AccessControl, useAccess } from '@vben/access';
const { hasAccessByCodes, hasAccessByRoles } = useAccess();
</script>
<template>
<!-- 权限码方式 -->
<AccessControl :codes="['AC_100100']" type="code">
<Button>有权限可见</Button>
</AccessControl>
<!-- 角色方式 -->
<Button v-if="hasAccessByRoles(['admin'])">管理员可见</Button>
<!-- 指令方式 -->
<Button v-access:code="'AC_100100'">有权限可见</Button>
</template>三种模式在 中配置:
preferences.tsts
import { defineOverridesPreferences } from '@vben/preferences';
export const overridesPreferences = defineOverridesPreferences({
app: {
accessMode: 'frontend', // 'frontend' | 'backend' | 'mixed'
},
});按钮级权限:
vue
<script setup>
import { AccessControl, useAccess } from '@vben/access';
const { hasAccessByCodes, hasAccessByRoles } = useAccess();
</script>
<template>
<!-- 权限码方式 -->
<AccessControl :codes="['AC_100100']" type="code">
<Button>有权限可见</Button>
</AccessControl>
<!-- 角色方式 -->
<Button v-if="hasAccessByRoles(['admin'])">管理员可见</Button>
<!-- 指令方式 -->
<Button v-access:code="'AC_100100'">有权限可见</Button>
</template>偏好设置配置
偏好设置配置
在应用目录的 中配置:
preferences.tsts
import { defineOverridesPreferences } from '@vben/preferences';
export const overridesPreferences = defineOverridesPreferences({
app: {
layout: 'sidebar-nav', // 布局方式
locale: 'zh-CN', // 语言
dynamicTitle: true, // 动态标题
watermark: false, // 水印
loginExpiredMode: 'page', // 登录过期模式
},
theme: {
mode: 'dark', // 主题模式
builtinType: 'default', // 内置主题
colorPrimary: 'hsl(212 100% 45%)', // 主题色
},
sidebar: {
collapsed: false, // 侧边栏折叠
width: 224, // 侧边栏宽度
},
tabbar: {
enable: true, // 标签页
keepAlive: true, // 缓存
},
});在应用目录的 中配置:
preferences.tsts
import { defineOverridesPreferences } from '@vben/preferences';
export const overridesPreferences = defineOverridesPreferences({
app: {
layout: 'sidebar-nav', // 布局方式
locale: 'zh-CN', // 语言
dynamicTitle: true, // 动态标题
watermark: false, // 水印
loginExpiredMode: 'page', // 登录过期模式
},
theme: {
mode: 'dark', // 主题模式
builtinType: 'default', // 内置主题
colorPrimary: 'hsl(212 100% 45%)', // 主题色
},
sidebar: {
collapsed: false, // 侧边栏折叠
width: 224, // 侧边栏宽度
},
tabbar: {
enable: true, // 标签页
keepAlive: true, // 缓存
},
});API 请求
API 请求
请求配置在 :
src/api/request.tsts
import { requestClient } from '#/api/request';
// GET 请求
export async function getUserInfoApi() {
return requestClient.get<UserInfo>('/user/info');
}
// POST 请求
export async function saveUserApi(user: UserInfo) {
return requestClient.post<UserInfo>('/user', user);
}代理配置在 :
vite.config.mtsts
export default defineConfig(async () => {
return {
vite: {
server: {
proxy: {
'/api': {
target: 'http://localhost:5320/api',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
},
};
});请求配置在 :
src/api/request.tsts
import { requestClient } from '#/api/request';
// GET 请求
export async function getUserInfoApi() {
return requestClient.get<UserInfo>('/user/info');
}
// POST 请求
export async function saveUserApi(user: UserInfo) {
return requestClient.post<UserInfo>('/user', user);
}代理配置在 :
vite.config.mtsts
export default defineConfig(async () => {
return {
vite: {
server: {
proxy: {
'/api': {
target: 'http://localhost:5320/api',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
},
};
});国际化
国际化
使用 函数:
$t()ts
import { $t } from '#/locales';
meta: {
title: $t('page.home.title'),
}语言文件在 目录。
packages/locales/使用 函数:
$t()ts
import { $t } from '#/locales';
meta: {
title: $t('page.home.title'),
}语言文件在 目录。
packages/locales/主题定制
主题定制
CSS 变量覆盖:
css
:root {
--primary: 212 100% 45%;
--sidebar: 0 0% 100%;
--header: 0 0% 100%;
}
.dark {
--background: 222.34deg 10.43% 12.27%;
--sidebar: 222.34deg 10.43% 12.27%;
}CSS 变量覆盖:
css
:root {
--primary: 212 100% 45%;
--sidebar: 0 0% 100%;
--header: 0 0% 100%;
}
.dark {
--background: 222.34deg 10.43% 12.27%;
--sidebar: 222.34deg 10.43% 12.27%;
}登录接口对接
登录接口对接
需要的接口:
ts
// src/api/core/auth.ts
export async function loginApi(data: LoginParams) {
return requestClient.post<LoginResult>('/auth/login', data);
}
// src/api/core/user.ts
export async function getUserInfoApi() {
return requestClient.get<UserInfo>('/user/info');
}
// src/api/core/auth.ts (可选)
export async function getAccessCodesApi() {
return requestClient.get<string[]>('/auth/codes');
}需要的接口:
ts
// src/api/core/auth.ts
export async function loginApi(data: LoginParams) {
return requestClient.post<LoginResult>('/auth/login', data);
}
// src/api/core/user.ts
export async function getUserInfoApi() {
return requestClient.get<UserInfo>('/user/info');
}
// src/api/core/auth.ts (可选)
export async function getAccessCodesApi() {
return requestClient.get<string[]>('/auth/codes');
}环境变量
环境变量
bash
undefinedbash
undefined.env.development
.env.development
VITE_PORT=5555
VITE_GLOB_API_URL=/api
VITE_NITRO_MOCK=true
VITE_PORT=5555
VITE_GLOB_API_URL=/api
VITE_NITRO_MOCK=true
.env.production
.env.production
VITE_GLOB_API_URL=https://api.example.com
VITE_COMPRESS=gzip
VITE_ROUTER_HISTORY=hash
undefinedVITE_GLOB_API_URL=https://api.example.com
VITE_COMPRESS=gzip
VITE_ROUTER_HISTORY=hash
undefined别名配置
别名配置
使用 开头的路径别名:
#ts
// package.json
{
"imports": {
"#/*": "./src/*"
}
}
// 使用
import { useAuthStore } from '#/store';使用 开头的路径别名:
#ts
// package.json
{
"imports": {
"#/*": "./src/*"
}
}
// 使用
import { useAuthStore } from '#/store';详细参考文档
详细参考文档
需要更多细节时,查阅以下参考文件:
需要更多细节时,查阅以下参考文件:
核心功能 (references/core/)
核心功能 (references/core/)
- 路由菜单: - 路由配置、Meta属性、多级菜单
references/core/route.md - 权限控制: - 三种权限模式、按钮级权限
references/core/access.md - 偏好设置: - 完整配置项说明
references/core/preferences.md - 主题定制: - CSS变量、内置主题、自定义主题
references/core/theme.md - API请求: - 请求配置、拦截器、多接口地址
references/core/api.md - 国际化: - 语言配置、新增语言包
references/core/locale.md - 登录对接: - 登录接口、Token刷新
references/core/login.md - 图标使用: - Iconify图标、SVG图标
references/core/icons.md
- 路由菜单: - 路由配置、Meta属性、多级菜单
references/core/route.md - 权限控制: - 三种权限模式、按钮级权限
references/core/access.md - 偏好设置: - 完整配置项说明
references/core/preferences.md - 主题定制: - CSS变量、内置主题、自定义主题
references/core/theme.md - API请求: - 请求配置、拦截器、多接口地址
references/core/api.md - 国际化: - 语言配置、新增语言包
references/core/locale.md - 登录对接: - 登录接口、Token刷新
references/core/login.md - 图标使用: - Iconify图标、SVG图标
references/core/icons.md
业务组件 (references/components/business/)
业务组件 (references/components/business/)
- Page页面: - 页面布局容器、标题区、内容区
references/components/business/page.md - 表单组件: - Vben Form表单配置、校验、联动
references/components/business/form.md - 表格组件: - Vben Vxe Table表格配置、搜索、远程加载
references/components/business/table.md - 模态框: - Vben Modal配置、拖拽、全屏
references/components/business/modal.md - 抽屉: - Vben Drawer配置、组件抽离
references/components/business/drawer.md - 轻量提示框: - alert、confirm、prompt调用
references/components/business/alert.md - API组件包装器: - 远程数据自动加载
references/components/business/api-component.md
- Page页面: - 页面布局容器、标题区、内容区
references/components/business/page.md - 表单组件: - Vben Form表单配置、校验、联动
references/components/business/form.md - 表格组件: - Vben Vxe Table表格配置、搜索、远程加载
references/components/business/table.md - 模态框: - Vben Modal配置、拖拽、全屏
references/components/business/modal.md - 抽屉: - Vben Drawer配置、组件抽离
references/components/business/drawer.md - 轻量提示框: - alert、confirm、prompt调用
references/components/business/alert.md - API组件包装器: - 远程数据自动加载
references/components/business/api-component.md
通用组件 (references/components/common/)
通用组件 (references/components/common/)
- 数字动画: - CountToAnimator数字滚动动画
references/components/common/count-to.md - 省略文本: - EllipsisText文本省略展开
references/components/common/ellipsis-text.md
- 数字动画: - CountToAnimator数字滚动动画
references/components/common/count-to.md - 省略文本: - EllipsisText文本省略展开
references/components/common/ellipsis-text.md
功能配置 (references/features/)
功能配置 (references/features/)
- 常用功能: - 水印、缓存、动态标题等
references/features/features.md
- 常用功能: - 水印、缓存、动态标题等
references/features/features.md
构建部署 (references/deployment/)
构建部署 (references/deployment/)
- 构建部署: - 构建配置、Nginx、Docker
references/deployment/deploy.md - 常见问题: - 依赖安装、打包部署、错误排查
references/deployment/faq.md
- 构建部署: - 构建配置、Nginx、Docker
references/deployment/deploy.md - 常见问题: - 依赖安装、打包部署、错误排查
references/deployment/faq.md