一句话定位:DSShop 是德尚网络的平台自营 B2C 多业务电商系统,PHP 8 + ThinkPHP 8 写后端,Vue 3 写后台、uni-app 写用户端,一个仓库里塞了商城、外卖、家政、知识付费、短视频五套业务,外加骑手端与师傅端。它开源得相当彻底(Apache-2.0、无授权校验、100 张表全给),但工程细节比较糙:vendor 直接入库且没有 composer.lock,README 里的克隆命令还是占位符。
项值
仓库地址https://gitee.com/csdeshang/DSShop_open
项目定位平台自营 B2C 多业务电商(商城 / 外卖 / 家政 / 教育 / 短视频)
运营方德尚网络(csdeshang.com),同厂另有 DSMall、DSO2O、DSMall Pro
开源协议Apache-2.0(根目录 LICENSE 全文,代码内无附加限制)
后端技术栈PHP 8.0+、ThinkPHP 8.0、think-orm 3.0、think-multi-app 1.0
管理后台Vue 3.4.29 + Vite 5.3.1 + Element Plus 2.9.8 + TypeScript 5.4 + Pinia 2.1.7 + Tailwind 3.4.17
移动端uni-app(@dcloudio/uni-app 3.0.0-4070620250821001)+ Vue 3.4.21 + Vite 5.2.8
数据库MySQL / utf8mb4,100 张表(主库 84 + 积分商品 5 + 短视频 10 + 知识付费 1)
代码规模php-server 4584 个 PHP 文件(vendor 3559、业务 998),后台 349 个 .vue,移动端 285 个 .vue,仓库 178 MB
版本号config/version.php = 3.0.1,与前端 .env 的 VITE_APP_VERSION 一致
仓库状态77 次提交、1 个分支 master、0 个标签、0 个 Release,最后提交 2026-10-25
社区热度Gitee 6.4K Star / 180 Fork / 94 Watch / 12 Issue / 0 PR(2026-11-10 查询)
文档日期2026-11-10

1. 项目是什么

它是一个「一套代码、五个 API 入口、四种业务形态」的自营商城。

后端是一个 ThinkPHP 8 多应用工程,config/app.php 里 default_app = 'api',其余按角色拆入口:

应用目录使用者控制器文件数职责
api用户端(H5 / 小程序 / APP)120登录、商品、购物车、下单、支付、分销、积分、短视频
adminapi平台运营后台156商品、订单、财务、装修、会员、营销、系统设置
techapi家政师傅端12接单、服务进度、收益
riderapi外卖骑手端10抢单、配送轨迹、配送费
bloggerapi短视频达人端6达人资料、短视频投稿
crontab定时任务(HTTP 触发)5分钟/小时/日/月任务 + 队列消费

业务形态不是硬编码的,而是存表驱动:sys_platform 表内置 mall(商城)、food(外卖)、house(家政)、kms(视频教育)四条记录,每行对应 app/platform/<标识>/ 下一个薄壳模块,路由在启动时被动态装载(第 3 节细说)。

三件需要先认清的事:

  • 它是自营,不是多商户。全库 84 张表里没有 tbl_store 主表,没有入驻申请、保证金、店铺结算,也没有商户后台。能看到的 tbl_store_coupon(店铺优惠券)、sys_platform.scene = store 只是从同厂 DSMall 系沿用的命名,实际由平台统一发券。想开 B2B2C 多店铺,得换 DSMall,不是改配置能改出来的。
  • vendor 进了仓库,却没有 composer.lock。php-server 97 MB 里 46 MB 是依赖包,而锁文件缺失意味着 composer install 会按 composer.json 的约束重新解析版本——你装出来的依赖和作者提交的可能不是同一批。
  • README 有不能照抄的地方。克隆命令写的是 https://github.com/your-org/dsshop.git(占位符),技术栈声称用户 PC 端是 Nuxt 的 nuxt-consumer,但仓库顶层只有 vue-admin、uniapp、php-server、md-images 四个目录;移动端说明里的 npm run build:app 在 package.json 里也不存在(只有 build:h5、build:mp-weixin)。

2. 核心特性

能力说明代码中确认
自营 B2C平台统一管商品、订单、结算,无商户入驻是,无 tbl_store 主表,订单无 store_id
四套业务形态商城 / 外卖 / 家政 / 视频教育,各自独立路由与结算流程是,sys_platform 4 条业务记录 + app/platform/*
商品体系SPU、SKU、规格、规格值、分类、品牌、评价、收藏是,tbl_goods* 14 张表
营销玩法秒杀、批发价、会员折扣、店铺优惠券、积分抵现是,tbl_goods_flashsale、tbl_goods_wholesale、tbl_goods_userdiscount、tbl_store_coupon
订单6 状态机(关闭/取消/待支付/已付款/已接受/已完成),支持合并支付、发票是,TblOrderEnum + tbl_order_merge、tbl_order_invoice
售后退款申请、退款日志、退款流水是,tbl_order_refund、tbl_order_refund_log、trade_refund_log
支付微信支付 + 支付宝,按「渠道 + 场景」存配置是,yansongda/pay 3.7、trade_payment_config
二级分销自购佣金 + 一级 + 二级,等级按消费额/次数/邀请人数升级是,distributor_level 的 base_self_ratio、parent1_ratio、parent2_ratio
外卖履约骑手抢单、配送轨迹、配送费规则、骑手余额与提现是,rider、rider_track、rider_fee_rule、rider_balance_log
家政履约师傅接单、服务项关联、师傅评价、师傅提现是,technician、technician_goods_rel、technician_track
短视频达人、短视频、点赞收藏评论、视频挂商品是,video_short、video_short_goods_rel、blogger
知识付费课时表部分,kms_lesson 仅 1 张表,KmsLessonEnum 存在
积分商城积分商品、分类、兑换订单、评价是,points_goods* 5 张表
会员体系余额、积分、成长值、充值、提现、行为日志是,user_balance_log、user_points_log、user_growth_level
页面装修可编辑页面 + 组件,移动端有 home/pages/diy、editable/preview是,editable_page、EditablePageEnum
多供应商集成短信、上传、地图、物流、小票机各自 providers 目录是,见第 9 节

「多业务平台」这句要打个折:app/platform/{mall,food,house,kms} 每个只有 13~19 个文件,做的是「商品详情、购物车、下单」这几件事的薄封装,真正的业务逻辑集中在 app/deshang/service(46 个服务类)与 app/common(256 个模型/DAO/枚举)。所以它是「一套内核 + 四套外壳」,而不是四个独立系统。

3. 技术架构

层技术版本 / 说明
语言PHP8.0+(composer.json 与安装向导双重校验)
框架ThinkPHP8.0,think-multi-app 做应用拆分
ORMthink-orm3.0
鉴权firebase/php-jwt6.10,HS256,带 token_version 作废机制
支付yansongda/pay3.7,微信 + 支付宝
微信w7corp/easywechat6.17,公众号 / 小程序 / 开放平台 / APP
短信阿里云 Dysmsapi 3.1.2、腾讯云两套 provider
存储本地 / 阿里云 OSS SDK 2.7无腾讯云 COS 实现
表格导出phpoffice/phpspreadsheet2.1
二维码endroid/qr-code4.8
接口文档zircote/swagger-php5.0,app/swagger 目录
后台前端Vue 3.4.29、Vite 5.3.1、Element Plus 2.9.8、Pinia、Tailwindvue-admin
移动端uni-app、Vue 3.4.21、Vite 5.2.8uniapp,分包见第 4 节
缓存 / 锁ThinkPHP Cache(File 默认,Redis 可选)KvManager 统一封装 cache/lock/counter/rateLimit
队列自研 DB 队列(sys_task_queue)无 MQ 依赖,靠 HTTP 端点消费

结构上的五个特点:

  • 路由在启动时查库。app/api/route/route.php 与 app/adminapi/route/route.php 末尾都调用 PlatformLoader::loadRoute(),它从 sys_platform 查 platform != 'system' 的记录,再 include 对应模块的 route.php。也就是说每个请求注册路由阶段就访问一次数据库;数据库不可用时不是 404 而是直接 500。而且它只判断 platform 字段,没有检查 is_enable——后台把某个应用停用,它的路由照样注册。
  • 业务模块是薄壳。platform/mall/app/api/route/route.php 里只有 7 条路由(商品详情、购物车 4 条、下单 2 条),控制器把请求转给 app/deshang/service 下的公共服务。新增一种业务形态 = 新建目录 + 插一条 sys_platform 记录,这是它「可扩展」的真实含义。
  • 队列不依赖 MQ。QueueProducer 把任务写进 sys_task_queue,/crontab/queue/consume?batch=100 由外部定时器拉起消费,app/deshang/queue/config.php 里登记了 9 个 handler(订单销量增减、支付加积分、支付加成长值、登录奖励等)。好处是零中间件,坏处是队列时效完全取决于你有没有配好那条 crontab。
  • 认证分两层。JwtToken 只负责签发/校验 JWT,真正的「强制下线」靠 TokenCache 里按 role + user_id 存的自增版本号;版本号对不上即拒绝。缓存驱动默认是 File,所以多机部署必须切 Redis,否则 A 机的封禁在 B 机不生效。
  • 第三方能力统一走 providers。app/deshang/third_party/{trade,sms,upload,lbs,express,printer} 各有一套 Base* 抽象 + 具体实现,后台把密钥存 config_data(sys_config 或 trade_payment_config),换供应商只改配置与实现类。

4. 目录结构

路径用途
php-server/app/api用户端接口,按域分目录(tblGoods、tblOrder、trade、user、video…)
php-server/app/adminapi后台接口,与 api 结构对称,多出 stat、system、rider、technician、blogger
php-server/app/{techapi,riderapi,bloggerapi}师傅端 / 骑手端 / 达人端,各只有 order + 自身资料两类控制器
php-server/app/common模型、DAO、枚举、中间件(256 个文件),enum 下 50 个枚举是业务字典的集中地
php-server/app/deshang自研内核:base、core、exceptions、kv、queue、service、third_party、utils
php-server/app/platform/{mall,food,house,kms}四种业务形态的薄壳(路由 + 商品/购物车/下单)
php-server/app/crontabDate / Hour / Minutes / Month / Queue 五个 HTTP 定时入口
php-server/app/swaggerswagger-php 注解定义
php-server/config14 个配置文件,version.php 是唯一版本号来源
php-server/public站点根目录:index.php、router.php、nginx.htaccess、install/、attachment/、static/
php-server/public/install五步安装向导 + db/ 六份 SQL
php-server/.example.env环境变量样例(缺 JWT 密钥,见第 11 节)
vue-admin后台(src/pages-admin/main 与 src/pages-admin/platform/{mall,food,house,kms})
uniapp移动端,src/ 下 home、rider、technician、video、shared 五个分包 + pages.json
md-imagesREADME 配图(思维导图等)

移动端的分包很能说明产品边界:pages.json 里 14 个 root,除了 home、shared、rider、technician、video,还有 home/platform/{mall,food,house,kms}/pages 四套业务页——一套 App 里挂了四种业态的页面。

5. 快速上手

环境要求

PHP 8.0 以上,扩展要齐 pdo、pdo_mysql、curl、openssl、mbstring、gd(安装向导会逐项检查);MySQL 5.7/8.0,字符集 utf8mb4;Nginx 或 Apache 配伪静态;构建前端需要 Node 18 以上(Vite 5 的门槛)。Redis 不是必需项,默认缓存驱动是 File。

第一步:拉代码

git clone --depth 1 https://gitee.com/csdeshang/DSShop_open.git dsshop
cd dsshop/php-server
ls app public config

第二步:装依赖并建可写目录

cd php-server
composer install
mkdir -p runtime
mkdir -p public/storage
chmod -R 755 runtime
chmod -R 755 public/storage

runtime 不在仓库里,而安装向导的环境检测会直接对 ../../runtime、../attachment、../../config 判可写,目录不存在就是「不可写」红叉(向导里创建目录的代码是注释掉的)。public/storage 是 config/filesystem.php 里 public 盘的位置,本地存图要用。

第三步:配站点与伪静态

站点根目录指向 php-server/public,伪静态用仓库自带的 nginx.htaccess:

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=/$1 last;
        break;
    }
}

第四步:跑安装向导

浏览器打开 https://你的域名/install/install.php,五步:许可协议 → 环境检测 → 数据库配置 → 管理员账号 → 完成。向导会做四件事:建库并以你填的前缀导入 6 份 SQL(deshang、kms、video、initarea、points-goods、demo-data)、生成 php-server/.env(含 64 位随机 JWT_SECRET_KEY)、创建管理员、写 install.lock。

注意 demo-data.sql 是无条件导入的,会带进示例商品、SKU、分类、品牌、师傅、骑手、用户各一条,上线前记得清。

第五步:构建前端

cd vue-admin
npm install
npm run build

产物在 dist,Nginx 指过去即可。移动端同理:

cd uniapp
npm install
npm run build:h5

小程序把最后一行换成 npm run build:mp-weixin。构建前务必改 .env.production:仓库里 VITE_APP_BASE_URL 默认是 https://dsshop.csdeshang.com(官方演示站),不改的话你的后台会把请求发给德尚的服务器。

验证

curl -s -o /dev/null -w '%{http_code}\n' https://你的域名/
curl -s -X POST https://你的域名/adminapi/captcha

第一条返回 200 说明伪静态与入口通了;第二条返回验证码 JSON 说明数据库与 .env 都读到了。

6. 功能模块清单

100 张表按业务域看比逐张罗列有用:

域表数主要表说明
商品14tbl_goods、tbl_goods_sku、tbl_goods_spec、tbl_goods_category、tbl_goods_brand、tbl_goods_flashsale、tbl_goods_wholesale、tbl_goods_userdiscount商品、SKU、规格、秒杀、批发、会员价
交易9tbl_order、tbl_order_goods、tbl_order_address、tbl_order_delivery、tbl_order_merge、tbl_order_finance、tbl_order_invoice订单头/明细/地址快照/发货/合并支付/财务/发票
售后3tbl_order_refund、tbl_order_refund_log、trade_refund_log退款单、协商日志、退款流水
支付5trade_payment_config、trade_pay_log、trade_transfer_log、trade_refund_log、user_recharge_log渠道配置、支付/转账/退款流水
用户会员12user、user_balance_log、user_points_log、user_growth_level、user_growth_log、user_withdrawal_*、user_behavior_log余额、积分、成长值、提现、行为埋点
分销5distributor_apply、distributor_level、distributor_goods、distributor_order、distributor_balance_log申请、等级佣金比例、选品、分销订单、佣金流水
外卖4rider、rider_track、rider_fee_rule、rider_balance_log骑手、轨迹、配送费规则、骑手收益
家政4technician、technician_goods_rel、technician_track、technician_balance_log师傅、服务项关联、服务轨迹、收益
短视频10blogger、video_short、video_short_goods_rel、video_like、video_comment、video_view_log达人、短视频、视频挂商品、互动
积分商城5points_goods、points_goods_order、points_goods_evaluate积分商品与兑换
内容 / 装修5editable_page、sys_article、sys_article_category、sys_agreement、sys_notice_tpl页面装修、系统文章、协议、通知模板
系统10+admin、admin_menu、admin_role、sys_config、sys_area、sys_platform、sys_task_queue、sys_task_cron、sys_error_logs、sys_access_logs权限、配置、地区、应用、队列、日志
微信4wechat_setting、wechat_subscribe_record、wechat_push_log、sys_notice_sms_log公众号/小程序配置、订阅消息、推送
其他若干tbl_cart、tbl_goods_comment、tbl_store_coupon、tbl_store_printer、attachment、kms_lesson购物车、评价、优惠券、小票机、附件、课时

后台侧:admin_menu 初始化 151 条记录(38 个目录 + 113 个菜单),13 个一级目录是「权限、设置、会员、财务、商城平台、维护、装修、外卖平台、家政平台、教育平台、微信配置、短视频、营销中心」——业务边界在菜单上看得比 README 清楚。

三个判断:

  • 交易与售后是完整的:下单、合并支付、发货、退款、财务流水、发票都有表有状态,tbl_order_finance 单独记收支,tbl_order_refund_log 记协商过程。
  • 两种履约都做了:外卖的骑手抢单 + 轨迹 + 配送费规则,家政的师傅接单 + 服务项 + 轨迹,各自还有独立的余额与提现账户,这部分比多数「只做商城」的开源项目完整得多。
  • 营销是基础款:秒杀、批发、会员折扣、优惠券、积分、分销都有,但没有拼团、砍价、直播带货这类玩法表;短视频只是导流位,不是带货闭环(video_short_goods_rel 仅关联商品)。

7. 版本与授权

项实际情况
根目录 LICENSEApache-2.0 全文,标准文本
代码版权头0 处,998 个业务 PHP 文件里搜不到 Copyright / 版权所有
授权校验无域名绑定、无 License 校验、无加密扩展(全库 grep 无相关实现)
php-server/LICENSE.txtThinkPHP 框架自带的 Apache-2.0 声明,不是项目方协议
composer.jsonlicense 写 Apache-2.0,但 name 仍是 topthink/think、authors 仍是 ThinkPHP 作者——骨架元信息没清理
版本号config/version.php = 3.0.1,前端 .env 同一版本号
标签 / Release0 个,仓库页显示「暂无发行版」
提交77 次,最后一次 2026-10-25(提交信息 docs)

Apache-2.0 意味着什么:可以商用、可以闭源分发修改版、可以做成 SaaS 卖服务,义务只有三条——保留 LICENSE 与版权声明、修改过的文件加说明、若原作品带 NOTICE 则一并保留(本仓库没有 NOTICE)。它和 AGPL 是两回事,不存在「对外提供服务就得开源」的约束。

需要提醒的是:授权干净不等于项目方背书。仓库没有任何版权头,composer.json 沿用了 ThinkPHP 的元信息,README 也不提开源协议条款——真要做商业交付,建议先和官网确认商标与素材(md-images、public/static 里的图)的使用范围。

8. 商业模式说明

仓库里能核实的只有这些:README 首屏是一大段 SEO 关键词(商城模板、外卖源码、家政系统…),随后是「相关产品」导流到 DSMall Pro、DSMall、DSO2O 三个同厂项目,再给出四个演示账号(后台 / 用户端 / 骑手端 / 师傅端,账号均为 test、密码 123456)、官网、帮助手册和销售电话。

环节观察到的事实
开源版Apache-2.0 全功能代码,含营销、分销、发票、骑手、师傅、短视频
获客Gitee 6.4K Star、四个在线演示环境、帮助手册、QQ/电话咨询
关联产品DSMall Pro(ThinkPHP8 + Vue3 平台)、DSMall(B2B2C 多店铺)、DSO2O(外卖),各自独立仓库
变现方式官网未在仓库中体现,README 只留联系方式,属于「官网/私域谈单」模式
服务边界无法核实。报价、授权条款、是否提供二开服务,仓库里都没有

一个可核实的判断:开源版没有做功能阉割。营销、分销、发票、财务、骑手、师傅这些通常被划进商业版的能力,在开源代码里都有表和实现,这与 mall4cloud 那种「营销留在商业版」的分层思路相反。更像「用完整产品开源聚流量,靠实施、定制、行业版收费」的路子。至于 DSMall Pro 与 DSShop 是否同源、商业版功能差别,README 没写,只能按「官方宣传」看待。

9. 生态与周边

项目 / 资源作用地址
DSShop_open(本文主角)自营 B2C 多业务系统gitee.com/csdeshang/DSShop_open
DSMall ProThinkPHP8 + Vue3 的新平台系产品gitee.com/csdeshang/DSPlatform_open
DSMallThinkPHP 6 + uni-app 的 B2B2C 多店铺商城官网 csdeshang.com
DSO2OThinkPHP 6 + uni-app 的外卖系统官网 csdeshang.com
官网产品、案例、联系方式www.csdeshang.com
帮助手册DSMall Pro 系文档站help.dsplatform.csdeshang.com
后台演示账号 test / 123456dsshop.admin.csdeshang.com
用户端演示账号 test / 123456dsshop.uniapp.csdeshang.com
骑手端演示同上账号dsshop.uniapp.csdeshang.com/rider/pages/index/index
师傅端演示同上账号dsshop.uniapp.csdeshang.com/technician/pages/index/index

技术侧的依赖生态也值得一提,因为它的 providers 目录就是一张「国产电商基础设施清单」:

能力已实现的供应商
支付微信支付、支付宝(yansongda/pay 3.7)
短信阿里云、腾讯云
存储本地、阿里云 OSS(无 COS)
地图 / LBS高德、腾讯、百度、天地图
物流查询快递100、快递鸟
小票打印飞鹅、佳博、芯烨、易联云
微信公众号、小程序、开放平台、APP(EasyWeChat 6.17 + 两套模板预设配置)

10. 选型建议

适合你,如果:

  • 你要做的是平台自营生意(品牌商城、连锁自营、本地生活服务商),本来就不需要商户入驻;
  • 你想同时试商城 + 外卖 + 家政,用一套后台管起来——这种多业态组合在开源里很少见;
  • 团队是 PHP 栈、能读 ThinkPHP 8,接受「薄壳 + 公共服务层」的组织方式;
  • 你要 Apache-2.0 的宽松授权,未来可能闭源交付给客户。

不适合你,如果:

  • 你要多商户平台:没有店铺表、没有入驻审核、没有商户结算,改造成本远高于换 DSMall;
  • 你想要「装完即用」的成熟产品:演示数据要清、runtime 要手建、前端 .env 要改、定时任务要自己配,README 还有几处照抄会踩坑;
  • 你在意代码整洁度与工程规范:vendor 入库、无 composer.lock、无单元测试、无版权头,README 与仓库不一致;
  • 你需要高并发或分布式部署:默认 File 缓存 + File 锁 + HTTP 触发的 DB 队列,多机场景要逐项换成 Redis 与常驻进程。

和写过的同类怎么比:YoShop、ShopWind、ZKMall 都是「一个后端 + 平台/商户双后台」的多商户路线,DSShop 走的是反方向——单主体自营 + 多业态扩展;和 mall4cloud 比,它不是微服务教材,而是「业务功能密度极高」的单体 ThinkPHP 应用,100 张表里有大量可以直接用的真实业务;和同厂 DSMall 比,两者是同一体系内的两个商业模式选择,不是新旧关系。

11. 风险与坑

  • 手动配 .env 会漏 JWT 密钥。.example.env 只有 APP_DEBUG、DB_*、DEFAULT_LANG 七项,没有 JWT_SECRET_KEY;JwtToken 取不到密钥会直接抛异常(异常文案还写错成「请检查 JWT_SECRET 设置」,变量名实际是 JWT_SECRET_KEY),登录接口全挂。用官方安装向导没问题——它会 random_bytes 生成 64 位密钥写进 .env。
  • 后台权限对 GET 放行。AdminAuthorizeRole 的逻辑是:超管(admin_is_super === 1)直接跳过;当前规则 adminapi/<rule> 不在 admin_menu 的 api 列表里且请求方法是 GET,也直接放行。新加的后台 GET 接口只要忘了登记菜单,就等于对任何登录管理员开放。
  • 路由注册期查库。PlatformLoader::loadRoute() 在路由阶段查 sys_platform,数据库抖动会让所有接口一起 500(不是单接口报错)。它还只过滤 platform != 'system',不判断 is_enable,后台「停用应用」只影响界面,不影响路由注册。
  • public/install 装在站点根目录下。安装完成后只写了 install.lock,目录本身不删;install.php 的锁检查对 step=5 开了白名单,虽然真正执行安装还依赖 session 里的数据库配置,但把安装目录留在线上始终不该做。上线第一件事是删 public/install。
  • vendor 入库 + 无 composer.lock。php-server 97 MB 里 46 MB 是依赖;因为没有锁文件,composer install 会重新解析 ^8.0、^3.0 这类约束,拉到的版本可能和作者提交的不一致,出现问题很难对齐复现。
  • 演示数据自动入库。安装向导无条件导入 demo-data.sql,带进示例商品、SKU、分类、品牌、师傅、骑手、用户各一条;不清理会出现在前台。
  • 默认缓存是 File,锁也是 File。config/cache.php 默认驱动 file,LockService 在非 Redis 下用文件锁(不跨机器)。多机部署不切 Redis,余额、库存、分销结算这些依赖锁的场景会出现并发问题。
  • CACHE_ENABLED=false 时锁退化成伪锁。LockService::acquire() 在缓存关闭时返回 disabled_ 前缀的假值直接当成加锁成功——开发环境图快可以,线上误关就是全裸奔。
  • 强制下线依赖缓存。TokenCache 的版本号默认值硬编码为 1,缓存被清空后版本号回落,之前被作废的旧令牌可能重新可用。清缓存是个有副作用的运维动作。
  • sys_task_cron 是死表。表建了、cron_type/params 字段都在,但全项目 grep 不到任何读写它的代码;真正的定时靠外部 crontab 请求 /crontab/{minutes,hour,date,month}/index 与 /crontab/queue/consume。不配这些 URL,订单超时取消、自动确认收货、优惠券过期、分销结算、队列消费全都不跑。
  • config/console.php 是空的。没有注册任何命令,所以不能用 php think xxx 跑任务,只能走 HTTP;这意味着定时任务暴露在公网路径上,建议在 Nginx 层限制来源或加内网校验。
  • README 与代码有多处不符:克隆地址是 your-org 占位符;nuxt-consumer(用户 PC 端)目录不存在;npm run build:app 脚本不存在;技术栈写「本地 / 阿里云 OSS / 腾讯云 COS」,代码里只有 Local 与 Aliyun 两个 provider;写「地图:腾讯、高德、百度」,实际还有天地图。照 README 部署会在这几处卡住。
  • .example.env 与安装向导写出的 .env 不一致:样例是 DB_CHARSET = utf8、无 DB_PREFIX、无 CACHE_ENABLED、无 INSTALL_TIME;向导生成的是 utf8mb4 + 前缀 + 缓存开关。手工部署时别拿样例当标准。
  • 前端 .env 指向官方演示站。VITE_APP_BASE_URL 与 VITE_FILE_BASE_URL 都是 https://dsshop.csdeshang.com,OSS 示例桶还是 dsmall2024(DSMall 项目的桶名)。不改就上线,等于把用户请求和图片地址都发给别人。
  • 没有测试。998 个业务文件里找不到 tests 目录,vue-admin 虽有 vitest 脚本但没有测试用例。升级 ThinkPHP 8 小版本或改公共模型,只能靠手点回归。
  • 订单状态是共用枚举。TblOrderEnum 里同一个 order_status 字段要同时表达商城、外卖、家政三套语义(40 是「已发货」也是「店铺已接单」,50 是「派送中」),字典靠 getMallOrderStatusDict / getFoodOrderStatusDict 分开维护。加业务形态时要小心别把字典串了。
  • 代码规模不小,但文档几乎没有。除 README 和 app/swagger 的注解,没有架构说明、没有部署文档、没有二开指南;deshang 内核的约定(ds_json_success、BaseApiController、KvManager)只能读代码学。

12. 参考链接

名称地址
代码仓库(本文链接)https://gitee.com/csdeshang/DSShop_open
官网https://www.csdeshang.com
帮助手册http://help.dsplatform.csdeshang.com/
后台演示(test / 123456)https://dsshop.admin.csdeshang.com
用户端演示(test / 123456)https://dsshop.uniapp.csdeshang.com
骑手端演示https://dsshop.uniapp.csdeshang.com/rider/pages/index/index
师傅端演示https://dsshop.uniapp.csdeshang.com/technician/pages/index/index
同厂 DSMall Pro(平台系)https://gitee.com/csdeshang/DSPlatform_open
同厂 DSMall(B2B2C)https://www.csdeshang.com
ThinkPHP 8 文档https://doc.thinkphp.cn/v8_0
EasyWeChat 文档https://easywechat.com
yansongda/pay 文档https://pay.yansongda.cn/docs/v3/
uni-app 文档https://uniapp.dcloud.net.cn
Element Plus 文档https://element-plus.org

标签: 商城, php, uniapp, ThinkPHP, dsshop

添加新评论