乐趣区

关于小程序:从0到1可自定义数据列的成绩查询小程序开发笔记

背景

问题公布与查问小程序作为问题治理的一个工具,用户能够通过小程序随时按条件(可自定义)查问各科问题(可自定义)。另外,问题查问小程序还提供新闻资讯,用户能够及时理解学校各种流动,免得错过重大告诉。校方或者老师能够在后盾登录零碎,录入考生的问题信息,并能够自定义多个考试科目,自定义查问条件,反对多个查问条件组合等。

次要性能布局

我的项目立项布局了如下性能:告诉布告,问题列表,多条件问题查问,问题分享,后盾 Excel 批量录入问题,后盾批量导出问题,后盾自定义问题科目,后盾自定义查问条件等性能。

数据库设计

SheetModel.DB_STRUCTURE = {
    _pid: 'string|true',
    SHEET_ID: 'string|true',

    SHEET_TITLE: 'string|true|comment= 题目',
    SHEET_STATUS: 'int|true|default=1|comment= 状态 0= 未启用,1= 应用中',

    SHEET_CATE_ID: 'string|true|default=0|comment= 分类',
    SHEET_CATE_NAME: 'string|false|comment= 分类冗余',

    SHEET_ORDER: 'int|true|default=9999',
    SHEET_VOUCH: 'int|true|default=0',

    SHEET_FORMS: 'array|true|default=[]',
    SHEET_OBJ: 'object|true|default={}',
 
    SHEET_QR: 'string|false',
    SHEET_VIEW_CNT: 'int|true|default=0',
    SHEET_DATA_CNT: 'int|true|default=0',

    SHEET_ADD_TIME: 'int|true',
    SHEET_EDIT_TIME: 'int|true',
    SHEET_ADD_IP: 'string|false',
    SHEET_EDIT_IP: 'string|false',
};
SheetDataModel.DB_STRUCTURE = {
    _pid: 'string|true',
    SHEET_DATA_ID: 'string|true',
    SHEET_DATA_SHEET_ID: 'string|true|comment=FK',
    SHEET_DATA_SHEET_TITLE: 'string|false',

    SHEET_DATA_FORMS: 'array|true|default=[]', 

    SHEET_DATA_ADD_TIME: 'int|true',
    SHEET_DATA_EDIT_TIME: 'int|true',
    SHEET_DATA_ADD_IP: 'string|false',
    SHEET_DATA_EDIT_IP: 'string|false',
};

外围实现

/** 浏览信息 */
    async viewSheet(id) {

        let fields = '*';

        let where = {
            _id: id,
            SHEET_STATUS: SheetModel.STATUS.COMM
        }
        let sheet = await SheetModel.getOne(where, fields);
        if (!sheet) return null;

        SheetModel.inc(id, 'SHEET_VIEW_CNT', 1);



        return sheet;
    }


    /** 获得分页列表 */
    async getSheetList({
        cateId, // 分类查问条件
        search, // 搜寻条件
        sortType, // 搜寻菜单
        sortVal, // 搜寻菜单
        orderBy, // 排序 
        page,
        size,
        isTotal = true,
        oldTotal
    }) {

        orderBy = orderBy || {
            'SHEET_ORDER': 'asc',
            'SHEET_ADD_TIME': 'desc'
        };
        let fields = 'SHEET_QR,SHEET_ADD_TIME,SHEET_OBJ,SHEET_VIEW_CNT,SHEET_TITLE,SHEET_ORDER,SHEET_STATUS,SHEET_CATE_NAME';

        let where = {};
        where.and = {_pid: this.getProjectId() // 简单的查问在此处标注 PID
        }; 
        if (cateId && cateId !== '0') where.and.SHEET_CATE_ID = cateId;

        where.and.SHEET_STATUS = SheetModel.STATUS.COMM; // 状态   

        if (util.isDefined(search) && search) {
            where.or = [{SHEET_TITLE: ['like', search]
            },];
        } else if (sortType && util.isDefined(sortVal)) {
            // 搜寻菜单
            switch (sortType) {
                case 'cateId': {if (sortVal) where.and.SHEET_CATE_ID = String(sortVal);
                    break;
                }
                case 'sort': {orderBy = this.fmtOrderBySort(sortVal, 'SHEET_ADD_TIME');
                    break;
                }

            }
        } 
        return await SheetModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);
    }

用户端 UI 设计

治理端 UI 设计

源码

git 源码地址

退出移动版