mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 11:19:56 +00:00
perf: 优化创建任务提示时间冲突的逻辑
This commit is contained in:
parent
a4525d4519
commit
d58246b255
@ -202,7 +202,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<TaskExistTips ref="taskExistTipsRef" @onAdd="onAdd(again,true)"/>
|
||||
<TaskExistTips ref="taskExistTipsRef" @onContinue="onAdd(again, true)"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -224,6 +224,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
addData: {
|
||||
// 基本信息
|
||||
cascader: [],
|
||||
name: "",
|
||||
content: "",
|
||||
@ -233,6 +234,7 @@ export default {
|
||||
column_id: 0,
|
||||
times: [],
|
||||
subtasks: [],
|
||||
// 优先级
|
||||
p_level: 0,
|
||||
p_name: '',
|
||||
p_color: '',
|
||||
@ -240,6 +242,7 @@ export default {
|
||||
visibility_appoint: 1,
|
||||
visibility_appointor: [],
|
||||
},
|
||||
addDefault: {},
|
||||
|
||||
cascaderShow: false,
|
||||
cascaderData: [],
|
||||
@ -263,6 +266,10 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
this.addDefault = $A.cloneJSON(this.addData);
|
||||
},
|
||||
|
||||
async mounted() {
|
||||
this.initCascaderData();
|
||||
await this.initProjectData();
|
||||
@ -515,7 +522,7 @@ export default {
|
||||
this.$refs.taskExistTipsRef.isExistTask({
|
||||
userids: this.addData.owner,
|
||||
timerange: this.addData.times
|
||||
}).then(res => {
|
||||
}, 600).then(res => {
|
||||
if (!res) {
|
||||
this.onAdd(again, true)
|
||||
} else {
|
||||
@ -537,19 +544,7 @@ export default {
|
||||
});
|
||||
this.$refs.input.focus();
|
||||
} else {
|
||||
this.addData = {
|
||||
cascader: [],
|
||||
name: "",
|
||||
content: "",
|
||||
owner: [],
|
||||
assist: [],
|
||||
column_id: 0,
|
||||
times: [],
|
||||
subtasks: [],
|
||||
p_level: 0,
|
||||
p_name: '',
|
||||
p_color: '',
|
||||
};
|
||||
this.addData = $A.cloneJSON(this.addDefault);
|
||||
this.close()
|
||||
}
|
||||
}).catch(({msg}) => {
|
||||
|
||||
@ -468,7 +468,7 @@
|
||||
</div>
|
||||
<div v-if="!taskDetail.id" class="task-load"><Loading/></div>
|
||||
<!-- 提示 -->
|
||||
<TaskExistTips ref="taskExistTipsRef" @onAdd="updateData('times', updateParams)"/>
|
||||
<TaskExistTips ref="taskExistTipsRef" @onContinue="updateData('timesSave', updateParams)"/>
|
||||
<!--任务延期-->
|
||||
<Modal
|
||||
v-model="delayTaskShow"
|
||||
@ -495,7 +495,7 @@
|
||||
</Form>
|
||||
<div slot="footer">
|
||||
<Button @click="delayTaskShow=false">{{$L('关闭')}}</Button>
|
||||
<Button type="primary" @click="onDelay" :loading="delayTaskLoading">{{$L('确定')}}</Button>
|
||||
<Button type="primary" @click="onDelay">{{$L('确定')}}</Button>
|
||||
</div>
|
||||
</Modal>
|
||||
<!--任务描述历史记录-->
|
||||
@ -627,7 +627,6 @@ export default {
|
||||
updateParams: {},
|
||||
|
||||
delayTaskShow: false,
|
||||
delayTaskLoading: false,
|
||||
delayTaskForm: {
|
||||
type: "hour",
|
||||
time: "24",
|
||||
@ -1042,9 +1041,25 @@ export default {
|
||||
break;
|
||||
|
||||
case 'times':
|
||||
if (this.taskDetail.start_at
|
||||
&& (Math.abs($A.dayjs(this.taskDetail.start_at).unix() - $A.dayjs(params.start_at).unix()) > 60 || Math.abs($A.dayjs(this.taskDetail.end_at).unix() - $A.dayjs(params.end_at).unix()) > 60)
|
||||
&& typeof params.desc === "undefined") {
|
||||
// 没有开始时间,直接保存
|
||||
if (!this.taskDetail.start_at) {
|
||||
this.isExistTask(params).then(() => {
|
||||
this.updateData("timesSave", params)
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 时间变化未超过1分钟,不保存
|
||||
if (Math.abs($A.dayjs(this.taskDetail.start_at).unix() - $A.dayjs(params.start_at).unix()) < 60 && Math.abs($A.dayjs(this.taskDetail.end_at).unix() - $A.dayjs(params.end_at).unix()) < 60) {
|
||||
return;
|
||||
}
|
||||
// 已经有备注,直接保存
|
||||
if (params.desc) {
|
||||
this.isExistTask(params).then(() => {
|
||||
this.updateData("timesSave", params)
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 弹出修改备注
|
||||
$A.modalInput({
|
||||
title: `修改${this.taskDetail.parent_id > 0 ? '子任务' : '任务'}时间`,
|
||||
placeholder: `请输入修改备注`,
|
||||
@ -1053,28 +1068,17 @@ export default {
|
||||
if (!desc) {
|
||||
return `请输入修改备注`
|
||||
}
|
||||
this.updateParams = Object.assign(params, {desc})
|
||||
this.updateData("times", this.updateParams)
|
||||
params.desc = desc;
|
||||
this.isExistTask(params).then(() => {
|
||||
this.updateData("timesSave", params)
|
||||
})
|
||||
return false
|
||||
},
|
||||
});
|
||||
})
|
||||
return;
|
||||
}
|
||||
if (typeof params.existTips === "undefined") {
|
||||
this.updateParams = Object.assign(params, {existTips: true})
|
||||
if (params.start_at && params.end_at && this.$refs.taskExistTipsRef) {
|
||||
this.$refs.taskExistTipsRef.isExistTask({
|
||||
taskid: this.taskDetail.id,
|
||||
userids: this.taskDetail.owner_userid,
|
||||
timerange: [params.start_at, params.end_at]
|
||||
}).then(res => {
|
||||
if (!res) {
|
||||
this.updateData("times", this.updateParams)
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
case 'timesSave':
|
||||
action = 'times';
|
||||
this.$set(this.taskDetail, 'times', [params.start_at, params.end_at, params.desc])
|
||||
break;
|
||||
|
||||
@ -1138,6 +1142,22 @@ export default {
|
||||
})
|
||||
},
|
||||
|
||||
isExistTask(params) {
|
||||
if (!params.start_at || !params.end_at) {
|
||||
return
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
this.updateParams = Object.assign({}, params)
|
||||
this.$refs.taskExistTipsRef?.isExistTask({
|
||||
taskid: this.taskDetail.id,
|
||||
userids: this.taskDetail.owner_userid,
|
||||
timerange: [params.start_at, params.end_at]
|
||||
}, 600).then(res => {
|
||||
!res && resolve()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
customLoop() {
|
||||
let value = this.taskDetail.loop || 1
|
||||
$A.Modal.confirm({
|
||||
@ -1762,33 +1782,17 @@ export default {
|
||||
onDelay(){
|
||||
this.$refs.formDelayTaskRef.validate((valid) => {
|
||||
if (!valid) {
|
||||
return;
|
||||
return
|
||||
}
|
||||
this.delayTaskLoading = true;
|
||||
let date = $A.dayjs(this.taskDetail.end_at);
|
||||
if (this.delayTaskForm.type === 'day') {
|
||||
date = date.add(this.delayTaskForm.time, 'day');
|
||||
} else {
|
||||
date = date.add(this.delayTaskForm.time, 'hour');
|
||||
}
|
||||
this.$store.dispatch("taskUpdate", {
|
||||
task_id: this.taskDetail.id,
|
||||
times: [
|
||||
this.taskDetail.start_at,
|
||||
date.format('YYYY-MM-DD HH:mm:ss'),
|
||||
this.delayTaskForm.remark,
|
||||
],
|
||||
}).then(({msg}) => {
|
||||
$A.messageSuccess(msg);
|
||||
this.delayTaskLoading = false;
|
||||
this.delayTaskShow = false;
|
||||
this.delayTaskForm.remark = '';
|
||||
this.$store.dispatch("getTaskOne", this.taskDetail.id).catch(() => {})
|
||||
$A.IDBSet('delayTaskForm', this.delayTaskForm);
|
||||
}).catch(({msg}) => {
|
||||
$A.modalError(msg);
|
||||
this.delayTaskLoading = false;
|
||||
const endAt = $A.dayjs(this.taskDetail.end_at).add(this.delayTaskForm.time, this.delayTaskForm.type)
|
||||
this.updateData('times', {
|
||||
start_at: this.taskDetail.start_at,
|
||||
end_at: endAt.format('YYYY-MM-DD HH:mm:ss'),
|
||||
desc: this.delayTaskForm.remark,
|
||||
})
|
||||
this.delayTaskShow = false
|
||||
this.delayTaskForm.remark = ''
|
||||
$A.IDBSet('delayTaskForm', this.delayTaskForm)
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
</List>
|
||||
<div slot="footer">
|
||||
<Button type="default" @click="show = false">{{ $L('取消') }}</Button>
|
||||
<Button type="primary" @click="onAdd">{{ $L('忽略并继续') }}</Button>
|
||||
<Button type="primary" @click="onContinue">{{ $L('忽略并继续') }}</Button>
|
||||
</div>
|
||||
</Modal>
|
||||
</template>
|
||||
@ -39,16 +39,14 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isExist: false,
|
||||
show: false,
|
||||
tipsTask: [],
|
||||
loadIng: false,
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
onAdd() {
|
||||
this.$emit('onAdd', {})
|
||||
onContinue() {
|
||||
this.$emit('onContinue')
|
||||
this.show = false;
|
||||
},
|
||||
|
||||
@ -68,12 +66,11 @@ export default {
|
||||
return string
|
||||
},
|
||||
|
||||
isExistTask({userids, timerange, taskid}) {
|
||||
this.isExist = false;
|
||||
isExistTask({userids, timerange, taskid}, spinner) {
|
||||
return new Promise(async resolve => {
|
||||
if ($A.isArray(timerange) && (!timerange[0] || !timerange[1])) {
|
||||
resolve(this.isExist)
|
||||
return false;
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
this.$store.dispatch("call", {
|
||||
url: 'project/task/easylists',
|
||||
@ -83,8 +80,12 @@ export default {
|
||||
taskid: taskid
|
||||
},
|
||||
method: 'get',
|
||||
spinner,
|
||||
}).then(({data}) => {
|
||||
if (data.data.length > 0) {
|
||||
if (data.data.length <= 0) {
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
this.show = true;
|
||||
let taskObj = {}
|
||||
userids.map(userid => {
|
||||
@ -98,9 +99,7 @@ export default {
|
||||
});
|
||||
});
|
||||
this.tipsTask = taskObj
|
||||
this.isExist = true;
|
||||
}
|
||||
resolve(this.isExist)
|
||||
resolve(true)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user