# course edit 一句话:增量编辑已有课程信息,仅传入的字段会被更新,仅机构管理员。章节目录的增删改请用 [`course chapter`](zeyiji-course-chapter.md) / [`course section`](zeyiji-course-section.md)。 向用户汇报前 MUST 遵循 [课程对外表达](zeyiji-course-presentation.md)。 ## 命令 ```bash # 改名 / 价格(单位分)/ 上下架 zeyiji-cli course edit --id 123 --name "Go 语言进阶" zeyiji-cli course edit --id 123 --current-price 12900 --original-price 25900 zeyiji-cli course edit --id 123 --status 1 # 换封面;更新图文介绍(.html/.htm/.txt 直传,图片自动包装为 HTML) zeyiji-cli course edit --id 123 --cover-image ./new-cover.jpg zeyiji-cli course edit --id 123 --introduce-url ./intro.html # 图文介绍局部替换(old=new,可多次;与 --introduce-url 互斥) zeyiji-cli course edit --id 123 --introduce-replace "旧文案=新文案" \ --introduce-replace "https://old.com/a.jpg=https://new.com/b.jpg" # 整体替换目录(单层目录用 --sections,双层目录用 --chapters) zeyiji-cli course edit --id 123 --sections '[{"name":"第1节 新内容","videoUrl":"./v1.mp4","freeFlag":1}]' zeyiji-cli course edit --id 123 --chapters '[{"name":"第一章","sections":[{"name":"1.1 新内容","videoUrl":"./v1.mp4"}]}]' # 预览请求(不实际执行) zeyiji-cli course edit --id 123 --name "测试" --dry-run ``` ## 参数要点 | 参数 | 说明 | |---|---| | `--id` | **必填**,课程 ID | | 课程信息字段 | 与 `course create` 同名同义,仅传入的才更新,未传保持原值 | | `--sections` / `--chapters` | 传入即**替换整个目录**;必须与课程目录类型匹配(不传则保留现有目录) | | `--introduce-url` | 整体替换图文介绍文件;与 `--introduce-replace` 互斥 | | `--introduce-replace` | `old=new` 局部替换,可多次指定;改富文本前先用 detail 取图文介绍原文确认 | | `--status` | 1 上架 / 2 下架(`course create` 没有此参数) | | `--current-price` / `--original-price` | 单位分,≥0 | | `--data` | 直接传完整 JSON 请求体,覆盖其他 flags | 目录类型不可变更;如确需从单层目录改为双层目录(或反向),只能删除课程后重建。 ## 对外结果 - 编辑成功:说「已更新课程《课程名称》」,只复述用户实际修改的项目,并把状态、展示平台、目录类型、返佣和免费试看等转换成前端业务文案。 - 需要用户重选级联字段时,按名称列出资源领域、课程类型、职业和等级;不要展示内部 ID、请求 JSON 或字段名。 - 不要把 `--jq` 输出、数字枚举、空值判断或权限隐藏提示放进最终答复。 ## 级联清空规则 ID 类字段修改前必须先查询(见下方「ID 类字段查询命令」),按名称让用户选择。上层变更后,下层字段全部失效: | 变更字段 | 失效字段(必须重选) | |---|---| | `--category-id-resource`(资源领域) | 课程类型 `--category-id`、国标类别 `--category-id-standard`、职业等级 `--profession-level-id`;关联职业是否保留由新资源领域的 code 决定 | | `--category-id`(课程类型) | 关联职业 `--profession-id`、职业等级 `--profession-level-id` | | `--profession-id`(关联职业) | 职业等级 `--profession-level-id` | 处理流程(每次都要走完): 1. `course detail --course-id ` 取当前目录类型、资源领域和课程类型等值;Agent 内部按 JSON 字段与资源领域 code 判断级联关系。 2. 从变更点向下逐级重新查询,让用户按名称重选:资源领域 → 课程类型树 → 关联职业 → 职业等级。 3. 所有变更合并成**一次** `course edit` 提交(不要拆成多次,避免中间态失败)。 资源领域 code:1 职业技能(职业 + 等级,`/back/profession/page`);2 职业资格(仅职业,`/back/profession/qualify/page`,无等级);3 兴趣技能 / 4 公益生活(无职业字段)。 ## ID 类字段查询命令 ```bash # 资源领域 zeyiji-cli api GET /back/category/page -p type=1 -p parentId=0 -p size=100 --jq ".records[] | {id, name, code}" # 课程类型树(只选叶子节点) zeyiji-cli api GET /back/category/tree -p type=1 -p parentId=<资源领域ID> --jq "def t: {id, name, sons: [(.sons // [])[] | t]}; .[] | t" # 关联职业(code=1;code=2 改用 /back/profession/qualify/page) zeyiji-cli api GET /back/profession/page -p categoryId=<课程类型ID> --jq ".records[] | {id, name}" # 职业等级(仅 code=1) zeyiji-cli api GET /back/profession/level/page -p professionId=<职业ID> --jq ".records[] | {id, name}" # 课程类别(国标 type=2,与「课程类型」不同) zeyiji-cli api GET /back/category/tree -p type=2 --jq "def t: {id, name, sons: [(.sons // [])[] | t]}; .[] | t" ``` ## 常见错误 | 现象 | 处理 | |---|---| | 课程ID不能为空 | 补 `--id` | | 课程不存在(ID: x) | 用 `course list` 查正确 ID | | 该课程为双层目录,不支持 `--sections`(或反向) | 按课程目录类型改用 `--chapters` / `--sections` | | --introduce-url 和 --introduce-replace 不能同时使用 | 整体替换与局部替换二选一 | | 有效期天数不合法 / 课程状态值不合法 | 使用合法枚举 | | 未找到ID为 x 的目录/节 | 用 `course detail` 核对后再传 ID |