共计 3875 个字符,预计需要花费 10 分钟才能阅读完成。
背景和需要剖析
随着社会的在新时代下的飞跃发展,尤其是奥运会和冬奥会的胜利举办,全民健身的热潮衰亡,在平时缓和的工作,学习之余,器重身材,器重身材,器重 衰弱的需要越来越强烈,那么设计一款针对宽广静止爱好者的小程序,使静止爱好者和体育场馆之间能无效的连接,正当的布局工夫和场地,节俭单方来往老本的 需要痛点是成立的。
好的场馆预约零碎包含场馆动静,静止常识,羽毛球场地预约,足球场地预约,篮球场地预约,健身房预约,乒乓球场地预约,游泳场地预约,网球场地预约等,能够依照业者的理论状况进行取舍或者削减场馆类型,既实用于大型综合性文体核心,也适宜单一性静止场馆(如羽毛球馆,健身房,乒乓球馆等)。
该零碎基于 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;
}
界面设计
后盾界面设计
正文完