背景

随着机动车逐步走进寻常百姓家中,学车也随之被人们提上了日程,这使得汽车驾驶培训行业失去迅猛发展。挪动互联网技术的广泛应用,使手机约车成为可能,如何正当地调配已有资源,进步资源利用率,加强驾校服务水平,己成为驾校越来越迫切的需要。驾校学车预约小程序使预约者只需拿起手机,就能够线上约车,能够做到“足不出户选教练”,这样可能无效缩小学习者的等待时间,从而为学员提供更优质的服务。 本零碎蕴含学员端,教练端,治理端三方,不前后端残缺,包含布告,驾校教练预约,科目培训预约,后盾治理,用户治理,预约名单治理,预约记录治理与导出,我的预约,历史浏览,我的珍藏等模块,采纳腾讯提供的小程序云开发解决方案,毋庸服务器和域名。

概要设计

本我的项目分为学员端,驾校教练端,后盾端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

代码