# Content Management System 基于 React + TypeScript + Vite 构建的内容管理系统,集成 JeecgBoot 后台权限系统。 ## 技术栈 - **React 19** - UI 框架 - **TypeScript** - 类型安全 - **Vite** - 构建工具 - **Contentful F36** - UI 组件库 - **JeecgBoot** - 后台权限系统 ## 项目结构 ``` src/ ├── config/ # 配置文件 │ └── menuIds.ts # 菜单ID配置 ├── contexts/ # React Context │ └── AuthContext.tsx # 权限上下文 ├── hooks/ # 自定义Hooks │ └── usePermission.ts # 权限Hook ├── layouts/ # 布局组件 │ ├── MainLayout.tsx │ ├── Header.tsx │ └── Sidebar.tsx ├── pages/ # 页面组件 │ └── ContentPage.tsx ├── components/ # 通用组件 │ └── common/ │ ├── EmptyState.tsx │ ├── PermissionButton.tsx │ └── PermissionWrapper.tsx ├── services/ # API服务层 │ ├── api.ts # 系统API │ ├── BaseService.ts # 基础服务类 │ ├── index.ts # 统一导出 │ └── modules/ # 业务模块 │ ├── user.ts │ ├── role.ts │ └── content.ts ├── types/ # 类型定义 │ └── menu.ts ├── utils/ # 工具函数 │ └── request.ts # 请求封装 └── examples/ # 使用示例 ├── ApiUsage.tsx └── PermissionUsage.tsx ``` ## 核心特性 ### 1. 权限管理系统 - ✅ 动态菜单渲染 - ✅ 细粒度权限控制(view/add/edit/delete) - ✅ 三种权限使用方式 - `PermissionButton` 组件 - `PermissionWrapper` 组件 - `usePermission` Hook ### 2. 请求封装 - ✅ 参考 JeecgBoot 前端封装 - ✅ 自动 Token 管理 - ✅ 请求/响应拦截 - ✅ 统一错误处理 - ✅ 文件上传/下载 - ✅ 超时控制 ### 3. 服务层封装 - ✅ BaseService 基类(CRUD) - ✅ 分页查询 - ✅ 批量操作 - ✅ 导入/导出 ## 快速开始 ### 1. 安装依赖 ```bash pnpm install ``` ### 2. 配置环境变量 复制 `.env.example` 为 `.env`: ```bash cp .env.example .env ``` 修改 API 地址: ```bash VITE_API_BASE_URL=http://localhost:8080 ``` ### 3. 启动开发服务器 ```bash pnpm dev ``` ### 4. 构建生产版本 ```bash pnpm build ``` ## 使用文档 - [权限系统使用指南](./docs/PERMISSION_GUIDE.md) - [API 请求封装指南](./docs/API_GUIDE.md) - [Vite 代理配置指南](./docs/PROXY_GUIDE.md) ## 使用示例 ### 权限控制 ```tsx import { usePermission } from "@/hooks/usePermission"; import PermissionButton from "@/components/common/PermissionButton"; function MyPage() { const permission = usePermission("user-management"); return ( <> {/* 方式1: 使用 Hook */} {permission.canAdd && } {/* 方式2: 使用组件 */} 编辑 ); } ``` ### API 请求 ```tsx import { userService } from "@/services"; // 分页查询 const users = await userService.list({ pageNo: 1, pageSize: 10 }); // CRUD 操作 await userService.add({ username: "test" }); await userService.edit({ id: "1", username: "updated" }); await userService.delete("1"); // 导出 await userService.exportXls({}, "用户列表.xls"); ``` ## 开发规范 ### 1. 组件组织 - `layouts/` - 布局组件 - `pages/` - 页面组件 - `components/common/` - 通用组件 ### 2. 服务层组织 - `services/api.ts` - 系统级 API - `services/modules/` - 按业务模块组织 ### 3. 类型定义 - 所有接口都应该有类型定义 - 使用 TypeScript 严格模式 ## 浏览器支持 - Chrome >= 90 - Firefox >= 88 - Safari >= 14 - Edge >= 90 ## License MIT