feat(big-question): 综合大题 Excel 模板下载 + 批量导入(R73)
新增 GET /api/admin/big-questions/:group/template —— 生成自解释模板: 数据 sheet 排第 1(导入侧按 SheetNames[0] 解析,是承重契约)+「填写说明」sheet, 含列名含义/状态建议/常见被拒原因,让测试人员下载即会用,不依赖外部文档。 新增 POST /api/admin/big-questions/:group/import-excel —— 逐行调用 service.bigQuestion.createQuestion,标题长度/三小问/分值/泄题检测(detectAnswerLeak) 全部自动继承,与手工录入同一入口同一校验;批量导入绝不成为绕过防呆的后门。 组别以 URL :group 为准,忽略表格里的组别列;同组内标题重复即跳过并报错; 状态缺省 0(停用),批量录入的题未经人工校对不直接进抽题池。 客观题模板 buildQuestionTemplate 同步加「填写说明」sheet:数据 sheet 仍排第 1、 原 8 列不变,故 importQuestionsFromExcel 的 SheetNames[0] 解析不受影响(已离线验证)。 路由顺序硬约束:含具体段的 template / import-excel 必须排在通配段 /:id 之前。
This commit is contained in:
@@ -151,6 +151,10 @@ module.exports = app => {
|
||||
// `GET /:group/:id`,`export` 就会被当作 :id 吞掉(实测 2026-09-23 复核时
|
||||
// 本行曾被放在 :group/:id 之后,当时因 :group/:id 仅注册 PUT/DELETE 而未暴露问题)
|
||||
router.get('/api/admin/big-questions/:group/export', adminAuth, controller.admin.exportBigQuestions);
|
||||
// ⚠️ 注册顺序是硬约束:Egg 按注册序匹配,下面两条含**具体段**(template / import-excel),
|
||||
// 必须排在通配段 `/:id` 之前,否则会被它抢走(GET .../template → id='template')。
|
||||
router.get('/api/admin/big-questions/:group/template', adminAuth, controller.admin.downloadBigQuestionTemplate);
|
||||
router.post('/api/admin/big-questions/:group/import-excel', adminAuth, controller.admin.importBigQuestionsExcel);
|
||||
router.put('/api/admin/big-questions/:group/:id', adminAuth, controller.admin.updateBigQuestion);
|
||||
router.delete('/api/admin/big-questions/:group/:id', adminAuth, controller.admin.deleteBigQuestion);
|
||||
router.get('/api/admin/big-answers/:group', adminAuth, controller.admin.getBigAnswers);
|
||||
|
||||
Reference in New Issue
Block a user