root
c6b7090536
feat(schedule): support random cover source for scheduled and manual publish
...
Add a cover mode to schedule tasks so auto-publish can pick a random cover
image instead of a fixed one, scoped to all images or a specific folder.
- migration: add cover_mode / cover_random_scope / cover_random_folder_id
columns and check constraints on schedule_tasks
- backend: validate cover mode/scope/folder on create & update; the dispatch
worker resolves a random active image (signed asset URL) at enqueue time
- frontend: new CoverSourceSelector component wired into GenerateTaskDrawer
and PublishArticleModal, plus coverSource i18n strings
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-14 21:02:39 +08:00
..
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-29 00:01:36 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-05-12 01:55:29 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-09 14:43:20 +08:00
2026-04-09 14:43:20 +08:00
2026-04-09 14:43:20 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-01 00:58:42 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-05-01 12:25:29 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-05-01 12:25:29 +08:00
2026-05-01 12:25:29 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-30 01:32:19 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 00:31:28 +08:00
2026-04-02 10:58:39 +08:00
2026-04-02 10:58:39 +08:00
2026-04-02 11:38:08 +08:00
2026-04-02 11:38:08 +08:00
2026-04-02 11:38:08 +08:00
2026-04-02 11:38:08 +08:00
2026-04-02 21:16:12 +08:00
2026-04-02 21:16:12 +08:00
2026-04-20 13:52:35 +08:00
2026-05-06 18:25:35 +08:00
2026-04-20 13:52:35 +08:00
2026-04-20 13:52:35 +08:00
2026-04-05 17:14:13 +08:00
2026-04-05 17:14:13 +08:00
2026-04-05 20:41:42 +08:00
2026-04-05 20:41:42 +08:00
2026-04-07 22:21:16 +08:00
2026-04-07 22:21:16 +08:00
2026-04-09 14:43:20 +08:00
2026-05-01 12:37:15 +08:00
2026-04-12 09:56:18 +08:00
2026-04-23 09:09:20 +08:00
2026-04-30 01:32:19 +08:00
2026-04-30 01:32:19 +08:00
2026-04-16 20:40:41 +08:00
2026-04-16 20:40:41 +08:00
2026-04-16 20:40:41 +08:00
2026-04-16 20:40:41 +08:00
2026-04-17 07:53:56 +08:00
2026-04-17 07:53:56 +08:00
2026-04-17 08:04:56 +08:00
2026-04-17 08:04:56 +08:00
2026-04-17 08:34:12 +08:00
2026-04-17 08:34:12 +08:00
2026-04-17 08:06:36 +08:00
2026-04-17 08:06:36 +08:00
2026-04-18 00:47:57 +08:00
2026-04-18 00:47:57 +08:00
2026-04-19 14:18:20 +08:00
2026-04-19 14:18:20 +08:00
2026-04-19 14:18:20 +08:00
2026-04-19 14:18:20 +08:00
2026-04-19 14:18:20 +08:00
2026-04-19 14:18:20 +08:00
2026-04-19 14:18:20 +08:00
2026-05-06 18:25:35 +08:00
2026-04-19 14:18:20 +08:00
2026-05-06 12:56:39 +08:00
2026-04-20 13:52:35 +08:00
2026-04-20 13:52:35 +08:00
2026-04-20 15:40:18 +08:00
2026-04-20 15:40:18 +08:00
2026-04-22 00:24:21 +08:00
2026-04-22 00:24:21 +08:00
2026-04-24 22:19:57 +08:00
2026-05-13 19:36:24 +08:00
2026-04-28 11:33:47 +08:00
2026-04-28 11:33:47 +08:00
2026-04-29 00:01:36 +08:00
2026-04-29 00:01:36 +08:00
2026-04-30 01:32:19 +08:00
2026-04-30 01:32:19 +08:00
2026-05-01 11:02:21 +08:00
2026-05-01 11:02:21 +08:00
2026-05-05 20:48:14 +08:00
2026-05-05 20:48:14 +08:00
2026-05-03 02:02:39 +08:00
2026-05-05 20:48:14 +08:00
2026-05-06 12:56:39 +08:00
2026-05-06 12:56:39 +08:00
2026-05-05 19:47:04 +08:00
2026-05-05 19:47:04 +08:00
2026-05-05 23:43:10 +08:00
2026-05-05 23:43:10 +08:00
2026-05-06 18:25:35 +08:00
2026-05-06 18:25:35 +08:00
2026-05-11 11:11:31 +08:00
2026-05-11 11:11:31 +08:00
2026-05-12 01:55:29 +08:00
2026-05-12 01:55:29 +08:00
2026-05-12 21:53:36 +08:00
2026-05-12 21:53:36 +08:00
2026-05-20 11:22:37 +08:00
2026-05-20 11:22:37 +08:00
2026-05-20 12:19:27 +08:00
2026-05-20 12:19:27 +08:00
2026-05-20 15:37:25 +08:00
2026-05-20 15:37:25 +08:00
2026-05-20 15:37:25 +08:00
2026-05-20 15:37:25 +08:00
2026-05-20 15:37:25 +08:00
2026-05-20 15:37:25 +08:00
2026-05-20 18:09:53 +08:00
2026-05-20 18:09:53 +08:00
2026-05-22 23:51:45 +08:00
2026-05-22 23:51:45 +08:00
2026-05-24 01:47:51 +08:00
2026-05-24 01:47:51 +08:00
2026-05-26 18:43:15 +08:00
2026-05-26 18:43:15 +08:00
2026-05-26 18:43:15 +08:00
2026-05-26 18:43:15 +08:00
2026-05-26 18:43:15 +08:00
2026-05-26 18:43:15 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-29 23:17:01 +08:00
2026-05-30 19:52:17 +08:00
2026-05-30 19:52:17 +08:00
2026-05-30 19:52:17 +08:00
2026-05-30 19:52:17 +08:00
2026-06-06 13:06:14 +08:00
2026-06-06 13:06:14 +08:00
2026-06-09 19:44:24 +08:00
2026-06-09 19:44:24 +08:00
2026-06-09 19:44:24 +08:00
2026-06-09 19:44:24 +08:00
2026-06-14 21:02:39 +08:00
2026-06-14 21:02:39 +08:00