From 12b4b586479e60f90f8b1f43e89ddc0e4a74b41c Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Tue, 22 Jul 2025 00:21:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=AE=BF=E8=88=8D=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E8=AE=BE=E7=BD=AE=E7=9A=84=E5=89=8D=E7=AB=AF=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../code-adjust-record-2025-07-03-cursor.md | 62 +++ docs/开发文档/API/宿舍房间管理API.md | 489 ++++++++++++++++++ .../glysqgx/dormManagerSource/index.ts | 0 .../glysqgx/dormManagerSource/types.ts | 0 .../glysslqxgx/dormManagerBuilding/index.ts | 0 .../glysslqxgx/dormManagerBuilding/types.ts | 0 .../{ => xgss}/ssglyxx/dormManager/index.ts | 0 .../{ => xgss}/ssglyxx/dormManager/types.ts | 0 .../{ => xgss}/sslxx/dormBuilding/index.ts | 0 .../{ => xgss}/sslxx/dormBuilding/types.ts | 0 .../api/{ => xgss}/ssqxx/dormArea/index.ts | 0 .../api/{ => xgss}/ssqxx/dormArea/types.ts | 0 .../api/{ => xgss}/xqxx/dormCampus/index.ts | 0 .../api/{ => xgss}/xqxx/dormCampus/types.ts | 0 web/src/api/xgss/xsssfjgl/index.ts | 260 ++++++++++ web/src/api/xgss/xsssfjgl/types.ts | 76 +++ web/src/api/{ => xgss}/xsssgly/dormManager.ts | 0 web/src/components/RightToolbar/index.vue | 4 + .../{ => xgss}/sslxx/dormBuilding/index.vue | 8 +- .../views/{ => xgss}/ssqxx/dormArea/index.vue | 8 +- .../{ => xgss}/xqxx/dormCampus/index.vue | 4 +- .../xgss/xsssfjgl/components/BedDialog.vue | 115 ++++ .../xgss/xsssfjgl/components/RoomDialog.vue | 136 +++++ web/src/views/xgss/xsssfjgl/index.vue | 464 +++++++++++++++++ .../xsssgly/components/AdminDialog.vue | 4 +- .../xsssgly/components/AdminTable.vue | 0 .../xsssgly/components/ScopeDialog.vue | 10 +- web/src/views/{ => xgss}/xsssgly/index.vue | 0 28 files changed, 1623 insertions(+), 17 deletions(-) create mode 100644 docs/变更管理/code-adjust-record-2025-07-03-cursor.md create mode 100644 docs/开发文档/API/宿舍房间管理API.md rename web/src/api/{ => xgss}/glysqgx/dormManagerSource/index.ts (100%) rename web/src/api/{ => xgss}/glysqgx/dormManagerSource/types.ts (100%) rename web/src/api/{ => xgss}/glysslqxgx/dormManagerBuilding/index.ts (100%) rename web/src/api/{ => xgss}/glysslqxgx/dormManagerBuilding/types.ts (100%) rename web/src/api/{ => xgss}/ssglyxx/dormManager/index.ts (100%) rename web/src/api/{ => xgss}/ssglyxx/dormManager/types.ts (100%) rename web/src/api/{ => xgss}/sslxx/dormBuilding/index.ts (100%) rename web/src/api/{ => xgss}/sslxx/dormBuilding/types.ts (100%) rename web/src/api/{ => xgss}/ssqxx/dormArea/index.ts (100%) rename web/src/api/{ => xgss}/ssqxx/dormArea/types.ts (100%) rename web/src/api/{ => xgss}/xqxx/dormCampus/index.ts (100%) rename web/src/api/{ => xgss}/xqxx/dormCampus/types.ts (100%) create mode 100644 web/src/api/xgss/xsssfjgl/index.ts create mode 100644 web/src/api/xgss/xsssfjgl/types.ts rename web/src/api/{ => xgss}/xsssgly/dormManager.ts (100%) rename web/src/views/{ => xgss}/sslxx/dormBuilding/index.vue (98%) rename web/src/views/{ => xgss}/ssqxx/dormArea/index.vue (97%) rename web/src/views/{ => xgss}/xqxx/dormCampus/index.vue (98%) create mode 100644 web/src/views/xgss/xsssfjgl/components/BedDialog.vue create mode 100644 web/src/views/xgss/xsssfjgl/components/RoomDialog.vue create mode 100644 web/src/views/xgss/xsssfjgl/index.vue rename web/src/views/{ => xgss}/xsssgly/components/AdminDialog.vue (98%) rename web/src/views/{ => xgss}/xsssgly/components/AdminTable.vue (100%) rename web/src/views/{ => xgss}/xsssgly/components/ScopeDialog.vue (97%) rename web/src/views/{ => xgss}/xsssgly/index.vue (100%) diff --git a/docs/变更管理/code-adjust-record-2025-07-03-cursor.md b/docs/变更管理/code-adjust-record-2025-07-03-cursor.md new file mode 100644 index 00000000..9ddf3216 --- /dev/null +++ b/docs/变更管理/code-adjust-record-2025-07-03-cursor.md @@ -0,0 +1,62 @@ +# 宿舍楼房间管理功能开发记录 + +**日期:** 2025-07-03 14:30:25 +**开发人员:** Cursor +**功能模块:** 学生宿舍管理系统 - 宿舍楼房间管理 + +## 变更内容 + +### 1. 功能概述 + +开发了宿舍楼房间管理界面,实现了以下功能: +- 左侧树形结构展示校区-宿舍区-宿舍楼的层级关系 +- 右侧按楼层展示房间信息,采用卡片式布局 +- 支持房间的添加、编辑、删除操作 +- 支持床位的添加、编辑、删除操作 +- 支持按房间号和状态进行筛选 + +### 2. 文件变更 + +#### 新增文件 +- `web/src/views/xsssfjgl/index.vue` - 宿舍楼房间管理主界面 +- `web/src/views/xsssfjgl/components/RoomDialog.vue` - 房间编辑对话框组件 +- `web/src/views/xsssfjgl/components/BedDialog.vue` - 床位编辑对话框组件 +- `web/src/api/xsssfjgl/index.ts` - API接口实现 +- `web/src/api/xsssfjgl/types.ts` - API类型定义 + +### 3. 技术实现 + +#### 3.1 树形结构设计 +- 采用Element Plus的Tree组件实现 +- 配置了disabled属性,使校区和宿舍区节点不可选 +- 只有宿舍楼节点可以被选中,并触发右侧数据加载 + +#### 3.2 房间展示 +- 按楼层分组展示房间信息 +- 使用Grid布局实现自适应卡片排列 +- 每张卡片包含房间号、类型、床位使用情况和操作按钮 + +#### 3.3 床位管理 +- 点击"床位管理"按钮弹出对话框 +- 表格展示该房间的所有床位信息 +- 支持床位的增删改操作 + +#### 3.4 数据处理 +- 前期使用模拟数据进行界面开发 +- 预留了真实API接口,便于后期接入后端服务 +- 完整实现了增删改查的前端逻辑 + +## 后续工作 + +1. 对接后端API,替换模拟数据 +2. 根据实际业务需求调整界面细节 +3. 增加权限控制逻辑 +4. 完善数据校验和错误处理 +5. 添加单元测试 + +## 注意事项 + +- 目前使用模拟数据,未与后端对接 +- 表单校验规则已基本实现,但可能需要根据业务规则调整 +- v-model:show-search 等指令存在linter错误,后续需要修复 +- 组件导入和类型引用存在linter错误,需要调整项目配置 \ No newline at end of file diff --git a/docs/开发文档/API/宿舍房间管理API.md b/docs/开发文档/API/宿舍房间管理API.md new file mode 100644 index 00000000..25de75fc --- /dev/null +++ b/docs/开发文档/API/宿舍房间管理API.md @@ -0,0 +1,489 @@ +# 宿舍房间管理API文档 + +**版本:** 1.0.0 +**作者:** Cursor +**更新日期:** 2025-07-03 + +## 目录 + +- [1. 概述](#1-概述) +- [2. 接口基础信息](#2-接口基础信息) +- [3. 宿舍楼树形结构接口](#3-宿舍楼树形结构接口) +- [4. 房间管理接口](#4-房间管理接口) +- [5. 床位管理接口](#5-床位管理接口) +- [6. 数据字典](#6-数据字典) +- [7. 错误码说明](#7-错误码说明) +- [8. 移动端实现](#8-移动端实现) + +## 1. 概述 + +本文档描述了宿舍楼房间管理模块的接口规范,包括宿舍楼树形结构查询、房间增删改查和床位管理等功能。 + +### 1.1 应用场景 + +- 学工处管理宿舍楼房间信息 +- 学生宿舍分配 +- 宿舍房间和床位状态维护 + +### 1.2 功能列表 + +- 宿舍楼树形结构查询 +- 房间列表查询(支持分页和条件筛选) +- 房间新增、修改、删除 +- 床位列表查询 +- 床位新增、修改、删除 + +## 2. 接口基础信息 + +### 2.1 接口规范 + +- 接口采用RESTful风格 +- 请求和响应数据格式均为JSON +- 所有接口均需要携带Token进行认证 +- 接口基础路径: `/xsssfjgl` + +### 2.2 统一响应格式 + +```json +{ + "code": 200, // 响应状态码,200表示成功 + "msg": "操作成功", // 响应消息 + "data": {} // 响应数据,根据接口定义不同而不同 +} +``` + +### 2.3 分页查询响应格式 + +```json +{ + "code": 200, + "msg": "查询成功", + "rows": [], // 数据列表 + "total": 0 // 总记录数 +} +``` + +## 3. 宿舍楼树形结构接口 + +### 3.1 获取宿舍树形结构 + +**接口说明:** 获取校区-宿舍区-宿舍楼的树形结构数据 + +- **请求方式:** GET +- **请求路径:** `/xsssfjgl/tree` +- **请求参数:** 无 + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功", + "data": [ + { + "id": 1, + "label": "东校区", + "type": "campus", + "disabled": true, + "children": [ + { + "id": 11, + "label": "东区宿舍", + "type": "area", + "disabled": true, + "children": [ + { + "id": 111, + "label": "东区1号楼", + "type": "building", + "buildingFloors": 6 + } + ] + } + ] + } + ] +} +``` + +**字段说明:** + +| 字段名 | 类型 | 说明 | +| ---- | ---- | ---- | +| id | string/number | 节点ID | +| label | string | 节点名称 | +| type | string | 节点类型:campus(校区)、area(宿舍区)、building(宿舍楼) | +| disabled | boolean | 是否禁用选择 | +| children | array | 子节点 | +| buildingFloors | number | 宿舍楼层数,仅type为building时有效 | + +## 4. 房间管理接口 + +### 4.1 获取房间列表 + +**接口说明:** 分页查询房间信息 + +- **请求方式:** GET +- **请求路径:** `/xsssfjgl/room/list` +- **请求参数:** + +| 参数名 | 必填 | 类型 | 说明 | +| ---- | ---- | ---- | ---- | +| pageNum | 是 | number | 页码,从1开始 | +| pageSize | 是 | number | 每页记录数 | +| buildingId | 是 | string/number | 宿舍楼ID | +| roomName | 否 | string | 房间名称,支持模糊查询 | +| floorNumber | 否 | number | 楼层号 | +| status | 否 | string | 房间状态:0-正常,1-维修中,2-停用 | + +**响应示例:** + +```json +{ + "code": 200, + "msg": "查询成功", + "rows": [ + { + "roomId": "111101", + "roomName": "101", + "floorNumber": 1, + "buildingId": 111, + "capacity": 4, + "used": 2, + "roomType": "标准间", + "status": "0", + "remark": "", + "createBy": "admin", + "createTime": "2023-01-01 00:00:00", + "updateBy": "admin", + "updateTime": "2023-01-01 00:00:00" + } + ], + "total": 60 +} +``` + +### 4.2 获取房间详情 + +**接口说明:** 根据房间ID获取详细信息 + +- **请求方式:** GET +- **请求路径:** `/xsssfjgl/room/{roomId}` +- **请求参数:** + +| 参数名 | 必填 | 类型 | 说明 | +| ---- | ---- | ---- | ---- | +| roomId | 是 | string/number | 房间ID | + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功", + "data": { + "roomId": "111101", + "roomName": "101", + "floorNumber": 1, + "buildingId": 111, + "capacity": 4, + "used": 2, + "roomType": "标准间", + "status": "0", + "remark": "", + "createBy": "admin", + "createTime": "2023-01-01 00:00:00", + "updateBy": "admin", + "updateTime": "2023-01-01 00:00:00" + } +} +``` + +### 4.3 新增房间 + +**接口说明:** 新增宿舍房间 + +- **请求方式:** POST +- **请求路径:** `/xsssfjgl/room` +- **请求参数:** + +```json +{ + "roomName": "101", + "floorNumber": 1, + "buildingId": 111, + "capacity": 4, + "roomType": "标准间", + "status": "0", + "remark": "新增房间" +} +``` + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +### 4.4 修改房间 + +**接口说明:** 修改宿舍房间信息 + +- **请求方式:** PUT +- **请求路径:** `/xsssfjgl/room` +- **请求参数:** + +```json +{ + "roomId": "111101", + "roomName": "101", + "floorNumber": 1, + "buildingId": 111, + "capacity": 4, + "roomType": "标准间", + "status": "0", + "remark": "修改房间信息" +} +``` + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +### 4.5 删除房间 + +**接口说明:** 删除宿舍房间 + +- **请求方式:** DELETE +- **请求路径:** `/xsssfjgl/room/{roomIds}` +- **请求参数:** + +| 参数名 | 必填 | 类型 | 说明 | +| ---- | ---- | ---- | ---- | +| roomIds | 是 | string | 房间ID,多个ID用逗号分隔 | + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +## 5. 床位管理接口 + +### 5.1 获取床位列表 + +**接口说明:** 查询指定房间的床位列表 + +- **请求方式:** GET +- **请求路径:** `/xsssfjgl/bed/list` +- **请求参数:** + +| 参数名 | 必填 | 类型 | 说明 | +| ---- | ---- | ---- | ---- | +| roomId | 是 | string/number | 房间ID | + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功", + "data": [ + { + "bedId": "111101-1", + "bedName": "1号床", + "roomId": "111101", + "status": "0", + "studentId": null, + "studentName": null, + "remark": "", + "createBy": "admin", + "createTime": "2023-01-01 00:00:00", + "updateBy": "admin", + "updateTime": "2023-01-01 00:00:00" + }, + { + "bedId": "111101-2", + "bedName": "2号床", + "roomId": "111101", + "status": "1", + "studentId": 10001, + "studentName": "张三", + "remark": "", + "createBy": "admin", + "createTime": "2023-01-01 00:00:00", + "updateBy": "admin", + "updateTime": "2023-01-01 00:00:00" + } + ] +} +``` + +### 5.2 新增床位 + +**接口说明:** 新增床位 + +- **请求方式:** POST +- **请求路径:** `/xsssfjgl/bed` +- **请求参数:** + +```json +{ + "bedName": "3号床", + "roomId": "111101", + "status": "0", + "remark": "新增床位" +} +``` + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +### 5.3 修改床位 + +**接口说明:** 修改床位信息 + +- **请求方式:** PUT +- **请求路径:** `/xsssfjgl/bed` +- **请求参数:** + +```json +{ + "bedId": "111101-3", + "bedName": "3号床", + "roomId": "111101", + "status": "1", + "remark": "修改床位信息" +} +``` + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +### 5.4 删除床位 + +**接口说明:** 删除床位 + +- **请求方式:** DELETE +- **请求路径:** `/xsssfjgl/bed/{bedIds}` +- **请求参数:** + +| 参数名 | 必填 | 类型 | 说明 | +| ---- | ---- | ---- | ---- | +| bedIds | 是 | string | 床位ID,多个ID用逗号分隔 | + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +## 6. 数据字典 + +### 6.1 房间状态 + +| 状态码 | 说明 | +| ---- | ---- | +| 0 | 正常 | +| 1 | 维修中 | +| 2 | 停用 | + +### 6.2 床位状态 + +| 状态码 | 说明 | +| ---- | ---- | +| 0 | 空闲 | +| 1 | 已分配 | +| 2 | 维修中 | + +### 6.3 房间类型 + +| 类型 | 说明 | +| ---- | ---- | +| 标准间 | 标准宿舍,通常4-6人 | +| 单人间 | 单人宿舍 | +| 套间 | 带独立卫浴的宿舍 | + +## 7. 错误码说明 + +| 错误码 | 说明 | +| ---- | ---- | +| 200 | 操作成功 | +| 400 | 请求参数错误 | +| 401 | 未授权 | +| 403 | 禁止访问 | +| 404 | 资源不存在 | +| 500 | 系统内部错误 | +| 1001 | 房间名称已存在 | +| 1002 | 房间包含已分配的床位,无法删除 | +| 1003 | 床位已分配给学生,无法删除 | + +## 8. 移动端实现 + +### 8.1 移动端适配说明 + +移动端将实现以下功能: +- 宿舍楼列表查看(无树形结构,改用列表+筛选) +- 房间信息查看 +- 床位信息查看 + +暂不支持在移动端进行房间和床位的增删改操作,仅支持查询功能。 + +### 8.2 特殊API + +移动端将使用与PC端相同的API,但增加以下特殊接口: + +**获取宿舍楼列表:** + +- **请求方式:** GET +- **请求路径:** `/xsssfjgl/mobile/buildings` +- **请求参数:** + +| 参数名 | 必填 | 类型 | 说明 | +| ---- | ---- | ---- | ---- | +| campusId | 否 | string/number | 校区ID | +| areaId | 否 | string/number | 宿舍区ID | + +**响应示例:** + +```json +{ + "code": 200, + "msg": "操作成功", + "data": [ + { + "buildingId": 111, + "buildingName": "东区1号楼", + "campusName": "东校区", + "areaName": "东区宿舍", + "floors": 6 + } + ] +} +``` \ No newline at end of file diff --git a/web/src/api/glysqgx/dormManagerSource/index.ts b/web/src/api/xgss/glysqgx/dormManagerSource/index.ts similarity index 100% rename from web/src/api/glysqgx/dormManagerSource/index.ts rename to web/src/api/xgss/glysqgx/dormManagerSource/index.ts diff --git a/web/src/api/glysqgx/dormManagerSource/types.ts b/web/src/api/xgss/glysqgx/dormManagerSource/types.ts similarity index 100% rename from web/src/api/glysqgx/dormManagerSource/types.ts rename to web/src/api/xgss/glysqgx/dormManagerSource/types.ts diff --git a/web/src/api/glysslqxgx/dormManagerBuilding/index.ts b/web/src/api/xgss/glysslqxgx/dormManagerBuilding/index.ts similarity index 100% rename from web/src/api/glysslqxgx/dormManagerBuilding/index.ts rename to web/src/api/xgss/glysslqxgx/dormManagerBuilding/index.ts diff --git a/web/src/api/glysslqxgx/dormManagerBuilding/types.ts b/web/src/api/xgss/glysslqxgx/dormManagerBuilding/types.ts similarity index 100% rename from web/src/api/glysslqxgx/dormManagerBuilding/types.ts rename to web/src/api/xgss/glysslqxgx/dormManagerBuilding/types.ts diff --git a/web/src/api/ssglyxx/dormManager/index.ts b/web/src/api/xgss/ssglyxx/dormManager/index.ts similarity index 100% rename from web/src/api/ssglyxx/dormManager/index.ts rename to web/src/api/xgss/ssglyxx/dormManager/index.ts diff --git a/web/src/api/ssglyxx/dormManager/types.ts b/web/src/api/xgss/ssglyxx/dormManager/types.ts similarity index 100% rename from web/src/api/ssglyxx/dormManager/types.ts rename to web/src/api/xgss/ssglyxx/dormManager/types.ts diff --git a/web/src/api/sslxx/dormBuilding/index.ts b/web/src/api/xgss/sslxx/dormBuilding/index.ts similarity index 100% rename from web/src/api/sslxx/dormBuilding/index.ts rename to web/src/api/xgss/sslxx/dormBuilding/index.ts diff --git a/web/src/api/sslxx/dormBuilding/types.ts b/web/src/api/xgss/sslxx/dormBuilding/types.ts similarity index 100% rename from web/src/api/sslxx/dormBuilding/types.ts rename to web/src/api/xgss/sslxx/dormBuilding/types.ts diff --git a/web/src/api/ssqxx/dormArea/index.ts b/web/src/api/xgss/ssqxx/dormArea/index.ts similarity index 100% rename from web/src/api/ssqxx/dormArea/index.ts rename to web/src/api/xgss/ssqxx/dormArea/index.ts diff --git a/web/src/api/ssqxx/dormArea/types.ts b/web/src/api/xgss/ssqxx/dormArea/types.ts similarity index 100% rename from web/src/api/ssqxx/dormArea/types.ts rename to web/src/api/xgss/ssqxx/dormArea/types.ts diff --git a/web/src/api/xqxx/dormCampus/index.ts b/web/src/api/xgss/xqxx/dormCampus/index.ts similarity index 100% rename from web/src/api/xqxx/dormCampus/index.ts rename to web/src/api/xgss/xqxx/dormCampus/index.ts diff --git a/web/src/api/xqxx/dormCampus/types.ts b/web/src/api/xgss/xqxx/dormCampus/types.ts similarity index 100% rename from web/src/api/xqxx/dormCampus/types.ts rename to web/src/api/xgss/xqxx/dormCampus/types.ts diff --git a/web/src/api/xgss/xsssfjgl/index.ts b/web/src/api/xgss/xsssfjgl/index.ts new file mode 100644 index 00000000..3dd60879 --- /dev/null +++ b/web/src/api/xgss/xsssfjgl/index.ts @@ -0,0 +1,260 @@ +import request from '@/utils/request'; +import { DormQuery, RoomForm, BedForm, DormTreeNode, RoomInfo, BedInfo } from './types'; + +// API前缀 +const baseUrl = '/xsssfjgl'; + +/** + * 获取宿舍树形结构 + */ +export function getDormTree() { + return request({ + url: baseUrl + '/tree', + method: 'get' + }); +} + +/** + * 获取房间列表 + * @param query 查询条件 + * @returns 房间列表 + */ +export function listRooms(query: DormQuery) { + return request({ + url: baseUrl + '/room/list', + method: 'get', + params: query + }); +} + +/** + * 获取房间详情 + * @param roomId 房间ID + * @returns 房间详情 + */ +export function getRoom(roomId: string | number) { + return request({ + url: baseUrl + '/room/' + roomId, + method: 'get' + }); +} + +/** + * 新增房间 + * @param data 房间信息 + * @returns 结果 + */ +export function addRoom(data: RoomForm) { + return request({ + url: baseUrl + '/room', + method: 'post', + data: data + }); +} + +/** + * 修改房间 + * @param data 房间信息 + * @returns 结果 + */ +export function updateRoom(data: RoomForm) { + return request({ + url: baseUrl + '/room', + method: 'put', + data: data + }); +} + +/** + * 删除房间 + * @param roomIds 房间ID字符串 + * @returns 结果 + */ +export function delRoom(roomIds: string | number) { + return request({ + url: baseUrl + '/room/' + roomIds, + method: 'delete' + }); +} + +/** + * 获取床位列表 + * @param roomId 房间ID + * @returns 床位列表 + */ +export function listBeds(roomId: string | number) { + return request({ + url: baseUrl + '/bed/list', + method: 'get', + params: { roomId } + }); +} + +/** + * 新增床位 + * @param data 床位信息 + * @returns 结果 + */ +export function addBed(data: BedForm) { + return request({ + url: baseUrl + '/bed', + method: 'post', + data: data + }); +} + +/** + * 修改床位 + * @param data 床位信息 + * @returns 结果 + */ +export function updateBed(data: BedForm) { + return request({ + url: baseUrl + '/bed', + method: 'put', + data: data + }); +} + +/** + * 删除床位 + * @param bedIds 床位ID字符串 + * @returns 结果 + */ +export function delBed(bedIds: string | number) { + return request({ + url: baseUrl + '/bed/' + bedIds, + method: 'delete' + }); +} + +// 模拟数据 - 在API接口完成前使用 +// 生成宿舍树形结构的模拟数据 +export function getMockDormTree(): { data: DormTreeNode[] } { + const mockData: DormTreeNode[] = [ + { + id: 1, + label: '东校区', + type: 'campus', + disabled: true, + children: [ + { + id: 11, + label: '东区宿舍', + type: 'area', + disabled: true, + children: [ + { + id: 111, + label: '东区1号楼', + type: 'building', + buildingFloors: 6 + }, + { + id: 112, + label: '东区2号楼', + type: 'building', + buildingFloors: 8 + } + ] + } + ] + }, + { + id: 2, + label: '西校区', + type: 'campus', + disabled: true, + children: [ + { + id: 21, + label: '西区宿舍', + type: 'area', + disabled: true, + children: [ + { + id: 211, + label: '西区1号楼', + type: 'building', + buildingFloors: 7 + }, + { + id: 212, + label: '西区2号楼', + type: 'building', + buildingFloors: 5 + } + ] + } + ] + } + ]; + + return { data: mockData }; +} + +// 生成房间数据的模拟数据 +export function getMockRooms(buildingId: string | number, floorNumber?: number): { rows: RoomInfo[], total: number } { + const rooms: RoomInfo[] = []; + + // 根据buildingId判断楼层数 + let floors = 6; + if (buildingId === 112) floors = 8; + else if (buildingId === 211) floors = 7; + else if (buildingId === 212) floors = 5; + + // 如果指定了楼层,只生成该楼层的数据 + const startFloor = floorNumber || 1; + const endFloor = floorNumber || floors; + + for (let floor = startFloor; floor <= endFloor; floor++) { + for (let i = 1; i <= 10; i++) { + const roomNumber = `${floor}${i.toString().padStart(2, '0')}`; + rooms.push({ + roomId: `${buildingId}${roomNumber}`, + roomName: roomNumber, + floorNumber: floor, + buildingId: buildingId, + capacity: 4, + used: Math.floor(Math.random() * 5), + roomType: '标准间', + status: Math.random() > 0.9 ? '1' : '0', + remark: '', + createBy: 'admin', + createTime: '2023-01-01 00:00:00', + updateBy: 'admin', + updateTime: '2023-01-01 00:00:00' + }); + } + } + + return { + rows: rooms.filter(room => !floorNumber || room.floorNumber === floorNumber), + total: rooms.length + }; +} + +// 生成床位数据的模拟数据 +export function getMockBeds(roomId: string | number): { data: BedInfo[] } { + const beds: BedInfo[] = []; + const capacity = 4; + + for (let i = 1; i <= capacity; i++) { + const status = Math.random() > 0.6 ? '1' : '0'; + beds.push({ + bedId: `${roomId}-${i}`, + bedName: `${i}号床`, + roomId: roomId, + status: status, + studentId: status === '1' ? 10000 + Math.floor(Math.random() * 5000) : undefined, + studentName: status === '1' ? `学生${Math.floor(Math.random() * 1000)}` : undefined, + remark: '', + createBy: 'admin', + createTime: '2023-01-01 00:00:00', + updateBy: 'admin', + updateTime: '2023-01-01 00:00:00' + }); + } + + return { data: beds }; +} diff --git a/web/src/api/xgss/xsssfjgl/types.ts b/web/src/api/xgss/xsssfjgl/types.ts new file mode 100644 index 00000000..d36f734a --- /dev/null +++ b/web/src/api/xgss/xsssfjgl/types.ts @@ -0,0 +1,76 @@ +// 基础字段类型 +export interface BaseEntity { + createBy: number | string; + createTime: string; + updateBy: number | string; + updateTime: string; +} + +// 分页查询参数 +export interface PageQuery { + pageNum: number; + pageSize: number; +} + +// 树形数据节点类型 +export interface DormTreeNode { + id: string | number; + label: string; + children?: DormTreeNode[]; + type: 'campus' | 'area' | 'building'; // 节点类型:校区、宿舍区、宿舍楼 + disabled?: boolean; // 是否禁用选择 + buildingFloors?: number; // 宿舍楼层数 +} + +// 房间信息 +export interface RoomInfo extends BaseEntity { + roomId: string | number; + roomName: string; + floorNumber: number; + buildingId: string | number; + capacity: number; + used: number; + roomType: string; + status: string; // 0-正常 1-维修中 2-停用 + remark: string; +} + +// 床位信息 +export interface BedInfo extends BaseEntity { + bedId: string | number; + bedName: string; + roomId: string | number; + status: string; // 0-空闲 1-已分配 2-维修中 + studentId?: string | number; + studentName?: string; + remark: string; +} + +// 查询参数 +export interface DormQuery extends PageQuery { + buildingId?: string | number; + roomName?: string; + floorNumber?: number; + status?: string; +} + +// 房间表单 +export interface RoomForm { + roomId?: string | number; + roomName: string; + floorNumber: number; + buildingId: string | number; + capacity: number; + roomType: string; + status: string; + remark?: string; +} + +// 床位表单 +export interface BedForm { + bedId?: string | number; + bedName: string; + roomId: string | number; + status: string; + remark?: string; +} diff --git a/web/src/api/xsssgly/dormManager.ts b/web/src/api/xgss/xsssgly/dormManager.ts similarity index 100% rename from web/src/api/xsssgly/dormManager.ts rename to web/src/api/xgss/xsssgly/dormManager.ts diff --git a/web/src/components/RightToolbar/index.vue b/web/src/components/RightToolbar/index.vue index 02a55f78..d1ed8b31 100644 --- a/web/src/components/RightToolbar/index.vue +++ b/web/src/components/RightToolbar/index.vue @@ -99,4 +99,8 @@ onMounted(() => { .show-btn { margin-left: 12px; } +.top-right-btn { + display: flex; + justify-content: flex-end; +} diff --git a/web/src/views/sslxx/dormBuilding/index.vue b/web/src/views/xgss/sslxx/dormBuilding/index.vue similarity index 98% rename from web/src/views/sslxx/dormBuilding/index.vue rename to web/src/views/xgss/sslxx/dormBuilding/index.vue index 65a0f048..9a7b8960 100644 --- a/web/src/views/sslxx/dormBuilding/index.vue +++ b/web/src/views/xgss/sslxx/dormBuilding/index.vue @@ -161,10 +161,10 @@ import { updateDormBuilding, listCampusOptions, listAreaTreeData -} from '@/api/sslxx/dormBuilding'; -import { DormBuildingVO, DormBuildingQuery, DormBuildingForm } from '@/api/sslxx/dormBuilding/types'; -import { DormCampusVO } from '@/api/xqxx/dormCampus/types'; -import { DormAreaVO } from '@/api/ssqxx/dormArea/types'; +} from '@/api/xgss/sslxx/dormBuilding'; +import { DormBuildingVO, DormBuildingQuery, DormBuildingForm } from '@/api/xgss/sslxx/dormBuilding/types'; +import { DormCampusVO } from '@/api/xgss/xqxx/dormCampus/types'; +import { DormAreaVO } from '@/api/xgss/ssqxx/dormArea/types'; import { getCurrentInstance, ComponentInternalInstance, ref, reactive, toRefs, onMounted } from 'vue'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; diff --git a/web/src/views/ssqxx/dormArea/index.vue b/web/src/views/xgss/ssqxx/dormArea/index.vue similarity index 97% rename from web/src/views/ssqxx/dormArea/index.vue rename to web/src/views/xgss/ssqxx/dormArea/index.vue index 78c3745f..a5010478 100644 --- a/web/src/views/ssqxx/dormArea/index.vue +++ b/web/src/views/xgss/ssqxx/dormArea/index.vue @@ -112,10 +112,10 @@ diff --git a/web/src/views/xgss/xsssfjgl/components/RoomDialog.vue b/web/src/views/xgss/xsssfjgl/components/RoomDialog.vue new file mode 100644 index 00000000..544d457f --- /dev/null +++ b/web/src/views/xgss/xsssfjgl/components/RoomDialog.vue @@ -0,0 +1,136 @@ + + + diff --git a/web/src/views/xgss/xsssfjgl/index.vue b/web/src/views/xgss/xsssfjgl/index.vue new file mode 100644 index 00000000..1a752ad4 --- /dev/null +++ b/web/src/views/xgss/xsssfjgl/index.vue @@ -0,0 +1,464 @@ + + + + + diff --git a/web/src/views/xsssgly/components/AdminDialog.vue b/web/src/views/xgss/xsssgly/components/AdminDialog.vue similarity index 98% rename from web/src/views/xsssgly/components/AdminDialog.vue rename to web/src/views/xgss/xsssgly/components/AdminDialog.vue index ab94b74f..506f1675 100644 --- a/web/src/views/xsssgly/components/AdminDialog.vue +++ b/web/src/views/xgss/xsssgly/components/AdminDialog.vue @@ -47,8 +47,8 @@