ThinkPHP商城小程序源码| 多用户开源系统代码 |Vue3+TS全栈开发下载
ThinkPHP提供稳定高效的商城后端支撑,其MVC架构、ORM、中间件和API支持是构建复杂多用户系统的基石。Vue3的CompositionAPI带来灵活的逻辑复用,TypeScript则大幅提升前端代码的健壮性和开发体验。两者的结合,辅以UniApp的多端编译能力,构成了一套强大的全栈技术方案。
源码:xcxyms.top
一、引言:全栈技术栈构建多用户商城系统的价值与优势
在移动电商快速发展的当下,商城小程序凭借轻量化、高转化的特点成为企业数字化转型的核心载体。然而,传统商城系统往往面临技术架构陈旧(如单一PHP开发、缺乏前端工程化)、多用户场景适配不足(商户独立管理功能缺失)、二次开发难度大(闭源系统限制扩展)等问题。
本文将围绕“ThinkPHP+Vue3+TypeScript”全栈技术栈,解析一款多用户开源商城小程序系统的实现逻辑。该系统以ThinkPHP为后端核心、Vue3+TS构建前端生态,兼顾“多商户独立运营”与“平台统一管理”需求,同时提供完整开源代码,为开发者提供可复用的技术方案。

二、核心技术栈解析:为什么选择ThinkPHP+Vue3+TS?
2.1后端框架:ThinkPHP6.x的技术优势
ThinkPHP作为国内主流PHP框架,在商城系统开发中具备不可替代的优势:
MVC架构与ORM支持:通过模型层(Model)、视图层(View)、控制器(Controller)分离,实现数据与业务逻辑解耦;内置ORM系统简化数据库操作,支持链式查询(如`User::where('status',1)->select()`),大幅减少SQL编写工作量。
多应用与模块化设计:支持将系统拆分为“平台管理端”“商户端”“用户端”等独立应用,每个应用可单独配置路由、中间件,适配多用户场景下的权限隔离需求。
性能优化机制:内置缓存驱动(File、Redis等)、查询缓存、自动加载优化,可支撑日均10万+访问量的商城场景;支持数据库读写分离,应对高并发订单处理。
2.2前端技术栈:Vue3+TypeScript的工程化实践
前端采用Vue3+TypeScript组合,解决传统小程序开发中的“代码冗余”“类型混乱”问题:
Vue3的CompositionAPI:通过`setup()`函数与钩子函数(`onMounted`、`watch`)实现逻辑复用,例如商品列表的“下拉刷新”“分页加载”功能可封装为独立钩子,在多个页面复用。
TypeScript的类型安全:通过接口(Interface)定义数据结构(如商品类型`interfaceGoods{id:number;name:string;price:number}`),在编译阶段规避类型错误,减少线上BUG。
小程序适配方案:结合`uni-app`或`Taro`框架,将Vue3代码编译为微信/支付宝等多端小程序,实现“一次开发,多端运行”,降低跨平台维护成本。
2.3技术栈协同逻辑
后端ThinkPHP通过RESTfulAPI提供数据接口,前端Vue3+TS通过Axios请求数据,形成“前后端分离”架构:
后端负责数据处理(数据库交互、权限校验、业务逻辑),前端专注视图渲染(页面展示、用户交互)。
TypeScript接口定义与后端数据模型严格对齐,例如后端商品接口返回`{code:200,data:Goods[]}`,前端通过`interfaceApiResponse<T>{code:number;data:T}`接收,确保数据一致性。
三、系统架构设计:多用户商城的分层实现逻辑

3.1整体架构图
┌─────────────────┐┌─────────────────┐┌─────────────────┐ │前端应用层││后端服务层││数据存储层│ │(Vue3+TS+小程序)│◄────►│(ThinkPHP6.x)│◄────►│(MySQL+Redis)│ └─────────────────┘└─────────────────┘└─────────────────┘ │││ ├─用户端小程序├─接口服务(API)├─业务数据(MySQL) ├─商户管理端(H5)├─权限中间件├─缓存数据(Redis) └─平台管理端(H5)├─任务调度(定时任务)└─静态资源(OSS) └─第三方服务集成(支付、物流)
3.2分层设计详解
3.2.1前端架构:多端统一与组件化
用户端小程序:基于Vue3+TS开发,核心页面包括首页、商品列表、详情页、购物车、订单页等,通过`pinia`管理全局状态(如用户登录信息、购物车数据)。
商户管理端:H5页面,支持商户独立管理商品、订单、营销活动,采用`ElementPlus`组件库构建表单与数据表格,通过路由守卫实现权限控制。
组件化设计:封装通用组件(如`GoodsCard`商品卡片、`OrderStatus`订单状态标签),通过`props`传递参数,`emit`触发事件,提升代码复用率。
3.2.2后端架构:模块化与中间件
API模块:所有接口统一前缀`/api/v1`,按业务拆分路由(如`/api/v1/goods`、`/api/v1/order`),通过控制器接收请求并调用服务层处理。
服务层(Service):封装核心业务逻辑,例如订单创建流程(`OrderService::create()`)包含库存检查、价格计算、支付调用等步骤,避免控制器代码臃肿。
中间件:实现权限校验(`AuthMiddleware`)、请求频率限制(`RateLimitMiddleware`)、数据日志记录(`LogMiddleware`),例如多用户场景下,通过中间件验证当前请求的商户ID与资源所属商户是否一致。
3.2.3数据层:存储与缓存策略
MySQL数据库:采用InnoDB引擎,核心表结构包括:
`users`(用户表):存储用户基本信息与登录凭证
`merchants`(商户表):记录商户信息、结算账户、状态
`goods`(商品表):关联商户ID,支持多商户商品隔离
`orders`(订单表):包含订单状态、支付信息、关联用户与商户
Redis缓存:缓存高频访问数据(商品列表、用户会话),设置合理过期时间(如商品详情缓存10分钟),减轻数据库压力。
四、核心功能模块实现:从代码到场景
4.1多用户权限系统:基于RBAC模型的权限隔离

多用户系统的核心是“平台管理员-商户-普通用户”三级权限隔离,实现逻辑如下:
4.1.1数据库设计
sql
-角色表
CREATETABLE`roles`( `id`int(11)NOTNULLAUTO_INCREMENT, `name`varchar(50)NOTNULLCOMMENT'角色名称(admin/merchant/user)', `permissions`textCOMMENT'权限JSON(如["goods:add","order:view"])', PRIMARYKEY(`id`) );
-用户-角色关联表
CREATETABLE`user_roles`( `user_id`int(11)NOTNULL, `role_id`int(11)NOTNULL, `merchant_id`int(11)DEFAULTNULLCOMMENT'商户ID(仅商户角色有效)', UNIQUEKEY`user_role`(`user_id`,`role_id`) );
4.1.2后端权限校验(ThinkPHP)
php //权限中间件AuthMiddleware.php publicfunctionhandle($request,\Closure$next) { $token=$request->header('token'); $user=Cache::get('token_'.$token);//从Redis获取用户信息 if(!$user){ returnjson(['code'=>401,'msg'=>'未登录']); } //验证权限(以商户访问商品接口为例) $action=$request->controller().':'.$request->action();//如"Goods:index" if(!in_array($action,json_decode($user['role']['permissions'],true))){ returnjson(['code'=>403,'msg'=>'无权限']); } //商户数据隔离:仅能访问自己的商品 if($user['role']['name']=='merchant'){ $request->merge(['merchant_id'=>$user['merchant_id']]); } return$next($request); }
4.1.3前端权限控制(Vue3+TS)
typescript //路由守卫router/index.ts import{createRouter,createWebHistory}from'vue-router'; import{useUserStore}from'@/stores/user'; constrouter=createRouter({ history:createWebHistory(), routes:[ {path:'/merchant/goods',component:()=>import('@/views/merchant/Goods'),meta:{roles:['merchant']}}, {path:'/admin/merchant',component:()=>import('@/views/admin/Merchant'),meta:{roles:['admin']}} ] }); router.beforeEach((to,from,next)=>{ constuserStore=useUserStore(); if(to.meta.roles&&!to.meta.roles.includes(userStore.role)){ next('/403');//无权限跳转 }else{ next(); } });
4.2商品管理模块:从发布到展示的全流程
商品模块需支持多商户独立发布商品,并通过前端展示给用户,核心实现包括:
4.2.1后端商品接口(ThinkPHP)
php //商品控制器GoodsController.php classGoodsControllerextendsController { protected$middleware=['Auth'];//应用权限中间件 //获取商品列表(支持商户筛选) publicfunctionindex() { $where=[]; if(input('merchant_id')){//商户只能看自己的商品 $where[]=['merchant_id','=',input('merchant_id')]; } $list=GoodsModel::where($where) ->page(input('page',1),input('size',10)) ->select(); returnjson(['code'=>200,'data'=>$list]); } //发布商品 publicfunctionsave() { $data=request()->only(['name','price','stock','category_id']); $data['merchant_id']=input('merchant_id');//自动关联当前商户 $data['create_time']=time(); GoodsModel::create($data); returnjson(['code'=>200,'msg'=>'发布成功']); } }
4.2.2前端商品列表组件(Vue3+TS)
vue <template> <divclass="goods-list"> <GoodsCard v-for="goodsinlist" :key="goods.id" :goods="goods" /> <uni-load-more :status="loadingStatus" @clickLoadMore="loadMore" /> </div> </template> <scriptsetuplang="ts"> import{ref,onMounted}from'vue'; importGoodsCardfrom'@/components/GoodsCard.vue'; import{getGoodsList}from'@/api/goods'; interfaceGoods{ id:number; name:string; price:number; image:string; } constlist=ref<Goods[]>([]); constpage=ref(1); constloadingStatus=ref('more'); constloadData=async()=>{ constres=awaitgetGoodsList({page:page.value,size:10}); if(res.code===200){ list.value.push(...res.data); loadingStatus.value=res.data.length<10?'noMore':'more'; } }; onMounted(()=>loadData()); constloadMore=()=>{ if(loadingStatus.value==='more'){ page.value++; loadData(); } }; </script>
4.3订单流程模块:从下单到支付的事务处理
订单模块涉及库存扣减、支付对接、状态流转等关键环节,需保证数据一致性:
4.3.1订单创建逻辑(Service层)
php //订单服务OrderService.php classOrderService { publicstaticfunctioncreate($userId,$goodsList) { //开启数据库事务 Db::startTrans(); try{ //1.计算订单总金额 $totalAmount=0; foreach($goodsListas$item){ $goods=GoodsModel::find($item['goods_id']); if(!$goods||$goods['stock']<$item['num']){ thrownewException("商品{$goods['name']}库存不足"); } $totalAmount+=$goods['price']*$item['num']; } //2.创建订单 $order=newOrderModel(); $order->order_no=self::generateOrderNo(); $order->user_id=$userId; $order->total_amount=$totalAmount; $order->status=0;//待支付 $order->save(); //3.创建订单项 foreach($goodsListas$item){ OrderItemModel::create([ 'order_id'=>$order->id, 'goods_id'=>$item['goods_id'], 'num'=>$item['num'], 'price'=>GoodsModel::where('id',$item['goods_id'])->value('price') ]); //扣减库存 GoodsModel::where('id',$item['goods_id'])->dec('stock',$item['num'])->update(); } Db::commit(); return$order; }catch(Exception$e){ Db::rollback(); throw$e; } } //生成唯一订单号 privatestaticfunctiongenerateOrderNo() { returndate('YmdHis').mt_rand(1000,9999); } }
4.3.2支付回调处理
php //支付回调控制器PayController.php classPayControllerextendsController { //微信支付回调 publicfunctionwechatNotify() { $xml=file_get_contents('php://input'); $data=Xml::parse($xml);//解析微信回调XML if($data['result_code']=='SUCCESS'){ $orderNo=$data['out_trade_no']; //更新订单状态为“已支付” OrderModel::where('order_no',$orderNo)->update([ 'status'=>1, 'pay_time'=>time(), 'transaction_id'=>$data['transaction_id'] ]); //触发后续流程(如通知商户、更新库存) Event::trigger('order_paid',$orderNo); } return'<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>'; } }
4.4多商户结算模块:自动化分账与对账
多用户商城需支持平台与商户按比例分账,核心实现如下:
php //结算服务SettlementService.php classSettlementService { //订单完成后自动分账 publicstaticfunctionautoSettle($orderId) { $order=OrderModel::with('items.goods.merchant')->find($orderId); $merchantAmounts=[];//按商户ID分组金额 //计算每个商户的应得金额(扣除平台佣金10%) foreach($order->itemsas$item){ $merchantId=$item->goods->merchant_id; $amount=$item->price*$item->num*0.9;//90%归商户 $merchantAmounts[$merchantId]=($merchantAmounts[$merchantId]??0)+$amount; } //生成结算记录 foreach($merchantAmountsas$merchantId=>$amount){ SettlementModel::create([ 'merchant_id'=>$merchantId, 'order_id'=>$orderId, 'amount'=>$amount, 'status'=>0,//待结算 'create_time'=>time() ]); } } }
五、系统特性与优势:开源方案的核心竞争力
5.1技术先进性

基于ThinkPHP6.x与Vue3+TS开发,兼容最新技术标准,支持ES6+语法与CompositionAPI。
前后端分离架构,便于团队协作开发,前端可独立部署至CDN,提升加载速度。
5.2多用户架构设计
商户独立后台:支持商户自主管理商品、订单、营销,平台仅需负责审核与结算。
数据隔离机制:通过商户ID字段与权限中间件,确保商户只能操作自身数据。
5.3开源与可扩展性
全部代码开源,无加密限制,开发者可根据需求修改核心逻辑(如调整分账比例、新增支付方式)。
模块化设计支持插件扩展,例如可通过新增“秒杀插件”实现限时折扣功能。
5.4性能与安全
多级缓存策略:商品列表、首页数据等高频访问内容缓存至Redis,响应时间≤100ms。
安全防护:实现XSS过滤、CSRF令牌验证、接口频率限制,符合电商系统安全标准。
六、安装与部署指南:从源码到上线的全流程
6.1环境要求
后端:PHP7.4+、MySQL5.7+、Redis5.0+、Composer
前端:Node.js14+、npm6+
6.2部署步骤
1.后端部署:
bash
克隆代码
gitclonehttps://github.com/xxx/thinkphp-mall.git
cdthinkphp-mall/backend
安装依赖
composerinstall
配置环境变量(复制.env.example为.env,修改数据库信息)
cp.env.example.env
数据库迁移
phpthinkmigrate:run
启动服务
phpthinkrun
2.前端部署:
bash
cd../frontend
安装依赖
npminstall
开发环境运行
npmrundev:mp-weixin
编译为微信小程序
npmrunbuild:mp-weixin
3.生产环境配置:
后端:配置Nginx作为Web服务器,启用HTTPS,设置`APP_DEBUG=false`。
前端:将编译后的小程序代码上传至微信公众平台审核发布。
七、功能演示与效果展示
7.1用户端小程序
首页:展示推荐商品、分类导航、Banner广告,支持下拉刷新。
商品详情:包含规格选择、加入购物车、立即购买功能,支持图片预览。
订单中心:显示待支付、待发货、已完成等状态订单,支持取消订单与申请退款。
7.2商户管理端
商品管理:批量上传商品、设置库存与价格,支持SEO关键词配置。
订单处理:接收新订单通知,可手动更新物流信息。
数据统计:展示今日/本月销售额、订单量、访客数等核心指标。
7.3平台管理端
商户管理:审核商户入驻申请,设置商户佣金比例。
系统配置:管理支付方式、物流模板、首页轮播图等全局参数。
八、总结与展望:开源商城系统的未来演进
本文介绍的ThinkPHP+Vue3+TS多用户商城系统,通过全栈技术栈与模块化设计,解决了传统商城系统在多用户适配、二次开发、性能优化等方面的痛点。开源方案不仅降低了企业开发成本,更为开发者提供了学习全栈开发的实践案例。
未来,系统将进一步优化:
引入微服务架构,将订单、支付等模块拆分为独立服务,提升高并发场景下的稳定性。
集成AI推荐算法,基于用户行为分析实现商品个性化推荐。
支持多语言与多货币,适配跨境电商场景。
开源的价值在于共建与共享,欢迎开发者参与代码贡献,共同完善这套商城系统解决方案。

浙公网安备 33010602011771号