perf: 优化创建任务提示时间冲突的逻辑

This commit is contained in:
kuaifan 2024-10-11 16:01:45 +08:00
parent a4525d4519
commit d58246b255
3 changed files with 95 additions and 97 deletions

View File

@ -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}) => {

View File

@ -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)
})
},

View File

@ -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)
});
});
}