背景和需要剖析

  随着社会的在新时代下的飞跃发展,尤其是奥运会和冬奥会的胜利举办,全民健身的热潮衰亡,在平时缓和的工作,学习之余,器重身材,器重身材,器重 衰弱的需要越来越强烈,那么设计一款针对宽广静止爱好者的小程序,使静止爱好者和体育场馆之间能无效的连接,正当的布局工夫和场地,节俭单方来往老本的 需要痛点是成立的。

  好的场馆预约零碎包含场馆动静,静止常识,羽毛球场地预约,足球场地预约,篮球场地预约,健身房预约,乒乓球场地预约,游泳场地预约,网球场地预约等,能够依照业者的理论状况进行取舍或者削减场馆类型,既实用于大型综合性文体核心,也适宜单一性静止场馆(如羽毛球馆,健身房,乒乓球馆等)。

  该零碎基于MVC架构,采纳基于微信小程序平台开发,校园用户操作轻松快捷:无需下载安装APP。

性能合成

数据字典

须要克服的技术难点

本预约小程序采纳腾讯云开发技术,云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格局的对象。

一个数据库能够有多个汇合(相当于关系型数据中的表),汇合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格局是 JSON 对象。

其次要个性:

安全性:对于数据库而言,数据安全是第一位的;
易用性:与小程序的特色相似,“开箱即用,用完即走”,简略上手,免运维;
低成本:按量免费,精细化老本管制;
高性能:Nosql,反对高并发读写;
灵活性:无固定的数据库表模式(no-schema),反对弹性伸缩;
在云开发控制台有个高级操作,这里能够执行开发者输出的脚本,比方清空集合,依据某个条件删除汇合内局部数据,查问汇合等等

1. 清空操作db.collection('t_user')  .where({    _id: _.exists(true)  })  .remove()2. 删除操作db.collection('t_user')  .where({    USER_ENROLL: 1990  })  .remove()3. 查问操作db.collection('t_user')  .where({    USER_NAME: '覃建平'  })   .get()db.collection('t_user')  .where({    USER_INVITE_ID: ''  })   .field({     USER_INVITE_ID:true   })  .skip(0)  .limit(10)  .get()4. 去掉某个字段db.collection('t_user').where({_id:_.neq(1)})  .update({  data: {    USER_VIP_MONEY:_.remove(),    USER_VIP_RETURN_MONEY:_.remove(),    USER_VIP_LEAVE_MONEY:_.remove(),    }  })5 更新或者新增某个字段db.collection('t_user').where({_id:_.neq(1)})   .update({    data: {      USER_VIP_MONEY: 1111,      }  }6 简单的多条件查问    /** 获得用户分页列表 */    async getUserList(userId, {        search, // 搜寻条件        sortType, // 搜寻菜单        sortVal, // 搜寻菜单        orderBy, // 排序        whereEx, //附加查问条件         page,        size,        oldTotal = 0    }) {        orderBy = orderBy || {            USER_LOGIN_TIME: 'desc'        };        let fields = FILEDS_USER_BASE;        let where = {};        where.and = {            USER_OPEN_SET: ['>', 0],            USER_STATUS: [                ['>=', UserModel.STATUS.COMM],                ['<=', UserModel.STATUS.VIP]            ],            _pid: this.getProjectId() //简单的查问在此处标注PID        };        if (util.isDefined(search) && search) {            where.or = [{                    USER_NAME: ['like', search]                },                {                    USER_ITEM: ['like', search]                },                {                    USER_COMPANY: ['like', search]                },                {                    USER_TRADE: ['like', search]                },                {                    USER_TRADE_EX: ['like', search]                },            ];        } else if (sortType && util.isDefined(sortVal)) {            let user = {};            // 搜寻菜单            switch (sortType) {                case 'companyDef':                    // 单位性质                     where.and.USER_COMPANY_DEF = sortVal;                    break;                case 'trade':                    // 行业                     where.and.USER_TRADE = ['like', sortVal]                    break;                case 'workStatus': //工作状态                    where.and.USER_WORK_STATUS = sortVal;                    break;                case 'same_enroll': //同级                    user = await UserModel.getOne({                        USER_MINI_OPENID: userId                    });                    if (!user) break;                    where.and.USER_ENROLL = user.USER_ENROLL;                    break;                case 'same_item': //同班                    user = await UserModel.getOne({                        USER_MINI_OPENID: userId                    });                    if (!user) break;                    where.and.USER_ITEM = user.USER_ITEM;                    break;                case 'same_trade': //同行                    user = await UserModel.getOne({                        USER_MINI_OPENID: userId                    });                    if (!user) break;                    let trade = user.USER_TRADE;                    if (trade.includes('-')) trade = trade.split('-')[0];                    where.and.USER_TRADE = ['like', trade];                    break;                case 'same_city': //同城                    user = await UserModel.getOne({                        USER_MINI_OPENID: userId                    });                    if (!user) break;                    where.and.USER_CITY = user.USER_CITY;                    break;                case 'enroll': //按退学年份分类                    switch (sortVal) {                        case 1940:                            where.and.USER_ENROLL = ['<', 1950];                            break;                        case 1950:                            where.and.USER_ENROLL = [                                ['>=', 1950],                                ['<=', 1959]                            ];                            break;                        case 1960:                            where.and.USER_ENROLL = [                                ['>=', 1960],                                ['<=', 1969]                            ];                            break;                        case 1970:                            where.and.USER_ENROLL = [                                ['>=', 1970],                                ['<=', 1979]                            ];                            break;                        case 1980:                            where.and.USER_ENROLL = [                                ['>=', 1980],                                ['<=', 1989]                            ];                            break;                        case 1990:                            where.and.USER_ENROLL = [                                ['>=', 1990],                                ['<=', 1999]                            ];                            break;                        case 2000:                            where.and.USER_ENROLL = [                                ['>=', 2000],                                ['<=', 2009]                            ];                            break;                        case 2010:                            where.and.USER_ENROLL = ['>=', 2010];                            break;                    }                    break;                case 'sort':                    // 排序                    if (sortVal == 'new') { //最新                        orderBy = {                            'USER_LOGIN_TIME': 'desc'                        };                    }                    if (sortVal == 'last') { //最近                        orderBy = {                            'USER_LOGIN_TIME': 'desc',                            'USER_ADD_TIME': 'desc'                        };                    }                    if (sortVal == 'enroll') { //退学                          orderBy = {                            'USER_ENROLL': 'asc',                            'USER_LOGIN_TIME': 'desc'                        };                    }                    if (sortVal == 'info') {                        orderBy = {                            'USER_INFO_CNT': 'desc',                            'USER_LOGIN_TIME': 'desc'                        };                    }                    if (sortVal == 'album') {                        orderBy = {                            'USER_ALBUM_CNT': 'desc',                            'USER_LOGIN_TIME': 'desc'                        };                    }                    if (sortVal == 'meet') {                        orderBy = {                            'USER_MEET_CNT': 'desc',                            'USER_LOGIN_TIME': 'desc'                        };                    }                    if (sortVal == 'login_cnt') {                        orderBy = {                            'USER_LOGIN_CNT': 'desc',                            'USER_LOGIN_TIME': 'desc'                        };                    }                    break;            }        }        let result = await UserModel.getList(where, fields, orderBy, page, size, true, oldTotal, false);        return result;    }

界面设计







后盾界面设计