feat: 创作工作台统一 + AI味检测/白标 + 移动端补全 + 合规发布闭环

- 新增创作工作台 studio.html:合并选题/内容工厂/文章管理为单一 tab 入口(iframe embed 模式)
- 新增 AI味检测模块(ai_slop API + 页面,合规软硬问题分级)
- 新增白标品牌配置(branding API + 页面 + deploy 私有化交付包)
- 发布闭环:publishing 放宽至 editor + records/mark-published 接口
- 移动端响应式补全(admin/calendar/ai-slop 表格卡片兜底)
- 修复菜单幂等播种缺陷(按 path 对齐,避免功能页孤立)
- 新增短视频脚本 shortvideo.py 与 2026 市场调研简报
This commit is contained in:
yuzhiran
2026-07-11 12:36:01 +08:00
parent 3d596275d5
commit 7e953afbd2
39 changed files with 2418 additions and 311 deletions
+12 -5
View File
@@ -68,7 +68,10 @@
--content-max-width: 1400px;
}
/* ========== Dark Mode ========== */
/* ========== Dark Mode ==========
注意:Element Plus 组件库为亮色主题,未同步切换会导致弹窗/卡片内
自定义文字在深色变量下不可读。当前明确采用亮色主题以保证对比度,
待引入 EP 暗色变量(dark theme vars)后再启用完整暗色模式。
@media (prefers-color-scheme: dark) {
:root {
--color-bg: #1a1a2e;
@@ -76,12 +79,10 @@
--color-bg-subtle: #1a1a3e;
--color-border: #2a2a4e;
--color-border-hover: #4a4a6e;
--color-text-primary: #e0e6ed;
--color-text-regular: #a0a6b0;
--color-text-secondary: #6b7280;
--color-text-placeholder: #4a4a5e;
--shadow-sm: 0 1px 3px rgba(0,0,0,0.3);
--shadow-md: 0 2px 12px rgba(0,0,0,0.3);
--shadow-lg: 0 8px 28px rgba(0,0,0,0.4);
@@ -90,6 +91,7 @@
.card { background: var(--color-bg-raised); }
.el-table { --el-table-tr-bg: var(--color-bg-raised); --el-table-header-bg: var(--color-bg-subtle); }
}
*/
/* ========== Reset & Base ========== */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
@@ -119,6 +121,12 @@ body {
margin: 0 auto;
min-height: calc(100vh - var(--nav-height));
}
/* 嵌入模式(被创作工作台 iframe 加载时):去掉顶部导航留白 */
body.embed .main-content {
padding-top: 0 !important;
min-height: 100vh;
}
.content-area { flex: 1; padding: var(--spacing-md); overflow-y: auto; }
/* ========== Card ========== */
@@ -128,7 +136,6 @@ body {
padding: var(--spacing-lg);
margin-bottom: var(--spacing-lg);
box-shadow: var(--shadow-md);
overflow-x: auto;
transition: all 0.3s var(--ease-out);
}
@@ -405,7 +412,7 @@ body:has(.preview-dialog-custom.is-fullscreen) > [class*="el-overlay"] { z-index
}
@media (min-width: 769px) {
.preview-iframe { min-height: 400px; }
.preview-dialog-custom { position: relative; left: 90px; }
.preview-dialog-custom { position: relative; }
}
@media (max-width: 480px) {