feat(exam): 实现考试阶段单词判卷与学生水平智能诊断
- 新增ActionType枚举定义系统动作类型 - 新增DiagnosisResult和ZoneStats数据模型支持诊断结果及区域统计 - 优化ExamWordsJudgeServiceImpl判卷逻辑,支持识别图片、更新考试判卷结果 - 基于分区词汇掌握情况,实现学生当前水平年级的智能判定 - 实现基于多分区准确率的升级、降级、复习和触发重测等动作建议 - 更新学生实际年级actualGradeId并展示在学生详情页面 - 修正ExamWordsConstant年级常量及年级名称映射方法 - 优化前端生成试题对年级和难度的校验逻辑,简化参数传递 - 修改服务端端口及API代理配置,保持一致性 - 调整相关数据库Mapper,支持批量查询和更新实际年级字段 - 修改错误信息字段命名,统一为msg - 增删改代码注释与日志,提升容错性和可读性
This commit is contained in:
@@ -2,18 +2,6 @@
|
||||
<el-dialog v-model="visible" title="生成试题" width="520px" :close-on-click-modal="false">
|
||||
<div class="space-y-4" v-loading="loading">
|
||||
<el-form label-width="80px">
|
||||
<el-form-item label="年级">
|
||||
<el-select v-model="gradeId" placeholder="请选择年级" style="width: 240px">
|
||||
<el-option v-for="g in gradeOptions" :key="g.id" :label="g.title" :value="g.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="难度">
|
||||
<el-select v-model="level" placeholder="请选择难度" style="width: 240px">
|
||||
<el-option :label="'一级'" :value="1" />
|
||||
<el-option :label="'二级'" :value="2" />
|
||||
<el-option :label="'三级'" :value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="type" placeholder="请选择类型" style="width: 240px">
|
||||
<el-option :label="'摸底'" :value="1" />
|
||||
@@ -28,7 +16,7 @@
|
||||
<template #footer>
|
||||
<div class="flex justify-end gap-2">
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" :disabled="!gradeId || !level || !type" @click="handleGenerate">生成并下载</el-button>
|
||||
<el-button type="primary" :disabled="!type" @click="handleGenerate">生成并下载</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -71,7 +59,7 @@ async function fetchGrades() {
|
||||
}
|
||||
|
||||
async function handleGenerate() {
|
||||
if (!gradeId.value || !level.value || !type.value || props.studentIds.length === 0) return
|
||||
if (!type.value) return
|
||||
await generateExamWords({
|
||||
gradeId: Number(gradeId.value),
|
||||
level: Number(level.value),
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
<el-descriptions-item label="姓名">{{ detail.name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="班级">{{ detail.className }}</el-descriptions-item>
|
||||
<el-descriptions-item label="年级">{{ detail.gradeName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学生实际水平年级">{{ detail.actualGrade }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</template>
|
||||
<template v-else>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startDate" label="开始时间" min-width="160" />
|
||||
<el-table-column prop="errorMsg" label="错误信息" min-width="160" />
|
||||
<el-table-column prop="msg" label="判卷结算" min-width="160" />
|
||||
</el-table>
|
||||
<div class="mt-4 flex justify-end">
|
||||
<el-pagination
|
||||
|
||||
@@ -26,7 +26,7 @@ export default defineConfig({
|
||||
server: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:8080',
|
||||
target: 'http://localhost:8081',
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api/, ''),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user