洗车小程序系统ThinkPHP+UniApp

84 阅读5分钟

2.png

3.png

4.png

5.png

洗车小程序系统开发实战:基于ThinkPHP + UniApp的全栈解决方案

随着移动互联网的深度渗透和用户对便捷服务需求的日益增长,传统洗车行业正加速向数字化、智能化转型。一个功能完善、体验流畅的洗车小程序系统,不仅能提升门店运营效率,还能显著增强客户粘性与品牌竞争力。

本文将详细介绍如何利用 ThinkPHP(后端) + UniApp(前端) 这一高效技术组合,构建一套支持多端发布、功能完备的洗车预约小程序系统,涵盖技术选型、架构设计、核心功能实现与部署上线全流程。


一、为什么选择 ThinkPHP + UniApp?

✅ ThinkPHP(后端优势)

  • 国产成熟框架:语法简洁,文档丰富,社区活跃,适合国内开发者快速上手。
  • 高性能稳定:基于PHP,运行效率高,支持高并发访问。
  • RESTful支持:轻松构建API接口,便于前后端分离。
  • 生态完善:集成数据库操作、缓存、日志、验证等模块,开发效率高。

✅ UniApp(前端优势)

  • 一次开发,多端发布:同一套代码可编译为微信小程序、H5、App(iOS/Android),极大降低开发与维护成本。
  • 基于Vue语法:学习成本低,组件化开发,生态丰富(uView、ColorUI等UI库)。
  • 原生能力调用:无缝调用扫码、定位、支付、蓝牙等手机原生功能。

组合优势:ThinkPHP 提供稳定可靠的后端服务,UniApp 实现跨平台前端体验,二者结合是中小型洗车项目开发的“黄金搭档”。


二、系统整体架构设计

+------------------+       +---------------------+
|   UniApp 前端     | <---> |   ThinkPHP 后端 API  |
| (小程序/H5/App)  | HTTP  | (RESTful 接口)       |
+------------------+       +----------+----------+
                                       |
                                +------v-------+
                                |   MySQL 数据库  |
                                +------+-------+
                                       |
                                +------v-------+
                                |   管理后台系统    |
                                | (ThinkPHP Admin)|
                                +--------------+
  • 前端:UniApp 负责用户交互、页面展示、数据请求。
  • 后端:ThinkPHP 提供用户管理、预约、支付、订单等API接口。
  • 数据库:MySQL 存储用户、门店、服务、订单等核心数据。
  • 后台:基于ThinkPHP开发的PC端管理平台,用于运营管控。

三、核心功能模块设计

1. 用户端(UniApp 小程序)

功能模块说明
首页轮播图、推荐服务、附近门店(地图定位)、优惠活动
服务预约选择门店 → 选择服务(普洗、精洗、打蜡等) → 选择时间 → 提交订单
在线支付集成微信支付,支持定金或全额支付
订单管理查看“待服务”、“已完成”、“已取消”订单,支持取消与评价
会员中心用户信息、积分、优惠券、消费记录、发票申请

2. 商家后台(ThinkPHP Admin)

功能模块说明
门店管理添加/编辑门店信息、设置营业时间、上传图片
服务项目创建洗车套餐,设置价格、时长、技师要求
预约排班查看每日预约情况,支持手动调整技师排班
订单管理实时监控订单状态,支持核销、退款
会员管理发放优惠券、设置积分规则、会员等级
数据统计日/周/月订单量、收入报表、热门服务分析

四、关键技术实现(含代码示例)

1. 后端API:用户登录与JWT认证(ThinkPHP 6)

// application/api/controller/User.php
<?php
namespace app\api\controller;

use think\Controller;
use app\common\model\User;
use Firebase\JWT\JWT;

class User extends Controller 
{
    // 微信登录
    public function login() 
    {
        $code = input('post.code');
        
        // 调用微信接口获取 openid
        $appid = 'your_appid';
        $secret = 'your_secret';
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
        
        $res = file_get_contents($url);
        $data = json_decode($res, true);
        
        $openid = $data['openid'];
        
        // 查找或创建用户
        $user = User::where('openid', $openid)->find();
        if (!$user) {
            $user = User::create(['openid' => $openid, 'nickname' => '用户' . rand(1000,9999)]);
        }
        
        // 生成JWT token
        $key = "your_jwt_secret_key";
        $payload = [
            'uid' => $user->id,
            'exp' => time() + 86400 // 有效期24小时
        ];
        $token = JWT::encode($payload, $key, 'HS256');
        
        return json([
            'code' => 200,
            'msg' => '登录成功',
            'data' => [
                'token' => $token,
                'user' => $user
            ]
        ]);
    }
}

2. 前端请求封装(UniApp)

// utils/request.js
const BASE_URL = 'https://api.yourdomain.com';

uni.$http = (options) => {
    const token = uni.getStorageSync('token');
    
    return uni.request({
        url: BASE_URL + options.url,
        method: options.method || 'GET',
        data: options.data || {},
        header: {
            'Content-Type': 'application/json',
            'Authorization': token ? 'Bearer ' + token : ''
        }
    });
};

// 使用示例
uni.$http({
    url: '/api/user/info',
    method: 'GET'
}).then(res => {
    console.log(res.data);
});

3. 预约下单接口(ThinkPHP)

// application/api/controller/Order.php
public function create() 
{
    $param = input('post.');
    $userId = $this->auth->user_id; // 从JWT获取
    
    $order = new Order();
    $order->user_id = $userId;
    $order->service_id = $param['service_id'];
    $order->store_id = $param['store_id'];
    $order->order_time = $param['order_time'];
    $order->total_price = $param['total_price'];
    $order->status = 'unpaid';
    $order->order_no = 'W' . date('YmdHis') . rand(1000,9999);
    
    if ($order->save()) {
        return json(['code' => 200, 'msg' => '预约成功', 'order_id' => $order->id]);
    } else {
        return json(['code' => 500, 'msg' => '创建失败']);
    }
}

五、数据库设计(关键表)

-- 用户表
CREATE TABLE `users` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `openid` varchar(100) UNIQUE NOT NULL,
  `nickname` varchar(50),
  `phone` varchar(15),
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP
);

-- 门店表
CREATE TABLE `stores` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(100) NOT NULL,
  `address` varchar(200),
  `lat` decimal(10,7),
  `lng` decimal(10,7),
  `phone` varchar(15),
  `status` tinyint(1) DEFAULT 1
);

-- 服务项目表
CREATE TABLE `services` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(50),
  `price` decimal(6,2),
  `duration` int(11) COMMENT '服务时长(分钟)'
);

-- 订单表
CREATE TABLE `orders` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `user_id` int(11) NOT NULL,
  `store_id` int(11) NOT NULL,
  `service_id` int(11) NOT NULL,
  `order_no` varchar(30) UNIQUE,
  `order_time` datetime,
  `status` enum('unpaid','paid','completed','cancelled'),
  `total_price` decimal(6,2),
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP
);

六、部署与上线流程

  1. 服务器准备:Linux(CentOS/Ubuntu),安装PHP 7.4+、MySQL、Nginx。
  2. 后端部署
    • 上传ThinkPHP项目到服务器
    • 配置虚拟主机,指向 public 目录
    • 导入数据库SQL
  3. 前端编译
    • 使用HBuilderX打开UniApp项目
    • 修改API地址为线上域名
    • 编译为微信小程序并上传
  4. 微信配置
    • 在公众平台配置服务器域名
    • 设置支付商户号与API密钥

七、系统优势总结

优势说明
开发效率高前后端技术成熟,组件丰富,快速迭代
多端兼容一套代码,覆盖小程序、H5、App
易于维护前后端分离,模块清晰,便于团队协作
可扩展性强支持接入自助设备、会员卡、营销活动等

八、结语

通过 ThinkPHP + UniApp 的技术组合,开发者可以高效构建一个功能完整、性能稳定、易于扩展的洗车小程序系统。无论是单店运营还是连锁品牌,该方案都能提供强有力的数字化支撑。

未来,可进一步集成物联网设备(如自助洗车机)、AI识别(车牌自动匹配)、大数据分析等能力,打造真正的“智慧洗车”生态平台。

提示:如需获取完整源码或定制开发服务,可联系专业团队或在开源平台(如Gitee)搜索“洗车小程序 thinkphp uniapp”获取参考项目。