From 275d1a4e735c99b6fdb17a4dfa02c7af4af6d54a Mon Sep 17 00:00:00 2001 From: louyongjiu <921944921@qq.com> Date: Mon, 2 Sep 2024 16:14:37 +0800 Subject: [PATCH 1/4] add show crontab next 5 execution times (cherry picked from commit 9741794f71004822e7d2e9399c932fe66cdff34d) --- package.json | 3 +- .../crontab-generator/crontab-generator.vue | 34 ++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 63e5856a..a8d677c0 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "@tiptap/pm": "2.1.6", "@tiptap/starter-kit": "2.1.6", "@tiptap/vue-3": "2.0.3", - "@types/markdown-it": "^13.0.7", "@types/figlet": "^1.5.8", + "@types/markdown-it": "^13.0.7", "@vicons/material": "^0.12.0", "@vicons/tabler": "^0.12.0", "@vueuse/core": "^10.3.0", @@ -53,6 +53,7 @@ "colord": "^2.9.3", "composerize-ts": "^0.6.2", "country-code-lookup": "^0.1.0", + "cron-parser": "^4.9.0", "cron-validator": "^1.3.1", "cronstrue": "^2.26.0", "crypto-js": "^4.1.1", diff --git a/src/tools/crontab-generator/crontab-generator.vue b/src/tools/crontab-generator/crontab-generator.vue index 97503e7d..8e96c0d2 100644 --- a/src/tools/crontab-generator/crontab-generator.vue +++ b/src/tools/crontab-generator/crontab-generator.vue @@ -2,6 +2,7 @@ import cronstrue from 'cronstrue'; import { isValidCron } from 'cron-validator'; import { useStyleStore } from '@/stores/style.store'; +import { parseExpression } from 'cron-parser'; function isCronValid(v: string) { return isValidCron(v, { allowBlankDay: true, alias: true, seconds: true }); @@ -21,7 +22,7 @@ const helpers = [ { symbol: '*', meaning: 'Any value', - example: '* * * *', + example: '* * * *', equivalent: 'Every minute', }, { @@ -92,6 +93,18 @@ const helpers = [ }, ]; +function getLastExecutionTimes(cronExpression: string) { + const interval = parseExpression(cronExpression); + const times = []; + + // Get the last five execution times + for (let i = 0; i < 5; i++) { + times.push(interval.next().toJSON()); + } + return times; +} + + const cronString = computed(() => { if (isCronValid(cron.value)) { return cronstrue.toString(cron.value, cronstrueConfig); @@ -99,6 +112,16 @@ const cronString = computed(() => { return ' '; }); + +const executionTimesString = computed(() => { + if (isCronValid(cron.value)) { + const lastExecutionTimes = getLastExecutionTimes(cron.value); + const executionTimesString = lastExecutionTimes.join('
'); // 使用
标签 + return `Next 5 execution times:
${executionTimesString}`; // 在这里也添加
标签 + } + return ' '; +}); + const cronValidationRules = [ { validator: (value: string) => isCronValid(value), @@ -123,6 +146,8 @@ const cronValidationRules = [ {{ cronString }} +
+
@@ -187,6 +212,13 @@ const cronValidationRules = [ margin: 5px 0 15px; } +.cron-execution-string{ + text-align: center; + font-size: 14px; + opacity: 0.8; + margin: 5px 0 15px; +} + pre { overflow: auto; padding: 10px 0; From bc94bfacbb4e44d273ab846394206a0f5d921269 Mon Sep 17 00:00:00 2001 From: louyongjiu <921944921@qq.com> Date: Mon, 2 Sep 2024 16:43:17 +0800 Subject: [PATCH 2/4] add show crontab next 5 execution times (cherry picked from commit 0aba23ffef59b54b4c87aeab237c2c066c49c7f7) --- pnpm-lock.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2311f3af..01c5c192 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,6 +59,9 @@ dependencies: country-code-lookup: specifier: ^0.1.0 version: 0.1.0 + cron-parser: + specifier: ^4.9.0 + version: 4.9.0 cron-validator: specifier: ^1.3.1 version: 1.3.1 @@ -4641,6 +4644,13 @@ packages: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} dev: false + /cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + dependencies: + luxon: 3.5.0 + dev: false + /cron-validator@1.3.1: resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} dev: false @@ -6788,6 +6798,11 @@ packages: dependencies: yallist: 4.0.0 + /luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + dev: false + /magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: From 4276a2c203412de8b76c24dfd2dee0ae4287d67e Mon Sep 17 00:00:00 2001 From: louyongjiu <921944921@qq.com> Date: Fri, 6 Sep 2024 17:02:34 +0800 Subject: [PATCH 3/4] add show crontab next 5 execution times --- src/tools/crontab-generator/crontab-generator.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tools/crontab-generator/crontab-generator.vue b/src/tools/crontab-generator/crontab-generator.vue index 8e96c0d2..ec14f4a9 100644 --- a/src/tools/crontab-generator/crontab-generator.vue +++ b/src/tools/crontab-generator/crontab-generator.vue @@ -116,8 +116,8 @@ const cronString = computed(() => { const executionTimesString = computed(() => { if (isCronValid(cron.value)) { const lastExecutionTimes = getLastExecutionTimes(cron.value); - const executionTimesString = lastExecutionTimes.join('
'); // 使用
标签 - return `Next 5 execution times:
${executionTimesString}`; // 在这里也添加
标签 + const executionTimesString = lastExecutionTimes.join('\n'); + return `Next 5 execution times:\n${executionTimesString}`; } return ' '; }); @@ -146,7 +146,7 @@ const cronValidationRules = [ {{ cronString }}
-
+
{{ executionTimesString }}
@@ -217,6 +217,7 @@ const cronValidationRules = [ font-size: 14px; opacity: 0.8; margin: 5px 0 15px; + white-space: pre-wrap; } pre { From 6248546e4b25688f9a6d5f651dbc9bb5de59f277 Mon Sep 17 00:00:00 2001 From: louyongjiu <921944921@qq.com> Date: Fri, 6 Sep 2024 17:14:31 +0800 Subject: [PATCH 4/4] add show crontab next 5 execution times (cherry picked from commit 3a6b8bce14849516d4313427842a670b01903802) --- .../crontab-generator/crontab-generator.vue | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/tools/crontab-generator/crontab-generator.vue b/src/tools/crontab-generator/crontab-generator.vue index ec14f4a9..7b206a15 100644 --- a/src/tools/crontab-generator/crontab-generator.vue +++ b/src/tools/crontab-generator/crontab-generator.vue @@ -1,8 +1,8 @@