import { getGlobal, getPermanent } from 'apis'; export default { namespaced: true, state: { scrollTop: 0, scrollToTaskId: '', // 时间轴自动滚动的位置 isShrink: false, // true: 收起, false:展开 tip: { taskId: '', // 当前正在修改状态的任务的id show: false, status: 0, // 所点击任务的当前状态码 text: '', left: 0, // 鼠标点击位置距离左边的距离 top: 0, // 鼠标点击位置距离上边的距离 }, timeNode: new Date().getTime(), // 时间基准点 timeUnit: 4, // 时间颗粒度 topEnd: false, // 时间轴向上查任务到顶了 bottomEnd: false, // 时间轴向下查任务到底了 permanents: [], // 永久日常任务 dailyTasks: [], // 日常任务 tasks: [], // 所有的定期任务 showSkeleton: false, // 定期任务骨架屏 newProjectInfo: {}, showScrollTo: false, // 是否可以设置时间轴自动滚动的位置 }, getters: { // 所有的日常任务 永久 + 可变 日常任务 globals({ dailyTasks, permanents }) { return [...permanents, ...dailyTasks]; }, // unitConfig({ timeUnit }) { // const target = uni.$t.timeConfig.timeUnits.find(item => item.id === timeUnit); // return target; // }, // 计算任务开始时间的格式 startTimeFormat(state, { unitConfig }) { return unitConfig.format || 'D日 HH:mm'; }, // 计算颗粒度 对应的 dayjs add 的单位 timeGranularity(state, { unitConfig }) { return unitConfig.granularity; }, }, mutations: { /** * 记录时间轴向上滚动的距离 * @param { object } state * @param { number } num */ setScrollTop(state, num) { state.scrollTop = num; }, /** * 记录时间轴向上滚动的距离 * @param { object } state * @param {string} taskId */ setScrollToTaskId(state, taskId) { state.scrollToTaskId = taskId; }, /** * 设置日常任务当前是否应该处于收缩状态 * @param { object } state * @param { boolean } data */ setShrink(state, data) { state.isShrink = data; }, /** * 设置tip的值 * @param {object} state * @param {object} data */ setTip(state, data) { if (!data) return; state.tip = { ...data }; }, /** * 是否显示tips * @param { object } state * @param { boolean } show */ setTipShow(state, show) { state.tip.show = show; }, /** * 是否显示tips * @param { object } state * @param { number } status */ setStatus(state, status) { state.tip.status = status; }, /** * 设置时间基准点 * @param { object } state * @param { number } data */ setTimeNode(state, data) { state.timeNode = data; }, /** * 设置时间颗粒度 * @param { object } state * @param { number } data */ setTimeUnit(state, data) { state.timeUnit = data; }, /** * 设置向上查到的定期任务数据 * @param {Object} state * @param {Array} data 服务端返回的模板数组 */ setUpTasks(state, data) { if (!state.tasks.length) { state.tasks = [...data]; // 原来没有数据 } else { state.tasks = [...data, ...state.tasks]; const arr = []; let flag = false; state.tasks.forEach(task => { arr.forEach(item => { if (task.id === item.id) { flag = true; } }); if (!flag) { arr.push(task); } }); state.tasks = [...arr]; // state.tasks = [...data.concat(state.tasks)]; } }, /** * 设置向下查到的定期任务数据 * @param {Object} state * @param {Array} data 服务端返回的模板数组 */ setDownTasks(state, data) { if (!state.tasks && !state.tasks.length) { state.tasks = [...data]; } else { state.tasks = [...state.tasks, ...data]; const arr = []; let flag = false; state.tasks.forEach(task => { arr.forEach(item => { if (task.id === item.id) { flag = true; } }); if (!flag) { arr.push(task); } }); state.tasks = [...arr]; // state.tasks = [...state.tasks.concat(data)]; } }, /** * 添加任务后更新tasks * @param {Object} state * @param {Array} data 新添加的task */ updateTasks(state, data) { state.tasks = [...data]; }, /** * 设置添加任务的位置 * @param {*} state * @param {*} data */ setAddPosition(state, data) { console.log('data: ', data); }, /** * 设置日常任务数据 * @param {Object} state * @param {Array} data 服务端返回的模板数组 */ setDailyTasks(state, data) { state.dailyTasks = data || []; }, /** * 设置永久固定任务 * @param {object} state * @param {array} tasks 服务端查询到的永久日常任务书籍 */ setPermanents(state, tasks) { state.permanents = tasks || []; }, /** * 设置时间轴是否继续向上查任务 * @param {Object} state * @param {Boolean} show */ setTopEnd(state, show) { state.topEnd = show; }, /** * 设置时间轴是否继续向下查任务 * @param {Object} state * @param {Boolean} show */ setBottomEnd(state, show) { state.bottomEnd = show; }, // 清空标志位 如切换角色等使用 clearEndFlag(state) { state.topEnd = false; state.bottomEnd = false; }, // 清空定期任务 clearTasks(state) { state.tasks = []; }, /** * 收到消息设置任务状态 * @param {Object} state * @param {Array} data 服务端返回的模板数组 */ setTaskStatus(state, data) { const item = state.tasks.find(i => i.id === data.id); item.process = data.taskStatus; }, /** * 收到打开新项目消息状态 * @param {Object} state * @param {Array} data 服务端返回的模板数组 */ setNewProjectInfo(state, data) { state.newProjectInfo = data; }, /** * 设置骨架屏是否显示 * @param {Object} state * @param {Boolean} show */ setShowSkeleton(state, show) { state.showSkeleton = show; }, /** * 是否设置时间轴自动滚动的位置 * @param {Object} state * @param {Boolean} show */ setShowScrollTo(state, show) { state.showScrollTo = show; }, }, actions: { /** * 根据角色查找永久的日常任务 * @param {*} commit * @param {string} roleId 角色id */ async getPermanent({ commit }, param) { try { const data = await getPermanent(param); commit('setPermanents', data); return data; } catch (error) { throw new Error(error); } }, /** * 根据时间和角色查找日常任务 * @param {*} commit * @param {object} param 请求参数 roleId, timeNode, timeUnit */ async getGlobal({ commit }, param) { try { const data = await getGlobal(param); commit('setDailyTasks', data); return data; } catch (error) { throw new Error(error); } }, }, };