UNPKG

react-app-shell

Version:

react打包脚本和example, 这里的版本请忽略

110 lines (96 loc) 3.08 kB
import {observable, action} from 'mobx'; import _ from 'lodash'; import {ACTIVITY_STATUS} from '../constants'; import {welfareService} from '../service'; import {message, monitor} from '../utils'; /** * 活动状态管理 */ class WelfareStore { @observable state = { loading: false, id: '', // 活动id serverTime: new Date().getTime(), // 服务器时间 activityStatus: ACTIVITY_STATUS.UNKNOWN, // 活动状态:未知、未开始、活动中、已结束 serviceError: false, // 接口是否发生异常或者超时 }; /** * 活动详情信息 * @type {{}} */ @observable activityDetail = {}; /** * 预约成员信息, 服务端返回memberData可能为空 * @type {{}} */ @observable memberData = {}; /** * 加载活动数据 * @param id * @returns {Promise<void>} */ @action loadData = async (id) => { if (!id) { return; } // 活动状态:未知、未开始、活动中、已结束 let activityStatus = ACTIVITY_STATUS.UNKNOWN; try { const [activityDetail, memberData] = await Promise.all([welfareService.getActivityDetail(id), welfareService.getMemberData(id)]); // 判断活动状态 const {startTime, endTime, nowTime} = activityDetail; if (startTime && endTime) { if (nowTime < startTime) { // 活动未开始 activityStatus = ACTIVITY_STATUS.NOT_BEGIN; } // 在活动时间内 else if (nowTime >= startTime && nowTime < endTime) { // 活动进行中 activityStatus = ACTIVITY_STATUS.ACTIVE; } else { // 活动已结束 activityStatus = ACTIVITY_STATUS.END; } } activityDetail.activityStatus = activityStatus; this.state = { loading: false, id, activityStatus, serviceError: false }; this.activityDetail = activityDetail || {}; this.memberData = memberData || {}; } catch (error) { this.state = { loading: false, id, activityStatus, serviceError: true, }; this.memberData = {}; monitor.log('', '获取活动列表失败'); message.error(error && error.msg || '获取活动信息失败'); } } /** * 对象转数组 key value 并且排序 * @param {*} obj */ objectToArray(obj) { let arrs = []; _.mapKeys(obj, (value, key) => { arrs.push({ key: parseInt(key, 10), value: value }); }); _.sortBy(arrs, (o) => { return o.key; }); return arrs; } } export default new WelfareStore();