# Full-stack-practice **Repository Path**: yaoxingjin/full-stack-practice ## Basic Information - **Project Name**: Full-stack-practice - **Description**: 全栈前后端分离练手项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-01 - **Last Updated**: 2026-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Full Stack Practice(全栈练手项目) 前后端分离练手项目,仓库地址:[Gitee - full-stack-practice](https://gitee.com/yaoxingjin/full-stack-practice) ```bash git remote add origin https://gitee.com/yaoxingjin/full-stack-practice.git ``` ## 技术栈 | 端 | 技术 | |----|------| | 前端 | Vue 3 + TypeScript + Vite + Element Plus + Vue Router + Pinia + Axios | | 后端 | Spring Boot 3.5 + Spring Security 6 + JWT + MyBatis-Plus + MySQL + Validation + EasyExcel | ## 项目结构 ``` Full_stack_practice/ ├── frontend/ # Vue3 管理端 │ ├── src/ │ │ ├── api/ # 登录、用户等接口 │ │ ├── layout/ # 侧栏 / 顶栏 / 内容区 │ │ ├── router/ # 路由 + 守卫 │ │ ├── stores/ # Pinia │ │ ├── types/ # TS 类型 │ │ ├── utils/ # auth / request / download │ │ └── views/ # 登录、首页、用户管理等 │ └── docs/ # 前端开发顺序等文档 ├── backend/ # Spring Boot 多模块后端(Maven 坐标 com.smartmall:smart-mall) │ ├── smart-mall-common/ # 公共:Result / 业务异常 / 分页基类 │ ├── smart-mall-system/ # 业务:entity / mapper / dto / vo / service │ └── smart-mall-admin/ # 启动:controller / security / 配置 / 资源 ├── docs/ # 接口 / 总规划文档 └── .cursor/rules/ # Cursor 项目规范(注释保留等) ``` ## 当前进度 ### 前端 - [x] Vue3 + TS + Vite 工程、`@` 别名、环境变量 - [x] Element Plus 按需引入 + 图标;Message / MessageBox 样式 - [x] Axios 封装(Bearer Token、业务码、401 跳登录;blob 下载) - [x] 登录页(设计稿布局)+ Token 持久化 - [x] 路由守卫(白名单 / redirect) - [x] Pinia `user` store(登录 / 退出;跳转在组件内处理) - [x] Layout:Sidebar + Navbar + AppMain - [x] 嵌套路由 + 静态菜单(首页 / 用户 / 角色 / 权限 / 商品 / 订单) - [x] **用户管理页**:查询筛选、分页、新增 / 编辑、状态开关、单删 / 批删、Excel 导出 - [ ] 角色 / 权限 / 商品 / 订单业务页(占位,待做) - [ ] 动态路由 / 按钮级权限(后置) 开发顺序清单(可复用):[`frontend/docs/admin-frontend-roadmap.md`](frontend/docs/admin-frontend-roadmap.md) ### 后端 **步骤1~2:工程与配置** - [x] 依赖:web、security、mybatis-plus、mysql、jjwt、lombok、validation、easyexcel - [x] 多环境配置:`application.yaml` + `application-dev.yml` / `application-prod.yml` - [x] 数据源、MyBatis-Plus(驼峰 / SQL 日志)、JWT(密钥 / 过期时间) **步骤3:基础层** - [x] 实体 `SysUser`(实现 `UserDetails`)+ 公共基类 `BaseEntity`(创建/更新时间自动填充) - [x] `SysUserMapper` / `SysUserService` / `SysUserServiceImpl` - [x] MyBatis-Plus 分页插件、`MetaObjectHandler` 自动填充 **步骤4:Spring Security 6 + JWT 鉴权** - [x] `PasswordEncoder`(BCrypt)、`UserDetailsServiceImpl`、`JwtUtil` - [x] `JwtAuthenticationFilter` + `SecurityFilterChain`(无 Session、401/403 JSON) - [x] 放行登录路径:`/api/admin/auth/login` **步骤5:统一响应与异常** - [x] 统一返回体 `Result` / 状态码 `ResultCode` - [x] 全局异常处理 `GlobalExceptionHandler`(登录失败、参数校验、兜底) - [x] Jackson 时间序列化配置、分页查询基类 `BasePageQuery` - [x] 业务异常 `BusinessException` **步骤6:管理端业务接口** - [x] 管理员登录:`POST /api/admin/auth/login`;当前用户:`GET /api/admin/auth/info` - [x] 用户分页查询 / 详情 / 新增 / 修改 / 批量删除 - [x] 用户 Excel 导出(EasyExcel,按筛选条件全量) - [ ] 角色 / 权限 / 商品 / 订单等后续模块 **步骤7:Maven 多模块** - [x] 父工程 `com.smartmall:smart-mall` + `smart-mall-common` / `system` / `admin` - [x] 包根 `com.smartmall.sgy`;启动类 `SmartMallAdminApplication` - [x] 拆分笔记:[`backend/docs/maven-multi-module-guide.md`](backend/docs/maven-multi-module-guide.md) **文档** - [x] 管理端用户管理接口文档:[`docs/api-admin-user.md`](docs/api-admin-user.md) - [x] 总规划:[`docs/SmartMalll.md`](docs/SmartMalll.md) - [x] Knife4j 说明:[`backend/docs/knife4j-guide.md`](backend/docs/knife4j-guide.md) - [x] Maven 多模块拆分笔记:[`backend/docs/maven-multi-module-guide.md`](backend/docs/maven-multi-module-guide.md) ## 后端关键包说明 包根:`com.smartmall.sgy` ``` backend/ ├── smart-mall-common/.../common/ # Result、ResultCode、BusinessException、BasePageQuery ├── smart-mall-system/ │ ├── entity/ # BaseEntity、SysUser │ ├── mapper/ # SysUserMapper │ ├── dto/ # LoginDTO、UserPageQueryDTO 等 │ ├── vo/ # LoginVO、UserVO、UserExcelVO │ └── service/ # SysUserService 及实现 └── smart-mall-admin/ ├── SmartMallAdminApplication.java ├── controller/ # AdminAuthController、AdminUserController ├── config/ # Security、Jackson、MyBatis-Plus、JWT、UserDetailsService ├── filter/ # JwtAuthenticationFilter ├── handler/ # 401 / 403 JSON 处理器 ├── utils/ # JwtUtil └── exception/ # GlobalExceptionHandler ``` ## 前端关键目录说明 ``` frontend/src/ ├── api/ # login、user(含导出) ├── config/ # 环境配置 ├── layout/ # 管理端壳子 ├── router/ # 路由 + 守卫 ├── stores/ # Pinia(user / app) ├── types/ # api / user / router meta 等类型 ├── utils/ # auth、request、download └── views/ # login、home、users(已完成)、roles... ``` ## 已打通接口速查 | 方法 | 路径 | 鉴权 | 说明 | |------|------|------|------| | POST | `/api/admin/auth/login` | 否 | 登录,返回 JWT | | GET | `/api/admin/auth/info` | 是 | 当前登录用户信息 | | GET | `/api/admin/users` | 是 | 用户分页列表(条件筛选) | | GET | `/api/admin/users/export` | 是 | 按筛选条件导出 Excel(blob) | | GET | `/api/admin/users/{id}` | 是 | 根据 id 查用户详情 | | POST | `/api/admin/users` | 是 | 新增用户 | | PUT | `/api/admin/users/{id}` | 是 | 修改用户 | | DELETE | `/api/admin/users/batch` | 是 | 批量删除(body:id 数组) | 统一响应格式(导出接口除外,直接返回文件流): ```json { "code": 200, "msg": "操作成功", "data": {} } ``` ## 本地运行 ### 后端 1. 准备 MySQL,创建库 `full_stack_practice`,并建好相关表 2. 按需修改 `backend/smart-mall-admin/src/main/resources/application-dev.yml` 中的数据源账号密码与 JWT 密钥 3. JDK 17+,在 `backend` 目录执行: ```bash mvn -pl smart-mall-admin -am spring-boot:run ``` 或在 IDE 中运行 `smart-mall-admin` 模块的 `SmartMallAdminApplication`。 默认激活 `dev` 环境(见 `application.yaml` 中 `spring.profiles.active`)。 接口文档(dev):http://localhost:8080/doc.html ### 前端 ```bash cd frontend npm install npm run dev ``` 开发环境通过 Vite 代理将 `/api` 转发到 `http://127.0.0.1:8080`(见 `.env.development`)。 访问示例:`http://localhost:5173/login`(端口以终端输出为准)。 ## 后续计划 1. 角色、权限、商品、订单等业务模块(后端优先 → 前端联调) 2. 动态路由与按钮级权限(后置) 3. Redis / AI / 部署等见 [`docs/SmartMalll.md`](docs/SmartMalll.md)