Files
hzdyjs/docs/需求文档/后勤场地预约需求/场地预约系统需求说明.md
T
zlwu 28232d5d46 feat: 移动端开发规范重大更新
- 🔥 完全重写 .cursor/cursorrules-mobile.md (940行)
  * 基于实际mobile工程Vue 3.4.21+uniapp+uview-plus架构
  * 移除所有JeeSite相关内容,精准匹配实际项目
  * 新增11个完整章节:技术栈、项目结构、页面开发、组件规范等

- 📚 创建完整规范文档 docs/开发文档/移动端开发规范总结.md (800+行)
  * 涵盖从项目架构到部署的全流程指导
  * 提供可直接使用的页面和组件模板
  * 包含现代CSS变量设计系统和用户体验优化

- 🔄 同步更新主配置文件 .cursorrules
  * 更新移动端技术栈描述
  * 调整为Vue 3.4.21+uniapp+uview-plus 3.4.45架构

- 📝 完善变更记录
  * 详细记录规范更新背景和技术价值
  * 为后续维护提供完整历史记录

核心价值:解决规范与实际项目不匹配问题,为Cursor AI提供准确的移动端开发上下文,确保生成代码完全符合实际项目架构。
2025-07-04 15:51:33 +08:00

17 KiB

场地预约系统需求说明书

📖 文档信息

  • 项目名称: 校园管理系统 - 场地预约模块
  • 文档版本: v1.0
  • 创建时间: 2025-07-01
  • 文档类型: 功能需求说明书
  • 适用范围: 后勤管理 - 场地预约管理

🎯 项目概述

1.1 项目背景

为满足校园各类活动和教学需求,需要建设一套完整的场地预约管理系统。该系统将为用户提供便捷的场地预约服务,为管理员提供高效的场地管理和预约审批功能。

1.2 项目目标

  • 建立规范的场地管理体系
  • 实现用户自助场地预约
  • 提供完善的预约审批流程
  • 提升场地使用效率和管理水平

1.3 技术架构

  • 前端: Vue 3 + TypeScript + Element Plus
  • 后端: Spring Boot 3.4.6 + MyBatis-Plus
  • 数据库: MySQL 8.0
  • 权限: Sa-Token + RBAC

🔄 业务流程分析

2.1 核心业务流程

2.1.1 场地管理流程

场地信息录入 → 设置场地管理员 → 场地状态管理 → 场地使用统计

2.1.2 预约申请流程

用户查看场地 → 选择预约时间 → 填写预约信息 → 提交申请 → 时间冲突检测 → 提示确认 → 生成预约单

2.1.3 预约审批流程

场地管理员接收申请 → 审核预约信息 → 时间冲突检测 → 提示确认 → 审批决定 → 更新预约状态 → 通知申请人

2.1.4 预约管理流程

申请人查看预约 → 修改/取消预约 → 预约状态跟踪 → 预约完成确认

2.2 业务规则

2.2.1 权限规则

  • 申请人权限:新增、查看、编辑自己的预约单
  • 场地管理员权限:新增、查看、编辑、审核负责场地的预约单 + 自己申请的预约单
  • 数据隔离:申请人只能看见自己的预约,场地管理员只能看见负责场地的预约

2.2.2 状态流转规则

  • 预约状态:待审批 → 已批准/已拒绝
  • 编辑规则:审批完成前,申请人可修改和取消预约
  • 冲突处理:时间冲突时弹窗提醒,但允许提交和审批

📋 功能需求规格

3.1 场地管理模块

3.1.1 场地信息管理

功能描述: 管理场地基本信息和状态

字段规格:

  • 场地名称 (varchar(100)): 必填,场地名称
  • 场地编码 (varchar(50)): 必填,唯一标识
  • 场地位置 (varchar(200)): 必填,详细位置
  • 场地容量 (int): 必填,最大容纳人数
  • 场地类型 (varchar(20)): 必填,字典值(会议室、教室、运动场等)
  • 场地状态 (char(1)): 必填,0-维修中,1-可用
  • 场地描述 (text): 可选,详细描述
  • 场地图片 (varchar(500)): 可选,图片 URL,多张用逗号分隔
  • 场地管理员 (bigint): 可选,关联用户 ID

核心功能:

  • ✅ 场地 CRUD 操作
  • ✅ 场地状态管理
  • ✅ 场地管理员设置
  • ✅ 场地图片上传
  • ✅ 场地信息搜索筛选

3.1.2 场地类型管理

功能描述: 管理场地分类字典

类型清单:

  • 会议室
  • 教室
  • 运动场
  • 礼堂
  • 实验室
  • 其他

3.2 预约管理模块

3.2.1 预约申请功能

功能描述: 用户发起场地预约申请

字段规格:

  • 申请人信息 (bigint): 必填,关联用户 ID,自动获取
  • 预约场地 (bigint): 必填,关联场地 ID
  • 预约日期 (date): 必填,预约日期
  • 开始时间 (datetime): 必填,预约开始时间
  • 结束时间 (datetime): 必填,预约结束时间
  • 预约用途 (varchar(200)): 必填,活动内容描述
  • 参与人数 (int): 必填,预计参与人数
  • 联系方式 (varchar(20)): 必填,申请人联系电话
  • 特殊需求 (text): 可选,特殊需求说明
  • 预约状态 (char(1)): 系统字段,0-待审批,1-已批准,2-已拒绝

核心功能:

  • ✅ 预约表单提交
  • ✅ 时间冲突检测并提醒
  • ✅ 预约信息验证
  • ✅ 预约单生成

3.2.2 预约审批功能

功能描述: 场地管理员审批预约申请

审批字段:

  • 审批人 (bigint): 系统记录,当前登录用户
  • 审批时间 (datetime): 系统记录,审批操作时间
  • 审批意见 (varchar(500)): 可选,审批备注说明
  • 审批结果 (char(1)): 必填,1-批准,2-拒绝

核心功能:

  • ✅ 审批单据查看
  • ✅ 审批决定操作
  • ✅ 审批意见填写
  • ✅ 时间冲突检测并提醒

3.2.3 预约记录管理

功能描述: 预约信息的查看和管理

核心功能:

  • ✅ 我的预约记录查看
  • ✅ 预约信息编辑(审批前)
  • ✅ 预约取消操作(审批前)
  • ✅ 预约状态跟踪
  • ✅ 预约历史记录

3.3 页面功能规格

3.3.1 场地列表页面

页面路径: /hq/venue/list

功能组件:

  • ✅ 场地信息展示(名称、类型、位置、容量、状态)
  • ✅ 搜索功能(按名称、类型、位置搜索)
  • ✅ 筛选功能(按类型、状态筛选)
  • ✅ 分页显示
  • ✅ 场地详情查看按钮

3.3.2 场地详情页面

页面路径: /hq/venue/detail/:id

功能组件:

  • ✅ 场地基本信息展示
  • ✅ 场地图片展示
  • ✅ 场地预约日历视图
  • ✅ 立即预约按钮
  • ✅ 预约历史记录

3.3.3 我的预约页面

页面路径: /hq/venue/myReservations

功能组件:

  • ✅ 预约记录列表
  • ✅ 预约状态筛选
  • ✅ 预约信息查看
  • ✅ 编辑预约按钮(审批前)
  • ✅ 取消预约按钮(审批前)
  • ✅ 新增预约按钮

3.3.4 预约审批页面

页面路径: /hq/venue/approval

功能组件:

  • ✅ 待审批预约列表
  • ✅ 预约详情查看
  • ✅ 审批操作按钮
  • ✅ 审批意见填写
  • ✅ 批量审批功能

3.3.5 场地使用统计页面

页面路径: /hq/venue/statistics

功能组件:

  • ✅ 场地使用率统计图表
  • ✅ 预约申请量统计
  • ✅ 热门场地排行
  • ✅ 时间段分析
  • ✅ 导出报表功能

🗄️ 数据模型设计

4.1 数据表结构

4.1.1 场地信息表 (hq_venue_info)

CREATE TABLE `hq_venue_info` (
  `id` bigint(20) NOT NULL COMMENT '场地ID',
  `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
  `venue_name` varchar(100) NOT NULL COMMENT '场地名称',
  `venue_code` varchar(50) NOT NULL COMMENT '场地编码',
  `venue_location` varchar(200) NOT NULL COMMENT '场地位置',
  `venue_capacity` int(11) NOT NULL COMMENT '场地容量',
  `venue_type` varchar(20) NOT NULL COMMENT '场地类型',
  `venue_status` char(1) NOT NULL DEFAULT '1' COMMENT '场地状态(0-维修中 1-可用)',
  `venue_description` text COMMENT '场地描述',
  `venue_images` varchar(500) COMMENT '场地图片',
  `venue_manager_id` bigint(20) COMMENT '场地管理员ID',
  `venue_manager_name` varchar(30) COMMENT '场地管理员姓名',
  `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `deleted` tinyint(4) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_venue_code` (`venue_code`),
  KEY `idx_venue_type` (`venue_type`),
  KEY `idx_venue_status` (`venue_status`),
  KEY `idx_venue_manager` (`venue_manager_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场地信息表';

4.1.2 场地预约表 (hq_venue_reservation)

CREATE TABLE `hq_venue_reservation` (
  `id` bigint(20) NOT NULL COMMENT '预约ID',
  `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
  `venue_id` bigint(20) NOT NULL COMMENT '场地ID',
  `venue_name` varchar(100) NOT NULL COMMENT '场地名称',
  `applicant_id` bigint(20) NOT NULL COMMENT '申请人ID',
  `applicant_name` varchar(30) NOT NULL COMMENT '申请人姓名',
  `applicant_phone` varchar(20) NOT NULL COMMENT '联系方式',
  `reservation_date` date NOT NULL COMMENT '预约日期',
  `start_time` datetime NOT NULL COMMENT '开始时间',
  `end_time` datetime NOT NULL COMMENT '结束时间',
  `reservation_purpose` varchar(200) NOT NULL COMMENT '预约用途',
  `participant_count` int(11) NOT NULL COMMENT '参与人数',
  `special_requirements` text COMMENT '特殊需求',
  `reservation_status` char(1) NOT NULL DEFAULT '0' COMMENT '预约状态(0-待审批 1-已批准 2-已拒绝)',
  `approver_id` bigint(20) COMMENT '审批人ID',
  `approver_name` varchar(30) COMMENT '审批人姓名',
  `approve_time` datetime COMMENT '审批时间',
  `approve_remark` varchar(500) COMMENT '审批意见',
  `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `deleted` tinyint(4) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  PRIMARY KEY (`id`),
  KEY `idx_venue_id` (`venue_id`),
  KEY `idx_applicant_id` (`applicant_id`),
  KEY `idx_reservation_date` (`reservation_date`),
  KEY `idx_reservation_status` (`reservation_status`),
  KEY `idx_time_range` (`start_time`, `end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场地预约表';

4.2 字典数据

4.2.1 场地类型字典 (sys_dict_type: hq_venue_type)

INSERT INTO sys_dict_data VALUES (NULL, 1, '会议室', 'meeting_room', 'hq_venue_type', '', '', 'Y', '0', 'admin', sysdate(), '', NULL, '会议室');
INSERT INTO sys_dict_data VALUES (NULL, 2, '教室', 'classroom', 'hq_venue_type', '', '', 'Y', '0', 'admin', sysdate(), '', NULL, '教室');
INSERT INTO sys_dict_data VALUES (NULL, 3, '运动场', 'sports_field', 'hq_venue_type', '', '', 'Y', '0', 'admin', sysdate(), '', NULL, '运动场');
INSERT INTO sys_dict_data VALUES (NULL, 4, '礼堂', 'auditorium', 'hq_venue_type', '', '', 'Y', '0', 'admin', sysdate(), '', NULL, '礼堂');
INSERT INTO sys_dict_data VALUES (NULL, 5, '实验室', 'laboratory', 'hq_venue_type', '', '', 'Y', '0', 'admin', sysdate(), '', NULL, '实验室');
INSERT INTO sys_dict_data VALUES (NULL, 6, '其他', 'other', 'hq_venue_type', '', '', 'Y', '0', 'admin', sysdate(), '', NULL, '其他');

4.2.2 预约状态字典 (sys_dict_type: hq_reservation_status)

INSERT INTO sys_dict_data VALUES (NULL, 1, '待审批', '0', 'hq_reservation_status', '', 'warning', 'Y', '0', 'admin', sysdate(), '', NULL, '待审批');
INSERT INTO sys_dict_data VALUES (NULL, 2, '已批准', '1', 'hq_reservation_status', '', 'success', 'Y', '0', 'admin', sysdate(), '', NULL, '已批准');
INSERT INTO sys_dict_data VALUES (NULL, 3, '已拒绝', '2', 'hq_reservation_status', '', 'danger', 'Y', '0', 'admin', sysdate(), '', NULL, '已拒绝');

🔐 权限设计

5.1 角色权限

5.1.1 普通用户

  • 数据权限: 只能查看自己的预约记录
  • 操作权限:
    • hq:venue:list - 查看场地列表
    • hq:venue:detail - 查看场地详情
    • hq:venue:reservation:add - 新增预约
    • hq:venue:reservation:edit - 编辑自己的预约(审批前)
    • hq:venue:reservation:cancel - 取消自己的预约(审批前)
    • hq:venue:reservation:view - 查看自己的预约

5.1.2 场地管理员

  • 数据权限:
    • 查看自己负责场地的所有预约记录
    • 查看自己申请的预约记录
  • 操作权限: 继承普通用户权限 +
    • hq:venue:reservation:approve - 审批预约
    • hq:venue:reservation:viewAll - 查看负责场地的所有预约
    • hq:venue:statistics:view - 查看场地使用统计

5.1.3 系统管理员

  • 数据权限: 查看所有数据
  • 操作权限: 所有权限 +
    • hq:venue:add - 新增场地
    • hq:venue:edit - 编辑场地
    • hq:venue:delete - 删除场地
    • hq:venue:manager:set - 设置场地管理员

5.2 菜单权限配置

-- 后勤管理菜单
INSERT INTO sys_menu VALUES(2100, '后勤管理', 0, 5, 'hq', NULL, '', 1, 0, 'M', '0', '0', '', 'logistics', 'admin', sysdate(), '', NULL, '后勤管理目录');

-- 场地管理菜单
INSERT INTO sys_menu VALUES(2110, '场地管理', 2100, 1, 'venue', 'hq/venue/index', '', 1, 0, 'C', '0', '0', 'hq:venue:list', 'venue', 'admin', sysdate(), '', NULL, '场地管理菜单');

-- 场地管理按钮权限
INSERT INTO sys_menu VALUES(2111, '场地查询', 2110, 1, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:query', '#', 'admin', sysdate(), '', NULL, '');
INSERT INTO sys_menu VALUES(2112, '场地新增', 2110, 2, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:add', '#', 'admin', sysdate(), '', NULL, '');
INSERT INTO sys_menu VALUES(2113, '场地修改', 2110, 3, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:edit', '#', 'admin', sysdate(), '', NULL, '');
INSERT INTO sys_menu VALUES(2114, '场地删除', 2110, 4, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:remove', '#', 'admin', sysdate(), '', NULL, '');

-- 场地预约菜单
INSERT INTO sys_menu VALUES(2120, '场地预约', 2100, 2, 'reservation', 'hq/venue/reservation', '', 1, 0, 'C', '0', '0', 'hq:venue:reservation:list', 'calendar', 'admin', sysdate(), '', NULL, '场地预约菜单');

-- 预约按钮权限
INSERT INTO sys_menu VALUES(2121, '预约查询', 2120, 1, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:reservation:query', '#', 'admin', sysdate(), '', NULL, '');
INSERT INTO sys_menu VALUES(2122, '预约新增', 2120, 2, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:reservation:add', '#', 'admin', sysdate(), '', NULL, '');
INSERT INTO sys_menu VALUES(2123, '预约修改', 2120, 3, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:reservation:edit', '#', 'admin', sysdate(), '', NULL, '');
INSERT INTO sys_menu VALUES(2124, '预约审批', 2120, 4, '', '', '', 1, 0, 'F', '0', '0', 'hq:venue:reservation:approve', '#', 'admin', sysdate(), '', NULL, '');

-- 场地统计菜单
INSERT INTO sys_menu VALUES(2130, '使用统计', 2100, 3, 'statistics', 'hq/venue/statistics', '', 1, 0, 'C', '0', '0', 'hq:venue:statistics:view', 'chart', 'admin', sysdate(), '', NULL, '场地使用统计');

📊 统计报表需求

6.1 场地使用率统计

统计维度:

  • 按时间统计(日、周、月、年)
  • 按场地类型统计
  • 按场地统计

统计指标:

  • 预约次数
  • 预约时长
  • 使用率 = 实际使用时长 / 可用时长 × 100%
  • 平均预约时长

6.2 预约申请量统计

统计维度:

  • 按时间统计
  • 按申请人统计
  • 按审批状态统计

统计指标:

  • 预约申请总数
  • 审批通过率
  • 平均审批时长
  • 热门时间段分析

✅ 验收标准

7.1 功能验收标准

7.1.1 场地管理

  • ✅ 能够新增、编辑、删除场地信息
  • ✅ 能够设置场地管理员
  • ✅ 能够上传场地图片
  • ✅ 支持场地搜索和筛选
  • ✅ 场地状态管理正常

7.1.2 预约功能

  • ✅ 用户能够正常提交预约申请
  • ✅ 时间冲突能够正确检测并提醒
  • ✅ 预约信息能够正确保存
  • ✅ 预约状态流转正常

7.1.3 审批功能

  • ✅ 场地管理员能够查看负责场地的预约
  • ✅ 审批操作能够正确执行
  • ✅ 审批记录能够正确保存
  • ✅ 权限控制正确有效

7.2 性能验收标准

  • ✅ 页面加载时间 < 3 秒
  • ✅ 查询响应时间 < 2 秒
  • ✅ 并发用户支持 > 100 人
  • ✅ 数据库响应时间 < 1 秒

7.3 安全验收标准

  • ✅ 数据权限隔离正确
  • ✅ 操作权限控制有效
  • ✅ 输入数据验证完整
  • ✅ 敏感信息保护到位

📅 开发计划

8.1 开发阶段

第一阶段:基础框架(预计 3 天)

  • 数据库表结构设计
  • 基础实体类和 Mapper 创建
  • 权限菜单配置

第二阶段:后端开发(预计 5 天)

  • 场地管理 CRUD 接口
  • 预约管理 CRUD 接口
  • 审批流程接口
  • 统计报表接口

第三阶段:前端开发(预计 7 天)

  • 场地列表和详情页面
  • 预约申请和管理页面
  • 审批管理页面
  • 统计报表页面

第四阶段:测试和优化(预计 3 天)

  • 功能测试
  • 性能测试
  • 安全测试
  • 问题修复和优化

8.2 里程碑节点

  • 第 1 周末:数据库设计和后端基础框架完成
  • 第 2 周末:后端接口开发完成
  • 第 3 周末:前端页面开发完成
  • 第 4 周初:系统测试和验收完成

📝 附录

9.1 相关文档

  • 《校园管理系统开发规范》
  • 《数据库设计规范》
  • 《API 接口规范》
  • 《前端开发规范》

9.2 技术参考

  • Spring Boot 官方文档
  • Vue 3 官方文档
  • Element Plus 组件库
  • MyBatis-Plus 文档

9.3 变更记录

版本 变更时间 变更人 变更内容
v1.0 2025-07-01 system 初始版本创建

🤝 确认签字

需求方确认

  • 确认人: ____
  • 确认时间: ____
  • 签字: ____

开发方确认

  • 确认人: ____
  • 确认时间: ____
  • 签字: ____

文档结束