Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
65663df3
authored
Apr 01, 2023
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
REVIEW 定时任务(详细)
parent
eace25d3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
80 additions
and
97 deletions
+80
-97
src/views/infra/job/JobDetail.vue
+71
-0
src/views/infra/job/index.vue
+9
-8
src/views/infra/job/view.vue
+0
-89
No files found.
src/views/infra/job/JobDetail.vue
0 → 100644
View file @
65663df3
<
template
>
<Dialog
title=
"任务详细"
v-model=
"modelVisible"
width=
"700px"
>
<el-descriptions
border
:column=
"1"
>
<el-descriptions-item
label=
"任务编号"
min-width=
"60"
>
{{
detailData
.
id
}}
</el-descriptions-item>
<el-descriptions-item
label=
"任务名称"
>
{{
detailData
.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"任务名称"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_JOB_STATUS"
:value=
"detailData.status"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"处理器的名字"
>
{{
detailData
.
handlerName
}}
</el-descriptions-item>
<el-descriptions-item
label=
"处理器的参数"
>
{{
detailData
.
handlerParam
}}
</el-descriptions-item>
<el-descriptions-item
label=
"Cron 表达式"
>
{{
detailData
.
cronExpression
}}
</el-descriptions-item>
<el-descriptions-item
label=
"重试次数"
>
{{
detailData
.
retryCount
}}
</el-descriptions-item>
<el-descriptions-item
label=
"重试间隔"
>
{{
detailData
.
retryInterval
+
' 毫秒'
}}
</el-descriptions-item>
<el-descriptions-item
label=
"监控超时时间"
>
{{
detailData
.
monitorTimeout
>
0
?
detailData
.
monitorTimeout
+
' 毫秒'
:
'未开启'
}}
</el-descriptions-item>
<el-descriptions-item
label=
"后续执行时间"
>
<el-timeline>
<el-timeline-item
v-for=
"(nextTime, index) in nextTimes"
:key=
"index"
:timestamp=
"formatDate(nextTime)"
>
第
{{
index
+
1
}}
次
</el-timeline-item>
</el-timeline>
</el-descriptions-item>
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
JobApi
from
'@/api/infra/job'
const
modelVisible
=
ref
(
false
)
// 弹窗的是否展示
const
detailLoading
=
ref
(
false
)
// 表单的加载中
const
detailData
=
ref
({})
// 详情数据
const
nextTimes
=
ref
([])
// 下一轮执行时间的数组
/** 打开弹窗 */
const
open
=
async
(
id
:
number
)
=>
{
modelVisible
.
value
=
true
// 查看,设置数据
if
(
id
)
{
detailLoading
.
value
=
true
try
{
detailData
.
value
=
await
JobApi
.
getJobApi
(
id
)
// 获取下一次执行时间
nextTimes
.
value
=
await
JobApi
.
getJobNextTimesApi
(
id
)
}
finally
{
detailLoading
.
value
=
false
}
}
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
</
script
>
src/views/infra/job/index.vue
View file @
65663df3
...
@@ -117,7 +117,7 @@
...
@@ -117,7 +117,7 @@
<el-dropdown-item
command=
"handleRun"
v-if=
"checkPermi(['infra:job:trigger'])"
>
<el-dropdown-item
command=
"handleRun"
v-if=
"checkPermi(['infra:job:trigger'])"
>
执行一次
执行一次
</el-dropdown-item>
</el-dropdown-item>
<el-dropdown-item
command=
"
handleView
"
v-if=
"checkPermi(['infra:job:query'])"
>
<el-dropdown-item
command=
"
openDetail
"
v-if=
"checkPermi(['infra:job:query'])"
>
任务详细
任务详细
</el-dropdown-item>
</el-dropdown-item>
<el-dropdown-item
command=
"handleJobLog"
v-if=
"checkPermi(['infra:job:query'])"
>
<el-dropdown-item
command=
"handleJobLog"
v-if=
"checkPermi(['infra:job:query'])"
>
...
@@ -141,13 +141,13 @@
...
@@ -141,13 +141,13 @@
<!-- 表单弹窗:添加/修改 -->
<!-- 表单弹窗:添加/修改 -->
<JobForm
ref=
"formRef"
@
success=
"getList"
/>
<JobForm
ref=
"formRef"
@
success=
"getList"
/>
<!-- 表单弹窗:查看 -->
<!-- 表单弹窗:查看 -->
<
job-view
ref=
"viewModalRef"
@
success=
"getList
"
/>
<
JobDetail
ref=
"detailRef
"
/>
</template>
</template>
<
script
setup
lang=
"ts"
name=
"Job"
>
<
script
setup
lang=
"ts"
name=
"Job"
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
checkPermi
}
from
'@/utils/permission'
import
{
checkPermi
}
from
'@/utils/permission'
import
JobForm
from
'./JobForm.vue'
import
JobForm
from
'./JobForm.vue'
import
Job
View
from
'./view
.vue'
import
Job
Detail
from
'./JobDetail
.vue'
import
download
from
'@/utils/download'
import
download
from
'@/utils/download'
import
*
as
JobApi
from
'@/api/infra/job'
import
*
as
JobApi
from
'@/api/infra/job'
import
{
InfraJobStatusEnum
}
from
'@/utils/constants'
import
{
InfraJobStatusEnum
}
from
'@/utils/constants'
...
@@ -254,8 +254,8 @@ const handleCommand = (command, row) => {
...
@@ -254,8 +254,8 @@ const handleCommand = (command, row) => {
case
'handleRun'
:
case
'handleRun'
:
handleRun
(
row
)
handleRun
(
row
)
break
break
case
'
handleView
'
:
case
'
openDetail
'
:
handleView
(
row
?
.
id
)
openDetail
(
row
.
id
)
break
break
case
'handleJobLog'
:
case
'handleJobLog'
:
handleJobLog
(
row
?.
id
)
handleJobLog
(
row
?.
id
)
...
@@ -279,10 +279,11 @@ const handleRun = async (row: JobApi.JobVO) => {
...
@@ -279,10 +279,11 @@ const handleRun = async (row: JobApi.JobVO) => {
}
}
/** 查看操作 */
/** 查看操作 */
const
viewModa
lRef
=
ref
()
const
detai
lRef
=
ref
()
const
handleView
=
(
rowId
?
:
number
)
=>
{
const
openDetail
=
(
id
:
number
)
=>
{
viewModalRef
.
value
.
openForm
(
rowI
d
)
detailRef
.
value
.
open
(
i
d
)
}
}
// 执行日志
// 执行日志
const
handleJobLog
=
(
rowId
?:
number
)
=>
{
const
handleJobLog
=
(
rowId
?:
number
)
=>
{
if
(
rowId
)
{
if
(
rowId
)
{
...
...
src/views/infra/job/view.vue
deleted
100644 → 0
View file @
eace25d3
<
template
>
<!-- 任务详细 -->
<Dialog
title=
"任务详细"
v-model=
"modelVisible"
width=
"700px"
append-to-body
>
<el-form
ref=
"formRef"
:model=
"formData"
label-width=
"200px"
>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"任务编号:"
>
{{
formData
.
id
}}
</el-form-item>
<el-form-item
label=
"任务名称:"
>
{{
formData
.
name
}}
</el-form-item>
<el-form-item
label=
"任务名称:"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_JOB_STATUS"
:value=
"formData.status"
/>
</el-form-item>
<el-form-item
label=
"处理器的名字:"
>
{{
formData
.
handlerName
}}
</el-form-item>
<el-form-item
label=
"处理器的参数:"
>
{{
formData
.
handlerParam
}}
</el-form-item>
<el-form-item
label=
"cron表达式:"
>
{{
formData
.
cronExpression
}}
</el-form-item>
<el-form-item
label=
"重试次数:"
>
{{
formData
.
retryCount
}}
</el-form-item>
<el-form-item
label=
"重试间隔:"
>
{{
formData
.
retryInterval
+
' 毫秒'
}}
</el-form-item>
<el-form-item
label=
"监控超时时间:"
>
{{
formData
.
monitorTimeout
>
0
?
formData
.
monitorTimeout
+
' 毫秒'
:
'未开启'
}}
</el-form-item>
<el-form-item
label=
"后续执行时间:"
>
<el-timeline
class=
"pt-3"
>
<el-timeline-item
v-for=
"(activity, index) in nextTimes"
:key=
"index"
:timestamp=
"parseTime(activity)"
>
第
{{
index
+
1
}}
次
</el-timeline-item>
</el-timeline>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
@
click=
"close"
>
关 闭
</el-button>
</div>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
name=
"JobView"
>
import
*
as
JobApi
from
'@/api/infra/job'
import
{
parseTime
}
from
'@/utils/formatTime'
import
{
DICT_TYPE
}
from
'@/utils/dict'
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
{
t
}
=
useI18n
()
// 国际化
const
formRef
=
ref
()
// 表单 Ref
const
modelVisible
=
ref
(
false
)
// 弹窗的是否展示
const
modelTitle
=
ref
(
''
)
// 弹窗的标题
const
formLoading
=
ref
(
false
)
// 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const
formData
=
ref
({
id
:
undefined
,
name
:
''
,
handlerParam
:
''
,
handlerName
:
''
,
cronExpression
:
''
,
retryCount
:
true
,
retryInterval
:
''
,
monitorTimeout
:
0
,
status
:
0
})
const
nextTimes
=
ref
([])
/** 打开弹窗 */
const
openModal
=
async
(
id
?:
number
)
=>
{
modelVisible
.
value
=
true
modelTitle
.
value
=
t
(
'action.detail'
)
// 查看,设置数据
if
(
id
)
{
formLoading
.
value
=
true
try
{
formData
.
value
=
await
JobApi
.
getJobApi
(
id
)
// 获取下一次执行时间
nextTimes
.
value
=
await
JobApi
.
getJobNextTimesApi
(
id
)
}
finally
{
formLoading
.
value
=
false
}
}
}
defineExpose
({
openModal
})
// 提供 openModal 方法,用于打开弹窗
const
close
=
()
=>
{
modelVisible
.
value
=
false
emit
(
'success'
)
}
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment