|
|
@ -18,8 +18,10 @@ |
|
|
|
|
|
|
|
<script> |
|
|
|
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'; |
|
|
|
import mixin from '@/mixins/timeline'; |
|
|
|
|
|
|
|
export default { |
|
|
|
mixins: [mixin], |
|
|
|
data() { |
|
|
|
return { height: '' }; |
|
|
|
}, |
|
|
@ -41,12 +43,10 @@ export default { |
|
|
|
* 重新根据时间和角色查询普通日常任务 |
|
|
|
* 永久日常任务不发生改变 |
|
|
|
*/ |
|
|
|
timeNode(val) { |
|
|
|
console.log('val: ', val); |
|
|
|
async timeNode(val) { |
|
|
|
if (val && this.roleId) { |
|
|
|
// 根据时间和角色查找日常任务 |
|
|
|
this.getGlobalData(); |
|
|
|
this.getInitTasks(); |
|
|
|
await this.initTasks(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
@ -58,13 +58,11 @@ export default { |
|
|
|
*/ |
|
|
|
roleId(val) { |
|
|
|
if (val) { |
|
|
|
console.log('角色发生变化: ', val); |
|
|
|
// 如果storage里有timeNode,修改store里的timeNode |
|
|
|
this.setTimeNode( |
|
|
|
+this.$t.storage.getStorageSync('timeNode') !== 0 ? +this.$t.storage.getStorageSync('timeNode') !== 0 : Date.now(), |
|
|
|
); |
|
|
|
this.setTimeNode(+this.$t.storage.getStorageSync('timeNode') !== 0 ? +this.$t.storage.getStorageSync('timeNode') : Date.now()); |
|
|
|
// 清空storage |
|
|
|
this.$t.storage.setStorageSync('timeNode', ''); |
|
|
|
console.log('当角色发生变化时: ', this.timeNode); |
|
|
|
// 根据角色查找永久的日常任务 |
|
|
|
this.getPermanent(val); |
|
|
|
} |
|
|
@ -77,6 +75,7 @@ export default { |
|
|
|
|
|
|
|
onUnload() { |
|
|
|
this.clearEndFlag(); |
|
|
|
this.clearTasks(); |
|
|
|
}, |
|
|
|
|
|
|
|
methods: { |
|
|
@ -87,7 +86,18 @@ export default { |
|
|
|
...mapMutations('user', ['setToken']), |
|
|
|
...mapMutations('project', ['setProject', 'setProjectName']), |
|
|
|
...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']), |
|
|
|
...mapMutations('task', ['setUpTasks', 'setDownTasks', 'setDailyTasks', 'setTimeNode', 'clearEndFlag', 'setShowSkeleton']), |
|
|
|
...mapMutations('task', [ |
|
|
|
'setPermanents', |
|
|
|
'setUpTasks', |
|
|
|
'setDownTasks', |
|
|
|
'setDailyTasks', |
|
|
|
'setTimeNode', |
|
|
|
'clearTasks', |
|
|
|
'clearEndFlag', |
|
|
|
'setShowSkeleton', |
|
|
|
'setTopEnd', |
|
|
|
'setBottomEnd', |
|
|
|
]), |
|
|
|
|
|
|
|
/** |
|
|
|
* 初始化 |
|
|
@ -113,11 +123,6 @@ export default { |
|
|
|
// 没有项目id参数 |
|
|
|
this.$t.ui.showToast('缺少项目信息参数'); |
|
|
|
} else { |
|
|
|
// 如果storage里有timeNode,修改store里的timeNode |
|
|
|
this.setTimeNode(this.$t.storage.getStorageSync('timeNode') - 0); |
|
|
|
// 清空storage |
|
|
|
this.$t.storage.setStorageSync('timeNode', ''); |
|
|
|
console.log('timeNode: ', this.$t.storage.getStorageSync('timeNode'), this.timeNode); |
|
|
|
// 根据项目id获取项目信息 |
|
|
|
await this.getProjectById({ projectId: options.p }); |
|
|
|
// 根据项目id获取角色列表 |
|
|
@ -129,6 +134,28 @@ export default { |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
// 初始化 时间轴 |
|
|
|
async initTasks() { |
|
|
|
// 清空日常任务的数据 |
|
|
|
this.setPermanents([]); |
|
|
|
this.setDailyTasks([]); |
|
|
|
// 清空定期任务数据 |
|
|
|
this.clearTasks(); |
|
|
|
// 到顶的标志复位 |
|
|
|
// 到底的标志复位 |
|
|
|
this.clearEndFlag(); |
|
|
|
// 根据时间和角色查找日常任务 |
|
|
|
this.getGlobalData(); |
|
|
|
// 向上加载空数据 |
|
|
|
this.setPrevTasks(); |
|
|
|
// 向下加载空数据 |
|
|
|
this.setNextTasks(); |
|
|
|
await this.getInitTasks(); |
|
|
|
setTimeout(() => { |
|
|
|
this.$refs.child.setViewId(); |
|
|
|
}, 2000); |
|
|
|
}, |
|
|
|
|
|
|
|
// 切换了 颗粒度 || 角色时候 获取初始定期任务 |
|
|
|
async getInitTasks() { |
|
|
|
// 根据时间基准点和角色查找定期任务 |
|
|
@ -136,20 +163,21 @@ export default { |
|
|
|
await this.getTasks({ queryType: 1 }); |
|
|
|
|
|
|
|
// 预加载 上下的定期任务 |
|
|
|
if (this.tasks && this.tasks.length && this.tasks[0].detailId) { |
|
|
|
this.$nextTick(() => { |
|
|
|
const detailId = this.tasks.findIndex(task => task.detailId); |
|
|
|
if (detailId !== -1) { |
|
|
|
this.$nextTick(async () => { |
|
|
|
const { tasks, timeGranularity } = this; |
|
|
|
this.getTasks({ timeNode: +tasks[0].planStart, queryType: 0, queryNum: 6 }); // 向上拿数据 |
|
|
|
await this.getTasks({ timeNode: +tasks[0].planStart, queryType: 0, queryNum: 6 }); // 向上拿数据 |
|
|
|
// 向下查的时候要再最后一个任务的开始时间的基础上 多加一个时间颗粒度 |
|
|
|
const nextQueryTime = +this.$t.time.add(+tasks[tasks.length - 1].planStart, 1, timeGranularity); |
|
|
|
this.getTasks({ timeNode: nextQueryTime, queryType: 1, queryNum: 6 }); // 向下拿数据 |
|
|
|
await this.getTasks({ timeNode: nextQueryTime, queryType: 1, queryNum: 6 }); // 向下拿数据 |
|
|
|
}); |
|
|
|
} else { |
|
|
|
// 没有任务 上下显示时间刻度 |
|
|
|
// 向上加载 |
|
|
|
this.setUpTasks(); |
|
|
|
this.setPrevTasks(); |
|
|
|
// 向下加载 |
|
|
|
this.setDownTasks(); |
|
|
|
this.setNextTasks(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
@ -184,9 +212,14 @@ export default { |
|
|
|
queryNum: query.queryNum || 3, |
|
|
|
queryType: query.queryType, |
|
|
|
}; |
|
|
|
console.log('params: ', params); |
|
|
|
await this.getRegulars(params); |
|
|
|
const res = await this.getRegulars(params); |
|
|
|
this.setShowSkeleton(false); |
|
|
|
// 0 -> 向上 1 -> 向下 |
|
|
|
if (res && res.length) { |
|
|
|
this.replacePrevData(res, params.queryType); |
|
|
|
} else { |
|
|
|
params.queryType === 0 ? this.setPrevTasks() : this.setNextTasks(); |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
this.setShowSkeleton(false); |
|
|
|
console.error('error: ', error); |
|
|
@ -199,6 +232,73 @@ export default { |
|
|
|
const param = { roleId, timeNode, timeUnit }; |
|
|
|
this.getGlobal(param); |
|
|
|
}, |
|
|
|
|
|
|
|
// 设置时间轴向上的空数据 |
|
|
|
setPrevTasks() { |
|
|
|
this.setTopEnd(true); |
|
|
|
let sTime = ''; |
|
|
|
if (!this.tasks || !this.tasks.length) { |
|
|
|
sTime = +new Date().getTime(); |
|
|
|
} else { |
|
|
|
sTime = +this.tasks[0].planStart - 0; |
|
|
|
} |
|
|
|
const initData = this.setTime(sTime, true); |
|
|
|
this.setUpTasks(initData); |
|
|
|
}, |
|
|
|
|
|
|
|
// 设置时间轴向下的空数据 |
|
|
|
setNextTasks() { |
|
|
|
this.setBottomEnd(true); |
|
|
|
let sTime = ''; |
|
|
|
if (!this.tasks || !this.tasks.length) { |
|
|
|
sTime = +new Date().getTime(); |
|
|
|
} else { |
|
|
|
sTime = +this.tasks[this.tasks.length - 1].planStart - 0; |
|
|
|
} |
|
|
|
const initData = this.setTime(sTime, false); |
|
|
|
this.setDownTasks(initData); |
|
|
|
}, |
|
|
|
|
|
|
|
// 筛选相同的时间替换数据 |
|
|
|
replacePrevData(data, type) { |
|
|
|
let newTasks = [...this.tasks]; |
|
|
|
for (let i = 0; i < newTasks.length; i++) { |
|
|
|
const task = newTasks[i]; |
|
|
|
let arr = []; |
|
|
|
for (let j = 0; j < data.length; j++) { |
|
|
|
const item = data[j]; |
|
|
|
// 查找有没有超出时间刻度的时间 |
|
|
|
if (+data[0].planStart < +newTasks[0].planStart) { |
|
|
|
this.setPrevTasks(); |
|
|
|
newTasks = [...this.tasks]; |
|
|
|
break; |
|
|
|
} else if (+data[data.length - 1].planStart > +newTasks[newTasks.length - 1].planStart) { |
|
|
|
this.setNextTasks(); |
|
|
|
newTasks = [...this.tasks]; |
|
|
|
break; |
|
|
|
} else { |
|
|
|
// 筛选相同的时间替换数据 |
|
|
|
const taskItem = this.$t.time.isSame(+item.planStart, +task.planStart, this.timeGranularity); |
|
|
|
if (taskItem) { |
|
|
|
arr.push(item); |
|
|
|
if (task.detailId) { |
|
|
|
newTasks.splice(i, 0, item); |
|
|
|
} else { |
|
|
|
if (arr.length === 1) { |
|
|
|
newTasks.splice(i, 1, item); |
|
|
|
} |
|
|
|
if (arr.length > 1) { |
|
|
|
newTasks.splice(i, 0, item); |
|
|
|
} |
|
|
|
} |
|
|
|
i++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
this.clearTasks(); |
|
|
|
type === 0 ? this.setUpTasks(newTasks) : this.setDownTasks(newTasks); |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
</script> |
|
|
|