ThinkPHP商城小程序源码| 多用户开源系统代码 |Vue3+TS全栈开发下载

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

1

二、核心技术栈解析:为什么选择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}`接收,确保数据一致性。
三、系统架构设计:多用户商城的分层实现逻辑

2

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模型的权限隔离

3

多用户系统的核心是“平台管理员-商户-普通用户”三级权限隔离,实现逻辑如下:
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技术先进性

4

基于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推荐算法,基于用户行为分析实现商品个性化推荐。
支持多语言与多货币,适配跨境电商场景。
开源的价值在于共建与共享,欢迎开发者参与代码贡献,共同完善这套商城系统解决方案。

posted @ 2025-08-20 09:42  zerobeauty  阅读(168)  评论(0)    收藏  举报