更新记录
1.0.0(2026-06-01)
下载此版本
init
平台兼容性
uni-app(4.87)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
- |
√ |
√ |
√ |
- |
√ |
√ |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
√ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
其他
仿微信 Demo
基于 UniApp + Vue 2 + Vuex 开发的仿微信移动端应用
目录
项目简介
一个高度还原微信 UI 和交互的移动端 Demo 项目,采用 uni-app 框架开发,支持 H5、微信小程序、Android、iOS 多端运行。项目涵盖了微信的主要功能模块,包括聊天、通讯录、发现、我的四大主页面及大量子页面。
内置小游戏
| 游戏 |
类型 |
说明 |
| 弹弹球 |
Canvas 砖块消除 |
触屏控制挡板反弹小球,粒子特效、道具系统、连击机制、5 关递增难度 |
| 消消乐 |
Canvas 三消益智 |
8x8 糖果棋盘,拖拽交换消除,连锁 combo 计分,5 关递增目标 |
| 漫漫修仙路 |
文字放置 RPG |
修炼/突破/除妖/炼丹四个玩法,背包 + 存档系统,9 个修仙境界 |
技术栈
| 类别 |
技术 |
| 框架 |
uni-app (Vue 2) |
| 状态管理 |
Vuex |
| 路由 |
uni-app 内置路由 + pages.json 配置 |
| 样式 |
SCSS + ColorUI |
| 组件库 |
uni-ui |
| 存储 |
uni.storage + localStorage |
| Canvas |
Canvas 2D API (type="2d") |
| HTTP |
uni.request 封装 |
快速开始
环境要求
- Node.js >= 12.x
- HBuilderX (推荐) 或 npm/yarn
- 微信开发者工具 (小程序调试)
安装依赖
# 克隆项目
git clone <your-repo-url>
cd wx-demo
# 安装依赖
npm install
本地开发
方式一:HBuilderX(推荐)
- 使用 HBuilderX 打开项目根目录
- 点击菜单:运行 → 运行到浏览器 → Chrome
- 默认访问
http://localhost:9090
方式二:命令行
# H5 开发模式
npm run dev:h5
# 微信小程序开发模式(需先配置 appid)
npm run dev:mp-weixin
后端接口
项目默认连接 RuoYi-Vue 后台。可在 config.js 中修改接口地址:
// config.js
export default {
baseUrl: 'https://your-api-server.com/prod-api',
// ...
}
不接入后端也可运行,登录页点击"游客登录"进入主界面,大部分功能使用本地数据模拟。
构建部署
# H5 构建
npm run build:h5
# 微信小程序构建
npm run build:mp-weixin
# 打包后的文件在各平台对应目录:
# H5 → dist/build/h5
# 微信小程序 → dist/build/mp-weixin
- H5 部署:将
dist/build/h5 下文件上传至任意静态服务器或 Nginx
- 微信小程序:用微信开发者工具打开
dist/build/mp-weixin 目录,上传审核
功能模块
一、微信(聊天)
| 功能 |
说明 |
状态 |
| 聊天列表 |
展示所有聊天会话,支持置顶、免打扰、未读角标 |
✅ |
| 搜索 |
顶部搜索栏,支持搜索联系人/聊天记录 |
✅ |
| 添加菜单 |
右上角"+"弹出菜单:发起群聊、添加朋友、扫一扫、收付款 |
✅ |
| 聊天详情 |
完整的聊天界面,支持文字、图片、语音、视频、文件消息 |
✅ |
| 下拉刷新 |
下拉刷新聊天列表 |
✅ |
| 多选收藏 |
聊天消息支持多选后批量收藏 |
✅ |
二、通讯录
| 功能 |
说明 |
状态 |
| 字母索引 |
按首字母分组展示联系人,右侧字母快速定位 |
✅ |
| 搜索 |
顶部搜索栏查找联系人 |
✅ |
| 特殊入口 |
新的朋友、群聊、标签、公众号 |
✅ |
| 联系人详情 |
查看联系人资料 |
✅ |
| 添加朋友 |
微信号/手机号搜索、二维码、雷达加朋友等 |
✅ |
三、发现
| 功能 |
说明 |
状态 |
| 朋友圈 |
好友动态列表(文字、图片、视频),支持点赞和评论 |
✅ |
| 扫一扫 |
模拟取景框扫描动画,支持扫码/识物/翻译三模式切换 |
✅ |
| 摇一摇 |
点击/摇晃触发搜索动画,支持人/歌曲/电视三Tab |
✅ |
| 看一看 |
精选/视频/关注三Tab文章列表,含标题/来源/在看数 |
✅ |
| 搜一搜 |
搜索栏 + 8类搜索入口 + 热搜榜Top10 + 搜索历史 |
✅ |
| 附近 |
附近的人 + 附近的直播入口,附近用户列表含距离 |
✅ |
| 购物 |
轮播Banner + 9类商品分类 + 限时抢购 + 双列推荐 |
✅ |
| 游戏 |
Banner推广 + 最近在玩 + 小游戏入口 + 好友在玩 + 热门游戏列表 |
✅ |
| 弹弹球 |
Canvas砖块消除游戏,触屏控制,粒子特效/道具/连击/关卡 |
✅ |
| 消消乐 |
Canvas三消益智游戏,8x8糖果棋盘,拖拽交换消除,连锁combo |
✅ |
| 漫漫修仙路 |
文字修仙放置养成,修炼/突破/除妖/炼丹,背包/存档,9境界 |
✅ |
| 小程序 |
最近使用 + 我的小程序 + 附近小程序列表 |
✅ |
| 视频号 |
关注/朋友/热门/附近四Tab,视频卡片列表 |
✅ |
| 直播 |
分类Tab + 双列直播卡片,含主播信息/观看人数 |
✅ |
四、我
| 功能 |
说明 |
状态 |
| 个人信息 |
头像、昵称、微信号展示,资料编辑 |
✅ |
| 状态 |
40+预设状态(心情/工作/活动/休息),自定义文字+背景色 |
✅ |
| 收藏 |
支持文本/图片/视频/语音/文件/链接/聊天记录多类型收藏 |
✅ |
| 相册 |
按月分组3列图片网格,15张示例照片,点击预览大图 |
✅ |
| 卡包 |
会员卡/优惠券/票据/交通卡展示,含卡片详情弹窗 |
✅ |
| 表情 |
我的表情+表情包管理,表情商店入口,支持删除/管理 |
✅ |
| 设置 |
账号安全/新消息通知/隐私/通用/修改密码/帮助反馈/关于 |
✅ |
五、设置子页面
| 功能 |
说明 |
状态 |
| 账号与安全 |
微信号、手机号、声音锁、设备管理等 |
✅ |
| 新消息通知 |
通知开关、消息详情、通话提醒、提示音选择 |
✅ |
| 隐私 |
加友验证、添加方式开关、朋友圈权限、公众号推荐 |
✅ |
| 通用 |
多语言、字体大小、存储空间、听筒模式、NFC等 |
✅ |
移动端适配
| 适配项 |
说明 |
| Viewport |
width=device-width, viewport-fit=cover, 禁止缩放 |
| 安全区域 |
适配 iPhone 刘海屏/底部指示条,动态计算 safeArea |
| 触摸事件 |
游戏使用 touchstart/touchmove/touchend,.prevent 阻止默认滚动 |
| 手势防护 |
touch-action: none + overscroll-/code> 禁止浏览器下拉/回退手势 |
| 文字选择 |
user-select: none + -webkit-touch-callout: none 禁止误选中 |
| 暗色模式 |
apple-mobile-web-app-status-bar-style: black-translucent |
| 屏幕旋转 |
Canvas 游戏监听 resize/orientationchange 自动重绘布局 |
| 点击高亮 |
全局 -webkit-tap-highlight-color: transparent |
| 多浏览器 |
iOS Safari、微信内置浏览器、QQ X5、UC 浏览器均已适配 |
| 动态视口 |
使用 100dvh 解决移动端浏览器地址栏导致的高度计算偏差 |
项目结构
wx-demo/
├── api/ # API 接口层
│ ├── login.js # 登录/注册/登出/验证码
│ └── system/ # 系统管理接口
│ ├── dict/data.js # 字典数据
│ ├── dict/type.js # 字典类型
│ └── user.js # 用户管理
├── components/ # 自定义组件
│ └── uni-section/ # 通用 section 标题组件
├── pages/ # 页面目录(共 30+ 页面)
│ ├── login.vue # 登录页
│ ├── register.vue # 注册页
│ ├── chat/ # 微信 Tab
│ │ ├── index.vue # 聊天列表
│ │ └── detail.vue # 聊天详情
│ ├── contacts/ # 通讯录 Tab
│ │ ├── index.vue # 联系人列表
│ │ ├── detail.vue # 联系人详情
│ │ └── add.vue # 添加朋友
│ ├── discover/ # 发现 Tab
│ │ ├── index.vue # 发现主页
│ │ ├── game/ # 小游戏
│ │ │ ├── brick.vue # 弹弹球 (Canvas)
│ │ │ ├── match3.vue # 消消乐 (Canvas)
│ │ │ └── xiuxian.vue # 漫漫修仙路 (文字RPG)
│ │ ├── moments.vue # 朋友圈
│ │ ├── scan.vue # 扫一扫
│ │ ├── shake.vue # 摇一摇
│ │ ├── topstory.vue # 看一看
│ │ ├── search.vue # 搜一搜
│ │ ├── nearby.vue # 附近
│ │ ├── shopping.vue # 购物
│ │ ├── game.vue # 游戏列表
│ │ ├── miniprogram.vue # 小程序
│ │ ├── video.vue # 视频号
│ │ ├── live.vue # 直播
│ │ └── post.vue # 发表文字
│ ├── mine/ # 我 Tab
│ │ ├── index.vue # 我的主页
│ │ ├── info/ # 个人信息
│ │ │ ├── index.vue
│ │ │ ├── edit.vue
│ │ │ └── personal.vue
│ │ ├── avatar/index.vue # 修改头像
│ │ ├── pwd/index.vue # 修改密码
│ │ ├── status/index.vue # 状态
│ │ ├── favorites/index.vue # 收藏
│ │ ├── album/index.vue # 相册
│ │ ├── cards/index.vue # 卡包
│ │ ├── emoji/index.vue # 表情
│ │ ├── about/index.vue # 关于
│ │ ├── help/index.vue # 帮助
│ │ └── setting/ # 设置
│ │ ├── index.vue # 设置主页
│ │ ├── account.vue # 账号与安全
│ │ ├── notify.vue # 新消息通知
│ │ ├── privacy.vue # 隐私
│ │ └── general.vue # 通用
│ └── common/ # 通用页面
│ ├── webview/index.vue # WebView 容器
│ └── textview/index.vue # 文本查看器
├── plugins/ # Vue 插件
│ ├── index.js # 插件安装器
│ ├── tab.js # $tab 页面导航
│ ├── auth.js # $auth 权限验证
│ └── modal.js # $modal 弹窗提示
├── static/ # 静态资源
│ ├── index.html # H5 模板(含移动端 meta 标签)
│ ├── images/ # 图片资源
│ │ ├── banner/ # Banner 图片
│ │ └── tabbar/ # 底部导航图标
│ ├── scss/ # 全局样式
│ │ ├── global.scss # 全局工具类
│ │ ├── colorui.css # ColorUI 组件样式
│ │ └── index.scss # 样式入口
│ └── font/ # 字体图标
├── store/ # Vuex 状态管理
│ ├── index.js # Store 入口
│ ├── getters.js # 全局 getters
│ └── modules/ # 模块
│ ├── user.js # 用户登录状态
│ ├── favorites.js # 收藏数据 (localStorage)
│ └── status.js # 状态数据 (localStorage)
├── utils/ # 工具函数
│ ├── auth.js # Token 存取
│ ├── common.js # Toast / Confirm / 参数序列化
│ ├── constant.js # 常量定义
│ ├── errorCode.js # HTTP 错误码映射
│ ├── permission.js # 权限校验
│ ├── request.js # uni.request 封装
│ ├── storage.js # 命名空间存储
│ ├── upload.js # 文件上传
│ └── validate.js # 表单校验
├── uni_modules/ # uni-ui 组件(15+ 组件包)
├── pages.json # 页面路由 & TabBar 配置
├── manifest.json # 应用清单(多平台配置)
├── config.js # 全局配置(API地址等)
├── App.vue # 根组件
├── main.js # 应用入口
└── uni.scss # uni-app 全局 SCSS 变量
配置说明
全局配置 config.js
export default {
baseUrl: 'https://vue.ruoyi.vip/prod-api', // API 基础地址
appName: '微信Demo',
appVersion: '1.0.0'
}
路由配置 pages.json
- 全局自定义导航栏
navigationStyle: "custom"
- 底部 4 Tab:微信 / 通讯录 / 发现 / 我
- 小游戏页面使用独立导航样式
- 共注册 40 个页面路由
应用清单 manifest.json
- h5:hash 路由模式,开发端口 9090,模板
static/index.html
- mp-weixin:appid
wxccd7e2a0911b3397
- app-plus:Android 权限(相机、WiFi、震动等)
页面路由
底部导航 (TabBar)
| Tab |
路径 |
页面 |
| 微信 |
pages/chat/index |
聊天列表 |
| 通讯录 |
pages/contacts/index |
联系人列表 |
| 发现 |
pages/discover/index |
发现主页 |
| 我 |
pages/mine/index |
个人中心 |
小游戏
| 游戏 |
路径 |
| 游戏列表 |
pages/discover/game |
| 弹弹球 |
pages/discover/game/brick |
| 消消乐 |
pages/discover/game/match3 |
| 漫漫修仙路 |
pages/discover/game/xiuxian |
主要子页面
| 页面 |
路径 |
| 聊天详情 |
pages/chat/detail |
| 联系人详情 |
pages/contacts/detail |
| 添加朋友 |
pages/contacts/add |
| 朋友圈 |
pages/discover/moments |
| 扫一扫 |
pages/discover/scan |
| 摇一摇 |
pages/discover/shake |
| 看一看 |
pages/discover/topstory |
| 搜一搜 |
pages/discover/search |
| 附近 |
pages/discover/nearby |
| 购物 |
pages/discover/shopping |
| 视频号 |
pages/discover/video |
| 直播 |
pages/discover/live |
| 小程序 |
pages/discover/miniprogram |
| 修改头像 |
pages/mine/avatar/index |
| 个人信息 |
pages/mine/info/index |
| 编辑资料 |
pages/mine/info/edit |
| 修改密码 |
pages/mine/pwd/index |
| 状态 |
pages/mine/status/index |
| 收藏 |
pages/mine/favorites/index |
| 相册 |
pages/mine/album/index |
| 卡包 |
pages/mine/cards/index |
| 表情 |
pages/mine/emoji/index |
| 设置 |
pages/mine/setting/index |
| 账号与安全 |
pages/mine/setting/account |
| 新消息通知 |
pages/mine/setting/notify |
| 隐私 |
pages/mine/setting/privacy |
| 通用 |
pages/mine/setting/general |
| 帮助 |
pages/mine/help/index |
| 关于 |
pages/mine/about/index |
页面统计
- 总页面数:40
- Tab 页:4(微信、通讯录、发现、我)
- 实现功能数:40+
- 内置游戏:3(弹弹球、消消乐、漫漫修仙路)
本项目用于学习交流,非商业用途。