mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-15 05:12:49 +00:00
perf: 优化任务默认时间
This commit is contained in:
parent
40b52d8f3b
commit
39211297e2
@ -38,7 +38,7 @@ class SystemController extends AbstractController
|
|||||||
* @apiParam {String} type
|
* @apiParam {String} type
|
||||||
* - get: 获取(默认)
|
* - get: 获取(默认)
|
||||||
* - all: 获取所有(需要管理员权限)
|
* - 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 {Number} ret 返回状态码(1正确、0错误)
|
||||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||||
@ -66,6 +66,7 @@ class SystemController extends AbstractController
|
|||||||
'auto_archived',
|
'auto_archived',
|
||||||
'archived_day',
|
'archived_day',
|
||||||
'task_visible',
|
'task_visible',
|
||||||
|
'task_default_time',
|
||||||
'all_group_mute',
|
'all_group_mute',
|
||||||
'all_group_autoin',
|
'all_group_autoin',
|
||||||
'image_compress',
|
'image_compress',
|
||||||
@ -105,6 +106,7 @@ class SystemController extends AbstractController
|
|||||||
$setting['auto_archived'] = $setting['auto_archived'] ?: 'close';
|
$setting['auto_archived'] = $setting['auto_archived'] ?: 'close';
|
||||||
$setting['archived_day'] = floatval($setting['archived_day']) ?: 7;
|
$setting['archived_day'] = floatval($setting['archived_day']) ?: 7;
|
||||||
$setting['task_visible'] = $setting['task_visible'] ?: 'close';
|
$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_mute'] = $setting['all_group_mute'] ?: 'open';
|
||||||
$setting['all_group_autoin'] = $setting['all_group_autoin'] ?: 'yes';
|
$setting['all_group_autoin'] = $setting['all_group_autoin'] ?: 'yes';
|
||||||
$setting['image_compress'] = $setting['image_compress'] ?: 'open';
|
$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|*)[]}
|
* @returns {(*)[]|[{text, value(): [Date,*]},{text, value(): [Date,*]},{text, value(): [*,*]},{text, value(): [*,*]},{text, value(): [Date,*]},null,null]|(Date|*)[]}
|
||||||
*/
|
*/
|
||||||
timeOptionShortcuts() {
|
timeOptionShortcuts() {
|
||||||
|
const startSecond = $A.Date($A.formatDate("Y-m-d 00:00:00", Math.round(new Date().getTime() / 1000)));
|
||||||
const lastSecond = (e) => {
|
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 [{
|
return [{
|
||||||
text: $A.L('今天'),
|
text: $A.L('今天'),
|
||||||
value() {
|
value() {
|
||||||
return [new Date(), lastSecond(new Date().getTime())];
|
return [startSecond, lastSecond(new Date().getTime())];
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text: $A.L('明天'),
|
text: $A.L('明天'),
|
||||||
value() {
|
value() {
|
||||||
let e = new Date();
|
let e = new Date();
|
||||||
e.setDate(e.getDate() + 1);
|
e.setDate(e.getDate() + 1);
|
||||||
return [new Date(), lastSecond(e.getTime())];
|
return [startSecond, lastSecond(e.getTime())];
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text: $A.L('本周'),
|
text: $A.L('本周'),
|
||||||
value() {
|
value() {
|
||||||
return [new Date(), lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
|
return [startSecond, lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text: $A.L('本月'),
|
text: $A.L('本月'),
|
||||||
value() {
|
value() {
|
||||||
return [new Date(), lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
|
return [startSecond, lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text: $A.L('3天'),
|
text: $A.L('3天'),
|
||||||
value() {
|
value() {
|
||||||
let e = new Date();
|
let e = new Date();
|
||||||
e.setDate(e.getDate() + 2);
|
e.setDate(e.getDate() + 2);
|
||||||
return [new Date(), lastSecond(e.getTime())];
|
return [startSecond, lastSecond(e.getTime())];
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text: $A.L('5天'),
|
text: $A.L('5天'),
|
||||||
value() {
|
value() {
|
||||||
let e = new Date();
|
let e = new Date();
|
||||||
e.setDate(e.getDate() + 4);
|
e.setDate(e.getDate() + 4);
|
||||||
return [new Date(), lastSecond(e.getTime())];
|
return [startSecond, lastSecond(e.getTime())];
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text: $A.L('7天'),
|
text: $A.L('7天'),
|
||||||
value() {
|
value() {
|
||||||
let e = new Date();
|
let e = new Date();
|
||||||
e.setDate(e.getDate() + 6);
|
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"
|
format="yyyy/MM/dd HH:mm"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
placement="bottom"
|
placement="bottom"
|
||||||
@on-change="taskTimeChange(addData.times)"
|
@on-change="taskTimeChange(addData)"
|
||||||
@on-open-change="taskTimeOpenChange">
|
@on-open-change="taskTimeOpenChange">
|
||||||
<div class="advanced-time" @click="taskTimeOpenChange(!taskTimeOpen)">
|
<div class="advanced-time" @click="taskTimeOpenChange(!taskTimeOpen)">
|
||||||
<Icon type="ios-clock-outline" />
|
<Icon type="ios-clock-outline" />
|
||||||
@ -76,7 +76,7 @@
|
|||||||
:placeholder="$L('选择计划范围')"
|
:placeholder="$L('选择计划范围')"
|
||||||
format="yyyy/MM/dd HH:mm"
|
format="yyyy/MM/dd HH:mm"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
@on-change="taskTimeChange(addData.times)"/>
|
@on-change="taskTimeChange(addData)"/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem :label="$L('负责人')" >
|
<FormItem :label="$L('负责人')" >
|
||||||
<UserSelect
|
<UserSelect
|
||||||
@ -157,7 +157,7 @@
|
|||||||
clearable
|
clearable
|
||||||
@on-clear="addData.subtasks.splice(key, 1)"/>
|
@on-clear="addData.subtasks.splice(key, 1)"/>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span="8">
|
<Col span="8" :title="formatDate(item.times)">
|
||||||
<DatePicker
|
<DatePicker
|
||||||
v-model="item.times"
|
v-model="item.times"
|
||||||
:options="timeOptions"
|
:options="timeOptions"
|
||||||
@ -165,7 +165,7 @@
|
|||||||
:placeholder="$L('选择时间')"
|
:placeholder="$L('选择时间')"
|
||||||
format="yyyy/MM/dd HH:mm"
|
format="yyyy/MM/dd HH:mm"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
@on-change="taskTimeChange(item.times)"/>
|
@on-change="taskTimeChange(item)"/>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span="4">
|
<Col span="4">
|
||||||
<UserSelect
|
<UserSelect
|
||||||
@ -277,7 +277,7 @@ export default {
|
|||||||
|
|
||||||
taskTimeOpen: false,
|
taskTimeOpen: false,
|
||||||
|
|
||||||
timeOptions: {shortcuts:$A.timeOptionShortcuts()},
|
timeOptions: {shortcuts: $A.timeOptionShortcuts()},
|
||||||
|
|
||||||
loadIng: 0,
|
loadIng: 0,
|
||||||
isMounted: false,
|
isMounted: false,
|
||||||
@ -404,19 +404,14 @@ export default {
|
|||||||
}
|
}
|
||||||
// 优先级
|
// 优先级
|
||||||
if (this.taskPriority.length > 0) {
|
if (this.taskPriority.length > 0) {
|
||||||
this.choosePriority(this.taskPriority[0]);
|
await this.choosePriority(this.taskPriority[0]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
taskTimeChange(times) {
|
async taskTimeChange(data) {
|
||||||
let tempc = $A.date2string(times, "Y-m-d H:i");
|
const times = $A.date2string(data.times, "Y-m-d H:i");
|
||||||
if (tempc[0] && tempc[1]) {
|
if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
|
||||||
if ($A.rightExists(tempc[0], '00:00') && $A.rightExists(tempc[1], '00:00')) {
|
this.$set(data, 'times', await this.$store.dispatch("taskDefaultTime", times))
|
||||||
this.$set(this.addData, 'times', [
|
|
||||||
tempc[0],
|
|
||||||
tempc[1].replace("00:00", "23:59")
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -424,6 +419,10 @@ export default {
|
|||||||
this.taskTimeOpen = val;
|
this.taskTimeOpen = val;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
formatDate(value) {
|
||||||
|
return value ? $A.date2string(value) : null
|
||||||
|
},
|
||||||
|
|
||||||
onKeydown(e) {
|
onKeydown(e) {
|
||||||
if (e.keyCode === 13) {
|
if (e.keyCode === 13) {
|
||||||
if (e.shiftKey) {
|
if (e.shiftKey) {
|
||||||
@ -446,19 +445,19 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
taskPriorityContent(item) {
|
taskPriorityContent(item) {
|
||||||
let days = $A.runNum(item.days);
|
const days = $A.runNum(item.days);
|
||||||
if (days <= 0) {
|
if (days <= 0) {
|
||||||
return item.name + ' (' + this.$L('无时间限制') + ')';
|
return item.name + ' (' + this.$L('无时间限制') + ')';
|
||||||
}
|
}
|
||||||
return item.name + ' (' + days + this.$L('天') + ')';
|
return item.name + ' (' + days + this.$L('天') + ')';
|
||||||
},
|
},
|
||||||
|
|
||||||
choosePriority(item) {
|
async choosePriority(item) {
|
||||||
let start = new Date();
|
const start = new Date();
|
||||||
let days = $A.runNum(item.days);
|
const days = $A.runNum(item.days);
|
||||||
if (days > 0) {
|
if (days > 0) {
|
||||||
let end = new Date(new Date().setDate(start.getDate() + days));
|
const end = new Date(new Date().setDate(start.getDate() + days));
|
||||||
this.$set(this.addData, 'times', $A.date2string([start, end]))
|
this.$set(this.addData, 'times', await this.$store.dispatch("taskDefaultTime", $A.date2string([start, end])))
|
||||||
} else {
|
} else {
|
||||||
this.$set(this.addData, 'times', [])
|
this.$set(this.addData, 'times', [])
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,6 +34,7 @@
|
|||||||
class="subtask-time"
|
class="subtask-time"
|
||||||
placement="bottom-end"
|
placement="bottom-end"
|
||||||
@on-open-change="timeChange"
|
@on-open-change="timeChange"
|
||||||
|
@on-change="taskTimeChange"
|
||||||
@on-clear="timeClear"
|
@on-clear="timeClear"
|
||||||
@on-ok="timeOk"
|
@on-ok="timeOk"
|
||||||
transfer>
|
transfer>
|
||||||
@ -96,7 +97,8 @@
|
|||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
:placeholder="$L('请设置计划时间')"
|
:placeholder="$L('请设置计划时间')"
|
||||||
:clearable="false"
|
:clearable="false"
|
||||||
:editable="false"/>
|
:editable="false"
|
||||||
|
@on-change="taskTimeChange"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="receive-bottom">
|
<div class="receive-bottom">
|
||||||
<Button size="small" type="text" @click="receiveShow=false">取消</Button>
|
<Button size="small" type="text" @click="receiveShow=false">取消</Button>
|
||||||
@ -260,6 +262,7 @@
|
|||||||
format="yyyy/MM/dd HH:mm"
|
format="yyyy/MM/dd HH:mm"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
@on-open-change="timeChange"
|
@on-open-change="timeChange"
|
||||||
|
@on-change="taskTimeChange"
|
||||||
@on-clear="timeClear"
|
@on-clear="timeClear"
|
||||||
@on-ok="timeOk"
|
@on-ok="timeOk"
|
||||||
transfer>
|
transfer>
|
||||||
@ -532,7 +535,7 @@ export default {
|
|||||||
timeForce: false,
|
timeForce: false,
|
||||||
timeOpen: false,
|
timeOpen: false,
|
||||||
timeValue: [],
|
timeValue: [],
|
||||||
timeOptions: {shortcuts:$A.timeOptionShortcuts()},
|
timeOptions: {shortcuts: $A.timeOptionShortcuts()},
|
||||||
|
|
||||||
loopForce: false,
|
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 = {
|
let data = {
|
||||||
task_id: this.taskDetail.id,
|
task_id: this.taskDetail.id,
|
||||||
owner: this.ownerData.owner_userid
|
owner: this.ownerData.owner_userid
|
||||||
@ -1109,12 +1119,8 @@ export default {
|
|||||||
$A.messageError("任务已被领取");
|
$A.messageError("任务已被领取");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let times = $A.date2string(this.timeValue, "Y-m-d H:i");
|
const times = $A.date2string(this.timeValue, "Y-m-d H:i");
|
||||||
if (times[0] && times[1]) {
|
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 {
|
|
||||||
$A.messageError("请设置计划时间");
|
$A.messageError("请设置计划时间");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1211,12 +1217,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
timeOk() {
|
timeOk() {
|
||||||
let times = $A.date2string(this.timeValue, "Y-m-d H:i");
|
const 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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.updateData('times', {
|
this.updateData('times', {
|
||||||
start_at: times[0],
|
start_at: times[0],
|
||||||
end_at: times[1],
|
end_at: times[1],
|
||||||
|
|||||||
@ -78,6 +78,11 @@
|
|||||||
<div slot="content">{{$L('任务完成 (*) 天后自动归档。', formDatum.archived_day)}}</div>
|
<div slot="content">{{$L('任务完成 (*) 天后自动归档。', formDatum.archived_day)}}</div>
|
||||||
</ETooltip>
|
</ETooltip>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="block-setting-box">
|
||||||
|
<h3>{{ $L('任务相关') }}</h3>
|
||||||
|
<div class="form-box">
|
||||||
<FormItem :label="$L('可见性选项')" prop="taskVisible">
|
<FormItem :label="$L('可见性选项')" prop="taskVisible">
|
||||||
<RadioGroup v-model="formDatum.task_visible">
|
<RadioGroup v-model="formDatum.task_visible">
|
||||||
<Radio label="open">{{$L('保持')}}</Radio>
|
<Radio label="open">{{$L('保持')}}</Radio>
|
||||||
@ -86,6 +91,15 @@
|
|||||||
<div v-if="formDatum.task_visible == 'open'" class="form-tip">{{$L('保持:任务详情页可见性选项保持显示。')}}</div>
|
<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>
|
<div v-else-if="formDatum.task_visible == 'close'" class="form-tip">{{$L('自动:默认值情况下显示在合并项目,设置时保持显示。')}}</div>
|
||||||
</FormItem>
|
</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>
|
</div>
|
||||||
<div class="block-setting-box">
|
<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);
|
$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