过去两年我帮三家美甲店做过小程序,从最初用模板套壳,到后来自己写完整的前后端,踩了不少坑。这篇文章把美甲店小程序开发的核心逻辑和关键代码整理出来,希望能帮到正在做美业工具的独立开发者。
为什么美甲店需要一个自己的小程序
很多店主一开始靠微信私聊接单,客户发图、报时间、转账,看起来也能跑。但订单一多问题就来了:
- 预约时间冲突,两个客户约了同一个美甲师
- 款式图散落在聊天记录里,找起来费劲
- 客户做完就走,没有复购提醒
- 员工排班和提成全靠手算
小程序的价值不是“有个线上入口”,而是把预约、选款、支付、会员、排班这几件事串成一条数据链。下面按模块讲。
核心功能模块拆解
1. 预约与排班
这是美甲店小程序最刚需的功能。难点不在日历 UI,而在于时段冲突检测。美甲服务时长差异很大,纯色可能 40 分钟,复杂款式要 2 小时以上,所以不能按固定格子排。
我的做法是:每个美甲师维护一条时间轴,预约时用「开始时间 + 服务时长」去判断区间是否重叠。
// 判断某美甲师在指定时段是否可约
function isSlotAvailable(existingBookings, startTime, duration) {
const endTime = startTime + duration * 60 * 1000;
return !existingBookings.some(b => {
const bStart = new Date(b.startTime).getTime();
const bEnd = bStart + b.duration * 60 * 1000;
// 区间重叠判定
return startTime < bEnd && endTime > bStart;
});
}
时间统一用时间戳存,避免时区和字符串比较的坑。前端展示时再转成本地时间。
2. 款式库与选款
美甲客户是视觉驱动的,款式图必须高清、可分类(纯色、法式、猫眼、手绘等),还要支持收藏。这里建议图片走 CDN,不要塞进小程序包体,否则主包轻松超 2MB。
款式数据表设计大致是:
- id、标题、封面图、多图数组
- 分类标签、参考价格、预计时长
- 关联美甲师(有些款只有特定师傅会做)
选款后直接把款式 id 带进预约流程,美甲师端就能提前看到客户想要什么,准备材料和工具。
3. 会员与储值
美甲是高复购生意,储值卡是锁客利器。小程序里做储值要注意两点:一是余额变动必须有流水记录,二是涉及资金的接口要放在服务端,前端只做展示。
// 储值扣款(服务端伪代码)
async function deductBalance(userId, amount, orderId) {
const user = await db.getUser(userId);
if (user.balance < amount) throw new Error('余额不足');
await db.transaction(async trx => {
await trx.updateUserBalance(userId, -amount);
await trx.insertBalanceLog({ userId, amount: -amount, orderId });
});
}
用数据库事务保证扣款和流水同时成功,否则对账时会很痛苦。
技术选型建议
- 前端:原生小程序或 uni-app。如果只做微信端,原生性能更好;想兼顾抖音、支付宝,选 uni-app。
- 后端:Node.js + MySQL 足够,小团队别上微服务。云开发也能快速起步,但复杂查询和事务能力有限。
- 登录:直接用微信手机号快捷登录,减少注册流失。
- 消息通知:预约成功、到店前 1 小时提醒,用订阅消息实现。
开发中最容易忽略的三个坑
取消与改约规则
客户临时取消是常态。一定要在预约时明确规则,比如「提前 4 小时可免费取消,否则扣一次违约」。规则写进代码,而不是靠店员口头说。
美甲师端和客户端要分开
很多开发者把两端塞进同一个小程序用角色区分,结果权限逻辑越写越乱。建议美甲师端单独做,或者至少用独立页面栈和接口鉴权。
数据备份
客户的款式偏好、过敏信息、储值余额都是资产。数据库定时备份,别等出事才后悔。
上线后的运营小技巧
小程序做完只是开始。可以加一个「做完晒图返积分」的入口,客户上传成品图,既做了内容沉淀,又给店铺带来自然传播。另外,把复购提醒做成自动化:距离上次到店 25 天,自动推送一张优惠券,转化率比群发高得多。
美甲店小程序不难,难的是把业务规则想清楚再动手写代码。先把预约冲突、储值流水这两块做扎实,剩下的都是锦上添花。
评论 (0)
还没有评论,快来抢沙发吧~