508 lines
12 KiB
Markdown
508 lines
12 KiB
Markdown
# 系统模板设置和使用指南
|
||
|
||
## 📍 在哪里创建系统模板?
|
||
|
||
现在您可以直接在现有的模板编辑器中创建系统模板,**无需创建专门的管理页面**。
|
||
|
||
---
|
||
|
||
## ✨ 新功能:在模板编辑器中设为系统模板
|
||
|
||
### 位置
|
||
|
||
**封面模板编辑器**
|
||
|
||
位置: `视频` → `创建视频` → `编辑封面模板`
|
||
|
||
或: 在 `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. ✅ 无需创建专门的管理页面
|
||
|
||
**就这么简单!** 🚀
|