Nincs leírás

liuq 3ea5031c98 V1.1.3 2 napja
components 3ea5031c98 V1.1.3 2 napja
composables f00ba59d7b v1.0.2 修复消息延迟问题 2 hete
document e271e6f06c 初次更新 4 hete
pages 3ea5031c98 V1.1.3 2 napja
scripts e271e6f06c 初次更新 4 hete
static 0220766af4 V110个人二维码 2 hete
store 441c54f682 V1.0.2修复消息列表刷新问题 2 hete
update_log 07f925a63d 2026年4月5日 1 hete
utils 3ea5031c98 V1.1.3 2 napja
.gitignore e271e6f06c 初次更新 4 hete
App.vue 3ea5031c98 V1.1.3 2 napja
LICENSE d05fb8e50d Initial commit 4 hete
README.md e271e6f06c 初次更新 4 hete
index.html e271e6f06c 初次更新 4 hete
main.js e271e6f06c 初次更新 4 hete
manifest.json 3ea5031c98 V1.1.3 2 napja
package-lock.json 0220766af4 V110个人二维码 2 hete
package.json 0220766af4 V110个人二维码 2 hete
pages.json 3ea5031c98 V1.1.3 2 napja
uni.promisify.adaptor.js e271e6f06c 初次更新 4 hete
uni.scss e271e6f06c 初次更新 4 hete

README.md

yunzhu-im-mobile

基于 uni-app (Vue 3) 的移动端 IM 客户端,包含登录、会话列表、聊天收发(文字/图片/视频/文件)、通讯录、应用中心(SSO 打开应用)、搜索中心等功能。

项目特性

  • 支持密码登录、短信验证码登录
  • 会话列表与联系人列表
  • 聊天功能:
    • 拉取历史消息
    • 上拉加载更多
    • 发送文本消息
    • 发送图片/视频/文件消息
    • 发送失败重试
  • WebSocket 实时消息推送(30s 心跳)
  • 本地未读计数与 Tab 角标更新
  • 通知类消息卡片展示,支持回调链接打开
  • 应用中心:
    • 拉取快捷应用列表
    • 最近使用应用本地缓存
    • SSO 登录后内嵌 web-view 打开应用
  • 搜索中心:
    • 搜索联系人
    • 搜索应用(本地过滤)
  • 自定义头像组件(按名称/ID 稳定渐变)

技术栈

  • uni-app
  • Vue 3
  • JavaScript (CommonJS + ESM)
  • uni.request / uni.uploadFile / uni.connectSocket
  • sharp(仅用于 SVG 转 PNG 脚本)

目录结构

.
├─ App.vue                         # 应用入口,启动时鉴权并连接 WebSocket
├─ pages.json                      # 页面路由与 tabBar 配置
├─ manifest.json                   # uni-app 平台配置(App/小程序)
├─ uni.scss                        # 全局主题变量
├─ uni.promisify.adaptor.js        # uni API Promise 适配
├─ package.json
│
├─ pages/
│  ├─ login/index.vue              # 登录页(密码/验证码)
│  ├─ index/index.vue              # 消息会话列表页(tab: 消息)
│  ├─ chat/index.vue               # 聊天页
│  ├─ contacts/index.vue           # 通讯录页(tab: 通讯录)
│  ├─ contact-detail/index.vue     # 联系人详情页
│  ├─ app-center/index.vue         # 应用中心页(tab: 应用中心)
│  ├─ search-center/index.vue      # 全局搜索页
│  ├─ profile/index.vue            # 个人信息页
│  └─ webview/index.vue            # 通用内嵌网页页
│
├─ components/
│  ├─ UserAvatar.vue               # 用户头像(图像/文字渐变占位)
│  ├─ SystemAvatar.vue             # 系统/应用头像
│  └─ chat/
│     ├─ PrivateMessageBubble.vue  # 私信消息气泡
│     └─ NotificationBubble.vue    # 通知消息卡片
│
├─ composables/
│  ├─ useContacts.js               # 会话列表数据拉取
│  ├─ useMessages.js               # 历史消息、发送、重试、上传发送
│  └─ useWebSocket.js              # WS 连接、推送处理、未读更新
│
├─ store/
│  └─ chat.js                      # 全局聊天状态(contacts/messages/unread)
│
├─ utils/
│  └─ api.js                       # HTTP API 封装与认证工具
│
├─ scripts/
│  └─ svg-to-png.js                # tab SVG 批量转 81x81 PNG
│
├─ static/icons/                   # 图标资源(含 tab 图标)
└─ document/
   └─ Message_Integration_Guide.md # 消息中心接口与接入说明

环境要求

  • Node.js 16+(建议 18+)
  • HBuilderX(推荐)或支持 uni-app 的开发环境
  • 具备可访问 https://api.hnyunzhu.com 的网络环境

安装与运行

npm install

该仓库主要通过 HBuilderX 运行/打包(package.json 未配置完整的 uni CLI 脚本)。

在 HBuilderX 中运行

  1. 使用 HBuilderX 打开项目根目录
  2. 运行到目标平台(如:Android 真机 / 模拟器 / H5)
  3. 首次进入若无 token 会跳转登录页

构建与发布

按 uni-app 常规流程在 HBuilderX 中:

  • 发行 -> 原生 App-云打包 / 本地打包
  • 或发行到对应小程序平台(需在 manifest.json 配置 appid)

配置说明

1) 后端 API 地址

当前在 utils/api.js 中固定为:

  • BASE_URL = https://api.hnyunzhu.com/api/v1
  • WS_BASE = wss://api.hnyunzhu.com/api/v1/ws/messages(位于 composables/useWebSocket.js

如需切换环境(测试/预发),请统一修改上述常量。

2) Token 与用户信息本地存储

  • token key:token
  • 当前用户 key:current_user

3) tabBar 图标

pages.json 中 tabBar 使用的是 PNG:

  • static/icons/tab-message(.png)
  • static/icons/tab-contacts(.png)
  • static/icons/tab-app(.png)

若你修改了对应 SVG,可执行脚本重新生成 PNG。


图标转换脚本(可选)

用于把 static/icons 下 tab SVG 统一转成 81x81 PNG:

node scripts/svg-to-png.js

依赖:

  • sharp(已在 devDependencies 中)

主要业务流程

启动流程

  1. App.vue 启动时读取 token
  2. 无 token -> 跳转登录页
  3. 有 token -> 调用 getCurrentUserInfo
  4. 鉴权通过后建立 WebSocket 长连接

消息流程

  1. 进入聊天页调用 getMessages
  2. 发送文本调用 sendMessage
  3. 发送附件先 uploadFile,后 sendMessage
  4. 收到 WS 推送后:
    • 追加到对应会话消息
    • 更新会话预览
    • 非当前会话时未读数 +1
    • 更新底部 Tab 未读角标

应用中心流程

  1. 拉取 getLaunchpadApps
  2. 点击应用后调用 ssoLogin
  3. 获取 redirect_url 并跳转到 pages/webview/index

接口概览(客户端实际使用)

  • 认证:
    • POST /auth/login/json
    • POST /auth/sms/login
    • POST /auth/sms/send-code
  • 用户:
    • GET /users/me(及 fallback 路径)
    • GET /users/search
    • GET /users/
  • 消息:
    • GET /messages/conversations
    • GET /messages/history/{otherUserId}
    • POST /messages/
    • POST /messages/upload
    • GET /messages/{messageId}/callback-url
  • 应用中心:
    • GET /simple/me/launchpad-apps
    • POST /simple/sso-login
  • WebSocket:
    • wss://.../ws/messages?token=...

详细协议可参考 document/Message_Integration_Guide.md


已知说明

  • 当前仓库已包含 unpackage/ 构建产物,协作时建议确认是否纳入版本管理策略
  • package.jsonscripts 目前仅保留默认 test 占位脚本
  • 一些页面按钮(如“更多”“语音/视频”等)当前为占位交互(toast)

后续建议

  • 增加多环境配置(dev/staging/prod)并统一 API/WS 地址管理
  • 完善 npm scripts(lint、build、dev)
  • 补充错误监控与 WS 断线重连策略
  • 增加 README 截图、接口示例与发布流程图