1 line
22 KiB
JSON
1 line
22 KiB
JSON
{"remainingRequest":"D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\src\\views\\system\\timing\\components\\result.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\src\\views\\system\\timing\\components\\result.vue","mtime":1732871026799},{"path":"D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1732872824662},{"path":"D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\node_modules\\babel-loader\\lib\\index.js","mtime":1732872825017},{"path":"D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1732872824662},{"path":"D:\\data\\hanguodoushan\\acs2\\nladmin-ui\\node_modules\\vue-loader\\lib\\index.js","mtime":1732872825835}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nexport default {\r\n name: 'CrontabResult',\r\n props: ['ex'],\r\n data() {\r\n return {\r\n dayRule: '',\r\n dayRuleSup: '',\r\n dateArr: [],\r\n resultList: [],\r\n isShow: false\r\n }\r\n },\r\n watch: {\r\n 'ex': 'expressionChange'\r\n },\r\n mounted: function() {\r\n // 初始化 获取一次结果\r\n this.expressionChange()\r\n },\r\n methods: {\r\n // 表达式值变化时,开始去计算结果\r\n expressionChange() {\r\n // 计算开始-隐藏结果\r\n this.isShow = false\r\n // 获取规则数组[0秒、1分、2时、3日、4月、5星期、6年]\r\n const ruleArr = this.$options.propsData.ex.split(' ')\r\n // 用于记录进入循环的次数\r\n let nums = 0\r\n // 用于暂时存符号时间规则结果的数组\r\n const resultArr = []\r\n // 获取当前时间精确至[年、月、日、时、分、秒]\r\n const nTime = new Date()\r\n const nYear = nTime.getFullYear()\r\n let nMonth = nTime.getMonth() + 1\r\n let nDay = nTime.getDate()\r\n let nHour = nTime.getHours()\r\n let nMin = nTime.getMinutes()\r\n let nSecond = nTime.getSeconds()\r\n // 根据规则获取到近100年可能年数组、月数组等等\r\n this.getSecondArr(ruleArr[0])\r\n this.getMinArr(ruleArr[1])\r\n this.getHourArr(ruleArr[2])\r\n this.getDayArr(ruleArr[3])\r\n this.getMonthArr(ruleArr[4])\r\n this.getWeekArr(ruleArr[5])\r\n this.getYearArr(ruleArr[6], nYear)\r\n // 将获取到的数组赋值-方便使用\r\n const sDate = this.dateArr[0]\r\n const mDate = this.dateArr[1]\r\n const hDate = this.dateArr[2]\r\n const DDate = this.dateArr[3]\r\n const MDate = this.dateArr[4]\r\n const YDate = this.dateArr[5]\r\n // 获取当前时间在数组中的索引\r\n let sIdx = this.getIndex(sDate, nSecond)\r\n let mIdx = this.getIndex(mDate, nMin)\r\n let hIdx = this.getIndex(hDate, nHour)\r\n let DIdx = this.getIndex(DDate, nDay)\r\n let MIdx = this.getIndex(MDate, nMonth)\r\n const YIdx = this.getIndex(YDate, nYear)\r\n // 重置月日时分秒的函数(后面用的比较多)\r\n const resetSecond = function() {\r\n sIdx = 0\r\n nSecond = sDate[sIdx]\r\n }\r\n const resetMin = function() {\r\n mIdx = 0\r\n nMin = mDate[mIdx]\r\n resetSecond()\r\n }\r\n const resetHour = function() {\r\n hIdx = 0\r\n nHour = hDate[hIdx]\r\n resetMin()\r\n }\r\n const resetDay = function() {\r\n DIdx = 0\r\n nDay = DDate[DIdx]\r\n resetHour()\r\n }\r\n const resetMonth = function() {\r\n MIdx = 0\r\n nMonth = MDate[MIdx]\r\n resetDay()\r\n }\r\n // 如果当前年份不为数组中当前值\r\n if (nYear !== YDate[YIdx]) {\r\n resetMonth()\r\n }\r\n // 如果当前月份不为数组中当前值\r\n if (nMonth !== MDate[MIdx]) {\r\n resetDay()\r\n }\r\n // 如果当前“日”不为数组中当前值\r\n if (nDay !== DDate[DIdx]) {\r\n resetHour()\r\n }\r\n // 如果当前“时”不为数组中当前值\r\n if (nHour !== hDate[hIdx]) {\r\n resetMin()\r\n }\r\n // 如果当前“分”不为数组中当前值\r\n if (nMin !== mDate[mIdx]) {\r\n resetSecond()\r\n }\r\n\r\n // 循环年份数组\r\n goYear: for (let Yi = YIdx; Yi < YDate.length; Yi++) {\r\n const YY = YDate[Yi]\r\n // 如果到达最大值时\r\n if (nMonth > MDate[MDate.length - 1]) {\r\n resetMonth()\r\n continue\r\n }\r\n // 循环月份数组\r\n goMonth: for (let Mi = MIdx; Mi < MDate.length; Mi++) {\r\n // 赋值、方便后面运算\r\n let MM = MDate[Mi]\r\n MM = MM < 10 ? '0' + MM : MM\r\n // 如果到达最大值时\r\n if (nDay > DDate[DDate.length - 1]) {\r\n resetDay()\r\n if (Mi == MDate.length - 1) {\r\n resetMonth()\r\n continue goYear\r\n }\r\n continue\r\n }\r\n // 循环日期数组\r\n goDay: for (let Di = DIdx; Di < DDate.length; Di++) {\r\n // 赋值、方便后面运算\r\n let DD = DDate[Di]\r\n let thisDD = DD < 10 ? '0' + DD : DD\r\n\r\n // 如果到达最大值时\r\n if (nHour > hDate[hDate.length - 1]) {\r\n resetHour()\r\n if (Di == DDate.length - 1) {\r\n resetDay()\r\n if (Mi == MDate.length - 1) {\r\n resetMonth()\r\n continue goYear\r\n }\r\n continue goMonth\r\n }\r\n continue\r\n }\r\n\r\n // 判断日期的合法性,不合法的话也是跳出当前循环\r\n if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true && this.dayRule !== 'workDay' && this.dayRule !== 'lastWeek' && this.dayRule !== 'lastDay') {\r\n resetDay()\r\n continue goMonth\r\n }\r\n // 如果日期规则中有值时\r\n if (this.dayRule == 'lastDay') {\r\n // 如果不是合法日期则需要将前将日期调到合法日期即月末最后一天\r\n\r\n if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n DD--\r\n\r\n thisDD = DD < 10 ? '0' + DD : DD\r\n }\r\n }\r\n } else if (this.dayRule == 'workDay') {\r\n // 校验并调整如果是2月30号这种日期传进来时需调整至正常月底\r\n if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n DD--\r\n thisDD = DD < 10 ? '0' + DD : DD\r\n }\r\n }\r\n // 获取达到条件的日期是星期X\r\n const thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week')\r\n // 当星期日时\r\n if (thisWeek == 1) {\r\n // 先找下一个日,并判断是否为月底\r\n DD++\r\n thisDD = DD < 10 ? '0' + DD : DD\r\n // 判断下一日已经不是合法日期\r\n if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n DD -= 3\r\n }\r\n } else if (thisWeek == 7) {\r\n // 当星期6时只需判断不是1号就可进行操作\r\n if (this.dayRuleSup !== 1) {\r\n DD--\r\n } else {\r\n DD += 2\r\n }\r\n }\r\n } else if (this.dayRule == 'weekDay') {\r\n // 如果指定了是星期几\r\n // 获取当前日期是属于星期几\r\n const thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week')\r\n // 校验当前星期是否在星期池(dayRuleSup)中\r\n if (this.dayRuleSup.indexOf(thisWeek) < 0) {\r\n // 如果到达最大值时\r\n if (Di == DDate.length - 1) {\r\n resetDay()\r\n if (Mi == MDate.length - 1) {\r\n resetMonth()\r\n continue goYear\r\n }\r\n continue goMonth\r\n }\r\n continue\r\n }\r\n } else if (this.dayRule == 'assWeek') {\r\n // 如果指定了是第几周的星期几\r\n // 获取每月1号是属于星期几\r\n const thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week')\r\n if (this.dayRuleSup[1] >= thisWeek) {\r\n DD = (this.dayRuleSup[0] - 1) * 7 + this.dayRuleSup[1] - thisWeek + 1\r\n } else {\r\n DD = this.dayRuleSup[0] * 7 + this.dayRuleSup[1] - thisWeek + 1\r\n }\r\n } else if (this.dayRule == 'lastWeek') {\r\n // 如果指定了每月最后一个星期几\r\n // 校验并调整如果是2月30号这种日期传进来时需调整至正常月底\r\n if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n DD--\r\n thisDD = DD < 10 ? '0' + DD : DD\r\n }\r\n }\r\n // 获取月末最后一天是星期几\r\n const thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week')\r\n // 找到要求中最近的那个星期几\r\n if (this.dayRuleSup < thisWeek) {\r\n DD -= thisWeek - this.dayRuleSup\r\n } else if (this.dayRuleSup > thisWeek) {\r\n DD -= 7 - (this.dayRuleSup - thisWeek)\r\n }\r\n }\r\n // 判断时间值是否小于10置换成“05”这种格式\r\n DD = DD < 10 ? '0' + DD : DD\r\n\r\n // 循环“时”数组\r\n goHour: for (let hi = hIdx; hi < hDate.length; hi++) {\r\n const hh = hDate[hi] < 10 ? '0' + hDate[hi] : hDate[hi]\r\n\r\n // 如果到达最大值时\r\n if (nMin > mDate[mDate.length - 1]) {\r\n resetMin()\r\n if (hi == hDate.length - 1) {\r\n resetHour()\r\n if (Di == DDate.length - 1) {\r\n resetDay()\r\n if (Mi == MDate.length - 1) {\r\n resetMonth()\r\n continue goYear\r\n }\r\n continue goMonth\r\n }\r\n continue goDay\r\n }\r\n continue\r\n }\r\n // 循环\"分\"数组\r\n goMin: for (let mi = mIdx; mi < mDate.length; mi++) {\r\n const mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi]\r\n\r\n // 如果到达最大值时\r\n if (nSecond > sDate[sDate.length - 1]) {\r\n resetSecond()\r\n if (mi == mDate.length - 1) {\r\n resetMin()\r\n if (hi == hDate.length - 1) {\r\n resetHour()\r\n if (Di == DDate.length - 1) {\r\n resetDay()\r\n if (Mi == MDate.length - 1) {\r\n resetMonth()\r\n continue goYear\r\n }\r\n continue goMonth\r\n }\r\n continue goDay\r\n }\r\n continue goHour\r\n }\r\n continue\r\n }\r\n // 循环\"秒\"数组\r\n for (let si = sIdx; si <= sDate.length - 1; si++) {\r\n const ss = sDate[si] < 10 ? '0' + sDate[si] : sDate[si]\r\n // 添加当前时间(时间合法性在日期循环时已经判断)\r\n if (MM !== '00' && DD !== '00') {\r\n resultArr.push(YY + '-' + MM + '-' + DD + ' ' + hh + ':' + mm + ':' + ss)\r\n nums++\r\n }\r\n // 如果条数满了就退出循环\r\n if (nums == 5) break goYear\r\n // 如果到达最大值时\r\n if (si == sDate.length - 1) {\r\n resetSecond()\r\n if (mi == mDate.length - 1) {\r\n resetMin()\r\n if (hi == hDate.length - 1) {\r\n resetHour()\r\n if (Di == DDate.length - 1) {\r\n resetDay()\r\n if (Mi == MDate.length - 1) {\r\n resetMonth()\r\n continue // goYear\r\n }\r\n continue // goMonth\r\n }\r\n continue // goDay\r\n }\r\n continue // goHour\r\n }\r\n continue // goMin\r\n }\r\n } // goSecond\r\n } // goMin\r\n }// goHour\r\n }// goDay\r\n }// goMonth\r\n }\r\n // 判断100年内的结果条数\r\n if (resultArr.length == 0) {\r\n this.resultList = ['没有达到条件的结果!']\r\n } else {\r\n this.resultList = resultArr\r\n if (resultArr.length !== 5) {\r\n this.resultList.push('最近100年内只有上面' + resultArr.length + '条结果!')\r\n }\r\n }\r\n // 计算完成-显示结果\r\n this.isShow = true\r\n },\r\n // 用于计算某位数字在数组中的索引\r\n getIndex(arr, value) {\r\n if (value <= arr[0] || value > arr[arr.length - 1]) {\r\n return 0\r\n } else {\r\n for (let i = 0; i < arr.length - 1; i++) {\r\n if (value > arr[i] && value <= arr[i + 1]) {\r\n return i + 1\r\n }\r\n }\r\n }\r\n },\r\n // 获取\"年\"数组\r\n getYearArr(rule, year) {\r\n this.dateArr[5] = this.getOrderArr(year, year + 100)\r\n if (rule !== undefined) {\r\n if (rule.indexOf('-') >= 0) {\r\n this.dateArr[5] = this.getCycleArr(rule, year + 100, false)\r\n } else if (rule.indexOf('/') >= 0) {\r\n this.dateArr[5] = this.getAverageArr(rule, year + 100)\r\n } else if (rule !== '*') {\r\n this.dateArr[5] = this.getAssignArr(rule)\r\n }\r\n }\r\n },\r\n // 获取\"月\"数组\r\n getMonthArr(rule) {\r\n this.dateArr[4] = this.getOrderArr(1, 12)\r\n if (rule.indexOf('-') >= 0) {\r\n this.dateArr[4] = this.getCycleArr(rule, 12, false)\r\n } else if (rule.indexOf('/') >= 0) {\r\n this.dateArr[4] = this.getAverageArr(rule, 12)\r\n } else if (rule !== '*') {\r\n this.dateArr[4] = this.getAssignArr(rule)\r\n }\r\n },\r\n // 获取\"日\"数组-主要为日期规则\r\n getWeekArr(rule) {\r\n // 只有当日期规则的两个值均为“”时则表达日期是有选项的\r\n if (this.dayRule == '' && this.dayRuleSup == '') {\r\n if (rule.indexOf('-') >= 0) {\r\n this.dayRule = 'weekDay'\r\n this.dayRuleSup = this.getCycleArr(rule, 7, false)\r\n } else if (rule.indexOf('#') >= 0) {\r\n this.dayRule = 'assWeek'\r\n const matchRule = rule.match(/[0-9]{1}/g)\r\n this.dayRuleSup = [Number(matchRule[1]), Number(matchRule[0])]\r\n this.dateArr[3] = [1]\r\n if (this.dayRuleSup[1] == 7) {\r\n this.dayRuleSup[1] = 0\r\n }\r\n } else if (rule.indexOf('L') >= 0) {\r\n this.dayRule = 'lastWeek'\r\n this.dayRuleSup = Number(rule.match(/[0-9]{1,2}/g)[0])\r\n this.dateArr[3] = [31]\r\n if (this.dayRuleSup == 7) {\r\n this.dayRuleSup = 0\r\n }\r\n } else if (rule !== '*' && rule !== '?') {\r\n this.dayRule = 'weekDay'\r\n this.dayRuleSup = this.getAssignArr(rule)\r\n }\r\n }\r\n },\r\n // 获取\"日\"数组-少量为日期规则\r\n getDayArr(rule) {\r\n this.dateArr[3] = this.getOrderArr(1, 31)\r\n this.dayRule = ''\r\n this.dayRuleSup = ''\r\n if (rule.indexOf('-') >= 0) {\r\n this.dateArr[3] = this.getCycleArr(rule, 31, false)\r\n this.dayRuleSup = 'null'\r\n } else if (rule.indexOf('/') >= 0) {\r\n this.dateArr[3] = this.getAverageArr(rule, 31)\r\n this.dayRuleSup = 'null'\r\n } else if (rule.indexOf('W') >= 0) {\r\n this.dayRule = 'workDay'\r\n this.dayRuleSup = Number(rule.match(/[0-9]{1,2}/g)[0])\r\n this.dateArr[3] = [this.dayRuleSup]\r\n } else if (rule.indexOf('L') >= 0) {\r\n this.dayRule = 'lastDay'\r\n this.dayRuleSup = 'null'\r\n this.dateArr[3] = [31]\r\n } else if (rule !== '*' && rule !== '?') {\r\n this.dateArr[3] = this.getAssignArr(rule)\r\n this.dayRuleSup = 'null'\r\n } else if (rule == '*') {\r\n this.dayRuleSup = 'null'\r\n }\r\n },\r\n // 获取\"时\"数组\r\n getHourArr(rule) {\r\n this.dateArr[2] = this.getOrderArr(0, 23)\r\n if (rule.indexOf('-') >= 0) {\r\n this.dateArr[2] = this.getCycleArr(rule, 24, true)\r\n } else if (rule.indexOf('/') >= 0) {\r\n this.dateArr[2] = this.getAverageArr(rule, 23)\r\n } else if (rule !== '*') {\r\n this.dateArr[2] = this.getAssignArr(rule)\r\n }\r\n },\r\n // 获取\"分\"数组\r\n getMinArr(rule) {\r\n this.dateArr[1] = this.getOrderArr(0, 59)\r\n if (rule.indexOf('-') >= 0) {\r\n this.dateArr[1] = this.getCycleArr(rule, 60, true)\r\n } else if (rule.indexOf('/') >= 0) {\r\n this.dateArr[1] = this.getAverageArr(rule, 59)\r\n } else if (rule !== '*') {\r\n this.dateArr[1] = this.getAssignArr(rule)\r\n }\r\n },\r\n // 获取\"秒\"数组\r\n getSecondArr(rule) {\r\n this.dateArr[0] = this.getOrderArr(0, 59)\r\n if (rule.indexOf('-') >= 0) {\r\n this.dateArr[0] = this.getCycleArr(rule, 60, true)\r\n } else if (rule.indexOf('/') >= 0) {\r\n this.dateArr[0] = this.getAverageArr(rule, 59)\r\n } else if (rule !== '*') {\r\n this.dateArr[0] = this.getAssignArr(rule)\r\n }\r\n },\r\n // 根据传进来的min-max返回一个顺序的数组\r\n getOrderArr(min, max) {\r\n const arr = []\r\n for (let i = min; i <= max; i++) {\r\n arr.push(i)\r\n }\r\n return arr\r\n },\r\n // 根据规则中指定的零散值返回一个数组\r\n getAssignArr(rule) {\r\n const arr = []\r\n const assiginArr = rule.split(',')\r\n for (let i = 0; i < assiginArr.length; i++) {\r\n arr[i] = Number(assiginArr[i])\r\n }\r\n arr.sort(this.compare)\r\n return arr\r\n },\r\n // 根据一定算术规则计算返回一个数组\r\n getAverageArr(rule, limit) {\r\n const arr = []\r\n const agArr = rule.split('/')\r\n let min = Number(agArr[0])\r\n const step = Number(agArr[1])\r\n while (min <= limit) {\r\n arr.push(min)\r\n min += step\r\n }\r\n return arr\r\n },\r\n // 根据规则返回一个具有周期性的数组\r\n getCycleArr(rule, limit, status) {\r\n // status--表示是否从0开始(则从1开始)\r\n const arr = []\r\n const cycleArr = rule.split('-')\r\n const min = Number(cycleArr[0])\r\n let max = Number(cycleArr[1])\r\n if (min > max) {\r\n max += limit\r\n }\r\n for (let i = min; i <= max; i++) {\r\n let add = 0\r\n if (status == false && i % limit == 0) {\r\n add = limit\r\n }\r\n arr.push(Math.round(i % limit + add))\r\n }\r\n arr.sort(this.compare)\r\n return arr\r\n },\r\n // 比较数字大小(用于Array.sort)\r\n compare(value1, value2) {\r\n if (value2 - value1 > 0) {\r\n return -1\r\n } else {\r\n return 1\r\n }\r\n },\r\n // 格式化日期格式如:2017-9-19 18:04:33\r\n formatDate(value, type) {\r\n // 计算日期相关值\r\n const time = typeof value === 'number' ? new Date(value) : value\r\n const Y = time.getFullYear()\r\n const M = time.getMonth() + 1\r\n const D = time.getDate()\r\n const h = time.getHours()\r\n const m = time.getMinutes()\r\n const s = time.getSeconds()\r\n const week = time.getDay()\r\n // 如果传递了type的话\r\n if (type == undefined) {\r\n 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)\r\n } else if (type == 'week') {\r\n // 在quartz中 1为星期日\r\n return week + 1\r\n }\r\n },\r\n // 检查日期是否存在\r\n checkDate(value) {\r\n const time = new Date(value)\r\n const format = this.formatDate(time)\r\n return value === format\r\n }\r\n }\r\n}\r\n\r\n",null]} |