先翻到Codex项目根目录下的SOP标准文档,确认“教学中心统计”模块是否已明确圈定三个统计对象:教案主体(LessonPlanMaster)、整合教案(LessonPlan)、教学动画(TeachingAnimation)。这三个对象是后续所有图表的基石,缺少其中任何一个,前端的矩阵树图就无法正确渲染对应的资源覆盖状态。
同样需要验证的是_teaching_center_detail接口的返回结构,如果内部缺少这三组detail字段,前端将无从获知哪些资源已被覆盖。执行codex check --module teaching,确认当前分支是否已注册菜单入口/system/MyWork/TeachingCenterStats——这一步遗漏会导致前端路由直接返回404,所有图表组件都无法加载。

生成带缓存与权限控制的统计组件
在终端执行codex generate stats:teaching --with-cache --with-permission。该命令会自动生成教学统计Hero区、教材分类Tab导航、学科结构树图、年级学科数量矩阵表格,同时注入角色可见性逻辑——只有teaching_admin和content_editor两个角色拥有访问该页面的权限。
【必须执行】生成后立即运行make migrate同步数据库缓存表stats_cache_teaching。若跳过此步骤,前端调用SiteStatsViewSet.build_application_section_data("teaching")时只会返回空数据,图表区域将一片空白。
Excel端配置实时数据联动
方法一:使用Excel内置数据连接(适用于中小型部署场景)
1. 打开Excel → 【数据】→【获取外部数据】→【从SQL Server】→输入Codex部署库地址(例如codex-prod.internal:1433)及只读账号。
2. 在查询编辑器中粘贴如下SQL,字段名必须与Codex统计口径完全一致:
SELECT category AS textbook_category, grade, subject, COUNT(*) AS count FROM lessonplanmaster GROUP BY category, grade, subject;
3. 将结果加载到工作表,然后选中结果区域 → 【插入】→【透视图】→把textbook_category拖入筛选器,grade和subject拖入行,count拖入值;右键透视图→【刷新数据】即可拉取到最新统计快照。
方法二:使用简道云零代码平台桥接(适用于没有DBA权限的场景)
登录简道云 → 新建应用 → 添加「数据源」→选择「MySQL」→填写Codex生产库连接信息 → 启用自动同步(间隔设为5分钟)→ 拖拽「仪表盘」组件 → 绑定同步过来的lessonplanmaster表 → 插入「矩阵树图」组件,字段映射为category/grade/subject/count。
注意:简道云同步要求Codex数据库开放外网白名单IP,且用户密码不能包含特殊字符@或/,否则会连接报错。
前端矩阵图表绑定动态数据源
找到Codex前端src/views/teaching/TeachingCenterStats.vue文件。
定位到setup()函数内const matrixData = ref([])那一行。
将原来写死的mock数据替换为真实API调用:
const { data } = await useAsyncData('teaching-matrix', () => $fetch('/api/v1/stats/teaching/matrix'));
matrixData.value = data.value || [];
同时确认/api/v1/stats/teaching/matrix接口已在后端SiteStatsViewSet中实现,返回结构必须为嵌套二维数组,格式如下:[[{category:"小学语文",grade:"三年级",subject:"阅读",count:12}],...]。格式不对齐的话,前端矩阵树图只能渲染成空白格子。
