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 @@