一句话定位:这不是一套能独立跑起来的商城,而是芋道商城的移动端前端——uni-app + Vue3 写的 H5 / 微信小程序 / 公众号壳子,后端必须配芋道的 Java 开发平台(ruoyi-vue-pro 或 yudao-cloud)才有商品、订单和支付。拿来改 UI 很快,想「下载即开店」会失望。
项值
仓库地址https://gitee.com/yudaocode/yudao-mall-uniapp (GitHub 镜像:github.com/yudaocode/yudao-mall-uniapp)
项目定位芋道商城「用户端」前端(移动端),不含后端与管理后台
官方文档https://doc.iocoder.cn (商城手册:doc.iocoder.cn/mall/build/)
在线演示https://doc.iocoder.cn/mall-preview/
开源协议MIT(仓库 LICENSE 与 Gitee 项目信息一致)
技术栈uni-app + Vue 3(vue ^3.5.11)+ Vite + Pinia + luch-request + SCSS
当前版本2026.10(package.json version 与 manifest versionName 一致,versionCode 183)
支持端微信小程序、微信公众号(H5)、H5 移动端;README 称后续支持支付宝/抖音小程序
社区热度Gitee 21.7K Star / 3.4K Fork / 220 Watch / 2 个开放 Issue(2026-11-10 查询)
维护方芋道源码(作者艿艿 / YunaiV),仓库创建于 2023-04-24
文档日期2026-11-10

1. 项目是什么

它是芋道商城的「前台」,不是商城本身。 一套代码编译出微信小程序、公众号内嵌 H5 和普通手机浏览器页面,负责商品浏览、下单、支付、售后、分销、拼团秒杀这些用户可见的流程;真正的业务逻辑、库存扣减、订单状态机、支付回调全在 Java 后端里。

官方文档把商城拆成三块,说得非常直白:

组成仓库说明
后端ruoyi-vue-pro(单体)/ yudao-cloud(微服务)商城功能在 yudao-module-mall 模块,默认关闭,要手动开
管理后台yudao-ui-admin-vue3商品、订单、装修、营销活动的运营界面
用户前台本仓库手机端页面,接口走 /app-api 前缀

所以选型时第一个要回答的问题不是「这个前端好不好看」,而是「我有没有、或愿不愿意跑一套芋道后端」。答案是否,这个仓库对你的价值就只剩「抄页面结构和交互」。

它解决的问题很具体:

  • 一套 Vue3 代码覆盖三端:小程序、公众号 H5、手机浏览器,不用为每端重写业务。
  • 商城前台该有的页面都齐了:商品、购物车、下单、支付、售后、物流、优惠券、分销、拼团秒杀积分,分包结构清晰,省掉从零搭骨架的两三周。
  • 和芋道后端的接口约定是现成的:请求封装、租户头、登录态、支付拉起都对着 yudao-module-mall 调通了,换后端要重写这一层。

不适用:想找一个开箱即用的完整商城系统(去看 CRMEB、ShopXO、mall4j 这类前后端一体的);团队不写 Java 也不想维护 Spring Boot;只想拿 H5 模板去接自己的 PHP 接口(接口协议、字段、错误码全要改)。

2. 核心特性

特性说明对使用者的价值
纯前端单仓库只有 pages/ 和 sheep/ 两套代码,没有后端、没有 SQL交接成本低,读一遍目录就知道边界在哪
一套代码多端uni-app 条件编译 + 平台适配层,同一份页面出 H5 与微信小程序改一次样式,三端同步
首页/我的可装修首页与个人中心由后端「店铺装修」数据驱动,官方内置全品类、垂直品类、节日活动 3 套模板换行业不用改代码,运营在后台拼页面
组件体系自带easycom 规则把 s-* 映射到 sheep/components、su-* 映射到 sheep/ui新增页面直接写 <s-goods-card>,不用逐个 import
状态持久化Pinia + pinia-plugin-persist-uni,登录态、购物车、租户信息落地到本地存储小程序冷启动不用重新拉一遍用户信息
请求层统一基于 luch-request 封装,统一拼 SHOPRO_API_PATH、带 token、带租户号、统一错误提示加接口只写 api 文件,不重复处理鉴权
SaaS 多租户适配SHOPRO_TENANT_ID 兜底,sheep/store/app.js 的 #adaptTenant 按访问域名或小程序 appId 自动匹配租户一套代码服务多个商户/品牌
营销能力齐全优惠券、拼团、秒杀、积分商城、分销(佣金/团队/排行榜/提现)、签到、余额充值中小电商常见玩法不用二次开发
客服与直播开关内置 pages/chat 客服页;.env 的 SHOPRO_MPLIVE_ON 控制小程序直播需要时打开,不需要不背包袱
提供 CLI 分支master-cli 是 vue-cli 工程结构,有完整 dev:* / build:* 脚本想接 CI/CD、不想装 HBuilderX 时可用

3. 技术架构

整体结构:uni-app(Vue3 版本)单页应用,Vite 构建,pages.json 声明路由与分包,sheep/ 是自研的「框架层」,pages/ 是业务页面。没有 TypeScript、没有单元测试、没有 ESLint 流程,只有一个 Prettier 格式化脚本。

层技术说明
应用框架uni-app(Vue3)manifest.json 中 vueVersion: "3",main.js 走 createSSRApp
构建Vite + HBuilderX仓库有 vite.config.js,但 master 的 package.json 没有 dev/build 脚本,日常靠 HBuilderX 运行
状态管理Pinia ^2.0.33 + pinia-plugin-persist-unisheep/store/ 下按模块拆分(app、user、cart、goods 等)
网络luch-request ^3.0.8封装在 sheep/request/,统一拦截器与错误码处理
路由uni-app 原生路由 + sheep/router/支持 meta.auth 登录拦截、sync 标记
UI自研组件 + SCSS 变量sheep/ui(基础控件)、sheep/components(业务组件)、sheep/scss
工具dayjs、lodash / lodash-es时间格式化、数据处理
微信能力weixin-js-sdk ^1.6.0公众号内 H5 的 JSSDK 能力(分享、支付等)
后端接口芋道 app-api开发默认 http://127.0.0.1:48080,接口前缀 /app-api,WebSocket 前缀 /infra/ws

运行环境判定(sheep/config/index.js,逻辑值得一读):

// 开发环境走 SHOPRO_DEV_BASE_URL
// 非开发环境再看微信环境版本:
//   trial   -> SHOPRO_TRIAL_BASE_URL
//   release -> SHOPRO_BASE_URL
//   其他端  -> SHOPRO_BASE_URL

也就是说,同一份代码在「开发版小程序 / 体验版 / 正式版」会自动切到不同后端地址,这是它比多数开源商城前端做得细的地方——但仍要你在 .env 里把三个地址都填对。

关键取舍:

  • 选 uni-app 而不是原生小程序:多端成本最低,代价是要忍受 uni-app 的兼容坑和 HBuilderX 这层工具链。
  • 前后端彻底分离:前端可以独立部署到 Nginx 或 CDN,但接口一改就要同步改 sheep/api,没有代码生成兜底。
  • 组件层自己造(sheep/ui),没有引入 uView/uni-ui 全量库:包体小、风格统一,但生态红利吃不到,新组件得自己写。

4. 目录结构

路径用途
pages/业务页面主体,按域分包:index、goods、order、user、commission、activity、coupon、pay、chat、app、public
pages.json路由、分包、tabBar、全局样式、easycom 规则,加页面必须先改这里
sheep/api/按后端模块划分的接口定义(商品、订单、支付、会员、促销等)
sheep/components/业务组件,s- 前缀
sheep/ui/基础 UI 组件,su- 前缀
sheep/store/Pinia 状态模块,含多租户适配逻辑
sheep/request/请求封装、拦截器、错误处理
sheep/platform/各端差异封装(登录、支付、分享、位置)
sheep/config/环境配置出口,读 .env 与 package.json 版本号
sheep/router/路由跳转封装与登录守卫
sheep/helper/、sheep/hooks/、sheep/libs/、sheep/url/、sheep/validate/工具函数、组合式函数、第三方库封装、链接生成、校验规则
sheep/scss/全局样式变量与 mixin
static/静态资源(logo、tabBar 图标、占位图)
uni_modules/uni-app 插件目录,当前 package.json 声明为空依赖
.env环境配置核心:后端地址、静态资源地址、租户号、上传方式、H5 域名
manifest.json应用名称、appId、版本号、各端打包配置、Android 权限、微信 appId
vite.config.js / main.js / App.vue / index.html构建入口与应用生命周期
androidPrivacy.jsonAndroid 隐私政策弹窗配置,上架前必须按自己的隐私政策改

5. 快速上手

前置条件(顺序不能反):先把后端跑起来,再跑前端。后端没起来,前端首页会是空的。

后端侧要做三件事(依据官方《商城手册 - 功能开启》):

  1. 在 pom.xml 与 yudao-server/pom.xml 里取消 yudao-module-mall 的注释,Reload Maven;
  2. 导入商城的 SQL 脚本(官方文档给的下载地址有使用范围说明,见第 8 节);
  3. 重启后端,确认管理后台出现商城菜单。支付、会员功能还需按《支付手册》《会员手册》单独开启。

前端侧(master 分支,HBuilderX 方式):

# 1. 克隆
git clone https://gitee.com/yudaocode/yudao-mall-uniapp.git
cd yudao-mall-uniapp

# 2. 装依赖(官方文档给的就是这两条)
npm i
# 报错时再试
npm install --legacy-peer-deps
  1. 打开 HBuilderX → 文件 → 导入 → 从本地项目导入,选中该目录;
  2. 改 .env,至少这三项:
# 后端接口(本地后端)
SHOPRO_DEV_BASE_URL=http://127.0.0.1:48080
# 静态资源(默认指向官方测试域名,必须换成自己的)
SHOPRO_STATIC_URL=https://你的静态资源域名
# H5 访问域名
SHOPRO_H5_URL=http://127.0.0.1:3000
  1. HBuilderX → 运行 → 运行到浏览器 → Chrome。

跑微信小程序:在 manifest.json 的「微信小程序配置」里填自己的 AppID,HBuilderX → 运行 → 运行到小程序模拟器 → 微信开发者工具;并在微信开发者工具里勾选「不校验合法域名、web-view、TLS 版本以及 HTTPS 证书」,否则本地接口全是跨域报错。

想用命令行 / CI(master-cli 分支):

git clone -b master-cli https://gitee.com/yudaocode/yudao-mall-uniapp.git
cd yudao-mall-uniapp
npm i
npm run dev:h5        # 启动 H5
npm run build:mp-weixin   # 构建微信小程序

注意 master-cli 的 package.json 版本是 2025.11,比 master 的 2026.10 旧一截,官方说法是「后续会合并到 master」。要用最新代码又想要 CLI,得自己把脚本和 @dcloudio/* 依赖搬过去。

H5 上线:HBuilderX 发行 → 网站-PC Web 或手机 H5,产物是纯静态文件,扔给 Nginx 即可。manifest.json 里 H5 路由是 history 模式,Nginx 必须配 fallback:

location / {
    try_files $uri $uri/ /index.html;
}

6. 功能模块清单

按 pages.json 的实际分包整理,这一节基本等于「这个前端到底做了哪些页面」:

分组页面说明
主包(tabBar)首页、商品分类、购物车、个人中心首页与个人中心由店铺装修数据驱动
商品商品详情、商品列表、拼团商品、秒杀商品、积分商品、商品评价、发表评价详情页按营销类型分了三个入口
订单确认订单、订单列表、订单详情、物流轨迹常规交易链路
售后申请售后、售后列表/详情/进度、退货物流覆盖仅退款与退货退款
用户我的信息、商品收藏、浏览足迹、收货地址、自提门店、我的余额、我的积分自提门店单独成页,对应门店自提
分销分销中心、我的佣金、推广商品、分销订单、我的团队、推广人排行榜、佣金排行榜、申请提现分销体系相当完整
营销营销商品、拼团活动/详情/我的拼团、秒杀活动、积分商城活动页集中在 pages/activity
优惠券领券中心、优惠券详情—
支付收银台、支付结果、充值余额、充值记录余额充值走独立流程
客服客服会话单页,接后端客服能力
应用签到中心—
公共系统设置、富文本、常见问题、错误页、webview通用页,webview 用于外部链接

没看到的:README 的功能描述里有「砍价」,但 pages.json 里没有独立的砍价页面;移动端主流程的实际覆盖面以页面清单为准,砍价更多体现在管理端配置与后端能力上。

7. 版本与授权

项值
协议MIT(可商用、可闭源二次开发,保留版权声明即可)
当前版本2026.10,versionCode 183
版本管理package.json 的 version 与 manifest.json 的 versionName 保持一致,sheep/config/index.js 直接读 package.json 打日志
主要分支master(Vue3 主线)、develop、master-cli(CLI 工程结构)、master-vue2(Vue2 老版本,已停更于 2023-12)
迭代节奏最近提交 2026-11-01(修复积分商城无效商品导致的分页异常),与后端版本同月对齐
发布物Gitee Releases 提供 zip / tar.gz 源码包,从 v1.8.2(2023-09)一路发到 2026.10

两个版本口径不一致,别混用:

  • .env 里写着 SHOPRO_VERSION=v2.4.1,这个值已经和 package.json、manifest.json 脱节,像是历史残留;
  • 判断版本请认 package.json / manifest.json / Release tag,三处都是 2026.10。

8. 商业模式说明

这个仓库本身没有商业版本。README 开头就是一句「现在、未来都不会有商业版本,所有代码全部开源」,代码也确实 MIT。

但「代码免费」不等于「配套资源全免费」。官方《商城手册》里,导入商城 SQL 的那一步写得很明确:脚本需从知识星球附件下载,并注明该 SQL 仅星球成员可使用和商用。也就是说:

  • 前端页面、组件、接口封装:MIT,随便用;
  • 商城数据库脚本、完整文档、视频教程:与知识星球会员绑定;
  • 作者的变现路径是知识星球 + 企业定制/外包 + 课程,不是卖 License。

选型时把这条读清楚,能避免「代码是 MIT,为什么文档要付费」的预期落差;也提醒一句,数据库结构和初始化数据属于另一层授权,商用前建议自行确认。

9. 生态与周边

项目作用地址
ruoyi-vue-proSpring Boot 单体后端(master 为 JDK8,另有 master-jdk17、master-jdk25)gitee.com/zhijiantianya/ruoyi-vue-pro
yudao-cloudSpring Cloud 微服务后端gitee.com/zhijiantianya/yudao-cloud
yudao-ui-admin-vue3管理后台(Vue3 + element-plus),商城运营都在这里gitee.com/yudaocode/yudao-ui-admin-vue3
yudao-ui-admin-uniapp移动端管理后台(另一套 uniapp,别和本仓库混淆)gitee.com/yudaocode/yudao-ui-admin-uniapp
yudao-demo演示站静态资源(商城图片素材在 yudao-static/mall/static)gitee.com/yudaocode/yudao-demo
官方文档商城手册、支付手册、会员手册、部署手册(含宝塔部署一篇)doc.iocoder.cn
前身页面与目录里的 sheep 前缀、shopro scheme 来自 SheepJS 的 shopro 模板—

值得注意的传承关系:package.json 的 repository 仍指向 github.com/sheepjs/shop,homepage 指向 DCloud 的 hello-uniapp,manifest.json 里的 Universal Links 域名是 shopro.sheepjs.com。这套前端是在 SheepJS shopro 模板基础上重构而来,MIT 协议下这没问题,但这些元数据不能当作项目官网或主仓库。

10. 选型建议

适合你,如果:

  • 已经(或计划)用芋道后端,需要一套现成的移动端前台,省掉三周搭架子;
  • 团队是 Java 为主,前端只有 1–2 人,改改 UI 和活动页就能交付;
  • 要做 SaaS 多租户电商,需要按域名/appId 自动切租户的能力;
  • 需要一个「分包结构规范、组件分层清楚」的 uni-app 模板当起点。

不适合你,如果:

  • 想要开箱即用的完整商城:没有后端、没有 SQL、没有运营后台,三样都得另配;
  • 后端不是 Java 或不打算用芋道:sheep/api 全要重写,sheep/request 的鉴权与租户逻辑也要改;
  • 需要 App 上架:仓库保留了 App 打包配置,但官方主推三端(小程序/公众号/H5),App 端缺少明确的维护承诺;
  • 团队重度依赖 TypeScript 与自动化测试:这个仓库两样都没有。

和同类怎么比:CRMEB、ShopXO 是「前后端一体、装上就能卖货」;本项目是「前端零件 + 需要自己组装的后端」。前者省心但定制受限,后者灵活但要求你会 Java 那半边。如果只看移动端体验和组件规范,这个仓库的水平在同类的 uni-app 商城里属于上乘。

11. 风险与坑

  • 把前端当成完整商城:最常见的误判。下载、npm i、运行,看到的空首页不是 bug,是后端没起或没配装修数据。
  • 商城 SQL 的使用范围:官方文档对脚本来源与商用范围有明确限制,别默认「MIT 就等于所有配套资源随便用」。
  • 后端模块默认关闭:yudao-module-mall 在 pom.xml 里是注释状态,不开就是一堆 404;支付、会员还要各自开启。
  • SHOPRO_STATIC_URL 不改必踩:默认值指向官方测试域名 test.yudao.iocoder.cn,上线后商品图、banner、icon 全挂;素材要从 yudao-demo 仓库搬到自己的对象存储/CDN。
  • manifest.json 里的第三方标识要全换:appid 是 __UNI__460BC4C,公众号/App 支付用的是 wxae7a0c156da9383b,小程序是 wx66186af0759f47c9,Universal Links 是 shopro.sheepjs.com。任何一项漏改,登录、支付、分享都会串到别人的应用上。
  • Android 权限清单偏宽:manifest.json 里声明了 READ_SMS、READ_CONTACTS、ACCESS_MOCK_LOCATION、WRITE_SETTINGS 等权限,国内应用商店和隐私合规检测会逐条问用途,上架前必须按实际功能裁剪,并同步改 androidPrivacy.json。
  • master 没有构建脚本:想进 CI/CD 只能走 master-cli(版本落后一代),或自己补 @dcloudio/vite-plugin-uni 那套依赖。
  • H5 的 history 路由:Nginx 不做 try_files 回退,刷新二级页面直接 404。
  • 小程序的域名白名单:请求域名、上传/下载域名、业务域名都要在小程序后台配好,本地调试记得勾「不校验合法域名」。
  • 首页/个人中心强依赖装修数据:数据库里没有装修配置时首屏可能大面积空白,先按《店铺装修》文档配一套模板再验收。
  • 版本号有三处:.env 的 SHOPRO_VERSION、package.json、manifest.json 目前并不一致(.env 是 v2.4.1),自动化流程里别拿 .env 当版本源。

12. 参考链接

名称地址
代码仓库(Gitee)https://gitee.com/yudaocode/yudao-mall-uniapp
代码仓库(GitHub 镜像)https://github.com/yudaocode/yudao-mall-uniapp
商城演示https://doc.iocoder.cn/mall-preview/
商城手册 · 功能开启https://doc.iocoder.cn/mall/build/
快速启动(前端项目)https://doc.iocoder.cn/quick-start-front/
店铺装修https://doc.iocoder.cn/mall/diy/
宝塔部署https://doc.iocoder.cn/deployment-baota/
后端仓库https://gitee.com/zhijiantianya/ruoyi-vue-pro
微服务后端https://gitee.com/zhijiantianya/yudao-cloud
管理后台https://gitee.com/yudaocode/yudao-ui-admin-vue3
HBuilderX 运行 uni-apphttps://zh.uniapp.dcloud.io/quickstart-hx.html
CLI 工程结构说明https://uniapp.dcloud.net.cn/worktile/CLI.html

本文基于 2026-11-10 的 master 分支源码、Gitee 仓库信息与官方文档整理;版本号、Star 数与页面清单均以该日为准,后续迭代请以仓库实际内容为准。

标签: 商城, uniapp, yudao

添加新评论