【Codex】用教材配置模块统一管理课程教材体系

教育管理系统教材配置用Codex自动生成项目代码

教材配置是教育管理系统里承接课程、教案、题库和 APP 教程绑定的基础数据模块。它管理的不是一张普通教材表,而是按学段、学科、版本、册、单元和章节组织起来的树形教材目录,后续教案主体同步、课程文档生成和 NotebookLM 绑定都会依赖这套目录。

本文围绕 server_backend/modules/Config/views_app/TextBook.pyserver_vue3/src/views/modules/Config/TextBook/ 的真实代码,说明如何把教材目录初始化、树形列表、清空保护和状态回显转换成 Codex 可执行的后端、前端、SOP 和 PDD 任务。

文章目录

设计与需求

教材配置不能只理解成"教材名称的增删改查"。在当前项目中,TextBook 模型保存教材树节点,get_init_menu 读取内置 menu_data 并回填 initializedversionchapter_initializedupdate_subject_book 会按学段、学科和教材 JSON 文件重建目录。这个模块实际承担的是教育资源目录底座,必须先把业务需求拆成页面结构、数据模型、接口规则和权限验收,再交给 Codex 生成项目代码。
教材配置需求
模块设计
页面结构
教材模型
接口规则
权限验收
Codex生成代码
模块交付

需求层描述 设计层转换 Codex 代码生成方向
配置中心需要维护教材目录 TextBook 保存教材册、单元、章节树 生成树形模型、懒加载列表和目录初始化接口
教材来自内置 JSON 数据 通过 levelsubjectfilename 定位 bak_data/textbook 文件 生成教材文件读取、版本解析、节点递归写入逻辑
页面要展示初始化状态 get_init_menu 返回 initializedversionchapter_initialized 生成初始化弹窗、学段标签、学科卡片和状态标签
教材树需要按父级加载 前端使用 pcode 查询子节点并设置 hasChildren 生成 FastCrud 树表、懒加载和刷新父节点逻辑
全量初始化有风险 delete_all 使用 SYSTEM_CLEAR_PASSWORD 校验口令 生成清空确认、口令输入、后端事务保护
后续教案绑定依赖教材路径 目录结构需要稳定输出 type_book_leveltype_book_subjectversionname 保证教材目录可被 LessonPlanChapter 初始化复用

教材配置的核心对象是树形教材节点。TextBook 模型包含 nameversioncodeleveltype_book_subjecttype_book_levelenablepcode,其中 code 是唯一编码,pcode 通过自关联表达目录父子关系。Codex 在生成代码时,需要围绕树形目录、初始化状态和清空保护组织任务,不能把它简化成普通表格维护。

可以直接使用下面的Prompt进行模块功能的设计

text 复制代码
请基于当前教育管理系统源码设计教材配置模块,模块位置为配置中心。不要把它设计成普通 CRUD,而要围绕教材目录初始化、树形教材维护和初始化状态回显完成模块设计。

后端需要参考 server_backend/modules/Config/models.py 中的 TextBook 模型,字段包括 name、version、code、level、type_book_subject、type_book_level、enable、pcode。接口需要参考 server_backend/modules/Config/views_app/TextBook.py,支持教材树列表、懒加载查询、get_init_menu、update_subject_book、delete_all。

教材初始化需要从 server_backend/modules/Config/views_app/bak_data/textbook 下读取内置 JSON 文件,按 level、subject、filename 解析教材版本,按教材册、单元、章节递归写入 TextBook,并清理同学段同学科旧目录。

前端需要参考 server_vue3/src/views/modules/Config/TextBook/index.vue、api.ts、crud.tsx 和 components/InitTextBookDialog.vue,实现 FastCrud 树表、初始化教材弹窗、学段标签、学科卡片、教材文件选择、初始化状态标签、全量清空口令确认和列表刷新。

请输出完整模块设计,覆盖页面结构、模型字段、接口规则、树形目录、初始化流程、清空保护、权限按钮和验收标准,再按当前项目结构生成代码。

后端设计

教材配置后端的重点不是堆 CRUD 接口,而是构建可复用的教材目录底座。TextBookViewSet 继承 CustomModelViewSet,列表查询使用 CustomModelInFilter.create_for_model 支持 nametype_book_subjecttype_book_level 的模糊筛选;更新序列化使用 PCodeTreeSerializer.update_for_model(TextBook),让树节点的父子关系能按 pcode 维护。

后端设计项 设计重点 Codex 生成方向
数据模型 TextBook 保存教材名称、版本、编码、层级、学科、学段、启用状态和父级编码 生成树形目录模型与自关联字段
查询筛选 filterset_class 支持教材名、学科、学段模糊查询 生成列表查询和懒加载参数处理
初始化菜单 get_init_menu 遍历 menu_data 并检查教材与章节初始化状态 生成初始化状态接口和返回结构
教材初始化 update_subject_book 校验 subjectlevelfilename,读取教材 JSON 并递归写入 生成事务保护、版本提取、旧数据清理和节点 upsert
清空保护 delete_all 校验 SYSTEM_CLEAR_PASSWORD 后事务删除全部教材 生成口令校验和危险操作响应
路由注册 modules/Config/urls.py 注册 TextBookViewSet 生成 REST 路由与自定义 action

update_subject_book 是后端设计的核心。它通过 level_mapGeneralSubject 生成编码前缀,用 TextBookViewUtils.load_textbook_payload 读取教材 JSON,用 extract_version 从文件名提取版本。写入前按 type_book_subjecttype_book_levellevel 清理旧数据,再通过递归函数生成 codepcodelevelversion。这类逻辑需要让 Codex 明确按事务处理,避免初始化失败后留下半截教材树。

可以直接使用下面的Prompt进行后端代码的设计

text 复制代码
请为教育管理系统配置中心实现教材配置模块后端代码,要求从零设计或补齐现有代码,并严格贴合当前项目结构。

后端模块路径:server_backend/modules/Config/。
模型参考:server_backend/modules/Config/models.py 中的 TextBook。
接口参考:server_backend/modules/Config/views_app/TextBook.py。

请实现 TextBook 数据模型,字段包含 name、version、code、level、type_book_subject、type_book_level、enable、pcode,并保证 code 唯一、pcode 支持自关联树形目录。

请实现 TextBookViewSet,包含教材列表、详情、新增、更新、删除、树形懒加载查询、get_init_menu、update_subject_book、delete_all。列表筛选需要支持 name、type_book_subject、type_book_level 模糊查询,并能按 pcode 查询子节点。

get_init_menu 需要读取 dvadmin.data.textbook.menu_data,返回每个学段和学科的 initialized、version、chapter_initialized 状态。initialized 来自 TextBook,chapter_initialized 来自 LessonPlanChapter 的 text_book 前缀匹配。

update_subject_book 接收 subject、level、filename,校验参数后从 server_backend/modules/Config/views_app/bak_data/textbook 读取对应教材 JSON 文件,解析教材版本,按学段和学科清理旧目录,再递归写入教材册、单元、章节。整个初始化过程需要使用事务保护。

delete_all 需要读取 settings.SYSTEM_CLEAR_PASSWORD,只有口令正确才能清空 TextBook,清空过程使用事务,返回 deleted_rows。

请补齐序列化规则、接口视图、路由注册、筛选查询、权限控制和基础校验,并保证接口返回结构能被 server_vue3/src/views/modules/Config/TextBook/api.ts 和 InitTextBookDialog.vue 使用。

前端设计

教材配置前端不是把字段堆到表格上,而是让管理员能查看教材树、初始化指定学科教材、识别已初始化版本,并在危险操作前完成确认。index.vue 只保留 fs-crud 主页面和 InitTextBookDialog actionbar 插槽,表格细节集中在 crud.tsx,接口封装集中在 api.ts

前端设计项 设计重点 Codex 生成方向
页面入口 index.vue 使用 fs-pagefs-crudInitTextBookDialog 生成模块主页面和刷新回调
接口封装 api.ts 封装 /api/Config/TextBook/get_init_menuupdate_subject_bookdelete_all 生成统一请求函数与初始化接口
树形列表 crud.tsx 开启 table.lazy,按 pcode 请求子节点 生成树表字段、懒加载和 hasChildren 转换
字段展示 展示 codeversiontype_book_leveltype_book_subjectname 生成查询项、列宽和表单隐藏规则
初始化弹窗 InitTextBookDialog.vue 使用左侧学段 tabs、学科卡片和教材文件下拉 生成初始化交互和状态标签
清空确认 全量初始化调用 ClearAll,通过 ElMessageBox.prompt 输入密码 生成危险操作确认和加载状态
权限按钮 初始化教材按钮使用 v-permission="'Update'" 生成按钮权限控制

前端需要注意字段命名一致性。当前 api.tsGetList 会把根节点查询约束到 level = 1,并将 pcode_count 转成 hasChildrencrud.tsx 再用 table.loadpcode: row.code 查询子节点。InitTextBookDialog 通过 initMenu 获取菜单状态,选择教材文件后调用 initSubjectBook,成功后更新 subject.initializedsubject.version 并触发列表刷新。

可以直接使用下面的Prompt进行前端代码的设计

text 复制代码
请为教育管理系统配置中心实现教材配置模块前端代码,要求贴合当前 server_vue3 项目和 FastCrud 写法。

前端模块路径:server_vue3/src/views/modules/Config/TextBook/。
需要实现或补齐 index.vue、api.ts、crud.tsx、components/InitTextBookDialog.vue。

index.vue 需要使用 fs-page 和 fs-crud 承载教材树表,并在 actionbar-left 插槽放置 InitTextBookDialog。初始化成功后需要调用 crudExpose.doRefresh 刷新列表。

api.ts 需要封装 /api/Config/TextBook/ 的列表、详情、新增、更新、删除接口,并封装 get_init_menu、update_subject_book、delete_all。GetList 在无 pcode、name、code 时默认查询 level=1,并把 pcode_count 转成 hasChildren。

crud.tsx 需要生成教材树表,字段包含 code、version、type_book_level、type_book_subject、name。表格开启 lazy、children、hasChild,子节点加载时按 pcode=row.code 请求 /api/Config/TextBook/,并保持 hasChildren 转换。新增、编辑、删除按钮按当前页面需要隐藏或控制。

InitTextBookDialog.vue 需要实现初始化教材弹窗:打开时请求 get_init_menu,左侧按学段展示 tabs,右侧按学科展示卡片;每个学科可选择教材 JSON 文件并调用 update_subject_book;卡片显示 initialized、version 状态;全量初始化教材版本需要弹出口令输入框并调用 delete_all。

请保证列表查询、树形懒加载、教材初始化、初始化状态回显、全量清空确认、按钮权限、加载状态和错误提示完整可用。

扩展功能

教材配置的扩展能力来自源码中的真实业务逻辑。它不只是维护教材名称,还需要让内置教材 JSON、树形目录、初始化状态和清空保护形成闭环。这些能力超出普通 CRUD,因为它们会影响后续 APP 绑定教程、教案主体同步和课程文档任务。

扩展功能 主要用途 落地重点
数据联动 保证教材树、初始化菜单、学段学科和版本状态同步 get_init_menuGetListtable.load、初始化刷新要一致
教材初始化 将内置教材 JSON 转成 TextBook 树形目录 参数校验、版本解析、编码生成、事务写入
清空保护 约束全量清空教材配置的危险操作 口令校验、事务删除、前端确认和结果回显

数据联动

教材配置中的数据联动主要发生在列表查询、树形懒加载和初始化弹窗之间。列表根节点按 level=1 查询;点击展开教材册时,前端按 pcode=row.code 请求子节点;初始化弹窗通过 get_init_menu 获取每个学段学科的 initializedversionchapter_initialized;初始化成功后刷新菜单和树表。
结果阶段
处理阶段
输入阶段
筛选条件
展开节点
选择教材
生成查询参数
请求子节点
初始化教材
刷新菜单
教材树更新
版本回显
状态更新

交给 Codex 生成时,需要明确联动边界:TextBook 的树表数据来自 /api/Config/TextBook/,初始化菜单来自 /api/Config/TextBook/get_init_menu/,教材初始化来自 /api/Config/TextBook/update_subject_book/。初始化成功后,不只更新按钮状态,还要重新拉取菜单并刷新树表,避免页面版本标签和真实目录不一致。

可以直接使用下面的Prompt进行数据联动设计

text 复制代码
请为教材配置模块实现数据联动逻辑。

模块路径包括 server_backend/modules/Config/views_app/TextBook.py 和 server_vue3/src/views/modules/Config/TextBook/。

列表根节点查询在没有 pcode、name、code 时默认传 level=1。展开树节点时,需要按 pcode=row.code 请求子节点,并将后端 pcode_count 转成前端 hasChildren。

初始化弹窗打开时请求 /api/Config/TextBook/get_init_menu/,按学段 tabs 和学科卡片展示 initialized、version、chapter_initialized。选择教材文件并调用 update_subject_book 成功后,需要更新当前学科 initialized 和 version,再重新请求 get_init_menu,并刷新 fs-crud 列表。

请保证列表筛选、树形懒加载、教材初始化、版本回显、状态标签和列表刷新之间保持一致,避免出现初始化成功但列表或状态不更新的问题。

教材初始化

教材初始化是当前模块最重要的扩展能力。后端 update_subject_book 接收 subjectlevelfilename,从 bak_data/textbook/{level}/{filename} 读取教材 JSON,通过 TextBookViewUtils.extract_version 解析版本,再按教材树层级递归生成 TextBook 节点。写入前会清理同学段同学科的旧数据,保证当前版本目录是干净的。
结果阶段
处理阶段
输入阶段
学段
学科
教材文件
校验参数
读取JSON
解析版本
递归写入
返回版本
刷新教材树

Codex 生成这部分代码时,边界要写清楚:教材文件不是用户上传文件,而是项目内置 JSON;初始化不是追加写入,而是清理同学段同学科旧目录后重建;编码不是随机值,而是由学段编码、学科编码和层级序号拼接;整个过程必须放在事务里。

可以直接使用下面的Prompt进行教材初始化设计

text 复制代码
请为教材配置模块实现教材初始化功能。

接口为 /api/Config/TextBook/update_subject_book/,请求方法 POST,参数为 subject、level、filename。接口需要校验三个参数均不能为空,并根据 dvadmin.data.textbook.level_map 和 dvadmin.data.dictionary.GeneralSubject 生成教材编码前缀。

请从 server_backend/modules/Config/views_app/bak_data/textbook/{level}/{filename} 读取教材 JSON,调用 TextBookViewUtils.extract_version 提取版本。写入前按 type_book_subject、type_book_level 和 level=3、2、1 的顺序删除旧目录,避免外键约束影响。

请递归读取 JSON 中 result 节点,为每个教材册、单元、章节生成 TextBook 数据。字段包括 name、level、type_book_subject、type_book_level、enable、pcode、code,第一层节点额外写入 version。code 规则为学段编码 + 学科编码 + 每层两位序号。

初始化过程必须使用 transaction.atomic。接口成功后返回 version,并输出明确 msg。前端初始化弹窗需要接收 version 并更新状态标签。

清空保护

教材配置有全量清空入口,源码中通过 delete_all 实现。这个能力不是常规删除按钮,它会清空 TextBook 全表,所以后端必须校验 settings.SYSTEM_CLEAR_PASSWORD,前端必须通过 ElMessageBox.prompt 要求输入口令,不能直接暴露无保护的清空接口。
输入口令
后端校验
事务清空
返回数量
刷新页面

Codex 生成这部分时,要把清空保护当成后端能力,而不是只靠前端弹窗。接口缺少口令、口令错误、配置项为空都应该返回错误;口令正确时用事务删除并返回 deleted_rows,前端拿到成功结果后重新请求初始化菜单和教材树。

可以直接使用下面的Prompt进行清空保护设计

text 复制代码
请为教材配置模块实现全量清空保护功能。

后端接口为 /api/Config/TextBook/delete_all/,请求方法 POST,参数为 password。接口必须校验 password 是否存在,并读取 settings.SYSTEM_CLEAR_PASSWORD 进行比对。未配置口令或口令错误时返回错误响应,不能执行删除。

口令正确时,使用 transaction.atomic 清空 TextBook 数据,并返回 deleted_rows。接口 msg 需要说明教材配置已清空。

前端 InitTextBookDialog.vue 中的全量初始化教材版本按钮需要弹出口令输入框,口令不能为空。确认后调用 delete_all,成功后刷新 get_init_menu 和教材树列表,失败时展示后端错误信息。

请保证危险操作只通过该受保护接口执行,不能在前端绕过口令直接删除教材配置。

Codex开发标准

使用 Codex 开发教材配置模块,不能只给一句"做教材管理"。更稳的方式是用需求边界、PDD、SOP、接口权限规则和验收标准约束它,让 Codex 先读取 Config 模块上下文,再按后端、前端和扩展能力分阶段改代码。
验收交付
Codex开发
模块设计
输入约束
需求边界
PDD设计
SOP目录规范
接口与权限规则
后端设计
前端设计
扩展能力
读取上下文
生成后端代码
生成前端代码
补齐初始化逻辑
功能自检
PDD验收
问题修复
模块交付

SOP 标准

SOP 用来约束教材配置的目录、文件职责和开发顺序。当前模块已经有清晰的前后端落点,Codex 需要沿用这些路径补齐功能,不应另建一套教材管理目录。

text 复制代码
ManageBak-ExamEdu/
├── server_backend/
│   └── modules/
│       └── Config/
│           ├── models.py
│           ├── urls.py
│           ├── utils.py
│           └── views_app/
│               ├── TextBook.py
│               └── bak_data/
│                   └── textbook/
│                       ├── 普通高中/
│                       ├── 普通初中/
│                       └── 职业教育编程/
├── server_vue3/
│   └── src/
│       └── views/
│           └── modules/
│               └── Config/
│                   └── TextBook/
│                       ├── index.vue
│                       ├── api.ts
│                       ├── crud.tsx
│                       └── components/
│                           └── InitTextBookDialog.vue
└── docs/
    └── modules/
        └── config-textbook/
            ├── pdd.md
            ├── api.md
            ├── test-cases.md
            └── codex-sop.md
开发阶段 Codex 执行目标 输出结果
模块设计 明确教材配置的树形目录、初始化菜单和清空保护 pdd.md
目录规划 沿用 Config/TextBook 前后端目录 codex-sop.md
后端实现 补齐模型、视图、筛选、自定义 action、路由 后端模块代码
前端实现 补齐树表、接口封装、初始化弹窗、权限按钮 前端页面代码
数据联动 打通根节点查询、懒加载、初始化状态和列表刷新 联动逻辑代码
功能补齐 完成教材初始化和清空保护 初始化与保护代码
验收修复 按 PDD 检查接口、页面、状态回显和危险操作 验收记录与修复提交

可以直接使用下面的Prompt进行SOP撰写

text 复制代码
请按照教育管理系统模块开发 SOP,从零实现或补齐配置中心的教材配置模块。

开发前先输出目录结构,不要直接写代码。目录必须贴合当前项目:后端放在 server_backend/modules/Config/,前端放在 server_vue3/src/views/modules/Config/TextBook/,文档放在 docs/modules/config-textbook/。

请先生成 docs/modules/config-textbook/pdd.md、api.md、test-cases.md 和 codex-sop.md。文档需要明确 TextBook 模型字段、教材树列表、get_init_menu、update_subject_book、delete_all、树形懒加载、初始化弹窗、权限按钮和验收规则。

文档确认后,再根据 SOP 生成或补齐后端模型、序列化、接口视图、路由注册、筛选查询、权限控制、前端页面、接口封装、FastCrud 树表和 InitTextBookDialog。

实现过程中不得新增代码里不存在的 LLM、OCR、审批、统计、导入导出功能。只实现教材配置真实需要的树形目录、教材初始化、数据联动和清空保护。

PDD 标准

PDD 是教材配置的设计与验收文档,用来约束 Codex 输出是否符合真实业务。对这个模块来说,验收不能只看列表能不能打开,还要检查教材 JSON 是否能转成树、初始化状态是否回显、清空保护是否在后端生效。

验收维度 验收标准 不通过表现
业务目标 能维护配置中心教材目录,并支撑后续教案与 APP 绑定 只生成普通教材名称列表
页面结构 包含教材树表、初始化教材弹窗、学段 tabs、学科卡片 初始化入口缺失或状态不可见
数据模型 TextBook 字段覆盖 nameversioncodeleveltype_book_subjecttype_book_levelenablepcode 字段与后端模型不一致
接口规则 /api/Config/TextBook/get_init_menuupdate_subject_bookdelete_all 可用 前端按钮存在但接口缺失
权限控制 初始化按钮有 Update 权限约束,清空接口有口令校验 仅前端确认,后端可直接清空
测试用例 覆盖根节点查询、子节点懒加载、单学科初始化、口令错误、清空成功 只有页面截图,没有可执行验收路径
数据联动 初始化成功后菜单状态、版本标签和教材树同步刷新 初始化成功但页面仍显示未初始化
教材初始化 内置 JSON 能按层级写入 TextBook,同学段同学科旧数据会清理 重复初始化产生脏数据
清空保护 口令缺失或错误不删除,口令正确返回 deleted_rows 危险操作无后端保护

可以直接使用下面的Prompt进行PDD 验收

text 复制代码
请根据 docs/modules/config-textbook/pdd.md 对教材配置模块进行 PDD 验收。

验收范围包括 server_backend/modules/Config/models.py、server_backend/modules/Config/views_app/TextBook.py、server_backend/modules/Config/utils.py、server_backend/modules/Config/urls.py,以及 server_vue3/src/views/modules/Config/TextBook/index.vue、api.ts、crud.tsx、components/InitTextBookDialog.vue。

请检查 TextBook 字段是否完整,教材树列表和懒加载是否可用,get_init_menu 是否返回 initialized、version、chapter_initialized,update_subject_book 是否按 subject、level、filename 读取内置 JSON 并事务写入教材树,delete_all 是否使用 SYSTEM_CLEAR_PASSWORD 做后端口令校验。

请检查前端是否包含 FastCrud 树表、初始化教材弹窗、学段 tabs、学科卡片、教材文件选择、初始化状态标签、全量清空口令确认、Update 权限按钮和初始化后刷新逻辑。

请输出验收结果表,标记通过、未通过和需要修复的文件位置。不要只给结论,需要指出具体问题、影响范围和修复建议。

总结

教材配置模块的价值不在于维护几条教材名称,而在于把学段、学科、版本、教材册、单元和章节沉淀成教育管理系统可复用的目录底座。它会影响教案主体、APP 绑定教程和课程文档任务,因此更接近资源配置闭环模块,而不是普通 CRUD 页面。

使用 Codex 开发这类模块时,PDD 要定义教材树、初始化接口、清空保护和验收标准,SOP 要约束 Config/TextBook 的目录结构和开发顺序,Prompt 要把页面、模型、接口、权限和真实扩展能力分阶段交给 Codex 实现。

相关推荐
Mr数据杨1 小时前
【Codex】用APP绑定教程模块规范移动端接入指引
java·前端·javascript·django·codex·项目开发
AIGC大时代2 小时前
AI 服务器拉动半导体周期:HBM、DRAM 和消费电子不是同一条曲线
科技·ai·科普·codex·aiwritepaper
阿豪只会阿巴15 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html
HashFlag20 小时前
Codex配置Skill
windows·ai·mac·codex
Mr数据杨21 小时前
【Codex】用PPT文案额外描述优化课件生成细节
java·javascript·django·powerpoint·codex·项目开发
Mr.朱鹏1 天前
5.LangChain零基础速通-LCEL链式调用
python·langchain·django·大模型·llm·virtualenv
斯班奇的好朋友阿法法1 天前
IP白名单 + 预共享密钥跳转服务
django
万事大吉CC1 天前
【6】深入剖析 Django 之 MTV:数据渲染、请求处理与类视图
python·django·sqlite
Mr数据杨1 天前
【Codex】用题库审核中心规范试题质量审核流程
django·codex·项目开发