Commit 03cd547e3b4a4852294d543159d5cae550182e92

Authored by 梁保满
1 parent 0586b4d7

单体型以及其他类型试卷修改答案逻辑

src/api/urls/apis.js
... ... @@ -414,7 +414,7 @@ export default {
414 414  
415 415 // 删除班级信息(新)
416 416 deleteClass: "/api_html/school/manager/deleteClass",
417   - // 清除老师所有关联班级
  417 + // 清除老师所有关联班级
418 418 clearTeacherClasses: "/api_html/school/manager/clearTeacherClasses",
419 419  
420 420 // 下载即时测导入分数模板
... ...
src/views/basic/test/analysis.vue
... ... @@ -2,29 +2,62 @@
2 2 <div ref="main" class="page-container">
3 3 <back-box>
4 4 <template slot="title">
5   - <span>{{ type == 1 ? '单卷测练报表' : type == 2 ? subjectName + "汇总报表" : type == 3 ? "多科汇总报表" :
6   - `多班_${subjectName}_${title}_测练成绩对比分析` }}</span>
  5 + <span>{{
  6 + type == 1
  7 + ? "单卷测练报表"
  8 + : type == 2
  9 + ? subjectName + "汇总报表"
  10 + : type == 3
  11 + ? "多科汇总报表"
  12 + : `多班_${subjectName}_${title}_测练成绩对比分析`
  13 + }}</span>
7 14 </template>
8 15 </back-box>
9   - <Test v-if="type == 1" :role="role" :id="id" :classId="classId" :subjectName="subjectName" :title="title"
10   - :score="score" />
11   - <MultipleTest v-else-if="type == 2" :role="role" :ids="ids" :classId="classId" :subjectName="subjectName" />
12   - <MultipleSubTest v-else-if="type == 3" :role="role" :ids="ids" :classId="classId" :subjectName="subjectName" />
13   - <Contrast v-else-if="type == 4" :role="role" :ids="ids" :subjectName="subjectName" :title="title" />
  16 + <Test
  17 + v-if="type == 1"
  18 + :role="role"
  19 + :id="id"
  20 + :classId="classId"
  21 + :subjectName="subjectName"
  22 + :title="title"
  23 + :score="score"
  24 + :examType="examType"
  25 + />
  26 + <MultipleTest
  27 + v-else-if="type == 2"
  28 + :role="role"
  29 + :ids="ids"
  30 + :classId="classId"
  31 + :subjectName="subjectName"
  32 + />
  33 + <MultipleSubTest
  34 + v-else-if="type == 3"
  35 + :role="role"
  36 + :ids="ids"
  37 + :classId="classId"
  38 + :subjectName="subjectName"
  39 + />
  40 + <Contrast
  41 + v-else-if="type == 4"
  42 + :role="role"
  43 + :ids="ids"
  44 + :subjectName="subjectName"
  45 + :title="title"
  46 + />
14 47 </div>
15 48 </template>
16 49  
17 50 <script>
18   -import Test from "./components/test.vue"
19   -import MultipleTest from "./components/multipleTest.vue"
20   -import MultipleSubTest from "./components/multipleSubTest.vue"
21   -import Contrast from "./components/contrast.vue"
  51 +import Test from "./components/test.vue";
  52 +import MultipleTest from "./components/multipleTest.vue";
  53 +import MultipleSubTest from "./components/multipleSubTest.vue";
  54 +import Contrast from "./components/contrast.vue";
22 55 export default {
23 56 components: {
24 57 Test,
25 58 MultipleTest,
26 59 MultipleSubTest,
27   - Contrast
  60 + Contrast,
28 61 },
29 62 data() {
30 63 return {
... ... @@ -33,9 +66,10 @@ export default {
33 66 ids: [],
34 67 type: 0,
35 68 classId: "",
36   - subjectName: '',
37   - title: '',
38   - score: 0
  69 + subjectName: "",
  70 + title: "",
  71 + score: 0,
  72 + examType: 2,
39 73 };
40 74 },
41 75 created() {
... ... @@ -43,16 +77,16 @@ export default {
43 77 this.$store.getters.info.showRole ||
44 78 this.$store.getters.info.permissions[0].role;
45 79 this.id = this.$route.query.id || "";
  80 + this.examType = this.$route.query.examType || 2;
46 81 this.score = Number(this.$route.query.score) || 0;
47   - this.ids = this.$route.query.ids && this.$route.query.ids.split(",") || [];
48   - this.type = this.$route.query.type
  82 + this.ids =
  83 + (this.$route.query.ids && this.$route.query.ids.split(",")) || [];
  84 + this.type = this.$route.query.type;
49 85 this.classId = this.$route.query.classId || "";
50   - this.title = this.$route.query.title || ""
51   - this.subjectName = this.$route.query.subjectName || ""
  86 + this.title = this.$route.query.title || "";
  87 + this.subjectName = this.$route.query.subjectName || "";
52 88 },
53   - methods: {
54   -
55   - }
  89 + methods: {},
56 90 };
57 91 </script>
58 92 <style lang="scss" scoped>
... ... @@ -67,8 +101,6 @@ export default {
67 101 &.active {
68 102 overflow: hidden;
69 103 }
70   -
71   -
72 104 }
73 105  
74 106 .error {
... ... @@ -79,7 +111,6 @@ export default {
79 111 padding: 20px 20px 0;
80 112 }
81 113  
82   -
83 114 .down {
84 115 padding-top: 20px;
85 116 width: 100%;
... ...
src/views/basic/test/components/test.vue
... ... @@ -8,47 +8,128 @@
8 8 }}修改了答案,是否重新记分?
9 9 </p>
10 10 <div class="btn-box">
11   - <el-button type="danger" round @click="_ReScore" size="mini">重新计分</el-button>
12   - <el-button type="danger" round plain size="mini" @click="paperModifyLog.modifiedTime = ''">暂时不计</el-button>
  11 + <el-button type="danger" round @click="_ReScore" size="mini"
  12 + >重新计分</el-button
  13 + >
  14 + <el-button
  15 + type="danger"
  16 + round
  17 + plain
  18 + size="mini"
  19 + @click="paperModifyLog.modifiedTime = ''"
  20 + >暂时不计</el-button
  21 + >
13 22 </div>
14 23 </div>
15 24 <div class="content-header">
16 25 <div class="tab-box">
17   - <span v-for="(item, index) in tabList" :key="item" class="tab-item" :class="type == index ? 'active' : ''"
18   - @click="setType(index)">{{ item }}</span>
  26 + <span
  27 + v-for="(item, index) in tabList"
  28 + :key="item"
  29 + class="tab-item"
  30 + :class="type == index ? 'active' : ''"
  31 + @click="setType(index)"
  32 + >{{ item }}</span
  33 + >
19 34 </div>
20   - <el-button v-if="!status" class="setMinScore" @click="diaMinScore = true" round size="small">设置低分值</el-button>
  35 + <el-button
  36 + v-if="!status"
  37 + class="setMinScore"
  38 + @click="diaMinScore = true"
  39 + round
  40 + size="small"
  41 + >设置低分值</el-button
  42 + >
21 43 </div>
22 44 <div id="print-content" v-loading="loading">
23 45 <div class="table-box">
24   - <el-table :max-height="tableMaxHeight" v-show="type == 0" :data="tableData" border style="width: 100%">
25   - <el-table-column prop="questionIndex" label="题号" align="center" fixed width="60"></el-table-column>
26   - <el-table-column prop="questionType" label="题型" align="center" fixed width="100"><template slot-scope="scope">{{
27   - setSubPro(scope.row.questionType)
28   - }}</template></el-table-column>
29   - <el-table-column prop="score" width="100" label="满分值" sortable align="center"></el-table-column>
30   - <el-table-column width="110" prop="highestScore" label="班最高分" sortable align="center"></el-table-column>
31   - <el-table-column width="110" prop="lowestScore" label="班最低分" sortable align="center"></el-table-column>
32   - <el-table-column width="110" prop="avgScore" label="班平均分" sortable align="center"></el-table-column>
33   - <el-table-column prop="classScoringRate" width="120" sortable label="班级得分率" align="center"><template
34   - slot-scope="scoped">{{ scoped.row.classScoringRate }}%</template></el-table-column>
35   - <el-table-column prop="correctAnswer" label="答案" align="center"><template slot-scope="scoped">{{
36   - scoped.row.correctAnswer == 1
37   - ? "✓"
38   - : scoped.row.correctAnswer == 2
39   - ? "✗"
40   - : scoped.row.correctAnswer
41   - }}</template>
  46 + <el-table
  47 + :max-height="tableMaxHeight"
  48 + v-show="type == 0"
  49 + :data="tableData"
  50 + border
  51 + style="width: 100%"
  52 + >
  53 + <el-table-column
  54 + prop="questionIndex"
  55 + label="题号"
  56 + align="center"
  57 + fixed
  58 + width="60"
  59 + ></el-table-column>
  60 + <el-table-column
  61 + prop="questionType"
  62 + label="题型"
  63 + align="center"
  64 + fixed
  65 + width="100"
  66 + ><template slot-scope="scope">{{
  67 + setSubPro(scope.row.questionType)
  68 + }}</template></el-table-column
  69 + >
  70 + <el-table-column
  71 + prop="score"
  72 + width="100"
  73 + label="满分值"
  74 + sortable
  75 + align="center"
  76 + ></el-table-column>
  77 + <el-table-column
  78 + width="110"
  79 + prop="highestScore"
  80 + label="班最高分"
  81 + sortable
  82 + align="center"
  83 + ></el-table-column>
  84 + <el-table-column
  85 + width="110"
  86 + prop="lowestScore"
  87 + label="班最低分"
  88 + sortable
  89 + align="center"
  90 + ></el-table-column>
  91 + <el-table-column
  92 + width="110"
  93 + prop="avgScore"
  94 + label="班平均分"
  95 + sortable
  96 + align="center"
  97 + ></el-table-column>
  98 + <el-table-column
  99 + prop="classScoringRate"
  100 + width="120"
  101 + sortable
  102 + label="班级得分率"
  103 + align="center"
  104 + ><template slot-scope="scoped"
  105 + >{{ scoped.row.classScoringRate }}%</template
  106 + ></el-table-column
  107 + >
  108 + <el-table-column prop="correctAnswer" label="答案" align="center"
  109 + ><template slot-scope="scoped">{{
  110 + scoped.row.correctAnswer == 1
  111 + ? "✓"
  112 + : scoped.row.correctAnswer == 2
  113 + ? "✗"
  114 + : scoped.row.correctAnswer
  115 + }}</template>
42 116 </el-table-column>
43   - <el-table-column v-for="(item, index) in optionsList" :key="index" :label="item.title" :prop="'count' + index"
44   - align="center" width="120"><template slot-scope="scope">
  117 + <el-table-column
  118 + v-for="(item, index) in optionsList"
  119 + :key="index"
  120 + :label="item.title"
  121 + :prop="'count' + index"
  122 + align="center"
  123 + width="120"
  124 + ><template slot-scope="scope">
45 125 <p class="persent">
46 126 {{
47 127 scope.row.questionType == "5"
48   - ? ""
49   - : scope.row["option" + index]
50   - ? `${scope.row["option" + index]}(${scope.row["persent" + index]
51   - })`
  128 + ? ""
  129 + : scope.row["option" + index]
  130 + ? `${scope.row["option" + index]}(${
  131 + scope.row["persent" + index]
  132 + })`
52 133 : ""
53 134 }}
54 135 </p>
... ... @@ -86,18 +167,22 @@
86 167 <td>
87 168 {{
88 169 tr.correctAnswer == 1
89   - ? "✓"
90   - : tr.correctAnswer == 2
  170 + ? "✓"
  171 + : tr.correctAnswer == 2
91 172 ? "✗"
92 173 : tr.correctAnswer
93 174 }}
94 175 </td>
95   - <td v-for="(item, index) in optionsList" :key="index" width="120">
  176 + <td
  177 + v-for="(item, index) in optionsList"
  178 + :key="index"
  179 + width="120"
  180 + >
96 181 <p class="persent">
97 182 {{
98 183 tr.questionType == "5"
99   - ? ""
100   - : tr["option" + index]
  184 + ? ""
  185 + : tr["option" + index]
101 186 ? `${tr["option" + index]}(${tr["persent" + index]})`
102 187 : ""
103 188 }}
... ... @@ -121,7 +206,9 @@
121 206 <span class="hui-s s2">{{
122 207 examReport.subjectiveAvgScore
123 208 }}</span>
124   - <span class="hui-s s3">{{ examReport.subjectiveClassScoringRate }}%</span>
  209 + <span class="hui-s s3"
  210 + >{{ examReport.subjectiveClassScoringRate }}%</span
  211 + >
125 212 </li>
126 213 <li class="hui-li">
127 214 <span class="hui-s s1">客观题</span>
... ... @@ -133,7 +220,9 @@
133 220 examReport.objectiveLowestScore
134 221 }}</span>
135 222 <span class="hui-s s2">{{ examReport.objectiveAvgScore }}</span>
136   - <span class="hui-s s3">{{ examReport.objectiveClassScoringRate }}%</span>
  223 + <span class="hui-s s3"
  224 + >{{ examReport.objectiveClassScoringRate }}%</span
  225 + >
137 226 </li>
138 227 <li class="hui-li">
139 228 <span class="hui-s s1">整卷</span>
... ... @@ -146,51 +235,176 @@
146 235 </ul>
147 236 </div>
148 237 </div>
149   - <el-table v-show="type == 1" :max-height="tableMaxHeight" :data="tableData2" border style="width: 100%"
150   - :default-sort="{ prop: 'dadui', order: 'descending' }">
151   - <el-table-column prop="studentCode" label="学号" align="center" fixed></el-table-column>
152   - <el-table-column prop="studentName" label="姓名" fixed align="center"></el-table-column>
153   - <el-table-column prop="examScore" label="总分" sortable align="center"></el-table-column>
154   - <el-table-column prop="scoringRate" label="得分率" sortable align="center"><template slot-scope="scope">{{
155   - scope.row.scoringRate }}%</template></el-table-column>
156   - <el-table-column prop="classRank" label="班名" sortable align="center"></el-table-column>
  238 + <el-table
  239 + v-show="type == 1"
  240 + :max-height="tableMaxHeight"
  241 + :data="tableData2"
  242 + border
  243 + style="width: 100%"
  244 + :default-sort="{ prop: 'dadui', order: 'descending' }"
  245 + >
  246 + <el-table-column
  247 + prop="studentCode"
  248 + label="学号"
  249 + align="center"
  250 + fixed
  251 + ></el-table-column>
  252 + <el-table-column
  253 + prop="studentName"
  254 + label="姓名"
  255 + fixed
  256 + align="center"
  257 + ></el-table-column>
  258 + <el-table-column
  259 + prop="examScore"
  260 + label="总分"
  261 + sortable
  262 + align="center"
  263 + ></el-table-column>
  264 + <el-table-column
  265 + prop="scoringRate"
  266 + label="得分率"
  267 + sortable
  268 + align="center"
  269 + ><template slot-scope="scope"
  270 + >{{ scope.row.scoringRate }}%</template
  271 + ></el-table-column
  272 + >
  273 + <el-table-column
  274 + prop="classRank"
  275 + label="班名"
  276 + sortable
  277 + align="center"
  278 + ></el-table-column>
157 279 <el-table-column label="客观题" align="center">
158   - <el-table-column prop="objectiveExamScore" label="得分" align="center"></el-table-column>
159   - <el-table-column prop="objectiveScoringRate" label="得分率" align="center"><template slot-scope="scope">{{
160   - scope.row.objectiveScoringRate }}%</template></el-table-column>
  280 + <el-table-column
  281 + prop="objectiveExamScore"
  282 + label="得分"
  283 + align="center"
  284 + ></el-table-column>
  285 + <el-table-column
  286 + prop="objectiveScoringRate"
  287 + label="得分率"
  288 + align="center"
  289 + ><template slot-scope="scope"
  290 + >{{ scope.row.objectiveScoringRate }}%</template
  291 + ></el-table-column
  292 + >
161 293 </el-table-column>
162 294 <el-table-column label="主观题" align="center">
163   - <el-table-column prop="subjectiveExamScore" label="得分" align="center"></el-table-column>
164   - <el-table-column prop="subjectiveScoringRate" label="得分率" align="center"><template slot-scope="scope">{{
165   - scope.row.subjectiveScoringRate }}%</template></el-table-column>
  295 + <el-table-column
  296 + prop="subjectiveExamScore"
  297 + label="得分"
  298 + align="center"
  299 + ></el-table-column>
  300 + <el-table-column
  301 + prop="subjectiveScoringRate"
  302 + label="得分率"
  303 + align="center"
  304 + ><template slot-scope="scope"
  305 + >{{ scope.row.subjectiveScoringRate }}%</template
  306 + ></el-table-column
  307 + >
166 308 </el-table-column>
167 309 </el-table>
168   - <el-table v-show="type == 2" :max-height="tableMaxHeight" :data="tableData2" border style="width: 100%"
169   - :default-sort="{ prop: '', order: 'descending' }">
170   - <el-table-column prop="studentCode" label="学号" fixed align="center" width="120"></el-table-column>
171   - <el-table-column prop="studentName" label="姓名" fixed align="center"></el-table-column>
172   - <el-table-column prop="examScore" label="总分" sortable align="center"></el-table-column>
  310 + <el-table
  311 + v-show="type == 2"
  312 + :max-height="tableMaxHeight"
  313 + :data="tableData2"
  314 + border
  315 + style="width: 100%"
  316 + :default-sort="{ prop: '', order: 'descending' }"
  317 + >
  318 + <el-table-column
  319 + prop="studentCode"
  320 + label="学号"
  321 + fixed
  322 + align="center"
  323 + width="120"
  324 + ></el-table-column>
  325 + <el-table-column
  326 + prop="studentName"
  327 + label="姓名"
  328 + fixed
  329 + align="center"
  330 + ></el-table-column>
  331 + <el-table-column
  332 + prop="examScore"
  333 + label="总分"
  334 + sortable
  335 + align="center"
  336 + ></el-table-column>
173 337 <el-table-column label="分数组成" align="center">
174   - <el-table-column prop="objectiveExamScore" label="客观题分" align="center"></el-table-column>
175   - <el-table-column prop="subjectiveExamScore" label="主观题分" align="center"></el-table-column>
  338 + <el-table-column
  339 + prop="objectiveExamScore"
  340 + label="客观题分"
  341 + align="center"
  342 + ></el-table-column>
  343 + <el-table-column
  344 + prop="subjectiveExamScore"
  345 + label="主观题分"
  346 + align="center"
  347 + ></el-table-column>
176 348 </el-table-column>
177   - <el-table-column align="center" v-for="(item, index) in questionList" :key="index" :label="'Q' + item.id"
178   - :prop="'score' + item.id">
  349 + <el-table-column
  350 + align="center"
  351 + v-for="(item, index) in questionList"
  352 + :key="index"
  353 + :label="'Q' + item.id"
  354 + :prop="'score' + item.id"
  355 + >
179 356 </el-table-column>
180 357 </el-table>
181   - <el-table :max-height="tableMaxHeight" v-show="type == 3" :data="tableData2" border style="width: 100%"
182   - :default-sort="{ prop: '', order: 'descending' }">
183   - <el-table-column prop="studentCode" label="学号" fixed align="center"></el-table-column>
184   - <el-table-column prop="studentName" label="姓名" fixed align="center"></el-table-column>
185   - <el-table-column prop="className" label="班级" align="center"></el-table-column>
186   - <el-table-column prop="examScore" label="总分" sortable align="center"></el-table-column>
187   - <el-table-column align="center" v-for="(item, index) in questionList" :key="index" :label="'Q' + item.id">
  358 + <el-table
  359 + :max-height="tableMaxHeight"
  360 + v-show="type == 3"
  361 + :data="tableData2"
  362 + border
  363 + style="width: 100%"
  364 + :default-sort="{ prop: '', order: 'descending' }"
  365 + >
  366 + <el-table-column
  367 + prop="studentCode"
  368 + label="学号"
  369 + fixed
  370 + align="center"
  371 + ></el-table-column>
  372 + <el-table-column
  373 + prop="studentName"
  374 + label="姓名"
  375 + fixed
  376 + align="center"
  377 + ></el-table-column>
  378 + <el-table-column
  379 + prop="className"
  380 + label="班级"
  381 + align="center"
  382 + ></el-table-column>
  383 + <el-table-column
  384 + prop="examScore"
  385 + label="总分"
  386 + sortable
  387 + align="center"
  388 + ></el-table-column>
  389 + <el-table-column
  390 + align="center"
  391 + v-for="(item, index) in questionList"
  392 + :key="index"
  393 + :label="'Q' + item.id"
  394 + >
188 395 <template slot-scope="scope">
189 396 <span v-if="tableData[index]?.questionType == 5">*</span>
190   - <span v-else-if="scope.row['answer' + item.id]" :class="scope.row['isRight' + item.id] ? '' : 'error'">
  397 + <span
  398 + v-else-if="scope.row['answer' + item.id]"
  399 + :class="scope.row['isRight' + item.id] ? '' : 'error'"
  400 + >
191 401 {{ scope.row["answer" + item.id] }}
192 402 </span>
193   - <span v-else :class="scope.row['questionType' + item.id] == 5 ? '' : 'error'">-</span>
  403 + <span
  404 + v-else
  405 + :class="scope.row['questionType' + item.id] == 5 ? '' : 'error'"
  406 + >-</span
  407 + >
194 408 </template>
195 409 </el-table-column>
196 410 </el-table>
... ... @@ -198,22 +412,56 @@
198 412 </div>
199 413 <div class="down">
200 414 <div>
201   - <el-button @click="exportData" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button>
202   - <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round
203   - icon="el-icon-printer">打印</el-button>
  415 + <el-button
  416 + @click="exportData"
  417 + type="primary"
  418 + plain
  419 + round
  420 + icon="fa fa-cloud-download"
  421 + >导出报表</el-button
  422 + >
  423 + <el-button
  424 + v-if="!this.$store.getters.code"
  425 + @click="print"
  426 + type="primary"
  427 + plain
  428 + round
  429 + icon="el-icon-printer"
  430 + >打印</el-button
  431 + >
204 432 </div>
205 433 <div v-if="!status">
206   - <el-button type="primary" round @click="openScoreSet">答卷录分</el-button>
  434 + <el-button type="primary" round @click="openScoreSet"
  435 + >答卷录分</el-button
  436 + >
207 437  
208 438 <template v-if="role != 'ROLE_BANZHUREN'">
209   - <el-button @click="edit" type="primary" v-if="examReport.subjectiveScore != examReport.examPaperScore"
210   - round>查看题目</el-button></template>
  439 + <el-button
  440 + @click="edit"
  441 + type="primary"
  442 + v-if="examReport.subjectiveScore != examReport.examPaperScore"
  443 + round
  444 + >查看题目</el-button
  445 + ></template
  446 + >
211 447 </div>
212 448 </div>
213   - <ScoreSet v-show="diaScoreSet" :role="role" :id="id" :title="title" :examScore="score" :diaScoreSet="diaScoreSet"
214   - @closeScoreSet="closeScoreSet" />
215   - <el-dialog :close-on-click-modal="false" title="低分区间设置" :visible.sync="diaMinScore" width="480px"
216   - @closed="closeDiaMinScore">
  449 + <ScoreSet
  450 + v-show="diaScoreSet"
  451 + :role="role"
  452 + :id="id"
  453 + :title="title"
  454 + :examScore="score"
  455 + :diaScoreSet="diaScoreSet"
  456 + @closeScoreSet="closeScoreSet"
  457 + />
  458 + <el-dialog
  459 + :close-on-click-modal="false"
  460 + title="低分区间设置"
  461 + :visible.sync="diaMinScore"
  462 + width="480px"
  463 + @closed="closeDiaMinScore"
  464 + >
217 465 <el-form>
218 466 <el-form-item label="低分设置模式:">
219 467 <el-select v-model="lowRange.type" @change="changeScore">
... ... @@ -223,16 +471,35 @@
223 471 </el-select>
224 472 </el-form-item>
225 473 <el-form-item label="低分区间:">
226   - <el-input class="score-ipt" type="number" v-model="lowRange.range[0]" :min="0" :max="100"
  474 + <el-input
  475 + class="score-ipt"
  476 + type="number"
  477 + v-model="lowRange.range[0]"
  478 + :min="0"
  479 + :max="100"
227 480 @input="lowRange.range[1] > 100 ? (lowRange.range[1] = 100) : ''"
228   - @keydown.native="keydownRange($event)"></el-input>{{ lowRange.type != 0 ? "%" : "分" }}(含)
229   - <el-input class="score-ipt" type="number" v-model="lowRange.range[1]" :min="0" :max="100"
  481 + @keydown.native="keydownRange($event)"
  482 + ></el-input
  483 + >{{ lowRange.type != 0 ? "%" : "分" }}(含)
  484 + <el-input
  485 + class="score-ipt"
  486 + type="number"
  487 + v-model="lowRange.range[1]"
  488 + :min="0"
  489 + :max="100"
230 490 @input="lowRange.range[1] > 100 ? (lowRange.range[1] = 100) : ''"
231   - @keydown.native="keydownRange($event)"></el-input>{{ lowRange.type != 0 ? "%" : "分" }}(含)
  491 + @keydown.native="keydownRange($event)"
  492 + ></el-input
  493 + >{{ lowRange.type != 0 ? "%" : "分" }}(含)
232 494 </el-form-item>
233 495 </el-form>
234 496  
235   - <div class="dialog-footer" slot="footer" align="center" v-loading="loadingTange">
  497 + <div
  498 + class="dialog-footer"
  499 + slot="footer"
  500 + align="center"
  501 + v-loading="loadingTange"
  502 + >
236 503 <el-button type="danger" @click="_SavelowRange">保存</el-button>
237 504 <el-button @click="diaMinScore = false">取 消</el-button>
238 505 </div>
... ... @@ -240,7 +507,7 @@
240 507 </div>
241 508 </template>
242 509 <script>
243   -import ScoreSet from "./scoreSet.vue"
  510 +import ScoreSet from "./scoreSet.vue";
244 511 import { downloadFile, tablePrint } from "@/utils";
245 512 export default {
246 513 components: {
... ... @@ -252,20 +519,22 @@ export default {
252 519 title: String,
253 520 classId: String,
254 521 subjectName: String,
  522 + examType: String,
255 523 score: {
256 524 type: Number,
257   - default: 0
  525 + default: 0,
258 526 },
259 527 },
260 528 data() {
261 529 return {
262   - status: 0,// 1:已归档试卷
  530 + status: 0, // 1:已归档试卷
263 531 tableMaxHeight: 600,
264 532 loading: false,
265 533 exportLoading: false,
266 534 tabList: ["试题分析", "成绩排名", "小题分报表", "作答明细表"],
267 535 type: 0,
268   - paperModifyLog: { //修改信息
  536 + paperModifyLog: {
  537 + //修改信息
269 538 realName: "",
270 539 modifiedTime: "",
271 540 },
... ... @@ -309,7 +578,7 @@ export default {
309 578  
310 579 //导出相关
311 580 diaShow: false,
312   - exportStudent: []
  581 + exportStudent: [],
313 582 };
314 583 },
315 584 created() {
... ... @@ -330,7 +599,7 @@ export default {
330 599 },
331 600 //关闭设置分数
332 601 closeScoreSet() {
333   - this.diaScoreSet = false
  602 + this.diaScoreSet = false;
334 603 this._QueryData();
335 604 },
336 605 setType(type) {
... ... @@ -362,6 +631,7 @@ export default {
362 631 paperId: this.id,
363 632 title: this.title,
364 633 type: 2,
  634 + examType: this.examType,
365 635 },
366 636 });
367 637 },
... ... @@ -386,9 +656,12 @@ export default {
386 656 },
387 657 // 保存低分设置
388 658 async _SavelowRange() {
389   - if (this.lowRange.range[0].trim() == "" || this.lowRange.range[1].trim() == "") {
  659 + if (
  660 + this.lowRange.range[0].trim() == "" ||
  661 + this.lowRange.range[1].trim() == ""
  662 + ) {
390 663 this.$message.warning("请补全低分设置!");
391   - return
  664 + return;
392 665 }
393 666 this.loadingTange = true;
394 667 let { data, status, info } = await this.$request.setLowRange({
... ... @@ -413,9 +686,10 @@ export default {
413 686 async examDetail() {
414 687 //详情
415 688 this.loading = true;
416   - const examDetail = this.role == "ROLE_PERSONAL" ?
417   - this.$request.pExamDetail
418   - : this.$request.examDetail;
  689 + const examDetail =
  690 + this.role == "ROLE_PERSONAL"
  691 + ? this.$request.pExamDetail
  692 + : this.$request.examDetail;
419 693  
420 694 let { data, info, status } = await examDetail({
421 695 examId: this.id,
... ... @@ -444,7 +718,7 @@ export default {
444 718 });
445 719 this.loading = false;
446 720 if (status === 0) {
447   - this.$store.commit("setRefreshTestList", true)
  721 + this.$store.commit("setRefreshTestList", true);
448 722 this.$message.success(info);
449 723 this._QueryData();
450 724 this.paperModifyLog.modifiedTime = "";
... ... @@ -456,9 +730,10 @@ export default {
456 730 async examStudentReport() {
457 731 //成绩排名-小题分-作答明细
458 732 this.loading = true;
459   - const examStudentReport = this.role == "ROLE_PERSONAL" ?
460   - this.$request.pExamStudentReport
461   - : this.$request.examStudentReport;
  733 + const examStudentReport =
  734 + this.role == "ROLE_PERSONAL"
  735 + ? this.$request.pExamStudentReport
  736 + : this.$request.examStudentReport;
462 737 let { data, info, status } = await examStudentReport({
463 738 examId: this.id,
464 739 });
... ... @@ -491,7 +766,7 @@ export default {
491 766 this.questionList = optionsList.sort((a, b) => {
492 767 return a.id - b.id;
493 768 });
494   - this.exportStudent = [...this.tableData2]
  769 + this.exportStudent = [...this.tableData2];
495 770 } else {
496 771 this.$message.error(info);
497 772 }
... ... @@ -499,9 +774,10 @@ export default {
499 774 async examQuestionReport() {
500 775 //试题分析
501 776 this.loading = true;
502   - const examQuestionReport = this.role == "ROLE_PERSONAL" ?
503   - this.$request.pExamQuestionReport
504   - : this.$request.examQuestionReport;
  777 + const examQuestionReport =
  778 + this.role == "ROLE_PERSONAL"
  779 + ? this.$request.pExamQuestionReport
  780 + : this.$request.examQuestionReport;
505 781  
506 782 let { data, info, status } = await examQuestionReport({
507 783 examId: this.id,
... ... @@ -537,8 +813,8 @@ export default {
537 813 ? defaultArr[index]?.option == 1
538 814 ? "✓"
539 815 : defaultArr[index]?.option == 2
540   - ? "✗"
541   - : defaultArr[index]?.option
  816 + ? "✗"
  817 + : defaultArr[index]?.option
542 818 : "";
543 819 items["title"] = "选项" + (index + 1);
544 820 } else {
... ... @@ -567,9 +843,10 @@ export default {
567 843 async exportData() {
568 844 if (this.exportLoading == true) return;
569 845 this.exportLoading = true;
570   - const exportExamReport = this.role == "ROLE_PERSONAL" ?
571   - this.$request.pExportExamReport
572   - : this.$request.exportExamReport;
  846 + const exportExamReport =
  847 + this.role == "ROLE_PERSONAL"
  848 + ? this.$request.pExportExamReport
  849 + : this.$request.exportExamReport;
573 850  
574 851 const data = await exportExamReport({
575 852 examId: this.id,
... ... @@ -624,8 +901,6 @@ div::-webkit-scrollbar-thumb {
624 901 color: #f30;
625 902 }
626 903  
627   -
628   -
629 904 .tips {
630 905 height: 48px;
631 906 box-sizing: border-box;
... ...
src/views/basic/test/list.vue
... ... @@ -299,6 +299,7 @@ export default {
299 299 subjectName: obj.subjectName,
300 300 classId: this.query.classId[0],
301 301 params: this.$route.query.params,
  302 + examType: obj.examPaperId == 0 ? 1 : 2,
302 303 },
303 304 });
304 305 },
... ... @@ -404,6 +405,7 @@ export default {
404 405 paperId: item.id,
405 406 title: item.title,
406 407 type: 2,
  408 + examType: item.examType || 1,
407 409 },
408 410 });
409 411 },
... ...
src/views/examinationPaper/add.vue
... ... @@ -1260,13 +1260,13 @@ export default {
1260 1260 this.stem.indexs = indexs;
1261 1261 this.stem.type = type;
1262 1262 if (type == 1) {
1263   - if (obj.screenshot == "") {
  1263 + if (!obj.screenshot || obj.screenshot == "") {
1264 1264 this.iframeLoading = false;
1265 1265 }
1266 1266 this.stem.screenshot = obj.screenshot || "";
1267 1267 this.stem.answerScreenshot = "";
1268 1268 } else {
1269   - if (obj.answerScreenshot == "") {
  1269 + if (!obj.answerScreenshot || obj.answerScreenshot == "") {
1270 1270 this.iframeLoading = false;
1271 1271 }
1272 1272 this.stem.answerScreenshot = obj.answerScreenshot || "";
... ... @@ -2044,10 +2044,12 @@ export default {
2044 2044 let subjectArr = [];
2045 2045 this.subjectList =
2046 2046 data.subjectNames?.map((item) => {
2047   - subjectArr.push(item.subjectName || item);
  2047 + let subName =
  2048 + this.role == "ROLE_PERSONAL" ? item.subjectName : item;
  2049 + subjectArr.push(subName);
2048 2050 return {
2049   - value: this.role == "ROLE_PERSONAL" ? item.subjectName : item,
2050   - label: this.role == "ROLE_PERSONAL" ? item.subjectName : item,
  2051 + value: subName,
  2052 + label: subName,
2051 2053 };
2052 2054 }) || [];
2053 2055 if (this.subjectList.length) {
... ...
src/views/examinationPaper/addQs.vue
... ... @@ -448,7 +448,7 @@
448 448 </div>
449 449 </el-dialog>
450 450 </div>
451   - <div v-show="step == 2">
  451 + <div v-if="step == 2">
452 452 <div class="answer-title">
453 453 <p class="name">{{ form.title }}</p>
454 454 </div>
... ... @@ -547,6 +547,7 @@ export default {
547 547 listShare: 0,
548 548 uploadUrl: "/file/uploadImgToHtml",
549 549 iframeLoading: false,
  550 + subjectName: "",
550 551 };
551 552 },
552 553 computed: {
... ... @@ -588,6 +589,7 @@ export default {
588 589 this.listShare = this.$route.query.listShare
589 590 ? this.$route.query.listShare
590 591 : 0;
  592 + this.subjectName = this.$route.query.subjectName || "";
591 593 this.type = this.$route.query.type ? this.$route.query.type : 1;
592 594 this.role =
593 595 this.$store.getters.info.showRole ||
... ... @@ -622,13 +624,13 @@ export default {
622 624 this.stem.indexs = indexs;
623 625 this.stem.type = type;
624 626 if (type == 1) {
625   - if (obj.screenshot == "") {
  627 + if (!obj.screenshot || obj.screenshot == "") {
626 628 this.iframeLoading = false;
627 629 }
628 630 this.stem.screenshot = obj.screenshot || "";
629 631 this.stem.answerScreenshot = "";
630 632 } else {
631   - if (obj.answerScreenshot == "") {
  633 + if (!obj.answerScreenshot || obj.answerScreenshot == "") {
632 634 this.iframeLoading = false;
633 635 }
634 636 this.stem.answerScreenshot = obj.answerScreenshot || "";
... ... @@ -1121,15 +1123,23 @@ export default {
1121 1123 }
1122 1124 const { data, status, info } = await fetchSubjectList({ ...query });
1123 1125 if (status === 0) {
  1126 + let subjectArr = [];
1124 1127 this.subjectList =
1125 1128 data.subjectNames?.map((item) => {
  1129 + let subName =
  1130 + this.role == "ROLE_PERSONAL" ? item.subjectName : item;
  1131 + subjectArr.push(subName);
1126 1132 return {
1127   - value: this.role == "ROLE_PERSONAL" ? item.subjectName : item,
1128   - label: this.role == "ROLE_PERSONAL" ? item.subjectName : item,
  1133 + value: subName,
  1134 + label: subName,
1129 1135 };
1130 1136 }) || [];
1131 1137 if (this.subjectList.length) {
1132   - this.form.subjectName = this.subjectList[0].value;
  1138 + if (subjectArr.includes(this.$route.query.subjectName)) {
  1139 + this.form.subjectName = this.$route.query.subjectName;
  1140 + } else {
  1141 + this.form.subjectName = this.subjectList[0].value;
  1142 + }
1133 1143 }
1134 1144 } else {
1135 1145 this.$message.error(info);
... ...
src/views/examinationPaper/edit.vue
... ... @@ -23,10 +23,7 @@
23 23 <p class="totals">卷面总分:{{ allScore }}分</p>
24 24 </div>
25 25 <div class="question-box">
26   - <ul
27   - class="questions-ul questions-ul2"
28   - v-if="!questionList[0]?.subQuestions"
29   - >
  26 + <ul class="questions-ul questions-ul2" v-if="examType == 1">
30 27 <li class="sub-questions">
31 28 <div class="qs-num">题号</div>
32 29 <div class="qs-type">题型</div>
... ... @@ -155,9 +152,9 @@
155 152 </div>
156 153 </li>
157 154 </ul>
158   - <template v-if="questionList[0]?.subQuestions">
  155 + <template v-if="examType == 2">
159 156 <template v-for="(question, index) in questionList">
160   - <p class="question-title">
  157 + <p class="question-title" v-if="paperType == 2">
161 158 <span>{{ setBigNum(index) }}、</span>
162 159 <el-input
163 160 class="ipt"
... ... @@ -167,7 +164,10 @@
167 164 ></el-input>
168 165 <span>共 {{ setScore(question) }} 分</span>
169 166 </p>
170   - <div class="questions-ul">
  167 + <div
  168 + class="questions-ul"
  169 + :class="paperType == 1 ? 'questions-ul2' : ''"
  170 + >
171 171 <div class="sub-questions">
172 172 <div class="qs-num">题号</div>
173 173 <div class="qs-type">题型</div>
... ... @@ -195,7 +195,7 @@
195 195 >
196 196 </p>
197 197 <div v-else class="sub-questions">
198   - <div class="qs-num">{{ subQuestions.questionIndex }}</div>
  198 + <div class="qs-num">{{ setNum(index, indexs) }}</div>
199 199 <div class="qs-type">
200 200 {{ setSubPro(subQuestions.questionType) }}
201 201 </div>
... ... @@ -531,6 +531,7 @@ export default {
531 531 gradeClassList: [], //学段列表
532 532 uploadUrl: "/file/uploadImgToHtml",
533 533 iframeLoading: false,
  534 + examType: 2,
534 535 };
535 536 },
536 537 computed: {
... ... @@ -580,6 +581,7 @@ export default {
580 581 this.$store.getters.info.showRole ||
581 582 this.$store.getters.info.permissions[0].role;
582 583 this.type = this.$route.query.type || 1;
  584 + this.examType = this.$route.query.examType || 2;
583 585 this.paperType = this.$route.query.paperType || 1;
584 586 this.form.title = this.$route.query.title || "";
585 587 this._QueryDetail();
... ... @@ -594,13 +596,13 @@ export default {
594 596 this.stem.index = index;
595 597 this.stem.indexs = indexs;
596 598 if (type == 1) {
597   - if (obj.screenshot == "") {
  599 + if (!obj.screenshot || obj.screenshot == "") {
598 600 this.iframeLoading = false;
599 601 }
600 602 this.stem.screenshot = obj.screenshot || "";
601 603 this.stem.answerScreenshot = "";
602 604 } else {
603   - if (obj.answerScreenshot == "") {
  605 + if (!obj.answerScreenshot || obj.answerScreenshot == "") {
604 606 this.iframeLoading = false;
605 607 }
606 608 this.stem.answerScreenshot = obj.answerScreenshot || "";
... ... @@ -724,6 +726,23 @@ export default {
724 726  
725 727 return txt;
726 728 },
  729 + //计算题号
  730 + setNum(index, indexs, sub) {
  731 + let lengths = 0; //所在大题之前的所有小题数量
  732 + let subIndex = 0; //所在大题的位置
  733 + for (let i = 0; i < index; i++) {
  734 + let subArr = this.questionList[i].subQuestions.filter((item) => {
  735 + return !!item.questionType;
  736 + });
  737 + lengths += subArr.length;
  738 + }
  739 + for (let i = 0; i < indexs; i++) {
  740 + if (!!this.questionList[index].subQuestions[i].questionType) {
  741 + subIndex += 1;
  742 + }
  743 + }
  744 + return lengths + subIndex + 1;
  745 + },
727 746 setScore(question) {
728 747 let score = question.subQuestions.reduce((a, b) => {
729 748 return a + (b.score || 0);
... ...
src/views/examinationPaper/index.vue
... ... @@ -414,6 +414,7 @@ export default {
414 414 ...query,
415 415 listType: this.query.type,
416 416 listShare: this.query.share,
  417 + subjectName: this.query.subjectName,
417 418 },
418 419 };
419 420 this.$router.push(routerItem);
... ... @@ -887,7 +888,7 @@ export default {
887 888  
888 889 .img-box {
889 890 position: relative;
890   - color: #409EFF;
  891 + color: #409eff;
891 892  
892 893 .img {
893 894 position: absolute;
... ...