吴昊天 e712f5554c feat(商品): 网盘商品改 direct 单按钮直购,自定义表单商品禁止加入购物车
加购策略
- virtual Handler::getCartStrategy() 由 cart/多品改为 cart_mode=direct、multi_item=false,
  中台据此下发 cart_button=0,列表与详情只保留「立即购买」。
- 详情页 direct 模式不再写购物车:选中规格后跳单品直购页
  /pages/center/order/create/index?product_id=&sku_unique=&product_type=&num=;
  多规格首次点击先弹规格窗确认规格,再次点击直接下单。
- 列表卡片 cart_button=0 时展示「立即购买」,点击整行进详情。
- StoreCartServices::setCart() 增加 isDirectCartMode() 校验,new=false 时抛
  「该商品不支持加入购物车,请直接购买」,防止其他入口绕过 UI 加购。

自定义表单
- CenterProductServices::hasCustomForm() 统一判定(兼容 JSON 字符串/空数组/已解码数组),
  5 处 cart_button 计算与 cart_strategy 组装均按 direct 处理。
- StoreCartServices::setCart() 增加 hasCustomForm() 校验,new=false 时直接拦截。

商品图片
- getList/productDetail 的 image、recommend_image、slider_image 与 SKU pic
  统一 set_file_url 补全站点域名,与后台列表口径一致,修复图片裂图。
- 同步更新 .crmeb 用户端购物车文档与虚拟商品 README、详情页 mock 数据。
2026-10-23 14:16:54 +08:00
..
2026-09-23 15:15:02 +08:00
2026-09-23 15:15:02 +08:00
2026-09-23 15:15:02 +08:00
2026-09-23 15:15:02 +08:00

CRMEB 开源版 — Uni-App 前端

项目简介

CRMEB 开源版 v8 的 Uni-App 前端项目,基于 uni-app(Vue 3 + <script setup>) + Pinia + Vue-i18n v9 构建,支持一套代码发布到 H5、微信小程序、支付宝小程序、APP (iOS/Android) 等多端。

工程为 uni-app 官方 CLI(Vite)结构,全部开发、调试、打包均可通过 npm 命令行完成,不依赖 HBuilderX。

技术栈

技术 说明
uni-app 3.0.0-5020420260813003(CLI / Vite 5,对应 HBuilderX 5.02.04 编译器)
Vue ^3.4
Pinia ^2.1
Vue-i18n ^9(legacy 模式,保留 this.$t / i18n.t() 双写法)
Sass ~1.78(dart-sass)
Node >= 18

快速开始

# 0. 先启动后端(仓库根):./run.sh install 或 ./run.sh start
npm ci                 # 使用镜像加速可追加 --registry=https://registry.npmmirror.com
npm run dev:h5         # H5 开发(浏览器访问 http://localhost:5173)

H5 接口地址已在 .env.development 配置为 http://localhost:8011(直连后端,后端已内置 CORS);小程序 / APP 真机联调同样使用该地址,部署环境请改用 .env.production 或 .env.*.local 覆盖。

命令一览(dev 启动 / build 打包)

平台 启动 打包 产物目录
H5 npm run dev:h5 npm run build:h5 dist/build/h5
微信小程序 npm run dev:mp-weixin npm run build:mp-weixin dist/{dev,build}/mp-weixin
支付宝小程序 npm run dev:mp-alipay npm run build:mp-alipay dist/{dev,build}/mp-alipay
APP npm run dev:app npm run build:app dist/{dev,build}/app

小程序调试

  1. npm run dev:mp-weixin(或 build)后,用 微信开发者工具 导入 dist/dev/mp-weixin(或 dist/build/mp-weixin)
  2. 小程序 appid 在 src/manifest.json 的 mp-weixin.appid 中配置(编译时会写入产物 project.config.json;未配置时为游客 appid,真机预览需填入自己的 appid)
  3. 支付宝小程序同理,用支付宝开发者工具导入 dist/dev/mp-alipay

APP 打包说明

  • npm run build:app 生成本地 APP 资源(dist/build/app),可用于 wgt 热更新包(将该目录压缩为 zip 改名 .wgt)
  • 打 apk / ipa 安装包仍需 HBuilderX 云打包或离线 SDK(DCloud 平台限制,CLI 无法生成原生安装包);HBuilderX 亦可直接导入本 CLI 工程操作

目录结构

├── index.html               # H5 模板(CLI 工程约定:位于项目根)
├── package.json             # npm 依赖与 dev/build 脚本
├── vite.config.js           # Vite 配置(uni 插件 + UNI_APP_API_URL 注入)
├── .env / .env.development / .env.production   # 环境变量(接口地址)
└── src/                     # 源码根(@/ 别名指向此处)
    ├── api/                 # 接口层(order-center.js / product-center.js 为中台新接口)
    ├── composables/         # 组合式函数:useColorTheme / useSendVerifyCode / useSharePoster
    ├── dynamic-pages/       # 动态页面渲染引擎层(订单中心 page_config 驱动)
    ├── pages/               # 页面(主包仅 5 个 tab/guide 页,其余全部分包)
    ├── subpackage/          # diyComponents 分包(DIY 装修组件 + productSections)
    ├── components/          # 公共组件(mp-html 富文本等)
    ├── plugin/              # 本地第三方库(dayjs / clipboard / jweixin 等)
    ├── static/              # 静态资源
    ├── store/               # Pinia(app / hotWords / indexData)
    ├── libs/ utils/ config/ # 工具与配置
    ├── App.vue  main.js     # 应用入口
    ├── manifest.json        # uni-app 平台配置(appid、各端设置)
    ├── pages.json           # 路由配置(带注释 JSON,10 个分包)
    └── uni.scss             # 全局样式变量

架构细节(动态渲染引擎、产品类型扩展、编码规范)见 AGENTS.md。

环境配置

接口地址通过 .env 系列文件管理(变量 UNI_APP_API_URL):

  • .env.development — 开发环境(dev 命令生效)
  • .env.production — 生产环境(build 命令生效)
  • .env.local / .env.*.local — 本地覆盖(已 gitignore,不入库)

优先级:.env.local > .env.[mode] > .env;未配置时回退 src/config/app.js 内各端默认值(H5 自动取当前域名)。vite.config.js 负责把该变量注入 process.env.UNI_APP_API_URL。

技术说明

  • 请求封装:src/utils/request.js 统一处理请求拦截、Token 注入、错误处理
  • 状态管理:Pinia(src/store/),禁止新增 Vuex 用法
  • 国际化:src/utils/lang.js 多语言支持,语言包由后端下发
  • 条件编译:#ifdef H5 / MP / MP-WEIXIN / APP-PLUS 等实现多端差异
  • 小程序端动态组件限制:MP 端不支持 <component :is>,订单详情 section 在 MP 端经 SectionDispatcher 枚举分发(H5/APP 端仍为动态组件),新增 detail 组件需同步补一行分支

相关项目

  • 后端 API:CRMEB 开源版 PHP 后端(ThinkPHP 8,多应用 /adminapi / /api / /outapi),见仓库 backend/
  • 管理后台:CRMEB 开源版 Admin 前端(Vue 3 + Element Plus),见仓库 frontend/admin/