# meeting 会议室预约系统

## 项目简介

本项目是一个基于 Node.js 的命令行会议室预约系统，支持会议室查询、预约、冲突检测等功能，适用于企业内部会议室管理自动化。

## 主要功能
- 查询可用会议室
- 预约会议室（支持时间冲突检测）
- 会议室详情查看
- 预约信息填写与确认

## 技术栈
- Node.js (>=18)
- JavaScript (ES6+)
- [axios](https://github.com/axios/axios) 网络请求
- [inquirer](https://github.com/SBoudrias/Inquirer.js/) 交互式命令行
- [dayjs](https://github.com/iamkun/dayjs) 日期处理
- [chalk](https://github.com/chalk/chalk) 控制台美化
- [gulp](https://gulpjs.com/) 构建工具

## 目录结构
```
meeting/
  ├── CHANGELOG.md         # 版本变更记录
  ├── gulpfile.mjs         # 构建脚本
  ├── index.js             # 主入口，命令行交互逻辑
  ├── meetingRoom.js       # 会议室预约核心逻辑
  ├── package.json         # 项目依赖与脚本
  └── README.md            # 项目说明文档
```

## 安装与依赖
1. 克隆项目：
   ```bash
   git clone <repo-url>
   cd meeting
   ```
2. 安装依赖：
   ```bash
   npm install
   ```

## 使用方法
### 1. 配置环境变量
请在项目根目录下创建 `.env` 文件，配置以下环境变量：

```
BASE_URL=接口基础地址
COOKIES=认证 Cookie
CSRF_TOKEN=CSRF Token
REFERER=Referer 地址
CITY_ID=城市ID
BOOKING_USER=预约人工号
BOOKING_USER_NAME=预约人姓名
BOOKING_USER_MAIL=预约人邮箱
BOOKING_USER_DEPT=预约人部门
BOOKING_USER_MOBILE=预约人手机号
```

> 注：部分变量如 BOOKING_DATE、BOOKING_START_TIME、BOOKING_END_TIME 可选，若不设置则命令行交互选择。

### 2. 启动命令与参数
可直接运行：
```bash
npm start
# 或
node index.js
```
也可通过命令行参数直接预约：
```bash
node index.js -p 2025-06-26 -s 10:00 -e 11:00
```
参数说明：
- `-p` 预约日期（格式：YYYY-MM-DD）
- `-s` 开始时间（格式：HH:mm）
- `-e` 结束时间（格式：HH:mm）

> 注意：如果通过参数预约时该时间段无可用会议室，系统会自动进入交互模式让你重新选择。

### 3. 交互与预约流程
无论参数还是交互，流程如下：
1. 输入会议主题
2. 选择会议日期（仅显示未来8天内的工作日，自动过滤周末）
3. 选择开始/结束时间（10:00-20:00整点）
4. 系统自动过滤可用会议室
5. 选择会议室后自动发起预约
6. 控制台输出预约结果或错误信息

所有错误信息会在命令行统一输出，无需担心重复提示。

## 命令说明
- `npm start`：启动预约流程
- `npm run build`：构建项目（使用 gulp）
- `npm run release`：版本发布（standard-version）

## 注意事项
- 需提前获取接口认证信息（Cookie、CSRF Token 等）
- 预约冲突检测基于接口返回的会议室预定信息
- 仅支持预约未来8天内的工作日（周一至周五），周末不可预约
- 如无可用会议室，参数预约会自动切换为交互模式，无需重启
- 所有错误信息均在命令行统一输出
- 仅支持命令行交互，不支持 Web 界面

## 版本与变更
详见 [CHANGELOG.md](./CHANGELOG.md)

## 许可证
ISC 