更新记录

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(默认)

  1. HBuilderX 导入本项目。
  2. 直接「运行 → 运行到浏览器 / 运行到微信开发者工具」。
  3. 完成。common/mock-config.js 里 MOCK_ENABLED = true,所有接口走 mock/ 本地数据表,演示账号「李袋袋」已登录(同时是 admin 与已认证工作人员,可在「我的」切换身份)。

命令行构建 H5(可选):

npx uni build -p h5   # 产物在 dist/build/h5

方式二:接真实 uniCloud

  1. HBuilderX 右键 uniCloud → 关联云服务空间(腾讯云)。
  2. 插件市场导入 uni-id-pages(含 uni-id-co、uni-id-common)与 uni-pay。
  3. 填 manifest.json 的 mp-weixin.appid、uni-config-center/uni-id/config.json(appid / appsecret / tokenSecret)、uni-config-center/uni-pay/config.json(商户号、notifyUrl)。
  4. 右键 uniCloud/database → 上传所有 DB Schema → 初始化 db_init.json。
  5. 上传公共模块 service-common、uni-config-center,再上传 6 个云对象与 pay-notify(并开启 URL 化)。
  6. 把 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 角色。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

位置信息(chooseLocation 地图选点、getLocation 定位小区);相机与相册(上传垃圾照片、取件与投放照片、证件照)。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

仅采集业务必需数据:微信登录凭证与手机号(登录)、位置与收货地址(匹配服务人员、上门取件)、取件与投放照片(履约留证)、工作人员身份证正反面照片(入驻审核)。数据存储于使用方自建的 uniCloud 云数据库,不向第三方共享,不含广告与用户画像。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。