软件详细设计报告(详细设计) 1. 总体说明 本报告基于当前代码实现,细化至类/接口、方法职责、数据流与异常处理,覆盖后端各模块与前端关键交互点。 2. 后端详细设计 2.1 统一基础设施 - `com.prj.common.core.controller.BaseController` - `startPage()`:开启分页(集成 MyBatis PageHelper); - `getDataByPage(List)`:封装为 `TableDataInfo`; - `toAjax(int rows)`:封装影响行数到 `AjaxResult`; - `AjaxResult`:统一返回结构 `{ code, msg, data }`; 2.2 鉴权与验证码 - `CaptchaController` - 依赖:`captchaProducerMath`、`RedisCache` - 主要流程:生成运算验证码 → Redis存储(键:`Constants.CAPTCHA_CODE_KEY + uuid`) → Base64图片返回 - 异常:`ImageIO.write` 抛出 `IOException` 时,返回 `AjaxResult.error(msg)` - `LoginController` - 依赖:`LoginService` - 主要流程:校验验证码 → 账号认证 → 生成 `token` → 返回 `Constants.TOKEN` 字段 2.3 部门信息管理 - `DeptController` - `GET /dept_info/list`:`startPage()` → `IDeptService.selectDeptList(Dept)` → `getDataByPage(list)` - `GET /dept_info/{id}`:`IDeptService.selectDeptById(id)` - `POST /dept_info`:`IDeptService.insertDept(Dept)` → `toAjax(rows)` - `PUT /dept_info`:`IDeptService.updateDept(Dept)` → `toAjax(rows)` - `DELETE /dept_info/{ids}`:`IDeptService.deleteDeptByIds(Long[])` → `toAjax(rows)` - Service 与持久化 - `IDeptService`/impl:参数校验与 CRUD 组合; - `DeptMapper.xml`:对应 SQL(与实体字段一致); 2.4 员工信息管理 - `EmployeeController` - 同 Dept 接口集合; - `PUT /employee`:`@Transactional(timeout=20, readOnly=false, isolation=DEFAULT, propagation=REQUIRED)` - 设计目的:保证更新过程中的一致性,可在方法内扩展多表写操作; - Service 与持久化 - `IEmployeeService`/impl` + `EmployeeMapper.xml` 2.5 员工评价管理 - `EmployeeKpiController` + `IEmployeeKpiService` + `EmployeeKpiMapper.xml` - 五个CRUD端点,同上模式; 2.6 招人名额管理 - `HireNumController` + `IHireNumService` + `HirenumRepo`/`HireNumMapper.xml` - 实体 `HireNum` 使用 JPA 注解(`@Entity @Table(name="hire_num")`),字段 `id/dept/num/endtime`; 2.7 薪资标准管理 - `SalaryLevelController` + `ISalaryLevelService` + `SalaryLevelMapper.xml` 2.8 领域模型 - `Dept{id, name, manager, reportto}` - `Employee{id, dept, name, position, salary}` - `EmployeeKpi{id, kpi, bonus, manager}` - `HireNum{id, dept, num, endtime}` - `SalaryLevel{id, jobType, salary, salaryrange}` 2.9 异常与错误处理 - 控制器返回 `AjaxResult.error(msg)` 或 `code!=200`; - 登录401由前端捕获并触发重新登录; 3. 前端详细设计 3.1 路由 - `src/router/index.js`: - `/index` 首页; - 业务模块:`/dept_info`、`/salary_level`、`/hirenum`、`/employee`、`/employee_kpi`; - `/login` 登录页; 3.2 请求封装 - `src/utils/request.js` - Request 拦截器:若存在 `Admin-Token`,注入 `Authorization: Bearer `; - Response 拦截器:基于 `code` 统一处理 401/500/非200 异常; - `timeout=2000ms`,`baseURL=VUE_APP_BASE_API`; - `src/utils/auth.js`:基于 Cookie 管理 `Admin-Token`; 3.3 API 模块 - `src/api/*.js` 与后端控制器一一对应(URL 完全匹配),方法:`list/get/add/update/del`; 4. 典型时序(文本) 4.1 登录 用户 → `/captchaImage` → 返回 `uuid,img`;用户提交 `/login{username,password,code,uuid}` → 返回 `token`;前端保存 Cookie 并携带到后续请求。 4.2 列表分页 页面 → 调用 `list` API(query→实体字段映射)→ Controller `startPage()` → Service/Mapper 查询 → `TableDataInfo` 返回。 4.3 更新(员工示例) 页面 → `PUT /employee` → Controller(事务)→ Service → Mapper/JPA → 受影响行数 → `AjaxResult`。 5. 数据校验与约束 - 控制器层假定实体字段按类型传入; - 业务层可扩展非空、范围、唯一性校验(当前代码未显式实现高级校验规则)。 6. 配置要点 - `application.yml`:数据源/端口/Redis等; - `logback.xml`:日志级别与输出; 7. 安全与权限 - 以 Token 作为会话凭证;未实现细粒度 RBAC 的控制器级别权限; 8. 扩展点 - 在Service引入DTO与校验框架; - 统一异常处理与错误码枚举; - 审计日志与操作记录;