From ae0d5dab8651798740c943df32ee0b2e90a9e2fd Mon Sep 17 00:00:00 2001 From: engigu Date: Wed, 1 Jan 2025 10:53:04 +0800 Subject: [PATCH 1/4] chroe: adjust redeme.md --- README.md | 77 ++++++++++++++++++++++--------------------------------- 1 file changed, 31 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index a4bec6a..95b73f1 100644 --- a/README.md +++ b/README.md @@ -20,53 +20,38 @@ Message Nest 是一个灵活而强大的消息推送整合平台,旨在简化 关于日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。 -2024.04.29 - -- [x] 支持sqlite部署,支持不同版本mysql - -2024.04.11 - -- [x] 支持自定义的定时消息发送 - -2024.03.05 - -- [x] 支持微信测试公众号模板消息发送 - -2024.01.28 - -- [x] 支持docker部署,从环境变量启动服务 - -2024.01.24 - -- [x] 支持数据统计展示 - -2024.01.20 - -- [x] 添加日志查看自动刷新 - -2024.01.07 - -- [x] 支持站点信息自定义 - -2024.01.03 - -- [x] 支持企业微信 - - -- [x] 单应用打包,直接运行,不用部署前端页面 -- [x] 支持邮件发送 -- [x] 用户密码设置 -- [x] 支持用户定时任务清理,更新定时时间 -- [x] 查看定时清理日志 -- [x] 单应用的html浏览器自动缓存 -- [x] gin的日志使用logrus -- [x] 支持异步发送 -- [x] 支持邮件发送 -- [x] 支持钉钉 -- [x] 支持自定义的webhook消息发送 -- [x] 企业微信 -- [ ] .... +# 功能更新日志 +- **2024.04.29** + - 支持 SQLite 部署 + - 支持MySQL 5.x 8.x +- **2024.04.11** + - 支持自定义的定时消息发送 +- **2024.03.05** + - 支持微信测试公众号模板消息发送 +- **2024.01.28** + - 支持 Docker 部署,从环境变量启动服务 +- **2024.01.24** + - 支持数据统计展示 +- **2024.01.20** + - 添加日志查看自动刷新 +- **2024.01.07** + - 支持站点信息自定义 +- **2024.01.03** + - 支持企业微信 + - 单应用打包,直接运行,无需部署前端页面 + - 支持邮件发送 + - 用户密码设置 + - 支持用户定时任务清理,更新定时时间 + - 查看定时清理日志 + - 单应用的 HTML 浏览器自动缓存 + - Gin 的日志使用 Logrus + - 支持异步发送 + - 支持邮件发送 + - 支持钉钉 + - 支持自定义的 Webhook 消息发送 + - 企业微信支持 + - ## 项目来由 💡 自己常常写一些脚本需要消息推送,经常需要接入不同的消息发送,很不方便,于是就有了这个项目。 From e292f7d4b66b8dec8d6001c2af93424b0bf9250e Mon Sep 17 00:00:00 2001 From: engigu Date: Wed, 1 Jan 2025 10:53:49 +0800 Subject: [PATCH 2/4] chroe: adjust redeme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95b73f1..55f3f02 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Message Nest 是一个灵活而强大的消息推送整合平台,旨在简化 - 支持钉钉 - 支持自定义的 Webhook 消息发送 - 企业微信支持 - - + ## 项目来由 💡 自己常常写一些脚本需要消息推送,经常需要接入不同的消息发送,很不方便,于是就有了这个项目。 From c80696073c6477ae60c42ff77882c1e743fec358 Mon Sep 17 00:00:00 2001 From: engigu Date: Wed, 1 Jan 2025 10:54:19 +0800 Subject: [PATCH 3/4] chroe: adjust redeme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55f3f02..f07ef6d 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Message Nest 是一个灵活而强大的消息推送整合平台,旨在简化 关于日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。 -# 功能更新日志 +## 功能更新日志 - **2024.04.29** - 支持 SQLite 部署 From 667be22a196e9b2b34e9789a0f29220168b5d9a6 Mon Sep 17 00:00:00 2001 From: engigu Date: Wed, 1 Jan 2025 12:17:37 +0800 Subject: [PATCH 4/4] 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 @@ - +