perf: 优化任务默认时间

This commit is contained in:
kuaifan 2023-07-25 17:11:28 +08:00
parent 40b52d8f3b
commit 39211297e2
7 changed files with 121 additions and 46 deletions

View File

@ -38,7 +38,7 @@ class SystemController extends AbstractController
* @apiParam {String} type
* - get: 获取(默认)
* - all: 获取所有(需要管理员权限)
* - save: 保存设置(参数:['reg', 'reg_identity', 'reg_invite', 'login_code', 'password_policy', 'project_invite', 'chat_information', 'anon_message', 'auto_archived', 'archived_day', 'task_visible', 'all_group_mute', 'all_group_autoin', 'image_compress', 'image_save_local', 'start_home']
* - save: 保存设置(参数:['reg', 'reg_identity', 'reg_invite', 'login_code', 'password_policy', 'project_invite', 'chat_information', 'anon_message', 'auto_archived', 'archived_day', 'task_visible', 'task_default_time', 'all_group_mute', 'all_group_autoin', 'image_compress', 'image_save_local', 'start_home']
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
@ -66,6 +66,7 @@ class SystemController extends AbstractController
'auto_archived',
'archived_day',
'task_visible',
'task_default_time',
'all_group_mute',
'all_group_autoin',
'image_compress',
@ -105,6 +106,7 @@ class SystemController extends AbstractController
$setting['auto_archived'] = $setting['auto_archived'] ?: 'close';
$setting['archived_day'] = floatval($setting['archived_day']) ?: 7;
$setting['task_visible'] = $setting['task_visible'] ?: 'close';
$setting['task_default_time'] = $setting['task_default_time'] ? Base::json2array($setting['task_default_time']) : ['09:00', '18:00'];
$setting['all_group_mute'] = $setting['all_group_mute'] ?: 'open';
$setting['all_group_autoin'] = $setting['all_group_autoin'] ?: 'yes';
$setting['image_compress'] = $setting['image_compress'] ?: 'open';

View File

@ -1253,3 +1253,14 @@ Markdown 格式发送
计划时间冲突提示
忽略并继续
你确定要清除缓存吗?
可见性选项
保持
保持:任务详情页可见性选项保持显示。
自动:默认值情况下显示在合并项目,设置时保持显示。
修改子任务时间
请输入修改备注
任务默认时间
请选择默认时间
添加任务计划时间默认时分。

View File

@ -540,51 +540,52 @@
* @returns {(*)[]|[{text, value(): [Date,*]},{text, value(): [Date,*]},{text, value(): [*,*]},{text, value(): [*,*]},{text, value(): [Date,*]},null,null]|(Date|*)[]}
*/
timeOptionShortcuts() {
const startSecond = $A.Date($A.formatDate("Y-m-d 00:00:00", Math.round(new Date().getTime() / 1000)));
const lastSecond = (e) => {
return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000)))
return $A.Date($A.formatDate("Y-m-d 00:00:00", Math.round(e / 1000)))
};
return [{
text: $A.L('今天'),
value() {
return [new Date(), lastSecond(new Date().getTime())];
return [startSecond, lastSecond(new Date().getTime())];
}
}, {
text: $A.L('明天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 1);
return [new Date(), lastSecond(e.getTime())];
return [startSecond, lastSecond(e.getTime())];
}
}, {
text: $A.L('本周'),
value() {
return [new Date(), lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
return [startSecond, lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
}
}, {
text: $A.L('本月'),
value() {
return [new Date(), lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
return [startSecond, lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
}
}, {
text: $A.L('3天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 2);
return [new Date(), lastSecond(e.getTime())];
return [startSecond, lastSecond(e.getTime())];
}
}, {
text: $A.L('5天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 4);
return [new Date(), lastSecond(e.getTime())];
return [startSecond, lastSecond(e.getTime())];
}
}, {
text: $A.L('7天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 6);
return [new Date(), lastSecond(e.getTime())];
return [startSecond, lastSecond(e.getTime())];
}
}];
},

View File

@ -57,7 +57,7 @@
format="yyyy/MM/dd HH:mm"
type="datetimerange"
placement="bottom"
@on-change="taskTimeChange(addData.times)"
@on-change="taskTimeChange(addData)"
@on-open-change="taskTimeOpenChange">
<div class="advanced-time" @click="taskTimeOpenChange(!taskTimeOpen)">
<Icon type="ios-clock-outline" />
@ -76,7 +76,7 @@
:placeholder="$L('选择计划范围')"
format="yyyy/MM/dd HH:mm"
type="datetimerange"
@on-change="taskTimeChange(addData.times)"/>
@on-change="taskTimeChange(addData)"/>
</FormItem>
<FormItem :label="$L('负责人')" >
<UserSelect
@ -157,7 +157,7 @@
clearable
@on-clear="addData.subtasks.splice(key, 1)"/>
</Col>
<Col span="8">
<Col span="8" :title="formatDate(item.times)">
<DatePicker
v-model="item.times"
:options="timeOptions"
@ -165,7 +165,7 @@
:placeholder="$L('选择时间')"
format="yyyy/MM/dd HH:mm"
type="datetimerange"
@on-change="taskTimeChange(item.times)"/>
@on-change="taskTimeChange(item)"/>
</Col>
<Col span="4">
<UserSelect
@ -277,7 +277,7 @@ export default {
taskTimeOpen: false,
timeOptions: {shortcuts:$A.timeOptionShortcuts()},
timeOptions: {shortcuts: $A.timeOptionShortcuts()},
loadIng: 0,
isMounted: false,
@ -404,19 +404,14 @@ export default {
}
//
if (this.taskPriority.length > 0) {
this.choosePriority(this.taskPriority[0]);
await this.choosePriority(this.taskPriority[0]);
}
},
taskTimeChange(times) {
let tempc = $A.date2string(times, "Y-m-d H:i");
if (tempc[0] && tempc[1]) {
if ($A.rightExists(tempc[0], '00:00') && $A.rightExists(tempc[1], '00:00')) {
this.$set(this.addData, 'times', [
tempc[0],
tempc[1].replace("00:00", "23:59")
])
}
async taskTimeChange(data) {
const times = $A.date2string(data.times, "Y-m-d H:i");
if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
this.$set(data, 'times', await this.$store.dispatch("taskDefaultTime", times))
}
},
@ -424,6 +419,10 @@ export default {
this.taskTimeOpen = val;
},
formatDate(value) {
return value ? $A.date2string(value) : null
},
onKeydown(e) {
if (e.keyCode === 13) {
if (e.shiftKey) {
@ -446,19 +445,19 @@ export default {
},
taskPriorityContent(item) {
let days = $A.runNum(item.days);
const days = $A.runNum(item.days);
if (days <= 0) {
return item.name + ' (' + this.$L('无时间限制') + ')';
}
return item.name + ' (' + days + this.$L('天') + ')';
},
choosePriority(item) {
let start = new Date();
let days = $A.runNum(item.days);
async choosePriority(item) {
const start = new Date();
const days = $A.runNum(item.days);
if (days > 0) {
let end = new Date(new Date().setDate(start.getDate() + days));
this.$set(this.addData, 'times', $A.date2string([start, end]))
const end = new Date(new Date().setDate(start.getDate() + days));
this.$set(this.addData, 'times', await this.$store.dispatch("taskDefaultTime", $A.date2string([start, end])))
} else {
this.$set(this.addData, 'times', [])
}

View File

@ -34,6 +34,7 @@
class="subtask-time"
placement="bottom-end"
@on-open-change="timeChange"
@on-change="taskTimeChange"
@on-clear="timeClear"
@on-ok="timeOk"
transfer>
@ -96,7 +97,8 @@
type="datetimerange"
:placeholder="$L('请设置计划时间')"
:clearable="false"
:editable="false"/>
:editable="false"
@on-change="taskTimeChange"/>
</div>
<div class="receive-bottom">
<Button size="small" type="text" @click="receiveShow=false">取消</Button>
@ -260,6 +262,7 @@
format="yyyy/MM/dd HH:mm"
type="datetimerange"
@on-open-change="timeChange"
@on-change="taskTimeChange"
@on-clear="timeClear"
@on-ok="timeOk"
transfer>
@ -532,7 +535,7 @@ export default {
timeForce: false,
timeOpen: false,
timeValue: [],
timeOptions: {shortcuts:$A.timeOptionShortcuts()},
timeOptions: {shortcuts: $A.timeOptionShortcuts()},
loopForce: false,
@ -1097,7 +1100,14 @@ export default {
});
},
onOwner(pick) {
async taskTimeChange() {
const times = $A.date2string(this.timeValue, "Y-m-d H:i");
if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
this.timeValue = await this.$store.dispatch("taskDefaultTime", times)
}
},
async onOwner(pick) {
let data = {
task_id: this.taskDetail.id,
owner: this.ownerData.owner_userid
@ -1109,12 +1119,8 @@ export default {
$A.messageError("任务已被领取");
return;
}
let times = $A.date2string(this.timeValue, "Y-m-d H:i");
if (times[0] && times[1]) {
if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
times[1] = times[1].replace("00:00", "23:59");
}
} else {
const times = $A.date2string(this.timeValue, "Y-m-d H:i");
if (!(times[0] && times[1])) {
$A.messageError("请设置计划时间");
return;
}
@ -1211,12 +1217,7 @@ export default {
},
timeOk() {
let times = $A.date2string(this.timeValue, "Y-m-d H:i");
if (times[0] && times[1]) {
if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
times[1] = times[1].replace("00:00", "23:59");
}
}
const times = $A.date2string(this.timeValue, "Y-m-d H:i");
this.updateData('times', {
start_at: times[0],
end_at: times[1],

View File

@ -78,6 +78,11 @@
<div slot="content">{{$L('任务完成 (*) 天后自动归档。', formDatum.archived_day)}}</div>
</ETooltip>
</FormItem>
</div>
</div>
<div class="block-setting-box">
<h3>{{ $L('任务相关') }}</h3>
<div class="form-box">
<FormItem :label="$L('可见性选项')" prop="taskVisible">
<RadioGroup v-model="formDatum.task_visible">
<Radio label="open">{{$L('保持')}}</Radio>
@ -86,6 +91,15 @@
<div v-if="formDatum.task_visible == 'open'" class="form-tip">{{$L('保持任务详情页可见性选项保持显示')}}</div>
<div v-else-if="formDatum.task_visible == 'close'" class="form-tip">{{$L('自动:默认值情况下显示在合并项目,设置时保持显示。')}}</div>
</FormItem>
<FormItem :label="$L('任务默认时间')" prop="taskDefaultTime">
<TimePicker
v-model="formDatum.task_default_time"
type="timerange"
format="HH:mm"
:placeholder="$L('请选择默认时间')"
transfer/>
<div class="form-tip">{{$L('添加任务计划时间默认时分。')}}</div>
</FormItem>
</div>
</div>
<div class="block-setting-box">

View File

@ -2184,6 +2184,53 @@ export default {
$A.IDBSave("cacheTaskBrowse", state.cacheTaskBrowse);
},
/**
* 任务默认时间
* @param state
* @param dispatch
* @param array
* @returns {Promise<unknown>}
*/
taskDefaultTime({state, dispatch}, array) {
return new Promise(async resolve => {
if ($A.isArray(array)) {
array[0] = await dispatch("taskDefaultStartTime", array[0])
array[1] = await dispatch("taskDefaultEndTime", array[1])
}
resolve(array)
});
},
/**
* 任务默认开始时间
* @param state
* @param value
* @returns {Promise<unknown>}
*/
taskDefaultStartTime({state}, value) {
return new Promise(resolve => {
if (/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/.test(value)) {
value = value.replace(/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/, "$1" + state.systemConfig.task_default_time[0])
}
resolve(value)
});
},
/**
* 任务默认结束时间
* @param state
* @param value
* @returns {Promise<unknown>}
*/
taskDefaultEndTime({state}, value) {
return new Promise(resolve => {
if (/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/.test(value)) {
value = value.replace(/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/, "$1" + state.systemConfig.task_default_time[1])
}
resolve(value)
});
},
/** *****************************************************************************************/
/** ************************************** 会话 **********************************************/
/** *****************************************************************************************/