从0到1:可自定义数据列的成绩查询小程序开发笔记
发布于 2 年前 作者 gangxiao 3839 次浏览 来自 分享

背景

成绩发布与查询小程序作为成绩管理的一个工具,用户可以通过小程序随时按条件(可自定义)查询各科成绩(可自定义)。另外,成绩查询小程序还提供新闻资讯,用户可以及时了解学校各种活动,以免错过重大通知。校方或者老师可以在后台登录系统,录入考生的成绩信息,并可以自定义多个考试科目,自定义查询条件,支持多个查询条件组合等。

主要功能规划

项目立项规划了如下功能:通知公告,成绩列表,多条件成绩查询,成绩分享,后台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设计








回到顶部