Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
finance-manage
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
finance-oa
finance-manage
Commits
4988b585
Commit
4988b585
authored
Sep 07, 2021
by
若依
Committed by
Gitee
Sep 07, 2021
Browse files
Options
Browse Files
Download
Plain Diff
!309 修正单词拼写错误
Merge pull request !309 from 稚屿/master
parents
0e615072
b35f708c
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1742 additions
and
1742 deletions
+1742
-1742
ruoyi-ui/src/components/Crontab/day.vue
ruoyi-ui/src/components/Crontab/day.vue
+179
-179
ruoyi-ui/src/components/Crontab/index.vue
ruoyi-ui/src/components/Crontab/index.vue
+425
-425
ruoyi-ui/src/components/Crontab/month.vue
ruoyi-ui/src/components/Crontab/month.vue
+128
-128
ruoyi-ui/src/components/Crontab/result.vue
ruoyi-ui/src/components/Crontab/result.vue
+566
-566
ruoyi-ui/src/components/Crontab/second.vue
ruoyi-ui/src/components/Crontab/second.vue
+133
-133
ruoyi-ui/src/components/Crontab/week.vue
ruoyi-ui/src/components/Crontab/week.vue
+167
-167
ruoyi-ui/src/components/Crontab/year.vue
ruoyi-ui/src/components/Crontab/year.vue
+144
-144
No files found.
ruoyi-ui/src/components/Crontab/day.vue
View file @
4988b585
<
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
<
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
'
,
'
month
'
,
'
*
'
,
'
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
>
ruoyi-ui/src/components/Crontab/index.vue
View file @
4988b585
<
template
>
<div>
<el-tabs
type=
"border-card"
>
<el-tab-pane
label=
"秒"
v-if=
"shouldHide('second')"
>
<CrontabSecond
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
ref=
"cronsecond"
/>
</el-tab-pane>
<el-tab-pane
label=
"分钟"
v-if=
"shouldHide('min')"
>
<CrontabMin
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
:cron=
"c
ontabValueObj"
ref=
"cronmin"
/>
</el-tab-pane>
<el-tab-pane
label=
"小时"
v-if=
"shouldHide('hour')"
>
<CrontabHour
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
:cron=
"c
ontabValueObj"
ref=
"cronhour"
/>
</el-tab-pane>
<el-tab-pane
label=
"日"
v-if=
"shouldHide('day')"
>
<CrontabDay
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
:cron=
"c
ontabValueObj"
ref=
"cronday"
/>
</el-tab-pane>
<el-tab-pane
label=
"月"
v-if=
"shouldHide('mo
uth')"
>
<CrontabMo
uth
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
:cron=
"c
ontabValueObj"
ref=
"cronmo
uth"
/>
</el-tab-pane>
<el-tab-pane
label=
"周"
v-if=
"shouldHide('week')"
>
<CrontabWeek
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
:cron=
"c
ontabValueObj"
ref=
"cronweek"
/>
</el-tab-pane>
<el-tab-pane
label=
"年"
v-if=
"shouldHide('year')"
>
<CrontabYear
@
update=
"updateC
ontabValue"
:check=
"checkNumber"
:cron=
"c
ontabValueObj"
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>
{{
c
ontabValueObj
.
second
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueObj
.
min
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueObj
.
hour
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueObj
.
day
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueObj
.
mouth
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueObj
.
week
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueObj
.
year
}}
</span>
</td>
<td>
<span>
{{
c
ontabValueString
}}
</span>
</td>
</tbody>
</table>
</div>
<CrontabResult
:ex=
"c
ontabValueString"
></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
CrontabMo
uth
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
,
c
ontabValueObj
:
{
second
:
"
*
"
,
min
:
"
*
"
,
hour
:
"
*
"
,
day
:
"
*
"
,
mo
uth
:
"
*
"
,
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
],
mo
uth
:
arr
[
4
],
week
:
arr
[
5
],
year
:
arr
[
6
]
?
arr
[
6
]
:
""
,
};
this
.
c
ontabValueObj
=
{
...
obj
,
};
for
(
let
i
in
obj
)
{
if
(
obj
[
i
])
this
.
changeRadio
(
i
,
obj
[
i
]);
}
}
}
else
{
//
没有传入的表达式 则还原
this
.
clearCron
();
}
},
// tab切换值
tabCheck
(
index
)
{
this
.
tabActive
=
index
;
},
// 由子组件触发,更改表达式组成的字段值
updateC
ontabValue
(
name
,
value
,
from
)
{
"
updateC
ontabValue
"
,
name
,
value
,
from
;
this
.
c
ontabValueObj
[
name
]
=
value
;
if
(
from
&&
from
!==
name
)
{
console
.
log
(
`来自组件
${
from
}
改变了
${
name
}
${
value
}
`
);
this
.
changeRadio
(
name
,
value
);
}
},
//
赋值到组件
changeRadio
(
name
,
value
)
{
let
arr
=
[
"
second
"
,
"
min
"
,
"
hour
"
,
"
mo
uth
"
],
refName
=
"
cron
"
+
name
,
insV
laue
;
if
(
!
this
.
$refs
[
refName
])
return
;
if
(
arr
.
includes
(
name
))
{
if
(
value
===
"
*
"
)
{
insV
laue
=
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
];
insV
laue
=
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
];
insV
laue
=
3
;
}
else
{
insV
laue
=
4
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
}
}
else
if
(
name
==
"
day
"
)
{
if
(
value
===
"
*
"
)
{
insV
laue
=
1
;
}
else
if
(
value
==
"
?
"
)
{
insV
laue
=
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
];
insV
laue
=
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
];
insV
laue
=
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
]);
insV
laue
=
5
;
}
else
if
(
value
===
"
L
"
)
{
insV
laue
=
6
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
insV
laue
=
7
;
}
}
else
if
(
name
==
"
week
"
)
{
if
(
value
===
"
*
"
)
{
insV
laue
=
1
;
}
else
if
(
value
==
"
?
"
)
{
insV
laue
=
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
];
insV
laue
=
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
];
insV
laue
=
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
]);
insV
laue
=
5
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
insV
laue
=
7
;
}
}
else
if
(
name
==
"
year
"
)
{
if
(
value
==
""
)
{
insV
laue
=
1
;
}
else
if
(
value
==
"
*
"
)
{
insV
laue
=
2
;
}
else
if
(
value
.
indexOf
(
"
-
"
)
>
-
1
)
{
insV
laue
=
3
;
}
else
if
(
value
.
indexOf
(
"
/
"
)
>
-
1
)
{
insV
laue
=
4
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
insV
laue
=
5
;
}
}
this
.
$refs
[
refName
].
radioValue
=
insV
laue
;
},
// 表单选项的子组件校验数字格式(通过-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
.
c
ontabValueString
);
this
.
hidePopup
();
},
clearCron
()
{
// 还原选择项
(
"
准备还原
"
);
this
.
c
ontabValueObj
=
{
second
:
"
*
"
,
min
:
"
*
"
,
hour
:
"
*
"
,
day
:
"
*
"
,
mo
uth
:
"
*
"
,
week
:
"
?
"
,
year
:
""
,
};
for
(
let
j
in
this
.
c
ontabValueObj
)
{
this
.
changeRadio
(
j
,
this
.
c
ontabValueObj
[
j
]);
}
},
},
computed
:
{
c
ontabValueString
:
function
()
{
let
obj
=
this
.
c
ontabValueObj
;
let
str
=
obj
.
second
+
"
"
+
obj
.
min
+
"
"
+
obj
.
hour
+
"
"
+
obj
.
day
+
"
"
+
obj
.
mo
uth
+
"
"
+
obj
.
week
+
(
obj
.
year
==
""
?
""
:
"
"
+
obj
.
year
);
return
str
;
},
},
components
:
{
CrontabSecond
,
CrontabMin
,
CrontabHour
,
CrontabDay
,
CrontabMo
uth
,
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
>
<
template
>
<div>
<el-tabs
type=
"border-card"
>
<el-tab-pane
label=
"秒"
v-if=
"shouldHide('second')"
>
<CrontabSecond
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
ref=
"cronsecond"
/>
</el-tab-pane>
<el-tab-pane
label=
"分钟"
v-if=
"shouldHide('min')"
>
<CrontabMin
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
:cron=
"c
rontabValueObj"
ref=
"cronmin"
/>
</el-tab-pane>
<el-tab-pane
label=
"小时"
v-if=
"shouldHide('hour')"
>
<CrontabHour
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
:cron=
"c
rontabValueObj"
ref=
"cronhour"
/>
</el-tab-pane>
<el-tab-pane
label=
"日"
v-if=
"shouldHide('day')"
>
<CrontabDay
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
:cron=
"c
rontabValueObj"
ref=
"cronday"
/>
</el-tab-pane>
<el-tab-pane
label=
"月"
v-if=
"shouldHide('mo
nth')"
>
<CrontabMo
nth
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
:cron=
"c
rontabValueObj"
ref=
"cronmo
nth"
/>
</el-tab-pane>
<el-tab-pane
label=
"周"
v-if=
"shouldHide('week')"
>
<CrontabWeek
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
:cron=
"c
rontabValueObj"
ref=
"cronweek"
/>
</el-tab-pane>
<el-tab-pane
label=
"年"
v-if=
"shouldHide('year')"
>
<CrontabYear
@
update=
"updateC
rontabValue"
:check=
"checkNumber"
:cron=
"c
rontabValueObj"
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>
{{
c
rontabValueObj
.
second
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueObj
.
min
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueObj
.
hour
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueObj
.
day
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueObj
.
month
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueObj
.
week
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueObj
.
year
}}
</span>
</td>
<td>
<span>
{{
c
rontabValueString
}}
</span>
</td>
</tbody>
</table>
</div>
<CrontabResult
:ex=
"c
rontabValueString"
></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
CrontabMo
nth
from
"
./month.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
,
c
rontabValueObj
:
{
second
:
"
*
"
,
min
:
"
*
"
,
hour
:
"
*
"
,
day
:
"
*
"
,
mo
nth
:
"
*
"
,
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
],
mo
nth
:
arr
[
4
],
week
:
arr
[
5
],
year
:
arr
[
6
]
?
arr
[
6
]
:
""
,
};
this
.
c
rontabValueObj
=
{
...
obj
,
};
for
(
let
i
in
obj
)
{
if
(
obj
[
i
])
this
.
changeRadio
(
i
,
obj
[
i
]);
}
}
}
else
{
//
没有传入的表达式 则还原
this
.
clearCron
();
}
},
// tab切换值
tabCheck
(
index
)
{
this
.
tabActive
=
index
;
},
// 由子组件触发,更改表达式组成的字段值
updateC
rontabValue
(
name
,
value
,
from
)
{
"
updateC
rontabValue
"
,
name
,
value
,
from
;
this
.
c
rontabValueObj
[
name
]
=
value
;
if
(
from
&&
from
!==
name
)
{
console
.
log
(
`来自组件
${
from
}
改变了
${
name
}
${
value
}
`
);
this
.
changeRadio
(
name
,
value
);
}
},
//
赋值到组件
changeRadio
(
name
,
value
)
{
let
arr
=
[
"
second
"
,
"
min
"
,
"
hour
"
,
"
mo
nth
"
],
refName
=
"
cron
"
+
name
,
insV
alue
;
if
(
!
this
.
$refs
[
refName
])
return
;
if
(
arr
.
includes
(
name
))
{
if
(
value
===
"
*
"
)
{
insV
alue
=
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
];
insV
alue
=
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
];
insV
alue
=
3
;
}
else
{
insV
alue
=
4
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
}
}
else
if
(
name
==
"
day
"
)
{
if
(
value
===
"
*
"
)
{
insV
alue
=
1
;
}
else
if
(
value
==
"
?
"
)
{
insV
alue
=
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
];
insV
alue
=
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
];
insV
alue
=
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
]);
insV
alue
=
5
;
}
else
if
(
value
===
"
L
"
)
{
insV
alue
=
6
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
insV
alue
=
7
;
}
}
else
if
(
name
==
"
week
"
)
{
if
(
value
===
"
*
"
)
{
insV
alue
=
1
;
}
else
if
(
value
==
"
?
"
)
{
insV
alue
=
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
];
insV
alue
=
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
];
insV
alue
=
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
]);
insV
alue
=
5
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
insV
alue
=
7
;
}
}
else
if
(
name
==
"
year
"
)
{
if
(
value
==
""
)
{
insV
alue
=
1
;
}
else
if
(
value
==
"
*
"
)
{
insV
alue
=
2
;
}
else
if
(
value
.
indexOf
(
"
-
"
)
>
-
1
)
{
insV
alue
=
3
;
}
else
if
(
value
.
indexOf
(
"
/
"
)
>
-
1
)
{
insV
alue
=
4
;
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
);
insV
alue
=
5
;
}
}
this
.
$refs
[
refName
].
radioValue
=
insV
alue
;
},
// 表单选项的子组件校验数字格式(通过-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
.
c
rontabValueString
);
this
.
hidePopup
();
},
clearCron
()
{
// 还原选择项
(
"
准备还原
"
);
this
.
c
rontabValueObj
=
{
second
:
"
*
"
,
min
:
"
*
"
,
hour
:
"
*
"
,
day
:
"
*
"
,
mo
nth
:
"
*
"
,
week
:
"
?
"
,
year
:
""
,
};
for
(
let
j
in
this
.
c
rontabValueObj
)
{
this
.
changeRadio
(
j
,
this
.
c
rontabValueObj
[
j
]);
}
},
},
computed
:
{
c
rontabValueString
:
function
()
{
let
obj
=
this
.
c
rontabValueObj
;
let
str
=
obj
.
second
+
"
"
+
obj
.
min
+
"
"
+
obj
.
hour
+
"
"
+
obj
.
day
+
"
"
+
obj
.
mo
nth
+
"
"
+
obj
.
week
+
(
obj
.
year
==
""
?
""
:
"
"
+
obj
.
year
);
return
str
;
},
},
components
:
{
CrontabSecond
,
CrontabMin
,
CrontabHour
,
CrontabDay
,
CrontabMo
nth
,
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/mo
u
th.vue
→
ruoyi-ui/src/components/Crontab/mo
n
th.vue
View file @
4988b585
<
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
<
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-month
'
,
props
:
[
'
check
'
,
'
cron
'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
radioValue
===
1
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
'
*
'
);
this
.
$emit
(
'
update
'
,
'
year
'
,
'
*
'
);
}
else
{
if
(
this
.
cron
.
day
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
day
'
,
'
0
'
,
'
month
'
);
}
if
(
this
.
cron
.
hour
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
hour
'
,
'
0
'
,
'
month
'
);
}
if
(
this
.
cron
.
min
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
min
'
,
'
0
'
,
'
month
'
);
}
if
(
this
.
cron
.
second
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
second
'
,
'
0
'
,
'
month
'
);
}
}
switch
(
this
.
radioValue
)
{
case
2
:
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
cycle01
+
'
-
'
+
this
.
cycle02
);
break
;
case
3
:
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
average01
+
'
/
'
+
this
.
average02
);
break
;
case
4
:
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
checkboxString
);
break
;
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
2
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
cycleTotal
);
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
averageTotal
);
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
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
>
ruoyi-ui/src/components/Crontab/result.vue
View file @
4988b585
<
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
<
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
nMonth
=
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
.
getMonthArr
(
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
,
nMonth
);
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
resetMonth
=
function
()
{
MIdx
=
0
;
nMonth
=
MDate
[
MIdx
]
resetDay
();
}
// 如果当前年份不为数组中当前值
if
(
nYear
!==
YDate
[
YIdx
])
{
resetMonth
();
}
// 如果当前月份不为数组中当前值
if
(
nMonth
!==
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
(
nMonth
>
MDate
[
MDate
.
length
-
1
])
{
resetMonth
();
continue
;
}
// 循环月份数组
goMonth
:
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
)
{
resetMonth
();
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
)
{
resetMonth
();
continue
goYear
;
}
continue
goMonth
;
}
continue
;
}
// 判断日期的合法性,不合法的话也是跳出当前循环
if
(
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
&&
this
.
dayRule
!==
'
workDay
'
&&
this
.
dayRule
!==
'
lastWeek
'
&&
this
.
dayRule
!==
'
lastDay
'
)
{
resetDay
();
continue
goMonth
;
}
// 如果日期规则中有值时
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
)
{
resetMonth
();
continue
goYear
;
}
continue
goMonth
;
}
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
)
{
resetMonth
();
continue
goYear
;
}
continue
goMonth
;
}
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
)
{
resetMonth
();
continue
goYear
;
}
continue
goMonth
;
}
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
)
{
resetMonth
();
continue
goYear
;
}
continue
goMonth
;
}
continue
goDay
;
}
continue
goHour
;
}
continue
goMin
;
}
}
//goSecond
}
//goMin
}
//goHour
}
//goDay
}
//goMonth
}
// 判断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
)
}
}
},
// 获取"月"数组
getMonthArr
(
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
>
ruoyi-ui/src/components/Crontab/second.vue
View file @
4988b585
<
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
<
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
>
ruoyi-ui/src/components/Crontab/week.vue
View file @
4988b585
<
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
<
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
.
month
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
'
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
>
ruoyi-ui/src/components/Crontab/year.vue
View file @
4988b585
<
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
<
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
'
,
'
month
'
,
'
cron
'
],
methods
:
{
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
cron
.
month
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
'
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
>
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