前端开发指南
本文档面向前端开发人员,详细说明项目的核心配置、开发流程与最佳实践。
1. 快速上手
1.1 环境配置 (.env)
项目根目录下提供了 .env 配置文件(或 .env.development)。关键变量如下:
env
# API 服务地址 (本地代理目标)
VITE_SERVICE_BASE_URL=http://localhost:3000
# 开启/关闭 HTTP 代理
VITE_HTTP_PROXY=Y
# 路由模式 (hash | history)
VITE_ROUTER_HISTORY_MODE=history
# 认证通过后的默认首页
VITE_ROUTE_HOME_PATH=/home1.2 启动流程
bash
pnpm install
pnpm dev系统采用 聚合启动 (Bootstrap) 模式:
- 初始化 Pinia Store。
- 加载本地缓存的主题配置。
- 核心: 调用
/api/auth/profile和/api/auth/permissions接口。- 若 Token 有效:拉取用户信息与权限 -> 动态生成路由 -> 渲染应用。
- 若无效:重定向至登录页。
2. 接口请求配置
HTTP 请求模块基于 Axios 封装,位于 src/service/request。
2.1 定义 API接口
在 src/service/api 目录下按模块定义接口。例如 content.ts:
typescript
import { request } from '@/service/request';
/** 获取文章列表 */
export function fetchGetArticleList(params?: Api.SystemManage.ArticleSearchParams) {
return request<Api.SystemManage.ArticleList>({
url: '/contents',
method: 'get',
params,
});
}2.2 类型定义
建议在 src/typings/api.d.ts 或模块内部定义 TypeScript 类型,以获得良好的代码提示。
typescript
declare namespace Api {
namespace SystemManage {
interface Article {
id: string;
title: string;
// ...
}
}
}3. 路由与菜单配置
项目使用 Elegant Router 自动生成路由声明,但也支持手动配置。
3.1 新增页面
- 在
src/views下创建页面组件,例如src/views/manage/order/index.vue。 - 在路由配置中(或通过后端动态路由)指向该组件。
3.2 动态路由 (后端控制)
目前系统开启了后端动态路由模式。菜单数据由 /api/menus/user-routes 接口返回。
- 前端组件映射: 后端返回的
component字段(如view.manage_user)会自动映射到src/views/manage/user/index.vue。 - 映射规则:
view.前缀对应src/views目录下的文件路径,将_转换为/。
示例映射关系:
view.manage_user->src/views/manage/user/index.vueview.about->src/views/about/index.vuelayout.base->src/layouts/base-layout/index.vue
4. 常用 Hooks 与工具
4.1 表格操作 (useTable)
src/hooks/common/table.ts 提供了极其强大的表格逻辑封装,支持:
- 分页、搜索、加载状态管理。
- 增删改查 (CRUD) 弹窗控制。
typescript
const {
data,
loading,
getDataByPage,
searchParams
} = useTable({
apiFn: fetchGetList,
apiParams: {
keyword: ''
},
columns: () => [ ... ]
});4.2 权限判断 (useAuthStore)
typescript
const auth = useAuthStore();
const canEdit = computed(() => auth.hasPermission('order:edit'));4.3 表单校验 (useForm)
Naive UI 的表单结合自定义规则:
typescript
const rules = {
title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
};5. 调试与排查
- 网络请求: 查看 Chrome DevTools -> Network,确认 Token 是否携带 (
Authorization: Bearer ...)。 - 路由问题: 查看 Vue DevTools -> Routes,确认动态路由是否成功挂载。
- 图标显示: 项目使用 UnoCSS Iconify,图标类名如
i-mdi-home。可以在 Icones 查找图标。
注意: 修改
.env文件后需要重启pnpm dev才能生效。