Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
c2f3a827
提交
c2f3a827
authored
1月 19, 2018
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
任务日志界面操作国际化迁移完成
上级
844f51c5
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
87 行增加
和
51 行删除
+87
-51
JobLogController.java
...n/java/com/xxl/job/admin/controller/JobLogController.java
+2
-0
message.properties
xxl-job-admin/src/main/resources/i18n/message.properties
+40
-3
joblog.index.ftl
.../src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
+41
-41
index.js
xxl-job-admin/src/main/webapp/static/js/index.js
+4
-7
joblog.index.1.js
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
+0
-0
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
浏览文件 @
c2f3a827
...
@@ -10,6 +10,7 @@ import com.xxl.job.admin.dao.XxlJobLogDao;
...
@@ -10,6 +10,7 @@ import com.xxl.job.admin.dao.XxlJobLogDao;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.LogResult
;
import
com.xxl.job.core.biz.model.LogResult
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.glue.GlueTypeEnum
;
import
com.xxl.job.core.rpc.netcom.NetComClientProxy
;
import
com.xxl.job.core.rpc.netcom.NetComClientProxy
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.time.DateUtils
;
import
org.apache.commons.lang3.time.DateUtils
;
...
@@ -50,6 +51,7 @@ public class JobLogController {
...
@@ -50,6 +51,7 @@ public class JobLogController {
// 执行器列表
// 执行器列表
List
<
XxlJobGroup
>
jobGroupList
=
xxlJobGroupDao
.
findAll
();
List
<
XxlJobGroup
>
jobGroupList
=
xxlJobGroupDao
.
findAll
();
model
.
addAttribute
(
"JobGroupList"
,
jobGroupList
);
model
.
addAttribute
(
"JobGroupList"
,
jobGroupList
);
model
.
addAttribute
(
"GlueTypeEnum"
,
GlueTypeEnum
.
values
());
// 任务
// 任务
if
(
jobId
>
0
)
{
if
(
jobId
>
0
)
{
...
...
xxl-job-admin/src/main/resources/i18n/message.properties
浏览文件 @
c2f3a827
...
@@ -18,14 +18,21 @@ system_add_suc=新增成功
...
@@ -18,14 +18,21 @@ system_add_suc=新增成功
system_add_fail
=
新增失败
system_add_fail
=
新增失败
system_update_suc
=
更新成功
system_update_suc
=
更新成功
system_update_fail
=
更新失败
system_update_fail
=
更新失败
system_all
=
全部
system_api_error
=
接口异常
system_show
=
查看
system_empty
=
无
system_opt_suc
=
操作成功
system_opt_fail
=
操作失败
## daterangepicker
## daterangepicker
daterangepicker_ranges_recent_hour
=
最近一小时
daterangepicker_ranges_today
=
今日
daterangepicker_ranges_today
=
今日
daterangepicker_ranges_yesterday
=
昨日
daterangepicker_ranges_yesterday
=
昨日
daterangepicker_ranges_this_month
=
本月
daterangepicker_ranges_this_month
=
本月
daterangepicker_ranges_last_month
=
上个月
daterangepicker_ranges_last_month
=
上个月
daterangepicker_ranges_recent_week
=
最近
1
周
daterangepicker_ranges_recent_week
=
最近
一
周
daterangepicker_ranges_recent_month
=
最近
1
月
daterangepicker_ranges_recent_month
=
最近
一
月
daterangepicker_custom_name
=
自定义
daterangepicker_custom_name
=
自定义
daterangepicker_custom_starttime
=
起始时间
daterangepicker_custom_starttime
=
起始时间
daterangepicker_custom_endtime
=
结束时间
daterangepicker_custom_endtime
=
结束时间
...
@@ -87,13 +94,14 @@ job_dashboard_rate_report_fail_count=失败调度次数
...
@@ -87,13 +94,14 @@ job_dashboard_rate_report_fail_count=失败调度次数
## job info
## job info
jobinfo_name
=
任务管理
jobinfo_name
=
任务管理
jobinfo_job
=
任务
jobinfo_field_add
=
新增任务
jobinfo_field_add
=
新增任务
jobinfo_field_update
=
更新任务
jobinfo_field_update
=
更新任务
jobinfo_field_id
=
任务ID
jobinfo_field_id
=
任务ID
jobinfo_field_jobgroup
=
执行器
jobinfo_field_jobgroup
=
执行器
jobinfo_field_jobdesc
=
任务描述
jobinfo_field_jobdesc
=
任务描述
jobinfo_field_gluetype
=
运行模式
jobinfo_field_gluetype
=
运行模式
jobinfo_field_executorparam
=
执行
参数
jobinfo_field_executorparam
=
任务
参数
jobinfo_field_author
=
负责人
jobinfo_field_author
=
负责人
jobinfo_field_alarmemail
=
报警邮件
jobinfo_field_alarmemail
=
报警邮件
jobinfo_field_alarmemail_placeholder
=
请输入报警邮件,多个邮件地址则逗号分隔
jobinfo_field_alarmemail_placeholder
=
请输入报警邮件,多个邮件地址则逗号分隔
...
@@ -114,6 +122,35 @@ jobinfo_opt_del=删除
...
@@ -114,6 +122,35 @@ jobinfo_opt_del=删除
## job log
## job log
joblog_name
=
调度日志
joblog_name
=
调度日志
joblog_status
=
状态
joblog_status_all
=
全部
joblog_status_suc
=
成功
joblog_status_fail
=
失败
joblog_status_running
=
进行中
joblog_field_triggerTime
=
调度时间
joblog_field_triggerCode
=
调度结果
joblog_field_triggerMsg
=
调度备注
joblog_field_handleTime
=
执行时间
joblog_field_handleCode
=
执行结果
joblog_field_handleMsg
=
执行备注
joblog_field_executorAddress
=
执行器地址
joblog_clean
=
清理
joblog_clean_log
=
日志清理
joblog_clean_type
=
清理方式
joblog_clean_type_1
=
清理一个月之前日志数据
joblog_clean_type_2
=
清理三个月之前日志数据
joblog_clean_type_3
=
清理六个月之前日志数据
joblog_clean_type_4
=
清理一年之前日志数据
joblog_clean_type_5
=
清理一千条以前日志数据
joblog_clean_type_6
=
清理一万条以前日志数据
joblog_clean_type_7
=
清理三万条以前日志数据
joblog_clean_type_8
=
清理十万条以前日志数据
joblog_clean_type_9
=
清理所有日志数据
joblog_handleCode_200
=
成功
joblog_handleCode_500
=
失败
joblog_handleCode_501
=
失败重试
joblog_rolling_log
=
执行日志
joblog_kill_log
=
终止任务
## job group
## job group
jobgroup_name
=
执行器管理
jobgroup_name
=
执行器管理
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
浏览文件 @
c2f3a827
...
@@ -21,12 +21,6 @@
...
@@ -21,12 +21,6 @@
<!-- Content Header (Page header) -->
<!-- Content Header (Page header) -->
<section
class=
"content-header"
>
<section
class=
"content-header"
>
<h1>
${I18n.joblog_name}
</h1>
<h1>
${I18n.joblog_name}
</h1>
<!--
<ol class="breadcrumb">
<li><a><i class="fa fa-dashboard"></i>调度日志</a></li>
<li class="active">调度管理</li>
</ol>
-->
</section>
</section>
<!-- Main content -->
<!-- Main content -->
...
@@ -34,9 +28,9 @@
...
@@ -34,9 +28,9 @@
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-xs-2"
>
<div
class=
"col-xs-2"
>
<div
class=
"input-group"
>
<div
class=
"input-group"
>
<span
class=
"input-group-addon"
>
执行器
</span>
<span
class=
"input-group-addon"
>
${I18n.jobinfo_field_jobgroup}
</span>
<select
class=
"form-control"
id=
"jobGroup"
paramVal=
"<#if jobInfo?exists>${jobInfo.jobGroup}</#if>"
>
<select
class=
"form-control"
id=
"jobGroup"
paramVal=
"<#if jobInfo?exists>${jobInfo.jobGroup}</#if>"
>
<option
value=
"0"
>
全部
</option>
<option
value=
"0"
>
${I18n.system_all}
</option>
<
#
list
JobGroupList
as
group
>
<
#
list
JobGroupList
as
group
>
<option
value=
"${group.id}"
>
${group.title}
</option>
<option
value=
"${group.id}"
>
${group.title}
</option>
</
#
list>
</
#
list>
...
@@ -45,21 +39,21 @@
...
@@ -45,21 +39,21 @@
</div>
</div>
<div
class=
"col-xs-2"
>
<div
class=
"col-xs-2"
>
<div
class=
"input-group"
>
<div
class=
"input-group"
>
<span
class=
"input-group-addon"
>
任务
</span>
<span
class=
"input-group-addon"
>
${I18n.jobinfo_job}
</span>
<select
class=
"form-control"
id=
"jobId"
paramVal=
"<#if jobInfo?exists>${jobInfo.id}</#if>"
>
<select
class=
"form-control"
id=
"jobId"
paramVal=
"<#if jobInfo?exists>${jobInfo.id}</#if>"
>
<option
value=
"0"
>
全部
</option>
<option
value=
"0"
>
${I18n.system_all}
</option>
</select>
</select>
</div>
</div>
</div>
</div>
<div
class=
"col-xs-2"
>
<div
class=
"col-xs-2"
>
<div
class=
"input-group"
>
<div
class=
"input-group"
>
<span
class=
"input-group-addon"
>
状态
</span>
<span
class=
"input-group-addon"
>
${I18n.joblog_status}
</span>
<select
class=
"form-control"
id=
"logStatus"
>
<select
class=
"form-control"
id=
"logStatus"
>
<option
value=
"-1"
>
全部
</option>
<option
value=
"-1"
>
${I18n.joblog_status_all}
</option>
<option
value=
"1"
>
成功
</option>
<option
value=
"1"
>
${I18n.joblog_status_suc}
</option>
<option
value=
"2"
>
失败
</option>
<option
value=
"2"
>
${I18n.joblog_status_fail}
</option>
<option
value=
"3"
>
进行中
</option>
<option
value=
"3"
>
${I18n.joblog_status_running}
</option>
</select>
</select>
</div>
</div>
</div>
</div>
...
@@ -74,11 +68,11 @@
...
@@ -74,11 +68,11 @@
</div>
</div>
<div
class=
"col-xs-1"
>
<div
class=
"col-xs-1"
>
<button
class=
"btn btn-block btn-info"
id=
"searchBtn"
>
搜索
</button>
<button
class=
"btn btn-block btn-info"
id=
"searchBtn"
>
${I18n.system_search}
</button>
</div>
</div>
<div
class=
"col-xs-1"
>
<div
class=
"col-xs-1"
>
<button
class=
"btn btn-block btn-nomal"
id=
"clearLog"
>
清理
</button>
<button
class=
"btn btn-block btn-nomal"
id=
"clearLog"
>
${I18n.joblog_clean}
</button>
</div>
</div>
</div>
</div>
...
@@ -90,18 +84,18 @@
...
@@ -90,18 +84,18 @@
<table
id=
"joblog_list"
class=
"table table-bordered table-striped display"
width=
"100%"
>
<table
id=
"joblog_list"
class=
"table table-bordered table-striped display"
width=
"100%"
>
<thead>
<thead>
<tr>
<tr>
<th
name=
"jobId"
>
任务ID
</th>
<th
name=
"jobId"
>
${I18n.jobinfo_field_id}
</th>
<th
name=
"jobGroup"
>
执行器ID
</th>
<th
name=
"jobGroup"
>
jobGroup
</th>
<
#
--
<
th
name=
"executorAddress"
>
执行器地址
</th>
<
#
--
<
th
name=
"executorAddress"
>
执行器地址
</th>
<th
name=
"glueType"
>
运行模式
</th>
<th
name=
"glueType"
>
运行模式
</th>
<th
name=
"executorParam"
>
任务参数
</th>
-->
<th
name=
"executorParam"
>
任务参数
</th>
-->
<th
name=
"triggerTime"
>
调度时间
</th>
<th
name=
"triggerTime"
>
${I18n.joblog_field_triggerTime}
</th>
<th
name=
"triggerCode"
>
调度结果
</th>
<th
name=
"triggerCode"
>
${I18n.joblog_field_triggerCode}
</th>
<th
name=
"triggerMsg"
>
调度备注
</th>
<th
name=
"triggerMsg"
>
${I18n.joblog_field_triggerMsg}
</th>
<th
name=
"handleTime"
>
执行时间
</th>
<th
name=
"handleTime"
>
${I18n.joblog_field_handleTime}
</th>
<th
name=
"handleCode"
>
执行结果
</th>
<th
name=
"handleCode"
>
${I18n.joblog_field_handleCode}
</th>
<th
name=
"handleMsg"
>
执行备注
</th>
<th
name=
"handleMsg"
>
${I18n.joblog_field_handleMsg}
</th>
<th
name=
"handleMsg"
>
操作
</th>
<th
name=
"handleMsg"
>
${I18n.system_opt}
</th>
</tr>
</tr>
</thead>
</thead>
<tbody></tbody>
<tbody></tbody>
...
@@ -122,12 +116,12 @@
...
@@ -122,12 +116,12 @@
<div
class=
"modal-dialog"
>
<div
class=
"modal-dialog"
>
<div
class=
"modal-content"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<div
class=
"modal-header"
>
<h4
class=
"modal-title"
>
日志清理
</h4>
<h4
class=
"modal-title"
>
${I18n.joblog_clean_log}
</h4>
</div>
</div>
<div
class=
"modal-body"
>
<div
class=
"modal-body"
>
<form
class=
"form-horizontal form"
role=
"form"
>
<form
class=
"form-horizontal form"
role=
"form"
>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
"
>
执行器
:
</label>
<label
class=
"col-sm-3 control-label"
"
>
${I18n.jobinfo_field_jobgroup}
:
</label>
<div
class=
"col-sm-9"
>
<div
class=
"col-sm-9"
>
<input
type=
"text"
class=
"form-control jobGroupText"
readonly
>
<input
type=
"text"
class=
"form-control jobGroupText"
readonly
>
<input
type=
"hidden"
name=
"jobGroup"
>
<input
type=
"hidden"
name=
"jobGroup"
>
...
@@ -135,7 +129,7 @@
...
@@ -135,7 +129,7 @@
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
"
>
任务
:
</label>
<label
class=
"col-sm-3 control-label"
"
>
${I18n.jobinfo_job}
:
</label>
<div
class=
"col-sm-9"
>
<div
class=
"col-sm-9"
>
<input
type=
"text"
class=
"form-control jobIdText"
readonly
>
<input
type=
"text"
class=
"form-control jobIdText"
readonly
>
<input
type=
"hidden"
name=
"jobId"
>
<input
type=
"hidden"
name=
"jobId"
>
...
@@ -143,18 +137,18 @@
...
@@ -143,18 +137,18 @@
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
"
>
清理类型
:
</label>
<label
class=
"col-sm-3 control-label"
"
>
${I18n.joblog_clean_type}
:
</label>
<div
class=
"col-sm-9"
>
<div
class=
"col-sm-9"
>
<select
class=
"form-control"
name=
"type"
>
<select
class=
"form-control"
name=
"type"
>
<option
value=
"1"
>
清理一个月之前日志数据
</option>
<option
value=
"1"
>
${I18n.joblog_clean_type_1}
</option>
<option
value=
"2"
>
清理三个月之前日志数据
</option>
<option
value=
"2"
>
${I18n.joblog_clean_type_2}
</option>
<option
value=
"3"
>
清理六个月之前日志数据
</option>
<option
value=
"3"
>
${I18n.joblog_clean_type_3}
</option>
<option
value=
"4"
>
清理一年之前日志数据
</option>
<option
value=
"4"
>
${I18n.joblog_clean_type_4}
</option>
<option
value=
"5"
>
清理一千条以前日志数据
</option>
<option
value=
"5"
>
${I18n.joblog_clean_type_5}
</option>
<option
value=
"6"
>
清理一万条以前日志数据
</option>
<option
value=
"6"
>
${I18n.joblog_clean_type_6}
</option>
<option
value=
"7"
>
清理三万条以前日志数据
</option>
<option
value=
"7"
>
${I18n.joblog_clean_type_7}
</option>
<option
value=
"8"
>
清理十万条以前日志数据
</option>
<option
value=
"8"
>
${I18n.joblog_clean_type_8}
</option>
<option
value=
"9"
>
清理所有日志数据
</option>
<option
value=
"9"
>
${I18n.joblog_clean_type_9}
</option>
</select>
</select>
</div>
</div>
</div>
</div>
...
@@ -162,8 +156,8 @@
...
@@ -162,8 +156,8 @@
<hr>
<hr>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-offset-3 col-sm-6"
>
<div
class=
"col-sm-offset-3 col-sm-6"
>
<button
type=
"button"
class=
"btn btn-primary ok"
>
确定
</button>
<button
type=
"button"
class=
"btn btn-primary ok"
>
${I18n.system_ok}
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
取消
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
${I18n.system_cancel}
</button>
</div>
</div>
</div>
</div>
</form>
</form>
...
@@ -173,6 +167,12 @@
...
@@ -173,6 +167,12 @@
</div>
</div>
<
@
netCommon
.
commonScript
/>
<
@
netCommon
.
commonScript
/>
<script>
var
GlueTypeEnum
=
{};
<
#
list
GlueTypeEnum
as
item
>
GlueTypeEnum
[
'${item}'
]
=
'${item.desc}'
;
<
/#list>
</script>
<!-- DataTables -->
<!-- DataTables -->
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"
></script>
...
...
xxl-job-admin/src/main/webapp/static/js/index.js
浏览文件 @
c2f3a827
...
@@ -4,16 +4,13 @@
...
@@ -4,16 +4,13 @@
$
(
function
()
{
$
(
function
()
{
// filter Time
// filter Time
var
_startDate
=
moment
().
subtract
(
1
,
'months'
);
// default,recent_month
var
_endDate
=
moment
();
var
rangesConf
=
{};
var
rangesConf
=
{};
rangesConf
[
I18n
.
daterangepicker_ranges_today
]
=
[
moment
().
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_today
]
=
[
moment
().
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_yesterday
]
=
[
moment
().
subtract
(
1
,
'days'
).
startOf
(
'day'
),
moment
().
subtract
(
1
,
'days'
).
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_yesterday
]
=
[
moment
().
subtract
(
1
,
'days'
).
startOf
(
'day'
),
moment
().
subtract
(
1
,
'days'
).
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_this_month
]
=
[
moment
().
startOf
(
'month'
),
moment
().
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_this_month
]
=
[
moment
().
startOf
(
'month'
),
moment
().
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_last_month
]
=
[
moment
().
subtract
(
1
,
'months'
).
startOf
(
'month'
),
moment
().
subtract
(
1
,
'months'
).
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_last_month
]
=
[
moment
().
subtract
(
1
,
'months'
).
startOf
(
'month'
),
moment
().
subtract
(
1
,
'months'
).
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_week
]
=
[
moment
().
subtract
(
1
,
'weeks'
),
moment
()];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_week
]
=
[
moment
().
subtract
(
1
,
'weeks'
),
moment
()];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
]
=
[
_startDate
,
_endDate
];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
]
=
[
moment
().
subtract
(
1
,
'months'
),
moment
()
];
$
(
'#filterTime'
).
daterangepicker
({
$
(
'#filterTime'
).
daterangepicker
({
autoApply
:
false
,
autoApply
:
false
,
...
@@ -36,12 +33,12 @@ $(function () {
...
@@ -36,12 +33,12 @@ $(function () {
monthNames
:
I18n
.
daterangepicker_custom_monthnames
.
split
(
','
)
,
// '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'
monthNames
:
I18n
.
daterangepicker_custom_monthnames
.
split
(
','
)
,
// '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'
firstDay
:
1
firstDay
:
1
},
},
startDate
:
_startDate
,
startDate
:
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
][
0
]
,
endDate
:
_endDate
endDate
:
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
][
1
]
},
function
(
start
,
end
,
label
)
{
},
function
(
start
,
end
,
label
)
{
freshChartDate
(
start
,
end
);
freshChartDate
(
start
,
end
);
});
});
freshChartDate
(
_startDate
,
_endDate
);
freshChartDate
(
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
][
0
],
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
][
1
]
);
/**
/**
* fresh Chart Date
* fresh Chart Date
...
...
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
浏览文件 @
c2f3a827
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论