从 0 到 100:小区物业报修小程序开发笔记
 作者:CC同学
- 2023-05-04  广东
 本文字数:2257 字
阅读完需:约 7 分钟
背景
原本遇到需要维修问题时,业主需要先拨通物业客服电话,告知维修事项,再由客服分配维修员上门维修。如今,维修人员可在小程序上第一时间收知业主反馈的信息,实现报修、接单的无缝对接,省去了原有物业客服接单、派单的繁复流程。
功能模块
小程序分为“服务分类”、“报事报修”、“物业通知”、“我的工单”四个板块。 业主可以通过“报事报修”进行线上报修,物业方则可在“管理后台”上接单、分配内部工作等,极大地缩短为楼宇、居民区业主服务的中间环节,提高上门服务的响应速度和及时率 。 本项目前后端完整代码包括公告通知,报修记录,我的工单,物业通知,后台报修管理与处置,报修记录导出,后台用户管理,后台报修记录导出等功能
 数据字段设计
TaskModel.DB_STRUCTURE = {	_pid: 'string|true',	TASK_ID: 'string|true',	TASK_USER_ID: 'string|true|comment=用户ID', 
	TASK_STATUS: 'int|true|default=0|comment=状态 0=待处理,1=处理中 9=已办结',
	TASK_FORMS: 'array|true|default=[]',	TASK_OBJ: 'object|true|default={}',
	TASK_LAST_TIME: 'int|true|default=0',
	TASK_ADD_TIME: 'int|true',	TASK_EDIT_TIME: 'int|true',	TASK_ADD_IP: 'string|false',	TASK_EDIT_IP: 'string|false',};UserModel.DB_STRUCTURE = {	_pid: 'string|true',	USER_ID: 'string|true',
	USER_MINI_OPENID: 'string|true|comment=小程序openid',	USER_STATUS: 'int|true|default=1|comment=状态 0=待审核,1=正常,8=审核未过,9=禁用',	USER_CHECK_REASON: 'string|false|comment=审核未过的理由',
	USER_NAME: 'string|false|comment=用户昵称',	USER_MOBILE: 'string|false|comment=联系电话',
	USER_FORMS: 'array|true|default=[]',	USER_OBJ: 'object|true|default={}',
	USER_LOGIN_CNT: 'int|true|default=0|comment=登陆次数',	USER_LOGIN_TIME: 'int|false|comment=最近登录时间',
	USER_ADD_TIME: 'int|true',	USER_ADD_IP: 'string|false',
	USER_EDIT_TIME: 'int|true',	USER_EDIT_IP: 'string|false',}
复制代码
 核心实现
async getTaskCountByType(userId) {		let status0Cnt = await TaskModel.count({ TASK_STATUS: 0, TASK_USER_ID: userId });		let status1Cnt = await TaskModel.count({ TASK_STATUS: 1, TASK_USER_ID: userId });		let status2Cnt = await TaskModel.count({ TASK_STATUS: 2, TASK_USER_ID: userId });		let task = {			status0Cnt,			status1Cnt,			status2Cnt		}		return task;	}
	async getTaskDetail(userId, id, isAdmin = false) {		let where = {			_id: id		}		if (!isAdmin) where.TASK_USER_ID = userId;		return await TaskModel.getOne(where);	}
	/**添加 */	async insertTask(userId, {		forms	}) {
		// 赋值 		let data = {};		data.TASK_USER_ID = userId;
		data.TASK_OBJ = dataUtil.dbForms2Obj(forms);		data.TASK_FORMS = forms;
		let id = await TaskModel.insert(data);
		return {			id		};	}
	/**修改 */	async editTask(userId, {		id,		forms	}) {		// 异步处理 新旧文件		let oldForms = await TaskModel.getOneField(id, 'TASK_FORMS');		if (!oldForms) return;		cloudUtil.handlerCloudFilesForForms(oldForms, forms);
		// 赋值 		let data = {};		data.TASK_USER_ID = userId;		data.TASK_OBJ = dataUtil.dbForms2Obj(forms);		data.TASK_FORMS = forms;
		await TaskModel.edit(id, data);	}
	// 更新forms信息	async updateTaskForms({		id,		hasImageForms	}) {		await TaskModel.editForms(id, 'TASK_FORMS', 'TASK_OBJ', hasImageForms);	}
	/**删除数据 */	async delTask(userId, id, isAdmin) {		let where = {			_id: id		}		if (!isAdmin) where.TASK_USER_ID = userId;
		// 异步处理 新旧文件		let task = await TaskModel.getOne(id, 'TASK_FORMS');		if (!task) return;		cloudUtil.handlerCloudFilesForForms(task.TASK_FORMS, []);
		await TaskModel.del(where);
	}
	/** 取得我的 */	async getMyTaskList(userId, {		search, // 搜索条件		sortType, // 搜索菜单		sortVal, // 搜索菜单		orderBy, // 排序 		page,		size,		isTotal = true,		oldTotal	}) {		orderBy = orderBy || {			'TASK_ADD_TIME': 'desc'		};		let fields = '*';
		let where = {};		where.and = {			_pid: this.getProjectId(), //复杂的查询在此处标注PID 			TASK_USER_ID: userId		};
		if (util.isDefined(search) && search) {			where.or = [{ ['TASK_OBJ.title']: ['like', search] }];		} else if (sortType && sortVal !== '') {			// 搜索菜单			switch (sortType) {				case 'level': {					where.and['TASK_OBJ.level'] = sortVal;					break;				}				case 'type': {					where.and['TASK_OBJ.type'] = sortVal;					break;				}				case 'status': {					where.and.TASK_STATUS = Number(sortVal);					break;				}				case 'sort': {					orderBy = this.fmtOrderBySort(sortVal, 'TASK_ADD_TIME');					break;				}			}		}		let result = await TaskModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);
		return result;	}
复制代码
 业主端 UI
 
 
 
 
 
 
 物业端 UI
 
 
 
 源码
划线
评论
复制
发布于: 刚刚阅读数: 3
CC同学
关注
CC同学的小程序开发笔记 2021-06-13 加入
大鹅厂的小小程序媛,vx: cclinux0730










    
评论