软件需求规格说明书(SRS) 1. 引言 1.1 目的 本SRS用于规范“企业人力资源与薪酬管理系统(ECMS)”当前已实现的软件需求,作为设计、测试与验收的依据。本文档严格依据现有代码实现与前端路由/接口编写,不包含未实现的功能。 1.2 范围 系统提供部门信息管理、员工信息管理、员工绩效评价管理、招聘名额管理、薪资标准管理、登录与验证码功能,并提供对应的前后端实现。 1.3 读者对象 开发人员、测试人员、项目管理者、指导老师与评审人员。 1.4 参考资料 - 后端:`backend/backend/prj-backend(Spring Boot版)` Spring Boot 应用 - 前端:`frontend` Vue 应用 - 主要代码位置:后端 `com.prj.controller.*`、`com.prj.domain.*`;前端 `src/api/*.js`、`src/router/index.js` 1.5 术语与缩略语 - KPI:关键绩效指标 - SRS:软件需求规格说明书 2. 系统概述 2.1 系统目标 为企业提供基础的人力资源与薪酬相关信息的增删改查与查询分页,支持登录鉴权及验证码。 2.2 用户角色 - 普通登录用户:可以访问各信息管理页面并执行相应的列表、查看、增删改操作(具体权限由后端安全配置决定,当前代码未在控制器级别区分角色)。 2.3 运行环境 - 后端:Java 8+/Spring Boot,接口风格为 REST; - 前端:Vue,使用基于 `@/utils/request` 的 Axios 封装; - 数据库:依据实体与 MyBatis/JPA 映射(如 `HireNum` 使用 JPA 注解;其余实体通过 Mapper XML 进行 CRUD)。 3. 外部接口需求(API) 说明:以下接口均返回统一包装对象 `AjaxResult` 或分页包装 `TableDataInfo`(后端 `BaseController` 提供 `startPage()` 和 `getDataByPage()`)。 3.1 登录与验证码 - GET `/captchaImage` - 功能:获取验证码图片与UUID;验证码存入 Redis,键以 `Constants.CAPTCHA_CODE_KEY + uuid` 保存。 - 返回:`{ uuid: string, img: string(Base64) }` 以及成功标识。 - POST `/login` - 入参:`{ username, password, code, uuid }` - 功能:验证验证码并登录,成功后返回 `token`,键名为 `Constants.TOKEN`。 3.2 部门信息管理(后端 `DeptController`,前端 `src/api/dept_info.js`) - GET `/dept_info/list`:分页查询;查询参数映射到 `Dept` 字段。 - GET `/dept_info/{id}`:按ID获取详情。 - POST `/dept_info`:新增部门。 - PUT `/dept_info`:修改部门。 - DELETE `/dept_info/{ids}`:删除,支持批量ID。 3.3 员工信息管理(后端 `EmployeeController`,前端 `src/api/employee.js`) - GET `/employee/list`:分页查询。 - GET `/employee/{id}`:按ID获取详情。 - POST `/employee`:新增。 - PUT `/employee`:修改(方法含事务注解)。 - DELETE `/employee/{ids}`:删除(批量)。 3.4 员工评价管理(后端 `EmployeeKpiController`,前端 `src/api/employee_kpi.js`) - GET `/employee_kpi/list` - GET `/employee_kpi/{id}` - POST `/employee_kpi` - PUT `/employee_kpi` - DELETE `/employee_kpi/{ids}` 3.5 招人名额管理(后端 `HireNumController`,前端 `src/api/hirenum.js`) - GET `/hirenum/list` - GET `/hirenum/{id}` - POST `/hirenum` - PUT `/hirenum` - DELETE `/hirenum/{ids}` 3.6 薪资标准管理(后端 `SalaryLevelController`,前端 `src/api/salary_level.js`) - GET `/salary_level/list` - GET `/salary_level/{id}` - POST `/salary_level` - PUT `/salary_level` - DELETE `/salary_level/{ids}` 4. 功能性需求 4.1 登录与验证码 - 用户访问登录页(前端路由 `/login`),先调用 `/captchaImage` 获取 `uuid` 与验证码图片;填写用户名、密码与验证码提交到 `/login`;成功后获得 `token` 并维持会话。 4.2 菜单与路由导航(前端 `src/router/index.js`) - 首页 `/index` - 部门信息管理 `/dept_info` - 薪资标准管理 `/salary_level` - 招人名额管理 `/hirenum` - 员工信息管理 `/employee` - 员工评价管理 `/employee_kpi` 4.3 业务模块用例(均支持列表、查看、创建、更新、删除) - 部门信息:维护部门编号、名称、经理、汇报对象。 - 员工信息:维护员工编号、部门、姓名、职位、薪资。 - 员工评价:维护员工编号、考评结果、奖金、考评人。 - 招人名额:维护部门、名额数量、截止时间。 - 薪资标准:维护职位类型、标准薪资、上下浮动范围。 5. 数据需求(领域模型) 5.1 `Dept` - `id: Long` 部门编号 - `name: String` 部门名 - `manager: String` 部门经理 - `reportto: String` 汇报对象 5.2 `Employee` - `id: Long` 编号 - `dept: String` 部门 - `name: String` 姓名 - `position: String` 职位 - `salary: BigDecimal` 薪资 5.3 `EmployeeKpi` - `id: Long` 员工编号 - `kpi: String` 考评结果 - `bonus: String` 奖金 - `manager: String` 考评人 5.4 `HireNum`(带JPA表映射,表名 `hire_num`) - `id: Long` 主键,自增 - `dept: String` 部门 - `num: BigDecimal` 招人名额 - `endtime: String` 截止时间 5.5 `SalaryLevel` - `id: Long` - `jobType: String` 职位类型 - `salary: BigDecimal` 薪资水平 - `salaryrange: BigDecimal` 上下幅度 6. 非功能性需求 6.1 性能 - 列表查询统一分页(`startPage()`),保障大数据量场景的响应; - 常规CRUD操作在单体应用内应在300ms内完成(实验室/教学环境)。 6.2 可靠性与事务 - 员工信息修改接口含事务边界,保障更新一致性; - 其他模块使用服务层与Mapper/JPA进行持久化,错误通过 `AjaxResult.error` 反馈。 6.3 安全 - 登录采用验证码 + 账号密码,颁发 `token`;前端应在请求头中附加凭证(封装于 `@/utils/request`)。 6.4 可用性 - 前端导航清晰,模块划分为部门/员工/评价/招聘名额/薪资标准五大页面 + 登录/首页。 6.5 兼容性 - 后端 REST JSON;前端 Axios 调用;与现代浏览器兼容。 7. 约束与假设 - 代码中未体现复杂权限/角色控制,默认当前用户可访问相关模块; - `HireNum` 使用JPA,其余模块使用MyBatis XML(见 `resources/mapper/*.xml`)。 8. 验收测试计划(概要) 8.1 登录与验证码 - 正常流程:获取验证码 → 正确填写四要素 → 返回 `token`。 - 异常流程:验证码错误/过期、账号密码错误,返回错误信息。 8.2 各模块CRUD - 列表分页:参数查询与总数校验; - 新增/修改:字段必填性与类型校验; - 删除:单个与批量删除后列表与详情验证; - 详情:按ID精确返回。 8.3 前端路由与页面 - 菜单项可进入对应页面并触发相应 API; - 登录后可访问受限页面(如有拦截)。 9. 追踪矩阵(实现对齐) - 路由 ↔ 视图 ↔ API ↔ 控制器 ↔ 领域模型 - `/dept_info` ↔ `views/dept_info` ↔ `src/api/dept_info.js` ↔ `DeptController` ↔ `Dept` - `/employee` ↔ `views/employee` ↔ `src/api/employee.js` ↔ `EmployeeController` ↔ `Employee` - `/employee_kpi` ↔ `views/employee_kpi` ↔ `src/api/employee_kpi.js` ↔ `EmployeeKpiController` ↔ `EmployeeKpi` - `/hirenum` ↔ `views/hirenum` ↔ `src/api/hirenum.js` ↔ `HireNumController` ↔ `HireNum` - `/salary_level` ↔ `views/salary_level` ↔ `src/api/salary_level.js` ↔ `SalaryLevelController` ↔ `SalaryLevel` - `/login` ↔ `views/login` ↔ `POST /login` ↔ `LoginController` - `/captchaImage` ↔ `GET /captchaImage` ↔ `CaptchaController` 10. 变更管理 - 本SRS将随代码与接口变更而更新;当新增/调整 API、路由、数据模型时,需同步修订第3~5章与追踪矩阵。 附录 A:错误码 - 采用统一 `AjaxResult` 包装;具体错误码与消息由后端 `errorCode` 与全局异常处理决定(前端 `src/utils/errorCode.js`)。