共计 2827 个字符,预计需要花费 8 分钟才能阅读完成。
背景
随着机动车逐步走进寻常百姓家中, 学车也随之被人们提上了日程, 这使得汽车驾驶培训行业失去迅猛发展。挪动互联网技术的广泛应用, 使手机约车成为可能, 如何正当地调配已有资源, 进步资源利用率, 加强驾校服务水平, 己成为驾校越来越迫切的需要。驾校学车预约小程序使预约者只需拿起手机, 就能够线上约车, 能够做到“足不出户选教练”, 这样可能无效缩小学习者的等待时间, 从而为学员提供更优质的服务。本零碎蕴含学员端,教练端,治理端三方,不前后端残缺,包含布告,驾校教练预约,科目培训预约,后盾治理,用户治理,预约名单治理,预约记录治理与导出,我的预约,历史浏览,我的珍藏等模块,采纳腾讯提供的小程序云开发解决方案,毋庸服务器和域名。
概要设计
本我的项目分为学员端,驾校教练端,后盾端 3 个组成部分:
- 后盾端:能够增加和设定教练的根本信息,账号,登陆密码等。
- 驾校教练端:能够编辑本人的个人资料(头像,简介,星级等),设定预约时段排期(可预约时段,各时段人数限定),在现场核销用户的预约码。
- 学员端:抉择本人须要的教练和时段,下单预约,预约胜利后到健身房出示预约码给教练或者工作人员核销
数据库设计
MeetModel.DB_STRUCTURE = {
_pid: 'string|true',
MEET_ID: 'string|true',
MEET_ADMIN_ID: 'string|true|comment= 增加的管理员',
MEET_TITLE: 'string|true|comment= 题目',
MEET_JOIN_FORMS: 'array|true|default=[]|comment= 表单字段设置',
MEET_DAYS: 'array|true|default=[]|comment= 最近一次批改保留的可用日期',
MEET_CATE_ID: 'string|true|comment= 分类编号',
MEET_CATE_NAME: 'string|true|comment= 分类冗余',
MEET_FORMS: 'array|true|default=[]',
MEET_OBJ: 'object|true|default={}',
MEET_CANCEL_SET: 'int|true|default=1|comment= 勾销设置 0= 不允,1= 容许,2= 仅开始前可勾销',
MEET_STATUS: 'int|true|default=1|comment= 状态 0= 未启用,1= 应用中,9= 进行预约,10= 已敞开',
MEET_ORDER: 'int|true|default=9999',
MEET_VOUCH: 'int|true|default=0',
MEET_QR: 'string|false',
MEET_PHONE: 'string|false|comment= 登录手机',
MEET_PASSWORD: 'string|false|comment= 登录明码',
MEET_TOKEN: 'string|false|comment= 以后登录 token',
MEET_TOKEN_TIME: 'int|true|default=0|comment= 以后登录 token time',
MEET_MINI_OPENID: 'string|false|comment= 小程序 openid',
MEET_LOGIN_CNT: 'int|true|default=0|comment= 登陆次数',
MEET_LOGIN_TIME: 'int|false|comment= 最近登录工夫',
MEET_ADD_TIME: 'int|true',
MEET_EDIT_TIME: 'int|true',
MEET_ADD_IP: 'string|false',
MEET_EDIT_IP: 'string|false',
};
技术使用
- 本我的项目应用微信小程序平台进行开发。
- 应用腾讯专门的小程序云开发技术,云资源蕴含云函数,数据库,带宽,存储空间,定时器等,资源配额价格低廉,无需域名和服务器即可搭建。
- 小程序自身的即用即走,适宜小工具的应用场景,也适宜疾速开发迭代。
- 云开发技术采纳腾讯外部链路,没有被黑客攻击的危险,不会 DDOS 攻打,节俭防火墙费用,安全性高且免保护。
- 资源承载力可依据业务倒退须要随时弹性扩大
难点实现
/** 获取日期设置 */
async getDaysSet(meetId, startDay, endDay = null) {
let where = {DAY_MEET_ID: meetId}
if (startDay && endDay && endDay == startDay)
where.day = startDay;
else if (startDay && endDay)
where.day = ['between', startDay, endDay];
else if (!startDay && endDay)
where.day = ['<=', endDay];
else if (startDay && !endDay)
where.day = ['>=', startDay];
let orderBy = {'day': 'asc'}
let list = await DayModel.getAllBig(where, 'day,dayDesc,times', orderBy, 1000);
for (let k = 0; k < list.length; k++) {delete list[k]._id;
}
return list;
}
// 按时段统计某时段报名状况
async statJoinCnt(meetId, timeMark) {
let whereDay = {
DAY_MEET_ID: meetId,
day: this.getDayByTimeMark(timeMark)
};
let day = await DayModel.getOne(whereDay, 'times');
if (!day) return;
let whereJoin = {
JOIN_MEET_TIME_MARK: timeMark,
JOIN_MEET_ID: meetId
};
let ret = await JoinModel.groupCount(whereJoin, 'JOIN_STATUS');
let stat = { // 统计数据
succCnt: ret['JOIN_STATUS_1'] || 0, //1= 预约胜利,
cancelCnt: ret['JOIN_STATUS_10'] || 0, //10= 已勾销,
adminCancelCnt: ret['JOIN_STATUS_99'] || 0, //99= 后盾勾销
};
let times = day.times;
for (let j in times) {if (times[j].mark === timeMark) {
let data = {['times.' + j + '.stat']: stat
}
await DayModel.edit(whereDay, data);
return;
}
}
}
学员端 UI 设计
教练端 UI 设计
后盾治理 UI 设计
git
代码
正文完