|
|
@ -23,14 +23,16 @@ import mixin from '@/mixins/timeline'; |
|
|
|
export default { |
|
|
|
mixins: [mixin], |
|
|
|
data() { |
|
|
|
return { height: '' }; |
|
|
|
return { height: '', show: false }; |
|
|
|
}, |
|
|
|
|
|
|
|
computed: { |
|
|
|
...mapState('user', ['user', 'token']), |
|
|
|
...mapState('role', ['visibleRoles', 'roleId']), |
|
|
|
...mapState('task', ['timeNode', 'timeUnit', 'tasks']), |
|
|
|
...mapState('task', ['timeNode', 'timeUnit', 'tasks', 'regularTask']), |
|
|
|
...mapState('project', ['project']), |
|
|
|
...mapGetters('task', ['timeGranularity']), |
|
|
|
...mapGetters('project', ['projectId']), |
|
|
|
}, |
|
|
|
|
|
|
|
onLoad(options) { |
|
|
@ -43,10 +45,10 @@ export default { |
|
|
|
* 重新根据时间和角色查询普通日常任务 |
|
|
|
* 永久日常任务不发生改变 |
|
|
|
*/ |
|
|
|
async timeNode(val) { |
|
|
|
timeNode(val) { |
|
|
|
if (val && this.roleId) { |
|
|
|
// 根据时间和角色查找日常任务 |
|
|
|
await this.initTasks(); |
|
|
|
this.initTasks(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
@ -60,7 +62,8 @@ export default { |
|
|
|
if (val) { |
|
|
|
this.setTimeNode(Date.now()); |
|
|
|
// 根据角色查找永久的日常任务 |
|
|
|
this.getPermanent(val); |
|
|
|
const params = { roleId: val, projectId: this.projectId }; |
|
|
|
this.getPermanent(params); |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
@ -72,12 +75,11 @@ export default { |
|
|
|
onUnload() { |
|
|
|
this.clearEndFlag(); |
|
|
|
this.clearTasks(); |
|
|
|
this.setRoleId(); |
|
|
|
}, |
|
|
|
|
|
|
|
methods: { |
|
|
|
...mapActions('user', ['getToken']), |
|
|
|
...mapActions('project', ['getProjectById']), |
|
|
|
...mapActions('role', ['getRoles']), |
|
|
|
...mapActions('task', ['getRegulars', 'getPermanent', 'getGlobal']), |
|
|
|
...mapMutations('user', ['setToken']), |
|
|
|
...mapMutations('project', ['setProject', 'setProjectName']), |
|
|
@ -99,8 +101,7 @@ export default { |
|
|
|
* 初始化 |
|
|
|
* @param {object | null} options |
|
|
|
*/ |
|
|
|
async init(options) { |
|
|
|
try { |
|
|
|
init(options) { |
|
|
|
if (!this.token) { |
|
|
|
// 不论有没有token都直接从userId获取token |
|
|
|
// token有过期时间 从本地获取可能是过期 干脆直接从userId获取 |
|
|
@ -108,7 +109,7 @@ export default { |
|
|
|
// 参数里没有u (userId)提示 |
|
|
|
this.$t.ui.showToast('缺少用户信息参数'); |
|
|
|
} else { |
|
|
|
await this.getToken(options.u); |
|
|
|
this.getToken(options.u); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -120,16 +121,43 @@ export default { |
|
|
|
this.$t.ui.showToast('缺少项目信息参数'); |
|
|
|
} else { |
|
|
|
// 根据项目id获取项目信息 |
|
|
|
await this.getProjectById({ projectId: options.p }); |
|
|
|
// 根据项目id获取角色列表 |
|
|
|
await this.getRoles({ projectId: options.p }); |
|
|
|
this.setInitialRoleId(this.visibleRoles); |
|
|
|
this.getProjectById({ projectId: options.p }); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* 通过项目id获取项目信息 |
|
|
|
* @param {string} projectId |
|
|
|
* @param {object} params 提交的参数 |
|
|
|
*/ |
|
|
|
async getProjectById(params) { |
|
|
|
try { |
|
|
|
const data = await uni.$u.api.findProjectById(params); |
|
|
|
this.setProject(data); |
|
|
|
// 根据项目id获取角色列表 |
|
|
|
this.getRoles(params); |
|
|
|
} catch (error) { |
|
|
|
console.error('project init function:', error); |
|
|
|
console.log('error: ', error || '获取项目信息失败'); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* 通过项目id获取角色信息 |
|
|
|
* @param {string} projectId |
|
|
|
* @param {object} params 提交的参数 |
|
|
|
*/ |
|
|
|
getRoles(params) { |
|
|
|
this.$t.$q.findShowRole(params, (err, data) => { |
|
|
|
if (err) { |
|
|
|
console.error('err: ', err || '获取角色信息失败'); |
|
|
|
} else { |
|
|
|
this.setInvisibleRoles(data ? data.invisibleList : []); |
|
|
|
this.setVisibleRoles(data ? data.visibleList : []); |
|
|
|
this.setInitialRoleId(data ? data.visibleList : []); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
// 初始化 时间轴 |
|
|
|
async initTasks() { |
|
|
|
// 清空日常任务的数据 |
|
|
@ -153,7 +181,9 @@ export default { |
|
|
|
}); |
|
|
|
// 向下加载空数据 |
|
|
|
this.setNextTasks(); |
|
|
|
|
|
|
|
await this.getInitTasks(); |
|
|
|
// 根据项目id获取角色列表 |
|
|
|
// 从详情页返回时跳转到之前的位置 storage有存储值 |
|
|
|
this.$nextTick(() => { |
|
|
|
if (storageTaskId) { |
|
|
@ -163,32 +193,38 @@ export default { |
|
|
|
}, |
|
|
|
|
|
|
|
// 切换了 颗粒度 || 角色时候 获取初始定期任务 |
|
|
|
async getInitTasks() { |
|
|
|
// 根据时间基准点和角色查找定期任务 |
|
|
|
await this.getTasks({ queryType: 0 }); |
|
|
|
await this.getTasks({ queryType: 1 }); |
|
|
|
|
|
|
|
getInitTasks() { |
|
|
|
// 预加载 上下的定期任务 |
|
|
|
const detailId = this.tasks.findIndex(task => task.detailId); |
|
|
|
function fn(that) { |
|
|
|
const detailId = that.tasks.findIndex(task => task.detailId); |
|
|
|
console.log('detailId: ', detailId); |
|
|
|
if (detailId !== -1) { |
|
|
|
this.$nextTick(async () => { |
|
|
|
const { tasks, timeGranularity } = this; |
|
|
|
await this.getTasks({ timeNode: +tasks[0].planStart, queryType: 0, queryNum: 6 }); // 向上拿数据 |
|
|
|
// 向下查的时候要再最后一个任务的开始时间的基础上 多加一个时间颗粒度 |
|
|
|
const nextQueryTime = +this.$t.time.add(+tasks[tasks.length - 1].planStart, 1, timeGranularity); |
|
|
|
await this.getTasks({ timeNode: nextQueryTime, queryType: 1, queryNum: 6 }); // 向下拿数据 |
|
|
|
that.$nextTick(() => { |
|
|
|
// 向上拿数据 |
|
|
|
const { tasks, timeGranularity } = that; |
|
|
|
that.getTasks({ timeNode: +tasks[0].planStart, queryType: 0, queryNum: 6 }); |
|
|
|
// 向下拿数据 |
|
|
|
const nextQueryTime = +that.$t.time.add(+tasks[tasks.length - 1].planStart, 1, timeGranularity); |
|
|
|
that.getTasks({ timeNode: nextQueryTime, queryType: 1, queryNum: 6 }); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
// 没有任务 上下显示时间刻度 |
|
|
|
// 向上加载 |
|
|
|
this.setPrevTasks(); |
|
|
|
// 向下加载 |
|
|
|
this.setNextTasks(); |
|
|
|
// that.setPrevTasks(); |
|
|
|
// // 向下加载 |
|
|
|
// that.setNextTasks(); |
|
|
|
} |
|
|
|
} |
|
|
|
// 根据时间基准点和角色查找定期任务 |
|
|
|
this.getTasks({ queryType: 0 }); |
|
|
|
|
|
|
|
// 根据项目id获取角色列表 |
|
|
|
this.getTasks({ queryType: 1 }, fn); |
|
|
|
}, |
|
|
|
|
|
|
|
// 设置 初始显示角色信息 |
|
|
|
setInitialRoleId(visibleList) { |
|
|
|
if (!visibleList || !visibleList.length) return; |
|
|
|
const index = visibleList.findIndex(item => +item.mine === 1); |
|
|
|
const currentRole = index > 0 ? visibleList[index] : visibleList[0]; |
|
|
|
const storageRoleId = this.$t.storage.getStorageSync('roleId'); |
|
|
@ -207,35 +243,49 @@ export default { |
|
|
|
* @param {string} query.queryNum 查找颗粒度数量 默认3个 |
|
|
|
* @param {string} query.queryType 0向上查找 1向下查找(默认) 下查包含自己,上查不包含 |
|
|
|
*/ |
|
|
|
async getTasks(query) { |
|
|
|
try { |
|
|
|
this.setShowSkeleton(true); |
|
|
|
const { roleId, timeNode, timeUnit } = this; |
|
|
|
getTasks(query, fn) { |
|
|
|
const that = this; |
|
|
|
that.setShowSkeleton(true); |
|
|
|
const { roleId, timeNode, timeUnit, projectId } = that; |
|
|
|
const params = { |
|
|
|
roleId, |
|
|
|
timeNode: query.timeNode || timeNode, |
|
|
|
timeUnit: query.timeUnit || timeUnit, |
|
|
|
queryNum: query.queryNum || 3, |
|
|
|
queryType: query.queryType, |
|
|
|
projectId, |
|
|
|
}; |
|
|
|
const res = await this.getRegulars(params); |
|
|
|
this.setShowSkeleton(false); |
|
|
|
|
|
|
|
that.$t.$q.getRegularTask(params, function (err, data) { |
|
|
|
console.log('data: ', data); |
|
|
|
console.log('that.show: ', that.show); |
|
|
|
if (!that.show) { |
|
|
|
if (err) { |
|
|
|
that.setShowSkeleton(false); |
|
|
|
console.error('err: ', err); |
|
|
|
} else { |
|
|
|
that.show = true; |
|
|
|
that.setShowSkeleton(false); |
|
|
|
// 0 -> 向上 1 -> 向下 |
|
|
|
if (res && res.length) { |
|
|
|
this.replacePrevData(res, params.queryType); |
|
|
|
if (data && data.length) { |
|
|
|
that.replacePrevData(data, params.queryType); |
|
|
|
that.show = false; |
|
|
|
} else { |
|
|
|
params.queryType === 0 ? this.setPrevTasks() : this.setNextTasks(); |
|
|
|
params.queryType === 0 ? that.setPrevTasks() : that.setNextTasks(); |
|
|
|
that.show = false; |
|
|
|
} |
|
|
|
if (that.tasks.length && fn) { |
|
|
|
fn(that); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
this.setShowSkeleton(false); |
|
|
|
console.error('error: ', error); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
// 获取可变全局任务 |
|
|
|
getGlobalData() { |
|
|
|
const { roleId, timeNode, timeUnit } = this; |
|
|
|
const param = { roleId, timeNode, timeUnit }; |
|
|
|
const { roleId, timeNode, timeUnit, projectId } = this; |
|
|
|
const param = { roleId, timeNode, timeUnit, projectId }; |
|
|
|
this.getGlobal(param); |
|
|
|
}, |
|
|
|
|
|
|
@ -268,28 +318,38 @@ export default { |
|
|
|
// 筛选相同的时间替换数据 |
|
|
|
replacePrevData(data, type) { |
|
|
|
let newTasks = [...this.tasks]; |
|
|
|
let newDate = this.$u.deepClone(data); |
|
|
|
|
|
|
|
console.log('newDate: ', newDate); |
|
|
|
|
|
|
|
if (newDate && newDate.length) { |
|
|
|
for (let i = 0; i < newTasks.length; i++) { |
|
|
|
const task = newTasks[i]; |
|
|
|
// const task = newTasks[i]; |
|
|
|
let arr = []; |
|
|
|
for (let j = 0; j < data.length; j++) { |
|
|
|
const item = data[j]; |
|
|
|
for (let j = 0; j < newDate.length; j++) { |
|
|
|
const item = newDate[j]; |
|
|
|
if (newTasks[i].id === item.id) { |
|
|
|
console.log('j', j, i); |
|
|
|
newTasks[i] = item; |
|
|
|
break; |
|
|
|
} |
|
|
|
// 查找有没有超出时间刻度的时间 |
|
|
|
if (+newTasks[0].planStart > +data[0].planStart) { |
|
|
|
if (+newTasks[0].planStart > +newDate[0].planStart) { |
|
|
|
this.setPrevTasks(); |
|
|
|
newTasks = [...this.tasks]; |
|
|
|
i--; |
|
|
|
break; |
|
|
|
} else if (+data[data.length - 1].planStart > +newTasks[newTasks.length - 1].planStart) { |
|
|
|
} else if (+newDate[newDate.length - 1].planStart > +newTasks[newTasks.length - 1].planStart) { |
|
|
|
this.setNextTasks(); |
|
|
|
newTasks = [...this.tasks]; |
|
|
|
i--; |
|
|
|
break; |
|
|
|
} else { |
|
|
|
// 筛选相同的时间替换数据 |
|
|
|
const taskItem = this.$t.time.isSame(+task.planStart, +item.planStart, this.timeGranularity); |
|
|
|
const taskItem = this.$t.time.isSame(+newTasks[i].planStart, +item.planStart, this.timeGranularity); |
|
|
|
if (taskItem) { |
|
|
|
arr.push(item); |
|
|
|
if (task.detailId) { |
|
|
|
if (newTasks[i].detailId) { |
|
|
|
newTasks.splice(i, 0, item); |
|
|
|
} else { |
|
|
|
if (arr.length === 1) { |
|
|
@ -304,8 +364,11 @@ export default { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
this.clearTasks(); |
|
|
|
type === 0 ? this.setUpTasks(newTasks) : this.setDownTasks(newTasks); |
|
|
|
console.log('newTasks: ', newTasks.length); |
|
|
|
console.log('end'); |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|