TALL renderjs vue3版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

163 lines
5.5 KiB

import { ref, computed, nextTick } from 'vue';
import { useStore } from 'vuex';
export default function useGetTasks() {
const timeLine = ref(null);
const store = useStore();
const tasks = computed(() => store.state.task.tasks);
const showScrollTo = computed(() => store.state.task.showScrollTo);
const roleId = computed(() => store.state.role.roleId);
const timeNode = computed(() => store.state.task.timeNode);
const timeUnit = computed(() => store.state.task.timeUnit);
const projectId = computed(() => store.getters['project/projectId']);
const timeGranularity = computed(() => store.getters['task/timeGranularity']);
// 初始化 定期任务
async function initPlanTasks() {
setPrevPlaceholderTasks(); // 向上加载空数据
setNextPlaceholderTasks(); // 向下加载空数据
await getInitTasks(); // 获取初始数据
// 滚动到对应位置
// let timer = null;
// timer = setInterval(() => {
// if (showScrollTo.value) {
// clearInterval(timer);
// console.log('timeLine',timeLine)
// nextTick(() => timeLine.setScrollPosition());
// }
// }, 500);
}
// 切换了 颗粒度 || 角色时候 获取初始定期任务
function getInitTasks() {
// 预加载 上下的定期任务
// function preloadFn(that) {
// const detailId = tasks.value.findIndex(task => task.detailId);
// const arr = [];
// tasks.value.forEach(task => {
// if (task.detailId) {
// arr.push(task);
// }
// });
// if (detailId !== -1) {
// // 只要有1个真实的任务 就预加载上下周期的任务
// const {
// pageCount
// } = uni.$task;
// nextTick(() => {
// // 向上拿数据
// getTasks({
// timeNode: +tasks.value[detailId].planStart,
// queryType: 0,
// queryNum: pageCount
// });
// // 向下拿数据
// const nextQueryTime = +uni.$time.add(+arr[arr.length - 1].planStart, 1, timeGranularity.value);
// getTasks({
// timeNode: nextQueryTime,
// queryType: 1,
// queryNum: pageCount
// });
// });
// } else {
// // 没有任务 上下显示时间刻度
// // 向上加载
// setPrevPlaceholderTasks();
// // // 向下加载
// setNextPlaceholderTasks();
// }
// }
// 根据时间基准点和角色查找定期任务
getTasks({
queryType: 0
}); // 向上获取定期任务数据
// 根据项目id获取角色列表
// 向下获取定期任务数据
// getTasks({
// queryType: 1
// }, preloadFn);
}
/**
* 生成getTasks所用的参数
* @param {object} query getTasks传递的参数
*/
function generateGetTaskParam(query) {
return {
roleId: roleId.value,
timeNode: query.timeNode || timeNode.value,
timeUnit: query.timeUnit || timeUnit.value,
queryNum: query.queryNum || 3,
queryType: query.queryType,
projectId: projectId.value,
};
}
/**
* 根据时间基准点和角色查找定期任务
* @param {object} query
* @param {string} query.roleId 角色id
* @param {string} query.timeNode 时间基准点 默认当前
* @param {string} query.timeUnit 时间颗粒度 默认天
* @param {string} query.queryNum 查找颗粒度数量 默认3个
* @param {number} query.queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含
*/
function getTasks(query, fn) {
// store.commit('task/setShowSkeleton', false);
console.log('根据时间基准点和角色查找定期任务')
const params = generateGetTaskParam(query);
uni.$catchReq.getRegularTask(params, (err, data) => {
store.commit('task/setShowSkeleton', false);
if (err) {
// TODO: 提示错误
console.error('err: ', err);
} else {
store.commit('task/setShowScrollTo', true);
// 有数据用数据替换刻度
// 没有数据 继续加载刻度
if (data && data.length) {
// replacePrevData(data, params.queryType);
params.queryType === 0 ? store.commit('task/setTopEnd', false) : store.commit('task/setBottomEnd', false);
} else {
// TODO: 0 -> 向上 1 -> 向下
// params.queryType === 0 ? setPrevPlaceholderTasks() : setNextPlaceholderTasks();
}
// if (tasks.value.length && fn) {
// fn(this);
// }
}
});
}
// 设置时间轴向上的空数据
function setPrevPlaceholderTasks() {
store.commit('task/setTopEnd', true);
let startTime = '';
if (!tasks.value || !tasks.value.length) {
startTime = Date.now(); // 没有任务就应该是时间基准点
} else {
startTime = tasks[0].planStart - 0; // 有任务就是第一个任务的计划开始时间
}
const placeholderTasks = uni.$task.setPlaceholderTasks(startTime, true, timeGranularity.value);
store.commit('task/setUpTasks', placeholderTasks);
}
// 设置时间轴向下的空数据
function setNextPlaceholderTasks() {
store.commit('task/setBottomEnd', true);
let startTime = '';
if (!tasks.value || !tasks.value.length) {
startTime = Date.now();
} else {
startTime = +tasks.value[tasks.value.length - 1].planStart;
}
const initData = uni.$task.setPlaceholderTasks(startTime, false, timeGranularity.value);
store.commit('task/setDownTasks', initData);
}
return {
initPlanTasks
}
}