# 瑶光 AI 短剧小程序

这是 `doc/html` 对应的移动端快速制作版本，基于 UniApp + Vue 3 + TypeScript。它不是完整复刻 PC 管理台，而是把手机端最常用链路做轻。

## 两种制作模式

### PC 精修

适合严肃项目和需要人工把控的短剧制作：

```text
上传剧本 / 输入目标
-> 创建项目
-> Agent 生成剧本理解、角色、分镜
-> 回 PC 工作台精修
-> 在 PC 端生成视频和导出
```

请求特征：

```json
{
  "runIntent": "auto",
  "selectedSteps": ["script_understanding", "character_generation", "storyboard_generation"]
}
```

### 极速出片

适合先快速拿到一版样片：

```text
上传剧本 / 输入目标
-> 创建项目
-> Agent 自动跑剧本、角色、分镜、图片、视频、合成
-> 小程序查看结果
```

请求特征：

```json
{
  "runIntent": "quick_video",
  "selectedSteps": [
    "script_understanding",
    "character_generation",
    "storyboard_generation",
    "image_generation",
    "video_generation",
    "video_composition"
  ]
}
```

后端已经识别 `quick_video` 意图，并在 Agent 常规分镜链路后继续提交视频任务、等待任务完成、启动分集合成。小程序结果页会读取项目下的视频任务和分集合成任务，优先展示合成后的成片地址。

## 目录

```text
doc/miniapp
├─ src/api              后端接口封装
├─ src/components       小程序组件
├─ src/pages            页面
├─ src/stores           Pinia 登录态
├─ src/types            API 类型
└─ src/utils            常量和格式化
```

## 本地运行

```bash
cd doc/miniapp
npm install
npm run dev:h5
```

微信小程序构建：

```bash
npm run dev:mp-weixin
```

然后用微信开发者工具打开生成的 `dist/dev/mp-weixin`。

## 后端地址

默认后端地址在 `src/utils/constants.ts`：

```ts
export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || "http://localhost:8080";
```

也可以复制 `.env.example` 为 `.env` 后修改：

```bash
VITE_API_BASE_URL=http://localhost:8080
```

如果用真机预览，`localhost` 指向手机本机，需要改成电脑局域网 IP 或正式域名，并在微信小程序后台配置 request/uploadFile 合法域名。

## 已接入接口

- `POST /auth/login`
- `GET /projects`
- `POST /projects`
- `GET /projects/{id}`
- `POST /projects/{projectId}/assets?assetType=script`
- `POST /agent/projects/{projectId}/runs`
- `GET /agent/projects/{projectId}/runs/latest`
- `POST /agent/runs/{runId}/pause`
- `POST /agent/runs/{runId}/resume`
- `GET /video-tasks/project/{projectId}`
- `GET /assembly/project/{projectId}/episode/{episodeId}`

## 后续建议

- 后端为 `quick_video` 返回最终 `finalVideoUrl`、`coverUrl`、`duration` 等字段后，替换结果页 `VideoPreview` 的空状态。
- PC 精修模式可在结果页展示“在电脑打开此项目”的二维码或短链。
- 视频生成长任务在小程序端建议继续用轮询，SSE/WebSocket 可作为后续增强。
