|
|
@@ -3,38 +3,35 @@
|
|
|
<div class="page-container examDetails-addPage">
|
|
|
<!-- 左侧面板 -->
|
|
|
<div class="left-panel">
|
|
|
- <div class="exam-title">{{ examInfo.title }}</div>
|
|
|
- <div class="exam-subtitle">总{{ examInfo.totalCount }}题 / 共{{ examInfo.totalScore }}分</div>
|
|
|
-
|
|
|
- <div class="exam-name-box">{{ examInfo.name }}</div>
|
|
|
-
|
|
|
+ <div class="exam-title">{{ examInfo.examTypeName }}</div>
|
|
|
+ <div class="exam-subtitle">总{{ examInfo.questionCount }}题 / 共{{ examInfo.totalScore }}分</div>
|
|
|
+ <div class="exam-name-box">{{ examInfo.examName }}</div>
|
|
|
<div class="exam-info-box">
|
|
|
<div class="info-item"><span class="label">试卷总分:</span>{{ examInfo.totalScore }}分</div>
|
|
|
<div class="info-item"><span class="label">及格分数:</span>{{ examInfo.passScore }}分</div>
|
|
|
- <div class="info-item"><span class="label">我的得分:</span>{{ examInfo.myScore }}分</div>
|
|
|
- <div class="info-item"><span class="label">考试用时:</span>{{ examInfo.duration }}</div>
|
|
|
+ <div class="info-item"><span class="label">我的得分:</span>{{ examInfo.earnedScore }}分</div>
|
|
|
+ <div class="info-item"><span class="label">考试用时:</span>{{ examInfo.durationText }}</div>
|
|
|
<div class="info-item">
|
|
|
<span class="label">考试结果:</span>
|
|
|
- <span :class="examInfo.passed ? 'result-pass' : 'result-fail'">
|
|
|
- {{ examInfo.passed ? '通过' : '无效' }}
|
|
|
+ <span :class="examInfo.passStatus == 1 ? 'result-pass' : 'result-fail'">
|
|
|
+ {{ examInfo.passStatus == 1?'通过':'无效' }}
|
|
|
</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<!-- 题目导航 -->
|
|
|
- <div v-for="group in questionGroups" :key="group.type" class="question-group">
|
|
|
+ <div v-for="group in questionTypeGroups" :key="group.type" class="question-group">
|
|
|
<div class="group-header">
|
|
|
- <span class="group-title">{{ group.typeName }}</span>
|
|
|
- <span class="group-count">{{ group.questions.length }}题 / 共{{ group.totalScore }}分</span>
|
|
|
+ <span class="group-title">{{ group.questionTypeName }}</span>
|
|
|
+ <span class="group-count">{{ group.questionCount }}题 / 共{{ group.totalScore }}分</span>
|
|
|
</div>
|
|
|
<div class="question-nums">
|
|
|
<div
|
|
|
- v-for="q in group.questions"
|
|
|
- :key="q.index"
|
|
|
- :class="['num-item', getNumClass(q), currentIndex === q.index ? 'num-active' : '']"
|
|
|
- @click="selectQuestion(q.index)"
|
|
|
- >
|
|
|
- {{ q.index }}
|
|
|
+ v-for="(item,index) in group.questions"
|
|
|
+ :key="item.questionNo"
|
|
|
+ :class="['num-item', getNumClass(item), currentIndex === item.questionNo ? 'num-active' : '']"
|
|
|
+ @click="selectQuestion(item)">
|
|
|
+ {{ item.questionNo }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -45,75 +42,40 @@
|
|
|
<div class="question-card">
|
|
|
<!-- 题目头部 -->
|
|
|
<div class="question-header">
|
|
|
- <div class="question-index-box">{{ currentQuestion.index }}</div>
|
|
|
- <div class="question-type-score">{{ currentQuestion.typeName }}({{ currentQuestion.score }}分)</div>
|
|
|
+ <div class="question-index-box">{{ currentQuestion.questionNo }}</div>
|
|
|
+ <div class="question-type-score">{{ currentQuestion.questionTypeName }}({{ currentQuestion.questionScore }}分)</div>
|
|
|
<div class="question-stars">
|
|
|
<i
|
|
|
v-for="s in 4"
|
|
|
:key="s"
|
|
|
- :class="['star-icon', s <= currentQuestion.starLevel ? 'star-active' : 'star-empty']"
|
|
|
+ :class="['star-icon', s <= currentQuestion.difficulty ? 'star-active' : 'star-empty']"
|
|
|
>★</i>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
<!-- 题目内容(富文本) -->
|
|
|
- <div class="question-content" v-html="currentQuestion.content"></div>
|
|
|
-
|
|
|
- <!-- 单选题选项 -->
|
|
|
- <div v-if="currentQuestion.type === 'single'" class="options-list">
|
|
|
- <div
|
|
|
- v-for="opt in currentQuestion.options"
|
|
|
- :key="opt.key"
|
|
|
- :class="['option-item', isSelectedOption(currentQuestion, opt.key) ? 'option-selected' : '']"
|
|
|
- >
|
|
|
- <span class="option-radio">
|
|
|
- <i v-if="isSelectedOption(currentQuestion, opt.key)" class="el-icon-check radio-checked"></i>
|
|
|
- <i v-else class="radio-empty"></i>
|
|
|
- </span>
|
|
|
- <span class="option-key">{{ opt.key }}</span>
|
|
|
- <span class="option-text" v-html="opt.text"></span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 多选题选项 -->
|
|
|
- <div v-if="currentQuestion.type === 'multiple'" class="options-list">
|
|
|
- <div
|
|
|
- v-for="opt in currentQuestion.options"
|
|
|
- :key="opt.key"
|
|
|
- :class="['option-item', isSelectedOption(currentQuestion, opt.key) ? 'option-selected' : '']"
|
|
|
- >
|
|
|
- <span class="option-checkbox">
|
|
|
- <el-checkbox :value="isSelectedOption(currentQuestion, opt.key)" disabled></el-checkbox>
|
|
|
- </span>
|
|
|
- <span class="option-key">{{ opt.key }}</span>
|
|
|
- <span class="option-text" v-html="opt.text"></span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 判断题选项 -->
|
|
|
- <div v-if="currentQuestion.type === 'judge'" class="options-list">
|
|
|
- <div
|
|
|
- v-for="opt in judgeOptions"
|
|
|
- :key="opt.key"
|
|
|
- :class="['option-item', isSelectedOption(currentQuestion, opt.key) ? 'option-selected' : '']"
|
|
|
- >
|
|
|
+ <div class="question-content" v-html="currentQuestion.questionContent"></div>
|
|
|
+ <!-- 单选题选项/多选题选项 -->
|
|
|
+ <div class="options-list">
|
|
|
+ <div v-for="(minItem,minIndex) in currentQuestion.options"
|
|
|
+ :key="minIndex" class="option-item"
|
|
|
+ :class="isValueInList(minItem.optionLabel,currentQuestion.correctAnswerTags)?'option-selected':''">
|
|
|
<span class="option-radio">
|
|
|
- <i v-if="isSelectedOption(currentQuestion, opt.key)" class="el-icon-check radio-checked"></i>
|
|
|
+ <i v-if="isValueInList(minItem.optionLabel,currentQuestion.correctAnswerTags)" class="el-icon-check radio-checked"></i>
|
|
|
<i v-else class="radio-empty"></i>
|
|
|
</span>
|
|
|
- <span class="option-key">{{ opt.key }}</span>
|
|
|
- <span class="option-text">{{ opt.text }}</span>
|
|
|
+ <span class="option-key" v-if="currentQuestion.questionType == '1' || currentQuestion.questionType == '2'">{{ minItem.optionLabel }}</span>
|
|
|
+ <span class="option-text" v-html="minItem.optionContent"></span>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
<!-- 答题结果 -->
|
|
|
<div class="answer-result-box">
|
|
|
<div class="answer-status">
|
|
|
- <span v-if="currentQuestion.isCorrect" class="status-correct">✅ 回答正确</span>
|
|
|
- <span v-else class="status-wrong">❌ 回答错误</span>
|
|
|
+ <span v-if="currentQuestion.isCorrect == 1" class="status-correct">✅ 回答正确</span>
|
|
|
+ <span v-else-if="currentQuestion.isCorrect == 0" class="status-wrong">❌ 回答错误</span>
|
|
|
+ <span v-else class="status-wrong">❌ 未作答</span>
|
|
|
</div>
|
|
|
<div class="answer-detail">
|
|
|
- <div class="answer-row"><span class="answer-label">回答选项:</span>{{ currentQuestion.userAnswer }}</div>
|
|
|
+ <div class="answer-row"><span class="answer-label">回答选项:</span>{{ arrayToString(currentQuestion.answerTags) }}</div>
|
|
|
<div class="analysis-title">试题解析</div>
|
|
|
<div class="analysis-content" v-html="currentQuestion.analysis"></div>
|
|
|
</div>
|
|
|
@@ -124,119 +86,34 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- import { examElExamResultOverview, examElExamResultQuestionDetail } from '@/api/safetyEducationExaminationNew/index'
|
|
|
+ import {
|
|
|
+ examElExamAttemptReviewSidebar, examElExamAttemptReviewQuestion
|
|
|
+ } from '@/api/safetyEducationExaminationNew/index'
|
|
|
export default {
|
|
|
name: 'examDetails',
|
|
|
props: {
|
|
|
- propsData: {}
|
|
|
+ examDetailsPropsData: {}
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- // 当前选中的题目序号
|
|
|
+ newData:{},
|
|
|
currentIndex: null,
|
|
|
- // 左侧考试基本信息(来自 examElExamResultOverview 接口)
|
|
|
examInfo: {
|
|
|
- title: '新生入学考试',
|
|
|
- name: '考试名称考试名称考试名称考试名称考试名称考试名称考试名称考试名称考试名称',
|
|
|
- totalCount: 12,
|
|
|
- totalScore: 100,
|
|
|
- passScore: 90,
|
|
|
- myScore: 70,
|
|
|
- duration: '29分56秒',
|
|
|
- passed: false
|
|
|
+ examTypeName: '',
|
|
|
+ examName: '',
|
|
|
+ questionCount: 0,
|
|
|
+ totalScore: 0,
|
|
|
+ passScore: 0,
|
|
|
+ earnedScore: 0,
|
|
|
+ durationText: '',
|
|
|
+ passStatus: null,
|
|
|
},
|
|
|
- judgeOptions: [
|
|
|
- { key: 'A', text: '正确' },
|
|
|
- { key: 'B', text: '错误' }
|
|
|
- ],
|
|
|
- // 左侧题目分组(来自 examElExamResultOverview 接口)
|
|
|
- // status: 'correct' | 'wrong' | 'unanswered'
|
|
|
- questionGroups: [
|
|
|
- {
|
|
|
- type: 'single', typeName: '单选题', totalScore: 60,
|
|
|
- questions: [
|
|
|
- { index: 1, status: 'correct', score: 10 },
|
|
|
- { index: 2, status: 'wrong', score: 10 },
|
|
|
- { index: 3, status: 'correct', score: 10 },
|
|
|
- { index: 4, status: 'wrong', score: 10 },
|
|
|
- { index: 5, status: 'unanswered', score: 10 },
|
|
|
- { index: 6, status: 'correct', score: 10 }
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- type: 'multiple', typeName: '多选题', totalScore: 30,
|
|
|
- questions: [
|
|
|
- { index: 7, status: 'wrong', score: 10 },
|
|
|
- { index: 8, status: 'correct', score: 10 },
|
|
|
- { index: 9, status: 'unanswered', score: 10 }
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- type: 'judge', typeName: '判断题', totalScore: 10,
|
|
|
- questions: [
|
|
|
- { index: 10, status: 'correct', score: 10 },
|
|
|
- { index: 11, status: 'wrong', score: 10 },
|
|
|
- { index: 12, status: 'unanswered', score: 10 }
|
|
|
- ]
|
|
|
- }
|
|
|
- ],
|
|
|
- // 已加载的题目详情缓存,key 为题目序号
|
|
|
+ questionTypeGroups: [],
|
|
|
questionCache: {},
|
|
|
- // 当前题目详情(来自 examElExamResultQuestionDetail 接口)
|
|
|
currentQuestion: null,
|
|
|
// 右侧加载中状态
|
|
|
questionLoading: false,
|
|
|
- // 假数据:模拟 examElExamResultQuestionDetail 接口按序号返回
|
|
|
- mockQuestions: {
|
|
|
- 1: { index: 1, type: 'single', typeName: '单选题', score: 10, starLevel: 3, userAnswer: 'B', isCorrect: true,
|
|
|
- content: '<p>第1题:题目内容题目内容题目内容题目内容题目内容题目内容题目内容题目内容题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项内容A选项内容A' }, { key: 'B', text: '选项内容B选项内容B' }, { key: 'C', text: '选项内容C选项内容C' }, { key: 'D', text: '选项内容D选项内容D' }],
|
|
|
- analysis: '<p>本题考察...正确答案为B,因为...</p>' },
|
|
|
- 2: { index: 2, type: 'single', typeName: '单选题', score: 10, starLevel: 2, userAnswer: 'A', isCorrect: false,
|
|
|
- content: '<p>第2题:题目内容题目内容题目内容题目内容题目内容题目内容题目内容题目内容题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项内容A' }, { key: 'B', text: '选项内容B' }, { key: 'C', text: '选项内容C' }, { key: 'D', text: '选项内容D' }],
|
|
|
- analysis: '<p>本题正确答案为C,因为...</p>' },
|
|
|
- 3: { index: 3, type: 'single', typeName: '单选题', score: 10, starLevel: 1, userAnswer: 'C', isCorrect: true,
|
|
|
- content: '<p>第3题:题目内容题目内容题目内容题目内容题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项A' }, { key: 'B', text: '选项B' }, { key: 'C', text: '选项C' }, { key: 'D', text: '选项D' }],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 4: { index: 4, type: 'single', typeName: '单选题', score: 10, starLevel: 0, userAnswer: 'D', isCorrect: false,
|
|
|
- content: '<p>第4题:题目内容题目内容题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项A' }, { key: 'B', text: '选项B' }, { key: 'C', text: '选项C' }, { key: 'D', text: '选项D' }],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 5: { index: 5, type: 'single', typeName: '单选题', score: 10, starLevel: 0, userAnswer: '', isCorrect: false,
|
|
|
- content: '<p>第5题:题目内容题目内容题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项A' }, { key: 'B', text: '选项B' }, { key: 'C', text: '选项C' }, { key: 'D', text: '选项D' }],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 6: { index: 6, type: 'single', typeName: '单选题', score: 10, starLevel: 0, userAnswer: 'B', isCorrect: true,
|
|
|
- content: '<p>第6题:题目内容题目内容题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项A' }, { key: 'B', text: '选项B' }, { key: 'C', text: '选项C' }, { key: 'D', text: '选项D' }],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 7: { index: 7, type: 'multiple', typeName: '多选题', score: 10, starLevel: 2, userAnswer: 'A,B', isCorrect: false,
|
|
|
- content: '<p>第7题:多选题题目内容多选题题目内容多选题题目内容多选题题目内容多选题题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项内容A' }, { key: 'B', text: '选项内容B' }, { key: 'C', text: '选项内容C' }, { key: 'D', text: '选项内容D' }],
|
|
|
- analysis: '<p>正确答案为A、B、C,解析内容...</p>' },
|
|
|
- 8: { index: 8, type: 'multiple', typeName: '多选题', score: 10, starLevel: 0, userAnswer: 'A,C', isCorrect: true,
|
|
|
- content: '<p>第8题:多选题题目内容多选题题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项A' }, { key: 'B', text: '选项B' }, { key: 'C', text: '选项C' }, { key: 'D', text: '选项D' }],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 9: { index: 9, type: 'multiple', typeName: '多选题', score: 10, starLevel: 0, userAnswer: '', isCorrect: false,
|
|
|
- content: '<p>第9题:多选题题目内容多选题题目内容</p>',
|
|
|
- options: [{ key: 'A', text: '选项A' }, { key: 'B', text: '选项B' }, { key: 'C', text: '选项C' }, { key: 'D', text: '选项D' }],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 10: { index: 10, type: 'judge', typeName: '判断题', score: 10, starLevel: 1, userAnswer: 'A', isCorrect: true,
|
|
|
- content: '<p>第10题:以下说法正确的是:安全生产是企业第一责任。</p>',
|
|
|
- options: [],
|
|
|
- analysis: '<p>此说法正确,安全生产是企业的首要责任。</p>' },
|
|
|
- 11: { index: 11, type: 'judge', typeName: '判断题', score: 10, starLevel: 0, userAnswer: 'B', isCorrect: false,
|
|
|
- content: '<p>第11题:判断题题目内容判断题题目内容判断题题目内容</p>',
|
|
|
- options: [],
|
|
|
- analysis: '<p>解析内容。</p>' },
|
|
|
- 12: { index: 12, type: 'judge', typeName: '判断题', score: 10, starLevel: 0, userAnswer: '', isCorrect: false,
|
|
|
- content: '<p>第12题:判断题题目内容判断题题目内容判断题题目内容</p>',
|
|
|
- options: [],
|
|
|
- analysis: '<p>解析内容。</p>' }
|
|
|
- }
|
|
|
+ mockQuestions: {}
|
|
|
}
|
|
|
},
|
|
|
computed: {},
|
|
|
@@ -246,27 +123,41 @@
|
|
|
},
|
|
|
methods: {
|
|
|
initialize() {
|
|
|
- // 默认选中第一题(假数据直接从 data 里读取,无需接口)
|
|
|
- const firstGroup = this.questionGroups[0]
|
|
|
- if (firstGroup && firstGroup.questions.length) {
|
|
|
- this.$set(this, 'currentIndex', firstGroup.questions[0].index)
|
|
|
- this.$set(this, 'currentQuestion', this.mockQuestions[firstGroup.questions[0].index] || null)
|
|
|
- }
|
|
|
+ this.$set(this,'newData',this.examDetailsPropsData);
|
|
|
+ //左侧数据
|
|
|
+ examElExamAttemptReviewSidebar({attemptId:this.newData.attemptId}).then(response => {
|
|
|
+ this.$set(this,'examInfo',{
|
|
|
+ examTypeName: response.data.examTypeName?response.data.examTypeName:'',
|
|
|
+ examName: response.data.examName?response.data.examName:'',
|
|
|
+ questionCount: response.data.questionCount?response.data.questionCount:0,
|
|
|
+ totalScore: response.data.totalScore?response.data.totalScore:0,
|
|
|
+ passScore: response.data.passScore?response.data.passScore:0,
|
|
|
+ earnedScore: response.data.earnedScore?response.data.earnedScore:0,
|
|
|
+ durationText: response.data.durationText?response.data.durationText:'',
|
|
|
+ passStatus: response.data.passStatus?response.data.passStatus:null,
|
|
|
+ });
|
|
|
+ this.$set(this,'questionTypeGroups',response.data.questionTypeGroups);
|
|
|
+ // 默认选中第一题(假数据直接从 data 里读取,无需接口)
|
|
|
+ const firstGroup = this.questionTypeGroups[0]
|
|
|
+ if (firstGroup && firstGroup.questions.length) {
|
|
|
+ this.$set(this, 'currentIndex', firstGroup.questions[0].questionNo);
|
|
|
+ this.examElExamAttemptReviewQuestion(firstGroup.questions[0].snapshotQuestionId);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //右侧数据
|
|
|
+ examElExamAttemptReviewQuestion(id){
|
|
|
+ examElExamAttemptReviewQuestion({attemptId:this.newData.attemptId,snapshotQuestionId:id}).then(response => {
|
|
|
+ this.$set(this,'currentQuestion',response.data);
|
|
|
+ });
|
|
|
},
|
|
|
backPage() {
|
|
|
this.$parent.tableButton(6)
|
|
|
},
|
|
|
// 点击左侧题号:切换当前题目,按需从接口加载详情
|
|
|
- selectQuestion(index) {
|
|
|
- this.$set(this, 'currentIndex', index)
|
|
|
- if (this.questionCache[index]) {
|
|
|
- this.$set(this, 'currentQuestion', this.questionCache[index])
|
|
|
- return
|
|
|
- }
|
|
|
- // 假数据直接从 mockQuestions 取,对接真实接口时替换为下方注释的接口调用
|
|
|
- const detail = this.mockQuestions[index] || null
|
|
|
- this.$set(this.questionCache, index, detail)
|
|
|
- this.$set(this, 'currentQuestion', detail)
|
|
|
+ selectQuestion(item) {
|
|
|
+ this.$set(this, 'currentIndex', item.questionNo);
|
|
|
+ this.examElExamAttemptReviewQuestion(item.snapshotQuestionId);
|
|
|
},
|
|
|
// 判断选项是否被选中
|
|
|
isSelectedOption(q, key) {
|
|
|
@@ -274,12 +165,24 @@
|
|
|
return q.userAnswer.split(',').includes(key)
|
|
|
},
|
|
|
// 根据左侧题目列表的 status 字段获取题号样式
|
|
|
- // status: 'correct' → 绿色,'wrong' → 红色,'unanswered' → 灰色
|
|
|
- getNumClass(q) {
|
|
|
- if (q.status === 'correct') return 'num-correct'
|
|
|
- if (q.status === 'wrong') return 'num-wrong'
|
|
|
+ // status: '1' → 绿色,'0' → 红色,'null' → 灰色
|
|
|
+ getNumClass(item) {
|
|
|
+ if (item.isCorrect === 1) return 'num-correct'
|
|
|
+ if (item.isCorrect === 0) return 'num-wrong'
|
|
|
return 'num-unanswered'
|
|
|
- }
|
|
|
+ },
|
|
|
+ //匹配用户选择
|
|
|
+ isValueInList(target, list) {
|
|
|
+ if (!Array.isArray(list)) return false;
|
|
|
+ return list.some(item => item === target);
|
|
|
+ },
|
|
|
+ //返回用户选择答案
|
|
|
+ arrayToString(list) {
|
|
|
+ // 防御性编程:如果传入的不是数组,返回空字符串防止报错
|
|
|
+ if (!Array.isArray(list)) return '';
|
|
|
+
|
|
|
+ return list.join(',');
|
|
|
+ },
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
@@ -466,7 +369,6 @@
|
|
|
padding: 10px 14px;
|
|
|
cursor: default;
|
|
|
transition: border-color 0.2s;
|
|
|
-
|
|
|
&.option-selected {
|
|
|
border-color: #1890ff;
|
|
|
background: #e6f7ff;
|
|
|
@@ -544,7 +446,7 @@
|
|
|
|
|
|
.analysis-content {
|
|
|
font-size: 13px;
|
|
|
- color: #fa8c16;
|
|
|
+ /*color: #fa8c16;*/
|
|
|
line-height: 1.7;
|
|
|
}
|
|
|
}
|
|
|
@@ -553,3 +455,13 @@
|
|
|
}
|
|
|
}
|
|
|
</style>
|
|
|
+<style lang="scss">
|
|
|
+ .viewGrades-addPage-drawer{
|
|
|
+ .el-drawer__body{
|
|
|
+ padding:0;
|
|
|
+ }
|
|
|
+ .el-drawer__header{
|
|
|
+ margin:0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|