From 667be22a196e9b2b34e9789a0f29220168b5d9a6 Mon Sep 17 00:00:00 2001 From: engigu Date: Wed, 1 Jan 2025 12:17:37 +0800 Subject: [PATCH] chroe: opt cron message style --- web/package-lock.json | 35 +++++++++++++++++++ web/package.json | 1 + web/src/router/index.js | 6 ++-- web/src/util/cron.js | 27 ++++++++++++++ web/src/views/home/index.vue | 4 +-- .../cronMessage.vue} | 8 ++--- .../view/addCronMsgPopUp.vue | 7 ++-- .../view/editCronMsgPopUp.vue | 6 ++-- 8 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 web/src/util/cron.js rename web/src/views/tabsTools/{sendMessage/sensMessage.vue => cronMessage/cronMessage.vue} (96%) rename web/src/views/tabsTools/{sendMessage => cronMessage}/view/addCronMsgPopUp.vue (94%) rename web/src/views/tabsTools/{sendMessage => cronMessage}/view/editCronMsgPopUp.vue (96%) diff --git a/web/package-lock.json b/web/package-lock.json index 1fad491..d4a73f6 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@element-plus/icons-vue": "^2.1.0", "axios": "^1.7.4", + "cron-parser": "^4.9.0", "echarts": "^5.4.3", "element-plus": "^2.4.2", "lodash": "^4.17.21", @@ -1625,6 +1626,18 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "license": "MIT", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", @@ -2688,6 +2701,15 @@ "node": ">=10" } }, + "node_modules/luxon": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", @@ -4890,6 +4912,14 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "requires": { + "luxon": "^3.2.1" + } + }, "cross-env": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", @@ -5649,6 +5679,11 @@ "yallist": "^4.0.0" } }, + "luxon": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==" + }, "magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", diff --git a/web/package.json b/web/package.json index 68c71d0..bbdaafb 100644 --- a/web/package.json +++ b/web/package.json @@ -14,6 +14,7 @@ "dependencies": { "@element-plus/icons-vue": "^2.1.0", "axios": "^1.7.4", + "cron-parser": "^4.9.0", "echarts": "^5.4.3", "element-plus": "^2.4.2", "lodash": "^4.17.21", diff --git a/web/src/router/index.js b/web/src/router/index.js index 88bfd91..f56dc25 100644 --- a/web/src/router/index.js +++ b/web/src/router/index.js @@ -28,9 +28,9 @@ const router = createRouter({ component: () => import('../views/tabsTools/sendTasks/sendTasks.vue') }, { - path: '/sendmessages', - name: 'sendmessages', - component: () => import('../views/tabsTools/sendMessage/sensMessage.vue') + path: '/cronmessages', + name: 'cronmessages', + component: () => import('../views/tabsTools/cronMessage/cronMessage.vue') }, { path: '/sendlogs', diff --git a/web/src/util/cron.js b/web/src/util/cron.js new file mode 100644 index 0000000..280343e --- /dev/null +++ b/web/src/util/cron.js @@ -0,0 +1,27 @@ +import parser from 'cron-parser'; + + +const formatDate = (date) => { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; +}; + +function parseCron(cronExpression) { + let nextTime = ''; + try { + const interval = parser.parseExpression(cronExpression); + const nextDate = interval.next().toDate(); + nextTime = formatDate(nextDate); + } catch (err) { + nextTime = '无效的 Cron 表达式'; + } + return nextTime; +}; + + +export { parseCron }; diff --git a/web/src/views/home/index.vue b/web/src/views/home/index.vue index aec180b..97eb187 100644 --- a/web/src/views/home/index.vue +++ b/web/src/views/home/index.vue @@ -35,7 +35,7 @@ export default { const menuData = reactive([ { id: '0', title: '数据统计', path: '/statistic' }, { id: '1', title: '发信日志', path: '/sendlogs' }, - { id: '2', title: '定时发信', path: '/sendmessages' }, + { id: '2', title: '定时发信', path: '/cronmessages' }, { id: '3', title: '发信任务', path: '/sendtasks' }, { id: '4', title: '发信渠道', path: '/sendways' }, { id: '5', title: '设置', path: '/settings' }, @@ -102,7 +102,7 @@ export default { } .el-menu-item { - width: 150px !important; + width: 120px !important; font-size: 15px; justify-content: center; align-items: center; diff --git a/web/src/views/tabsTools/sendMessage/sensMessage.vue b/web/src/views/tabsTools/cronMessage/cronMessage.vue similarity index 96% rename from web/src/views/tabsTools/sendMessage/sensMessage.vue rename to web/src/views/tabsTools/cronMessage/cronMessage.vue index 93f79a3..6352735 100644 --- a/web/src/views/tabsTools/sendMessage/sensMessage.vue +++ b/web/src/views/tabsTools/cronMessage/cronMessage.vue @@ -16,7 +16,7 @@ - +