|
@@ -5,12 +5,12 @@
|
|
|
<div class="nav-container">
|
|
<div class="nav-container">
|
|
|
<!-- 左侧:返回按钮 + 班级选择 -->
|
|
<!-- 左侧:返回按钮 + 班级选择 -->
|
|
|
<div class="nav-left">
|
|
<div class="nav-left">
|
|
|
- <button class="nav-back-btn" type="button" aria-label="返回" @click="handleBack">
|
|
|
|
|
|
|
+ <button class="nav-back-btn" type="button" :aria-label="lang.dbBack" @click="handleBack">
|
|
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
|
|
<path d="M15 18l-6-6 6-6" />
|
|
<path d="M15 18l-6-6 6-6" />
|
|
|
</svg>
|
|
</svg>
|
|
|
</button>
|
|
</button>
|
|
|
- <span class="nav-title">班级</span>
|
|
|
|
|
|
|
+ <span class="nav-title">{{ lang.dbClass }}</span>
|
|
|
<el-select
|
|
<el-select
|
|
|
v-model="selectedClass"
|
|
v-model="selectedClass"
|
|
|
size="mini"
|
|
size="mini"
|
|
@@ -28,12 +28,12 @@
|
|
|
|
|
|
|
|
<!-- 右侧:操作按钮 -->
|
|
<!-- 右侧:操作按钮 -->
|
|
|
<div class="nav-right">
|
|
<div class="nav-right">
|
|
|
- <button type="button" class="nav-btn nav-btn-report" @click="handleStudentReport" v-show="false">学生报告</button>
|
|
|
|
|
|
|
+ <button type="button" class="nav-btn nav-btn-report" @click="handleStudentReport" v-show="false">{{ lang.dbStudentReport }}</button>
|
|
|
<button type="button" class="nav-btn nav-btn-export" @click="handleExport">
|
|
<button type="button" class="nav-btn nav-btn-export" @click="handleExport">
|
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
|
|
<path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3" />
|
|
<path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3" />
|
|
|
</svg>
|
|
</svg>
|
|
|
- <span>导出</span>
|
|
|
|
|
|
|
+ <span>{{ lang.dbExport }}</span>
|
|
|
</button>
|
|
</button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -45,7 +45,7 @@
|
|
|
<div class="overview-info">
|
|
<div class="overview-info">
|
|
|
<div class="section-title-row">
|
|
<div class="section-title-row">
|
|
|
<div class="section-accent"></div>
|
|
<div class="section-accent"></div>
|
|
|
- <h2 class="section-heading">课程概况</h2>
|
|
|
|
|
|
|
+ <h2 class="section-heading">{{ lang.dbCourseOverview }}</h2>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="course-info-block">
|
|
<div class="course-info-block">
|
|
|
<h1 class="course-name">{{ courseDetail.title }}</h1>
|
|
<h1 class="course-name">{{ courseDetail.title }}</h1>
|
|
@@ -55,14 +55,14 @@
|
|
|
<path d="M22 10L12 5 2 10l10 5 10-5z" />
|
|
<path d="M22 10L12 5 2 10l10 5 10-5z" />
|
|
|
<path d="M6 12v5c0 1 2.5 3 6 3s6-2 6-3v-5" />
|
|
<path d="M6 12v5c0 1 2.5 3 6 3s6-2 6-3v-5" />
|
|
|
</svg>
|
|
</svg>
|
|
|
- <span class="meta-label">年级:</span>{{ grade }}
|
|
|
|
|
|
|
+ <span class="meta-label">{{ lang.dbGrade }}</span>{{ grade }}
|
|
|
</div>
|
|
</div>
|
|
|
<span class="meta-divider">|</span>
|
|
<span class="meta-divider">|</span>
|
|
|
<div class="course-meta-item" v-if="subject">
|
|
<div class="course-meta-item" v-if="subject">
|
|
|
<svg class="meta-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
<svg class="meta-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
|
<path d="M4 19.5A2.5 2.5 0 016.5 17H20M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z" />
|
|
<path d="M4 19.5A2.5 2.5 0 016.5 17H20M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z" />
|
|
|
</svg>
|
|
</svg>
|
|
|
- <span class="meta-label">学科:</span>{{ subject }}
|
|
|
|
|
|
|
+ <span class="meta-label">{{ lang.dbSubject }}</span>{{ subject }}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="course-extra-row">
|
|
<div class="course-extra-row">
|
|
@@ -70,14 +70,14 @@
|
|
|
<svg class="extra-icon" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
<svg class="extra-icon" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
|
<path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75M13 8a4 4 0 11-8 0 4 4 0 018 0z" />
|
|
<path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75M13 8a4 4 0 11-8 0 4 4 0 018 0z" />
|
|
|
</svg>
|
|
</svg>
|
|
|
- <span>班级: {{ getClassClassName }}</span>
|
|
|
|
|
|
|
+ <span>{{ lang.dbClassLabel }}{{ getClassClassName }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="course-extra-item">
|
|
<div class="course-extra-item">
|
|
|
<svg class="extra-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
<svg class="extra-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
|
<circle cx="12" cy="12" r="10" />
|
|
<circle cx="12" cy="12" r="10" />
|
|
|
<path d="M12 6v6l4 2" />
|
|
<path d="M12 6v6l4 2" />
|
|
|
</svg>
|
|
</svg>
|
|
|
- <span>上课时间: {{ classstime }}</span>
|
|
|
|
|
|
|
+ <span>{{ lang.dbClassTime }}{{ classstime }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -104,20 +104,20 @@
|
|
|
<path d="M2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2zM22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z" />
|
|
<path d="M2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2zM22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z" />
|
|
|
</svg>
|
|
</svg>
|
|
|
</div>
|
|
</div>
|
|
|
- <h2 class="card-title">课程概述</h2>
|
|
|
|
|
|
|
+ <h2 class="card-title">{{ lang.dbCourseSummary }}</h2>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-body">
|
|
<div class="card-body">
|
|
|
<div class="paragraph">
|
|
<div class="paragraph">
|
|
|
- <span class="strong">课程主题:</span>{{ courseSummary.theme }}
|
|
|
|
|
|
|
+ <span class="strong">{{ lang.dbCourseTheme }}</span>{{ courseSummary.theme }}
|
|
|
</div>
|
|
</div>
|
|
|
<div class="paragraph">
|
|
<div class="paragraph">
|
|
|
- <span class="strong">教学目标:</span>
|
|
|
|
|
|
|
+ <span class="strong">{{ lang.dbTeachingGoals }}</span>
|
|
|
<ul class="bullet-list">
|
|
<ul class="bullet-list">
|
|
|
<li v-for="(goal, i) in courseSummary.objectives" :key="i">{{ goal }}</li>
|
|
<li v-for="(goal, i) in courseSummary.objectives" :key="i">{{ goal }}</li>
|
|
|
</ul>
|
|
</ul>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="paragraph">
|
|
<div class="paragraph">
|
|
|
- <span class="strong">主要环节:</span>{{ courseSummary.segments }}
|
|
|
|
|
|
|
+ <span class="strong">{{ lang.dbMainSegments }}</span>{{ courseSummary.segments }}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -130,7 +130,7 @@
|
|
|
<path d="M12 2l1.8 6L20 9.8l-6 1.8L12 18l-1.8-6.4L4 9.8l6.2-1.8z" />
|
|
<path d="M12 2l1.8 6L20 9.8l-6 1.8L12 18l-1.8-6.4L4 9.8l6.2-1.8z" />
|
|
|
</svg>
|
|
</svg>
|
|
|
</div>
|
|
</div>
|
|
|
- <h2 class="card-title">AI 教学智能诊断报告</h2>
|
|
|
|
|
|
|
+ <h2 class="card-title">{{ lang.dbAiDiagnosis }}</h2>
|
|
|
</div>
|
|
</div>
|
|
|
<ul class="ai-report-list relative-z">
|
|
<ul class="ai-report-list relative-z">
|
|
|
<li v-for="(item, i) in aiReport" :key="i" class="ai-report-item">
|
|
<li v-for="(item, i) in aiReport" :key="i" class="ai-report-item">
|
|
@@ -156,7 +156,7 @@
|
|
|
<div class="task-card-header">
|
|
<div class="task-card-header">
|
|
|
<div class="section-title-row">
|
|
<div class="section-title-row">
|
|
|
<div class="section-accent"></div>
|
|
<div class="section-accent"></div>
|
|
|
- <h2 class="section-heading">任务概况明细</h2>
|
|
|
|
|
|
|
+ <h2 class="section-heading">{{ lang.dbTaskOverview }}</h2>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="table-scroll">
|
|
<div class="table-scroll">
|
|
@@ -164,13 +164,13 @@
|
|
|
<thead>
|
|
<thead>
|
|
|
<tr>
|
|
<tr>
|
|
|
<th class="th-num">#</th>
|
|
<th class="th-num">#</th>
|
|
|
- <th>任务与工具</th>
|
|
|
|
|
- <th class="th-center">所在页码</th>
|
|
|
|
|
- <th class="th-center">提交率</th>
|
|
|
|
|
- <th class="th-center">正确率</th>
|
|
|
|
|
- <th class="th-center">互动次数</th>
|
|
|
|
|
- <th class="th-center">平均用时</th>
|
|
|
|
|
- <th>AI 智能洞察</th>
|
|
|
|
|
|
|
+ <th>{{ lang.dbTaskAndTool }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbPage }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbSubmitRate }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbCorrectRate }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbInteractions }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbAvgTime }}</th>
|
|
|
|
|
+ <th>{{ lang.dbAiInsight }}</th>
|
|
|
</tr>
|
|
</tr>
|
|
|
</thead>
|
|
</thead>
|
|
|
<tbody>
|
|
<tbody>
|
|
@@ -191,7 +191,7 @@
|
|
|
>{{ task.accuracy }}</span>
|
|
>{{ task.accuracy }}</span>
|
|
|
<span v-else class="accuracy-dash">{{ task.accuracy }}</span>
|
|
<span v-else class="accuracy-dash">{{ task.accuracy }}</span>
|
|
|
</td>
|
|
</td>
|
|
|
- <td class="td-center td-bold-700">{{ task.interactions }}次</td>
|
|
|
|
|
|
|
+ <td class="td-center td-bold-700">{{ task.interactions }}{{ lang.dbTimes }}</td>
|
|
|
<td class="td-center td-medium">{{ task.avgTime }}</td>
|
|
<td class="td-center td-medium">{{ task.avgTime }}</td>
|
|
|
<td class="td-insight">
|
|
<td class="td-insight">
|
|
|
<div class="insight-text">
|
|
<div class="insight-text">
|
|
@@ -212,7 +212,7 @@
|
|
|
<div class="chart-card">
|
|
<div class="chart-card">
|
|
|
<div class="section-title-row">
|
|
<div class="section-title-row">
|
|
|
<div class="section-accent"></div>
|
|
<div class="section-accent"></div>
|
|
|
- <h3 class="section-heading">参与度分层</h3>
|
|
|
|
|
|
|
+ <h3 class="section-heading">{{ lang.dbParticipation }}</h3>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="chart-wrapper">
|
|
<div class="chart-wrapper">
|
|
|
<div ref="performanceChart" class="echart-canvas"></div>
|
|
<div ref="performanceChart" class="echart-canvas"></div>
|
|
@@ -224,11 +224,11 @@
|
|
|
<div class="student-table-header">
|
|
<div class="student-table-header">
|
|
|
<div class="section-title-row">
|
|
<div class="section-title-row">
|
|
|
<div class="section-accent"></div>
|
|
<div class="section-accent"></div>
|
|
|
- <h3 class="section-heading">学生详情矩阵</h3>
|
|
|
|
|
|
|
+ <h3 class="section-heading">{{ lang.dbStudentMatrix }}</h3>
|
|
|
</div>
|
|
</div>
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model="searchKeyword"
|
|
v-model="searchKeyword"
|
|
|
- placeholder="搜索学生..."
|
|
|
|
|
|
|
+ :placeholder="lang.dbSearchStudent"
|
|
|
size="small"
|
|
size="small"
|
|
|
class="search-input"
|
|
class="search-input"
|
|
|
clearable
|
|
clearable
|
|
@@ -246,15 +246,15 @@
|
|
|
<thead>
|
|
<thead>
|
|
|
<tr>
|
|
<tr>
|
|
|
<th class="th-num">#</th>
|
|
<th class="th-num">#</th>
|
|
|
- <th>姓名</th>
|
|
|
|
|
|
|
+ <th>{{ lang.dbName }}</th>
|
|
|
<th>
|
|
<th>
|
|
|
<div class="th-sortable">
|
|
<div class="th-sortable">
|
|
|
- 任务完成度
|
|
|
|
|
|
|
+ {{ lang.dbTaskCompletion }}
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
- <th class="th-center">综合正确率</th>
|
|
|
|
|
- <th class="th-center">AI对话轮次</th>
|
|
|
|
|
- <th class="th-center">点赞/被赞</th>
|
|
|
|
|
|
|
+ <th class="th-center">{{ lang.dbOverallCorrect }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbAiChatRounds }}</th>
|
|
|
|
|
+ <th class="th-center">{{ lang.dbLikes }}</th>
|
|
|
<!-- <th class="th-center">操作</th> -->
|
|
<!-- <th class="th-center">操作</th> -->
|
|
|
</tr>
|
|
</tr>
|
|
|
</thead>
|
|
</thead>
|
|
@@ -272,7 +272,7 @@
|
|
|
<svg width="10" height="10" viewBox="0 0 24 24" fill="currentColor">
|
|
<svg width="10" height="10" viewBox="0 0 24 24" fill="currentColor">
|
|
|
<path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z M12 9v4M12 17h.01" />
|
|
<path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z M12 9v4M12 17h.01" />
|
|
|
</svg>
|
|
</svg>
|
|
|
- 关注
|
|
|
|
|
|
|
+ {{ lang.dbFocus }}
|
|
|
</span>
|
|
</span>
|
|
|
</div>
|
|
</div>
|
|
|
</td>
|
|
</td>
|
|
@@ -285,7 +285,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</td>
|
|
</td>
|
|
|
<td :class="['td-center', student.attention ? 'td-correct-red' : 'td-extrabold']">{{ student.correctRate }}</td>
|
|
<td :class="['td-center', student.attention ? 'td-correct-red' : 'td-extrabold']">{{ student.correctRate }}</td>
|
|
|
- <td class="td-center td-bold-700">{{ student.aiRounds }} 轮</td>
|
|
|
|
|
|
|
+ <td class="td-center td-bold-700">{{ student.aiRounds }}{{ lang.dbRoundUnit }}</td>
|
|
|
<td class="td-center td-medium">{{ student.likes }}</td>
|
|
<td class="td-center td-medium">{{ student.likes }}</td>
|
|
|
<!-- <td class="td-center">
|
|
<!-- <td class="td-center">
|
|
|
<button class="report-btn" type="button" @click="handleStudentReportRow(student)">
|
|
<button class="report-btn" type="button" @click="handleStudentReportRow(student)">
|
|
@@ -299,7 +299,7 @@
|
|
|
</td> -->
|
|
</td> -->
|
|
|
</tr>
|
|
</tr>
|
|
|
<tr v-if="filteredStudents.length === 0">
|
|
<tr v-if="filteredStudents.length === 0">
|
|
|
- <td colspan="7" class="empty-row">无匹配学生</td>
|
|
|
|
|
|
|
+ <td colspan="7" class="empty-row">{{ lang.dbNoMatchStudent }}</td>
|
|
|
</tr>
|
|
</tr>
|
|
|
</tbody>
|
|
</tbody>
|
|
|
</table>
|
|
</table>
|
|
@@ -334,11 +334,11 @@ export default {
|
|
|
searchKeyword: '',
|
|
searchKeyword: '',
|
|
|
chartInstance: null,
|
|
chartInstance: null,
|
|
|
kpis: [
|
|
kpis: [
|
|
|
- { value: '0', suffix: '', label: '出勤率', sub: '(0/0人)', color: '#F97316' },
|
|
|
|
|
- { value: '0', suffix: '', label: '平均提交率', sub: '(0次提交)', color: '#10B981' },
|
|
|
|
|
- { value: '0', suffix: '', label: '平均正确率', sub: '(最高0%·最低0%)', color: '#10B981' },
|
|
|
|
|
- { value: '0', suffix: '轮', label: 'AI 轮次', sub: '(最多0·最少0)', color: '#3B82F6' },
|
|
|
|
|
- { value: '0', suffix: '', label: '总互动量', sub: '(总点赞数)', color: '#EC4899' }
|
|
|
|
|
|
|
+ { value: '0', suffix: '', label: this.lang.dbAttendance, sub: `(0/0${this.lang.dbPeopleUnit})`, color: '#F97316' },
|
|
|
|
|
+ { value: '0', suffix: '', label: this.lang.dbAvgSubmitRate, sub: `(0${this.lang.dbSubmitCountUnit})`, color: '#10B981' },
|
|
|
|
|
+ { value: '0', suffix: '', label: this.lang.dbAvgCorrectRate, sub: `(${this.lang.dbHighest}0%·${this.lang.dbLowest}0%)`, color: '#10B981' },
|
|
|
|
|
+ { value: '0', suffix: this.lang.dbRoundUnit, label: this.lang.dbAiRounds, sub: `(${this.lang.dbMax}0·${this.lang.dbMin}0)`, color: '#3B82F6' },
|
|
|
|
|
+ { value: '0', suffix: '', label: this.lang.dbTotalInteractions, sub: `(${this.lang.dbTotalLikes})`, color: '#EC4899' }
|
|
|
],
|
|
],
|
|
|
courseSummary: {
|
|
courseSummary: {
|
|
|
theme: '探索人工智能的起源、核心技术与未来趋势,建立对AI基础概念的准确认知。',
|
|
theme: '探索人工智能的起源、核心技术与未来趋势,建立对AI基础概念的准确认知。',
|
|
@@ -412,7 +412,7 @@ export default {
|
|
|
// { id: 5, name: '杨浩宇', attention: true, tasksDone: 7, tasksTotal: 7, correctRate: '76%', aiRounds: 7, likes: '2/1' }
|
|
// { id: 5, name: '杨浩宇', attention: true, tasksDone: 7, tasksTotal: 7, correctRate: '76%', aiRounds: 7, likes: '2/1' }
|
|
|
],
|
|
],
|
|
|
chartData: {
|
|
chartData: {
|
|
|
- labels: ['高频参与', '中等参与', '低频参与'],
|
|
|
|
|
|
|
+ labels: [this.lang.dbHighFreq, this.lang.dbMidFreq, this.lang.dbLowFreq],
|
|
|
values: [0, 0, 0],
|
|
values: [0, 0, 0],
|
|
|
colors: ['#10B981', '#60A5FA', '#F43F5E']
|
|
colors: ['#10B981', '#60A5FA', '#F43F5E']
|
|
|
},
|
|
},
|
|
@@ -425,15 +425,15 @@ export default {
|
|
|
works: [],
|
|
works: [],
|
|
|
likesArray: [],
|
|
likesArray: [],
|
|
|
taskTool: {
|
|
taskTool: {
|
|
|
- 45: '选择题',
|
|
|
|
|
- 15: '问答题',
|
|
|
|
|
- 73: 'h5网页',
|
|
|
|
|
- 72: '应用中心',
|
|
|
|
|
- 78: '投票',
|
|
|
|
|
- 79: '拍照',
|
|
|
|
|
- 831: 'Kwl表格',
|
|
|
|
|
- 832: '六顶思考帽',
|
|
|
|
|
- 84: '文件上传'
|
|
|
|
|
|
|
+ 45: this.lang.dbTool45,
|
|
|
|
|
+ 15: this.lang.dbTool15,
|
|
|
|
|
+ 73: this.lang.dbTool73,
|
|
|
|
|
+ 72: this.lang.dbTool72,
|
|
|
|
|
+ 78: this.lang.dbTool78,
|
|
|
|
|
+ 79: this.lang.dbTool79,
|
|
|
|
|
+ 831: this.lang.dbTool831,
|
|
|
|
|
+ 832: this.lang.dbTool832,
|
|
|
|
|
+ 84: this.lang.dbTool84
|
|
|
},
|
|
},
|
|
|
isAi: [45, 15, 72, 831, 832]
|
|
isAi: [45, 15, 72, 831, 832]
|
|
|
};
|
|
};
|
|
@@ -498,7 +498,7 @@ export default {
|
|
|
left: 'center',
|
|
left: 'center',
|
|
|
top: '55%',
|
|
top: '55%',
|
|
|
style: {
|
|
style: {
|
|
|
- text: '均参与度',
|
|
|
|
|
|
|
+ text: this.lang.dbAvgParticipation,
|
|
|
fontSize: 12,
|
|
fontSize: 12,
|
|
|
fill: '#9CA3AF',
|
|
fill: '#9CA3AF',
|
|
|
textAlign: 'center'
|
|
textAlign: 'center'
|
|
@@ -517,7 +517,7 @@ export default {
|
|
|
},
|
|
},
|
|
|
series: [
|
|
series: [
|
|
|
{
|
|
{
|
|
|
- name: '参与度分层',
|
|
|
|
|
|
|
+ name: this.lang.dbParticipation,
|
|
|
type: 'pie',
|
|
type: 'pie',
|
|
|
radius: ['58%', '75%'],
|
|
radius: ['58%', '75%'],
|
|
|
center: ['50%', '45%'],
|
|
center: ['50%', '45%'],
|
|
@@ -575,7 +575,7 @@ export default {
|
|
|
handleExport() {
|
|
handleExport() {
|
|
|
// 只截取主内容区域,不包含顶部导航栏
|
|
// 只截取主内容区域,不包含顶部导航栏
|
|
|
const el = this.$el.querySelector('.main-content') || this.$el;
|
|
const el = this.$el.querySelector('.main-content') || this.$el;
|
|
|
- this.$message.info('正在生成PDF,请稍候...');
|
|
|
|
|
|
|
+ this.$message.info(this.lang.dbGeneratingPdf);
|
|
|
try {
|
|
try {
|
|
|
const html2canvas = require('html2canvas');
|
|
const html2canvas = require('html2canvas');
|
|
|
const fn = html2canvas.default || html2canvas;
|
|
const fn = html2canvas.default || html2canvas;
|
|
@@ -615,17 +615,17 @@ export default {
|
|
|
format: [imgWidth / 2, imgHeight / 2]
|
|
format: [imgWidth / 2, imgHeight / 2]
|
|
|
});
|
|
});
|
|
|
pdf.addImage(imgData, 'PNG', 0, 0, imgWidth / 2, imgHeight / 2);
|
|
pdf.addImage(imgData, 'PNG', 0, 0, imgWidth / 2, imgHeight / 2);
|
|
|
- pdf.save('教学分析面板.pdf');
|
|
|
|
|
- this.$message.success('PDF已导出');
|
|
|
|
|
|
|
+ pdf.save(this.lang.dbPdfFilename + '.pdf');
|
|
|
|
|
+ this.$message.success(this.lang.dbExportSuccess);
|
|
|
}).catch((e) => {
|
|
}).catch((e) => {
|
|
|
saved.forEach(s => { s.el.style.overflow = s.overflow; s.el.style.overflowX = s.overflowX; s.el.style.overflowY = s.overflowY; s.el.style.maxHeight = s.maxHeight; });
|
|
saved.forEach(s => { s.el.style.overflow = s.overflow; s.el.style.overflowX = s.overflowX; s.el.style.overflowY = s.overflowY; s.el.style.maxHeight = s.maxHeight; });
|
|
|
console.log(e);
|
|
console.log(e);
|
|
|
- this.$message.error('导出失败');
|
|
|
|
|
|
|
+ this.$message.error(this.lang.dbExportFailed);
|
|
|
});
|
|
});
|
|
|
}, 100);
|
|
}, 100);
|
|
|
} catch(e) {
|
|
} catch(e) {
|
|
|
console.log(e);
|
|
console.log(e);
|
|
|
- this.$message.error('加载导出模块失败');
|
|
|
|
|
|
|
+ this.$message.error(this.lang.dbLoadModuleFailed);
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
handleStudentReportRow(row) {
|
|
handleStudentReportRow(row) {
|
|
@@ -653,7 +653,7 @@ export default {
|
|
|
const totalStudents = this.students.length || 1;
|
|
const totalStudents = this.students.length || 1;
|
|
|
const attendanceRate = attendanceCount / totalStudents;
|
|
const attendanceRate = attendanceCount / totalStudents;
|
|
|
this.kpis[0].value = Math.round(attendanceRate * 100) + '%';
|
|
this.kpis[0].value = Math.round(attendanceRate * 100) + '%';
|
|
|
- this.kpis[0].sub = `(${attendanceCount}/${this.students.length}人)`;
|
|
|
|
|
|
|
+ this.kpis[0].sub = `(${attendanceCount}/${this.students.length}${this.lang.dbPeopleUnit})`;
|
|
|
let tasks = []
|
|
let tasks = []
|
|
|
// 平均提交率
|
|
// 平均提交率
|
|
|
let pptSlides = this.pptJSON.slides || [];
|
|
let pptSlides = this.pptJSON.slides || [];
|
|
@@ -715,7 +715,7 @@ export default {
|
|
|
const totalWorks = this.works.length;
|
|
const totalWorks = this.works.length;
|
|
|
const submitRate = totalExpectedSubmissions > 0 ? Math.round((totalWorks / totalExpectedSubmissions) * 100) : 0;
|
|
const submitRate = totalExpectedSubmissions > 0 ? Math.round((totalWorks / totalExpectedSubmissions) * 100) : 0;
|
|
|
this.kpis[1].value = submitRate + '%';
|
|
this.kpis[1].value = submitRate + '%';
|
|
|
- this.kpis[1].sub = `(${totalWorks}次提交)`;
|
|
|
|
|
|
|
+ this.kpis[1].sub = `(${totalWorks}${this.lang.dbSubmitCountUnit})`;
|
|
|
|
|
|
|
|
// AI 轮次
|
|
// AI 轮次
|
|
|
this.kpis[3].value = aiLun.length;
|
|
this.kpis[3].value = aiLun.length;
|
|
@@ -734,12 +734,12 @@ export default {
|
|
|
aiMax = Math.max(...roundsList);
|
|
aiMax = Math.max(...roundsList);
|
|
|
aiMin = Math.min(...roundsList);
|
|
aiMin = Math.min(...roundsList);
|
|
|
}
|
|
}
|
|
|
- this.kpis[3].sub = `(最多${aiMax}轮/最少${aiMin}轮)`;
|
|
|
|
|
|
|
+ this.kpis[3].sub = `(${this.lang.dbMax}${aiMax}${this.lang.dbRoundUnit}/${this.lang.dbMin}${aiMin}${this.lang.dbRoundUnit})`;
|
|
|
|
|
|
|
|
// 总点赞数
|
|
// 总点赞数
|
|
|
const totalLikes = this.likesArray.length;
|
|
const totalLikes = this.likesArray.length;
|
|
|
this.kpis[4].value = totalLikes;
|
|
this.kpis[4].value = totalLikes;
|
|
|
- this.kpis[4].sub = `(${totalLikes}人点赞)`;
|
|
|
|
|
|
|
+ this.kpis[4].sub = `(${totalLikes}${this.lang.dbLikeCountUnit})`;
|
|
|
|
|
|
|
|
// 任务概况统计
|
|
// 任务概况统计
|
|
|
console.log(tasks);
|
|
console.log(tasks);
|
|
@@ -835,7 +835,7 @@ export default {
|
|
|
const studentRates = Object.values(studentAccuracyMap).map(s =>
|
|
const studentRates = Object.values(studentAccuracyMap).map(s =>
|
|
|
s.total > 0 ? Math.round(s.correct / s.total * 100) : 0
|
|
s.total > 0 ? Math.round(s.correct / s.total * 100) : 0
|
|
|
);
|
|
);
|
|
|
- this.kpis[2].sub = `(最高${Math.max(...studentRates)}%·最低${Math.min(...studentRates)}%)`;
|
|
|
|
|
|
|
+ this.kpis[2].sub = `(${this.lang.dbHighest}${Math.max(...studentRates)}%·${this.lang.dbLowest}${Math.min(...studentRates)}%)`;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 构建学生详情数据
|
|
// 构建学生详情数据
|
|
@@ -868,7 +868,7 @@ export default {
|
|
|
return {
|
|
return {
|
|
|
...s,
|
|
...s,
|
|
|
id: uid,
|
|
id: uid,
|
|
|
- name: s.name || s.username || '未知',
|
|
|
|
|
|
|
+ name: s.name || s.username || this.lang.dbUnknown,
|
|
|
tasksDone: studentTasks.size,
|
|
tasksDone: studentTasks.size,
|
|
|
tasksTotal: totalTasks,
|
|
tasksTotal: totalTasks,
|
|
|
correctRate: correctRate,
|
|
correctRate: correctRate,
|