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
b35f708c
Commit
b35f708c
authored
Sep 05, 2021
by
linzh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修正单词拼写错误
parent
0e615072
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 @
b35f708c
<
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 @
b35f708c
<
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 @
b35f708c
<
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 @
b35f708c
<
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 @
b35f708c
<
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 @
b35f708c
<
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 @
b35f708c
<
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