Files
WYF-koubo/docs/SYSTEM_TEMPLATES_USAGE_GUIDE.md
T
2026-06-19 18:45:55 +08:00

508 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 系统模板设置和使用指南
## 📍 在哪里创建系统模板?
现在您可以直接在现有的模板编辑器中创建系统模板,**无需创建专门的管理页面**。
---
## ✨ 新功能:在模板编辑器中设为系统模板
### 位置
**封面模板编辑器**
位置: `视频``创建视频``编辑封面模板`
或: 在 `CoverSettingsDialog` 中编辑封面模板
文件: `src/pages/Video/components/CoverCustomEditor/index.vue`
---
## 🎯 使用流程
### 第 1 步:编辑模板
1. 进入 **视频** 页面
2. 创建或编辑**封面模板**
3. 设计您的模板内容(使用 Canvas 编辑器)
### 第 2 步:设为系统模板(仅开发模式)
**⚠️ 仅在开发模式下可用**
在模板编辑器底部,您会看到:
```
┌──────────────────────────────────────────────┐
│ ✨ 设为系统模板 │
│ (保存时自动导出到配置文件) │
│ [☐] ← 勾选此选项 │
├──────────────────────────────────────────────┤
│ [取消] [保存系统模板] │
└──────────────────────────────────────────────┘
```
**如何使用:**
1. **创建新模板** → 设计内容
2. **勾选** "✨ 设为系统模板" 选项
3. **点击保存** → 系统会自动:
- ✅ 保存到数据库
- ✅ 导出到 `system-templates.json`
- ✅ 显示成功提示
### 第 3 步:验证导出
保存成功后,会看到提示:
```
✅ 系统模板已保存并自动导出到配置文件
```
模板已自动导出到: `electron/config/system-templates.json`
---
## 🔄 工作流程图
```
┌─────────────────────────┐
│ 打开封面模板编辑器 │
└────────────┬────────────┘
┌─────────────────────────┐
│ 编辑模板(设计内容) │
└────────────┬────────────┘
┌─────────────────────────┐
│ 在开发模式下? │
└────┬──────────────┬─────┘
│ 是 │ 否
▼ ▼
✅ 显示 ❌ 不显示
系统模板选项 系统模板选项
│ │
└──────┬───────┘
┌────────────────┐
│ 勾选系统模板 │
└────────┬───────┘
│ (可选)
┌────────────────────┐
│ 点击"保存系统模板" │
└────────┬───────────┘
┌─────────────────────────┐
│ 后端处理: │
│ 1. 保存到 data.db │
│ 2. 导出到 JSON 文件 │
└────────┬────────────────┘
┌─────────────────────────┐
│ ✅ 系统模板已保存 │
│ 并自动导出! │
└─────────────────────────┘
┌─────────────────────────┐
│ 重启应用后: │
│ 自动加载此系统模板 │
└─────────────────────────┘
```
---
## 📋 功能说明
### 开发模式检测
系统会自动检测您是否在开发模式:
```typescript
// 开发模式 ✅
npm run dev:win
npm run dev:mac
// 生产模式 ❌
npm run build:win
npm run build:mac
export ELECTRON_ENV_PROD=1
```
**只有在开发模式下,才会显示"设为系统模板"选项。**
---
## 🔒 生产模式保护
### 生产环境中的行为
在生产模式下:
**系统模板是只读的**
- 用户无法编辑系统模板
- 无法看到"设为系统模板"选项
- 系统模板被标记为 `readonly=1`
**用户可以创建自己的模板**
- 自定义模板保存到数据库
- 不会自动导出到 JSON
- 用户可以编辑和删除自己的模板
---
## 💾 自动导出机制
### 什么被导出?
当您勾选"设为系统模板"并保存时:
```json
{
"version": "1.0.0",
"description": "系统内置模板配置",
"timestamp": "2026-01-15T...",
"subtitleTemplates": [ /* ... */ ],
"coverTemplates": [
{
"id": "your_template_id",
"name": "您的模板名称",
"description": "模板描述",
"is_system": 1,
"readonly": 0,
"config": { /* */ },
"createdAt": 1768396885438
}
// ... 其他系统模板
]
}
```
### 文件位置
导出位置: `electron/config/system-templates.json`
### 什么时候导出?
- ✅ 保存时自动导出(勾选了"设为系统模板")
- ✅ 修改系统模板时自动导出
- ✅ 每次导出都会更新时间戳
---
## 🔧 技术细节
### 修改的文件
**`src/pages/Video/components/CoverCustomEditor/index.vue`**
新增功能:
- 开发模式检测 (`useDevMode()`)
- 系统模板选项 (`isSystemTemplate` ref)
- 自动导出逻辑 (`saveCoverTemplateWithAutoExport()`)
- 保存时的条件判断
新增状态变量:
```typescript
const { isDev } = useDevMode(); // 开发模式检测
const isSystemTemplate = ref(false); // 系统模板选项
const isSaving = ref(false); // 保存状态
```
新增保存逻辑:
```typescript
if (isSystemTemplate.value && isDev) {
// 使用自动导出 API 保存系统模板
await saveCoverTemplateWithAutoExport({...});
} else {
// 普通模板保存
await saveCoverTemplate({...});
}
```
### 相关 API
**前端 API** (`src/api/systemTemplates.ts`):
- `saveCoverTemplateWithAutoExport(template)` - 保存并自动导出
- `saveSubtitleTemplateWithAutoExport(template)` - 字幕模板(如适用)
- `isDevMode()` - 检查开发模式
**后端 IPC** (`electron/mapi/subtitleCover/`):
- `systemTemplates:saveCoverAndExport` - IPC 处理程序
- `saveCoverTemplateAndExport()` - 后端实现
**Composable** (`src/composables/useDevMode.ts`):
- `useDevMode()` - 开发模式检测 hook
---
## 📊 模板数据结构
### 覆盖模板配置示例
```typescript
{
// 基础信息
id: "template_custom_1234567890",
name: "我的系统模板",
description: "这是一个自定义的系统模板",
// 系统标记
is_system: 1, // 1=系统模板, 0=用户模板
readonly: 0, // 1=只读(生产), 0=可编辑(开发)
// 时间戳
created_at: 1768396885438,
updated_at: 1768396885438,
// 完整的设计配置
config: {
name: "我的系统模板",
backgroundEnabled: true,
backgroundBlurEnabled: true,
backgroundBlurIntensity: 10,
// ... 其他 1000+ 个配置字段
titleText: "标题",
subtitleText: "副标题",
// ... 完整的封面配置
},
// 可选
thumbnailPath: "/path/to/thumbnail.png"
}
```
---
## ✅ 验证导出成功
### 方法 1:检查文件变化
```bash
# 检查 system-templates.json 文件是否已更新
ls -la electron/config/system-templates.json
# 查看文件内容(搜索您的模板 ID
cat electron/config/system-templates.json | grep "your_template_id"
```
### 方法 2:查看浏览器控制台
保存系统模板时,会输出日志:
```
[CoverCustomEditor] 保存为系统模板: template_custom_1234567890
[CoverCustomEditor] 系统模板已导出: template_custom_1234567890
```
### 方法 3:检查数据库
```sql
-- 检查数据库中的系统模板
SELECT id, name, is_system, readonly FROM cover_templates
WHERE is_system = 1
ORDER BY created_at DESC;
-- 输出示例:
-- id name is_system readonly
-- template_custom_1234567890 我的系统模板 1 0
```
---
## 🚀 下次启动时的行为
### 应用启动流程
```
1️⃣ 应用启动
2️⃣ initSystemTemplates() 运行
├─ 读取 system-templates.json
└─ 初始化数据库
3️⃣ 您的系统模板被加载
├─ is_system = 1(标记为系统模板)
├─ readonly = 0(开发模式可编辑)
└─ 完整的配置被加载到数据库
4️⃣ 应用正常运行
└─ 您的系统模板可以被选择和使用
```
### 生产模式下
```
1️⃣ 应用启动
2️⃣ initSystemTemplates() 运行
3️⃣ 您的系统模板被加载
└─ readonly = 1(设为只读)
4️⃣ 用户无法编辑系统模板
├─ UI 不显示编辑选项
├─ IPC 调用被拒绝
└─ 数据库标记为只读
```
---
## 🎁 额外特性
### 自动导出失败处理
如果导出到 JSON 失败:
**保存操作仍然成功**
- 数据已保存到数据库
- 只是 JSON 导出失败
- 后端会记录警告日志
**不会中断保存过程**
示例:
```
[CoverCustomEditor] 保存为系统模板: template_id
[CoverCustomEditor] 系统模板已导出: template_id
✅ 系统模板已保存并自动导出到配置文件
```
### 时间戳自动更新
每次导出都会自动更新时间戳:
```json
{
"timestamp": "2026-01-15T14:30:45.123Z",
// ... 其他字段
}
```
---
## 📝 常见问题
### Q1:在哪里找到系统模板选项?
**A:** 在模板编辑器底部,只有在**开发模式**下才会显示。
```
开发模式: npm run dev:win
查看位置: 底部按钮上方
```
### Q2:为什么看不到系统模板选项?
**A:** 可能原因:
1. ❌ 不在开发模式
```bash
# 检查是否开发模式
npm run dev:win # ✅ 正确
npm run build:win # ❌ 这是生产构建
```
2. ❌ 设置了生产环境变量
```bash
unset ELECTRON_ENV_PROD # 清除环境变量
```
### Q3:系统模板和普通模板的区别?
| 特性 | 系统模板 | 普通模板 |
|------|--------|--------|
| 开发模式可编辑 | ✅ | ✅ |
| 生产模式只读 | ✅ | ❌ |
| 自动导出到 JSON | ✅ | ❌ |
| 包含在发行版中 | ✅ | ❌ |
| 用户可删除 | ❌ | ✅ |
| is_system 标记 | 1 | 0 |
### Q4:如何修改已保存的系统模板?
**A:** 再次编辑并保存:
1. 打开模板编辑器
2. 修改内容
3. **再次勾选** "✨ 设为系统模板"
4. 点击保存
5. 配置文件会自动更新
---
## 🎓 工作原理总结
### 简化流程
```
编辑模板 + 勾选"系统模板" + 点保存
自动执行后端逻辑
├─ 保存到 data.db
├─ 导出到 system-templates.json
└─ 更新时间戳
重启应用时
├─ 从 JSON 加载配置
└─ 初始化到数据库
✅ 系统模板被成功保留
```
### 关键优势
✨ **无需手动导出** - 自动完成
✨ **不需要新页面** - 复用现有编辑器
✨ **开发友好** - 编辑即导出
✨ **生产安全** - 系统模板只读
---
## 📞 技术支持
### 查看日志
**浏览器控制台:**
```
F12 → Console → 搜索 [CoverCustomEditor]
```
**应用日志:**
```
electron/mapi/log/main.ts
搜索关键字: saveSubtitleTemplateAndExport, saveCoverTemplateAndExport
```
### 调试
```typescript
// 检查开发模式
console.log('isDev:', isDev.value);
// 检查系统模板选项
console.log('isSystemTemplate:', isSystemTemplate.value);
// 检查导出结果
console.log('[CoverCustomEditor] 系统模板已导出');
```
---
## 🎉 总结
现在您可以:
1. ✅ 在模板编辑器中创建和设计系统模板
2. ✅ 勾选选项自动导出到 JSON
3. ✅ 重启应用后自动加载系统模板
4. ✅ 生产版本中系统模板保持只读
5. ✅ 无需创建专门的管理页面
**就这么简单!** 🚀