condition.js 8.04 KB
import dateInstance from '../../common/date.js'
import fetch from '../../api/fetch.js'
import { CONDITIONS } from '../mutation-types.js'

const state = {
	// 门店
	storeMallList: [],	// 门店/商场列表
	checkedMallId: null,	// 单选门店
	multiCheckedMallId: [],	// 多选门店
	// 监控点
	storeGateList: [],	// 监控点/出入口列表
	checkedGateId: null,	// 单选监控点
	multiCheckedGateId: [],	// 多选监控点
	// 时间
	dateData: [],	// 基本时间数据	年月日
	// 天级日期
	selectedDayTime: '',	// 选中天级日期字符串
	dayAnchor: [],	// 选中天级日期picker下标
	// 开始结束日期
	startEndDateData: [],	// 开始结束日期数据
	selectedStartDayTime: '',	// 选中开始日期时间字符串
	startDayAnchor: [],	// 选中开始日期时间picker下标
	selectedEndDayTime: '',	// 选中结束日期时间字符串
	endDayAnchor: [],	// 选中结束日期时间picker下标
}

const getter = {};

const actions = {
	getMalls({ commit }, { data, header }) {
		fetch.loadMallList(data, header)
			.then(res => {
				console.log('actions fetch mallList-=-=-=-=-=->', res)
				let result = res.data;
				let buildMallData = result.data.map(item => {
					item._selected = false;	// 结合数据展现新增属性
					return item;
				})
				commit(CONDITIONS.SET_MALLS, buildMallData)
				let mallId = null
					, multiMallId = [];
					multiMallId = buildMallData.map((item, index) => {
						if(index == 0) {
							mallId = {
								id: item.id,
								name: item.name
							};
						}
						return {
							id: item.id,
							name: item.name
						};
					});
				commit(CONDITIONS.CHECKED_MALL_ID, mallId)
				commit(CONDITIONS.CHECKED_MULTI_MALL_ID, multiMallId)
			})
	},
	getGates({ commit }, { data, header }) {
		fetch.loadGateList(data, header)
			.then(res => {
				console.log('actions fetch gateList-=-=-=-=-=->', res)
				let result = res.data;
				let buildGateData = result.data.map(item => {
					item._selected = false;	// 结合数据展现新增属性
					return item;
				})
				commit(CONDITIONS.SET_GATES, buildGateData)
				let gateId = null
					, multiGateId = [];
					multiGateId = buildGateData.map((item, index) => {
						if(index == 0) {
							gateId = {
								id: item.id,
								name: item.name
							};
						}
						return {
							id: item.id,
							name: item.name
						};
					});
				commit(CONDITIONS.CHECKED_GATE_ID, gateId)
				commit(CONDITIONS.CHECKED_MULTI_GATE_ID, multiGateId)
			})
	},
	getDayDate({ commit }) {
		console.log('START_YEAR', dateInstance.START_YEAR)
		let baseData = dateInstance.getDateData();
		// 初始化时间 限定当天
		let dayTime = {}
			, dayTimeText = ''
			, dayAnchor = [];
			dayTime = formatterDayTime(new Date());
			dayTimeText = `${dayTime['Y']}-${dayTime['M']}-${dayTime['D']}`
			dayAnchor = computedAnchor(dayTime, dateInstance.START_YEAR);
		commit(CONDITIONS.SET_BASE_DATE_DATA, baseData)
		commit(CONDITIONS.SET_SELECTED_DAY_TIME, dayTimeText)
		commit(CONDITIONS.SET_DAY_ANCHOR, dayAnchor)
	},
	getStartEndDate({ commit }, frontDay) {
		let dateData = dateInstance.getDateData();
		// console.log('getStartEndDate dateInstance', dateInstance)
		console.log('getStartEndDate', dateData)
		// 初始化开始结束日期
		let startDate = null
			, endDate = null
			, formatterStartDate = null
			, formatterEndDate = null
			, startDateString = ''
			, endDateString = ''
			, startDateAnchor = []
			, endDateAnchor = [];
			endDate = new Date();
			startDate = frontTime(endDate, frontDay);
			formatterStartDate = formatterDayTime(startDate);
			console.log('formatterStartDate', formatterStartDate)
			formatterEndDate = formatterDayTime(endDate);
			startDateString = `${formatterStartDate['Y']}-${formatterStartDate['M']}-${formatterStartDate['D']}`;
			endDateString = `${formatterEndDate['Y']}-${formatterEndDate['M']}-${formatterEndDate['D']}`;
			startDateAnchor = computedAnchor(formatterStartDate, dateInstance.START_YEAR);
			endDateAnchor = computedAnchor(formatterEndDate, dateInstance.START_YEAR);
		
		console.log('startDateAnchor', startDateAnchor, endDateAnchor)
		commit(CONDITIONS.SET_START_END_DATE_DATA, dateData)
		commit(CONDITIONS.SET_SELECTED_START_DAY_TIME, startDateString)
		commit(CONDITIONS.SET_SELECTED_END_DAY_TIME, endDateString)
		commit(CONDITIONS.SET_START_DAY_ANCHOR, startDateAnchor)
		commit(CONDITIONS.SET_END_DAY_ANCHOR, endDateAnchor)
	},
	//=============================更新state操作=============================
	updateCheckedMall({ commit }, mallId) {
		commit(CONDITIONS.CHECKED_MALL_ID, mallId)
	},
	updateMultiCheckedMall({ commit }, multiMallId) {
		commit(CONDITIONS.CHECKED_MULTI_MALL_ID, multiMallId)
	},
	updateCheckedGate({ commit }, gateId) {
		commit(CONDITIONS.CHECKED_GATE_ID, gateId)
	},
	updateMultiCheckedGate({ commit }, multiGateId) {
		commit(CONDITIONS.CHECKED_MULTI_GATE_ID, multiGateId)
	},
	updateDayDate({ commit }, { dayTimeText, dayDateAnchor }) {
		dayTimeText && commit(CONDITIONS.SET_SELECTED_DAY_TIME, dayTimeText);
		dayDateAnchor && commit(CONDITIONS.SET_DAY_ANCHOR, dayDateAnchor);
	},
	updateStartEndDate({ commit }, { startDateText, endDateText, startDateAnchor, endDateAnchor }) {
		startDateText && commit(CONDITIONS.SET_SELECTED_START_DAY_TIME, startDateText)
		endDateText && commit(CONDITIONS.SET_SELECTED_END_DAY_TIME, endDateText)
		startDateAnchor && commit(CONDITIONS.SET_START_DAY_ANCHOR, startDateAnchor)
		endDateAnchor && commit(CONDITIONS.SET_END_DAY_ANCHOR, endDateAnchor)
	}
}

const mutations = {
	// 门店
	[CONDITIONS.SET_MALLS] (state, malls) {
		state.storeMallList = malls
	},
	[CONDITIONS.CHECKED_MALL_ID] (state, mallId) {
		state.checkedMallId = mallId
	},
	[CONDITIONS.CHECKED_MULTI_MALL_ID] (state, multiMallId) {
		state.multiCheckedMallId =  multiMallId
	},
	// 出入口
	[CONDITIONS.SET_GATES] (state, gates) {
		state.storeGateList = gates
	},
	[CONDITIONS.CHECKED_GATE_ID] (state, gateId) {
		state.checkedGateId = gateId
	},
	[CONDITIONS.CHECKED_MULTI_GATE_ID] (state, multiGateId) {
		state.multiCheckedGateId = multiGateId
	},
	// 日期数据 年月日
	[CONDITIONS.SET_BASE_DATE_DATA] (state, dateData) {
		state.dateData = dateData
	},
	// 日级时间
	[CONDITIONS.SET_SELECTED_DAY_TIME] (state, dayTimeText) {
		state.selectedDayTime = dayTimeText
	},
	[CONDITIONS.SET_DAY_ANCHOR] (state, dayAnchor) {
		state.dayAnchor = dayAnchor
	},
	// 开始结束日期
	[CONDITIONS.SET_START_END_DATE_DATA] (state, startEndDateData) {
		state.startEndDateData = startEndDateData;
	},
	[CONDITIONS.SET_SELECTED_START_DAY_TIME] (state, startDateText) {
		state.selectedStartDayTime = startDateText
	},
	[CONDITIONS.SET_START_DAY_ANCHOR] (state, startDateAnchor) {
		state.startDayAnchor = startDateAnchor
	},
	[CONDITIONS.SET_SELECTED_END_DAY_TIME] (state, endDateText) {
		state.selectedEndDayTime = endDateText
	},
	[CONDITIONS.SET_END_DAY_ANCHOR] (state, endDateAnchor) {
		state.endDayAnchor = endDateAnchor
	}
}

/*
 * 格式化日期 年月日
 * @param {Object} date
 */
function formatterDayTime(date) {
	let baseFormatter = {
		Y: date.getFullYear(),
		M: date.getMonth() + 1,
		D: date.getDate()
	}
	let resFormatterTime = {};
	Object.keys(baseFormatter).forEach(k => {
		resFormatterTime[k] = (baseFormatter[k] + '').replace(/(?=\b\d\b)/g, '0')
	})
	return resFormatterTime;
}

/**
 * 计算提前时间
 * @param {Object} currentTime
 * @param {Number} frontDay
 */
function frontTime(currentTime, frontDay = 15) {
	return new Date(currentTime.getTime() - frontDay * 24 * 60 * 60* 1000)
}

/**
 * 计算日期下标
 * @param {Object} dateObject
 * @param {number} dateObject
 */
function computedAnchor(dateObject, startYear) {
	let tempDateAnchor = [];
	Object.keys(dateObject).forEach(key => {
		switch (key){
			case 'Y':
				tempDateAnchor.push({
					index: dateObject[key] - startYear,
					value: dateObject[key] + '年'
				})
				break;
			// case '':
			default:
				tempDateAnchor.push({
					index: dateObject[key] - 1,
					value: dateObject[key] + (key === 'M' ? '月' : key === 'D' ? '日' : '')
				})
				break;
		}
	})
	return tempDateAnchor
}


export default {
	namespaced: true,
	state,
	getter,
	mutations,
	actions
};