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>
</div> </div>
<TaskExistTips ref="taskExistTipsRef" @onAdd="onAdd(again,true)"/> <TaskExistTips ref="taskExistTipsRef" @onContinue="onAdd(again, true)"/>
</div> </div>
</template> </template>
@ -224,6 +224,7 @@ export default {
data() { data() {
return { return {
addData: { addData: {
//
cascader: [], cascader: [],
name: "", name: "",
content: "", content: "",
@ -233,6 +234,7 @@ export default {
column_id: 0, column_id: 0,
times: [], times: [],
subtasks: [], subtasks: [],
//
p_level: 0, p_level: 0,
p_name: '', p_name: '',
p_color: '', p_color: '',
@ -240,6 +242,7 @@ export default {
visibility_appoint: 1, visibility_appoint: 1,
visibility_appointor: [], visibility_appointor: [],
}, },
addDefault: {},
cascaderShow: false, cascaderShow: false,
cascaderData: [], cascaderData: [],
@ -263,6 +266,10 @@ export default {
} }
}, },
created() {
this.addDefault = $A.cloneJSON(this.addData);
},
async mounted() { async mounted() {
this.initCascaderData(); this.initCascaderData();
await this.initProjectData(); await this.initProjectData();
@ -515,7 +522,7 @@ export default {
this.$refs.taskExistTipsRef.isExistTask({ this.$refs.taskExistTipsRef.isExistTask({
userids: this.addData.owner, userids: this.addData.owner,
timerange: this.addData.times timerange: this.addData.times
}).then(res => { }, 600).then(res => {
if (!res) { if (!res) {
this.onAdd(again, true) this.onAdd(again, true)
} else { } else {
@ -537,19 +544,7 @@ export default {
}); });
this.$refs.input.focus(); this.$refs.input.focus();
} else { } else {
this.addData = { this.addData = $A.cloneJSON(this.addDefault);
cascader: [],
name: "",
content: "",
owner: [],
assist: [],
column_id: 0,
times: [],
subtasks: [],
p_level: 0,
p_name: '',
p_color: '',
};
this.close() this.close()
} }
}).catch(({msg}) => { }).catch(({msg}) => {

View File

@ -468,7 +468,7 @@
</div> </div>
<div v-if="!taskDetail.id" class="task-load"><Loading/></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 <Modal
v-model="delayTaskShow" v-model="delayTaskShow"
@ -495,7 +495,7 @@
</Form> </Form>
<div slot="footer"> <div slot="footer">
<Button @click="delayTaskShow=false">{{$L('关闭')}}</Button> <Button @click="delayTaskShow=false">{{$L('关闭')}}</Button>
<Button type="primary" @click="onDelay" :loading="delayTaskLoading">{{$L('确定')}}</Button> <Button type="primary" @click="onDelay">{{$L('确定')}}</Button>
</div> </div>
</Modal> </Modal>
<!--任务描述历史记录--> <!--任务描述历史记录-->
@ -627,7 +627,6 @@ export default {
updateParams: {}, updateParams: {},
delayTaskShow: false, delayTaskShow: false,
delayTaskLoading: false,
delayTaskForm: { delayTaskForm: {
type: "hour", type: "hour",
time: "24", time: "24",
@ -1042,39 +1041,44 @@ export default {
break; break;
case 'times': 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) if (!this.taskDetail.start_at) {
&& typeof params.desc === "undefined") { this.isExistTask(params).then(() => {
$A.modalInput({ this.updateData("timesSave", params)
title: `修改${this.taskDetail.parent_id > 0 ? '子任务' : '任务'}时间`,
placeholder: `请输入修改备注`,
okText: "确定",
onOk: (desc) => {
if (!desc) {
return `请输入修改备注`
}
this.updateParams = Object.assign(params, {desc})
this.updateData("times", this.updateParams)
return false
},
}); });
return; return;
} }
if (typeof params.existTips === "undefined") { // 1
this.updateParams = Object.assign(params, {existTips: true}) 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) {
if (params.start_at && params.end_at && this.$refs.taskExistTipsRef) { return;
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;
}
} }
//
if (params.desc) {
this.isExistTask(params).then(() => {
this.updateData("timesSave", params)
});
return;
}
//
$A.modalInput({
title: `修改${this.taskDetail.parent_id > 0 ? '子任务' : '任务'}时间`,
placeholder: `请输入修改备注`,
okText: "确定",
onOk: (desc) => {
if (!desc) {
return `请输入修改备注`
}
params.desc = desc;
this.isExistTask(params).then(() => {
this.updateData("timesSave", params)
})
return false
},
})
return;
case 'timesSave':
action = 'times';
this.$set(this.taskDetail, 'times', [params.start_at, params.end_at, params.desc]) this.$set(this.taskDetail, 'times', [params.start_at, params.end_at, params.desc])
break; 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() { customLoop() {
let value = this.taskDetail.loop || 1 let value = this.taskDetail.loop || 1
$A.Modal.confirm({ $A.Modal.confirm({
@ -1762,33 +1782,17 @@ export default {
onDelay(){ onDelay(){
this.$refs.formDelayTaskRef.validate((valid) => { this.$refs.formDelayTaskRef.validate((valid) => {
if (!valid) { if (!valid) {
return; return
} }
this.delayTaskLoading = true; const endAt = $A.dayjs(this.taskDetail.end_at).add(this.delayTaskForm.time, this.delayTaskForm.type)
let date = $A.dayjs(this.taskDetail.end_at); this.updateData('times', {
if (this.delayTaskForm.type === 'day') { start_at: this.taskDetail.start_at,
date = date.add(this.delayTaskForm.time, 'day'); end_at: endAt.format('YYYY-MM-DD HH:mm:ss'),
} else { desc: this.delayTaskForm.remark,
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;
}) })
this.delayTaskShow = false
this.delayTaskForm.remark = ''
$A.IDBSet('delayTaskForm', this.delayTaskForm)
}) })
}, },

View File

@ -23,7 +23,7 @@
</List> </List>
<div slot="footer"> <div slot="footer">
<Button type="default" @click="show = false">{{ $L('取消') }}</Button> <Button type="default" @click="show = false">{{ $L('取消') }}</Button>
<Button type="primary" @click="onAdd">{{ $L('忽略并继续') }}</Button> <Button type="primary" @click="onContinue">{{ $L('忽略并继续') }}</Button>
</div> </div>
</Modal> </Modal>
</template> </template>
@ -39,16 +39,14 @@ export default {
}, },
data() { data() {
return { return {
isExist: false,
show: false, show: false,
tipsTask: [], tipsTask: [],
loadIng: false,
} }
}, },
methods: { methods: {
onAdd() { onContinue() {
this.$emit('onAdd', {}) this.$emit('onContinue')
this.show = false; this.show = false;
}, },
@ -68,12 +66,11 @@ export default {
return string return string
}, },
isExistTask({userids, timerange, taskid}) { isExistTask({userids, timerange, taskid}, spinner) {
this.isExist = false;
return new Promise(async resolve => { return new Promise(async resolve => {
if ($A.isArray(timerange) && (!timerange[0] || !timerange[1])) { if ($A.isArray(timerange) && (!timerange[0] || !timerange[1])) {
resolve(this.isExist) resolve(false)
return false; return
} }
this.$store.dispatch("call", { this.$store.dispatch("call", {
url: 'project/task/easylists', url: 'project/task/easylists',
@ -83,24 +80,26 @@ export default {
taskid: taskid taskid: taskid
}, },
method: 'get', method: 'get',
spinner,
}).then(({data}) => { }).then(({data}) => {
if (data.data.length > 0) { if (data.data.length <= 0) {
this.show = true; resolve(false)
let taskObj = {} return
userids.map(userid => {
data.data.map(h => {
if ((h.task_user || []).map(k => k.owner ? k.userid : 0).indexOf(userid) !== -1) {
if (!taskObj[userid]) {
taskObj[userid] = [];
}
taskObj[userid].push(h);
}
});
});
this.tipsTask = taskObj
this.isExist = true;
} }
resolve(this.isExist) this.show = true;
let taskObj = {}
userids.map(userid => {
data.data.map(h => {
if ((h.task_user || []).map(k => k.owner ? k.userid : 0).indexOf(userid) !== -1) {
if (!taskObj[userid]) {
taskObj[userid] = [];
}
taskObj[userid].push(h);
}
});
});
this.tipsTask = taskObj
resolve(true)
}); });
}); });
} }