UNPKG

shiyzhangcron

Version:

> 一个基于vue3+Ant-Design-vue的cron表达式组件

54 lines (52 loc) 1.64 kB
/*********************************************** * @Author: shiyzhang zsyou0911@126.com * @Date: 2024-03-01 14:41 * @Description: validator.ts * ***********************************************/ import CronParser from 'cron-parser'; import type { ValidatorRule } from 'ant-design-vue/lib/form/interface'; export const cronRule: ValidatorRule = { // eslint-disable-next-line no-empty-pattern validator({}, value) { // 没填写就不校验 if (!value) { return Promise.resolve(); } const values: string[] = value.split(' ').filter((item) => !!item); if (values.length > 7) { return Promise.reject('Cron表达式最多7项!'); } // 检查第7项 let val: string = value; if (values.length === 7) { const year = values[6]; if (year !== '*' && year !== '?') { let yearValues: string[] = []; if (year.indexOf('-') >= 0) { yearValues = year.split('-'); } else if (year.indexOf('/')) { yearValues = year.split('/'); } else { yearValues = [year]; } // 判断是否都是数字 const checkYear = yearValues.some((item) => isNaN(Number(item))); if (checkYear) { return Promise.reject('Cron表达式参数[年]错误:' + year); } } // 取其中的前六项 val = values.slice(0, 6).join(' '); } // 6位 没有年 // 5位没有秒、年 try { const iter = CronParser.parseExpression(val); iter.next(); return Promise.resolve(); } catch (e) { return Promise.reject('Cron表达式错误:' + e); } }, };