feat(enterprise-site): add WordPress support and scheduled auto-publish to sites
Frontend CI / Frontend (push) Successful in 4m17s
Backend CI / Backend (push) Failing after 6m42s

Add WordPress as an enterprise-site CMS type alongside pbootcms, and let
schedule tasks auto-publish generated articles to enterprise sites.

- WordPress connection/publisher service and tests; register wordpress
  media platform and relax cms_type CHECK constraint
- New publish_enterprise_site_targets JSONB column on schedule_tasks with
  array type constraint; thread targets through scheduler dispatch,
  prompt/KOL generation, and worker
- Admin UI: enterprise-site targets in generate/schedule/publish flows,
  KOL package form, MediaView, and i18n strings

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-09 19:44:24 +08:00
parent 41f5623791
commit c7bad83496
30 changed files with 2946 additions and 696 deletions
+26 -2
View File
@@ -1624,13 +1624,33 @@ const enUS = {
'No platform data is available yet. Please verify the Media Management setup first.',
publishSection: 'Publish Settings',
autoPublish: 'Auto publish',
autoPublishHint: 'When enabled, scheduled articles enter the publish queue after generation.',
autoPublishHint:
'When enabled, scheduled articles publish to selected media accounts or enterprise sites.',
publishTargets: 'Publish targets',
publishTargetsHint:
'Choose desktop media accounts or enterprise sites. At least one target is required.',
publishTargetMediaAccounts: 'Media accounts',
publishTargetEnterpriseSites: 'Enterprise sites',
publishAccounts: 'Media accounts',
publishAccountsHint:
'Choose specific accounts. Offline clients queue first and continue after reconnecting.',
publishAccountEmptyTitle: 'No media accounts',
publishAccountEmptyHint:
'Bind media accounts in the desktop client before configuring auto publish.',
enterprisePublishType: 'Publish type',
enterprisePublishNow: 'Publish now',
enterprisePublishDraft: 'Save draft',
enterpriseCategoryPlaceholder: 'Choose category',
enterpriseSyncCategories: 'Sync categories',
enterpriseSiteEmptyTitle: 'No enterprise sites',
enterpriseSiteEmptyHint:
'Add a site connection in Media Management and sync categories first.',
enterpriseSiteConnected: 'Connected',
enterpriseSiteError: 'Connection error',
enterpriseSiteDisabled: 'Disabled',
enterpriseSiteDraft: 'Pending check',
enterpriseSiteDisabledHint: 'This enterprise site is disabled.',
enterpriseSiteErrorHint: 'This enterprise site has a connection error. Test it first.',
cover: 'Cover image',
coverHint: 'Keep the cover clear, complete, and visually polished.',
scheduleCoverHint:
@@ -1683,7 +1703,8 @@ const enUS = {
'New tasks default to a random time between 01:00 and 05:00 to smooth overnight load. You can edit it before saving.',
executionTimeDefault: 'Default staggered time',
to: 'to',
autoPublishPlatforms: 'Auto publish platforms',
autoPublishPlatforms: 'Auto publish targets',
enterpriseSiteTargetCount: '{count} enterprise sites',
autoPublish: 'Auto publish',
manualPublish: 'Manual publish',
nextRun: 'Next run',
@@ -1775,6 +1796,9 @@ const enUS = {
invalidRandomWindow: 'The schedule time configuration is invalid.',
missingScheduleDays: 'Select at least one run day.',
missingPublishAccounts: 'Choose at least one media account when auto publish is enabled.',
missingPublishTargets: 'Choose at least one publish target when auto publish is enabled.',
missingEnterpriseSiteCategory: 'Choose an enterprise site category.',
enterpriseCategoriesSynced: 'Enterprise site categories synced.',
missingScheduleCover: 'A selected media account platform requires a cover image.',
missingPromptName: 'Enter a prompt name first.',
missingPromptContent: 'Enter prompt content first.',
+23 -2
View File
@@ -1550,11 +1550,28 @@ const zhCN = {
platformEmptyHint: '当前还没有可用的平台数据,请先检查媒体管理配置。',
publishSection: '发布设置',
autoPublish: '是否自动发布',
autoPublishHint: '开启后,定时生成完成的文章会使用指定媒体账号自动进入发布队列。',
autoPublishHint: '开启后,定时生成完成的文章会自动发布到选中的媒体账号或企业自建站点。',
publishTargets: '发布目标',
publishTargetsHint: '可选择桌面媒体账号,也可选择企业自建站点;至少选择一个目标。',
publishTargetMediaAccounts: '媒体账号',
publishTargetEnterpriseSites: '企业自建站点',
publishAccounts: '媒体账号',
publishAccountsHint: '请选择具体账号。客户端离线时会先排队,上线后继续发布。',
publishAccountEmptyTitle: '暂无可选媒体账号',
publishAccountEmptyHint: '请先在桌面端绑定媒体账号,再回到这里配置自动发布。',
enterprisePublishType: '发布方式',
enterprisePublishNow: '直接发布',
enterprisePublishDraft: '保存草稿',
enterpriseCategoryPlaceholder: '选择栏目',
enterpriseSyncCategories: '同步栏目',
enterpriseSiteEmptyTitle: '暂无企业自建站点',
enterpriseSiteEmptyHint: '请先到媒体管理添加站点连接,并同步栏目。',
enterpriseSiteConnected: '已连通',
enterpriseSiteError: '连接异常',
enterpriseSiteDisabled: '已禁用',
enterpriseSiteDraft: '待校验',
enterpriseSiteDisabledHint: '该企业站点已禁用。',
enterpriseSiteErrorHint: '该企业站点连接异常,请先测试连通性。',
cover: '封面图',
coverHint: '请保证封面清晰、美观和完整',
scheduleCoverHint: '默认不设置封面。需要时可单独指定,生成完成后会写入文章并用于发布。',
@@ -1604,7 +1621,8 @@ const zhCN = {
'新建任务会默认随机落在 01:00-05:00,避免凌晨任务集中;你也可以手动修改为固定执行时间。',
executionTimeDefault: '默认错峰生成',
to: '至',
autoPublishPlatforms: '自动发布平台',
autoPublishPlatforms: '自动发布目标',
enterpriseSiteTargetCount: '企业自建站点 {count} 个',
autoPublish: '自动发布',
manualPublish: '手动发布',
nextRun: '下次执行',
@@ -1695,6 +1713,9 @@ const zhCN = {
invalidRandomWindow: '执行时间配置不正确',
missingScheduleDays: '请至少选择一个执行日',
missingPublishAccounts: '开启自动发布后,请至少选择一个媒体账号',
missingPublishTargets: '开启自动发布后,请至少选择一个发布目标',
missingEnterpriseSiteCategory: '请选择企业自建站点栏目',
enterpriseCategoriesSynced: '企业站点栏目已同步',
missingScheduleCover: '已选媒体账号的平台要求封面图,请先设置封面',
missingPromptName: '请先填写 Prompt 名称',
missingPromptContent: '请先填写 Prompt 内容',