Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cocktail-party-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cocktail-party
cocktail-party-server
Commits
6361e4ef
提交
6361e4ef
authored
9月 03, 2021
作者:
RuoYi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
定时任务支持在线生成cron表达式
上级
cfa86bd4
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
2038 行增加
和
13 行删除
+2038
-13
ruoyi.scss
ruoyi-ui/src/assets/styles/ruoyi.scss
+8
-1
day.vue
ruoyi-ui/src/components/Crontab/day.vue
+180
-0
hour.vue
ruoyi-ui/src/components/Crontab/hour.vue
+123
-0
index.vue
ruoyi-ui/src/components/Crontab/index.vue
+425
-0
min.vue
ruoyi-ui/src/components/Crontab/min.vue
+121
-0
mouth.vue
ruoyi-ui/src/components/Crontab/mouth.vue
+129
-0
result.vue
ruoyi-ui/src/components/Crontab/result.vue
+567
-0
second.vue
ruoyi-ui/src/components/Crontab/second.vue
+134
-0
week.vue
ruoyi-ui/src/components/Crontab/week.vue
+168
-0
year.vue
ruoyi-ui/src/components/Crontab/year.vue
+145
-0
index.vue
ruoyi-ui/src/views/monitor/job/index.vue
+38
-12
没有找到文件。
ruoyi-ui/src/assets/styles/ruoyi.scss
浏览文件 @
6361e4ef
...
...
@@ -60,10 +60,17 @@
color
:
inherit
;
}
.el-dialog
:not
(
.is-fullscreen
)
{
.el-dialog
:not
(
.is-fullscreen
)
{
margin-top
:
6vh
!
important
;
}
.el-dialog
.el-dialog__body
{
overflow
:
auto
;
overflow-x
:
hidden
;
max-height
:
70vh
;
padding
:
10px
20px
0
;
}
.el-table
{
.el-table__header-wrapper
,
.el-table__fixed-header-wrapper
{
th
{
...
...
ruoyi-ui/src/components/Crontab/day.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
"small"
>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"1"
>
日,允许的通配符[, - * / L M]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"2"
>
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"3"
>
周期从
<el-input-number
v-model=
'cycle01'
:min=
"0"
:max=
"31"
/>
-
<el-input-number
v-model=
'cycle02'
:min=
"0"
:max=
"31"
/>
日
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"4"
>
从
<el-input-number
v-model=
'average01'
:min=
"0"
:max=
"31"
/>
号开始,每
<el-input-number
v-model=
'average02'
:min=
"0"
:max=
"31"
/>
日执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"5"
>
每月
<el-input-number
v-model=
'workday'
:min=
"0"
:max=
"31"
/>
号最近的那个工作日
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"6"
>
本月最后一天
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"7"
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
style=
"width:100%"
>
<el-option
v-for=
"item in 31"
:key=
"item"
:value=
"item"
>
{{
item
}}
</el-option>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
radioValue
:
1
,
workday
:
1
,
cycle01
:
1
,
cycle02
:
2
,
average01
:
1
,
average02
:
1
,
checkboxList
:
[],
checkNum
:
this
.
$options
.
propsData
.
check
}
},
name
:
'crontab-day'
,
props
:
[
'check'
,
'cron'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
(
'day rachange'
);
if
(
this
.
radioValue
===
1
)
{
this
.
$emit
(
'update'
,
'day'
,
'*'
,
'day'
);
this
.
$emit
(
'update'
,
'week'
,
'?'
,
'day'
);
this
.
$emit
(
'update'
,
'mouth'
,
'*'
,
'day'
);
}
else
{
if
(
this
.
cron
.
hour
===
'*'
)
{
this
.
$emit
(
'update'
,
'hour'
,
'0'
,
'day'
);
}
if
(
this
.
cron
.
min
===
'*'
)
{
this
.
$emit
(
'update'
,
'min'
,
'0'
,
'day'
);
}
if
(
this
.
cron
.
second
===
'*'
)
{
this
.
$emit
(
'update'
,
'second'
,
'0'
,
'day'
);
}
}
switch
(
this
.
radioValue
)
{
case
2
:
this
.
$emit
(
'update'
,
'day'
,
'?'
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'day'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'day'
,
this
.
average01
+
'/'
+
this
.
average02
);
break
;
case
5
:
this
.
$emit
(
'update'
,
'day'
,
this
.
workday
+
'W'
);
break
;
case
6
:
this
.
$emit
(
'update'
,
'day'
,
'L'
);
break
;
case
7
:
this
.
$emit
(
'update'
,
'day'
,
this
.
checkboxString
);
break
;
}
(
'day rachange end'
);
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'day'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'day'
,
this
.
averageTotal
);
}
},
// 最近工作日值变化时
workdayChange
()
{
if
(
this
.
radioValue
==
'5'
)
{
this
.
$emit
(
'update'
,
'day'
,
this
.
workday
+
'W'
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'7'
)
{
this
.
$emit
(
'update'
,
'day'
,
this
.
checkboxString
);
}
},
// 父组件传递的week发生变化触发
weekChange
()
{
//判断week值与day不能同时为“?”
if
(
this
.
cron
.
week
==
'?'
&&
this
.
radioValue
==
'2'
)
{
this
.
radioValue
=
'1'
;
}
else
if
(
this
.
cron
.
week
!==
'?'
&&
this
.
radioValue
!=
'2'
)
{
this
.
radioValue
=
'2'
;
}
},
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'workdayCheck'
:
'workdayChange'
,
'checkboxString'
:
'checkboxChange'
,
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
1
,
31
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
1
,
31
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
1
,
31
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
31
)
return
this
.
average01
+
'/'
+
this
.
average02
;
},
// 计算工作日格式
workdayCheck
:
function
()
{
this
.
workday
=
this
.
checkNum
(
this
.
workday
,
1
,
31
)
return
this
.
workday
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
==
''
?
'*'
:
str
;
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/hour.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
"small"
>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"1"
>
小时,允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"2"
>
周期从
<el-input-number
v-model=
'cycle01'
:min=
"0"
:max=
"60"
/>
-
<el-input-number
v-model=
'cycle02'
:min=
"0"
:max=
"60"
/>
小时
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"3"
>
从
<el-input-number
v-model=
'average01'
:min=
"0"
:max=
"60"
/>
小时开始,每
<el-input-number
v-model=
'average02'
:min=
"0"
:max=
"60"
/>
小时执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"4"
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
style=
"width:100%"
>
<el-option
v-for=
"item in 60"
:key=
"item"
:value=
"item-1"
>
{{
item
-
1
}}
</el-option>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
radioValue
:
1
,
cycle01
:
0
,
cycle02
:
1
,
average01
:
0
,
average02
:
1
,
checkboxList
:
[],
checkNum
:
this
.
$options
.
propsData
.
check
}
},
name
:
'crontab-hour'
,
props
:
[
'check'
,
'cron'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
radioValue
===
1
)
{
this
.
$emit
(
'update'
,
'hour'
,
'*'
,
'hour'
);
this
.
$emit
(
'update'
,
'day'
,
'*'
,
'hour'
);
}
else
{
if
(
this
.
cron
.
min
===
'*'
)
{
this
.
$emit
(
'update'
,
'min'
,
'0'
,
'hour'
);
}
if
(
this
.
cron
.
second
===
'*'
)
{
this
.
$emit
(
'update'
,
'second'
,
'0'
,
'hour'
);
}
}
switch
(
this
.
radioValue
)
{
case
2
:
this
.
$emit
(
'update'
,
'hour'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'hour'
,
this
.
average01
+
'/'
+
this
.
average02
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'hour'
,
this
.
checkboxString
);
break
;
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'2'
)
{
this
.
$emit
(
'update'
,
'hour'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'hour'
,
this
.
averageTotal
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'hour'
,
this
.
checkboxString
);
}
}
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'checkboxString'
:
'checkboxChange'
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
0
,
23
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
0
,
23
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
0
,
23
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
23
)
return
this
.
average01
+
'/'
+
this
.
average02
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
==
''
?
'*'
:
str
;
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/index.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<div>
<el-tabs
type=
"border-card"
>
<el-tab-pane
label=
"秒"
v-if=
"shouldHide('second')"
>
<CrontabSecond
@
update=
"updateContabValue"
:check=
"checkNumber"
ref=
"cronsecond"
/>
</el-tab-pane>
<el-tab-pane
label=
"分钟"
v-if=
"shouldHide('min')"
>
<CrontabMin
@
update=
"updateContabValue"
:check=
"checkNumber"
:cron=
"contabValueObj"
ref=
"cronmin"
/>
</el-tab-pane>
<el-tab-pane
label=
"小时"
v-if=
"shouldHide('hour')"
>
<CrontabHour
@
update=
"updateContabValue"
:check=
"checkNumber"
:cron=
"contabValueObj"
ref=
"cronhour"
/>
</el-tab-pane>
<el-tab-pane
label=
"日"
v-if=
"shouldHide('day')"
>
<CrontabDay
@
update=
"updateContabValue"
:check=
"checkNumber"
:cron=
"contabValueObj"
ref=
"cronday"
/>
</el-tab-pane>
<el-tab-pane
label=
"月"
v-if=
"shouldHide('mouth')"
>
<CrontabMouth
@
update=
"updateContabValue"
:check=
"checkNumber"
:cron=
"contabValueObj"
ref=
"cronmouth"
/>
</el-tab-pane>
<el-tab-pane
label=
"周"
v-if=
"shouldHide('week')"
>
<CrontabWeek
@
update=
"updateContabValue"
:check=
"checkNumber"
:cron=
"contabValueObj"
ref=
"cronweek"
/>
</el-tab-pane>
<el-tab-pane
label=
"年"
v-if=
"shouldHide('year')"
>
<CrontabYear
@
update=
"updateContabValue"
:check=
"checkNumber"
:cron=
"contabValueObj"
ref=
"cronyear"
/>
</el-tab-pane>
</el-tabs>
<div
class=
"popup-main"
>
<div
class=
"popup-result"
>
<p
class=
"title"
>
时间表达式
</p>
<table>
<thead>
<th
v-for=
"item of tabTitles"
width=
"40"
:key=
"item"
>
{{
item
}}
</th>
<th>
Cron 表达式
</th>
</thead>
<tbody>
<td>
<span>
{{
contabValueObj
.
second
}}
</span>
</td>
<td>
<span>
{{
contabValueObj
.
min
}}
</span>
</td>
<td>
<span>
{{
contabValueObj
.
hour
}}
</span>
</td>
<td>
<span>
{{
contabValueObj
.
day
}}
</span>
</td>
<td>
<span>
{{
contabValueObj
.
mouth
}}
</span>
</td>
<td>
<span>
{{
contabValueObj
.
week
}}
</span>
</td>
<td>
<span>
{{
contabValueObj
.
year
}}
</span>
</td>
<td>
<span>
{{
contabValueString
}}
</span>
</td>
</tbody>
</table>
</div>
<CrontabResult
:ex=
"contabValueString"
></CrontabResult>
<div
class=
"pop_btn"
>
<el-button
size=
"small"
type=
"primary"
@
click=
"submitFill"
>
确定
</el-button>
<el-button
size=
"small"
type=
"warning"
@
click=
"clearCron"
>
重置
</el-button>
<el-button
size=
"small"
@
click=
"hidePopup"
>
取消
</el-button>
</div>
</div>
</div>
</
template
>
<
script
>
import
CrontabSecond
from
"./second.vue"
;
import
CrontabMin
from
"./min.vue"
;
import
CrontabHour
from
"./hour.vue"
;
import
CrontabDay
from
"./day.vue"
;
import
CrontabMouth
from
"./mouth.vue"
;
import
CrontabWeek
from
"./week.vue"
;
import
CrontabYear
from
"./year.vue"
;
import
CrontabResult
from
"./result.vue"
;
export
default
{
data
()
{
return
{
tabTitles
:
[
"秒"
,
"分钟"
,
"小时"
,
"日"
,
"月"
,
"周"
,
"年"
],
tabActive
:
0
,
myindex
:
0
,
contabValueObj
:
{
second
:
"*"
,
min
:
"*"
,
hour
:
"*"
,
day
:
"*"
,
mouth
:
"*"
,
week
:
"?"
,
year
:
""
,
},
};
},
name
:
"vcrontab"
,
props
:
[
"expression"
,
"hideComponent"
],
methods
:
{
shouldHide
(
key
)
{
if
(
this
.
hideComponent
&&
this
.
hideComponent
.
includes
(
key
))
return
false
;
return
true
;
},
resolveExp
()
{
//反解析 表达式
if
(
this
.
expression
)
{
let
arr
=
this
.
expression
.
split
(
" "
);
if
(
arr
.
length
>=
6
)
{
//6 位以上是合法表达式
let
obj
=
{
second
:
arr
[
0
],
min
:
arr
[
1
],
hour
:
arr
[
2
],
day
:
arr
[
3
],
mouth
:
arr
[
4
],
week
:
arr
[
5
],
year
:
arr
[
6
]
?
arr
[
6
]
:
""
,
};
this
.
contabValueObj
=
{
...
obj
,
};
for
(
let
i
in
obj
)
{
if
(
obj
[
i
])
this
.
changeRadio
(
i
,
obj
[
i
]);
}
}
}
else
{
//没有传入的表达式 则还原
this
.
clearCron
();
}
},
// tab切换值
tabCheck
(
index
)
{
this
.
tabActive
=
index
;
},
// 由子组件触发,更改表达式组成的字段值
updateContabValue
(
name
,
value
,
from
)
{
"updateContabValue"
,
name
,
value
,
from
;
this
.
contabValueObj
[
name
]
=
value
;
if
(
from
&&
from
!==
name
)
{
console
.
log
(
`来自组件
${
from
}
改变了
${
name
}
${
value
}
`
);
this
.
changeRadio
(
name
,
value
);
}
},
//赋值到组件
changeRadio
(
name
,
value
)
{
let
arr
=
[
"second"
,
"min"
,
"hour"
,
"mouth"
],
refName
=
"cron"
+
name
,
insVlaue
;
if
(
!
this
.
$refs
[
refName
])
return
;
if
(
arr
.
includes
(
name
))
{
if
(
value
===
"*"
)
{
insVlaue
=
1
;
}
else
if
(
value
.
indexOf
(
"-"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"-"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
cycle01
=
0
)
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
]);
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
];
insVlaue
=
2
;
}
else
if
(
value
.
indexOf
(
"/"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"/"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
average01
=
0
)
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
]);
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
];
insVlaue
=
3
;
}
else
{
insVlaue
=
4
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
","
);
}
}
else
if
(
name
==
"day"
)
{
if
(
value
===
"*"
)
{
insVlaue
=
1
;
}
else
if
(
value
==
"?"
)
{
insVlaue
=
2
;
}
else
if
(
value
.
indexOf
(
"-"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"-"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
cycle01
=
0
)
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
]);
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
];
insVlaue
=
3
;
}
else
if
(
value
.
indexOf
(
"/"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"/"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
average01
=
0
)
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
]);
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
];
insVlaue
=
4
;
}
else
if
(
value
.
indexOf
(
"W"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"W"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
workday
=
0
)
:
(
this
.
$refs
[
refName
].
workday
=
indexArr
[
0
]);
insVlaue
=
5
;
}
else
if
(
value
===
"L"
)
{
insVlaue
=
6
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
","
);
insVlaue
=
7
;
}
}
else
if
(
name
==
"week"
)
{
if
(
value
===
"*"
)
{
insVlaue
=
1
;
}
else
if
(
value
==
"?"
)
{
insVlaue
=
2
;
}
else
if
(
value
.
indexOf
(
"-"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"-"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
cycle01
=
0
)
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
]);
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
];
insVlaue
=
3
;
}
else
if
(
value
.
indexOf
(
"#"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"#"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
average01
=
1
)
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
]);
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
];
insVlaue
=
4
;
}
else
if
(
value
.
indexOf
(
"L"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"L"
);
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
weekday
=
1
)
:
(
this
.
$refs
[
refName
].
weekday
=
indexArr
[
0
]);
insVlaue
=
5
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
","
);
insVlaue
=
7
;
}
}
else
if
(
name
==
"year"
)
{
if
(
value
==
""
)
{
insVlaue
=
1
;
}
else
if
(
value
==
"*"
)
{
insVlaue
=
2
;
}
else
if
(
value
.
indexOf
(
"-"
)
>
-
1
)
{
insVlaue
=
3
;
}
else
if
(
value
.
indexOf
(
"/"
)
>
-
1
)
{
insVlaue
=
4
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
","
);
insVlaue
=
5
;
}
}
this
.
$refs
[
refName
].
radioValue
=
insVlaue
;
},
// 表单选项的子组件校验数字格式(通过-props传递)
checkNumber
(
value
,
minLimit
,
maxLimit
)
{
//检查必须为整数
value
=
Math
.
floor
(
value
);
if
(
value
<
minLimit
)
{
value
=
minLimit
;
}
else
if
(
value
>
maxLimit
)
{
value
=
maxLimit
;
}
return
value
;
},
// 隐藏弹窗
hidePopup
()
{
this
.
$emit
(
"hide"
);
},
// 填充表达式
submitFill
()
{
this
.
$emit
(
"fill"
,
this
.
contabValueString
);
this
.
hidePopup
();
},
clearCron
()
{
// 还原选择项
(
"准备还原"
);
this
.
contabValueObj
=
{
second
:
"*"
,
min
:
"*"
,
hour
:
"*"
,
day
:
"*"
,
mouth
:
"*"
,
week
:
"?"
,
year
:
""
,
};
for
(
let
j
in
this
.
contabValueObj
)
{
this
.
changeRadio
(
j
,
this
.
contabValueObj
[
j
]);
}
},
},
computed
:
{
contabValueString
:
function
()
{
let
obj
=
this
.
contabValueObj
;
let
str
=
obj
.
second
+
" "
+
obj
.
min
+
" "
+
obj
.
hour
+
" "
+
obj
.
day
+
" "
+
obj
.
mouth
+
" "
+
obj
.
week
+
(
obj
.
year
==
""
?
""
:
" "
+
obj
.
year
);
return
str
;
},
},
components
:
{
CrontabSecond
,
CrontabMin
,
CrontabHour
,
CrontabDay
,
CrontabMouth
,
CrontabWeek
,
CrontabYear
,
CrontabResult
,
},
watch
:
{
expression
:
"resolveExp"
,
hideComponent
(
value
)
{
// 隐藏部分组件
},
},
mounted
:
function
()
{
this
.
resolveExp
();
},
};
</
script
>
<
style
scoped
>
.pop_btn
{
text-align
:
center
;
margin-top
:
20px
;
}
.popup-main
{
position
:
relative
;
margin
:
10px
auto
;
background
:
#fff
;
border-radius
:
5px
;
font-size
:
12px
;
overflow
:
hidden
;
}
.popup-title
{
overflow
:
hidden
;
line-height
:
34px
;
padding-top
:
6px
;
background
:
#f2f2f2
;
}
.popup-result
{
box-sizing
:
border-box
;
line-height
:
24px
;
margin
:
25px
auto
;
padding
:
15px
10px
10px
;
border
:
1px
solid
#ccc
;
position
:
relative
;
}
.popup-result
.title
{
position
:
absolute
;
top
:
-28px
;
left
:
50%
;
width
:
140px
;
font-size
:
14px
;
margin-left
:
-70px
;
text-align
:
center
;
line-height
:
30px
;
background
:
#fff
;
}
.popup-result
table
{
text-align
:
center
;
width
:
100%
;
margin
:
0
auto
;
}
.popup-result
table
span
{
display
:
block
;
width
:
100%
;
font-family
:
arial
;
line-height
:
30px
;
height
:
30px
;
white-space
:
nowrap
;
overflow
:
hidden
;
border
:
1px
solid
#e8e8e8
;
}
.popup-result-scroll
{
font-size
:
12px
;
line-height
:
24px
;
height
:
10em
;
overflow-y
:
auto
;
}
</
style
>
ruoyi-ui/src/components/Crontab/min.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
"small"
>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"1"
>
分钟,允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"2"
>
周期从
<el-input-number
v-model=
'cycle01'
:min=
"0"
:max=
"60"
/>
-
<el-input-number
v-model=
'cycle02'
:min=
"0"
:max=
"60"
/>
分钟
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"3"
>
从
<el-input-number
v-model=
'average01'
:min=
"0"
:max=
"60"
/>
分钟开始,每
<el-input-number
v-model=
'average02'
:min=
"0"
:max=
"60"
/>
分钟执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"4"
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
style=
"width:100%"
>
<el-option
v-for=
"item in 60"
:key=
"item"
:value=
"item-1"
>
{{
item
-
1
}}
</el-option>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
radioValue
:
1
,
cycle01
:
1
,
cycle02
:
2
,
average01
:
0
,
average02
:
1
,
checkboxList
:
[],
checkNum
:
this
.
$options
.
propsData
.
check
}
},
name
:
'crontab-min'
,
props
:
[
'check'
,
'cron'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
radioValue
!==
1
&&
this
.
cron
.
second
===
'*'
)
{
this
.
$emit
(
'update'
,
'second'
,
'0'
,
'min'
);
}
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'update'
,
'min'
,
'*'
,
'min'
);
this
.
$emit
(
'update'
,
'hour'
,
'*'
,
'min'
);
break
;
case
2
:
this
.
$emit
(
'update'
,
'min'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
,
'min'
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'min'
,
this
.
average01
+
'/'
+
this
.
average02
,
'min'
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'min'
,
this
.
checkboxString
,
'min'
);
break
;
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'2'
)
{
this
.
$emit
(
'update'
,
'min'
,
this
.
cycleTotal
,
'min'
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'min'
,
this
.
averageTotal
,
'min'
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'min'
,
this
.
checkboxString
,
'min'
);
}
},
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'checkboxString'
:
'checkboxChange'
,
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
0
,
59
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
0
,
59
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
0
,
59
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
59
)
return
this
.
average01
+
'/'
+
this
.
average02
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
==
''
?
'*'
:
str
;
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/mouth.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
'small'
>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"1"
>
月,允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"2"
>
周期从
<el-input-number
v-model=
'cycle01'
:min=
"1"
:max=
"12"
/>
-
<el-input-number
v-model=
'cycle02'
:min=
"1"
:max=
"12"
/>
月
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"3"
>
从
<el-input-number
v-model=
'average01'
:min=
"1"
:max=
"12"
/>
月开始,每
<el-input-number
v-model=
'average02'
:min=
"1"
:max=
"12"
/>
月月执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"4"
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
style=
"width:100%"
>
<el-option
v-for=
"item in 12"
:key=
"item"
:value=
"item"
>
{{
item
}}
</el-option>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
radioValue
:
1
,
cycle01
:
1
,
cycle02
:
2
,
average01
:
1
,
average02
:
1
,
checkboxList
:
[],
checkNum
:
this
.
check
}
},
name
:
'crontab-mouth'
,
props
:
[
'check'
,
'cron'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
radioValue
===
1
)
{
this
.
$emit
(
'update'
,
'mouth'
,
'*'
);
this
.
$emit
(
'update'
,
'year'
,
'*'
);
}
else
{
if
(
this
.
cron
.
day
===
'*'
)
{
this
.
$emit
(
'update'
,
'day'
,
'0'
,
'mouth'
);
}
if
(
this
.
cron
.
hour
===
'*'
)
{
this
.
$emit
(
'update'
,
'hour'
,
'0'
,
'mouth'
);
}
if
(
this
.
cron
.
min
===
'*'
)
{
this
.
$emit
(
'update'
,
'min'
,
'0'
,
'mouth'
);
}
if
(
this
.
cron
.
second
===
'*'
)
{
this
.
$emit
(
'update'
,
'second'
,
'0'
,
'mouth'
);
}
}
switch
(
this
.
radioValue
)
{
case
2
:
this
.
$emit
(
'update'
,
'mouth'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'mouth'
,
this
.
average01
+
'/'
+
this
.
average02
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'mouth'
,
this
.
checkboxString
);
break
;
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'2'
)
{
this
.
$emit
(
'update'
,
'mouth'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'mouth'
,
this
.
averageTotal
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'mouth'
,
this
.
checkboxString
);
}
}
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'checkboxString'
:
'checkboxChange'
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
1
,
12
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
1
,
12
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
1
,
12
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
12
)
return
this
.
average01
+
'/'
+
this
.
average02
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
==
''
?
'*'
:
str
;
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/result.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<div
class=
"popup-result"
>
<p
class=
"title"
>
最近5次运行时间
</p>
<ul
class=
"popup-result-scroll"
>
<template
v-if=
'isShow'
>
<li
v-for=
'item in resultList'
:key=
"item"
>
{{
item
}}
</li>
</
template
>
<li
v-else
>
计算结果中...
</li>
</ul>
</div>
</template>
<
script
>
export
default
{
data
()
{
return
{
dayRule
:
''
,
dayRuleSup
:
''
,
dateArr
:
[],
resultList
:
[],
isShow
:
false
}
},
name
:
'crontab-result'
,
methods
:
{
// 表达式值变化时,开始去计算结果
expressionChange
()
{
// 计算开始-隐藏结果
this
.
isShow
=
false
;
// 获取规则数组[0秒、1分、2时、3日、4月、5星期、6年]
let
ruleArr
=
this
.
$options
.
propsData
.
ex
.
split
(
' '
);
// 用于记录进入循环的次数
let
nums
=
0
;
// 用于暂时存符号时间规则结果的数组
let
resultArr
=
[];
// 获取当前时间精确至[年、月、日、时、分、秒]
let
nTime
=
new
Date
();
let
nYear
=
nTime
.
getFullYear
();
let
nMouth
=
nTime
.
getMonth
()
+
1
;
let
nDay
=
nTime
.
getDate
();
let
nHour
=
nTime
.
getHours
();
let
nMin
=
nTime
.
getMinutes
();
let
nSecond
=
nTime
.
getSeconds
();
// 根据规则获取到近100年可能年数组、月数组等等
this
.
getSecondArr
(
ruleArr
[
0
]);
this
.
getMinArr
(
ruleArr
[
1
]);
this
.
getHourArr
(
ruleArr
[
2
]);
this
.
getDayArr
(
ruleArr
[
3
]);
this
.
getMouthArr
(
ruleArr
[
4
]);
this
.
getWeekArr
(
ruleArr
[
5
]);
this
.
getYearArr
(
ruleArr
[
6
],
nYear
);
// 将获取到的数组赋值-方便使用
let
sDate
=
this
.
dateArr
[
0
];
let
mDate
=
this
.
dateArr
[
1
];
let
hDate
=
this
.
dateArr
[
2
];
let
DDate
=
this
.
dateArr
[
3
];
let
MDate
=
this
.
dateArr
[
4
];
let
YDate
=
this
.
dateArr
[
5
];
// 获取当前时间在数组中的索引
let
sIdx
=
this
.
getIndex
(
sDate
,
nSecond
);
let
mIdx
=
this
.
getIndex
(
mDate
,
nMin
);
let
hIdx
=
this
.
getIndex
(
hDate
,
nHour
);
let
DIdx
=
this
.
getIndex
(
DDate
,
nDay
);
let
MIdx
=
this
.
getIndex
(
MDate
,
nMouth
);
let
YIdx
=
this
.
getIndex
(
YDate
,
nYear
);
// 重置月日时分秒的函数(后面用的比较多)
const
resetSecond
=
function
()
{
sIdx
=
0
;
nSecond
=
sDate
[
sIdx
]
}
const
resetMin
=
function
()
{
mIdx
=
0
;
nMin
=
mDate
[
mIdx
]
resetSecond
();
}
const
resetHour
=
function
()
{
hIdx
=
0
;
nHour
=
hDate
[
hIdx
]
resetMin
();
}
const
resetDay
=
function
()
{
DIdx
=
0
;
nDay
=
DDate
[
DIdx
]
resetHour
();
}
const
resetMouth
=
function
()
{
MIdx
=
0
;
nMouth
=
MDate
[
MIdx
]
resetDay
();
}
// 如果当前年份不为数组中当前值
if
(
nYear
!==
YDate
[
YIdx
])
{
resetMouth
();
}
// 如果当前月份不为数组中当前值
if
(
nMouth
!==
MDate
[
MIdx
])
{
resetDay
();
}
// 如果当前“日”不为数组中当前值
if
(
nDay
!==
DDate
[
DIdx
])
{
resetHour
();
}
// 如果当前“时”不为数组中当前值
if
(
nHour
!==
hDate
[
hIdx
])
{
resetMin
();
}
// 如果当前“分”不为数组中当前值
if
(
nMin
!==
mDate
[
mIdx
])
{
resetSecond
();
}
// 循环年份数组
goYear
:
for
(
let
Yi
=
YIdx
;
Yi
<
YDate
.
length
;
Yi
++
)
{
let
YY
=
YDate
[
Yi
];
// 如果到达最大值时
if
(
nMouth
>
MDate
[
MDate
.
length
-
1
])
{
resetMouth
();
continue
;
}
// 循环月份数组
goMouth
:
for
(
let
Mi
=
MIdx
;
Mi
<
MDate
.
length
;
Mi
++
)
{
// 赋值、方便后面运算
let
MM
=
MDate
[
Mi
];
MM
=
MM
<
10
?
'0'
+
MM
:
MM
;
// 如果到达最大值时
if
(
nDay
>
DDate
[
DDate
.
length
-
1
])
{
resetDay
();
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMouth
();
continue
goYear
;
}
continue
;
}
// 循环日期数组
goDay
:
for
(
let
Di
=
DIdx
;
Di
<
DDate
.
length
;
Di
++
)
{
// 赋值、方便后面运算
let
DD
=
DDate
[
Di
];
let
thisDD
=
DD
<
10
?
'0'
+
DD
:
DD
;
// 如果到达最大值时
if
(
nHour
>
hDate
[
hDate
.
length
-
1
])
{
resetHour
();
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
();
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMouth
();
continue
goYear
;
}
continue
goMouth
;
}
continue
;
}
// 判断日期的合法性,不合法的话也是跳出当前循环
if
(
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
&&
this
.
dayRule
!==
'workDay'
&&
this
.
dayRule
!==
'lastWeek'
&&
this
.
dayRule
!==
'lastDay'
)
{
resetDay
();
continue
goMouth
;
}
// 如果日期规则中有值时
if
(
this
.
dayRule
==
'lastDay'
)
{
//如果不是合法日期则需要将前将日期调到合法日期即月末最后一天
if
(
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
while
(
DD
>
0
&&
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
DD
--
;
thisDD
=
DD
<
10
?
'0'
+
DD
:
DD
;
}
}
}
else
if
(
this
.
dayRule
==
'workDay'
)
{
//校验并调整如果是2月30号这种日期传进来时需调整至正常月底
if
(
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
while
(
DD
>
0
&&
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
DD
--
;
thisDD
=
DD
<
10
?
'0'
+
DD
:
DD
;
}
}
// 获取达到条件的日期是星期X
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
),
'week'
);
// 当星期日时
if
(
thisWeek
==
0
)
{
//先找下一个日,并判断是否为月底
DD
++
;
thisDD
=
DD
<
10
?
'0'
+
DD
:
DD
;
//判断下一日已经不是合法日期
if
(
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
DD
-=
3
;
}
}
else
if
(
thisWeek
==
6
)
{
//当星期6时只需判断不是1号就可进行操作
if
(
this
.
dayRuleSup
!==
1
)
{
DD
--
;
}
else
{
DD
+=
2
;
}
}
}
else
if
(
this
.
dayRule
==
'weekDay'
)
{
//如果指定了是星期几
//获取当前日期是属于星期几
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'-'
+
MM
+
'-'
+
DD
+
' 00:00:00'
),
'week'
);
//校验当前星期是否在星期池(dayRuleSup)中
if
(
Array
.
indexOf
(
this
.
dayRuleSup
,
thisWeek
)
<
0
)
{
// 如果到达最大值时
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
();
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMouth
();
continue
goYear
;
}
continue
goMouth
;
}
continue
;
}
}
else
if
(
this
.
dayRule
==
'assWeek'
)
{
//如果指定了是第几周的星期几
//获取每月1号是属于星期几
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'-'
+
MM
+
'-'
+
DD
+
' 00:00:00'
),
'week'
);
if
(
this
.
dayRuleSup
[
1
]
>=
thisWeek
)
{
DD
=
(
this
.
dayRuleSup
[
0
]
-
1
)
*
7
+
this
.
dayRuleSup
[
1
]
-
thisWeek
+
1
;
}
else
{
DD
=
this
.
dayRuleSup
[
0
]
*
7
+
this
.
dayRuleSup
[
1
]
-
thisWeek
+
1
;
}
}
else
if
(
this
.
dayRule
==
'lastWeek'
)
{
//如果指定了每月最后一个星期几
//校验并调整如果是2月30号这种日期传进来时需调整至正常月底
if
(
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
while
(
DD
>
0
&&
this
.
checkDate
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
)
!==
true
)
{
DD
--
;
thisDD
=
DD
<
10
?
'0'
+
DD
:
DD
;
}
}
//获取月末最后一天是星期几
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'-'
+
MM
+
'-'
+
thisDD
+
' 00:00:00'
),
'week'
);
//找到要求中最近的那个星期几
if
(
this
.
dayRuleSup
<
thisWeek
)
{
DD
-=
thisWeek
-
this
.
dayRuleSup
;
}
else
if
(
this
.
dayRuleSup
>
thisWeek
)
{
DD
-=
7
-
(
this
.
dayRuleSup
-
thisWeek
)
}
}
// 判断时间值是否小于10置换成“05”这种格式
DD
=
DD
<
10
?
'0'
+
DD
:
DD
;
// 循环“时”数组
goHour
:
for
(
let
hi
=
hIdx
;
hi
<
hDate
.
length
;
hi
++
)
{
let
hh
=
hDate
[
hi
]
<
10
?
'0'
+
hDate
[
hi
]
:
hDate
[
hi
]
// 如果到达最大值时
if
(
nMin
>
mDate
[
mDate
.
length
-
1
])
{
resetMin
();
if
(
hi
==
hDate
.
length
-
1
)
{
resetHour
();
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
();
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMouth
();
continue
goYear
;
}
continue
goMouth
;
}
continue
goDay
;
}
continue
;
}
// 循环"分"数组
goMin
:
for
(
let
mi
=
mIdx
;
mi
<
mDate
.
length
;
mi
++
)
{
let
mm
=
mDate
[
mi
]
<
10
?
'0'
+
mDate
[
mi
]
:
mDate
[
mi
];
// 如果到达最大值时
if
(
nSecond
>
sDate
[
sDate
.
length
-
1
])
{
resetSecond
();
if
(
mi
==
mDate
.
length
-
1
)
{
resetMin
();
if
(
hi
==
hDate
.
length
-
1
)
{
resetHour
();
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
();
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMouth
();
continue
goYear
;
}
continue
goMouth
;
}
continue
goDay
;
}
continue
goHour
;
}
continue
;
}
// 循环"秒"数组
goSecond
:
for
(
let
si
=
sIdx
;
si
<=
sDate
.
length
-
1
;
si
++
)
{
let
ss
=
sDate
[
si
]
<
10
?
'0'
+
sDate
[
si
]
:
sDate
[
si
];
// 添加当前时间(时间合法性在日期循环时已经判断)
if
(
MM
!==
'00'
&&
DD
!==
'00'
)
{
resultArr
.
push
(
YY
+
'-'
+
MM
+
'-'
+
DD
+
' '
+
hh
+
':'
+
mm
+
':'
+
ss
)
nums
++
;
}
//如果条数满了就退出循环
if
(
nums
==
5
)
break
goYear
;
//如果到达最大值时
if
(
si
==
sDate
.
length
-
1
)
{
resetSecond
();
if
(
mi
==
mDate
.
length
-
1
)
{
resetMin
();
if
(
hi
==
hDate
.
length
-
1
)
{
resetHour
();
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
();
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMouth
();
continue
goYear
;
}
continue
goMouth
;
}
continue
goDay
;
}
continue
goHour
;
}
continue
goMin
;
}
}
//goSecond
}
//goMin
}
//goHour
}
//goDay
}
//goMouth
}
// 判断100年内的结果条数
if
(
resultArr
.
length
==
0
)
{
this
.
resultList
=
[
'没有达到条件的结果!'
];
}
else
{
this
.
resultList
=
resultArr
;
if
(
resultArr
.
length
!==
5
)
{
this
.
resultList
.
push
(
'最近100年内只有上面'
+
resultArr
.
length
+
'条结果!'
)
}
}
// 计算完成-显示结果
this
.
isShow
=
true
;
},
//用于计算某位数字在数组中的索引
getIndex
(
arr
,
value
)
{
if
(
value
<=
arr
[
0
]
||
value
>
arr
[
arr
.
length
-
1
])
{
return
0
;
}
else
{
for
(
let
i
=
0
;
i
<
arr
.
length
-
1
;
i
++
)
{
if
(
value
>
arr
[
i
]
&&
value
<=
arr
[
i
+
1
])
{
return
i
+
1
;
}
}
}
},
// 获取"年"数组
getYearArr
(
rule
,
year
)
{
this
.
dateArr
[
5
]
=
this
.
getOrderArr
(
year
,
year
+
100
);
if
(
rule
!==
undefined
)
{
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dateArr
[
5
]
=
this
.
getCycleArr
(
rule
,
year
+
100
,
false
)
}
else
if
(
rule
.
indexOf
(
'/'
)
>=
0
)
{
this
.
dateArr
[
5
]
=
this
.
getAverageArr
(
rule
,
year
+
100
)
}
else
if
(
rule
!==
'*'
)
{
this
.
dateArr
[
5
]
=
this
.
getAssignArr
(
rule
)
}
}
},
// 获取"月"数组
getMouthArr
(
rule
)
{
this
.
dateArr
[
4
]
=
this
.
getOrderArr
(
1
,
12
);
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dateArr
[
4
]
=
this
.
getCycleArr
(
rule
,
12
,
false
)
}
else
if
(
rule
.
indexOf
(
'/'
)
>=
0
)
{
this
.
dateArr
[
4
]
=
this
.
getAverageArr
(
rule
,
12
)
}
else
if
(
rule
!==
'*'
)
{
this
.
dateArr
[
4
]
=
this
.
getAssignArr
(
rule
)
}
},
// 获取"日"数组-主要为日期规则
getWeekArr
(
rule
)
{
//只有当日期规则的两个值均为“”时则表达日期是有选项的
if
(
this
.
dayRule
==
''
&&
this
.
dayRuleSup
==
''
)
{
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dayRule
=
'weekDay'
;
this
.
dayRuleSup
=
this
.
getCycleArr
(
rule
,
7
,
false
)
}
else
if
(
rule
.
indexOf
(
'#'
)
>=
0
)
{
this
.
dayRule
=
'assWeek'
;
let
matchRule
=
rule
.
match
(
/
[
0-9
]{1}
/g
);
this
.
dayRuleSup
=
[
Number
(
matchRule
[
0
]),
Number
(
matchRule
[
1
])];
this
.
dateArr
[
3
]
=
[
1
];
if
(
this
.
dayRuleSup
[
1
]
==
7
)
{
this
.
dayRuleSup
[
1
]
=
0
;
}
}
else
if
(
rule
.
indexOf
(
'L'
)
>=
0
)
{
this
.
dayRule
=
'lastWeek'
;
this
.
dayRuleSup
=
Number
(
rule
.
match
(
/
[
0-9
]{1,2}
/g
)[
0
]);
this
.
dateArr
[
3
]
=
[
31
];
if
(
this
.
dayRuleSup
==
7
)
{
this
.
dayRuleSup
=
0
;
}
}
else
if
(
rule
!==
'*'
&&
rule
!==
'?'
)
{
this
.
dayRule
=
'weekDay'
;
this
.
dayRuleSup
=
this
.
getAssignArr
(
rule
)
}
//如果weekDay时将7调整为0【week值0即是星期日】
if
(
this
.
dayRule
==
'weekDay'
)
{
for
(
let
i
=
0
;
i
<
this
.
dayRuleSup
.
length
;
i
++
)
{
if
(
this
.
dayRuleSup
[
i
]
==
7
)
{
this
.
dayRuleSup
[
i
]
=
0
;
}
}
}
}
},
// 获取"日"数组-少量为日期规则
getDayArr
(
rule
)
{
this
.
dateArr
[
3
]
=
this
.
getOrderArr
(
1
,
31
);
this
.
dayRule
=
''
;
this
.
dayRuleSup
=
''
;
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dateArr
[
3
]
=
this
.
getCycleArr
(
rule
,
31
,
false
)
this
.
dayRuleSup
=
'null'
;
}
else
if
(
rule
.
indexOf
(
'/'
)
>=
0
)
{
this
.
dateArr
[
3
]
=
this
.
getAverageArr
(
rule
,
31
)
this
.
dayRuleSup
=
'null'
;
}
else
if
(
rule
.
indexOf
(
'W'
)
>=
0
)
{
this
.
dayRule
=
'workDay'
;
this
.
dayRuleSup
=
Number
(
rule
.
match
(
/
[
0-9
]{1,2}
/g
)[
0
]);
this
.
dateArr
[
3
]
=
[
this
.
dayRuleSup
];
}
else
if
(
rule
.
indexOf
(
'L'
)
>=
0
)
{
this
.
dayRule
=
'lastDay'
;
this
.
dayRuleSup
=
'null'
;
this
.
dateArr
[
3
]
=
[
31
];
}
else
if
(
rule
!==
'*'
&&
rule
!==
'?'
)
{
this
.
dateArr
[
3
]
=
this
.
getAssignArr
(
rule
)
this
.
dayRuleSup
=
'null'
;
}
else
if
(
rule
==
'*'
)
{
this
.
dayRuleSup
=
'null'
;
}
},
// 获取"时"数组
getHourArr
(
rule
)
{
this
.
dateArr
[
2
]
=
this
.
getOrderArr
(
0
,
23
);
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dateArr
[
2
]
=
this
.
getCycleArr
(
rule
,
24
,
true
)
}
else
if
(
rule
.
indexOf
(
'/'
)
>=
0
)
{
this
.
dateArr
[
2
]
=
this
.
getAverageArr
(
rule
,
23
)
}
else
if
(
rule
!==
'*'
)
{
this
.
dateArr
[
2
]
=
this
.
getAssignArr
(
rule
)
}
},
// 获取"分"数组
getMinArr
(
rule
)
{
this
.
dateArr
[
1
]
=
this
.
getOrderArr
(
0
,
59
);
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dateArr
[
1
]
=
this
.
getCycleArr
(
rule
,
60
,
true
)
}
else
if
(
rule
.
indexOf
(
'/'
)
>=
0
)
{
this
.
dateArr
[
1
]
=
this
.
getAverageArr
(
rule
,
59
)
}
else
if
(
rule
!==
'*'
)
{
this
.
dateArr
[
1
]
=
this
.
getAssignArr
(
rule
)
}
},
// 获取"秒"数组
getSecondArr
(
rule
)
{
this
.
dateArr
[
0
]
=
this
.
getOrderArr
(
0
,
59
);
if
(
rule
.
indexOf
(
'-'
)
>=
0
)
{
this
.
dateArr
[
0
]
=
this
.
getCycleArr
(
rule
,
60
,
true
)
}
else
if
(
rule
.
indexOf
(
'/'
)
>=
0
)
{
this
.
dateArr
[
0
]
=
this
.
getAverageArr
(
rule
,
59
)
}
else
if
(
rule
!==
'*'
)
{
this
.
dateArr
[
0
]
=
this
.
getAssignArr
(
rule
)
}
},
// 根据传进来的min-max返回一个顺序的数组
getOrderArr
(
min
,
max
)
{
let
arr
=
[];
for
(
let
i
=
min
;
i
<=
max
;
i
++
)
{
arr
.
push
(
i
);
}
return
arr
;
},
// 根据规则中指定的零散值返回一个数组
getAssignArr
(
rule
)
{
let
arr
=
[];
let
assiginArr
=
rule
.
split
(
','
);
for
(
let
i
=
0
;
i
<
assiginArr
.
length
;
i
++
)
{
arr
[
i
]
=
Number
(
assiginArr
[
i
])
}
arr
.
sort
(
this
.
compare
)
return
arr
;
},
// 根据一定算术规则计算返回一个数组
getAverageArr
(
rule
,
limit
)
{
let
arr
=
[];
let
agArr
=
rule
.
split
(
'/'
);
let
min
=
Number
(
agArr
[
0
]);
let
step
=
Number
(
agArr
[
1
]);
while
(
min
<=
limit
)
{
arr
.
push
(
min
);
min
+=
step
;
}
return
arr
;
},
// 根据规则返回一个具有周期性的数组
getCycleArr
(
rule
,
limit
,
status
)
{
//status--表示是否从0开始(则从1开始)
let
arr
=
[];
let
cycleArr
=
rule
.
split
(
'-'
);
let
min
=
Number
(
cycleArr
[
0
]);
let
max
=
Number
(
cycleArr
[
1
]);
if
(
min
>
max
)
{
max
+=
limit
;
}
for
(
let
i
=
min
;
i
<=
max
;
i
++
)
{
let
add
=
0
;
if
(
status
==
false
&&
i
%
limit
==
0
)
{
add
=
limit
;
}
arr
.
push
(
Math
.
round
(
i
%
limit
+
add
))
}
arr
.
sort
(
this
.
compare
)
return
arr
;
},
//比较数字大小(用于Array.sort)
compare
(
value1
,
value2
)
{
if
(
value2
-
value1
>
0
)
{
return
-
1
;
}
else
{
return
1
;
}
},
// 格式化日期格式如:2017-9-19 18:04:33
formatDate
(
value
,
type
)
{
// 计算日期相关值
let
time
=
typeof
value
==
'number'
?
new
Date
(
value
)
:
value
;
let
Y
=
time
.
getFullYear
();
let
M
=
time
.
getMonth
()
+
1
;
let
D
=
time
.
getDate
();
let
h
=
time
.
getHours
();
let
m
=
time
.
getMinutes
();
let
s
=
time
.
getSeconds
();
let
week
=
time
.
getDay
();
// 如果传递了type的话
if
(
type
==
undefined
)
{
return
Y
+
'-'
+
(
M
<
10
?
'0'
+
M
:
M
)
+
'-'
+
(
D
<
10
?
'0'
+
D
:
D
)
+
' '
+
(
h
<
10
?
'0'
+
h
:
h
)
+
':'
+
(
m
<
10
?
'0'
+
m
:
m
)
+
':'
+
(
s
<
10
?
'0'
+
s
:
s
);
}
else
if
(
type
==
'week'
)
{
return
week
;
}
},
// 检查日期是否存在
checkDate
(
value
)
{
let
time
=
new
Date
(
value
);
let
format
=
this
.
formatDate
(
time
)
return
value
==
format
?
true
:
false
;
}
},
watch
:
{
'ex'
:
'expressionChange'
},
props
:
[
'ex'
],
mounted
:
function
()
{
// 初始化 获取一次结果
this
.
expressionChange
();
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/second.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
"small"
>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"1"
>
秒,允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"2"
>
周期从
<el-input-number
v-model=
'cycle01'
:min=
"0"
:max=
"60"
/>
-
<el-input-number
v-model=
'cycle02'
:min=
"0"
:max=
"60"
/>
秒
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"3"
>
从
<el-input-number
v-model=
'average01'
:min=
"0"
:max=
"60"
/>
秒开始,每
<el-input-number
v-model=
'average02'
:min=
"0"
:max=
"60"
/>
秒执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"4"
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
style=
"width:100%"
>
<el-option
v-for=
"item in 60"
:key=
"item"
:value=
"item-1"
>
{{
item
-
1
}}
</el-option>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
radioValue
:
1
,
cycle01
:
1
,
cycle02
:
2
,
average01
:
0
,
average02
:
1
,
checkboxList
:
[],
checkNum
:
this
.
$options
.
propsData
.
check
}
},
name
:
'crontab-second'
,
props
:
[
'check'
,
'radioParent'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'update'
,
'second'
,
'*'
,
'second'
);
this
.
$emit
(
'update'
,
'min'
,
'*'
,
'second'
);
break
;
case
2
:
this
.
$emit
(
'update'
,
'second'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'second'
,
this
.
average01
+
'/'
+
this
.
average02
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'second'
,
this
.
checkboxString
);
break
;
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'2'
)
{
this
.
$emit
(
'update'
,
'second'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'second'
,
this
.
averageTotal
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'second'
,
this
.
checkboxString
);
}
},
othChange
()
{
//反解析
let
ins
=
this
.
cron
.
second
(
'反解析 second'
,
ins
);
if
(
ins
===
'*'
)
{
this
.
radioValue
=
1
;
}
else
if
(
ins
.
indexOf
(
'-'
)
>
-
1
)
{
this
.
radioValue
=
2
}
else
if
(
ins
.
indexOf
(
'/'
)
>
-
1
)
{
this
.
radioValue
=
3
}
else
{
this
.
radioValue
=
4
this
.
checkboxList
=
ins
.
split
(
','
)
}
}
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'checkboxString'
:
'checkboxChange'
,
radioParent
()
{
this
.
radioValue
=
this
.
radioParent
}
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
0
,
59
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
0
,
59
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
0
,
59
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
59
)
return
this
.
average01
+
'/'
+
this
.
average02
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
==
''
?
'*'
:
str
;
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/week.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
'small'
>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"1"
>
周,允许的通配符[, - * / L #]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"2"
>
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"3"
>
周期从星期
<el-input-number
v-model=
'cycle01'
:min=
"1"
:max=
"7"
/>
-
<el-input-number
v-model=
'cycle02'
:min=
"1"
:max=
"7"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"4"
>
第
<el-input-number
v-model=
'average01'
:min=
"1"
:max=
"4"
/>
周的星期
<el-input-number
v-model=
'average02'
:min=
"1"
:max=
"7"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"5"
>
本月最后一个星期
<el-input-number
v-model=
'weekday'
:min=
"1"
:max=
"7"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model=
'radioValue'
:label=
"6"
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
style=
"width:100%"
>
<el-option
v-for=
"(item,index) of weekList"
:key=
"index"
:value=
"index+1"
>
{{
item
}}
</el-option>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
radioValue
:
2
,
weekday
:
1
,
cycle01
:
1
,
cycle02
:
2
,
average01
:
1
,
average02
:
1
,
checkboxList
:
[],
weekList
:
[
'周一'
,
'周二'
,
'周三'
,
'周四'
,
'周五'
,
'周六'
,
'周日'
],
checkNum
:
this
.
$options
.
propsData
.
check
}
},
name
:
'crontab-week'
,
props
:
[
'check'
,
'cron'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
radioValue
===
1
)
{
this
.
$emit
(
'update'
,
'week'
,
'*'
);
this
.
$emit
(
'update'
,
'year'
,
'*'
);
}
else
{
if
(
this
.
cron
.
mouth
===
'*'
)
{
this
.
$emit
(
'update'
,
'mouth'
,
'0'
,
'week'
);
}
if
(
this
.
cron
.
day
===
'*'
)
{
this
.
$emit
(
'update'
,
'day'
,
'0'
,
'week'
);
}
if
(
this
.
cron
.
hour
===
'*'
)
{
this
.
$emit
(
'update'
,
'hour'
,
'0'
,
'week'
);
}
if
(
this
.
cron
.
min
===
'*'
)
{
this
.
$emit
(
'update'
,
'min'
,
'0'
,
'week'
);
}
if
(
this
.
cron
.
second
===
'*'
)
{
this
.
$emit
(
'update'
,
'second'
,
'0'
,
'week'
);
}
}
switch
(
this
.
radioValue
)
{
case
2
:
this
.
$emit
(
'update'
,
'week'
,
'?'
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'week'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'week'
,
this
.
average01
+
'#'
+
this
.
average02
);
break
;
case
5
:
this
.
$emit
(
'update'
,
'week'
,
this
.
weekday
+
'L'
);
break
;
case
6
:
this
.
$emit
(
'update'
,
'week'
,
this
.
checkboxString
);
break
;
}
},
// 根据互斥事件,更改radio的值
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'week'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'week'
,
this
.
averageTotal
);
}
},
// 最近工作日值变化时
weekdayChange
()
{
if
(
this
.
radioValue
==
'5'
)
{
this
.
$emit
(
'update'
,
'week'
,
this
.
weekday
+
'L'
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'6'
)
{
this
.
$emit
(
'update'
,
'week'
,
this
.
checkboxString
);
}
},
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'weekdayCheck'
:
'weekdayChange'
,
'checkboxString'
:
'checkboxChange'
,
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
1
,
7
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
1
,
7
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
1
,
4
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
7
)
return
this
.
average01
+
'#'
+
this
.
average02
;
},
// 最近的工作日(格式)
weekdayCheck
:
function
()
{
this
.
weekday
=
this
.
checkNum
(
this
.
weekday
,
1
,
7
)
return
this
.
weekday
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
==
''
?
'*'
:
str
;
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/components/Crontab/year.vue
0 → 100644
浏览文件 @
6361e4ef
<
template
>
<el-form
size=
"small"
>
<el-form-item>
<el-radio
:label=
"1"
v-model=
'radioValue'
>
不填,允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
:label=
"2"
v-model=
'radioValue'
>
每年
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
:label=
"3"
v-model=
'radioValue'
>
周期从
<el-input-number
v-model=
'cycle01'
:min=
'fullYear'
/>
-
<el-input-number
v-model=
'cycle02'
:min=
'fullYear'
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
:label=
"4"
v-model=
'radioValue'
>
从
<el-input-number
v-model=
'average01'
:min=
'fullYear'
/>
年开始,每
<el-input-number
v-model=
'average02'
:min=
'fullYear'
/>
年执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
:label=
"5"
v-model=
'radioValue'
>
指定
<el-select
clearable
v-model=
"checkboxList"
placeholder=
"可多选"
multiple
>
<el-option
v-for=
"item in 9"
:key=
"item"
:value=
"item - 1 + fullYear"
:label=
"item -1 + fullYear"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
fullYear
:
0
,
radioValue
:
1
,
cycle01
:
0
,
cycle02
:
0
,
average01
:
0
,
average02
:
1
,
checkboxList
:
[],
checkNum
:
this
.
$options
.
propsData
.
check
}
},
name
:
'crontab-year'
,
props
:
[
'check'
,
'mouth'
,
'cron'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
cron
.
mouth
===
'*'
)
{
this
.
$emit
(
'update'
,
'mouth'
,
'0'
,
'year'
);
}
if
(
this
.
cron
.
day
===
'*'
)
{
this
.
$emit
(
'update'
,
'day'
,
'0'
,
'year'
);
}
if
(
this
.
cron
.
hour
===
'*'
)
{
this
.
$emit
(
'update'
,
'hour'
,
'0'
,
'year'
);
}
if
(
this
.
cron
.
min
===
'*'
)
{
this
.
$emit
(
'update'
,
'min'
,
'0'
,
'year'
);
}
if
(
this
.
cron
.
second
===
'*'
)
{
this
.
$emit
(
'update'
,
'second'
,
'0'
,
'year'
);
}
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'update'
,
'year'
,
''
);
break
;
case
2
:
this
.
$emit
(
'update'
,
'year'
,
'*'
);
break
;
case
3
:
this
.
$emit
(
'update'
,
'year'
,
this
.
cycle01
+
'-'
+
this
.
cycle02
);
break
;
case
4
:
this
.
$emit
(
'update'
,
'year'
,
this
.
average01
+
'/'
+
this
.
average02
);
break
;
case
5
:
this
.
$emit
(
'update'
,
'year'
,
this
.
checkboxString
);
break
;
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'3'
)
{
this
.
$emit
(
'update'
,
'year'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'4'
)
{
this
.
$emit
(
'update'
,
'year'
,
this
.
averageTotal
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'5'
)
{
this
.
$emit
(
'update'
,
'year'
,
this
.
checkboxString
);
}
}
},
watch
:
{
"radioValue"
:
"radioChange"
,
'cycleTotal'
:
'cycleChange'
,
'averageTotal'
:
'averageChange'
,
'checkboxString'
:
'checkboxChange'
},
computed
:
{
// 计算两个周期值
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
this
.
fullYear
,
this
.
fullYear
+
100
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
this
.
fullYear
+
1
,
this
.
fullYear
+
101
)
return
this
.
cycle01
+
'-'
+
this
.
cycle02
;
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
this
.
fullYear
,
this
.
fullYear
+
100
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
10
)
return
this
.
average01
+
'/'
+
this
.
average02
;
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
();
return
str
;
}
},
mounted
:
function
()
{
// 仅获取当前年份
this
.
fullYear
=
Number
(
new
Date
().
getFullYear
());
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/monitor/job/index.vue
浏览文件 @
6361e4ef
...
...
@@ -156,7 +156,7 @@
/>
<!-- 添加或修改定时任务对话框 -->
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"
7
00px"
append-to-body
>
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"
8
00px"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row>
<el-col
:span=
"12"
>
...
...
@@ -192,17 +192,16 @@
<el-input
v-model=
"form.invokeTarget"
placeholder=
"请输入调用目标字符串"
/>
</el-form-item>
</el-col>
<el-col
:span=
"
12
"
>
<el-col
:span=
"
24
"
>
<el-form-item
label=
"cron表达式"
prop=
"cronExpression"
>
<el-input
v-model=
"form.cronExpression"
placeholder=
"请输入cron执行表达式"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"是否并发"
prop=
"concurrent"
>
<el-radio-group
v-model=
"form.concurrent"
size=
"small"
>
<el-radio-button
label=
"0"
>
允许
</el-radio-button>
<el-radio-button
label=
"1"
>
禁止
</el-radio-button>
</el-radio-group>
<el-input
v-model=
"form.cronExpression"
placeholder=
"请输入cron执行表达式"
>
<
template
slot=
"append"
>
<el-button
type=
"primary"
@
click=
"handleShowCron"
>
生成表达式
<i
class=
"el-icon-time el-icon--right"
></i>
</el-button>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
...
...
@@ -214,7 +213,15 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"是否并发"
prop=
"concurrent"
>
<el-radio-group
v-model=
"form.concurrent"
size=
"small"
>
<el-radio-button
label=
"0"
>
允许
</el-radio-button>
<el-radio-button
label=
"1"
>
禁止
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"状态"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
...
...
@@ -233,6 +240,10 @@
</div>
</el-dialog>
<el-dialog
title=
"Cron表达式生成器"
:visible
.
sync=
"openCron"
>
<crontab
@
hide=
"openCron=false"
@
fill=
"crontabFill"
:expression=
"expression"
></crontab>
</el-dialog>
<!-- 任务日志详细 -->
<el-dialog
title=
"任务详细"
:visible
.
sync=
"openView"
width=
"700px"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"120px"
size=
"mini"
>
...
...
@@ -285,8 +296,10 @@
<
script
>
import
{
listJob
,
getJob
,
delJob
,
addJob
,
updateJob
,
exportJob
,
runJob
,
changeJobStatus
}
from
"@/api/monitor/job"
;
import
Crontab
from
'@/components/Crontab'
export
default
{
components
:
{
Crontab
},
name
:
"Job"
,
data
()
{
return
{
...
...
@@ -312,6 +325,10 @@ export default {
open
:
false
,
// 是否显示详细弹出层
openView
:
false
,
// 是否显示Cron表达式弹出层
openCron
:
false
,
// 传入的表达式
expression
:
""
,
// 任务组名字典
jobGroupOptions
:
[],
// 状态字典
...
...
@@ -448,6 +465,15 @@ export default {
this
.
openView
=
true
;
});
},
/** cron表达式按钮操作 */
handleShowCron
()
{
this
.
expression
=
this
.
form
.
cronExpression
;
this
.
openCron
=
true
;
},
/** 确定后回传值 */
crontabFill
(
value
)
{
this
.
form
.
cronExpression
=
value
;
},
/** 任务日志列表查询 */
handleJobLog
(
row
)
{
const
jobId
=
row
.
jobId
||
0
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论