更新记录
1.0.0(2026-10-24)
发版
平台兼容性
uni-app
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | √ | - | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
云函数类插件通用教程
使用云函数类插件的前提是:使用HBuilderX 2.9+
袋走 · 上门倒垃圾小程序
垃圾放门口,我们来袋走。用户线上下单,附近经过审核的工作人员上门取件、代投放到小区指定垃圾桶。 一个 App 覆盖「下单 → 支付 → 派单 → 抢单 → 履约 → 结算 → 提现 → 审核」全链路,用户端与工作人员端共用同一套账号,可随时切换身份。
uni-app + Vue3(Composition API)· uniCloud 云对象(腾讯云)· uni-id 登录 · uni-pay 支付 · 微信小程序
🔗 界面预览(在线画廊,30 张截图):https://codesuccess.online/daizou/
界面速览
![]() 用户端 · 首页 |
![]() 工作人员端 · 接单大厅 |
![]() 管理端 · 工作人员审核 |
功能一览
用户端
| 模块 | 能力 |
|---|---|
| 首页 | 定位/切换收货地址、5 类服务商品(生活垃圾 1 袋 ¥3.9 / 2-3 袋 ¥5.9 / 4-6 袋 ¥9.9、可回收 ¥6.9、大件 ¥19.9)、进行中订单卡片、包月入口、最近订单、快捷入口 |
| 下单 | 袋数选择、立即上门 / 预约时间段、取件方式(上门取件、电话联系)、备注、垃圾照片、优惠券抵扣、包月套餐抵扣、实时价格预估 |
| 支付 | uni-pay 下单,微信支付回调落库后才改状态;前端没有任何「支付成功」接口 |
| 订单列表 | 全部 / 进行中 / 已完成,下拉刷新,进行中订单 8 秒轮询 |
| 订单详情 | 状态进度条 + 完整时间线(谁在什么时间做了什么)、取件/投放照片、支付/取消/再来一单/评价 |
| 评价 | 星级 + 标签 + 文字,一单一评(order_reviews.order_id 唯一),提交后聚合重算工作人员评分 |
| 地址 | 多地址、默认地址、小区从服务区域选择并自动匹配片区、地图选点;支持「选择模式」回传下单页 |
| 优惠券 | 我的券 / 可领取,领取防重复(user_id + coupon_id 唯一) |
| 包月套餐 | 购买 10 次 / 20 次套餐,30 天有效,下单时按次抵扣 |
| 消息通知 | 订单状态、审核结果、提现进度等站内通知,未读计数、全部已读 |
| 我的 | 身份切换、累计/进行中/未读统计、地址/优惠券/套餐/消息/后台入口聚合 |
工作人员端
| 模块 | 能力 |
|---|---|
| 入驻申请 | 四步向导:资料 → 证件(身份证正反面)→ 服务区域 → 提交审核;被拒可看原因并重新提交 |
| 接单大厅 | 在线/离线开关、附近待接订单(距离、袋数、取件方式、备注、预计收入)、一键抢单 |
| 我的任务 | 进行中 / 已完成,按状态分组 |
| 任务执行 | 开始前往 → 确认到达 → 取件前照片 → 取件后照片 → 确认取件 → 投放照片 → 完成订单;缺照片会被服务端拒绝 |
| 我的收益 | 今日 / 本月 / 可提现 / 冻结 + 收入流水 + 提现记录 |
| 提现 | 最低 ¥10,微信零钱 / 支付宝 / 银行卡,事务内条件扣减防超额 |
管理端(小程序内,仅 admin 可见)
| 模块 | 能力 |
|---|---|
| 管理后台 | 待审核工作人员 / 待处理提现实时计数 |
| 工作人员审核 | 查看申请人、手机号、脱敏身份证、证件照、服务区域,通过或填写原因拒绝 |
| 提现审核 | 待处理 / 已到账 / 已驳回,通过后冻结转已提现,驳回退回可用余额 |
平台能力
- 订单状态机:9 个状态、唯一事实来源在云端
service-common/order-status.js,非法流转直接抛INVALID_STATUS_TRANSITION,每次变更写状态日志。 - 抢单防并发:条件更新
where({ status: WAITING_ACCEPT, worker_id: null }),只有updated === 1才算抢到;集成测试用两个工作人员并发抢同一单,断言成功数严格为 1。 - 金额只在服务端算:价格、工作人员收入、平台抽成均由云对象按商品表计算并固化,前端传来的
price/workerIncome/status一律忽略。 - 结算事务 + 幂等:完成订单时在同一事务里写收入流水(
unique_key唯一索引)、原子自增钱包、累计完成数,任一步失败整体回滚。 - 双身份:微信原生 tabBar 无法按身份切换,改用自定义底部栏 +
uni.reLaunch。 - 游客优先:启动直接进首页,不弹登录;只有下单、地址、优惠券、消息、提现、后台、入驻这类动作才引导登录,登录后自动回到原页面。
- 本地可跑:
MOCK_ENABLED = true时所有云对象调用走mock/本地数据表,无需服务空间和 AppID 就能完整点一遍。
界面预览
全部截图来自本项目 H5 构建产物的真实运行画面(390 × 844 @2x),数据由
mock/提供,与云函数返回结构一致。 在线画廊:https://codesuccess.online/daizou/
用户端
![]() 01 首页 · 地址 / 服务商品 / 进行中订单 |
![]() 02 订单列表 · 全部 / 进行中 / 已完成 |
![]() 03 订单详情 · 进行中 |
![]() 04 订单详情 · 待评价 |
![]() 05 订单详情 · 待支付 |
![]() 06 下单页 |
![]() 07 评价服务 |
![]() 08 我的 |
![]() 09 消息通知 |
![]() 10 优惠券 |
![]() 11 包月套餐 |
![]() 12 我的套餐 |
![]() 13 地址列表 |
![]() 14 地址编辑 |
![]() 15 支付后转待接单 |
工作人员端
![]() 16 我的 · 工作人员身份 |
![]() 17 接单大厅 |
![]() 18 我的任务 |
![]() 19 任务详情 · 履约 |
![]() 20 我的收益 |
![]() 21 提现 |
![]() 22 入驻申请 |
![]() 23 抢单后任务详情 |
管理端
![]() 24 管理后台 |
![]() 25 工作人员审核 |
![]() 26 提现审核 |
登录与游客态
![]() 27 首页 · 游客态 |
![]() 28 登录页 |
![]() 29 订单页 · 未登录态 |
![]() 30 登录后回到原页面 |
技术架构
小程序端(uni-app / Vue3)
pages/* 22 个页面:用户 13 · 工作人员 6 · 管理 3
services/* 唯一接触 uniCloud 的层(cloud / order / worker / user / income / area / upload)
stores/user.js reactive 单例:身份、资料、计数、身份切换
components/* app-tab-bar(双身份底部栏)/ app-empty-state / app-status-tag
common/* 订单状态机镜像、错误码、格式化、mock 开关
mock/* 17 张表种子数据 + 59 个接口的本地实现(无服务空间也能跑)
云端(uniCloud · 腾讯云)
cloudfunctions/
order-co 下单、计价、抢单、履约、取消、支付、评价
worker-co 入驻申请、审核、在线状态、服务区域
user-co 资料、地址、优惠券、套餐、通知、首页聚合
income-co 收益、钱包、提现申请与审核、冻结释放
area-co 服务区域维护与可达校验
notification-co 站内通知
pay-notify uni-pay 支付回调(URL 化云函数)
common/service-common 鉴权 / 权限 / 状态机 / 原子抢单 / 计价 / 结算 / 事务
database/ 17 张业务表 schema + 索引 + 种子数据
数据与安全边界:所有业务数据在云数据库,客户端对敏感集合只读,所有写入只经云对象;云对象以管理员身份操作数据库并自行校验归属。userId、price、status、payStatus 等前端参数一律不信任。
快速开始
方式一:不接后端,直接看 UI(默认)
- HBuilderX 导入本项目。
- 直接「运行 → 运行到浏览器 / 运行到微信开发者工具」。
- 完成。
common/mock-config.js里MOCK_ENABLED = true,所有接口走mock/本地数据表,演示账号「李袋袋」已登录(同时是 admin 与已认证工作人员,可在「我的」切换身份)。
命令行构建 H5(可选):
npx uni build -p h5 # 产物在 dist/build/h5
方式二:接真实 uniCloud
- HBuilderX 右键
uniCloud→ 关联云服务空间(腾讯云)。 - 插件市场导入 uni-id-pages(含
uni-id-co、uni-id-common)与 uni-pay。 - 填
manifest.json的mp-weixin.appid、uni-config-center/uni-id/config.json(appid / appsecret / tokenSecret)、uni-config-center/uni-pay/config.json(商户号、notifyUrl)。 - 右键
uniCloud/database→ 上传所有 DB Schema → 初始化db_init.json。 - 上传公共模块
service-common、uni-config-center,再上传 6 个云对象与pay-notify(并开启 URL 化)。 - 把
common/mock-config.js的MOCK_ENABLED改为false。
完整步骤、参数清单、真机测试脚本、安全边界见 docs/DEVELOPMENT.md。
目录结构
├── App.vue / main.js / index.html / pages.json / manifest.json
├── common/ 订单状态、常量、错误码、格式化、mock 开关
├── components/ app-tab-bar / app-empty-state / app-status-tag
├── mock/ 本地数据表 + 接口实现(预览用)
├── pages/ 22 个页面
│ ├── index 首页
│ ├── order create / list / detail / review
│ ├── address list / edit
│ ├── coupon · package 优惠券、包月套餐
│ ├── mine mine / notifications
│ ├── worker apply / home / tasks / task-detail / income / withdraw
│ ├── admin index / applications / withdrawals
│ └── login 微信登录
├── services/ 前端 service 层(唯一接触 uniCloud 的地方)
├── stores/ user(身份/资料/计数)
├── static/ 图标与 mock 占位图
├── uniCloud-alipay/ 云对象、公共模块、17 张表 schema、种子数据
└── docs/
├── DEVELOPMENT.md 实现细节与部署配置
└── preview/ 界面预览(index.html + shots/ 截图)
文档
| 文档 | 内容 |
|---|---|
| docs/DEVELOPMENT.md | 目录结构、云对象与数据表、索引与权限、uni-id / uni-pay 配置、抢单并发、状态机、结算、部署与真机测试、安全边界、Mock 说明 |
| docs/preview/index.html | 界面预览画廊(本地打开即可,图片在 docs/preview/shots/) |
| 在线画廊 | https://codesuccess.online/daizou/ |
项目状态
- 页面、云对象、schema、索引、种子数据、集成测试均已就绪,H5 构建产物 30 个页面状态逐一截图核对。
- 上线前仍需你完成:绑定服务空间、导入 uni-id-pages / uni-pay 插件、填写小程序 AppID 与支付商户号、把
MOCK_ENABLED改为false、给管理员账号加admin角色。

收藏人数:
购买源码授权版(
导入插件并试用
赞赏(0)






























下载 0
赞赏 0
下载 35231
赞赏 159
赞赏
京公网安备:11010802035340号