feat(event): 添加酒局报名审核功能并优化前端组件

- 新增 ApproveEvent API 接口用于审核报名用户
- 在 EventCard 组件中显示待审核状态(⏳ 待审核)
- 实现酒局发起人审核报名用户的完整流程
- 添加用户协议和隐私政策页面
- 优化 FeedCard 组件中的图片展示逻辑
- 修复连续打卡天数计算问题
- 更新 HaveADrink SDK 至 1.0.15 版本
This commit is contained in:
cg
2026-08-16 14:50:50 +08:00
parent 527b0e8a8d
commit 81e7a3afa5
20 changed files with 1470 additions and 249 deletions
+62 -1
View File
@@ -14,7 +14,7 @@
* 6. 社交模块 - 朋友圈动态、点赞
**版本:** v1.0.12
**版本:** v1.0.15
## 安装
@@ -1116,6 +1116,34 @@ const req = new UpdatePreferencesReq()
client.UpdatePreferences(req).then(...).catch(...)
```
### 获取用户基础信息
<font color="green">GET</font> `/api/have_a_drink/v1/user/user/basic_info`
#### 请求参数
|名称|类型|校验规则|说明|
|:-|:-|:-|:-|
|id|`string\|number`|| 用户ID|
#### 返回值
|名称|类型|说明|
|:-|:-:|:-|
|nickname|`string`| 用户昵称<br>|
|avatar|`string`| 头像URL<br>|
```javascript
const req = new GetUserBasicInfoReq()
client.GetUserBasicInfo(req).then(...).catch(...)
```
### 上传文件
@@ -1865,6 +1893,35 @@ const req = new CheckInEventReq()
client.CheckInEvent(req).then(...).catch(...)
```
### 酒局发起者审核报名用户
<font color="green">POST</font> `/api/have_a_drink/v1/events/events/approve`
#### 请求参数
|名称|类型|校验规则|说明|
|:-|:-|:-|:-|
|id|`string\|number`|| 酒局ID|
|userId|`string\|number`|| 报名用户ID|
|approve|`ApproveStatus`|待审核: ApproveStatus.Pending = 1<br>已通过: ApproveStatus.Approved = 2<br>已拒绝: ApproveStatus.Rejected = 3| 审核结果|
#### 返回值
|名称|类型|说明|
|:-|:-:|:-|
|ok|`boolean`| 是否成功<br>|
```javascript
const req = new ApproveEventReq()
client.ApproveEvent(req).then(...).catch(...)
```
### 获取会话列表
@@ -1935,6 +1992,10 @@ client.GetConversations(req).then(...).catch(...)
|conversationId|`string`| 会话ID|
|senderId|`string\|number`| 发送者ID|
|receiverId|`string\|number`| 接收者ID|
|senderName|`string`| 发送者昵称|
|receiverName|`string`| 接收者昵称|
|senderAvatar|`string`| 发送者头像URL|
|receiverAvatar|`string`| 接收者头像URL|
|type|`MessageType`| 消息类型|
|content|`string`| 消息内容|
|timestamp|`number`| 发送时间(毫秒时间戳)|
+209 -9
View File
@@ -297,6 +297,27 @@ export declare class EventStatus extends Enum {
static getLabel(v: number|string): string;
}
/**
* 报名审核状态
*/
export declare class ApproveStatus extends Enum {
/**
* 待审核
*/
static Pending: ApproveStatus;
/**
* 已通过
*/
static Approved: ApproveStatus;
/**
* 已拒绝
*/
static Rejected: ApproveStatus;
static entries(): Array<option>;
static getLabel(v: number|string): string;
}
/**
* 消息类型(文本/图片)
*/
@@ -2471,6 +2492,87 @@ export declare class UpdatePreferencesResp {
static fromObject(o: Object): UpdatePreferencesResp;
}
/**
* 获取用户基础信息请求
*/
export declare class GetUserBasicInfoReq {
[key: string]: any;
/**
* 用户ID
*/
id: string|number;
/**
* @param id string|number 用户ID
*/
constructor(id: string|number,);
/**
* 从对象创建 GetUserBasicInfoReq
*
* @param o Object
* - id: string|number, // 用户ID
*/
static fromObject(o: Object): GetUserBasicInfoReq;
}
/**
*
*/
export declare class UserBasicInfo {
[key: string]: any;
/**
* 用户昵称
*/
nickname: string;
/**
* 头像URL
*/
avatar: string;
/**
* @param nickname string 用户昵称
* @param avatar string 头像URL
*/
constructor(nickname: string,avatar: string,);
/**
* 从对象创建 UserBasicInfo
*
* @param o Object
* - nickname: string, // 用户昵称
* - avatar: string, // 头像URL
*/
static fromObject(o: Object): UserBasicInfo;
}
/**
* 获取用户基础信息响应
*/
export declare class GetUserBasicInfoResp {
[key: string]: any;
/**
* 用户昵称
*/
nickname: string;
/**
* 头像URL
*/
avatar: string;
/**
* @param nickname string 用户昵称
* @param avatar string 头像URL
*/
constructor(nickname: string,avatar: string,);
/**
* 从对象创建 GetUserBasicInfoResp
*
* @param o Object
* - nickname: string, // 用户昵称
* - avatar: string, // 头像URL
*/
static fromObject(o: Object): GetUserBasicInfoResp;
}
/**
* 上传图片参数
*/
@@ -4115,6 +4217,64 @@ export declare class CheckInEventResp {
static fromObject(o: Object): CheckInEventResp;
}
/**
*
*/
export declare class ApproveEventReq {
[key: string]: any;
/**
* 酒局ID
*/
id: string|number;
/**
* 报名用户ID
*/
userId: string|number;
/**
* 审核结果
*/
approve: ApproveStatus;
/**
* @param id string|number 酒局ID
* @param userId string|number 报名用户ID
* @param approve ApproveStatus 审核结果
*/
constructor(id: string|number,userId: string|number,approve: ApproveStatus,);
/**
* 从对象创建 ApproveEventReq
*
* @param o Object
* - id: string|number, // 酒局ID
* - userId: string|number, // 报名用户ID
* - approve: ApproveStatus, // 审核结果
*/
static fromObject(o: Object): ApproveEventReq;
}
/**
*
*/
export declare class ApproveEventResp {
[key: string]: any;
/**
* 是否成功
*/
ok: boolean;
/**
* @param ok boolean 是否成功
*/
constructor(ok: boolean,);
/**
* 从对象创建 ApproveEventResp
*
* @param o Object
* - ok: boolean, // 是否成功
*/
static fromObject(o: Object): ApproveEventResp;
}
/**
* 会话信息
*/
@@ -4277,6 +4437,22 @@ export declare class Message {
*/
receiverId: string|number;
/**
* 发送者昵称
*/
senderName: string;
/**
* 接收者昵称
*/
receiverName: string;
/**
* 发送者头像URL
*/
senderAvatar: string;
/**
* 接收者头像URL
*/
receiverAvatar: string;
/**
* 消息类型
*/
type: MessageType;
@@ -4298,12 +4474,16 @@ export declare class Message {
* @param conversationId string 会话ID
* @param senderId string|number 发送者ID
* @param receiverId string|number 接收者ID
* @param senderName string 发送者昵称
* @param receiverName string 接收者昵称
* @param senderAvatar string 发送者头像URL
* @param receiverAvatar string 接收者头像URL
* @param type MessageType 消息类型
* @param content string 消息内容
* @param timestamp number 发送时间(毫秒时间戳)
* @param status MessageStatus 消息状态
*/
constructor(id: string|number,conversationId: string,senderId: string|number,receiverId: string|number,type: MessageType,content: string,timestamp: number,status: MessageStatus,);
constructor(id: string|number,conversationId: string,senderId: string|number,receiverId: string|number,senderName: string,receiverName: string,senderAvatar: string,receiverAvatar: string,type: MessageType,content: string,timestamp: number,status: MessageStatus,);
/**
* 从对象创建 Message
*
@@ -4312,6 +4492,10 @@ export declare class Message {
* - conversationId: string, // 会话ID
* - senderId: string|number, // 发送者ID
* - receiverId: string|number, // 接收者ID
* - senderName: string, // 发送者昵称
* - receiverName: string, // 接收者昵称
* - senderAvatar: string, // 发送者头像URL
* - receiverAvatar: string, // 接收者头像URL
* - type: MessageType, // 消息类型
* - content: string, // 消息内容
* - timestamp: number, // 发送时间(毫秒时间戳)
@@ -4455,15 +4639,15 @@ export declare class ClientChatData {
/**
* 客户端消息ID
*/
clientMesgId: string|number;
clientMesgId: string;
/**
* @param receiverId string|number 接收者ID
* @param content string 消息内容
* @param msgType MessageType 消息类型
* @param clientMesgId string|number 客户端消息ID
* @param clientMesgId string 客户端消息ID
*/
constructor(receiverId: string|number,content: string,msgType: MessageType,clientMesgId: string|number,);
constructor(receiverId: string|number,content: string,msgType: MessageType,clientMesgId: string,);
/**
* 从对象创建 ClientChatData
*
@@ -4471,7 +4655,7 @@ export declare class ClientChatData {
* - receiverId: string|number, // 接收者ID
* - content: string, // 消息内容
* - msgType: MessageType, // 消息类型
* - clientMesgId: string|number, // 客户端消息ID
* - clientMesgId: string, // 客户端消息ID
*/
static fromObject(o: Object): ClientChatData;
}
@@ -4664,7 +4848,7 @@ export declare class ServerAckData {
/**
* 客户端消息ID
*/
clientMsgId: string|number;
clientMsgId: string;
/**
* 消息ID
*/
@@ -4675,16 +4859,16 @@ export declare class ServerAckData {
status: MessageStatus;
/**
* @param clientMsgId string|number 客户端消息ID
* @param clientMsgId string 客户端消息ID
* @param msgId string|number 消息ID
* @param status MessageStatus 消息状态
*/
constructor(clientMsgId: string|number,msgId: string|number,status: MessageStatus,);
constructor(clientMsgId: string,msgId: string|number,status: MessageStatus,);
/**
* 从对象创建 ServerAckData
*
* @param o Object
* - clientMsgId: string|number, // 客户端消息ID
* - clientMsgId: string, // 客户端消息ID
* - msgId: string|number, // 消息ID
* - status: MessageStatus, // 消息状态
*/
@@ -5027,6 +5211,14 @@ export default class HaveADrink {
*/
public UpdatePreferences(req: UpdatePreferencesReq) : Promise<UpdatePreferencesResp>;
/**
* 获取用户基础信息
*
* @param req GetUserBasicInfoReq 获取用户基础信息请求
* @return GetUserBasicInfoResp 获取用户基础信息响应
*/
public GetUserBasicInfo(req: GetUserBasicInfoReq) : Promise<GetUserBasicInfoResp>;
/**
* 上传文件
*
@@ -5195,6 +5387,14 @@ export default class HaveADrink {
*/
public CheckInEvent(req: CheckInEventReq) : Promise<CheckInEventResp>;
/**
* 酒局发起者审核报名用户
*
* @param req ApproveEventReq
* @return ApproveEventResp
*/
public ApproveEvent(req: ApproveEventReq) : Promise<ApproveEventResp>;
/**
* 获取会话列表
*
+197 -4
View File
@@ -436,6 +436,39 @@ export class EventStatus {
}
}
/**
* 报名审核状态
*/
export class ApproveStatus {
/**
* 待审核
*/
static Pending = 1;
/**
* 已通过
*/
static Approved = 2;
/**
* 已拒绝
*/
static Rejected = 3;
static entries() {
return [
{ value: ApproveStatus.Pending, label: '待审核' },
{ value: ApproveStatus.Approved, label: '已通过' },
{ value: ApproveStatus.Rejected, label: '已拒绝' },
];
}
static getLabel(v) {
switch(v) {
case ApproveStatus.Pending: return '待审核';
case ApproveStatus.Approved: return '已通过';
case ApproveStatus.Rejected: return '已拒绝';
}
}
}
/**
* 消息类型(文本/图片)
*/
@@ -1779,6 +1812,58 @@ export class UpdatePreferencesResp {
}
}
/**
* 获取用户基础信息请求
*/
export class GetUserBasicInfoReq {
/**
* @param id: string|number 用户ID
*/
constructor(id,) {
this.id = id;
}
static fromObject(o) {
return new GetUserBasicInfoReq(o.id,);
}
}
/**
*
*/
export class UserBasicInfo {
/**
* @param nickname: string 用户昵称
* @param avatar: string 头像URL
*/
constructor(nickname,avatar,) {
this.nickname = nickname;
this.avatar = avatar;
}
static fromObject(o) {
return new UserBasicInfo(o.nickname,o.avatar,);
}
}
/**
* 获取用户基础信息响应
*/
export class GetUserBasicInfoResp {
/**
* @param nickname: string 用户昵称
* @param avatar: string 头像URL
*/
constructor(nickname,avatar,) {
this.nickname = nickname;
this.avatar = avatar;
}
static fromObject(o) {
return new GetUserBasicInfoResp(o.nickname,o.avatar,);
}
}
/**
* 上传图片参数
*/
@@ -2777,6 +2862,42 @@ export class CheckInEventResp {
}
}
/**
*
*/
export class ApproveEventReq {
/**
* @param id: string|number 酒局ID
* @param userId: string|number 报名用户ID
* @param approve: ApproveStatus 审核结果
*/
constructor(id,userId,approve,) {
this.id = id;
this.userId = userId;
this.approve = approve;
}
static fromObject(o) {
return new ApproveEventReq(o.id,o.userId,o.approve,);
}
}
/**
*
*/
export class ApproveEventResp {
/**
* @param ok: boolean 是否成功
*/
constructor(ok,) {
this.ok = ok;
}
static fromObject(o) {
return new ApproveEventResp(o.ok,);
}
}
/**
* 会话信息
*/
@@ -2866,16 +2987,24 @@ export class Message {
* @param conversationId: string 会话ID
* @param senderId: string|number 发送者ID
* @param receiverId: string|number 接收者ID
* @param senderName: string 发送者昵称
* @param receiverName: string 接收者昵称
* @param senderAvatar: string 发送者头像URL
* @param receiverAvatar: string 接收者头像URL
* @param type: MessageType 消息类型
* @param content: string 消息内容
* @param timestamp: number 发送时间(毫秒时间戳)
* @param status: MessageStatus 消息状态
*/
constructor(id,conversationId,senderId,receiverId,type,content,timestamp,status,) {
constructor(id,conversationId,senderId,receiverId,senderName,receiverName,senderAvatar,receiverAvatar,type,content,timestamp,status,) {
this.id = id;
this.conversationId = conversationId;
this.senderId = senderId;
this.receiverId = receiverId;
this.senderName = senderName;
this.receiverName = receiverName;
this.senderAvatar = senderAvatar;
this.receiverAvatar = receiverAvatar;
this.type = type;
this.content = content;
this.timestamp = timestamp;
@@ -2883,7 +3012,7 @@ export class Message {
}
static fromObject(o) {
return new Message(o.id,o.conversationId,o.senderId,o.receiverId,o.type,o.content,o.timestamp,o.status,);
return new Message(o.id,o.conversationId,o.senderId,o.receiverId,o.senderName,o.receiverName,o.senderAvatar,o.receiverAvatar,o.type,o.content,o.timestamp,o.status,);
}
}
@@ -2975,7 +3104,7 @@ export class ClientChatData {
* @param receiverId: string|number 接收者ID
* @param content: string 消息内容
* @param msgType: MessageType 消息类型
* @param clientMesgId: string|number 客户端消息ID
* @param clientMesgId: string 客户端消息ID
*/
constructor(receiverId,content,msgType,clientMesgId,) {
this.receiverId = receiverId;
@@ -3104,7 +3233,7 @@ export class ServerReadData {
*/
export class ServerAckData {
/**
* @param clientMsgId: string|number 客户端消息ID
* @param clientMsgId: string 客户端消息ID
* @param msgId: string|number 消息ID
* @param status: MessageStatus 消息状态
*/
@@ -3991,6 +4120,38 @@ export default class HaveADrink {
});
}
/**
* 获取用户基础信息
*/
GetUserBasicInfo(req) {
return new Promise((reslove, reject)=>{
let data = req;
let url = `${this.host}/api/have_a_drink/v1/user/user/basic_info`;
const query = Object.keys(data).map((x)=>(`${x}=${data[x]}`)).join('&');
this.http_request(url, {
uri: '/api/have_a_drink/v1/user/user/basic_info',
method: 'GET',
query: query,
data: data,
responseType: 'json',
headers: {
},
}).then((data)=>{
if (data.hasOwnProperty("fail")) {
if (data.fail) {
reject(data.msg);
} else {
reslove(data.data);
}
} else {
reslove(data);
}
}).catch((err)=>reject(err));
});
}
/**
* 上传文件
*/
@@ -4659,6 +4820,38 @@ export default class HaveADrink {
});
}
/**
* 酒局发起者审核报名用户
*/
ApproveEvent(req) {
return new Promise((reslove, reject)=>{
let data = req;
let url = `${this.host}/api/have_a_drink/v1/events/events/approve`;
this.http_request(url, {
uri: '/api/have_a_drink/v1/events/events/approve',
method: 'POST',
data: data,
responseType: 'json',
headers: {
'Content-Type': 'application/json',
},
}).then((data)=>{
if (data.hasOwnProperty("fail")) {
if (data.fail) {
reject(data.msg);
} else {
reslove(data.data);
}
} else {
reslove(data);
}
}).catch((err)=>reject(err));
});
}
/**
* 获取会话列表
*/
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "HaveADrink",
"type": "module",
"version": "v1.0.12",
"version": "v1.0.15",
"description": "喝酒了么 API 服务",
"main": "index.js",
"scripts": {