react-app-shell
Version:
react打包脚本和example, 这里的版本请忽略
110 lines (96 loc) • 3.08 kB
JavaScript
import {observable, action} from 'mobx';
import _ from 'lodash';
import {ACTIVITY_STATUS} from '../constants';
import {welfareService} from '../service';
import {message, monitor} from '../utils';
/**
* 活动状态管理
*/
class WelfareStore {
state = {
loading: false,
id: '', // 活动id
serverTime: new Date().getTime(), // 服务器时间
activityStatus: ACTIVITY_STATUS.UNKNOWN, // 活动状态:未知、未开始、活动中、已结束
serviceError: false, // 接口是否发生异常或者超时
};
/**
* 活动详情信息
* @type {{}}
*/
activityDetail = {};
/**
* 预约成员信息, 服务端返回memberData可能为空
* @type {{}}
*/
memberData = {};
/**
* 加载活动数据
* @param id
* @returns {Promise<void>}
*/
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();