1. 项目背景与核心需求
家政服务行业近年来呈现爆发式增长,万师傅等头部平台的成功验证了"互联网+家政"模式的可行性。这类平台通常需要同时覆盖用户端(小程序)和服务者端(APP),而uniapp的跨端特性恰好能解决多端开发成本高的问题。
我最近用Java+uniapp完整实现了一套家政平台系统,包含用户下单、服务者接单、支付结算等核心功能模块。这套方案最大的优势在于:
- 后端采用SpringBoot+MyBatis主流架构
- 前端使用uniapp实现"一次开发,多端发布"
- 完全开源可商用,已通过GPL-3.0协议开源
2. 技术架构设计
2.1 整体架构图
code复制[用户端]
uniapp -> 微信小程序/支付宝小程序/H5
[服务端]
SpringBoot 2.7.x
MySQL 8.0
Redis 6.2
RabbitMQ 3.9
[管理端]
Vue Element Admin
2.2 关键技术选型
-
跨端方案:选用uniapp而非Taro,主要考虑:
- 更完善的小程序组件支持
- 更活跃的插件市场
- 实测打包体积比Taro小30%
-
状态管理:采用uniapp原生vuex+持久化方案
javascript复制// store/index.js import Vuex from 'vuex' import createPersistedState from 'vuex-persistedstate' const store = new Vuex.Store({ plugins: [createPersistedState({ storage: uniStorage })] }) -
UI框架:使用uView UI 3.0
特别注意:需在manifest.json中配置easycom规则,避免主包过大
json复制"easycom": { "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue" }
3. 核心功能实现
3.1 服务展示与筛选
vue复制<template>
<u-waterfall v-model="serviceList">
<template v-slot:left="{item}">
<service-card :data="item" @click="toDetail"/>
</template>
</u-waterfall>
<u-filter
:list="filterData"
@change="handleFilterChange"
/>
</template>
关键点:
- 采用虚拟列表优化长列表渲染
- 筛选条件使用本地缓存+服务端校验双重机制
- 价格区间筛选需特殊处理精度问题
3.2 订单状态机设计
java复制// OrderStateMachine.java
public enum OrderState {
PENDING_PAYMENT(1),
WAITING_SERVICE(2),
IN_PROGRESS(3),
COMPLETED(4),
CANCELLED(5);
@JsonValue
private final int code;
// 状态转换校验逻辑
public boolean canTransferTo(OrderState target) {
// 具体校验规则...
}
}
3.3 支付模块实现
支付流程特别注意:
- 微信小程序支付需配置合法域名
- 支付宝沙箱环境与正式环境证书不同
- 建议采用支付中台模式统一处理各平台差异
4. 性能优化实践
4.1 图片加载优化
vue复制<u-image
:src="imgUrl"
mode="aspectFill"
lazy-load
:webp="true"
@error="handleImageError"
/>
4.2 接口缓存策略
java复制@Cacheable(value = "serviceList",
key = "#root.methodName + '_' + #params.hashCode()",
unless = "#result == null")
public PageResult<ServiceVO> queryServiceList(QueryParams params) {
// DB查询逻辑
}
4.3 小程序分包方案
code复制├── pages
│ ├── index
│ ├── detail
├── subpackages
│ ├── order
│ ├── user
配置manifest.json:
json复制"optimization": {
"subPackages": true
}
5. 常见问题解决方案
-
uniapp编译白屏
- 检查vue文件是否包含template/script/style三部分
- 排查static目录下是否存在非法命名的静态资源
-
微信登录失败
javascript复制uni.login({ provider: 'weixin', success: (res) => { // 注意:需用code换openid }, fail: (err) => { console.error('登录失败:', err) } }) -
H5端跨域问题
javascript复制// manifest.json "h5": { "devServer": { "proxy": { "/api": { "target": "http://your.domain.com", "changeOrigin": true } } } }
6. 项目部署指南
6.1 后端部署
bash复制# 打包
mvn clean package -DskipTests
# 运行
java -jar target/homemaid-1.0.0.jar \
--spring.profiles.active=prod \
--server.port=8080
6.2 小程序发布
- 修改manifest.json中的appid
- 执行
npm run build:mp-weixin - 用微信开发者工具导入dist目录
7. 扩展建议
- 消息推送:集成uniPush实现多端统一推送
- 智能调度:引入GIS算法优化服务者匹配
- 数据统计:接入uni统计分析用户行为
这套方案已在GitHub开源(搜索"homemaid-uniapp"),包含完整的前后端代码和部署文档。实际开发中遇到的两个典型坑点:
- 微信小程序真机调试时,务必关闭"不校验合法域名"选项
- uView组件按需引入时,注意组件名大小写问题
