先上效果图
自定义组件
<template> <a-modal title="corn表达式" :width="modalWidth" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="close" cancelText="关闭"> <div class="card-container"> <a-tabs type="card"> <a-tab-pane key="1" type="card"> <span slot="tab"><a-icon type="schedule" /> 秒</span> <a-radio-group v-model="result.second.cronEvery"> <a-row @click="handleChange"> <a-radio value="1">每一秒钟</a-radio> </a-row> <a-row> <a-radio value="2">每隔 <a-input-number size="small" v-model="result.second.incrementIncrement" :min="0" :max="60"></a-input-number> 秒执行 从 <a-input-number size="small" v-model="result.second.incrementStart" :min="0" :max="59"></a-input-number> 秒开始 </a-radio> </a-row> <a-row> <a-radio value="3">具体秒数(可多选)</a-radio> <a-select style="width:354px;" size="small" mode="multiple" v-model="result.second.specificSpecific"> <a-select-option v-for="(val,index) in 60" :key="index" :value="index">{{ index }}</a-select-option> </a-select> </a-row> <a-row> <a-radio value="4">周期从 <a-input-number size="small" v-model="result.second.rangeStart" :min="0" :max="60"></a-input-number> 到 <a-input-number size="small" v-model="result.second.rangeEnd" :min="0" :max="59"></a-input-number> 秒 </a-radio> </a-row> </a-radio-group> </a-tab-pane> <a-tab-pane key="2"> <span slot="tab"><a-icon type="schedule" />分</span> <div class="tabBody"> <a-radio-group v-model="result.minute.cronEvery"> <a-row> <a-radio value="1">每一分钟</a-radio> </a-row> <a-row> <a-radio value="2">每隔 <a-input-number size="small" v-model="result.minute.incrementIncrement" :min="1" :max="60"></a-input-number> 分执行 从 <a-input-number size="small" v-model="result.minute.incrementStart" :min="0" :max="59"></a-input-number> 分开始 </a-radio> </a-row> <a-row> <a-radio value="3">具体分钟数(可多选)</a-radio> <a-select style="width:340px;" size="small" mode="multiple" v-model="result.minute.specificSpecific"> <a-select-option v-for="(val,index) in Array(60)" :key="index" :value="index"> {{ index }}</a-select-option> </a-select> </a-row> <a-row> <a-radio value="4">周期从 <a-input-number size="small" v-model="result.minute.rangeStart" :min="0" :max="60"></a-input-number> 到 <a-input-number size="small" v-model="result.minute.rangeEnd" :min="0" :max="59"></a-input-number> 分 </a-radio> </a-row> </a-radio-group> </div> </a-tab-pane> <a-tab-pane key="3"> <span slot="tab"><a-icon type="schedule" /> 时</span> <div class="tabBody"> <a-radio-group v-model="result.hour.cronEvery"> <a-row> <a-radio value="1">每一小时</a-radio> </a-row> <a-row> <a-radio value="2">每隔 <a-input-number size="small" v-model="result.hour.incrementIncrement" :min="0" :max="23"></a-input-number> 小时执行 从 <a-input-number size="small" v-model="result.hour.incrementStart" :min="0" :max="23"></a-input-number> 小时开始 </a-radio> </a-row> <a-row> <a-radio class="long" value="3">具体小时数(可多选)</a-radio> <a-select style="width:340px;" size="small" mode="multiple" v-model="result.hour.specificSpecific"> <a-select-option v-for="(val,index) in Array(24)" :key="index" >{{ index }}</a-select-option> </a-select> </a-row> <a-row> <a-radio value="4">周期从 <a-input-number size="small" v-model="result.hour.rangeStart" :min="0" :max="23"></a-input-number> 到 <a-input-number size="small" v-model="result.hour.rangeEnd" :min="0" :max="23"></a-input-number> 小时 </a-radio> </a-row> </a-radio-group> </div> </a-tab-pane> <a-tab-pane key="4"> <span slot="tab"><a-icon type="schedule" /> 天</span> <div class="tabBody"> <a-radio-group v-model="result.day.cronEvery"> <a-row> <a-radio value="1">每一天</a-radio> </a-row> <a-row> <a-radio value="2">每隔 <a-input-number size="small" v-model="result.week.incrementIncrement" :min="1" :max="7"></a-input-number> 周执行 从 <a-select size="small" v-model="result.week.incrementStart"> <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option> </a-select> 开始 </a-radio> </a-row> <a-row> <a-radio value="3">每隔 <a-input-number size="small" v-model="result.day.incrementIncrement" :min="1" :max="31"></a-input-number> 天执行 从 <a-input-number size="small" v-model="result.day.incrementStart" :min="1" :max="31"></a-input-number> 天开始 </a-radio> </a-row> <a-row> <a-radio class="long" value="4">具体星期几(可多选)</a-radio> <a-select style="width:340px;" size="small" mode="multiple" v-model="result.week.specificSpecific"> <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option> </a-select> </a-row> <a-row> <a-radio class="long" value="5">具体天数(可多选)</a-radio> <a-select style="width:354px;" size="small" mode="multiple" v-model="result.day.specificSpecific"> <a-select-option v-for="(val,index) in Array(31)" :key="index" :value="index+1">{{ index+1 }}</a-select-option> </a-select> </a-row> <a-row> <a-radio value="6">在这个月的最后一天</a-radio> </a-row> <a-row> <a-radio value="7">在这个月的最后一个工作日</a-radio> </a-row> <a-row> <a-radio value="8">在这个月的最后一个 <a-select size="small" v-model="result.day.cronLastSpecificDomDay"> <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option> </a-select> </a-radio> </a-row> <a-row> <a-radio value="9"> 在本月底前 <a-input-number size="small" v-model="result.day.cronDaysBeforeEomMinus" :min="1" :max="31"></a-input-number> 天 </a-radio> </a-row> <a-row> <a-radio value="10">最近的工作日(周一至周五)至本月 <a-input-number size="small" v-model="result.day.cronDaysNearestWeekday" :min="1" :max="31"></a-input-number> 日 </a-radio> </a-row> <a-row> <a-radio value="11">在这个月的第 <a-input-number size="small" v-model="result.week.cronNthDayNth" :min="1" :max="5"></a-input-number> 个 <a-select size="small" v-model="result.week.cronNthDayDay"> <a-select-option v-for="(val,index) in Array(7)" :key="index" :value="index+1">{{ weekDays[index] }}</a-select-option> </a-select> </a-radio> </a-row> </a-radio-group> </div> </a-tab-pane> <a-tab-pane key="5"> <span slot="tab"><a-icon type="schedule" /> 月</span> <div class="tabBody"> <a-radio-group v-model="result.month.cronEvery"> <a-row> <a-radio value="1">每一月</a-radio> </a-row> <a-row> <a-radio value="2">每隔 <a-input-number size="small" v-model="result.month.incrementIncrement" :min="0" :max="12"></a-input-number> 月执行 从 <a-input-number size="small" v-model="result.month.incrementStart" :min="0" :max="12"></a-input-number> 月开始 </a-radio> </a-row> <a-row> <a-radio class="long" value="3">具体月数(可多选)</a-radio> <a-select style="width:354px;" size="small" filterable mode="multiple" v-model="result.month.specificSpecific"> <a-select-option v-for="(val,index) in Array(12)" :key="index" :value="index+1">{{ index+1 }}</a-select-option> </a-select> </a-row> <a-row> <a-radio value="4">从 <a-input-number size="small" v-model="result.month.rangeStart" :min="1" :max="12"></a-input-number> 到 <a-input-number size="small" v-model="result.month.rangeEnd" :min="1" :max="12"></a-input-number> 月之间的每个月 </a-radio> </a-row> </a-radio-group> </div> </a-tab-pane> <a-tab-pane key="6"> <span slot="tab"><a-icon type="schedule" /> 年</span> <div class="tabBody"> <a-radio-group v-model="result.year.cronEvery"> <a-row> <a-radio value="1">每一年</a-radio> </a-row> <a-row> <a-radio value="2">每隔 <a-input-number size="small" v-model="result.year.incrementIncrement" :min="1" :max="99"></a-input-number> 年执行 从 <a-input-number size="small" v-model="result.year.incrementStart" :min="2019" :max="2119"></a-input-number> 年开始 </a-radio> </a-row> <a-row> <a-radio class="long" value="3">具体年份(可多选)</a-radio> <a-select style="width:354px;" size="small" filterable mode="multiple" v-model="result.year.specificSpecific"> <a-select-option v-for="(val,index) in Array(100)" :key="index" :value="2019+index">{{ 2019+index }}</a-select-option> </a-select> </a-row> <a-row> <a-radio value="4">从 <a-input-number size="small" v-model="result.year.rangeStart" :min="2019" :max="2119"></a-input-number> 到 <a-input-number size="small" v-model="result.year.rangeEnd" :min="2019" :max="2119"></a-input-number> 年之间的每一年 </a-radio> </a-row> </a-radio-group> </div> </a-tab-pane> </a-tabs> <div class="bottom"> <span class="value" @input="handleChange" >{{ this.cron }} </span> </div> <label>最近运行时间:</label> <div class="bottom"> <ul> <li v-for="run in this.test" :key="run">{{ run |formatDate('yyyy-MM-dd HH:mm:ss') }}</li> </ul> </div> </div> </a-modal> </template> <script> import cronParser from 'cron-parser' export default { name: 'VueCron', props: { data: { type: String, default: null } }, data () { return { cronExpression: '', nextRun: '', prevRuns: [], visible: false, confirmLoading: false, size: 'large', weekDays: ['一', '二', '三', '四', '五', '六', '天'].map(val => '星期' + val), result: { second: {}, minute: {}, hour: {}, day: {}, week: {}, month: {}, year: {} }, defaultValue: { second: { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: 0, specificSpecific: [] }, minute: { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: '0', specificSpecific: [] }, hour: { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: '0', rangeEnd: '0', specificSpecific: [] }, day: { cronEvery: '', incrementStart: 1, incrementIncrement: '1', rangeStart: '', rangeEnd: '', specificSpecific: [], cronLastSpecificDomDay: 1, cronDaysBeforeEomMinus: 1, cronDaysNearestWeekday: 1 }, week: { cronEvery: '', incrementStart: 1, incrementIncrement: 1, specificSpecific: [], cronNthDayDay: 1, cronNthDayNth: 1 }, month: { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: 1, specificSpecific: [] }, year: { cronEvery: '', incrementStart: 2017, incrementIncrement: 1, rangeStart: 2019, rangeEnd: 2019, specificSpecific: [] }, label: '' } } }, computed: { modalWidth () { return 608 }, secondsText () { let seconds = '' const cronEvery = this.result.second.cronEvery || '' switch (cronEvery.toString()) { case '1': seconds = '*' break case '2': seconds = this.result.second.incrementStart + '/' + this.result.second.incrementIncrement break case '3': this.result.second.specificSpecific.map(val => { seconds += val + ',' }) seconds = seconds.slice(0, -1) break case '4': seconds = this.result.second.rangeStart + '-' + this.result.second.rangeEnd break } return seconds }, minutesText () { let minutes = '' const cronEvery = this.result.minute.cronEvery || '' switch (cronEvery.toString()) { case '1': minutes = '*' break case '2': minutes = this.result.minute.incrementStart + '/' + this.result.minute.incrementIncrement break case '3': this.result.minute.specificSpecific.map(val => { minutes += val + ',' }) minutes = minutes.slice(0, -1) break case '4': minutes = this.result.minute.rangeStart + '-' + this.result.minute.rangeEnd break } return minutes }, hoursText () { let hours = '' const cronEvery = this.result.hour.cronEvery || '' switch (cronEvery.toString()) { case '1': hours = '*' break case '2': hours = this.result.hour.incrementStart + '/' + this.result.hour.incrementIncrement break case '3': this.result.hour.specificSpecific.map(val => { hours += val + ',' }) hours = hours.slice(0, -1) break case '4': hours = this.result.hour.rangeStart + '-' + this.result.hour.rangeEnd break } return hours }, daysText () { let days = '' const cronEvery = this.result.day.cronEvery || '' switch (cronEvery.toString()) { case '1': break case '2': case '4': case '11': days = '?' break case '3': days = this.result.day.incrementStart + '/' + this.result.day.incrementIncrement break case '5': this.result.day.specificSpecific.map(val => { days += val + ',' }) days = days.slice(0, -1) break case '6': days = 'L' break case '7': days = 'LW' break case '8': days = this.result.day.cronLastSpecificDomDay + 'L' break case '9': days = 'L-' + this.result.day.cronDaysBeforeEomMinus break case '10': days = this.result.day.cronDaysNearestWeekday + 'W' break } return days }, weeksText () { let weeks = '' const cronEvery = this.result.day.cronEvery || '' switch (cronEvery.toString()) { case '1': case '3': case '5': weeks = '?' break case '2': weeks = this.result.week.incrementStart + '/' + this.result.week.incrementIncrement break case '4': this.result.week.specificSpecific.map(val => { weeks += val + ',' }) weeks = weeks.slice(0, -1) break case '6': case '7': case '8': case '9': case '10': weeks = '?' break case '11': weeks = this.result.week.cronNthDayDay + '#' + this.result.week.cronNthDayNth break } return weeks }, monthsText () { let months = '' const cronEvery = this.result.month.cronEvery || '' switch (cronEvery.toString()) { case '1': months = '*' break case '2': months = this.result.month.incrementStart + '/' + this.result.month.incrementIncrement break case '3': this.result.month.specificSpecific.map(val => { months += val + ',' }) months = months.slice(0, -1) break case '4': months = this.result.month.rangeStart + '-' + this.result.month.rangeEnd break } return months }, yearsText () { let years = '' const cronEvery = this.result.year.cronEvery || '' switch (cronEvery.toString()) { case '1': years = '*' break case '2': years = this.result.year.incrementStart + '/' + this.result.year.incrementIncrement break case '3': this.result.year.specificSpecific.map(val => { years += val + ',' }) years = years.slice(0, -1) break case '4': years = this.result.year.rangeStart + '-' + this.result.year.rangeEnd break } return years }, cron () { return `${this.secondsText || '0'} ${this.minutesText || '*'} ${this.hoursText || '*'} ${this.daysText || '*'} ${this.monthsText || '*'} ${this.weeksText || '?'}` }, test () { try { const interval = cronParser.parseExpression(this.cron) return interval.iterate(5).map((date) => date.toString()) } catch (error) { console.error('Invalid cron expression:', error) return [] } } }, watch: { visible: { handler () { const label = this.data if (label) { this.secondsReverseExp(label) this.minutesReverseExp(label) this.hoursReverseExp(label) this.daysReverseExp(label) this.daysReverseExp(label) this.monthsReverseExp(label) this.yearReverseExp(label) JSON.parse(JSON.stringify(label)) } else { this.result = JSON.parse(JSON.stringify(this.defaultValue)) } } } }, filters: { formatDate: function (value, args) { var dt = new Date(value) if (args === 'yyyy-M-d') { const year = dt.getFullYear() const month = dt.getMonth() + 1 const date = dt.getDate() return `${year}-${month}-${date}` } else if (args === 'yyyy-M-d H:m:s') { const year = dt.getFullYear() const month = dt.getMonth() + 1 const date = dt.getDate() const hour = dt.getHours() const minute = dt.getMinutes() const second = dt.getSeconds() return `${year}-${month}-${date} ${hour}:${minute}:${second}` } else if (args === 'yyyy-MM-dd') { const year = dt.getFullYear() const month = (dt.getMonth() + 1).toString().padStart(2, '0') const date = dt.getDate().toString().padStart(2, '0') return `${year}-${month}-${date}` } else { const year = dt.getFullYear() const month = (dt.getMonth() + 1).toString().padStart(2, '0') const date = dt.getDate().toString().padStart(2, '0') const hour = dt.getHours().toString().padStart(2, '0') const minute = dt.getMinutes().toString().padStart(2, '0') const second = dt.getSeconds().toString().padStart(2, '0') return `${year}-${month}-${date} ${hour}:${minute}:${second}` } } }, methods: { show () { this.visible = true }, handleChange () { if (this.cron) { try { const interval = cronParser.parseExpression(this.cron) this.prevRuns = interval.iterate(5).map((date) => date.toISOString()) } catch (error) { this.prevRuns = [] console.error('Invalid cron expression:', error) } } else { this.prevRuns = [] } }, handleSubmit () { this.$emit('ok', this.cron) this.close() this.visible = false }, close () { this.visible = false }, secondsReverseExp (seconds) { const val = seconds.split(' ')[0] const second = { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: 0, specificSpecific: [] } switch (true) { case val.includes('*'): second.cronEvery = '1' break case val.includes('/'): second.cronEvery = '2' second.incrementStart = val.split('/')[0] second.incrementIncrement = val.split('/')[1] break case val.includes(','): second.cronEvery = '3' second.specificSpecific = val.split(',').map(Number).sort() break case val.includes('-'): second.cronEvery = '4' second.rangeStart = val.split('-')[0] second.rangeEnd = val.split('-')[1] break default: second.cronEvery = '1' } this.result.second = second }, minutesReverseExp (minutes) { const val = minutes.split(' ')[1] const minute = { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: 0, specificSpecific: [] } switch (true) { case val.includes('*'): minute.cronEvery = '1' break case val.includes('/'): minute.cronEvery = '2' minute.incrementStart = val.split('/')[0] minute.incrementIncrement = val.split('/')[1] break case val.includes(','): minute.cronEvery = '3' minute.specificSpecific = val.split(',').map(Number).sort() break case val.includes('-'): minute.cronEvery = '4' minute.rangeStart = val.split('-')[0] minute.rangeEnd = val.split('-')[1] break default: minute.cronEvery = '1' } this.result.minute = minute }, hoursReverseExp (hours) { const val = hours.split(' ')[2] const hour = { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: '0', specificSpecific: [] } switch (true) { case val.includes('*'): hour.cronEvery = '1' break case val.includes('/'): hour.cronEvery = '2' hour.incrementStart = val.split('/')[0] hour.incrementIncrement = val.split('/')[1] break case val.includes(','): hour.cronEvery = '3' hour.specificSpecific = val.split(',').map(Number).sort() break case val.includes('-'): hour.cronEvery = '4' hour.rangeStart = val.split('-')[0] hour.rangeEnd = val.split('-')[1] break default: hour.cronEvery = '1' } this.result.hour = hour }, daysReverseExp (cron) { const days = cron.split(' ')[3] const weeks = cron.split(' ')[5] const day = { cronEvery: '', incrementStart: 1, incrementIncrement: 1, rangeStart: 1, rangeEnd: 1, specificSpecific: [], cronLastSpecificDomDay: 1, cronDaysBeforeEomMinus: 1, cronDaysNearestWeekday: 1 } const week = { cronEvery: '', incrementStart: 1, incrementIncrement: 1, specificSpecific: [], cronNthDayDay: 1, cronNthDayNth: '1' } if (!days.includes('?')) { switch (true) { case days.includes('*'): day.cronEvery = '1' break case days.includes('?'): // 2、4、11 break case days.includes('/'): day.cronEvery = '3' day.incrementStart = days.split('/')[0] day.incrementIncrement = days.split('/')[1] break case days.includes(','): day.cronEvery = '5' day.specificSpecific = days.split(',').map(Number).sort() // day.specificSpecific.forEach(function (value, index) { // day.specificSpecific[index] = value -1 // }) break case days.includes('LW'): day.cronEvery = '7' break case days.includes('L-'): day.cronEvery = '9' day.cronDaysBeforeEomMinus = days.split('L-')[1] break case days.includes('L'): // alert(days) if (days.len === 1) { day.cronEvery = '6' day.cronLastSpecificDomDay = '1' } else { day.cronEvery = '8' day.cronLastSpecificDomDay = Number(days.split('L')[0]) } break case days.includes('W'): day.cronEvery = '10' day.cronDaysNearestWeekday = days.split('W')[0] break default: day.cronEvery = '1' } } else { switch (true) { case weeks.includes('/'): day.cronEvery = '2' week.incrementStart = weeks.split('/')[0] week.incrementIncrement = weeks.split('/')[1] break case weeks.includes(','): day.cronEvery = '4' week.specificSpecific = weeks.split(',').map(Number).sort() break case '#': day.cronEvery = '11' week.cronNthDayDay = weeks.split('#')[0] week.cronNthDayNth = weeks.split('#')[1] break default: day.cronEvery = '1' week.cronEvery = '1' } } this.result.day = day this.result.week = week }, monthsReverseExp (cron) { const months = cron.split(' ')[4] const month = { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 1, rangeEnd: 1, specificSpecific: [] } switch (true) { case months.includes('*'): month.cronEvery = '1' break case months.includes('/'): month.cronEvery = '2' month.incrementStart = months.split('/')[0] month.incrementIncrement = months.split('/')[1] break case months.includes(','): month.cronEvery = '3' month.specificSpecific = months.split(',').map(Number).sort() break case months.includes('-'): month.cronEvery = '4' month.rangeStart = months.split('-')[0] month.rangeEnd = months.split('-')[1] break default: month.cronEvery = '1' } this.result.month = month }, yearReverseExp (cron) { const years = cron.split(' ')[6] const year = { cronEvery: '', incrementStart: 3, incrementIncrement: 5, rangeStart: 2019, rangeEnd: 2019, specificSpecific: [] } switch (true) { case years.includes('*'): year.cronEvery = '1' break case years.includes('/'): year.cronEvery = '2' year.incrementStart = years.split('/')[0] year.incrementIncrement = years.split('/')[1] break case years.includes(','): year.cronEvery = '3' year.specificSpecific = years.split(',').map(Number).sort() break case years.includes('-'): year.cronEvery = '4' year.rangeStart = years.split('-')[0] year.rangeEnd = years.split('-')[1] break default: year.cronEvery = '1' } this.result.year = year } } } </script> <style lang="less"> .card-container { background: #fff; overflow: hidden; padding: 12px; position: relative; width: 100%; .ant-tabs{ border:1px solid #e6ebf5; padding: 0; .ant-tabs-bar { margin: 0; outline: none; border-bottom: none; .ant-tabs-nav-container{ margin: 0; .ant-tabs-tab { padding: 0 24px!important; background-color: #f5f7fa!important; margin-right: 0px!important; border-radius: 0; line-height: 38px; border: 1px solid transparent!important; border-bottom: 1px solid #e6ebf5!important; } .ant-tabs-tab-active.ant-tabs-tab{ color: #409eff; background-color: #fff!important; border-right:1px solid #e6ebf5!important; border-left:1px solid #e6ebf5!important; border-bottom:1px solid #fff!important; font-weight: normal; transition:none!important; } } } .ant-tabs-tabpane{ padding: 15px; .ant-row{ margin: 10px 0; } .ant-select,.ant-input-number{ width: 100px; } } } } </style> <style lang="less" scoped> .container-widthEn{ width: 755px; } .container-widthCn{ width: 608px; } .language{ text-align: center; position: absolute; right: 13px; top: 13px; border: 1px solid transparent; height: 40px; line-height: 38px; font-size: 16px; color: #409eff; z-index: 1; background: #f5f7fa; outline: none; width: 47px; border-bottom: 1px solid #e6ebf5; border-radius: 0; } .card-container{ .bottom{ display: flex; justify-content: center; padding: 10px 0 0 0; .cronButton{ margin: 0 10px; line-height: 40px; } } } .tabBody{ .a-row{ margin: 10px 0; .long{ .a-select{ width:354px; } } .a-input-number{ width: 110px; } } } </style>
页面使用
<a-col :span="11"> <a-form-model-item label="计划任务:" :labelCol="{span: 6}" :wrapperCol="{span: 18}" class="stepFormText" prop="alertItemDefine.scheduleConf" > <!-- <a-input--> <!-- v-model="taskFormData.alertItemDefine.scheduleConf"--> <!-- :disabled="taskData.disabled"--> <!-- placeholder="cron"--> <!-- />--> <a-input placeholder="corn表达式" v-model="taskFormData.alertItemDefine.scheduleConf" @change="handleOK"> <a-icon slot="suffix" type="edit" @click="openModal" title="corn控件" /> <a-icon v-if="taskFormData.alertItemDefine.scheduleConf" slot="prefix" type="close-circle" @click="handleEmpty" title="清空"/> </a-input> <JCronModal ref="innerVueCron" :data="taskFormData.alertItemDefine.scheduleConf" @ok="handleOK" ></JCronModal> </a-form-model-item> </a-col>
script
import JCronModal from '@/component/JCronModal' export default { components: { JCronModal }, props: { taskData: { type: Object, default: function () { return {} } } }, data () { }, computed: { }, mounted () { }, methods: { openModal () { this.$refs.innerVueCron.show() }, handleOK (val) { this.taskFormData.alertItemDefine.scheduleConf = val this.$emit('change', this.cron) // this.$emit("change", Object.assign({}, this.cron)); }, handleEmpty () { this.handleOK('') }, setCorn (data) { this.$nextTick(() => { this.form.setFieldsValue({ cronExpression: data }) }) }, }, }
参考链接 https://blog.csdn.net/pgzero/article/details/124498128
标签:case,break,VUE,val,自定义,cron,result,cronEvery,split From: https://www.cnblogs.com/blackCatFish/p/17792902.html