IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 基于微信小程序的运动场馆预约小程序开发笔记 -> 正文阅读

[移动开发]基于微信小程序的运动场馆预约小程序开发笔记

背景和需求分析

随着社会的在新时代下的飞跃发展,尤其是奥运会和冬奥会的成功举办,全民健身的热潮兴起,在平时紧张的工作,学习之余,重视身体,重视身材,重视 健康的需求越来越强烈,那么设计一款针对广大运动爱好者的小程序,使运动爱好者和体育场馆之间能有效的衔接,合理的规划时间和场地,节省双方来往成本的 需求痛点是成立的。

好的场馆预约系统包括场馆动态,运动常识,羽毛球场地预约,足球场地预约,篮球场地预约,健身房预约,乒乓球场地预约,游泳场地预约,网球场地预约等,可以按照业者的实际情况进行取舍或者增添场馆类型,既适用于大型综合性文体中心,也适合单一性运动场馆(如羽毛球馆,健身房,乒乓球馆等)。

该系统基于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;
    }

界面设计 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后台界面设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Git开源代码

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:41:49  更:2022-03-15 22:44:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:58:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码