新增 mobile/:畅联手机端 Flutter 工程(B-58)

- 登录:工号+密码走 account-service /api/login,自动登录、被踢下线回登录页
- 消息:会话列表(未读角标/免打扰/时间)、单聊群聊、文字/语音/图片/文件消息、失败重发、历史分页
- 通讯录:新的同事/我的群聊入口、按部门分组(好友 ex 字段)、搜索
- 通话:一对一语音通话(信令走 OpenIM 自定义消息 + LiveKit,token 走 /api/rtc_token)
- 界面按确认效果图 m1/m2/m3 实现,主色 #3B87F5,四态视图齐全,无英文残留
This commit is contained in:
KIMI
2026-08-09 01:28:12 +08:00
parent bef4ffcf6f
commit b95159f7eb
27 changed files with 5077 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
/// 通话信令的数据模型。
/// 与官方样板工程 openim_common 的 InvitationInfo 字段保持一致,
/// 保证和 PC 端 / 其他端互通。
class InvitationInfo {
/// 邀请者 userID
String? inviterUserID;
/// 被邀请者 userID 列表,单聊只有一个元素
List<String>? inviteeUserIDList;
/// 群聊时为群 ID,单聊为空
String? groupID;
/// 房间 ID,必须唯一
String? roomID;
/// 邀请超时时间(秒)
int? timeout;
/// 发起时间
int? initiateTime;
/// video 或者 audio(本项目只做 audio
String? mediaType;
/// 会话类型:1 为单聊
int? sessionType;
/// 发起方平台
int? platformID;
InvitationInfo({
this.inviterUserID,
this.inviteeUserIDList,
this.groupID,
this.roomID,
this.timeout,
this.initiateTime,
this.mediaType,
this.sessionType,
this.platformID,
});
InvitationInfo.fromJson(Map<String, dynamic> json) {
inviterUserID = json['inviterUserID'];
inviteeUserIDList = json['inviteeUserIDList']?.cast<String>();
groupID = json['groupID'];
roomID = json['roomID'];
timeout = json['timeout'];
initiateTime = json['initiateTime'];
mediaType = json['mediaType'];
sessionType = json['sessionType'];
platformID = json['platformID'];
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['inviterUserID'] = inviterUserID;
data['inviteeUserIDList'] = inviteeUserIDList;
data['groupID'] = groupID;
data['roomID'] = roomID;
data['timeout'] = timeout;
data['initiateTime'] = initiateTime;
data['mediaType'] = mediaType;
data['sessionType'] = sessionType;
data['platformID'] = platformID;
return data;
}
}