mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 11:19:56 +00:00
perf: 优化任务默认时间
This commit is contained in:
parent
40b52d8f3b
commit
39211297e2
@ -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';
|
||||
|
||||
@ -1253,3 +1253,14 @@ Markdown 格式发送
|
||||
计划时间冲突提示
|
||||
忽略并继续
|
||||
你确定要清除缓存吗?
|
||||
|
||||
可见性选项
|
||||
保持
|
||||
保持:任务详情页可见性选项保持显示。
|
||||
自动:默认值情况下显示在合并项目,设置时保持显示。
|
||||
修改子任务时间
|
||||
请输入修改备注
|
||||
|
||||
任务默认时间
|
||||
请选择默认时间
|
||||
添加任务计划时间默认时分。
|
||||
|
||||
17
resources/assets/js/functions/web.js
vendored
17
resources/assets/js/functions/web.js
vendored
@ -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())];
|
||||
}
|
||||
}];
|
||||
},
|
||||
|
||||
@ -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', [])
|
||||
}
|
||||
@ -533,7 +532,7 @@ export default {
|
||||
$A.messageError("任务描述不能为空");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
this.loadIng++;
|
||||
|
||||
// 存在任务提示
|
||||
|
||||
@ -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],
|
||||
|
||||
@ -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">
|
||||
|
||||
47
resources/assets/js/store/actions.js
vendored
47
resources/assets/js/store/actions.js
vendored
@ -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)
|
||||
});
|
||||
},
|
||||
|
||||
/** *****************************************************************************************/
|
||||
/** ************************************** 会话 **********************************************/
|
||||
/** *****************************************************************************************/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user