Initial clean project import
This commit is contained in:
@@ -0,0 +1,424 @@
|
||||
# 系统模板管理指南
|
||||
|
||||
## 概述
|
||||
|
||||
系统模板(字幕和封面)现在支持以下功能:
|
||||
- 📁 保存在 JSON 配置文件中
|
||||
- 🎨 开发模式下可以编辑
|
||||
- 📦 打包时包含在发行版中
|
||||
- 🔒 生产模式下用户无法修改
|
||||
|
||||
---
|
||||
|
||||
## 文件结构
|
||||
|
||||
### 关键文件
|
||||
|
||||
```
|
||||
C:\aigcpanel-main\
|
||||
├── electron/
|
||||
│ ├── config/
|
||||
│ │ └── system-templates.json # ⭐ 系统模板配置文件
|
||||
│ ├── mapi/
|
||||
│ │ ├── db/
|
||||
│ │ │ ├── migration.ts # 数据库迁移 v23
|
||||
│ │ │ └── initSystemTemplates.ts # 初始化逻辑
|
||||
│ │ └── subtitleCover/
|
||||
│ │ ├── main.ts # 导出/管理实现
|
||||
│ │ └── register.ts # IPC 接口注册
|
||||
├── src/
|
||||
│ └── api/
|
||||
│ └── systemTemplates.ts # 前端 API 包装
|
||||
└── scripts/
|
||||
└── export-system-templates.js # 导出脚本
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 工作流程
|
||||
|
||||
### 1. 开发模式:编辑系统模板
|
||||
|
||||
#### 方法 A:在应用中编辑并导出
|
||||
|
||||
```typescript
|
||||
import {
|
||||
getSystemTemplatesList,
|
||||
saveSystemTemplate,
|
||||
exportSystemTemplatesToFile,
|
||||
isDevMode
|
||||
} from '@/api/systemTemplates';
|
||||
|
||||
// 检查是否开发模式
|
||||
if (isDevMode()) {
|
||||
// 获取现有模板
|
||||
const result = await getSystemTemplatesList();
|
||||
console.log('系统模板:', result.templates);
|
||||
|
||||
// 编辑字幕模板(例如:设置颜色)
|
||||
await saveSystemTemplate({
|
||||
type: 'subtitle',
|
||||
id: 'template_system_11',
|
||||
name: '11',
|
||||
description: '系统字幕模板 11',
|
||||
config: {
|
||||
subtitleStyleId: 'system-subtitle-11',
|
||||
subtitlePosition: 'bottom',
|
||||
// ... 其他配置
|
||||
subtitleStyle: {
|
||||
fontColor: '#FFFFFF', // 普通字幕颜色
|
||||
// ... 其他字体设置
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 导出配置到文件(覆盖 system-templates.json)
|
||||
const exportResult = await exportSystemTemplatesToFile();
|
||||
if (exportResult.success) {
|
||||
console.log('✅ 配置已导出到:', exportResult.filePath);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 方法 B:使用 Node 脚本导出
|
||||
|
||||
```bash
|
||||
# 从数据库导出所有系统模板配置到 system-templates.json
|
||||
node scripts/export-system-templates.js
|
||||
```
|
||||
|
||||
这个脚本会:
|
||||
1. 连接到应用数据库
|
||||
2. 读取所有系统模板配置(包括你设置的颜色)
|
||||
3. 导出到 `electron/config/system-templates.json`
|
||||
|
||||
### 2. 打包生产版本
|
||||
|
||||
```bash
|
||||
# 自动复制 system-templates.json 到打包资源中
|
||||
npm run build:win
|
||||
|
||||
# 或者
|
||||
npm run build:mac
|
||||
```
|
||||
|
||||
打包流程:
|
||||
1. ✅ 执行 `prepare-package.cjs` 脚本
|
||||
2. ✅ 复制 `system-templates.json` → `resources/extra/common/config/`
|
||||
3. ✅ 用户安装应用后,自动初始化数据库
|
||||
4. ✅ 生产模式设置 `readonly=1`,用户无法修改
|
||||
|
||||
### 3. 生产模式:用户安装应用
|
||||
|
||||
用户安装后:
|
||||
- ✅ 应用启动时自动从 JSON 初始化 8 套系统模板
|
||||
- ✅ 字幕和封面模板都加载到数据库
|
||||
- ✅ 系统模板标记为只读,用户无法编辑/删除
|
||||
- ✅ 用户可以创建自己的自定义模板
|
||||
|
||||
---
|
||||
|
||||
## API 参考
|
||||
|
||||
### 前端 API
|
||||
|
||||
#### `getSystemTemplatesList()`
|
||||
获取系统模板列表
|
||||
|
||||
```typescript
|
||||
const result = await getSystemTemplatesList();
|
||||
// 返回: { success: boolean, templates: { subtitleTemplates: [], coverTemplates: [] } }
|
||||
```
|
||||
|
||||
#### `saveSystemTemplate(template)`
|
||||
保存/编辑系统模板(开发模式)
|
||||
|
||||
```typescript
|
||||
const template = {
|
||||
type: 'subtitle' | 'cover',
|
||||
id: 'template_system_11',
|
||||
name: '11',
|
||||
description: 'Description',
|
||||
config: { /* 配置对象 */ },
|
||||
thumbnailPath: '/path/to/thumbnail.png' // 仅 cover 类型
|
||||
};
|
||||
|
||||
const result = await saveSystemTemplate(template);
|
||||
// 返回: { success: boolean, id: string, message: string }
|
||||
```
|
||||
|
||||
#### `resetSystemTemplates()`
|
||||
重置为默认值(开发模式)
|
||||
|
||||
```typescript
|
||||
const result = await resetSystemTemplates();
|
||||
// 返回: { success: boolean, message: string }
|
||||
```
|
||||
|
||||
#### `exportSystemTemplatesToFile()`
|
||||
导出配置到 JSON 文件(开发模式)
|
||||
|
||||
```typescript
|
||||
const result = await exportSystemTemplatesToFile();
|
||||
// 返回: { success: boolean, filePath: string, message: string }
|
||||
```
|
||||
|
||||
#### `isDevMode()`
|
||||
检查是否开发模式
|
||||
|
||||
```typescript
|
||||
if (isDevMode()) {
|
||||
// 开发模式逻辑
|
||||
}
|
||||
```
|
||||
|
||||
### 后端 IPC 接口
|
||||
|
||||
```
|
||||
systemTemplates:getList // 获取模板列表
|
||||
systemTemplates:save // 保存模板
|
||||
systemTemplates:delete // 删除模板
|
||||
systemTemplates:reset // 重置模板
|
||||
systemTemplates:export // 导出到文件
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见场景
|
||||
|
||||
### 场景 1:更新系统模板的颜色设置
|
||||
|
||||
1. 在应用中编辑字幕模板的颜色
|
||||
2. 调用 `exportSystemTemplatesToFile()` 导出
|
||||
3. 提交 `system-templates.json` 到 Git
|
||||
4. 下次打包时,新颜色会包含在发行版中
|
||||
|
||||
### 场景 2:添加新的系统模板
|
||||
|
||||
1. 在应用中创建新模板
|
||||
2. 调用 `saveSystemTemplate()` 保存
|
||||
3. 调用 `exportSystemTemplatesToFile()` 导出
|
||||
4. 更新版本号和时间戳
|
||||
5. 打包发行
|
||||
|
||||
### 场景 3:重置系统模板
|
||||
|
||||
1. 调用 `resetSystemTemplates()` 重置数据库
|
||||
2. 调用 `exportSystemTemplatesToFile()` 导出当前配置
|
||||
3. 用户将恢复到默认的 8 套系统模板
|
||||
|
||||
---
|
||||
|
||||
## 数据库架构
|
||||
|
||||
### subtitle_templates 表
|
||||
|
||||
```sql
|
||||
CREATE TABLE subtitle_templates (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
config TEXT, -- JSON 格式配置
|
||||
is_system INTEGER DEFAULT 0, -- 1=系统模板, 0=用户模板
|
||||
readonly INTEGER DEFAULT 0, -- 1=只读(生产模式), 0=可编辑(开发模式)
|
||||
created_at INTEGER,
|
||||
updated_at INTEGER
|
||||
);
|
||||
```
|
||||
|
||||
### cover_templates 表
|
||||
|
||||
```sql
|
||||
CREATE TABLE cover_templates (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
config TEXT, -- JSON 格式配置
|
||||
is_system INTEGER DEFAULT 0, -- 1=系统模板, 0=用户模板
|
||||
readonly INTEGER DEFAULT 0, -- 1=只读(生产模式), 0=可编辑(开发模式)
|
||||
thumbnail_path TEXT,
|
||||
created_at INTEGER,
|
||||
updated_at INTEGER
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 开发模式标志
|
||||
|
||||
### 检查开发/生产模式
|
||||
|
||||
```typescript
|
||||
// 方法 1:前端
|
||||
import { isDevMode } from '@/api/systemTemplates';
|
||||
const isDev = isDevMode();
|
||||
|
||||
// 方法 2:后端
|
||||
function isProductionMode(): boolean {
|
||||
return process.env.ELECTRON_ENV_PROD === '1' ||
|
||||
process.env.NODE_ENV === 'production' ||
|
||||
!process.env.DEV;
|
||||
}
|
||||
```
|
||||
|
||||
### 启动开发模式
|
||||
|
||||
```bash
|
||||
# Windows
|
||||
npm run dev:win
|
||||
|
||||
# macOS
|
||||
npm run dev:mac
|
||||
|
||||
# 预发布模式(仍可编辑系统模板)
|
||||
npm run dev:win:pre
|
||||
npm run dev:mac:pre
|
||||
```
|
||||
|
||||
### 启动生产模式
|
||||
|
||||
```bash
|
||||
# 直接设置环境变量为生产模式
|
||||
set ELECTRON_ENV_PROD=1 # Windows
|
||||
export ELECTRON_ENV_PROD=1 # macOS/Linux
|
||||
npm run dev:win
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## JSON 配置文件格式
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"description": "系统内置模板配置 - 包含8套字幕模板和8套封面模板",
|
||||
"timestamp": "2026-01-15T10:30:00.000Z",
|
||||
"subtitleTemplates": [
|
||||
{
|
||||
"id": "template_system_11",
|
||||
"name": "11",
|
||||
"description": "系统字幕模板 11",
|
||||
"isSystem": true,
|
||||
"readonly": false,
|
||||
"createdAt": 1768396885438,
|
||||
"config": {
|
||||
"subtitleStyleId": "system-subtitle-11",
|
||||
"subtitlePosition": "bottom",
|
||||
"subtitleStyle": {
|
||||
"fontColor": "#FFFFFF",
|
||||
"outlineColor": "#000000",
|
||||
"outlineWidth": 3,
|
||||
"fontSize": 48
|
||||
}
|
||||
// ... 其他配置
|
||||
}
|
||||
}
|
||||
// ... 其他7个字幕模板
|
||||
],
|
||||
"coverTemplates": [
|
||||
// ... 8个封面模板
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 安全性注意事项
|
||||
|
||||
### ✅ 开发模式保护
|
||||
|
||||
- API 调用前检查 `isDev` 标志
|
||||
- 编辑后立即导出到文件
|
||||
- 配置文件纳入版本控制
|
||||
|
||||
### 🔒 生产模式保护
|
||||
|
||||
- 系统模板标记为 `readonly=1`
|
||||
- IPC 接口检查开发/生产模式
|
||||
- 用户无法编辑/删除系统模板
|
||||
- 只能创建自己的自定义模板
|
||||
|
||||
### 🔄 版本管理
|
||||
|
||||
- 每次导出时更新 `timestamp`
|
||||
- 增加版本号时更新 `version`
|
||||
- 在 Git 中追踪 `system-templates.json` 的变化
|
||||
|
||||
---
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题:编辑的颜色没有保存到文件
|
||||
|
||||
**解决:**
|
||||
```typescript
|
||||
// 1. 确保在开发模式
|
||||
console.log('开发模式:', isDevMode());
|
||||
|
||||
// 2. 确认编辑已保存到数据库
|
||||
const list = await getSystemTemplatesList();
|
||||
console.log('当前模板:', list.templates);
|
||||
|
||||
// 3. 手动导出到文件
|
||||
const result = await exportSystemTemplatesToFile();
|
||||
console.log('导出结果:', result);
|
||||
```
|
||||
|
||||
### 问题:生产模式仍然可以编辑系统模板
|
||||
|
||||
**解决:**
|
||||
```typescript
|
||||
// 检查环境变量
|
||||
console.log('ELECTRON_ENV_PROD:', process.env.ELECTRON_ENV_PROD);
|
||||
console.log('NODE_ENV:', process.env.NODE_ENV);
|
||||
|
||||
// 检查数据库中的 readonly 标记
|
||||
// SELECT * FROM subtitle_templates WHERE is_system = 1;
|
||||
// 应该看到 readonly = 1
|
||||
```
|
||||
|
||||
### 问题:导出脚本找不到数据库
|
||||
|
||||
**解决:**
|
||||
```bash
|
||||
# 确保应用已启动过至少一次,创建了数据库
|
||||
# 检查数据库位置:
|
||||
# Windows: %APPDATA%\zhenqianba\data.db
|
||||
# macOS: ~/Library/Application Support/zhenqianba/data.db
|
||||
# Linux: ~/.config/zhenqianba/data.db
|
||||
|
||||
# 或者手动指定数据库路径:
|
||||
node scripts/export-system-templates.js --db-path /path/to/data.db
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **定期导出**:每次编辑系统模板后都导出
|
||||
2. **版本控制**:将 `system-templates.json` 提交到 Git
|
||||
3. **备份配置**:发行前备份 `system-templates.json`
|
||||
4. **测试生产模式**:确保生产版本中系统模板是只读的
|
||||
5. **文档更新**:模板变化时更新 `description` 字段
|
||||
|
||||
---
|
||||
|
||||
## 相关文件
|
||||
|
||||
- 配置文件:`electron/config/system-templates.json`
|
||||
- 前端 API:`src/api/systemTemplates.ts`
|
||||
- 后端实现:`electron/mapi/subtitleCover/main.ts`
|
||||
- 数据库初始化:`electron/mapi/db/initSystemTemplates.ts`
|
||||
- 迁移脚本:`electron/mapi/db/migration.ts` (v23)
|
||||
- 打包脚本:`scripts/prepare-package.cjs`
|
||||
- 导出脚本:`scripts/export-system-templates.js`
|
||||
|
||||
---
|
||||
|
||||
## 更新历史
|
||||
|
||||
### v1.0.0 (2026-01-15)
|
||||
- ✅ 创建系统模板配置文件
|
||||
- ✅ 实现导出功能
|
||||
- ✅ 添加开发/生产模式区分
|
||||
- ✅ 支持打包时包含配置文件
|
||||
- ✅ 实现生产模式只读保护
|
||||
Reference in New Issue
Block a user