API接口列表
通讯录
部门管理
获取部门列表
接口地址
GET /api/v1/open/departments
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| includeMemberCount | boolean | 否 | 是否包含成员数量,默认false |
返回示例
{
"code": 200,
"message": "获取部门列表成功",
"data": [
{
"id": 1,
"name": "技术部",
"code": "TECH",
"parentId": null,
"sort": 1,
"memberCount": 10,
"children": [
{
"id": 2,
"name": "前端组",
"code": "FRONTEND",
"parentId": 1,
"sort": 1,
"memberCount": 5,
"children": []
}
]
}
]
}
获取部门详情
接口地址
GET /api/v1/open/departments/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 部门ID |
返回示例
{
"code": 200,
"message": "获取部门详情成功",
"data": {
"id": 1,
"name": "技术部",
"code": "TECH",
"parentId": null,
"sort": 1,
"memberCount": 10
}
}
创建部门
接口地址
POST /api/v1/open/departments
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
请求体
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 部门名称 |
| parentId | number | 否 | 父部门ID,不传或传0表示根部门 |
| code | string | 否 | 部门编码,不传则自动生成 |
| sort | number | 否 | 排序号,默认0 |
| description | string | 否 | 部门描述 |
| phone | string | 否 | 部门电话 |
| string | 否 | 部门邮箱 |
返回示例
{
"code": 200,
"message": "创建部门成功",
"data": {
"id": 1,
"name": "技术部",
"code": "TECH",
"parentId": null,
"sort": 1,
"createdAt": "2025-01-01T00:00:00Z"
}
}
更新部门
接口地址
PUT /api/v1/open/departments/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 部门ID |
请求体
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 部门名称 |
| parentId | number | 否 | 父部门ID |
| code | string | 否 | 部门编码 |
| sort | number | 否 | 排序号 |
| description | string | 否 | 部门描述 |
| phone | string | 否 | 部门电话 |
| string | 否 | 部门邮箱 |
返回示例
{
"code": 200,
"message": "更新部门成功",
"data": {
"id": 1,
"name": "技术部",
"code": "TECH",
"parentId": null,
"sort": 1,
"updatedAt": "2025-01-01T00:00:00Z"
}
}
删除部门
接口地址
DELETE /api/v1/open/departments/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 部门ID |
返回示例
{
"code": 200,
"message": "删除部门成功",
"data": null
}
错误说明
- 如果部门下有子部门,返回错误:
该部门下还有子部门,无法删除 - 如果部门下有成员,返回错误:
该部门下还有成员,无法删除
用户管理
获取用户列表
接口地址
GET /api/v1/open/users
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| name | string | 否 | 用户姓名(模糊搜索) |
| departmentId | string | 否 | 部门ID(支持多个,逗号分隔) |
返回示例
{
"code": 200,
"message": "获取用户列表成功",
"data": {
"list": [
{
"id": 1,
"loginName": "zhangsan",
"name": "张三",
"employeeId": "E001",
"mobile": "13800138000",
"departmentId": 1,
"departmentName": "技术部",
"email": "zhangsan@example.com",
"isLeaderInDept": 0,
"directLeader": 0,
"avatar": "https://example.com/avatar.jpg",
"gender": 1,
"status": "on_work",
"roles": [
{
"id": 1,
"name": "普通用户",
"code": "user"
}
],
"createdAt": "2025-01-01T00:00:00Z"
}
],
"total": 100,
"page": 1,
"pageSize": 10
}
}
获取用户详情
接口地址
GET /api/v1/open/users/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
| X-App-ID | AppID | your-app-id |
| X-Timestamp | Unix时间戳(秒) | 1690123456 |
| X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
| Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 用户ID |
返回示例
{
"code": 200,
"message": "获取用户详情成功",
"data": {
"id": 1,
"loginName": "zhangsan",
"name": "张三",
"employeeId": "E001",
"mobile": "13800138000",
"departmentId": 1,
"department": {
"id": 1,
"name": "技术部",
"code": "TECH",
"parentId": null
},
"email": "zhangsan@example.com",
"isLeaderInDept": 0,
"directLeader": 0,
"avatar": "https://example.com/avatar.jpg",
"gender": "男",
"status": "on_work",
"roles": [
{
"id": 1,
"name": "普通用户",
"code": "user"
}
],
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
}
根据部门获取用户列表
接口地址
GET /api/v1/open/users/departments/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 部门ID |
返回示例
{
"code": 200,
"message": "获取用户列表成功",
"data": [
{
"id": 1,
"loginName": "zhangsan",
"name": "张三",
"departmentId": 1,
"departmentName": "技术部"
}
]
}
创建用户
接口地址
POST /api/v1/open/users
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
请求体
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| loginName | string | 是 | 登录名(用户名),必须唯一 |
| name | string | 是 | 用户姓名 |
| departmentId | number | 是 | 部门ID |
| password | string | 否 | 密码,不传则默认为"123456" |
| employeeId | string | 否 | 员工工号,不传则自动生成 |
| mobile | string | 否 | 手机号 |
| string | 否 | 邮箱 | |
| isLeaderInDept | number | 否 | 是否部门负责人(0否,1是) |
| directLeader | number | 否 | 直属上级用户ID |
| avatar | string | 否 | 头像URL |
| gender | number | 否 | 性别(1男,2女) |
| roles | array | 否 | 角色ID数组,不传则分配默认角色 |
返回示例
{
"code": 200,
"message": "创建用户成功",
"data": {
"id": 1,
"loginName": "zhangsan",
"name": "张三",
"employeeId": "E001",
"mobile": "13800138000",
"departmentId": 1,
"email": "zhangsan@example.com",
"createdAt": "2025-01-01T00:00:00Z"
}
}
错误说明
- 如果用户名已存在,返回错误:
用户名已存在 - 如果工号已被使用,返回错误:
工号已被使用 - 如果邮箱已被使用,返回错误:
邮箱已被使用 - 如果手机号已被使用,返回错误:
手机号已被使用 - 如果部门不存在,返回错误:
部门不存在
更新用户
接口地址
PUT /api/v1/open/users/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 用户ID |
请求体
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 用户姓名 |
| departmentId | number | 否 | 部门ID |
| mobile | string | 否 | 手机号 |
| string | 否 | 邮箱 | |
| employeeId | string | 否 | 员工工号 |
| isLeaderInDept | number | 否 | 是否部门负责人(0否,1是) |
| directLeader | number | 否 | 直属上级用户ID |
| avatar | string | 否 | 头像URL |
| gender | number | 否 | 性别(1男,2女) |
| status | string | 否 | 用户状态(on_work在职,leave离职) |
| roles | array | 否 | 角色ID数组 |
返回示例
{
"code": 200,
"message": "更新用户成功",
"data": null
}
错误说明
- 如果用户不存在,返回错误:
用户不存在 - 如果工号已被其他用户使用,返回错误:
工号已被其他用户使用 - 如果部门不存在,返回错误:
部门不存在
删除用户
接口地址
DELETE /api/v1/open/users/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 用户ID |
返回示例
{
"code": 200,
"message": "删除用户成功",
"data": null
}
错误说明
- 如果用户不存在,返回错误:
用户不存在 - 如果尝试删除当前登录用户,返回错误:
不能删除当前登录用户
会议中心
获取会议列表
接口地址
GET /api/v1/open/meetings
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| roomId | number | 否 | 会议室ID |
| userId | number | 否 | 用户ID |
| status | string | 否 | 状态(pending/approved/rejected/canceled/completed) |
| startDate | string | 否 | 开始日期(YYYY-MM-DD) |
| endDate | string | 否 | 结束日期(YYYY-MM-DD) |
| keyword | string | 否 | 关键词搜索(会议标题) |
返回示例
{
"code": 200,
"message": "查询成功",
"data": {
"list": [
{
"id": 1,
"title": "产品讨论会",
"roomId": 1,
"roomName": "会议室A",
"spaceId": 1,
"spaceName": "总部大楼1层-会议室A",
"userId": 10,
"userName": "李四",
"startTime": "2025-07-22T13:00:00Z",
"endTime": "2025-07-22T15:00:00Z",
"status": "approved",
"description": "讨论新产品功能",
"participants": [
{
"id": 1,
"userId": 10,
"userName": "李四",
"role": "organizer",
"status": "accepted"
},
{
"id": 2,
"userId": 11,
"userName": "王五",
"role": "participant",
"status": "accepted"
}
],
"createdAt": "2025-07-20T10:00:00Z",
"updatedAt": "2025-07-20T11:30:00Z"
}
],
"total": 50,
"page": 1,
"pageSize": 10
}
}
获取会议详情
接口地址
GET /api/v1/open/meetings/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 会议ID |
返回示例
{
"code": 200,
"message": "查询成功",
"data": {
"id": 1,
"title": "产品讨论会",
"roomId": 1,
"roomName": "会议室A",
"spaceId": 1,
"spaceName": "总部大楼1层-会议室A",
"userId": 10,
"userName": "李四",
"startTime": "2025-07-22T13:00:00Z",
"endTime": "2025-07-22T15:00:00Z",
"status": "approved",
"description": "讨论新产品功能",
"participants": [
{
"id": 1,
"userId": 10,
"userName": "李四",
"userAvatar": "https://example.com/avatar.jpg",
"role": "organizer",
"status": "accepted",
"checkInTime": "2025-07-22T12:55:00Z",
"checkInMethod": "qr_code"
}
],
"checkInStats": {
"total": 5,
"checked": 3,
"unchecked": 2,
"checkInRate": 60
},
"createdAt": "2025-07-20T10:00:00Z",
"updatedAt": "2025-07-20T11:30:00Z"
}
}
创建会议
接口地址
POST /api/v1/open/meetings
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
{
"title": "团队周会",
"roomId": 1,
"startTime": "2025-07-23T09:00:00Z",
"endTime": "2025-07-23T10:00:00Z",
"description": "每周例会",
"participants": [10, 11, 12],
"notifyAttendees": true,
"requireApproval": false
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| title | string | 是 | 会议标题 |
| roomId | number | 是 | 会议室ID |
| startTime | string | 是 | 开始时间(ISO 8601格式) |
| endTime | string | 是 | 结束时间(ISO 8601格式) |
| description | string | 否 | 会议描述 |
| participants | array | 否 | 参会人ID列表 |
| notifyAttendees | boolean | 否 | 是否通知参会人,默认true |
| requireApproval | boolean | 否 | 是否需要审批,默认false |
返回示例
{
"code": 200,
"message": "创建成功",
"data": {
"id": 2,
"title": "团队周会",
"roomId": 1,
"roomName": "会议室A",
"userId": 1,
"userName": "系统管理员",
"startTime": "2025-07-23T09:00:00Z",
"endTime": "2025-07-23T10:00:00Z",
"status": "approved",
"participants": [10, 11, 12],
"description": "每周例会",
"createdAt": "2025-07-22T10:00:00Z",
"updatedAt": "2025-07-22T10:00:00Z"
}
}
更新会议
接口地址
POST /api/v1/open/meetings/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 会议ID |
请求参数
{
"title": "团队周会-更新",
"startTime": "2025-07-23T09:30:00Z",
"endTime": "2025-07-23T10:30:00Z",
"description": "更新后的描述",
"participants": [10, 11, 12, 13],
"notifyAttendees": true
}
返回示例
{
"code": 200,
"message": "更新成功",
"data": {
"id": 2,
"title": "团队周会-更新",
"startTime": "2025-07-23T09:30:00Z",
"endTime": "2025-07-23T10:30:00Z",
"participants": [10, 11, 12, 13],
"description": "更新后的描述",
"updatedAt": "2025-07-22T11:00:00Z"
}
}
取消会议
接口地址
POST /api/v1/open/meetings/{id}/cancel
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 会议ID |
请求参数
{
"reason": "会议取消原因"
}
返回示例
{
"code": 200,
"message": "取消成功",
"data": null
}
审批中心
获取审批列表
接口地址
GET /api/v1/open/approval
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认20 |
| status | string | 否 | 状态(pending/approved/rejected/cancelled) |
| type | string | 否 | 业务类型(meeting/leave/expense等) |
返回示例
{
"code": 200,
"message": "获取审批列表成功",
"data": {
"list": [
{
"id": 1,
"businessType": "meeting",
"businessId": 100,
"businessTitle": "产品讨论会",
"applicantId": 10,
"applicantName": "李四",
"status": "pending",
"currentStep": 1,
"totalSteps": 2,
"workflowId": 1,
"workflowName": "会议审批流程",
"createdAt": "2025-07-20T10:00:00Z",
"updatedAt": "2025-07-20T10:00:00Z"
}
],
"total": 50,
"page": 1,
"pageSize": 20
}
}
获取审批详情
GET /api/v1/open/approval/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 审批ID |
返回示例
{
"code": 200,
"message": "获取审批详情成功",
"data": {
"id": 1,
"businessType": "meeting",
"businessId": 100,
"businessTitle": "产品讨论会",
"businessData": {
"title": "产品讨论会",
"roomId": 1,
"roomName": "会议室A",
"startTime": "2025-07-22T13:00:00Z",
"endTime": "2025-07-22T15:00:00Z"
},
"applicantId": 10,
"applicantName": "李四",
"status": "pending",
"currentStep": 1,
"totalSteps": 2,
"workflowId": 1,
"workflowName": "会议审批流程",
"approvalSteps": [
{
"step": 1,
"approverId": 5,
"approverName": "部门经理",
"status": "pending",
"comment": null,
"processedAt": null
},
{
"step": 2,
"approverId": 1,
"approverName": "总经理",
"status": "pending",
"comment": null,
"processedAt": null
}
],
"createdAt": "2025-07-20T10:00:00Z",
"updatedAt": "2025-07-20T10:00:00Z"
}
}
获取我的待审批
GET /api/v1/open/approval/my-approvals
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认20 |
| type | string | 否 | 业务类型(meeting/leave/expense等) |
返回示例
{
"code": 200,
"message": "获取待审批列表成功",
"data": {
"list": [
{
"id": 1,
"businessType": "meeting",
"businessId": 100,
"businessTitle": "产品讨论会",
"applicantId": 10,
"applicantName": "李四",
"status": "pending",
"currentStep": 1,
"createdAt": "2025-07-20T10:00:00Z"
}
],
"total": 10,
"page": 1,
"pageSize": 20
}
}
获取我的申请
GET /api/v1/open/approval/my-applications
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认20 |
| status | string | 否 | 状态(pending/approved/rejected/cancelled) |
| type | string | 否 | 业务类型(meeting/leave/expense等) |
返回示例
{
"code": 200,
"message": "获取我的申请列表成功",
"data": {
"list": [
{
"id": 1,
"businessType": "meeting",
"businessId": 100,
"businessTitle": "产品讨论会",
"status": "pending",
"currentStep": 1,
"totalSteps": 2,
"createdAt": "2025-07-20T10:00:00Z"
}
],
"total": 5,
"page": 1,
"pageSize": 20
}
}
处理审批
PUT /api/v1/open/approval/{id}/process
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 审批ID |
请求参数
{
"action": "approve",
"comment": "审批通过"
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | string | 是 | 操作类型:approve-通过,reject-拒绝 |
| comment | string | 否 | 审批意见(拒绝时必填) |
返回示例
{
"code": 200,
"message": "审批已通过",
"data": null
}
取消审批
POST /api/v1/open/approval/{id}/cancel
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 审批ID |
返回示例
{
"code": 200,
"message": "审批已取消",
"data": null
}
信息发布
节目管理
获取节目列表
GET /api/v1/open/etv/programs
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| status | string | 否 | 状态(draft/pending/approved/rejected/published/archived) |
| keyword | string | 否 | 关键词搜索(节目名称) |
返回示例
{
"code": 200,
"message": "获取节目列表成功",
"data": {
"list": [
{
"id": 1,
"name": "欢迎屏",
"description": "大厅欢迎屏节目",
"status": "approved",
"duration": 30,
"resolution": "1920x1080",
"width": 1920,
"height": 1080,
"aspectRatio": "16:9",
"orientation": "landscape",
"playMode": "replace",
"tags": "欢迎,大厅",
"createdBy": 1,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
],
"total": 50,
"page": 1,
"pageSize": 10
}
}
获取节目详情
GET /api/v1/open/etv/programs/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 节目ID |
返回示例
{
"code": 200,
"message": "获取节目成功",
"data": {
"id": 1,
"name": "欢迎屏",
"description": "大厅欢迎屏节目",
"status": "approved",
"duration": 30,
"resolution": "1920x1080",
"width": 1920,
"height": 1080,
"aspectRatio": "16:9",
"orientation": "landscape",
"playMode": "replace",
"tags": "欢迎,大厅",
"content": {
"components": [
{
"id": "comp1",
"type": "text",
"x": 100,
"y": 100,
"width": 800,
"height": 200,
"properties": {
"text": "欢迎使用会议管理系统",
"fontSize": 48,
"color": "#000000"
}
}
]
},
"createdBy": 1,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
}
发布管理
创建发布
POST /api/v1/open/etv/publish
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
{
"name": "大厅欢迎屏发布",
"programId": 1,
"target": {
"type": "terminal",
"smartboardIds": [1, 2, 3]
},
"startTime": "2025-07-23T09:00:00Z",
"endTime": "2025-07-23T18:00:00Z",
"priority": 1,
"playMode": "replace",
"description": "发布到大厅智能板",
"startImmediately": true
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 发布名称 |
| programId | number | 是 | 节目ID |
| target | object | 是 | 发布目标配置 |
| target.type | string | 是 | 目标类型:all-全部设备,space-按空间,terminal-指定设备 |
| target.smartboardIds | array | 否 | 智能板ID列表(type为terminal时必填) |
| target.spaceIds | array | 否 | 空间ID列表(type为space时必填) |
| startTime | string | 是 | 开始时间(ISO 8601格式) |
| endTime | string | 否 | 结束时间(ISO 8601格式) |
| priority | number | 否 | 优先级(数字越大优先级越高),默认0 |
| playMode | string | 否 | 播放模式:replace-替换,append-追加,默认replace |
| description | string | 否 | 描述 |
| startImmediately | boolean | 否 | 是否立即开始发布,默认false |
返回示例
{
"code": 200,
"message": "发布成功",
"data": {
"id": 1,
"name": "大厅欢迎屏发布",
"programId": 1,
"programName": "欢迎屏",
"target": {
"type": "terminal",
"smartboardIds": [1, 2, 3]
},
"status": "publishing",
"startTime": "2025-07-23T09:00:00Z",
"endTime": "2025-07-23T18:00:00Z",
"priority": 1,
"playMode": "replace",
"description": "发布到大厅智能板",
"publishedBy": 1,
"publishedAt": "2025-07-22T10:00:00Z",
"createdAt": "2025-07-22T10:00:00Z",
"updatedAt": "2025-07-22T10:00:00Z"
}
}
获取发布列表
GET /api/v1/open/etv/publish
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| status | string | 否 | 状态(pending/publishing/success/failed/cancelled) |
返回示例
{
"code": 200,
"message": "获取发布列表成功",
"data": {
"list": [
{
"id": 1,
"name": "大厅欢迎屏发布",
"programId": 1,
"programName": "欢迎屏",
"target": {
"type": "terminal",
"smartboardIds": [1, 2, 3]
},
"status": "success",
"startTime": "2025-07-23T09:00:00Z",
"endTime": "2025-07-23T18:00:00Z",
"priority": 1,
"playMode": "replace",
"publishedBy": 1,
"publishedAt": "2025-07-22T10:00:00Z",
"completedAt": "2025-07-22T10:05:00Z",
"createdAt": "2025-07-22T10:00:00Z"
}
],
"total": 20,
"page": 1,
"pageSize": 10
}
}
获取发布详情
GET /api/v1/open/etv/publish/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 发布ID |
返回示例
{
"code": 200,
"message": "获取发布成功",
"data": {
"id": 1,
"name": "大厅欢迎屏发布",
"programId": 1,
"programName": "欢迎屏",
"target": {
"type": "terminal",
"smartboardIds": [1, 2, 3]
},
"status": "success",
"startTime": "2025-07-23T09:00:00Z",
"endTime": "2025-07-23T18:00:00Z",
"priority": 1,
"playMode": "replace",
"description": "发布到大厅智能板",
"publishedBy": 1,
"publishedAt": "2025-07-22T10:00:00Z",
"completedAt": "2025-07-22T10:05:00Z",
"tasks": [
{
"id": 1,
"smartboardId": 1,
"smartboardName": "大厅智能板1",
"status": "success",
"progress": 100,
"errorMessage": null
}
],
"createdAt": "2025-07-22T10:00:00Z",
"updatedAt": "2025-07-22T10:05:00Z"
}
}
开始发布
POST /api/v1/open/etv/publish/{id}/start
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 发布ID |
返回示例
{
"code": 200,
"message": "开始发布成功",
"data": null
}
取消发布
POST /api/v1/open/etv/publish/{id}/cancel
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 发布ID |
返回示例
{
"code": 200,
"message": "取消发布成功",
"data": null
}
空间管理
空间管理
获取空间列表
GET /api/v1/open/space/spaces
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| keyword | string | 否 | 关键词搜索(空间名称、编码) |
| areaId | number | 否 | 区域ID |
| status | string | 否 | 状态(active/inactive/maintenance/reserved) |
| isBookable | boolean | 否 | 是否可预订 |
| capabilityIds | array | 否 | 能力ID列表(支持多个,如:capabilityIds[]=1&capabilityIds[]=2) |
返回示例
{
"code": 200,
"message": "获取空间列表成功",
"data": {
"list": [
{
"id": 1,
"spaceCode": "ROOM001",
"name": "会议室A",
"areaId": 1,
"area": "总部大楼-5楼-东区",
"areaSize": 50.5,
"capacity": 20,
"status": "active",
"isBookable": true,
"capabilities": [
{
"id": 1,
"code": "meeting",
"name": "会议功能"
}
],
"meetingRoomDetail": {
"id": 1,
"spaceId": 1,
"equipment": [1, 2, 3],
"images": ["https://example.com/room1.jpg"]
},
"description": "小型会议室",
"image": "https://example.com/room1.jpg",
"tags": "小型,投影",
"managerId": 1,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
],
"total": 100,
"page": 1,
"pageSize": 10
}
}
获取空间树
GET /api/v1/open/space/spaces/tree
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
返回示例
{
"code": 200,
"message": "获取空间树成功",
"data": [
{
"id": 1,
"name": "总部大楼",
"type": "building",
"code": "HQ",
"children": [
{
"id": 2,
"name": "5楼",
"type": "floor",
"code": "F5",
"children": [
{
"id": 3,
"name": "东区",
"type": "zone",
"code": "EAST",
"spaces": [
{
"id": 1,
"spaceCode": "ROOM001",
"name": "会议室A",
"deviceCount": 3
}
]
}
]
}
]
}
]
}
获取空间详情
GET /api/v1/open/space/spaces/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 空间ID |
返回示例
{
"code": 200,
"message": "获取空间成功",
"data": {
"id": 1,
"spaceCode": "ROOM001",
"name": "会议室A",
"areaId": 1,
"area": "总部大楼-5楼-东区",
"areaSize": 50.5,
"capacity": 20,
"status": "active",
"isBookable": true,
"capabilities": [
{
"id": 1,
"code": "meeting",
"name": "会议功能",
"description": "支持会议预订和管理"
}
],
"meetingRoomDetail": {
"id": 1,
"spaceId": 1,
"equipment": [
{
"id": 1,
"name": "投影仪",
"category": "display"
}
],
"images": ["https://example.com/room1.jpg"],
"contactPerson": "张三",
"contactPhone": "13800138000"
},
"description": "小型会议室",
"image": "https://example.com/room1.jpg",
"tags": "小型,投影",
"managerId": 1,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
}
创建空间
POST /api/v1/open/space/spaces
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
{
"spaceCode": "ROOM002",
"name": "会议室B",
"areaId": 1,
"areaSize": 60.0,
"capacity": 30,
"status": "active",
"isBookable": true,
"capabilityIDs": [1, 2],
"description": "中型会议室",
"tags": "中型,视频会议",
"meetingRoom": {
"equipment": [1, 2, 3],
"contactPerson": "李四",
"contactPhone": "13800138001"
}
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| spaceCode | string | 否 | 空间编码(不提供时自动生成) |
| name | string | 是 | 空间名称 |
| areaId | number | 否 | 区域ID |
| areaSize | number | 否 | 面积(平方米) |
| capacity | number | 否 | 容纳人数 |
| status | string | 否 | 状态(active/inactive/maintenance/reserved),默认active |
| isBookable | boolean | 否 | 是否可预订,默认false |
| capabilityIDs | array | 是 | 能力ID列表(至少选择一个) |
| description | string | 否 | 描述 |
| tags | string | 否 | 标签(逗号分隔) |
| meetingRoom | object | 否 | 会议室详情(当capabilityIDs包含会议能力时) |
| meetingRoom.equipment | array | 否 | 设备ID列表 |
| meetingRoom.contactPerson | string | 否 | 联系人 |
| meetingRoom.contactPhone | string | 否 | 联系电话 |
返回示例
{
"code": 200,
"message": "创建空间成功",
"data": {
"id": 2,
"spaceCode": "ROOM002",
"name": "会议室B",
"areaId": 1,
"status": "active",
"isBookable": true,
"capabilities": [
{
"id": 1,
"code": "meeting",
"name": "会议功能"
}
],
"createdAt": "2025-07-22T10:00:00Z",
"updatedAt": "2025-07-22T10:00:00Z"
}
}
更新空间
PUT /api/v1/open/space/spaces/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 空间ID |
请求参数
{
"name": "会议室B-更新",
"areaSize": 65.0,
"capacity": 35,
"status": "active",
"isBookable": true,
"capabilityIDs": [1, 2, 3],
"description": "更新后的描述",
"tags": "中型,视频会议,智能"
}
返回示例
{
"code": 200,
"message": "更新空间成功",
"data": {
"id": 2,
"name": "会议室B-更新",
"areaSize": 65.0,
"capacity": 35,
"updatedAt": "2025-07-22T11:00:00Z"
}
}
删除空间
DELETE /api/v1/open/space/spaces/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 空间ID |
返回示例
{
"code": 200,
"message": "删除空间成功",
"data": null
}
区域管理
获取区域列表
GET /api/v1/open/space/areas
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
返回示例
{
"code": 200,
"message": "获取区域列表成功",
"data": [
{
"id": 1,
"name": "总部大楼",
"code": "HQ",
"type": "building",
"parentId": null,
"status": "active",
"sort": 1,
"description": "公司总部大楼",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
]
}
获取区域树
GET /api/v1/open/space/areas/tree
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
返回示例
{
"code": 200,
"message": "获取区域树成功",
"data": [
{
"id": 1,
"name": "总部大楼",
"code": "HQ",
"type": "building",
"parentId": null,
"status": "active",
"sort": 1,
"children": [
{
"id": 2,
"name": "5楼",
"code": "F5",
"type": "floor",
"parentId": 1,
"status": "active",
"sort": 1,
"children": [
{
"id": 3,
"name": "东区",
"code": "EAST",
"type": "zone",
"parentId": 2,
"status": "active",
"sort": 1,
"children": []
}
]
}
]
}
]
}
获取区域详情
GET /api/v1/open/space/areas/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 区域ID |
返回示例
{
"code": 200,
"message": "获取区域成功",
"data": {
"id": 1,
"name": "总部大楼",
"code": "HQ",
"type": "building",
"parentId": null,
"parent": null,
"status": "active",
"sort": 1,
"description": "公司总部大楼",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
}
创建区域
POST /api/v1/open/space/areas
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
{
"name": "6楼",
"code": "F6",
"type": "floor",
"parentId": 1,
"status": "active",
"sort": 2,
"description": "6楼办公区"
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 区域名称 |
| code | string | 否 | 区域编码(不提供时自动生成) |
| type | string | 是 | 类型:city-城市,campus-园区,building-楼栋,floor-楼层,zone-区域 |
| parentId | number | 否 | 父区域ID |
| status | string | 否 | 状态(active/inactive),默认active |
| sort | number | 否 | 排序,默认0 |
| description | string | 否 | 描述 |
返回示例
{
"code": 200,
"message": "创建区域成功",
"data": {
"id": 4,
"name": "6楼",
"code": "F6",
"type": "floor",
"parentId": 1,
"status": "active",
"sort": 2,
"description": "6楼办公区",
"createdAt": "2025-07-22T10:00:00Z",
"updatedAt": "2025-07-22T10:00:00Z"
}
}
更新区域
PUT /api/v1/open/space/areas/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 区域ID |
请求参数
{
"name": "6楼-更新",
"status": "active",
"sort": 3,
"description": "更新后的描述"
}
返回示例
{
"code": 200,
"message": "更新区域成功",
"data": {
"id": 4,
"name": "6楼-更新",
"status": "active",
"sort": 3,
"description": "更新后的描述",
"updatedAt": "2025-07-22T11:00:00Z"
}
}
删除区域
DELETE /api/v1/open/space/areas/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 区域ID |
返回示例
{
"code": 200,
"message": "删除区域成功",
"data": null
}
用户状态管理
获取用户状态列表
GET /api/v1/open/user-status
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
返回示例
{
"code": 200,
"message": "获取用户状态列表成功",
"data": [
{
"id": 1,
"code": "on_work",
"name": "在岗",
"description": "正常工作中",
"color": "green",
"icon": "user-check",
"isDefault": 1,
"isSystem": 1,
"order": 1,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
},
{
"id": 2,
"code": "off_work",
"name": "下班",
"description": "已经下班",
"color": "gray",
"icon": "user-x",
"isDefault": 0,
"isSystem": 1,
"order": 2,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
},
{
"id": 3,
"code": "busy",
"name": "忙碌",
"description": "正在忙碌中",
"color": "orange",
"icon": "user-clock",
"isDefault": 0,
"isSystem": 0,
"order": 3,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
]
}
更新当前用户状态
POST /api/v1/open/user-status/update
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
{
"statusCode": "busy"
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| statusCode | string | 是 | 状态编码 |
返回示例
{
"code": 200,
"message": "更新用户状态成功",
"data": {
"id": 3,
"code": "busy",
"name": "忙碌",
"color": "orange",
"icon": "user-clock",
"isDefault": 0,
"isSystem": 0,
"order": 3,
"userStatus": "busy"
}
}
创建用户状态(管理员)
POST /api/v1/open/user-status
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
{
"code": "meeting",
"name": "会议中",
"description": "正在参加会议",
"color": "blue",
"icon": "users",
"isDefault": 0,
"order": 4
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | string | 是 | 状态编码(唯一) |
| name | string | 是 | 状态名称 |
| description | string | 否 | 状态描述 |
| color | string | 否 | 显示颜色 |
| icon | string | 否 | 状态图标 |
| isDefault | number | 否 | 是否默认状态(0-否,1-是) |
| order | number | 否 | 排序,默认0 |
返回示例
{
"code": 200,
"message": "创建用户状态成功",
"data": {
"id": 4,
"code": "meeting",
"name": "会议中",
"description": "正在参加会议",
"color": "blue",
"icon": "users",
"isDefault": 0,
"isSystem": 0,
"order": 4,
"createdAt": "2025-07-22T10:00:00Z",
"updatedAt": "2025-07-22T10:00:00Z"
}
}
更新用户状态(管理员)
PUT /api/v1/open/user-status/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 用户状态ID |
请求参数
{
"name": "会议中-更新",
"color": "purple",
"icon": "video",
"isDefault": 0,
"order": 5
}
参数说明
- 系统状态(isSystem=1)只能修改:name、color、icon、isDefault、order
- 非系统状态可以修改所有字段(包括code)
返回示例
{
"code": 200,
"message": "更新用户状态成功",
"data": {
"id": 4,
"code": "meeting",
"name": "会议中-更新",
"color": "purple",
"icon": "video",
"isDefault": 0,
"order": 5,
"updatedAt": "2025-07-22T11:00:00Z"
}
}
删除用户状态(管理员)
DELETE /api/v1/open/user-status/{id}
请求头
X-App-ID: {AppID}
X-Timestamp: {时间戳}
X-Signature: {签名}
Content-Type: application/json
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 用户状态ID |
注意事项
- 系统状态不允许删除
- 默认状态不允许删除
- 如果该状态正在被用户使用,不允许删除
返回示例
{
"code": 200,
"message": "删除用户状态成功",
"data": null
}
智能通行
获取通行记录
接口地址
GET /api/v1/open/smart-access/records
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| spaceId | number | 否 | 空间ID |
| accessType | string | 否 | 通行方式(face/qr_code/password/card) |
| status | string | 否 | 状态(success/failed) |
| startDate | string | 否 | 开始日期(YYYY-MM-DD) |
| endDate | string | 否 | 结束日期(YYYY-MM-DD) |
返回示例
{
"code": 200,
"message": "获取通行记录成功",
"data": {
"list": [
{
"id": 1,
"spaceId": 1,
"spaceName": "会议室A",
"userId": 10,
"userName": "张三",
"accessType": "face",
"accessTime": "2025-07-22T14:30:00Z",
"status": "success",
"reason": "人脸识别成功",
"deviceInfo": "Android Meeting Pad",
"deviceName": "会议室A门禁设备",
"deviceIP": "192.168.1.100"
}
],
"total": 100,
"page": 1,
"pageSize": 10
}
}
获取门禁配置
接口地址
GET /api/v1/open/smart-access/rooms/{spaceId}/detail
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| spaceId | number | 是 | 空间ID |
返回示例
{
"code": 200,
"message": "获取门禁配置成功",
"data": {
"spaceId": 1,
"spaceName": "会议室A",
"status": "active",
"passwordEnabled": true,
"faceEnabled": true,
"qrCodeEnabled": true,
"cardEnabled": false,
"whitelistCount": 5,
"lastSyncTime": "2025-07-22T14:00:00Z"
}
}
获取房间白名单
接口地址
GET /api/v1/open/smart-access/rooms/{spaceId}/whitelist
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| spaceId | number | 是 | 空间ID |
返回示例
{
"code": 200,
"message": "获取房间白名单成功",
"data": [
{
"id": 1,
"spaceId": 1,
"userId": 10,
"userName": "张三",
"validFrom": "2025-07-01T00:00:00Z",
"validTo": "2025-12-31T23:59:59Z",
"createdAt": "2025-07-01T10:00:00Z"
}
]
}
设备管理
获取设备列表
接口地址
GET /api/v1/open/devices
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码,默认1 |
| pageSize | number | 否 | 每页条数,默认10 |
| type | string | 否 | 设备类型(smartboard/projector/sensor) |
| spaceId | number | 否 | 空间ID |
| status | string | 否 | 在线状态(online/offline) |
| keyword | string | 否 | 关键词搜索(设备名称、IP地址) |
返回示例
{
"code": 200,
"message": "获取设备列表成功",
"data": {
"list": [
{
"id": 1,
"name": "会议室A智能平板",
"type": "smartboard",
"spaceId": 1,
"spaceName": "会议室A",
"ipAddress": "192.168.1.100",
"macAddress": "00:11:22:33:44:55",
"status": "online",
"lastHeartbeat": "2025-07-22T14:30:00Z",
"systemVersion": "Android 11",
"appVersion": "1.0.0",
"screenResolution": "1920x1080",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-07-22T14:30:00Z"
}
],
"total": 50,
"page": 1,
"pageSize": 10
}
}
获取设备详情
接口地址
GET /api/v1/open/devices/{id}
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 设备ID |
返回示例
{
"code": 200,
"message": "获取设备详情成功",
"data": {
"id": 1,
"name": "会议室A智能平板",
"type": "smartboard",
"spaceId": 1,
"spaceName": "会议室A",
"ipAddress": "192.168.1.100",
"macAddress": "00:11:22:33:44:55",
"status": "online",
"lastHeartbeat": "2025-07-22T14:30:00Z",
"systemVersion": "Android 11",
"appVersion": "1.0.0",
"screenResolution": "1920x1080",
"deviceModel": "MeetingPad Pro",
"cpuUsage": 45.5,
"memoryUsage": 60.2,
"storageTotal": 64,
"storageUsed": 32,
"storageAvailable": 32,
"networkStatus": "connected",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-07-22T14:30:00Z"
}
}
远程控制设备
接口地址
POST /api/v1/open/devices/{id}/control
请求头
| 请求头 | 说明 | 示例 |
|---|---|---|
X-App-ID | AppID | your-app-id |
X-Timestamp | Unix时间戳(秒) | 1690123456 |
X-Signature | HMAC-SHA256签名 | a1b2c3d4e5f6... |
Content-Type | 内容类型 | application/json |
注意:所有接口都需要使用AppID/AppSecret认证,签名生成方法请参考认证机制章节。
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | number | 是 | 设备ID |
请求参数
{
"action": "restart",
"params": {}
}
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | string | 是 | 操作类型:restart-重启,shutdown-关机,wake-唤醒,volume-音量调节,brightness-亮度调节 |
| params | object | 否 | 操作参数(如音量值、亮度值等) |
返回示例
{
"code": 200,
"message": "设备控制指令已发送",
"data": {
"deviceId": 1,
"action": "restart",
"status": "sent",
"timestamp": "2025-07-22T14:35:00Z"
}
}