# 系统模板设置和使用指南

## 📍 在哪里创建系统模板？

现在您可以直接在现有的模板编辑器中创建系统模板，**无需创建专门的管理页面**。

---

## ✨ 新功能：在模板编辑器中设为系统模板

### 位置

**封面模板编辑器**

位置: `视频` → `创建视频` → `编辑封面模板`

或: 在 `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. ✅ 无需创建专门的管理页面

**就这么简单！** 🚀
