Commit b0cd2598f9811e22b3db7699d5ee57b8872a5d6d
1 parent
1410e5cd
fix:测试问题
Showing
18 changed files
with
2210 additions
and
805 deletions
src/api/apis/apis.js
... | ... | @@ -1615,15 +1615,6 @@ export default { |
1615 | 1615 | }); |
1616 | 1616 | }, |
1617 | 1617 | |
1618 | - | |
1619 | - // 教师/个人版导入备题组卷Word文档 | |
1620 | - paperWordUpload(data) { | |
1621 | - return service({ | |
1622 | - url: setUpUrls.paperWordUpload, | |
1623 | - method: "POST", | |
1624 | - data | |
1625 | - }); | |
1626 | - }, | |
1627 | 1618 | // 删除随堂问报表 |
1628 | 1619 | deletePaperReport(data) { |
1629 | 1620 | return service({ |
... | ... | @@ -1632,6 +1623,7 @@ export default { |
1632 | 1623 | data |
1633 | 1624 | }); |
1634 | 1625 | }, |
1626 | + | |
1635 | 1627 | //删除基站 |
1636 | 1628 | deleteStation(data) { |
1637 | 1629 | return service({ |
... | ... | @@ -1657,6 +1649,15 @@ export default { |
1657 | 1649 | responseType: 'arraybuffer', |
1658 | 1650 | }); |
1659 | 1651 | }, |
1652 | + // 教学班模版下载 | |
1653 | + tClassAndStudentTemplate(data) { | |
1654 | + return service({ | |
1655 | + url: setUpUrls.tClassAndStudentTemplate, | |
1656 | + method: "POST", | |
1657 | + data, | |
1658 | + responseType: 'arraybuffer', | |
1659 | + }); | |
1660 | + }, | |
1660 | 1661 | //教学班班级名册导出 |
1661 | 1662 | exportTClassAndStudent(data) { |
1662 | 1663 | return service({ |
... | ... | @@ -1715,4 +1716,6 @@ export default { |
1715 | 1716 | data |
1716 | 1717 | }); |
1717 | 1718 | }, |
1719 | + | |
1720 | + | |
1718 | 1721 | }; | ... | ... |
src/api/urls/apis.js
... | ... | @@ -417,4 +417,15 @@ export default { |
417 | 417 | exportExamMultiReport: "/api_html/teaching/exportExamMultiReport", |
418 | 418 | //查询即时测多班默认等级列表 |
419 | 419 | defaultLevels: "/api_html/teaching/defaultLevels", |
420 | + //教学班模版下载 | |
421 | + tClassAndStudentTemplate: "/api_html/school/manager/tClassAndStudentTemplate", | |
422 | + //教学班导出 | |
423 | + exportTClassAndStudent: "/api_html/school/manager/exportTClassAndStudent", | |
424 | + //删除随堂问报表 | |
425 | + deletePaperReport: "/api_html/teaching/deletePaperReport", | |
426 | + //获取即时测报表学生名单和题目列表 | |
427 | + listStudentsAndQuestions: "/api_html/teaching/listStudentsAndQuestions", | |
428 | + //提交即时测报表分数 | |
429 | + submitScore: "/api_html/teaching/submitScore", | |
430 | + | |
420 | 431 | } | ... | ... |
src/components/charts/lineChart.vue
... | ... | @@ -43,7 +43,7 @@ export default { |
43 | 43 | confine: true, |
44 | 44 | formatter(v) { |
45 | 45 | let html = `<p>${v.seriesName}</p>` |
46 | - html += `${v.marker} ${v.name}:${v.value}${that.tooltipFormatter?'%':''}` | |
46 | + html += `${v.marker} ${v.name}:${Number(v.value)}${that.tooltipFormatter?'%':''}` | |
47 | 47 | return html |
48 | 48 | }, |
49 | 49 | }, | ... | ... |
src/components/charts/pieChart.vue
... | ... | @@ -8,6 +8,7 @@ export default { |
8 | 8 | props: { |
9 | 9 | id: String, |
10 | 10 | params: Array, |
11 | + tooltipFormatter:false | |
11 | 12 | }, |
12 | 13 | watch: { |
13 | 14 | params: { |
... | ... | @@ -38,7 +39,7 @@ export default { |
38 | 39 | trigger: "item", |
39 | 40 | confine: true, |
40 | 41 | formatter(v) { |
41 | - return `${v.marker} ${v.name}:${v.value}` | |
42 | + return `${v.marker} ${v.name}:${v.value}${that.tooltipFormatter?'%':''}` | |
42 | 43 | }, |
43 | 44 | }, |
44 | 45 | legend: { | ... | ... |
src/components/charts/radarChart.vue
... | ... | @@ -8,6 +8,7 @@ export default { |
8 | 8 | props: { |
9 | 9 | id: String, |
10 | 10 | params: Object, |
11 | + tooltipFormatter:false | |
11 | 12 | }, |
12 | 13 | watch: { |
13 | 14 | params: { |
... | ... | @@ -42,7 +43,7 @@ export default { |
42 | 43 | let oHtml = `<p>${marker}${param.name}</p>` |
43 | 44 | param.value.map((item, index) => { |
44 | 45 | if (that.params.indicator[index].name) { |
45 | - oHtml += `<p>${that.params.indicator[index].name}:${item}</p>` | |
46 | + oHtml += `<p>${that.params.indicator[index].name}:${Number(item)}${that.tooltipFormatter?'%':''}</p>` | |
46 | 47 | } |
47 | 48 | }) |
48 | 49 | return oHtml | ... | ... |
src/components/exportDia.vue
1 | 1 | <template> |
2 | 2 | <div> |
3 | - <el-dialog :close-on-click-modal="false" :visible.sync="diaShow" width="360px" :show-close="false"> | |
3 | + <el-dialog | |
4 | + :close-on-click-modal="false" | |
5 | + :visible.sync="diaShow" | |
6 | + width="360px" | |
7 | + :show-close="false" | |
8 | + > | |
4 | 9 | <i class="el-icon-close" @click="closeDia"></i> |
5 | 10 | <div v-show="exportType == 1"> |
6 | 11 | <div class="down-item"> |
7 | - <p class="tit">是否将学生表现折线图一起导出</p> | |
12 | + <p class="tit">是否将学生表现{{ type }}一起导出</p> | |
8 | 13 | <el-radio-group v-model="downType" @change="changeDownType"> |
9 | 14 | <el-radio :label="1">不导出</el-radio> |
10 | 15 | <el-radio :label="2">导出</el-radio> |
... | ... | @@ -20,27 +25,57 @@ |
20 | 25 | </div> |
21 | 26 | <ul v-show="exportType == 2"> |
22 | 27 | <p class="export-tit">选择学生</p> |
23 | - <el-table :data="exportStudent" @selection-change="handleSelectionChange" :max-height="300"> | |
28 | + <el-table | |
29 | + :data="exportStudent" | |
30 | + @selection-change="handleSelectionChange" | |
31 | + :max-height="300" | |
32 | + > | |
24 | 33 | <el-table-column type="selection"></el-table-column> |
25 | - <el-table-column prop="studentName" label="姓名" align="center"></el-table-column> | |
34 | + <el-table-column | |
35 | + prop="studentName" | |
36 | + label="姓名" | |
37 | + align="center" | |
38 | + ></el-table-column> | |
26 | 39 | <el-table-column label="班名" align="center"> |
27 | 40 | <template slot-scope="scoped"> |
28 | 41 | <span v-if="scoped.row.classRank || scoped.row.rank">{{ |
29 | - scoped.row.classRank || scoped.row.rank }}</span> | |
30 | - <span v-else>{{ scoped.row.examList && scoped.row.examList[0].classRank }}</span> | |
42 | + scoped.row.classRank || scoped.row.rank | |
43 | + }}</span> | |
44 | + <span v-else>{{ | |
45 | + scoped.row.examList && scoped.row.examList[0].classRank | |
46 | + }}</span> | |
31 | 47 | </template> |
32 | 48 | </el-table-column> |
33 | - <el-table-column prop="correctRate" :label="this.lastLabel" align="center"><template slot-scope="scoped"> | |
34 | - <span v-if="scoped.row.correctRate || scoped.row.scoringRate">{{ | |
35 | - scoped.row.correctRate || scoped.row.scoringRate }}%</span> | |
36 | - <span v-else>{{ scoped.row.examList && scoped.row.examList[0].score }}</span> | |
37 | - </template></el-table-column> | |
49 | + <el-table-column :label="this.lastLabel" align="center" | |
50 | + ><template slot-scope="scoped"> | |
51 | + <span v-if="!isNaN(scoped.row.correctRate)" | |
52 | + >{{ scoped.row.correctRate }}%</span | |
53 | + > | |
54 | + <span v-else-if="!isNaN(scoped.row.scoringRate)"> | |
55 | + {{ scoped.row.scoringRate }}% | |
56 | + </span> | |
57 | + <span v-else>{{ | |
58 | + scoped.row.examList && scoped.row.examList[0].score | |
59 | + }}</span> | |
60 | + </template></el-table-column | |
61 | + > | |
38 | 62 | </el-table> |
39 | 63 | </ul> |
40 | 64 | <div class="dialog-footer" slot="footer"> |
41 | - <el-button v-show="exportType == 2" size="small" type="primary" round @click="exportData(10)">导出前十</el-button> | |
42 | - <el-button size="small" type="primary" round @click="exportData(0)">确 定</el-button> | |
43 | - <el-button size="small" type="danger" round @click="cancel">取 消</el-button> | |
65 | + <el-button | |
66 | + v-show="exportType == 2" | |
67 | + size="small" | |
68 | + type="primary" | |
69 | + round | |
70 | + @click="exportData(10)" | |
71 | + >导出前十</el-button | |
72 | + > | |
73 | + <el-button size="small" type="primary" round @click="exportData(0)" | |
74 | + >确 定</el-button | |
75 | + > | |
76 | + <el-button size="small" type="danger" round @click="cancel" | |
77 | + >取 消</el-button | |
78 | + > | |
44 | 79 | </div> |
45 | 80 | </el-dialog> |
46 | 81 | </div> |
... | ... | @@ -49,64 +84,67 @@ |
49 | 84 | export default { |
50 | 85 | name: "exportDia", |
51 | 86 | props: { |
87 | + type: { | |
88 | + type: String, | |
89 | + default: "折线图", | |
90 | + }, | |
52 | 91 | diaShow: Boolean, |
53 | 92 | exportStudent: Array, |
54 | 93 | lastLabel: { |
55 | 94 | type: String, |
56 | - default: '总正确率' | |
57 | - } | |
95 | + default: "总正确率", | |
96 | + }, | |
58 | 97 | }, |
59 | 98 | data() { |
60 | 99 | return { |
61 | 100 | downType: 1, |
62 | 101 | exportType: 1, |
63 | 102 | multipleSelection: [], |
64 | - } | |
103 | + }; | |
65 | 104 | }, |
66 | 105 | watch: { |
67 | 106 | diaShow: { |
68 | 107 | handler: function (nVal) { |
69 | 108 | if (nVal) { |
70 | - this.downType = 1 | |
109 | + this.downType = 1; | |
71 | 110 | } |
72 | 111 | }, |
73 | - immediate: true | |
74 | - } | |
75 | - | |
112 | + immediate: true, | |
113 | + }, | |
76 | 114 | }, |
77 | 115 | methods: { |
78 | 116 | changeDownType() { |
79 | - this.exportType = 1 | |
117 | + this.exportType = 1; | |
80 | 118 | }, |
81 | 119 | handleSelectionChange(val) { |
82 | - this.multipleSelection = val | |
120 | + this.multipleSelection = val; | |
83 | 121 | }, |
84 | 122 | exportData(length) { |
85 | - let studentIds = [] | |
123 | + let studentIds = []; | |
86 | 124 | if (length) { |
87 | - studentIds = this.exportStudent.slice(0, 10).map(item => { | |
88 | - return item.studentId | |
89 | - }) | |
125 | + studentIds = this.exportStudent.slice(0, 10).map((item) => { | |
126 | + return item.studentId; | |
127 | + }); | |
90 | 128 | } else { |
91 | - studentIds = this.multipleSelection.map(item => { | |
92 | - return item.studentId | |
93 | - }) | |
129 | + studentIds = this.multipleSelection.map((item) => { | |
130 | + return item.studentId; | |
131 | + }); | |
94 | 132 | } |
95 | - this.$emit('exportData', this.downType==1?null:studentIds) | |
133 | + this.$emit("exportData", this.downType == 1 ? null : studentIds); | |
96 | 134 | }, |
97 | 135 | cancel() { |
98 | 136 | if (this.exportType == 2) { |
99 | - this.exportType = 1 | |
137 | + this.exportType = 1; | |
100 | 138 | } else { |
101 | - this.$emit('cancel') | |
139 | + this.$emit("cancel"); | |
102 | 140 | } |
103 | 141 | }, |
104 | 142 | closeDia() { |
105 | - this.$emit('cancel') | |
106 | - this.exportType = 1 | |
107 | - } | |
108 | - } | |
109 | -} | |
143 | + this.$emit("cancel"); | |
144 | + this.exportType = 1; | |
145 | + }, | |
146 | + }, | |
147 | +}; | |
110 | 148 | </script> |
111 | 149 | <style lang="scss" scoped> |
112 | 150 | .el-dialog__wrapper { | ... | ... |
src/views/basic/ask/analysis.vue
... | ... | @@ -38,7 +38,7 @@ |
38 | 38 | icon="el-icon-printer">打印</el-button> |
39 | 39 | </p> |
40 | 40 | </div> |
41 | - <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" /> | |
41 | + <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" :type="types==3?'雷达图':'折线图'"/> | |
42 | 42 | </div> |
43 | 43 | </div> |
44 | 44 | </template> | ... | ... |
src/views/basic/ask/components/answerQustion.vue
... | ... | @@ -188,7 +188,7 @@ |
188 | 188 | :xAxis="xAxis" |
189 | 189 | :tooltipFormatter="true" |
190 | 190 | /> |
191 | - <RadarChart v-if="types == 3" id="askRadarChart" :params="chartData" /> | |
191 | + <RadarChart v-if="types == 3" id="askRadarChart" :params="chartData" :tooltipFormatter="true"/> | |
192 | 192 | </div> |
193 | 193 | </el-dialog> |
194 | 194 | </div> | ... | ... |
src/views/basic/setUp/clazz.vue
... | ... | @@ -6,14 +6,32 @@ |
6 | 6 | </template> |
7 | 7 | <template slot="btns" v-if="!code"> |
8 | 8 | <el-tooltip effect="dark" content="导入班级名单" placement="bottom"> |
9 | - <el-button type="primary" icon="el-icon-upload2" size="mini" plain circle @click="diaUp = true"></el-button> | |
9 | + <el-button | |
10 | + type="primary" | |
11 | + icon="el-icon-upload2" | |
12 | + size="mini" | |
13 | + plain | |
14 | + circle | |
15 | + @click="diaUp = true" | |
16 | + ></el-button> | |
10 | 17 | </el-tooltip> |
11 | 18 | <el-tooltip effect="dark" content="导出班级名单" placement="bottom"> |
12 | - <el-button type="primary" icon="el-icon-download" size="mini" plain circle | |
13 | - @click="exportTeacherExl"></el-button> | |
19 | + <el-button | |
20 | + type="primary" | |
21 | + icon="el-icon-download" | |
22 | + size="mini" | |
23 | + plain | |
24 | + circle | |
25 | + @click="exportTeacherExl" | |
26 | + ></el-button> | |
14 | 27 | </el-tooltip> |
15 | 28 | <el-tooltip effect="dark" content="分班" placement="bottom"> |
16 | - <img @click="toArchived" src="../../../assets/images/fenban.png" class="fenban" alt="" /> | |
29 | + <img | |
30 | + @click="toArchived" | |
31 | + src="../../../assets/images/fenban.png" | |
32 | + class="fenban" | |
33 | + alt="" | |
34 | + /> | |
17 | 35 | </el-tooltip> |
18 | 36 | </template> |
19 | 37 | </back-box> |
... | ... | @@ -28,17 +46,36 @@ |
28 | 46 | <div class="grade-item" v-for="(item, index) in dataList"> |
29 | 47 | <p class="h-title"> |
30 | 48 | <span>{{ item.gradeName }}</span> |
31 | - <span class="s-num" v-if="item.classList">(共{{ item.classList.length }}个班)</span> | |
32 | - <el-button class="sub-btn" type="info" size="mini" round plain @click="openSubject(item)">科目管理({{ | |
33 | - item.subjectNames.length }})</el-button> | |
49 | + <span class="s-num" v-if="item.classList" | |
50 | + >(共{{ item.classList.length }}个班)</span | |
51 | + > | |
52 | + <el-button | |
53 | + class="sub-btn" | |
54 | + type="info" | |
55 | + size="mini" | |
56 | + round | |
57 | + plain | |
58 | + @click="openSubject(item)" | |
59 | + >科目管理({{ item.subjectNames.length }})</el-button | |
60 | + > | |
34 | 61 | <span class="txt" v-if="index == 0">拖动班级进行排序</span> |
35 | 62 | </p> |
36 | - <draggable tag="ul" class="grade-info" v-model="item.classList" @start="start" @end="end(item)" v-bind="{ | |
37 | - animation: 300, | |
38 | - }"> | |
63 | + <draggable | |
64 | + tag="ul" | |
65 | + class="grade-info" | |
66 | + v-model="item.classList" | |
67 | + @start="start" | |
68 | + @end="end(item)" | |
69 | + v-bind="{ | |
70 | + animation: 300, | |
71 | + }" | |
72 | + > | |
39 | 73 | <li class="clazz-li" v-for="clazz in item.classList" :key="item.id"> |
40 | 74 | <div class="clazz-item"> |
41 | - <i class="el-icon-edit" @click.stop="setClass(clazz, item.gradeName)"></i> | |
75 | + <i | |
76 | + class="el-icon-edit" | |
77 | + @click.stop="setClass(clazz, item.gradeName)" | |
78 | + ></i> | |
42 | 79 | <p class="clazz-name ellipsis"> |
43 | 80 | {{ clazz.className }} |
44 | 81 | </p> |
... | ... | @@ -52,7 +89,12 @@ |
52 | 89 | </div> |
53 | 90 | </div> |
54 | 91 | </div> |
55 | - <el-dialog :close-on-click-modal="false" title="导入班级名单" :visible.sync="diaUp" width="600"> | |
92 | + <el-dialog | |
93 | + :close-on-click-modal="false" | |
94 | + title="导入班级名单" | |
95 | + :visible.sync="diaUp" | |
96 | + width="600" | |
97 | + > | |
56 | 98 | <upload :url="url" @upSuccess="upSuccess" fileName="班级名单"> |
57 | 99 | <p class="down-txt" slot="down"> |
58 | 100 | 通过Excel名单导入班级名单,点击 |
... | ... | @@ -63,8 +105,18 @@ |
63 | 105 | <el-button @click="diaUp = false">取 消</el-button> |
64 | 106 | </div> |
65 | 107 | </el-dialog> |
66 | - <el-dialog :close-on-click-modal="false" title="修改班级" :visible.sync="diaClass" width="400"> | |
67 | - <el-form ref="formClass" :model="formClass" :rules="rulesClass" label-width="160px"> | |
108 | + <el-dialog | |
109 | + :close-on-click-modal="false" | |
110 | + title="修改班级" | |
111 | + :visible.sync="diaClass" | |
112 | + width="400" | |
113 | + > | |
114 | + <el-form | |
115 | + ref="formClass" | |
116 | + :model="formClass" | |
117 | + :rules="rulesClass" | |
118 | + label-width="160px" | |
119 | + > | |
68 | 120 | <el-form-item label="所在年级:"> |
69 | 121 | <span>{{ formClass.gradeName }}</span> |
70 | 122 | </el-form-item> |
... | ... | @@ -80,14 +132,20 @@ |
80 | 132 | </el-form-item> |
81 | 133 | <el-form-item label="入学年份:"> |
82 | 134 | <el-col :span="10"> |
83 | - <el-date-picker v-model="formClass.intoSchoolYear" type="year" placeholder="选择年"> | |
135 | + <el-date-picker | |
136 | + v-model="formClass.intoSchoolYear" | |
137 | + type="year" | |
138 | + placeholder="选择年" | |
139 | + > | |
84 | 140 | </el-date-picker> |
85 | 141 | </el-col> |
86 | 142 | </el-form-item> |
87 | 143 | </el-form> |
88 | 144 | <div class="dialog-footer" slot="footer"> |
89 | 145 | <el-popconfirm title="确定删除该班级吗?" @confirm="_RemoveClass"> |
90 | - <el-button class="el-button-del" slot="reference" type="danger">删 除</el-button> | |
146 | + <el-button class="el-button-del" slot="reference" type="danger" | |
147 | + >删 除</el-button | |
148 | + > | |
91 | 149 | </el-popconfirm> |
92 | 150 | <el-button @click="_SaveClass" type="primary">确 定</el-button> |
93 | 151 | <el-button @click="diaClass = false">取 消</el-button> |
... | ... | @@ -95,10 +153,13 @@ |
95 | 153 | @confirm="_RemoveClass"> |
96 | 154 | <el-button class="el-button-del" slot="reference" type="danger" plain>删 除</el-button> |
97 | 155 | </el-popconfirm> --> |
98 | - | |
99 | 156 | </div> |
100 | 157 | </el-dialog> |
101 | - <el-dialog :close-on-click-modal="false" :visible.sync="diaSubject" width="400"> | |
158 | + <el-dialog | |
159 | + :close-on-click-modal="false" | |
160 | + :visible.sync="diaSubject" | |
161 | + width="400" | |
162 | + > | |
102 | 163 | <p slot="title" class="dia-tit"> |
103 | 164 | {{ formClass.gradeName }} |
104 | 165 | <span class="tips">(默认科目和已经有任课老师的科目不能删除)</span> |
... | ... | @@ -107,25 +168,54 @@ |
107 | 168 | <el-form-item label="科目:"> |
108 | 169 | <div class="subject-box"> |
109 | 170 | <el-checkbox-group v-model="subjectNames"> |
110 | - <p class="p1" v-for="(item, index) in subjectList" :key="item.default"> | |
171 | + <p | |
172 | + class="p1" | |
173 | + v-for="(item, index) in subjectList" | |
174 | + :key="item.default" | |
175 | + > | |
111 | 176 | <el-checkbox v-if="!item.checked" :label="item.value">{{ |
112 | 177 | item.value |
113 | 178 | }}</el-checkbox> |
114 | - <el-input class="sub-ipt" v-else v-model="item.value" @keyup.enter.native="_EditSub(item)"></el-input> | |
115 | - <i class="el-icon el-icon-edit" v-show="!item.checked" @click="item.checked = true"></i> | |
116 | - <i class="el-icon el-icon-check" v-show="item.checked" @click="_EditSub(item)"></i> | |
179 | + <el-input | |
180 | + class="sub-ipt" | |
181 | + v-else | |
182 | + v-model="item.value" | |
183 | + @keyup.enter.native="_EditSub(item)" | |
184 | + ></el-input> | |
185 | + <i | |
186 | + class="el-icon el-icon-edit" | |
187 | + v-show="!item.checked" | |
188 | + @click="item.checked = true" | |
189 | + ></i> | |
190 | + <i | |
191 | + class="el-icon el-icon-check" | |
192 | + v-show="item.checked" | |
193 | + @click="_EditSub(item)" | |
194 | + ></i> | |
117 | 195 | <!-- <i |
118 | 196 | class="el-icon el-icon-close" |
119 | 197 | v-show="item.checked" |
120 | 198 | @click="resetSub(item)" |
121 | 199 | ></i> --> |
122 | - <i v-show="!item.checked" class="el-icon el-icon-delete" @click="_DelSubject(item, index)"></i> | |
200 | + <i | |
201 | + v-show="!item.checked" | |
202 | + class="el-icon el-icon-delete" | |
203 | + @click="_DelSubject(item, index)" | |
204 | + ></i> | |
123 | 205 | </p> |
124 | 206 | </el-checkbox-group> |
125 | 207 | </div> |
126 | 208 | <el-col :span="8"> |
127 | - <el-input placeholder="添加科目" v-model.trim="subjectName" maxlength="30"> | |
128 | - <i slot="suffix" class="el-input__icon el-icon-plus" @click="addSubjectName"></i> | |
209 | + <el-input | |
210 | + placeholder="添加科目" | |
211 | + v-model.trim="subjectName" | |
212 | + maxlength="30" | |
213 | + > | |
214 | + <i | |
215 | + slot="suffix" | |
216 | + class="el-input__icon el-icon-plus" | |
217 | + @click="addSubjectName" | |
218 | + ></i> | |
129 | 219 | </el-input> |
130 | 220 | </el-col> |
131 | 221 | </el-form-item> |
... | ... | @@ -190,14 +280,14 @@ export default { |
190 | 280 | }, |
191 | 281 | computed: { |
192 | 282 | url: function () { |
193 | - let href = "" | |
283 | + let href = ""; | |
194 | 284 | if (this.type == 0) { |
195 | - href = "/api_html/school/manager/importClassAndStudent" | |
285 | + href = "/api_html/school/manager/importClassAndStudent"; | |
196 | 286 | } else { |
197 | - href = "/api_html/school/manager/importTClassAndStudent" | |
287 | + href = "/api_html/school/manager/importTClassAndStudent"; | |
198 | 288 | } |
199 | - return href | |
200 | - } | |
289 | + return href; | |
290 | + }, | |
201 | 291 | }, |
202 | 292 | async created() { |
203 | 293 | this.code = this.$store.getters.csCode; |
... | ... | @@ -330,7 +420,7 @@ export default { |
330 | 420 | this.subjectNames.splice(idx, 1, item.value); |
331 | 421 | item.default = item.value; |
332 | 422 | } else { |
333 | - item.value = item.default | |
423 | + item.value = item.default; | |
334 | 424 | this.$message.error(info); |
335 | 425 | } |
336 | 426 | }, |
... | ... | @@ -388,9 +478,9 @@ export default { |
388 | 478 | }, |
389 | 479 | async _QueryData() { |
390 | 480 | this.loading = true; |
391 | - this.dataList = [] | |
481 | + this.dataList = []; | |
392 | 482 | let { data, status, info } = await this.$request.classManager({ |
393 | - type: this.type | |
483 | + type: this.type, | |
394 | 484 | }); |
395 | 485 | this.loading = false; |
396 | 486 | if (status === 0) { |
... | ... | @@ -417,7 +507,10 @@ export default { |
417 | 507 | }, |
418 | 508 | //班级名单模版下载 |
419 | 509 | async downExcel() { |
420 | - const classAndStudentTemplate = this.type == 0 ? this.$request.classAndStudentTemplate : this.$request.tClassAndStudentTemplate | |
510 | + const classAndStudentTemplate = | |
511 | + this.type == 0 | |
512 | + ? this.$request.classAndStudentTemplate | |
513 | + : this.$request.tClassAndStudentTemplate; | |
421 | 514 | let data = await classAndStudentTemplate(); |
422 | 515 | if (data && !data.code) { |
423 | 516 | let blob = new Blob([data], { |
... | ... | @@ -430,7 +523,10 @@ export default { |
430 | 523 | }, |
431 | 524 | //班级名单下载 |
432 | 525 | async exportTeacherExl() { |
433 | - const exportClassAndStudent = this.type == 0 ? this.$request.exportClassAndStudent : this.$request.exportTClassAndStudent | |
526 | + const exportClassAndStudent = | |
527 | + this.type == 0 | |
528 | + ? this.$request.exportClassAndStudent | |
529 | + : this.$request.exportTClassAndStudent; | |
434 | 530 | this.loadingDown = true; |
435 | 531 | let data = await exportClassAndStudent(); |
436 | 532 | this.loadingDown = false; |
... | ... | @@ -473,7 +569,7 @@ export default { |
473 | 569 | |
474 | 570 | .el-button-del { |
475 | 571 | float: left; |
476 | - margin-left:80px | |
572 | + margin-left: 80px; | |
477 | 573 | } |
478 | 574 | |
479 | 575 | .h-title { |
... | ... | @@ -587,7 +683,7 @@ export default { |
587 | 683 | } |
588 | 684 | } |
589 | 685 | |
590 | - .is-checked~.el-icon-delete { | |
686 | + .is-checked ~ .el-icon-delete { | |
591 | 687 | display: none; |
592 | 688 | } |
593 | 689 | } | ... | ... |
src/views/basic/setUp/student.vue
... | ... | @@ -5,73 +5,160 @@ |
5 | 5 | <span>学生管理</span> |
6 | 6 | </template> |
7 | 7 | <template slot="btns" v-if="role == 'ROLE_XUEXIAO'"> |
8 | - <el-tooltip effect="dark" content="设置答题器" placement="bottom"> | |
9 | - <el-button type="primary" icon="el-icon-upload2" size="mini" plain circle @click="diaUp = true"></el-button> | |
8 | + <el-tooltip | |
9 | + effect="dark" | |
10 | + content="设置答题器" | |
11 | + placement="bottom" | |
12 | + v-show="query.classType == 0" | |
13 | + > | |
14 | + <el-button | |
15 | + type="primary" | |
16 | + icon="el-icon-upload2" | |
17 | + size="mini" | |
18 | + plain | |
19 | + circle | |
20 | + @click="diaUp = true" | |
21 | + ></el-button> | |
10 | 22 | </el-tooltip> |
11 | - <el-tooltip v-if="!code && query.classType == 0" effect="dark" content="添加学生" placement="bottom"> | |
12 | - <el-button type="primary" icon="el-icon-plus" size="mini" plain circle @click="openAddDia"></el-button> | |
23 | + <el-tooltip | |
24 | + v-if="!code && query.classType == 0" | |
25 | + effect="dark" | |
26 | + content="添加学生" | |
27 | + placement="bottom" | |
28 | + > | |
29 | + <el-button | |
30 | + type="primary" | |
31 | + icon="el-icon-plus" | |
32 | + size="mini" | |
33 | + plain | |
34 | + circle | |
35 | + @click="openAddDia" | |
36 | + ></el-button> | |
13 | 37 | </el-tooltip> |
14 | 38 | </template> |
15 | 39 | </back-box> |
16 | 40 | <div class="answer-header"> |
17 | 41 | <div class="sel-box"> |
18 | - <el-select class="sel" v-model="query.classType" @change="changeGrade(query.grade)" placeholder="选择类型"> | |
42 | + <el-select | |
43 | + class="sel" | |
44 | + v-model="query.classType" | |
45 | + @change="changeGrade(query.grade)" | |
46 | + placeholder="选择类型" | |
47 | + > | |
19 | 48 | <el-option label="行政班" :value="0"></el-option> |
20 | 49 | <el-option label="教学班" :value="1"></el-option> |
21 | 50 | </el-select> |
22 | - <el-select class="sel" v-model="query.grade" placeholder="选择年级" @change="changeGrade"> | |
51 | + <el-select | |
52 | + class="sel" | |
53 | + v-model="query.grade" | |
54 | + placeholder="选择年级" | |
55 | + @change="changeGrade" | |
56 | + > | |
23 | 57 | <el-option disabled label="全部" value=""></el-option> |
24 | - <el-option v-for="item in gradeList" :key="item.value" :label="item.label" :value="item.value"> | |
58 | + <el-option | |
59 | + v-for="item in gradeList" | |
60 | + :key="item.value" | |
61 | + :label="item.label" | |
62 | + :value="item.value" | |
63 | + > | |
25 | 64 | </el-option> |
26 | 65 | <el-option label="未分配" :value="80"></el-option> |
27 | 66 | <el-option label="已毕业" :value="81"></el-option> |
28 | 67 | </el-select> |
29 | - <el-input placeholder="请输入学生姓名" v-model="query.studentName" class="input-with-select" | |
30 | - @keyup.enter.native="_QueryData(1)"> | |
31 | - <el-button slot="append" icon="el-icon-search" @click="_QueryData(1)"></el-button> | |
68 | + <el-input | |
69 | + placeholder="请输入学生姓名" | |
70 | + v-model="query.studentName" | |
71 | + class="input-with-select" | |
72 | + @keyup.enter.native="_QueryData(1)" | |
73 | + > | |
74 | + <el-button | |
75 | + slot="append" | |
76 | + icon="el-icon-search" | |
77 | + @click="_QueryData(1)" | |
78 | + ></el-button> | |
32 | 79 | </el-input> |
33 | - <el-input placeholder="请输入学生学号" v-model="query.studentCode" class="input-with-select" | |
34 | - @keyup.enter.native="_QueryData(2)"> | |
35 | - <el-button slot="append" icon="el-icon-search" @click="_QueryData(2)"></el-button> | |
80 | + <el-input | |
81 | + placeholder="请输入学生学号" | |
82 | + v-model="query.studentCode" | |
83 | + class="input-with-select" | |
84 | + @keyup.enter.native="_QueryData(2)" | |
85 | + > | |
86 | + <el-button | |
87 | + slot="append" | |
88 | + icon="el-icon-search" | |
89 | + @click="_QueryData(2)" | |
90 | + ></el-button> | |
36 | 91 | </el-input> |
37 | 92 | </div> |
38 | 93 | </div> |
39 | - <p class="total" v-if="studentList.length && | |
40 | - (query.grade == 80 || query.grade == 81 || !query.grade) | |
41 | - "> | |
94 | + <p | |
95 | + class="total" | |
96 | + v-if=" | |
97 | + studentList.length && | |
98 | + (query.grade == 80 || query.grade == 81 || !query.grade) | |
99 | + " | |
100 | + > | |
42 | 101 | 共筛选出{{ studentList.length }}名学生。 |
43 | 102 | </p> |
44 | - <p class="total" v-if="getStuTotal && query.grade && query.grade != 80 && query.grade != 81 | |
45 | - "> | |
103 | + <p | |
104 | + class="total" | |
105 | + v-if=" | |
106 | + getStuTotal && query.grade && query.grade != 80 && query.grade != 81 | |
107 | + " | |
108 | + > | |
46 | 109 | 共筛选出{{ getStuTotal }}名学生。 |
47 | 110 | </p> |
48 | 111 | <div class="page-content"> |
49 | 112 | <div class="stu-box"> |
50 | - <div class="stu-list" v-show="query.grade && query.grade != 80 && query.grade != 81"> | |
113 | + <div | |
114 | + class="stu-list" | |
115 | + v-show="query.grade && query.grade != 80 && query.grade != 81" | |
116 | + > | |
51 | 117 | <div class="h-title">班级列表</div> |
52 | 118 | <ul class="stu-ul"> |
53 | - <li class="stu-item" v-for="(item, index) in classList" :key="item.id" | |
54 | - :class="query.classId == item.id ? 'active' : ''" @click="classDetail(item)"> | |
119 | + <li | |
120 | + class="stu-item" | |
121 | + v-for="(item, index) in classList" | |
122 | + :key="item.id" | |
123 | + :class="query.classId == item.id ? 'active' : ''" | |
124 | + @click="classDetail(item)" | |
125 | + > | |
55 | 126 | {{ item.className }}({{ item.studentCount }}) |
56 | 127 | </li> |
57 | 128 | </ul> |
58 | 129 | </div> |
59 | 130 | <div class="stu-detail" v-loading="loading"> |
60 | - <div class="clazz-detail" v-if="clazzDetail.stationSn && | |
61 | - query.grade && | |
62 | - query.grade != 80 && | |
63 | - query.grade != 81 | |
64 | - "> | |
131 | + <div | |
132 | + class="clazz-detail" | |
133 | + v-if=" | |
134 | + clazzDetail.stationSn && | |
135 | + query.grade && | |
136 | + query.grade != 80 && | |
137 | + query.grade != 81 | |
138 | + " | |
139 | + > | |
65 | 140 | <p>基站SN:{{ clazzDetail.stationSn }}</p> |
66 | 141 | <p>配对码:{{ clazzDetail.pairingCode }}</p> |
67 | 142 | <p>频点:{{ clazzDetail.frequency }}</p> |
68 | 143 | </div> |
69 | 144 | <ul class="s-ul"> |
70 | - <li class="s-li" v-for="(item, index) in studentList" :key="item.id"> | |
71 | - <el-popconfirm v-if="!code" title="确定删除吗?" @confirm="removeStu(item, index, $event)"> | |
145 | + <li | |
146 | + class="s-li" | |
147 | + v-for="(item, index) in studentList" | |
148 | + :key="item.id" | |
149 | + > | |
150 | + <el-popconfirm | |
151 | + v-if="!code" | |
152 | + title="确定删除吗?" | |
153 | + @confirm="removeStu(item, index, $event)" | |
154 | + > | |
72 | 155 | <i class="el-icon-delete" slot="reference"></i> |
73 | 156 | </el-popconfirm> |
74 | - <i class="el-icon-user-solid" v-if="!code && query.grade != 81" @click.stop="openChangeClazz(item)"></i> | |
157 | + <i | |
158 | + class="el-icon-user-solid" | |
159 | + v-if="!code && query.grade != 81" | |
160 | + @click.stop="openChangeClazz(item)" | |
161 | + ></i> | |
75 | 162 | <div class="s-li-box" @click="sayChange(item)"> |
76 | 163 | <p class="name"> |
77 | 164 | {{ item.studentName }} |
... | ... | @@ -80,13 +167,15 @@ |
80 | 167 | <template v-if="item.classList && item.classList.length"> |
81 | 168 | <template v-for="(clazz, index) in item.classList"> |
82 | 169 | <span v-if="index == 0"> |
83 | - {{ clazz.gradeName }}﹒{{ clazz.className }}</span> | |
84 | - </template></template> | |
170 | + {{ clazz.gradeName }}﹒{{ clazz.className }}</span | |
171 | + > | |
172 | + </template></template | |
173 | + > | |
85 | 174 | <template v-else> |
86 | 175 | {{ |
87 | 176 | item.status == 0 |
88 | - ? "未分配" | |
89 | - : item.status == 2 | |
177 | + ? "未分配" | |
178 | + : item.status == 2 | |
90 | 179 | ? "已毕业" |
91 | 180 | : "" |
92 | 181 | }} |
... | ... | @@ -98,15 +187,33 @@ |
98 | 187 | </div> |
99 | 188 | </li> |
100 | 189 | </ul> |
101 | - <el-empty :image-size="100" v-if="!studentList.length && loading == false" description="没有更多数据"></el-empty> | |
190 | + <el-empty | |
191 | + :image-size="100" | |
192 | + v-if="!studentList.length && loading == false" | |
193 | + description="没有更多数据" | |
194 | + ></el-empty> | |
102 | 195 | </div> |
103 | 196 | </div> |
104 | 197 | </div> |
105 | - <el-dialog :close-on-click-modal="false" title="学生调班" :visible.sync="diaChangeClass" width="400"> | |
106 | - <el-form class="form-box" ref="formStuCla" :model="formStuCla" :rules="rulesStuCla" label-width="160px"> | |
198 | + <el-dialog | |
199 | + :close-on-click-modal="false" | |
200 | + title="学生调班" | |
201 | + :visible.sync="diaChangeClass" | |
202 | + width="400" | |
203 | + > | |
204 | + <el-form | |
205 | + class="form-box" | |
206 | + ref="formStuCla" | |
207 | + :model="formStuCla" | |
208 | + :rules="rulesStuCla" | |
209 | + label-width="160px" | |
210 | + > | |
107 | 211 | <el-form-item label="学生姓名:"> |
108 | 212 | <el-col :span="10"> |
109 | - <el-input v-model="formStuCla.studentName" maxlength="20"></el-input> | |
213 | + <el-input | |
214 | + v-model="formStuCla.studentName" | |
215 | + maxlength="20" | |
216 | + ></el-input> | |
110 | 217 | </el-col> |
111 | 218 | </el-form-item> |
112 | 219 | <el-form-item label="当前班级:"> |
... | ... | @@ -114,16 +221,29 @@ |
114 | 221 | </el-form-item> |
115 | 222 | <el-form-item label="调到班级:" prop="classId"> |
116 | 223 | <el-col :span="10"> |
117 | - <el-select class="sel" v-model="formStuCla.classId" placeholder="选择年级"> | |
224 | + <el-select | |
225 | + class="sel" | |
226 | + v-model="formStuCla.classId" | |
227 | + placeholder="选择年级" | |
228 | + > | |
118 | 229 | <el-option disabled label="请选择" value=""></el-option> |
119 | - <el-option v-for="item in classList" :key="item.id" :label="item.className" :value="item.id"> | |
230 | + <el-option | |
231 | + v-for="item in classList" | |
232 | + :key="item.id" | |
233 | + :label="item.className" | |
234 | + :value="item.id" | |
235 | + > | |
120 | 236 | </el-option> |
121 | 237 | </el-select> |
122 | 238 | </el-col> |
123 | 239 | </el-form-item> |
124 | 240 | <el-form-item label="长学号:" prop="studentCode"> |
125 | 241 | <el-col :span="10"> |
126 | - <el-input maxlength="12" placeholder="输入学生长学号" v-model.trim="formStuCla.studentCode" /> | |
242 | + <el-input | |
243 | + maxlength="12" | |
244 | + placeholder="输入学生长学号" | |
245 | + v-model.trim="formStuCla.studentCode" | |
246 | + /> | |
127 | 247 | </el-col> |
128 | 248 | </el-form-item> |
129 | 249 | </el-form> |
... | ... | @@ -132,8 +252,17 @@ |
132 | 252 | <el-button @click="diaChangeClass = false">取 消</el-button> |
133 | 253 | </div> |
134 | 254 | </el-dialog> |
135 | - <el-dialog :close-on-click-modal="false" title="调班轨迹" :visible.sync="diaChangeClassTrack" width="400"> | |
136 | - <el-form :model="formClassTrack" label-width="160px" v-loading="loadingClassLogs"> | |
255 | + <el-dialog | |
256 | + :close-on-click-modal="false" | |
257 | + title="调班轨迹" | |
258 | + :visible.sync="diaChangeClassTrack" | |
259 | + width="400" | |
260 | + > | |
261 | + <el-form | |
262 | + :model="formClassTrack" | |
263 | + label-width="160px" | |
264 | + v-loading="loadingClassLogs" | |
265 | + > | |
137 | 266 | <el-form-item label="学生姓名:"> |
138 | 267 | <span>{{ formClassTrack.studentName }}</span> |
139 | 268 | </el-form-item> |
... | ... | @@ -150,19 +279,38 @@ |
150 | 279 | <el-button @click="diaChangeClassTrack = false">关 闭</el-button> |
151 | 280 | </div> |
152 | 281 | </el-dialog> |
153 | - <el-dialog :close-on-click-modal="false" title="添加学生" :visible.sync="diaStu" width="400"> | |
154 | - <el-form ref="formBox" class="form-box" :model="formStu" :rules="rulesStu" label-width="160px"> | |
282 | + <el-dialog | |
283 | + :close-on-click-modal="false" | |
284 | + title="添加学生" | |
285 | + :visible.sync="diaStu" | |
286 | + width="400" | |
287 | + > | |
288 | + <el-form | |
289 | + ref="formBox" | |
290 | + class="form-box" | |
291 | + :model="formStu" | |
292 | + :rules="rulesStu" | |
293 | + label-width="160px" | |
294 | + > | |
155 | 295 | <el-form-item label="所在班级:"> |
156 | 296 | <span>{{ formStu.className }}</span> |
157 | 297 | </el-form-item> |
158 | 298 | <el-form-item label="学生姓名:" prop="studentName"> |
159 | 299 | <el-col :span="10"> |
160 | - <el-input maxlength="30" placeholder="输入学生姓名" v-model.trim="formStu.studentName" /> | |
300 | + <el-input | |
301 | + maxlength="30" | |
302 | + placeholder="输入学生姓名" | |
303 | + v-model.trim="formStu.studentName" | |
304 | + /> | |
161 | 305 | </el-col> |
162 | 306 | </el-form-item> |
163 | 307 | <el-form-item label="长学号:" prop="studentCode"> |
164 | 308 | <el-col :span="10"> |
165 | - <el-input maxlength="12" placeholder="输入学生长学号" v-model.trim="formStu.studentCode" /> | |
309 | + <el-input | |
310 | + maxlength="12" | |
311 | + placeholder="输入学生长学号" | |
312 | + v-model.trim="formStu.studentCode" | |
313 | + /> | |
166 | 314 | </el-col> |
167 | 315 | </el-form-item> |
168 | 316 | <el-form-item label="短学号:"> |
... | ... | @@ -187,8 +335,19 @@ |
187 | 335 | <el-button @click="diaStu = false">取 消</el-button> |
188 | 336 | </div> |
189 | 337 | </el-dialog> |
190 | - <el-dialog :close-on-click-modal="false" title="学生答题器绑定" :visible.sync="diaUp" width="600"> | |
191 | - <upload id="downTeacher" :url="url" :params="{ type: query.classType }" @upSuccess="upSuccess" fileName="学生答题器绑定模板"> | |
338 | + <el-dialog | |
339 | + :close-on-click-modal="false" | |
340 | + title="学生答题器绑定" | |
341 | + :visible.sync="diaUp" | |
342 | + width="600" | |
343 | + > | |
344 | + <upload | |
345 | + id="downTeacher" | |
346 | + :url="url" | |
347 | + :params="{ type: query.classType }" | |
348 | + @upSuccess="upSuccess" | |
349 | + fileName="学生答题器绑定模板" | |
350 | + > | |
192 | 351 | <p class="down-txt" slot="down"> |
193 | 352 | 通过Excel名单导入学生答题器绑定模板,点击 |
194 | 353 | <el-link type="danger" @click="downExcel">模板下载</el-link> 。 |
... | ... | @@ -278,7 +437,6 @@ export default { |
278 | 437 | teacherGradeList: [], |
279 | 438 | }, |
280 | 439 | }; |
281 | - | |
282 | 440 | }, |
283 | 441 | computed: { |
284 | 442 | getStuTotal: function () { |
... | ... | @@ -448,7 +606,7 @@ export default { |
448 | 606 | const { data, status, info } = await this.$request.delStudent({ |
449 | 607 | type: this.query.classType, |
450 | 608 | studentId: obj.id, |
451 | - classId: this.query.classId | |
609 | + classId: this.query.classId, | |
452 | 610 | }); |
453 | 611 | if (status === 0) { |
454 | 612 | this.$message.success("删除成功"); |
... | ... | @@ -552,7 +710,7 @@ export default { |
552 | 710 | this.classList = []; |
553 | 711 | const { data, status, info } = await this.$request.schoolClassList({ |
554 | 712 | grade: value || this.query.grade, |
555 | - type: this.query.classType | |
713 | + type: this.query.classType, | |
556 | 714 | }); |
557 | 715 | if (status === 0) { |
558 | 716 | this.classList = (data.list && [...data?.list]) || []; |
... | ... | @@ -569,7 +727,7 @@ export default { |
569 | 727 | this.classList = []; |
570 | 728 | const { data, status, info } = await this.$request.schoolClassList({ |
571 | 729 | grade: value, |
572 | - type: this.query.classType | |
730 | + type: this.query.classType, | |
573 | 731 | }); |
574 | 732 | if (status === 0) { |
575 | 733 | this.classList = (data.list && [...data?.list]) || []; | ... | ... |
src/views/basic/setUp/teacher.vue
... | ... | @@ -6,41 +6,102 @@ |
6 | 6 | </template> |
7 | 7 | <template slot="btns" v-if="!code"> |
8 | 8 | <el-tooltip effect="dark" content="导入教师名单" placement="bottom"> |
9 | - <el-button type="primary" icon="el-icon-upload2" size="mini" plain circle @click="diaUp = true"></el-button> | |
9 | + <el-button | |
10 | + type="primary" | |
11 | + icon="el-icon-upload2" | |
12 | + size="mini" | |
13 | + plain | |
14 | + circle | |
15 | + @click="diaUp = true" | |
16 | + ></el-button> | |
10 | 17 | </el-tooltip> |
11 | 18 | <el-tooltip effect="dark" content="导出教师名单" placement="bottom"> |
12 | - <el-button type="primary" icon="el-icon-download" size="mini" plain circle | |
13 | - @click="exportTeacherExl"></el-button> | |
19 | + <el-button | |
20 | + type="primary" | |
21 | + icon="el-icon-download" | |
22 | + size="mini" | |
23 | + plain | |
24 | + circle | |
25 | + @click="exportTeacherExl" | |
26 | + ></el-button> | |
14 | 27 | </el-tooltip> |
15 | 28 | <el-tooltip effect="dark" content="添加教师" placement="bottom"> |
16 | - <el-button type="primary" icon="el-icon-plus" size="mini" plain circle @click="addTeacherDia"></el-button> | |
29 | + <el-button | |
30 | + type="primary" | |
31 | + icon="el-icon-plus" | |
32 | + size="mini" | |
33 | + plain | |
34 | + circle | |
35 | + @click="addTeacherDia" | |
36 | + ></el-button> | |
17 | 37 | </el-tooltip> |
18 | 38 | </template> |
19 | 39 | </back-box> |
20 | 40 | |
21 | 41 | <div class="answer-header"> |
22 | 42 | <div class="sel-box"> |
23 | - <el-select class="sel" v-model="query.classType" @change="changeType" placeholder="选择类型"> | |
43 | + <el-select | |
44 | + class="sel" | |
45 | + v-model="query.classType" | |
46 | + @change="changeType" | |
47 | + placeholder="选择类型" | |
48 | + > | |
24 | 49 | <el-option label="行政班" :value="0"></el-option> |
25 | 50 | <el-option label="教学班" :value="1"></el-option> |
26 | 51 | </el-select> |
27 | - <el-cascader size="small" class="sel sel2" clearable placeholder="选择范围" @change="_QueryData(1)" | |
28 | - v-model="query.gradeClassSub" :options="gradeClassSubList" :props="{ | |
52 | + <el-cascader | |
53 | + size="small" | |
54 | + class="sel sel2" | |
55 | + clearable | |
56 | + placeholder="选择范围" | |
57 | + @change="_QueryData(1)" | |
58 | + v-model="query.gradeClassSub" | |
59 | + :options="gradeClassSubList" | |
60 | + :props="{ | |
29 | 61 | multiple: true, |
30 | 62 | checkStrictly: true, |
31 | - }" collapse-tags :show-all-levels="false"></el-cascader> | |
32 | - <el-select class="sel" v-model="query.type" @change="_QueryData(4)" placeholder="选择类型"> | |
63 | + }" | |
64 | + collapse-tags | |
65 | + :show-all-levels="false" | |
66 | + ></el-cascader> | |
67 | + <el-select | |
68 | + class="sel" | |
69 | + v-model="query.type" | |
70 | + @change="_QueryData(4)" | |
71 | + placeholder="选择类型" | |
72 | + > | |
33 | 73 | <el-option disabled label="请选择" :value="9"></el-option> |
34 | 74 | <el-option label="已分配任课信息" :value="0"></el-option> |
35 | 75 | <el-option label="未分配任课信息" :value="1"></el-option> |
36 | 76 | </el-select> |
37 | - <el-input placeholder="请输入老师姓名" v-model="query.teacherName" class="input-with-select" maxlength="30" clearable | |
38 | - @keyup.enter.native="_QueryData(2)"> | |
39 | - <el-button slot="append" icon="el-icon-search" @click="_QueryData(2)"></el-button> | |
77 | + <el-input | |
78 | + placeholder="请输入老师姓名" | |
79 | + v-model="query.teacherName" | |
80 | + class="input-with-select" | |
81 | + maxlength="30" | |
82 | + clearable | |
83 | + @keyup.enter.native="_QueryData(2)" | |
84 | + > | |
85 | + <el-button | |
86 | + slot="append" | |
87 | + icon="el-icon-search" | |
88 | + @click="_QueryData(2)" | |
89 | + ></el-button> | |
40 | 90 | </el-input> |
41 | - <el-input type="number" oninput="if(value.length > 11) value = value.slice(0,11)" placeholder="请输入老师手机号" | |
42 | - v-model="query.phone" clearable class="input-with-select" @keyup.enter.native="_QueryData(3)"> | |
43 | - <el-button slot="append" icon="el-icon-search" @click="_QueryData(3)"></el-button> | |
91 | + <el-input | |
92 | + type="number" | |
93 | + oninput="if(value.length > 11) value = value.slice(0,11)" | |
94 | + placeholder="请输入老师手机号" | |
95 | + v-model="query.phone" | |
96 | + clearable | |
97 | + class="input-with-select" | |
98 | + @keyup.enter.native="_QueryData(3)" | |
99 | + > | |
100 | + <el-button | |
101 | + slot="append" | |
102 | + icon="el-icon-search" | |
103 | + @click="_QueryData(3)" | |
104 | + ></el-button> | |
44 | 105 | </el-input> |
45 | 106 | <!-- <el-button class="serach-box" round @click="_QueryData(4)" |
46 | 107 | >筛选</el-button |
... | ... | @@ -51,23 +112,50 @@ |
51 | 112 | 共筛选出{{ teacherList.length }}名教师。 |
52 | 113 | </p> |
53 | 114 | <div class="page-content"> |
54 | - <el-empty :image-size="100" v-if="!teacherList.length && loading == false" description="没有更多数据"></el-empty> | |
115 | + <el-empty | |
116 | + :image-size="100" | |
117 | + v-if="!teacherList.length && loading == false" | |
118 | + description="没有更多数据" | |
119 | + ></el-empty> | |
55 | 120 | <div class="teacher-box" v-loading="loading" v-else> |
56 | 121 | <div class="teacher-list"> |
57 | 122 | <p class="h-title" v-loading="removeLoading"> |
58 | - <el-checkbox v-show="showDel" v-model="AllTeacher" :indeterminate="indeterminate" | |
59 | - @change="handleCheckAllChange">{{ "" | |
60 | - }}</el-checkbox> | |
123 | + <el-checkbox | |
124 | + v-show="showDel" | |
125 | + v-model="AllTeacher" | |
126 | + :indeterminate="indeterminate" | |
127 | + @change="handleCheckAllChange" | |
128 | + >{{ "" }}</el-checkbox | |
129 | + > | |
61 | 130 | <span class="txt">教师列表</span> |
62 | - <img v-show="showDel" class="clear" @click="remove" src="../../../assets/images/shuazi.svg" alt=""> | |
131 | + <img | |
132 | + v-show="showDel" | |
133 | + class="clear" | |
134 | + @click="remove" | |
135 | + src="../../../assets/images/shuazi.svg" | |
136 | + alt="" | |
137 | + /> | |
63 | 138 | </p> |
64 | - <el-checkbox-group v-model="clearTeacher" @change="handleCheckedChange"> | |
139 | + <el-checkbox-group | |
140 | + v-model="clearTeacher" | |
141 | + @change="handleCheckedChange" | |
142 | + > | |
65 | 143 | <ul class="teacher-ul"> |
66 | - <li class="teacher-item" v-for="item in teacherList" :key="item.id" | |
67 | - :class="showTId == item.id ? 'active' : ''"> | |
68 | - <el-checkbox v-show="showDel" :label="item.id">{{ "" }}</el-checkbox> | |
69 | - <p @click="showTeacher(item)"> {{ item.realName | |
70 | - }}<template v-if="setClass(item)">({{ setClass(item) }})</template></p> | |
144 | + <li | |
145 | + class="teacher-item" | |
146 | + v-for="item in teacherList" | |
147 | + :key="item.id" | |
148 | + :class="showTId == item.id ? 'active' : ''" | |
149 | + > | |
150 | + <el-checkbox v-show="showDel" :label="item.id">{{ | |
151 | + "" | |
152 | + }}</el-checkbox> | |
153 | + <p @click="showTeacher(item)"> | |
154 | + {{ item.realName | |
155 | + }}<template v-if="setClass(item)" | |
156 | + >({{ setClass(item) }})</template | |
157 | + > | |
158 | + </p> | |
71 | 159 | </li> |
72 | 160 | </ul> |
73 | 161 | </el-checkbox-group> |
... | ... | @@ -75,7 +163,10 @@ |
75 | 163 | <div class="teacher-detail"> |
76 | 164 | <div class="icon-box" v-if="!code"> |
77 | 165 | <i class="icon el-icon-edit-outline" @click="editTeacher(1)"></i> |
78 | - <i class="icon el-icon-circle-plus-outline" @click="editTeacher(2)"></i> | |
166 | + <i | |
167 | + class="icon el-icon-circle-plus-outline" | |
168 | + @click="editTeacher(2)" | |
169 | + ></i> | |
79 | 170 | </div> |
80 | 171 | <div class="detail-top"> |
81 | 172 | <p class="p-item">手机号码:{{ teacherDetail.loginName }}</p> |
... | ... | @@ -85,18 +176,29 @@ |
85 | 176 | <p class="p-item"> |
86 | 177 | 性别:{{ |
87 | 178 | teacherDetail.sex == 1 |
88 | - ? "男" | |
89 | - : teacherDetail.sex == 2 | |
179 | + ? "男" | |
180 | + : teacherDetail.sex == 2 | |
90 | 181 | ? "女" |
91 | 182 | : "未知" |
92 | 183 | }} |
93 | 184 | </p> |
94 | 185 | </div> |
95 | - <div class="grade-box" v-if="teacherDetail.managerList && teacherDetail.managerList.length"> | |
186 | + <div | |
187 | + class="grade-box" | |
188 | + v-if="teacherDetail.managerList && teacherDetail.managerList.length" | |
189 | + > | |
96 | 190 | <p class="h-title">班主任</p> |
97 | 191 | <ul class="grade-info"> |
98 | - <li class="grade-li" v-for="item in teacherDetail.managerList" :key="item.classId"> | |
99 | - <el-popconfirm title="确定删除吗?" @confirm="delTeacherManager(item, 1)" v-if="!code"> | |
192 | + <li | |
193 | + class="grade-li" | |
194 | + v-for="item in teacherDetail.managerList" | |
195 | + :key="item.classId" | |
196 | + > | |
197 | + <el-popconfirm | |
198 | + title="确定删除吗?" | |
199 | + @confirm="delTeacherManager(item, 1)" | |
200 | + v-if="!code" | |
201 | + > | |
100 | 202 | <i class="el-icon-delete" slot="reference"></i> |
101 | 203 | </el-popconfirm> |
102 | 204 | <div class="grade-item"> |
... | ... | @@ -114,13 +216,25 @@ |
114 | 216 | </li> |
115 | 217 | </ul> |
116 | 218 | </div> |
117 | - <div class="grade-box" v-if="teacherDetail.teacherCourseList && | |
118 | - teacherDetail.teacherCourseList.length | |
119 | - "> | |
219 | + <div | |
220 | + class="grade-box" | |
221 | + v-if=" | |
222 | + teacherDetail.teacherCourseList && | |
223 | + teacherDetail.teacherCourseList.length | |
224 | + " | |
225 | + > | |
120 | 226 | <p class="h-title">任课老师</p> |
121 | 227 | <ul class="grade-info"> |
122 | - <li class="grade-li" v-for="item in teacherDetail.teacherCourseList" :key="item.classId + item.subjectName"> | |
123 | - <el-popconfirm title="确定删除吗?" @confirm="delTeacherManager(item, 2)" v-if="!code"> | |
228 | + <li | |
229 | + class="grade-li" | |
230 | + v-for="item in teacherDetail.teacherCourseList" | |
231 | + :key="item.classId + item.subjectName" | |
232 | + > | |
233 | + <el-popconfirm | |
234 | + title="确定删除吗?" | |
235 | + @confirm="delTeacherManager(item, 2)" | |
236 | + v-if="!code" | |
237 | + > | |
124 | 238 | <i class="el-icon-delete" slot="reference"></i> |
125 | 239 | </el-popconfirm> |
126 | 240 | <div class="grade-item"> |
... | ... | @@ -140,13 +254,25 @@ |
140 | 254 | </li> |
141 | 255 | </ul> |
142 | 256 | </div> |
143 | - <div class="grade-box" v-if="teacherDetail.teacherGradeList && | |
144 | - teacherDetail.teacherGradeList.length | |
145 | - "> | |
257 | + <!-- <div | |
258 | + class="grade-box" | |
259 | + v-if=" | |
260 | + teacherDetail.teacherGradeList && | |
261 | + teacherDetail.teacherGradeList.length | |
262 | + " | |
263 | + > | |
146 | 264 | <p class="h-title">备课组长</p> |
147 | - <ul class="grade-info" v-for="item in teacherDetail.teacherGradeList" :key="item.grade"> | |
265 | + <ul | |
266 | + class="grade-info" | |
267 | + v-for="item in teacherDetail.teacherGradeList" | |
268 | + :key="item.grade" | |
269 | + > | |
148 | 270 | <li class="grade-li"> |
149 | - <el-popconfirm title="确定删除吗?" @confirm="delTeacherManager(item, 3)" v-if="!code"> | |
271 | + <el-popconfirm | |
272 | + title="确定删除吗?" | |
273 | + @confirm="delTeacherManager(item, 3)" | |
274 | + v-if="!code" | |
275 | + > | |
150 | 276 | <i class="el-icon-delete" slot="reference"></i> |
151 | 277 | </el-popconfirm> |
152 | 278 | <div class="grade-item"> |
... | ... | @@ -156,12 +282,22 @@ |
156 | 282 | </div> |
157 | 283 | </li> |
158 | 284 | </ul> |
159 | - </div> | |
285 | + </div> --> | |
160 | 286 | </div> |
161 | 287 | </div> |
162 | 288 | </div> |
163 | - <el-dialog :close-on-click-modal="false" title="导入教师名单" :visible.sync="diaUp" width="600"> | |
164 | - <upload id="downTeacher" :url="url" @upSuccess="upSuccess" fileName="教师名单"> | |
289 | + <el-dialog | |
290 | + :close-on-click-modal="false" | |
291 | + title="导入教师名单" | |
292 | + :visible.sync="diaUp" | |
293 | + width="600" | |
294 | + > | |
295 | + <upload | |
296 | + id="downTeacher" | |
297 | + :url="url" | |
298 | + @upSuccess="upSuccess" | |
299 | + fileName="教师名单" | |
300 | + > | |
165 | 301 | <p class="down-txt" slot="down"> |
166 | 302 | 通过Excel名单导入教师名单,点击 |
167 | 303 | <el-link type="danger" @click="downExcel">模板下载</el-link> 。 |
... | ... | @@ -171,42 +307,116 @@ |
171 | 307 | <el-button @click="diaUp = false">取 消</el-button> |
172 | 308 | </div> |
173 | 309 | </el-dialog> |
174 | - <el-dialog :close-on-click-modal="false" :title="isAdd ? '添加教师' : setTercherType == 1 ? '编辑教师信息' : '管理班级' | |
175 | - " :visible.sync="diaTeacher" width="400" append-to-body> | |
176 | - <el-form class="form-box" ref="formTeacher" :model="formTeacher" :rules="rulesTeacher" label="" width="160px"> | |
310 | + <el-dialog | |
311 | + :close-on-click-modal="false" | |
312 | + :title=" | |
313 | + isAdd ? '添加教师' : setTercherType == 1 ? '编辑教师信息' : '管理班级' | |
314 | + " | |
315 | + :visible.sync="diaTeacher" | |
316 | + width="400" | |
317 | + append-to-body | |
318 | + > | |
319 | + <el-form | |
320 | + class="form-box" | |
321 | + ref="formTeacher" | |
322 | + :model="formTeacher" | |
323 | + :rules="rulesTeacher" | |
324 | + label="" | |
325 | + width="160px" | |
326 | + > | |
177 | 327 | <el-form-item v-show="!isAdd && setTercherType == 2" label="教师姓名:"> |
178 | 328 | <span>{{ formTeacher.teacherName }}</span> |
179 | 329 | </el-form-item> |
180 | - <el-form-item v-show="isAdd || (!isAdd && setTercherType == 1)" label="手机号码:" prop="loginName"> | |
330 | + <el-form-item | |
331 | + v-show="isAdd || (!isAdd && setTercherType == 1)" | |
332 | + label="手机号码:" | |
333 | + prop="loginName" | |
334 | + > | |
181 | 335 | <el-col :span="10"> |
182 | - <el-input type="number" oninput="if(value.length > 11) value = value.slice(0,11)" | |
183 | - v-model.trim="formTeacher.loginName" /> | |
336 | + <el-input | |
337 | + type="number" | |
338 | + oninput="if(value.length > 11) value = value.slice(0,11)" | |
339 | + v-model.trim="formTeacher.loginName" | |
340 | + /> | |
184 | 341 | </el-col> |
185 | 342 | </el-form-item> |
186 | - <el-form-item v-show="isAdd || (!isAdd && setTercherType == 1)" label="教师姓名:" prop="teacherName"> | |
343 | + <el-form-item | |
344 | + v-show="isAdd || (!isAdd && setTercherType == 1)" | |
345 | + label="教师姓名:" | |
346 | + prop="teacherName" | |
347 | + > | |
187 | 348 | <el-col :span="10"> |
188 | 349 | <el-input maxlength="30" v-model.trim="formTeacher.teacherName" /> |
189 | 350 | </el-col> |
190 | 351 | </el-form-item> |
191 | - <el-form-item v-show="isAdd || (!isAdd && setTercherType == 1)" label="性别:" prop="sex"> | |
352 | + <el-form-item | |
353 | + v-show="isAdd || (!isAdd && setTercherType == 1)" | |
354 | + label="性别:" | |
355 | + prop="sex" | |
356 | + > | |
192 | 357 | <el-radio-group v-model="formTeacher.sex"> |
193 | 358 | <el-radio :label="1">男</el-radio> |
194 | 359 | <el-radio :label="2">女</el-radio> |
195 | 360 | </el-radio-group> |
196 | 361 | </el-form-item> |
197 | - <el-form-item v-show="isAdd || (!isAdd && setTercherType == 2)" label="教师角色:" prop="roleList"> | |
198 | - <div class="role-list" v-for="(item, index) in formTeacher.roleList" :key="item.id"> | |
199 | - <el-select class="sel-c" v-model="item.roleId" placeholder="选择角色" @change="item.classId = []"> | |
200 | - <el-option v-for="item in teacherRoleList" :key="item.value" :label="item.label" :value="item.value"> | |
362 | + <el-form-item | |
363 | + v-show="isAdd || (!isAdd && setTercherType == 2)" | |
364 | + label="教师角色:" | |
365 | + prop="roleList" | |
366 | + > | |
367 | + <div | |
368 | + class="role-list" | |
369 | + v-for="(item, index) in formTeacher.roleList" | |
370 | + :key="item.id" | |
371 | + > | |
372 | + <el-select | |
373 | + class="sel-c" | |
374 | + v-model="item.roleId" | |
375 | + placeholder="选择角色" | |
376 | + @change="item.classId = []" | |
377 | + > | |
378 | + <el-option | |
379 | + v-for="item in teacherRoleList" | |
380 | + :key="item.value" | |
381 | + :label="item.label" | |
382 | + :value="item.value" | |
383 | + > | |
201 | 384 | </el-option> |
202 | 385 | </el-select> |
203 | - <el-cascader size="small" v-if="item.roleId == 6" class="sel-t" collapse clearable placeholder="选择年级-班级" | |
204 | - v-model="item.classId" :options="gradeClassList" :props="{ expandTrigger: 'hover' }"></el-cascader> | |
205 | - <el-cascader size="small" v-if="item.roleId == 7" class="sel-t teacher-cascader" collapse clearable | |
206 | - placeholder="选择年级-科目-班级" v-model="item.classId" :options="gradeSubListClass" | |
207 | - :props="{ expandTrigger: 'hover', multiple: true }" popperClass="cascader-clazz"></el-cascader> | |
208 | - <el-cascader size="small" v-if="item.roleId == 8" class="sel-t" collapse clearable placeholder="选择年级-科目" | |
209 | - v-model="item.classId" :options="gradeList" :props="{ expandTrigger: 'hover' }"></el-cascader> | |
386 | + <el-cascader | |
387 | + size="small" | |
388 | + v-if="item.roleId == 6" | |
389 | + class="sel-t" | |
390 | + collapse | |
391 | + clearable | |
392 | + placeholder="选择年级-班级" | |
393 | + v-model="item.classId" | |
394 | + :options="gradeClassList" | |
395 | + :props="{ expandTrigger: 'hover' }" | |
396 | + ></el-cascader> | |
397 | + <el-cascader | |
398 | + size="small" | |
399 | + v-if="item.roleId == 7" | |
400 | + class="sel-t teacher-cascader" | |
401 | + collapse | |
402 | + clearable | |
403 | + placeholder="选择年级-科目-班级" | |
404 | + v-model="item.classId" | |
405 | + :options="gradeSubListClass" | |
406 | + :props="{ expandTrigger: 'hover', multiple: true }" | |
407 | + popperClass="cascader-clazz" | |
408 | + ></el-cascader> | |
409 | + <el-cascader | |
410 | + size="small" | |
411 | + v-if="item.roleId == 8" | |
412 | + class="sel-t" | |
413 | + collapse | |
414 | + clearable | |
415 | + placeholder="选择年级-科目" | |
416 | + v-model="item.classId" | |
417 | + :options="gradeList" | |
418 | + :props="{ expandTrigger: 'hover' }" | |
419 | + ></el-cascader> | |
210 | 420 | <i class="el-icon-close" @click="removeRoleList(index)"></i> |
211 | 421 | </div> |
212 | 422 | <p class="add-box"> |
... | ... | @@ -262,10 +472,10 @@ export default { |
262 | 472 | value: 7, |
263 | 473 | label: "任课老师", |
264 | 474 | }, |
265 | - { | |
266 | - value: 8, | |
267 | - label: "备课组长", | |
268 | - }, | |
475 | + // { | |
476 | + // value: 8, | |
477 | + // label: "备课组长", | |
478 | + // }, | |
269 | 479 | ], |
270 | 480 | teacherRoleList: [ |
271 | 481 | //角色 |
... | ... | @@ -277,10 +487,10 @@ export default { |
277 | 487 | value: 7, |
278 | 488 | label: "任课老师", |
279 | 489 | }, |
280 | - { | |
281 | - value: 8, | |
282 | - label: "备课组长", | |
283 | - }, | |
490 | + // { | |
491 | + // value: 8, | |
492 | + // label: "备课组长", | |
493 | + // }, | |
284 | 494 | ], |
285 | 495 | teacherDetail: { |
286 | 496 | teacherName: "", |
... | ... | @@ -301,10 +511,10 @@ export default { |
301 | 511 | }, |
302 | 512 | rulesTeacher: { |
303 | 513 | teacherName: [ |
304 | - { required: true, message: "请输入联系电话", trigger: "blur" }, | |
514 | + { required: true, message: "请输入教师姓名", trigger: "blur" }, | |
305 | 515 | ], |
306 | 516 | loginName: [ |
307 | - { required: true, message: "请输入教师姓名", trigger: "blur" }, | |
517 | + { required: true, message: "请输入联系电话", trigger: "blur" }, | |
308 | 518 | ], |
309 | 519 | sex: [{ required: true, message: "请选择性别", trigger: "blur" }], |
310 | 520 | roleList: [ |
... | ... | @@ -315,17 +525,15 @@ export default { |
315 | 525 | AllTeacher: false, |
316 | 526 | indeterminate: false, |
317 | 527 | clearTeacher: [], |
318 | - removeLoading: false | |
319 | - | |
320 | - | |
528 | + removeLoading: false, | |
321 | 529 | }; |
322 | 530 | }, |
323 | 531 | computed: { |
324 | 532 | showDel: function () { |
325 | - return !this.query.gradeClassSub.some(item => { | |
326 | - return item.length > 1 | |
327 | - }) | |
328 | - } | |
533 | + return !this.query.gradeClassSub.some((item) => { | |
534 | + return item.length > 1; | |
535 | + }); | |
536 | + }, | |
329 | 537 | }, |
330 | 538 | async created() { |
331 | 539 | this.code = this.$store.getters.csCode; |
... | ... | @@ -335,14 +543,14 @@ export default { |
335 | 543 | }, |
336 | 544 | methods: { |
337 | 545 | async changeType() { |
338 | - this.query.gradeClassSub = [] | |
339 | - this.query.type = 0 | |
340 | - this.query.teacherName = "" | |
341 | - this.query.phone = "" | |
546 | + this.query.gradeClassSub = []; | |
547 | + this.query.type = 0; | |
548 | + this.query.teacherName = ""; | |
549 | + this.query.phone = ""; | |
342 | 550 | if (this.query.classType === 0) { |
343 | - this.teacherRoleList = [...this.RoleList] | |
551 | + this.teacherRoleList = [...this.RoleList]; | |
344 | 552 | } else { |
345 | - this.teacherRoleList = this.RoleList.slice(1, 3) | |
553 | + this.teacherRoleList = this.RoleList.slice(1, 3); | |
346 | 554 | } |
347 | 555 | |
348 | 556 | this._QueryData(6); |
... | ... | @@ -352,8 +560,8 @@ export default { |
352 | 560 | handleCheckAllChange(val) { |
353 | 561 | this.clearTeacher = val |
354 | 562 | ? this.teacherList.map((item) => { |
355 | - return item.id; | |
356 | - }) | |
563 | + return item.id; | |
564 | + }) | |
357 | 565 | : []; |
358 | 566 | this.indeterminate = false; |
359 | 567 | }, |
... | ... | @@ -366,24 +574,24 @@ export default { |
366 | 574 | //清除教师绑定班级信息 |
367 | 575 | async remove() { |
368 | 576 | if (!this.clearTeacher.length) { |
369 | - this.$message.warning("请选择要格式化的老师") | |
370 | - return | |
577 | + this.$message.warning("请选择要格式化的老师"); | |
578 | + return; | |
371 | 579 | } |
372 | - this.removeLoading = true | |
373 | - let grades = [] | |
374 | - this.query.gradeClassSub.map(item => { | |
580 | + this.removeLoading = true; | |
581 | + let grades = []; | |
582 | + this.query.gradeClassSub.map((item) => { | |
375 | 583 | if (item.length == 1) { |
376 | 584 | if (!grades.includes(item[0])) { |
377 | 585 | grades.push(item[0]); |
378 | 586 | } |
379 | 587 | } |
380 | - }) | |
588 | + }); | |
381 | 589 | const { data, status, info } = await this.$request.clearTeacherClasses({ |
382 | 590 | ids: this.clearTeacher, |
383 | 591 | type: this.query.classType, |
384 | - grades: grades | |
592 | + grades: grades, | |
385 | 593 | }); |
386 | - this.removeLoading = false | |
594 | + this.removeLoading = false; | |
387 | 595 | if (status === 0) { |
388 | 596 | this.$message.success(info); |
389 | 597 | this._QueryData(); |
... | ... | @@ -469,11 +677,11 @@ export default { |
469 | 677 | //添加教师 |
470 | 678 | addTeacher() { |
471 | 679 | if (this.setTercherType == 1) { |
472 | - delete this.rulesTeacher.roleList | |
680 | + delete this.rulesTeacher.roleList; | |
473 | 681 | } else { |
474 | 682 | this.rulesTeacher.roleList = [ |
475 | 683 | { required: true, message: "请选择角色信息", trigger: "blur" }, |
476 | - ] | |
684 | + ]; | |
477 | 685 | } |
478 | 686 | this.$refs.formTeacher.validate(async (valid) => { |
479 | 687 | if (valid) { |
... | ... | @@ -509,7 +717,7 @@ export default { |
509 | 717 | this.$message.error(res.info); |
510 | 718 | } |
511 | 719 | } else { |
512 | - console.log(valid) | |
720 | + console.log(valid); | |
513 | 721 | this.$message.warning("输入有误请检查!"); |
514 | 722 | return false; |
515 | 723 | } |
... | ... | @@ -733,7 +941,7 @@ export default { |
733 | 941 | query.teacherName.length ? "" : delete query.teacherName; |
734 | 942 | query.phone.length ? "" : delete query.phone; |
735 | 943 | } |
736 | - query.classType = this.query.classType | |
944 | + query.classType = this.query.classType; | |
737 | 945 | return query; |
738 | 946 | }, |
739 | 947 | async _QueryData(type) { |
... | ... | @@ -752,7 +960,7 @@ export default { |
752 | 960 | this.loading = true; |
753 | 961 | let query = this.setQuery(type); |
754 | 962 | this.teacherList = []; |
755 | - this.clearTeacher = [] | |
963 | + this.clearTeacher = []; | |
756 | 964 | const { data, status, info } = await this.$request.teacherList({ |
757 | 965 | ...query, |
758 | 966 | }); |
... | ... | @@ -780,10 +988,10 @@ export default { |
780 | 988 | type: this.query.classType, |
781 | 989 | }); |
782 | 990 | if (status === 0) { |
783 | - this.classList = [] | |
784 | - this.gradeClassList = [] | |
785 | - this.gradeClassSubList = [] | |
786 | - this.gradeSubListClass = [] | |
991 | + this.classList = []; | |
992 | + this.gradeClassList = []; | |
993 | + this.gradeClassSubList = []; | |
994 | + this.gradeSubListClass = []; | |
787 | 995 | this.gradeList = |
788 | 996 | data.list?.map((item) => { |
789 | 997 | let subList = item.subjectNames?.map((items) => { |
... | ... | @@ -792,6 +1000,7 @@ export default { |
792 | 1000 | label: items, |
793 | 1001 | }; |
794 | 1002 | }); |
1003 | + // 学校-年级 | |
795 | 1004 | this.gradeClassList.push({ |
796 | 1005 | value: item.grade, |
797 | 1006 | label: item.gradeName, |
... | ... | @@ -804,36 +1013,82 @@ export default { |
804 | 1013 | }; |
805 | 1014 | }), |
806 | 1015 | }); |
807 | - this.gradeClassSubList.push({ | |
808 | - value: item.grade, | |
809 | - label: item.gradeName, | |
810 | - id: item.grade, | |
811 | - children: item.classList.map((clazz) => { | |
812 | - return { | |
813 | - value: clazz.id, | |
814 | - label: clazz.className, | |
815 | - id: clazz.id, | |
816 | - children: [...subList], | |
817 | - }; | |
818 | - }), | |
819 | - }); | |
820 | - this.gradeSubListClass.push({ | |
821 | - value: item.grade, | |
822 | - label: item.gradeName, | |
823 | - id: item.grade, | |
824 | - children: item.subjectNames.map((items) => { | |
1016 | + | |
1017 | + if (this.query.classType == 0) { | |
1018 | + //学校-年级-科目 | |
1019 | + this.gradeClassSubList.push({ | |
1020 | + value: item.grade, | |
1021 | + label: item.gradeName, | |
1022 | + id: item.grade, | |
1023 | + children: item.classList.map((clazz) => { | |
1024 | + return { | |
1025 | + value: clazz.id, | |
1026 | + label: clazz.className, | |
1027 | + id: clazz.id, | |
1028 | + children: [...subList], | |
1029 | + }; | |
1030 | + }), | |
1031 | + }); | |
1032 | + //学校-科目-班级 | |
1033 | + this.gradeSubListClass.push({ | |
1034 | + value: item.grade, | |
1035 | + label: item.gradeName, | |
1036 | + id: item.grade, | |
1037 | + children: item.subjectNames.map((items) => { | |
1038 | + return { | |
1039 | + value: items, | |
1040 | + label: items, | |
1041 | + children: item.classList.map((clazz) => { | |
1042 | + return { | |
1043 | + value: clazz.id, | |
1044 | + label: clazz.className, | |
1045 | + }; | |
1046 | + }), | |
1047 | + }; | |
1048 | + }), | |
1049 | + }); | |
1050 | + } else { | |
1051 | + let subjectNames = item.classList.map((clazz) => { | |
825 | 1052 | return { |
826 | - value: items, | |
827 | - label: items, | |
828 | - children: item.classList.map((clazz) => { | |
829 | - return { | |
1053 | + value: clazz.subjectName, | |
1054 | + label: clazz.subjectName, | |
1055 | + children: [ | |
1056 | + { | |
830 | 1057 | value: clazz.id, |
831 | 1058 | label: clazz.className, |
832 | - }; | |
833 | - }), | |
1059 | + }, | |
1060 | + ], | |
834 | 1061 | }; |
835 | - }), | |
836 | - }); | |
1062 | + }); | |
1063 | + | |
1064 | + //学校-年级-科目 | |
1065 | + this.gradeClassSubList.push({ | |
1066 | + value: item.grade, | |
1067 | + label: item.gradeName, | |
1068 | + id: item.grade, | |
1069 | + children: item.classList.map((clazz) => { | |
1070 | + return { | |
1071 | + value: clazz.id, | |
1072 | + label: clazz.className, | |
1073 | + id: clazz.id, | |
1074 | + children: [ | |
1075 | + { | |
1076 | + value: clazz.subjectName, | |
1077 | + label: clazz.subjectName, | |
1078 | + }, | |
1079 | + ], | |
1080 | + }; | |
1081 | + }), | |
1082 | + }); | |
1083 | + | |
1084 | + this.gradeSubListClass.push({ | |
1085 | + value: item.grade, | |
1086 | + label: item.gradeName, | |
1087 | + id: item.grade, | |
1088 | + children: subjectNames, | |
1089 | + }); | |
1090 | + } | |
1091 | + | |
837 | 1092 | let classList = item.classList.map((clazz) => { |
838 | 1093 | return { |
839 | 1094 | value: clazz.id, |
... | ... | @@ -841,8 +1096,8 @@ export default { |
841 | 1096 | grade: item.grade, |
842 | 1097 | gradeName: item.gradeName, |
843 | 1098 | }; |
844 | - }) | |
845 | - this.classList = this.classList.concat(classList) | |
1099 | + }); | |
1100 | + this.classList = this.classList.concat(classList); | |
846 | 1101 | return { |
847 | 1102 | value: item.grade, |
848 | 1103 | label: item.gradeName, |
... | ... | @@ -933,7 +1188,7 @@ export default { |
933 | 1188 | width: 18px; |
934 | 1189 | margin-right: 10px; |
935 | 1190 | cursor: pointer; |
936 | - transition: all .3s; | |
1191 | + transition: all 0.3s; | |
937 | 1192 | |
938 | 1193 | &:hover { |
939 | 1194 | transform: scale(1.1); |
... | ... | @@ -1001,7 +1256,7 @@ export default { |
1001 | 1256 | flex-wrap: wrap; |
1002 | 1257 | padding: 20px 20px 0; |
1003 | 1258 | |
1004 | - &>li { | |
1259 | + & > li { | |
1005 | 1260 | margin-right: 20px; |
1006 | 1261 | margin-bottom: 20px; |
1007 | 1262 | position: relative; | ... | ... |
src/views/basic/test/components/multipleSubTest.vue
... | ... | @@ -38,7 +38,7 @@ |
38 | 38 | <RadarChart id="radarChart" :params="chartData" /> |
39 | 39 | </div> |
40 | 40 | </el-dialog> |
41 | - <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" /> | |
41 | + <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" type="雷达图"/> | |
42 | 42 | </div> |
43 | 43 | </template> |
44 | 44 | <script> | ... | ... |
src/views/basic/test/components/multipleTest.vue
1 | 1 | <template> |
2 | 2 | <div class="table-box" ref="main" v-loading="loading"> |
3 | 3 | <div id="print-content"> |
4 | - <el-table :max-height="tableMaxHeight" :data="tableData" border style="width: 100%"> | |
5 | - <el-table-column prop="studentCode" label="学号" align="center" fixed></el-table-column> | |
4 | + <el-table | |
5 | + :max-height="tableMaxHeight" | |
6 | + :data="tableData" | |
7 | + border | |
8 | + style="width: 100%" | |
9 | + > | |
10 | + <el-table-column | |
11 | + prop="studentCode" | |
12 | + label="学号" | |
13 | + align="center" | |
14 | + fixed | |
15 | + ></el-table-column> | |
6 | 16 | <el-table-column prop="studentName" label="姓名" fixed align="center"> |
7 | - <template slot-scope="scoped"><span class="click-b" @click="toPortrait(scoped.row)"> | |
17 | + <template slot-scope="scoped" | |
18 | + ><span class="click-b" @click="toPortrait(scoped.row)"> | |
8 | 19 | {{ scoped.row.studentName }} |
9 | - </span></template></el-table-column> | |
10 | - <el-table-column align="center" v-for="(item, index) in answerList" :key="index" :label="item.title"> | |
11 | - <el-table-column :prop="'score' + index" :label="index == 0 ? '总分' : '成绩'" align="center" | |
12 | - :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | |
13 | - <el-table-column :prop="'classRank' + index" label="班名" align="center" sortable | |
14 | - :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | |
20 | + </span></template | |
21 | + ></el-table-column | |
22 | + > | |
23 | + <el-table-column | |
24 | + align="center" | |
25 | + v-for="(item, index) in answerList" | |
26 | + :key="index" | |
27 | + :label="item.title" | |
28 | + > | |
29 | + <el-table-column | |
30 | + :prop="'score' + index" | |
31 | + :label="index == 0 ? '总分' : '成绩'" | |
32 | + align="center" | |
33 | + :class-name="index % 2 == 0 ? 'bg' : ''" | |
34 | + ></el-table-column> | |
35 | + <el-table-column | |
36 | + :prop="'classRank' + index" | |
37 | + label="班名" | |
38 | + align="center" | |
39 | + sortable | |
40 | + :class-name="index % 2 == 0 ? 'bg' : ''" | |
41 | + ></el-table-column> | |
15 | 42 | </el-table-column> |
16 | 43 | <el-table-column label="查看折线图" align="center"> |
17 | 44 | <template slot-scope="scoped"> |
18 | - <el-button @click="openChart(scoped.row)" type="primary" size="mini" circle | |
19 | - icon="el-icon-arrow-right"></el-button> | |
45 | + <el-button | |
46 | + @click="openChart(scoped.row)" | |
47 | + type="primary" | |
48 | + size="mini" | |
49 | + circle | |
50 | + icon="el-icon-arrow-right" | |
51 | + ></el-button> | |
20 | 52 | </template> |
21 | 53 | </el-table-column> |
22 | 54 | </el-table> |
23 | 55 | </div> |
24 | 56 | <div class="down"> |
25 | - <el-button @click="openDown" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
26 | - <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round | |
27 | - icon="el-icon-printer">打印</el-button> | |
57 | + <el-button | |
58 | + @click="openDown" | |
59 | + type="primary" | |
60 | + plain | |
61 | + round | |
62 | + icon="fa fa-cloud-download" | |
63 | + >导出报表</el-button | |
64 | + > | |
65 | + <el-button | |
66 | + v-if="!this.$store.getters.code" | |
67 | + @click="print" | |
68 | + type="primary" | |
69 | + plain | |
70 | + round | |
71 | + icon="el-icon-printer" | |
72 | + >打印</el-button | |
73 | + > | |
28 | 74 | </div> |
29 | - <el-dialog class="chart-dia" :visible.sync="chartDia" :title="chartTitle" width="800"> | |
75 | + <el-dialog | |
76 | + class="chart-dia" | |
77 | + :visible.sync="chartDia" | |
78 | + :title="chartTitle" | |
79 | + width="800" | |
80 | + > | |
30 | 81 | <div class="chart-box"> |
31 | - <LineChart id="lineChart" :params="chartData" :xAxis="xAxis" :formatterYAxis="false" /> | |
82 | + <LineChart | |
83 | + id="lineChart" | |
84 | + :params="chartData" | |
85 | + :xAxis="xAxis" | |
86 | + :formatterYAxis="false" | |
87 | + /> | |
32 | 88 | </div> |
33 | 89 | </el-dialog> |
34 | - <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" | |
35 | - lastLabel="总分" /> | |
90 | + <ExportDia | |
91 | + :exportStudent="exportStudent" | |
92 | + :diaShow="diaShow" | |
93 | + @cancel="cancel" | |
94 | + @exportData="exportData" | |
95 | + lastLabel="总分" | |
96 | + /> | |
36 | 97 | </div> |
37 | 98 | <!-- 单科多卷 --> |
38 | 99 | </template> |
39 | 100 | <script> |
40 | -import LineChart from "@/components/charts/lineChart" | |
101 | +import LineChart from "@/components/charts/lineChart"; | |
41 | 102 | import { downloadFile, tablePrint } from "@/utils"; |
42 | 103 | export default { |
43 | 104 | components: { LineChart }, |
... | ... | @@ -61,23 +122,23 @@ export default { |
61 | 122 | |
62 | 123 | //导出相关 |
63 | 124 | diaShow: false, |
64 | - exportStudent: [] | |
65 | - } | |
125 | + exportStudent: [], | |
126 | + }; | |
66 | 127 | }, |
67 | 128 | computed: { |
68 | 129 | chartTitle: function () { |
69 | - return `${this.studentName}-${this.subjectName}-多课时作答表现图` | |
70 | - } | |
130 | + return `${this.studentName}-${this.subjectName}-多课时作答表现图`; | |
131 | + }, | |
71 | 132 | }, |
72 | 133 | created() { |
73 | - this.phaseExamReport() | |
134 | + this.phaseExamReport(); | |
74 | 135 | }, |
75 | 136 | mounted() { |
76 | 137 | this.tableMaxHeight = this.$refs.main.offsetHeight; |
77 | 138 | }, |
78 | 139 | methods: { |
79 | 140 | print() { |
80 | - tablePrint("print-content", this.subjectName + '汇总报表'); | |
141 | + tablePrint("print-content", this.subjectName + "汇总报表"); | |
81 | 142 | }, |
82 | 143 | toPortrait(obj) { |
83 | 144 | //暂时不上线 |
... | ... | @@ -117,33 +178,32 @@ export default { |
117 | 178 | }, |
118 | 179 | //查看折线图 |
119 | 180 | openChart(obj) { |
120 | - this.studentName = obj.studentName | |
121 | - this.chartDia = true | |
122 | - let score = [] | |
123 | - let classRank = [] | |
124 | - let avgScore = [] | |
125 | - const examList = obj.examList.slice(1, obj.examList.length) | |
126 | - this.xAxis = examList.map(item => { | |
127 | - score.push(item.score) | |
128 | - classRank.push(item.classRank) | |
129 | - avgScore.push(item.avgScore) | |
130 | - return item.title | |
131 | - }) | |
181 | + this.studentName = obj.studentName; | |
182 | + this.chartDia = true; | |
183 | + let score = []; | |
184 | + let classRank = []; | |
185 | + let avgScore = []; | |
186 | + const examList = obj.examList.slice(1, obj.examList.length); | |
187 | + this.xAxis = examList.map((item) => { | |
188 | + score.push(item.score); | |
189 | + classRank.push(item.classRank); | |
190 | + avgScore.push(item.avgScore); | |
191 | + return item.title; | |
192 | + }); | |
132 | 193 | this.chartData = [ |
133 | 194 | { |
134 | 195 | name: "班级排名", |
135 | - value: classRank | |
196 | + value: classRank, | |
136 | 197 | }, |
137 | 198 | { |
138 | 199 | name: "班平均分", |
139 | - value: avgScore | |
200 | + value: avgScore, | |
140 | 201 | }, |
141 | 202 | { |
142 | 203 | name: "个人成绩", |
143 | - value: score | |
204 | + value: score, | |
144 | 205 | }, |
145 | - ] | |
146 | - | |
206 | + ]; | |
147 | 207 | }, |
148 | 208 | async phaseExamReport() { |
149 | 209 | this.loading = true; |
... | ... | @@ -154,7 +214,7 @@ export default { |
154 | 214 | const { data, status, info } = await phaseExamReport({ |
155 | 215 | classId: this.classId, |
156 | 216 | examIds: this.ids, |
157 | - subjectName: this.subjectName | |
217 | + subjectName: this.subjectName, | |
158 | 218 | }); |
159 | 219 | this.loading = false; |
160 | 220 | if (status === 0) { |
... | ... | @@ -188,7 +248,7 @@ export default { |
188 | 248 | }); |
189 | 249 | this.answerList = dataList; |
190 | 250 | |
191 | - this.exportStudent = [...this.tableData] | |
251 | + this.exportStudent = [...this.tableData]; | |
192 | 252 | } else { |
193 | 253 | this.$message.error(info); |
194 | 254 | } |
... | ... | @@ -203,22 +263,23 @@ export default { |
203 | 263 | async exportData(arr) { |
204 | 264 | if (this.exportLoading == true) return; |
205 | 265 | this.exportLoading = true; |
206 | - let studentIds = [...arr] | |
266 | + let studentIds = arr; | |
207 | 267 | let query = {}; |
208 | - if(studentIds != null){ | |
268 | + if (studentIds != null) { | |
209 | 269 | if (studentIds.length > 0) { |
210 | - query.studentIds = studentIds | |
270 | + query.studentIds = studentIds; | |
211 | 271 | } else { |
212 | - query.studentIds = [] | |
272 | + query.studentIds = []; | |
213 | 273 | } |
214 | 274 | } |
215 | - const exportPhaseExamReport = this.role == "ROLE_PERSONAL" | |
216 | - ? this.$request.pExportPhaseExamReport | |
217 | - : this.$request.exportPhaseExamReport; | |
275 | + const exportPhaseExamReport = | |
276 | + this.role == "ROLE_PERSONAL" | |
277 | + ? this.$request.pExportPhaseExamReport | |
278 | + : this.$request.exportPhaseExamReport; | |
218 | 279 | const data = await exportPhaseExamReport({ |
219 | 280 | classId: this.classId, |
220 | 281 | examIds: this.ids, |
221 | - ...query | |
282 | + ...query, | |
222 | 283 | }); |
223 | 284 | this.exportLoading = false; |
224 | 285 | if (data) { |
... | ... | @@ -227,12 +288,12 @@ export default { |
227 | 288 | }); |
228 | 289 | downloadFile("即时测-单科多卷报表.xlsx", blob); |
229 | 290 | this.$message.success("下载成功"); |
230 | - this.cancel() | |
291 | + this.cancel(); | |
231 | 292 | } else { |
232 | 293 | this.$message.error("下载失败"); |
233 | 294 | } |
234 | 295 | }, |
235 | - } | |
296 | + }, | |
236 | 297 | }; |
237 | 298 | </script> |
238 | 299 | <style lang="scss" scoped> |
... | ... | @@ -247,8 +308,6 @@ export default { |
247 | 308 | justify-content: space-between; |
248 | 309 | } |
249 | 310 | |
250 | - | |
251 | - | |
252 | 311 | .chart-dia { |
253 | 312 | .chart-box { |
254 | 313 | width: 100%; | ... | ... |
src/views/basic/test/components/scoreSet.vue
... | ... | @@ -8,35 +8,109 @@ |
8 | 8 | </div> |
9 | 9 | <div class="set-content"> |
10 | 10 | <div class="test-title"> |
11 | - <el-button class="import-btn" round @click="diaUp = true">从excel文件导入</el-button> | |
12 | - <el-button class="save-btn" type="primary" round :loading="loadingSave" @click="_SubmitScore">保存</el-button> | |
11 | + <el-button class="import-btn" round @click="diaUp = true" | |
12 | + >从excel文件导入</el-button | |
13 | + > | |
14 | + <el-button | |
15 | + class="save-btn" | |
16 | + type="primary" | |
17 | + round | |
18 | + :loading="loadingSave" | |
19 | + @click="_SubmitScore" | |
20 | + >保存</el-button | |
21 | + > | |
13 | 22 | <p class="p1">{{ title }}</p> |
14 | 23 | <p class="p2">卷面总分:{{ examScore }}分</p> |
15 | 24 | </div> |
16 | - <el-table :data="tableData" border style="width: 100%" :max-height="tableMaxHeight"> | |
17 | - <el-table-column prop="studentCode" label="学号" align="center" fixed></el-table-column> | |
18 | - <el-table-column prop="studentName" label="学号" align="center" fixed></el-table-column> | |
19 | - <el-table-column prop="score" label="总得分" align="center" fixed></el-table-column> | |
20 | - <el-table-column prop="objectiveScore" label="客观题分" align="center"></el-table-column> | |
21 | - <el-table-column prop="subjectiveScore" label="主观题分" align="center"></el-table-column> | |
25 | + <el-table | |
26 | + :data="tableData" | |
27 | + border | |
28 | + style="width: 100%" | |
29 | + :max-height="tableMaxHeight" | |
30 | + > | |
31 | + <el-table-column | |
32 | + prop="studentCode" | |
33 | + label="学号" | |
34 | + align="center" | |
35 | + fixed | |
36 | + ></el-table-column> | |
37 | + <el-table-column | |
38 | + prop="studentName" | |
39 | + label="学号" | |
40 | + align="center" | |
41 | + fixed | |
42 | + ></el-table-column> | |
43 | + <el-table-column prop="score" label="总得分" align="center" fixed | |
44 | + ><template slot-scope="scoped"> | |
45 | + <el-input | |
46 | + type="number" | |
47 | + :min="0" | |
48 | + v-model="scoped.row.all" | |
49 | + ></el-input> </template | |
50 | + ></el-table-column> | |
51 | + <el-table-column prop="objectiveScore" label="客观题分" align="center" | |
52 | + ><template slot-scope="scoped"> | |
53 | + <el-input | |
54 | + type="number" | |
55 | + :min="0" | |
56 | + v-model="scoped.row.object" | |
57 | + ></el-input> </template | |
58 | + ></el-table-column> | |
59 | + <el-table-column prop="subjectiveScore" label="主观题分" align="center"> | |
60 | + <template slot-scope="scoped"> | |
61 | + <el-input | |
62 | + type="number" | |
63 | + :min="0" | |
64 | + v-model="scoped.row.subject" | |
65 | + ></el-input> | |
66 | + </template> | |
67 | + </el-table-column> | |
22 | 68 | <!-- <el-table-column v-for="(item, index) in questionList" :key="index" :label="'第' + cNum[index] + '大题'" --> |
23 | - <el-table-column v-for="(question, index) in questionList" :key="index" :label="'Q' + question.questionId" | |
24 | - align="center"> | |
69 | + <el-table-column | |
70 | + v-for="(question, index) in questionList" | |
71 | + :key="index" | |
72 | + :label="'Q' + question.questionId" | |
73 | + align="center" | |
74 | + > | |
25 | 75 | <template slot-scope="scoped"> |
26 | - <el-input type="number" :min="0" :max="question.questionScore" | |
27 | - @input="setScore($event, question.questionScore, scoped.row.scoreMap, question.questionId)" | |
28 | - v-model="scoped.row.scoreMap[question.questionId]"></el-input> | |
76 | + <el-input | |
77 | + type="number" | |
78 | + :min="0" | |
79 | + :max="question.questionScore" | |
80 | + @input=" | |
81 | + setScore( | |
82 | + $event, | |
83 | + question.questionScore, | |
84 | + scoped.row.scoreMap, | |
85 | + question.questionId | |
86 | + ) | |
87 | + " | |
88 | + v-model="scoped.row.scoreMap[question.questionId]" | |
89 | + ></el-input> | |
29 | 90 | </template> |
30 | 91 | </el-table-column> |
31 | 92 | </el-table> |
32 | 93 | </div> |
33 | 94 | |
34 | - <el-dialog :close-on-click-modal="false" :append-to-body="true" title="答卷录分" :visible.sync="diaUp" width="600px" | |
35 | - top="120px"> | |
36 | - <upload :url="url" :examId="id" @upSuccess="upSuccess" fileName="主观题分数" v-loading="loadingDown"> | |
95 | + <el-dialog | |
96 | + :close-on-click-modal="false" | |
97 | + :append-to-body="true" | |
98 | + title="答卷录分" | |
99 | + :visible.sync="diaUp" | |
100 | + width="600px" | |
101 | + top="120px" | |
102 | + > | |
103 | + <upload | |
104 | + :url="url" | |
105 | + :examId="id" | |
106 | + @upSuccess="upSuccess" | |
107 | + fileName="主观题分数" | |
108 | + v-loading="loadingDown" | |
109 | + > | |
37 | 110 | <template slot="down"> |
38 | 111 | <p class="down-txt"> |
39 | - 第一步:<el-link type="danger" @click="downExcel">下载模板</el-link>,并编辑完成学生分数。 | |
112 | + 第一步:<el-link type="danger" @click="downExcel">下载模板</el-link | |
113 | + >,并编辑完成学生分数。 | |
40 | 114 | </p> |
41 | 115 | <p class="down-txt">第二步:上传完成编辑的模板文件并导入。</p> |
42 | 116 | </template> |
... | ... | @@ -56,9 +130,9 @@ export default { |
56 | 130 | role: String, |
57 | 131 | examScore: { |
58 | 132 | type: Number, |
59 | - default: 0 | |
133 | + default: 0, | |
60 | 134 | }, |
61 | - diaScoreSet: false | |
135 | + diaScoreSet: false, | |
62 | 136 | }, |
63 | 137 | data() { |
64 | 138 | return { |
... | ... | @@ -70,93 +144,101 @@ export default { |
70 | 144 | tableData: [], |
71 | 145 | questionList: [], |
72 | 146 | cNum: cNum, |
73 | - tableMaxHeight: 300 | |
74 | - } | |
147 | + tableMaxHeight: 300, | |
148 | + }; | |
75 | 149 | }, |
76 | 150 | watch: { |
77 | 151 | diaScoreSet: { |
78 | 152 | handler: function (nVal) { |
79 | 153 | if (nVal) { |
80 | - this._QueryData() | |
154 | + this._QueryData(); | |
81 | 155 | } |
82 | 156 | }, |
83 | - } | |
157 | + }, | |
84 | 158 | }, |
85 | 159 | methods: { |
86 | 160 | setScore(val, max, obj, keys) { |
87 | 161 | if (val > max) { |
88 | - obj[keys] = max | |
162 | + obj[keys] = max; | |
89 | 163 | } |
90 | 164 | }, |
91 | 165 | closeScoreSet() { |
92 | - this.$emit('closeScoreSet') | |
166 | + this.$emit("closeScoreSet"); | |
93 | 167 | }, |
94 | 168 | setTableHeight() { |
95 | 169 | this.tableMaxHeight = this.$refs.scoreSet.offsetHeight - 135; |
96 | 170 | }, |
97 | 171 | async _QueryData() { |
98 | 172 | this.loading = true; |
99 | - const { data, status, info } = await this.$request.listStudentsAndQuestions({ | |
100 | - examId: this.id | |
101 | - }); | |
173 | + const { data, status, info } = | |
174 | + await this.$request.listStudentsAndQuestions({ | |
175 | + examId: this.id, | |
176 | + }); | |
102 | 177 | this.loading = false; |
103 | 178 | if (status === 0) { |
104 | - let studentList = data.students || [] | |
105 | - this.questionList = data?.questionList || [] | |
106 | - this.tableData = this.questionList.length && studentList.map(item => { | |
107 | - item.score = 0//总分 | |
108 | - item.subjectiveScore = 0//主观题分数 | |
109 | - item.objectiveScore = 0//客观题分数 | |
110 | - if (!item.scoreMap) item.scoreMap = {}; | |
111 | - this.questionList.map(question => { | |
112 | - let keys = question.questionId | |
113 | - if (!item.scoreMap[keys]) { | |
114 | - if (item.scoreMap[keys] == 0) { | |
115 | - item.scoreMap[keys] = 0 | |
116 | - } else { | |
117 | - item.scoreMap[keys] = "" | |
118 | - } | |
119 | - } else { | |
120 | - let num = Number(item.scoreMap[keys]) | |
121 | - item.scoreMap[keys] = num | |
122 | - item.score += num | |
123 | - if (question.questionType == 5) { | |
124 | - item.subjectiveScore += num | |
125 | - } else { | |
126 | - item.objectiveScore += num | |
127 | - } | |
128 | - } | |
129 | - }) | |
130 | - return item | |
131 | - }) || [] | |
132 | - this.setTableHeight() | |
179 | + let studentList = data.students || []; | |
180 | + this.questionList = data?.questionList || []; | |
181 | + this.tableData = | |
182 | + (this.questionList.length && | |
183 | + studentList.map((item) => { | |
184 | + item.all = item.all || 0; //总分 | |
185 | + item.object = item.object || 0; //客观题分数 | |
186 | + item.subject = item.subject || 0; //主观题分数 | |
187 | + if (!item.scoreMap) item.scoreMap = {}; | |
188 | + this.questionList.map((question) => { | |
189 | + let keys = question.questionId; | |
190 | + if (!item.scoreMap[keys]) { | |
191 | + if (item.scoreMap[keys] == 0) { | |
192 | + item.scoreMap[keys] = 0; | |
193 | + } else { | |
194 | + item.scoreMap[keys] = ""; | |
195 | + } | |
196 | + } else { | |
197 | + let num = Number(item.scoreMap[keys]); | |
198 | + item.scoreMap[keys] = num; | |
199 | + // item.score += num | |
200 | + // if (question.questionType == 5) { | |
201 | + // item.subjectiveScore += num | |
202 | + // } else { | |
203 | + // item.objectiveScore += num | |
204 | + // } | |
205 | + } | |
206 | + }); | |
207 | + | |
208 | + return item; | |
209 | + })) || | |
210 | + []; | |
211 | + this.setTableHeight(); | |
133 | 212 | } else { |
134 | 213 | this.$message.error(info); |
135 | 214 | } |
136 | 215 | }, |
137 | 216 | async _SubmitScore() { |
138 | 217 | this.loadingSave = true; |
139 | - let list = this.tableData.map(item => { | |
140 | - let scoreMap = {} | |
218 | + let list = this.tableData.map((item) => { | |
219 | + let scoreMap = {}; | |
141 | 220 | for (let keys in item.scoreMap) { |
142 | 221 | if (item.scoreMap[keys] !== "") { |
143 | - scoreMap[keys] = item.scoreMap[keys] + "" | |
222 | + scoreMap[keys] = item.scoreMap[keys] + ""; | |
144 | 223 | } |
145 | 224 | } |
225 | + scoreMap.all = item.all + ""; | |
226 | + scoreMap.object = item.object + ""; | |
227 | + scoreMap.subject = item.subject + ""; | |
146 | 228 | return { |
147 | 229 | studentCode: item.studentCode, |
148 | 230 | scores: scoreMap, |
149 | - } | |
150 | - }) | |
151 | - console.log(list) | |
231 | + }; | |
232 | + }); | |
233 | + console.log(list); | |
152 | 234 | const { data, status, info } = await this.$request.submitScore({ |
153 | 235 | examId: this.id, |
154 | - list | |
236 | + list, | |
155 | 237 | }); |
156 | 238 | this.loadingSave = false; |
157 | 239 | if (status === 0) { |
158 | - this.$message.success(info) | |
159 | - this.closeScoreSet() | |
240 | + this.$message.success(info); | |
241 | + this.closeScoreSet(); | |
160 | 242 | } else { |
161 | 243 | this.$message.error(info); |
162 | 244 | } |
... | ... | @@ -166,7 +248,7 @@ export default { |
166 | 248 | upSuccess(res) { |
167 | 249 | this.$message.success("导入成功"); |
168 | 250 | this.diaUp = false; |
169 | - this.closeScoreSet() | |
251 | + this.closeScoreSet(); | |
170 | 252 | }, |
171 | 253 | async downExcel() { |
172 | 254 | //模板下载 |
... | ... | @@ -184,8 +266,8 @@ export default { |
184 | 266 | this.$message.error(data.info); |
185 | 267 | } |
186 | 268 | }, |
187 | - } | |
188 | -} | |
269 | + }, | |
270 | +}; | |
189 | 271 | </script> |
190 | 272 | |
191 | 273 | <style lang="scss" scoped> | ... | ... |
src/views/basic/test/index.vue
... | ... | @@ -8,7 +8,7 @@ |
8 | 8 | <div class="select-box"> |
9 | 9 | <div class="sel-item sel-item2"> |
10 | 10 | <span class="sel-label">班级:</span> |
11 | - <div class="sel-d" v-if="role == 'ROLE_JIAOSHI'"> | |
11 | + <div class="sel-d"> | |
12 | 12 | <p class="p-all"> |
13 | 13 | <el-checkbox |
14 | 14 | :indeterminate="isIndeterminateClass" |
... | ... | @@ -28,21 +28,6 @@ |
28 | 28 | </el-checkbox-group> |
29 | 29 | </p> |
30 | 30 | </div> |
31 | - <el-select | |
32 | - v-if="role == 'ROLE_BANZHUREN'" | |
33 | - class="sel" | |
34 | - v-model="query.classId" | |
35 | - placeholder="选择班级" | |
36 | - @change="changeclass" | |
37 | - > | |
38 | - <el-option | |
39 | - v-for="item in classList" | |
40 | - :key="item.value" | |
41 | - :label="item.label" | |
42 | - :value="item.value" | |
43 | - > | |
44 | - </el-option> | |
45 | - </el-select> | |
46 | 31 | </div> |
47 | 32 | <div class="sel-item sel-item2"> |
48 | 33 | <span class="sel-label">科目:</span> |
... | ... | @@ -257,15 +242,15 @@ export default { |
257 | 242 | label: item.className, |
258 | 243 | }; |
259 | 244 | }); |
260 | - if (this.role == "ROLE_BANZHUREN") { | |
261 | - this.query.classId = this.classList.length | |
262 | - ? this.classList[0].value | |
263 | - : ""; | |
264 | - } else { | |
265 | - this.classList.length | |
266 | - ? this.query.classId.push(this.classList[0].value) | |
267 | - : ""; | |
268 | - } | |
245 | + // if (this.role == "ROLE_BANZHUREN") { | |
246 | + // this.query.classId = this.classList.length | |
247 | + // ? this.classList[0].value | |
248 | + // : ""; | |
249 | + // } else { | |
250 | + this.classList.length | |
251 | + ? this.query.classId.push(this.classList[0].value) | |
252 | + : ""; | |
253 | + // } | |
269 | 254 | } else { |
270 | 255 | this.$message.error(info); |
271 | 256 | } |
... | ... | @@ -309,9 +294,6 @@ export default { |
309 | 294 | return; |
310 | 295 | } |
311 | 296 | let query = { ...this.query }; |
312 | - if (this.role == "ROLE_BANZHUREN") { | |
313 | - query.classId = [query.classId]; | |
314 | - } | |
315 | 297 | this.$router.push({ |
316 | 298 | path: "/testList", |
317 | 299 | query: { | ... | ... |
src/views/basic/test/list.vue
... | ... | @@ -312,22 +312,27 @@ export default { |
312 | 312 | return; |
313 | 313 | } |
314 | 314 | let subjectArr = []; |
315 | - const ids = this.multipleSelection.map((item) => { | |
316 | - subjectArr.push(item.subjectName); | |
317 | - return item.id; | |
315 | + let classIds = ""; | |
316 | + let multipleData = []; | |
317 | + this.tableData.map((item) => { | |
318 | + if (this.multipleSelection.includes(item.id)) { | |
319 | + subjectArr.push(item.subjectName); | |
320 | + multipleData.push(item); | |
321 | + classIds = item.classId; | |
322 | + } | |
318 | 323 | }); |
319 | 324 | subjectArr = [...new Set(subjectArr)]; |
320 | 325 | console.log(subjectArr); |
321 | - if (ids.length == 1) { | |
326 | + if (this.multipleSelection.length == 1) { | |
322 | 327 | this.$router.push({ |
323 | 328 | path: "/testAnalysis", |
324 | 329 | query: { |
325 | - id: ids[0], | |
326 | - title: this.multipleSelection[0].title, | |
327 | - score: this.multipleSelection[0].examPaperScore || 0, | |
330 | + id: this.multipleSelection[0], | |
331 | + title: this.multipleData[0].title, | |
332 | + score: this.multipleData[0].examPaperScore || 0, | |
328 | 333 | type: 1, |
329 | 334 | subjectName: subjectArr.join(), |
330 | - classId: this.query.classId[0], | |
335 | + classId: classIds, | |
331 | 336 | params: this.$route.query.params, |
332 | 337 | }, |
333 | 338 | }); |
... | ... | @@ -336,8 +341,8 @@ export default { |
336 | 341 | this.$router.push({ |
337 | 342 | path: "/testAnalysis", |
338 | 343 | query: { |
339 | - ids: ids.join(), | |
340 | - classId: this.query.classId[0], | |
344 | + ids: this.multipleSelection.join(), | |
345 | + classId: classIds, | |
341 | 346 | type: subjectArr.length == 1 ? 2 : 3, |
342 | 347 | subjectName: subjectArr.join(), |
343 | 348 | params: this.$route.query.params, |
... | ... | @@ -472,7 +477,7 @@ export default { |
472 | 477 | //多班级 |
473 | 478 | let tableObj = {}; |
474 | 479 | data?.list?.map((item) => { |
475 | - if (tableObj[item.examPaperId]) { | |
480 | + if (tableObj[item.examPaperId] && item.examPaperId != 0) { | |
476 | 481 | // 没有班级考试的添加 |
477 | 482 | if ( |
478 | 483 | !tableObj[item.examPaperId].classIds.includes(item.classId) | ... | ... |
src/views/examinationPaper/add.vue
... | ... | @@ -7,45 +7,111 @@ |
7 | 7 | </template> |
8 | 8 | </back-box> |
9 | 9 | <div class="content"> |
10 | - <el-steps :active="step" finish-status="success" simple style="margin: 20px 0"> | |
10 | + <el-steps | |
11 | + :active="step" | |
12 | + finish-status="success" | |
13 | + simple | |
14 | + style="margin: 20px 0" | |
15 | + > | |
11 | 16 | <el-step title="基础信息" icon="el-icon-edit"></el-step> |
12 | - <el-step v-if="!isUpload" title="题目编辑" icon="el-icon-tickets"></el-step> | |
17 | + <el-step | |
18 | + v-if="!isUpload" | |
19 | + title="题目编辑" | |
20 | + icon="el-icon-tickets" | |
21 | + ></el-step> | |
13 | 22 | <el-step title="设置答案" icon="el-icon-edit-outline"></el-step> |
14 | - <el-step v-if="isUpload" title="试卷预览" icon="el-icon-edit-outline"></el-step> | |
23 | + <el-step | |
24 | + v-if="isUpload" | |
25 | + title="试卷预览" | |
26 | + icon="el-icon-edit-outline" | |
27 | + ></el-step> | |
15 | 28 | </el-steps> |
16 | 29 | <div v-show="step == 0"> |
17 | - <el-form ref="forms" :model="form" :rules="formRules" label-width="140px"> | |
30 | + <el-form | |
31 | + ref="forms" | |
32 | + :model="form" | |
33 | + :rules="formRules" | |
34 | + label-width="140px" | |
35 | + > | |
18 | 36 | <el-form-item label="答题卡名称:" prop="title"> |
19 | - <el-input class="sel2" type="text" placeholder="请输入答题卡名称" v-model.trim="form.title" maxlength="50" size="45" | |
20 | - show-word-limit> | |
37 | + <el-input | |
38 | + class="sel2" | |
39 | + type="text" | |
40 | + placeholder="请输入答题卡名称" | |
41 | + v-model.trim="form.title" | |
42 | + maxlength="50" | |
43 | + size="45" | |
44 | + show-word-limit | |
45 | + > | |
21 | 46 | </el-input> |
22 | 47 | </el-form-item> |
23 | 48 | <el-form-item label="测验类型:"> |
24 | 49 | <el-select v-model="form.tagId" placeholder="选择测验类型"> |
25 | 50 | <el-option label="--" value=""> </el-option> |
26 | - <el-option v-for="item in answerTypeList" :key="item.id" :label="item.typeName" :value="item.id">{{ | |
27 | - item.typeName }}</el-option> | |
51 | + <el-option | |
52 | + v-for="item in answerTypeList" | |
53 | + :key="item.id" | |
54 | + :label="item.typeName" | |
55 | + :value="item.id" | |
56 | + >{{ item.typeName }}</el-option | |
57 | + > | |
28 | 58 | </el-select> |
29 | - <el-button class="ml-20" type="primary" round circle icon="el-icon-edit" @click="openTagDia"></el-button> | |
59 | + <el-button | |
60 | + class="ml-20" | |
61 | + type="primary" | |
62 | + round | |
63 | + circle | |
64 | + icon="el-icon-edit" | |
65 | + @click="openTagDia" | |
66 | + ></el-button> | |
30 | 67 | </el-form-item> |
31 | - <el-form-item v-if="role != 'ROLE_PERSONAL'" label="年级:" prop="gradeName"> | |
32 | - <el-select class="sel" v-model="form.gradeName" placeholder="" @change="changeGrade"> | |
33 | - <el-option v-for="item in gradeList" :key="item" :label="item" :value="item"> | |
68 | + <el-form-item | |
69 | + v-if="role != 'ROLE_PERSONAL'" | |
70 | + label="年级:" | |
71 | + prop="gradeName" | |
72 | + > | |
73 | + <el-select | |
74 | + class="sel" | |
75 | + v-model="form.gradeName" | |
76 | + placeholder="" | |
77 | + @change="changeGrade" | |
78 | + > | |
79 | + <el-option | |
80 | + v-for="item in gradeList" | |
81 | + :key="item" | |
82 | + :label="item" | |
83 | + :value="item" | |
84 | + > | |
34 | 85 | </el-option> |
35 | 86 | </el-select> |
36 | 87 | </el-form-item> |
37 | 88 | <el-form-item label="科目:" prop="subjectName"> |
38 | 89 | <el-select class="sel" v-model="form.subjectName" placeholder=""> |
39 | - <el-option v-for="item in subjectList" :key="item.value" :label="item.label" :value="item.value">{{ | |
40 | - item.label }} | |
90 | + <el-option | |
91 | + v-for="item in subjectList" | |
92 | + :key="item.value" | |
93 | + :label="item.label" | |
94 | + :value="item.value" | |
95 | + >{{ item.label }} | |
41 | 96 | </el-option> |
42 | 97 | </el-select> |
43 | 98 | </el-form-item> |
44 | 99 | <el-form-item label="考试时长:"> |
45 | - <el-input-number size="medium" :min="1" :max="140" :step-strictly="true" :step="1" | |
46 | - v-model="form.examsDuration" label="考试时长"></el-input-number> | |
100 | + <el-input-number | |
101 | + size="medium" | |
102 | + :min="1" | |
103 | + :max="140" | |
104 | + :step-strictly="true" | |
105 | + :step="1" | |
106 | + v-model="form.examsDuration" | |
107 | + label="考试时长" | |
108 | + ></el-input-number> | |
47 | 109 | </el-form-item> |
48 | - <el-form-item v-if="role != 'ROLE_PERSONAL'" label="分享范围:" prop="sharingType"> | |
110 | + <el-form-item | |
111 | + v-if="role != 'ROLE_PERSONAL'" | |
112 | + label="分享范围:" | |
113 | + prop="sharingType" | |
114 | + > | |
49 | 115 | <el-radio-group v-model="form.sharingType"> |
50 | 116 | <el-radio :label="0">任课班级分享</el-radio> |
51 | 117 | <el-radio :label="1">全年级分享</el-radio> |
... | ... | @@ -53,24 +119,58 @@ |
53 | 119 | </el-form-item> |
54 | 120 | </el-form> |
55 | 121 | <div class="btn-box"> |
56 | - <el-button type="danger" plain round @click="linkBack">取消</el-button> | |
57 | - <el-button type="primary" round @click="isUpload ? setStep2() : setStep1()">下一步</el-button> | |
122 | + <el-button type="danger" plain round @click="linkBack" | |
123 | + >取消</el-button | |
124 | + > | |
125 | + <el-button | |
126 | + type="primary" | |
127 | + round | |
128 | + @click="isUpload ? setStep2() : setStep1()" | |
129 | + >下一步</el-button | |
130 | + > | |
58 | 131 | </div> |
59 | - <el-dialog :close-on-click-modal="false" title="设置测验类型" :visible.sync="dialogVisible" width="500px"> | |
132 | + <el-dialog | |
133 | + :close-on-click-modal="false" | |
134 | + title="设置测验类型" | |
135 | + :visible.sync="dialogVisible" | |
136 | + width="500px" | |
137 | + > | |
60 | 138 | <div class="dia-content"> |
61 | 139 | <p class="add-type" v-for="item in tagList" :key="item.id"> |
62 | 140 | <el-row :gutter="10"> |
63 | - <el-col :span="18"><el-input v-model="item.typeName" :maxlength="10" | |
64 | - placeholder="请输入答题卡类型名称"></el-input></el-col> | |
141 | + <el-col :span="18" | |
142 | + ><el-input | |
143 | + v-model="item.typeName" | |
144 | + :maxlength="10" | |
145 | + placeholder="请输入答题卡类型名称" | |
146 | + ></el-input | |
147 | + ></el-col> | |
65 | 148 | <el-col :span="6"> |
66 | 149 | <el-tooltip effect="dark" content="保存" placement="top"> |
67 | - <el-button class="js-set" type="primary" size="small" round circle icon="el-icon-check" | |
68 | - @click="editTypeName(item)"></el-button> | |
150 | + <el-button | |
151 | + class="js-set" | |
152 | + type="primary" | |
153 | + size="small" | |
154 | + round | |
155 | + circle | |
156 | + icon="el-icon-check" | |
157 | + @click="editTypeName(item)" | |
158 | + ></el-button> | |
69 | 159 | </el-tooltip> |
70 | 160 | <el-tooltip effect="dark" content="删除" placement="right"> |
71 | - <el-popconfirm title="确定删除这道大题吗?" @confirm="removeTypeName(item)"> | |
72 | - <el-button class="js-set" type="danger" size="small" round circle icon="el-icon-delete" | |
73 | - slot="reference"></el-button> | |
161 | + <el-popconfirm | |
162 | + title="确定删除这道大题吗?" | |
163 | + @confirm="removeTypeName(item)" | |
164 | + > | |
165 | + <el-button | |
166 | + class="js-set" | |
167 | + type="danger" | |
168 | + size="small" | |
169 | + round | |
170 | + circle | |
171 | + icon="el-icon-delete" | |
172 | + slot="reference" | |
173 | + ></el-button> | |
74 | 174 | </el-popconfirm> |
75 | 175 | </el-tooltip> |
76 | 176 | </el-col> |
... | ... | @@ -79,13 +179,25 @@ |
79 | 179 | <p class="add-type"> |
80 | 180 | <el-row :gutter="10"> |
81 | 181 | <el-col :span="18"> |
82 | - <el-input type="text" placeholder="请输入答题卡类型名称" v-model.trim="answerTypeName" :maxlength="10"> | |
182 | + <el-input | |
183 | + type="text" | |
184 | + placeholder="请输入答题卡类型名称" | |
185 | + v-model.trim="answerTypeName" | |
186 | + :maxlength="10" | |
187 | + > | |
83 | 188 | </el-input> |
84 | 189 | </el-col> |
85 | 190 | <el-col :span="6"> |
86 | 191 | <el-tooltip effect="dark" content="添加" placement="right"> |
87 | - <el-button class="js-set" type="primary" size="small" round circle icon="el-icon-plus" | |
88 | - @click="addPaperType"></el-button> | |
192 | + <el-button | |
193 | + class="js-set" | |
194 | + type="primary" | |
195 | + size="small" | |
196 | + round | |
197 | + circle | |
198 | + icon="el-icon-plus" | |
199 | + @click="addPaperType" | |
200 | + ></el-button> | |
89 | 201 | </el-tooltip> |
90 | 202 | </el-col> |
91 | 203 | </el-row> |
... | ... | @@ -98,17 +210,42 @@ |
98 | 210 | </div> |
99 | 211 | <template v-if="!isUpload"> |
100 | 212 | <div v-show="step == 1"> |
101 | - <div class="question-box" v-for="(question, index) in form.questionList" :key="index"> | |
213 | + <div | |
214 | + class="question-box" | |
215 | + v-for="(question, index) in form.questionList" | |
216 | + :key="index" | |
217 | + > | |
102 | 218 | <p class="question-title"> |
103 | - <el-tooltip effect="dark" :content="question.show ? '收起' : '展开'" placement="left"> | |
104 | - <i class="el-icon-caret-right" :class="question.show ? 'active' : ''" | |
105 | - @click="question.show = !question.show"></i> | |
219 | + <el-tooltip | |
220 | + effect="dark" | |
221 | + :content="question.show ? '收起' : '展开'" | |
222 | + placement="left" | |
223 | + > | |
224 | + <i | |
225 | + class="el-icon-caret-right" | |
226 | + :class="question.show ? 'active' : ''" | |
227 | + @click="question.show = !question.show" | |
228 | + ></i> | |
106 | 229 | </el-tooltip> |
107 | 230 | <span>{{ setBigNum(index) }}、</span> |
108 | - <el-input class="ipt" v-model.trim="question.questionTitle" maxlength="30" placeholder="填写大题名称"></el-input> | |
109 | - <el-popconfirm title="确定删除这道大题吗?" @confirm="form.questionList.splice(index, 1)"> | |
110 | - <el-button slot="reference" class="delete" type="danger" size="mini" circle | |
111 | - icon="el-icon-delete"></el-button> | |
231 | + <el-input | |
232 | + class="ipt" | |
233 | + v-model.trim="question.questionTitle" | |
234 | + maxlength="30" | |
235 | + placeholder="填写大题名称" | |
236 | + ></el-input> | |
237 | + <el-popconfirm | |
238 | + title="确定删除这道大题吗?" | |
239 | + @confirm="form.questionList.splice(index, 1)" | |
240 | + > | |
241 | + <el-button | |
242 | + slot="reference" | |
243 | + class="delete" | |
244 | + type="danger" | |
245 | + size="mini" | |
246 | + circle | |
247 | + icon="el-icon-delete" | |
248 | + ></el-button> | |
112 | 249 | </el-popconfirm> |
113 | 250 | <span class="m20">共:{{ question.subQuestions?.length }}题</span> |
114 | 251 | <span>共:{{ setScore(question) }}分</span> |
... | ... | @@ -123,11 +260,18 @@ |
123 | 260 | <div class="qs-options">选项设置</div> |
124 | 261 | <div class="qs-set">操作</div> |
125 | 262 | </li> |
126 | - <li class="sub-questions" v-for="(subQuestions, indexs) in question.subQuestions" :key="indexs"> | |
263 | + <li | |
264 | + class="sub-questions" | |
265 | + v-for="(subQuestions, indexs) in question.subQuestions" | |
266 | + :key="indexs" | |
267 | + > | |
127 | 268 | <div class="qs-num">{{ setNum(index, indexs) }}</div> |
128 | 269 | <div class="qs-type"> |
129 | - <el-select v-model="subQuestions.questionType" placeholder="选择题目类型" | |
130 | - @change="changeSubQuestions($event, subQuestions)"> | |
270 | + <el-select | |
271 | + v-model="subQuestions.questionType" | |
272 | + placeholder="选择题目类型" | |
273 | + @change="changeSubQuestions($event, subQuestions)" | |
274 | + > | |
131 | 275 | <el-option label="单选题" :value="2"></el-option> |
132 | 276 | <el-option label="多选题" :value="3"></el-option> |
133 | 277 | <el-option label="判断题" :value="4"></el-option> |
... | ... | @@ -135,54 +279,121 @@ |
135 | 279 | </el-select> |
136 | 280 | </div> |
137 | 281 | <div class="qs-score"> |
138 | - <el-input-number class="number-ipt" size="medium" :min="1" :max="200" :precision="2" :step="1" | |
139 | - v-model="subQuestions.score" label="单题分值"></el-input-number> | |
282 | + <el-input-number | |
283 | + class="number-ipt" | |
284 | + size="medium" | |
285 | + :min="1" | |
286 | + :max="200" | |
287 | + :precision="2" | |
288 | + :step="1" | |
289 | + v-model="subQuestions.score" | |
290 | + label="单题分值" | |
291 | + ></el-input-number> | |
140 | 292 | </div> |
141 | 293 | <div class="qs-partScore"> |
142 | 294 | <p v-if="subQuestions.questionType != 3">--</p> |
143 | - <el-input-number class="number-ipt" v-else size="medium" :min="0" :precision="2" | |
144 | - :max="subQuestions.score" :step="0.5" v-model="subQuestions.partScore" | |
145 | - label="漏选得分"></el-input-number> | |
295 | + <el-input-number | |
296 | + class="number-ipt" | |
297 | + v-else | |
298 | + size="medium" | |
299 | + :min="0" | |
300 | + :precision="2" | |
301 | + :max="subQuestions.score" | |
302 | + :step="0.5" | |
303 | + v-model="subQuestions.partScore" | |
304 | + label="漏选得分" | |
305 | + ></el-input-number> | |
146 | 306 | </div> |
147 | 307 | <div class="qs-options"> |
148 | 308 | <p v-if="subQuestions.questionType == 5">--</p> |
149 | 309 | <p v-if="subQuestions.questionType == 4" class="answer-box"> |
150 | - <span class="answer-s" :class="subQuestions.correctAnswer == 1 ? 'active' : ''" | |
151 | - @click="subQuestions.correctAnswer = 1">✓</span> | |
152 | - <span class="answer-s" :class="subQuestions.correctAnswer == 2 ? 'active' : ''" | |
153 | - @click="subQuestions.correctAnswer = 2">✗</span> | |
310 | + <span | |
311 | + class="answer-s" | |
312 | + :class="subQuestions.correctAnswer == 1 ? 'active' : ''" | |
313 | + @click="subQuestions.correctAnswer = 1" | |
314 | + >✓</span | |
315 | + > | |
316 | + <span | |
317 | + class="answer-s" | |
318 | + :class="subQuestions.correctAnswer == 2 ? 'active' : ''" | |
319 | + @click="subQuestions.correctAnswer = 2" | |
320 | + >✗</span | |
321 | + > | |
154 | 322 | </p> |
155 | 323 | <p v-if="subQuestions.questionType == 3" class="answer-box"> |
156 | - <span class="answer-s" v-for="option in subQuestions.answerOptions.split(',')" :class="subQuestions.correctAnswer?.includes(option) | |
157 | - ? 'active' | |
158 | - : '' | |
159 | - " :key="option" @click="changAnswer(subQuestions, option)">{{ option }}</span> | |
324 | + <span | |
325 | + class="answer-s" | |
326 | + v-for="option in subQuestions.answerOptions.split(',')" | |
327 | + :class=" | |
328 | + subQuestions.correctAnswer?.includes(option) | |
329 | + ? 'active' | |
330 | + : '' | |
331 | + " | |
332 | + :key="option" | |
333 | + @click="changAnswer(subQuestions, option)" | |
334 | + >{{ option }}</span | |
335 | + > | |
160 | 336 | </p> |
161 | 337 | <p v-if="subQuestions.questionType == 2" class="answer-box"> |
162 | - <span class="answer-s" v-for="option in subQuestions.answerOptions.split(',')" :class="subQuestions.correctAnswer == option ? 'active' : '' | |
163 | - " :key="option" @click="subQuestions.correctAnswer = option">{{ option }}</span> | |
338 | + <span | |
339 | + class="answer-s" | |
340 | + v-for="option in subQuestions.answerOptions.split(',')" | |
341 | + :class=" | |
342 | + subQuestions.correctAnswer == option ? 'active' : '' | |
343 | + " | |
344 | + :key="option" | |
345 | + @click="subQuestions.correctAnswer = option" | |
346 | + >{{ option }}</span | |
347 | + > | |
164 | 348 | </p> |
165 | - <p v-if="subQuestions.questionType == 3 || | |
166 | - subQuestions.questionType == 2 | |
167 | - " class="answer-box answer-box2"> | |
168 | - <el-button size="mini" type="primary" icon="el-icon-plus" circle | |
169 | - @click="addOptions(subQuestions)"></el-button> | |
170 | - <el-button size="mini" type="primary" icon="el-icon-minus" round circle | |
171 | - @click="removeOptions(subQuestions)"></el-button> | |
349 | + <p | |
350 | + v-if=" | |
351 | + subQuestions.questionType == 3 || | |
352 | + subQuestions.questionType == 2 | |
353 | + " | |
354 | + class="answer-box answer-box2" | |
355 | + > | |
356 | + <el-button | |
357 | + size="mini" | |
358 | + type="primary" | |
359 | + icon="el-icon-plus" | |
360 | + circle | |
361 | + @click="addOptions(subQuestions)" | |
362 | + ></el-button> | |
363 | + <el-button | |
364 | + size="mini" | |
365 | + type="primary" | |
366 | + icon="el-icon-minus" | |
367 | + round | |
368 | + circle | |
369 | + @click="removeOptions(subQuestions)" | |
370 | + ></el-button> | |
172 | 371 | </p> |
173 | 372 | </div> |
174 | 373 | <div class="qs-set"> |
175 | - <el-popconfirm title="确定删除这道题吗?" @confirm="delTabData(indexs, index)"> | |
176 | - <el-button slot="reference" class="delete" type="danger" size="mini" circle | |
177 | - icon="el-icon-delete"></el-button> | |
374 | + <el-popconfirm | |
375 | + title="确定删除这道题吗?" | |
376 | + @confirm="delTabData(indexs, index)" | |
377 | + > | |
378 | + <el-button | |
379 | + slot="reference" | |
380 | + class="delete" | |
381 | + type="danger" | |
382 | + size="mini" | |
383 | + circle | |
384 | + icon="el-icon-delete" | |
385 | + ></el-button> | |
178 | 386 | </el-popconfirm> |
179 | 387 | </div> |
180 | 388 | </li> |
181 | 389 | <li class="sub-questions"> |
182 | 390 | <div class="qs-num">添加</div> |
183 | 391 | <div class="qs-type"> |
184 | - <el-select v-model="addSubQuestionsType" placeholder="选择题目类型" | |
185 | - @change="changeAddSubQuestions($event, question)"> | |
392 | + <el-select | |
393 | + v-model="addSubQuestionsType" | |
394 | + placeholder="选择题目类型" | |
395 | + @change="changeAddSubQuestions($event, question)" | |
396 | + > | |
186 | 397 | <el-option label="单选题" :value="2"></el-option> |
187 | 398 | <el-option label="多选题" :value="3"></el-option> |
188 | 399 | <el-option label="判断题" :value="4"></el-option> |
... | ... | @@ -199,102 +410,216 @@ |
199 | 410 | </div> |
200 | 411 | <div class="add-box"> |
201 | 412 | <p class="add-question" @click="openQuestion"> |
202 | - <el-button size="mini" type="primary" icon="el-icon-plus" circle></el-button> | |
413 | + <el-button | |
414 | + size="mini" | |
415 | + type="primary" | |
416 | + icon="el-icon-plus" | |
417 | + circle | |
418 | + ></el-button> | |
203 | 419 | <span class="s1">添加大题</span> |
204 | 420 | </p> |
205 | 421 | </div> |
206 | 422 | <div class="btn-box"> |
207 | - <el-button type="danger" plain round @click="linkBack">取消</el-button> | |
423 | + <el-button type="danger" plain round @click="linkBack" | |
424 | + >取消</el-button | |
425 | + > | |
208 | 426 | <el-button round @click="step = 0">上一步</el-button> |
209 | - <el-button :type="form.questionList.length == 0 ? 'info' : 'primary'" round @click="setStep2">下一步</el-button> | |
427 | + <el-button | |
428 | + :type="form.questionList.length == 0 ? 'info' : 'primary'" | |
429 | + round | |
430 | + @click="setStep2" | |
431 | + >下一步</el-button | |
432 | + > | |
210 | 433 | </div> |
211 | - <el-dialog :close-on-click-modal="false" title="添加大题" :visible.sync="addQuestionVisible" width="600px"> | |
434 | + <el-dialog | |
435 | + :close-on-click-modal="false" | |
436 | + title="添加大题" | |
437 | + :visible.sync="addQuestionVisible" | |
438 | + width="600px" | |
439 | + > | |
212 | 440 | <div class="dia-content"> |
213 | - <el-form ref="form" :model="questionForm" :rules="questionFormRules" label-width="100px"> | |
441 | + <el-form | |
442 | + ref="form" | |
443 | + :model="questionForm" | |
444 | + :rules="questionFormRules" | |
445 | + label-width="100px" | |
446 | + > | |
214 | 447 | <el-form-item label="标题:"> |
215 | 448 | <el-col :span="20"> |
216 | - <el-input v-model.trim="questionForm.questionTitle" maxlength="30" placeholder="输入大题名称"></el-input> | |
449 | + <el-input | |
450 | + v-model.trim="questionForm.questionTitle" | |
451 | + maxlength="30" | |
452 | + placeholder="输入大题名称" | |
453 | + ></el-input> | |
217 | 454 | </el-col> |
218 | 455 | </el-form-item> |
219 | 456 | <el-form-item label="选择题型:"> |
220 | - <el-select v-model="questionForm.questionType" placeholder="" @change="setQuestionForm"> | |
221 | - <el-option v-for="item in questionOptions" :key="item.value" :label="item.label" :value="item.value"> | |
457 | + <el-select | |
458 | + v-model="questionForm.questionType" | |
459 | + placeholder="" | |
460 | + @change="setQuestionForm" | |
461 | + > | |
462 | + <el-option | |
463 | + v-for="item in questionOptions" | |
464 | + :key="item.value" | |
465 | + :label="item.label" | |
466 | + :value="item.value" | |
467 | + > | |
222 | 468 | </el-option> |
223 | 469 | <el-option label="混合题" :value="6"> </el-option> |
224 | 470 | </el-select> |
225 | 471 | </el-form-item> |
226 | 472 | <el-form-item label="题数:"> |
227 | - <el-input-number v-model="questionForm.number" @change="changeQesNum" :min="1" :max="100" | |
228 | - :step-strictly="true" :step="1" label="label"></el-input-number> | |
473 | + <el-input-number | |
474 | + v-model="questionForm.number" | |
475 | + @change="changeQesNum" | |
476 | + :min="1" | |
477 | + :max="100" | |
478 | + :step-strictly="true" | |
479 | + :step="1" | |
480 | + label="label" | |
481 | + ></el-input-number> | |
229 | 482 | </el-form-item> |
230 | - <el-form-item label="选项个数:" v-show="questionForm.questionType != 4 && | |
231 | - questionForm.questionType != 5 | |
232 | - "> | |
233 | - <el-input-number v-model="questionForm.selectNum" :min="3" :max="10" :step-strictly="true" :step="1" | |
234 | - label="label"></el-input-number> | |
483 | + <el-form-item | |
484 | + label="选项个数:" | |
485 | + v-show=" | |
486 | + questionForm.questionType != 4 && | |
487 | + questionForm.questionType != 5 | |
488 | + " | |
489 | + > | |
490 | + <el-input-number | |
491 | + v-model="questionForm.selectNum" | |
492 | + :min="3" | |
493 | + :max="10" | |
494 | + :step-strictly="true" | |
495 | + :step="1" | |
496 | + label="label" | |
497 | + ></el-input-number> | |
235 | 498 | </el-form-item> |
236 | 499 | <el-form-item label="单题分数:"> |
237 | - <el-input-number v-model="questionForm.score" :min="1" :max="200" :precision="2" :step="1" | |
238 | - label="label"></el-input-number> | |
500 | + <el-input-number | |
501 | + v-model="questionForm.score" | |
502 | + :min="1" | |
503 | + :max="200" | |
504 | + :precision="2" | |
505 | + :step="1" | |
506 | + label="label" | |
507 | + ></el-input-number> | |
239 | 508 | </el-form-item> |
240 | - <el-form-item label="漏选得分:" v-if="questionForm.questionType == 3"> | |
241 | - <el-input-number v-model="questionForm.partScore" :min="0" :max="questionForm.score" :precision="2" | |
242 | - :step="0.5" label="label"></el-input-number> | |
509 | + <el-form-item | |
510 | + label="漏选得分:" | |
511 | + v-if="questionForm.questionType == 3" | |
512 | + > | |
513 | + <el-input-number | |
514 | + v-model="questionForm.partScore" | |
515 | + :min="0" | |
516 | + :max="questionForm.score" | |
517 | + :precision="2" | |
518 | + :step="0.5" | |
519 | + label="label" | |
520 | + ></el-input-number> | |
243 | 521 | </el-form-item> |
244 | - <el-form-item label="设置答案:" v-show="questionForm.questionType != 5 && | |
245 | - questionForm.questionType != 6 | |
246 | - "> | |
522 | + <el-form-item | |
523 | + label="设置答案:" | |
524 | + v-show=" | |
525 | + questionForm.questionType != 5 && | |
526 | + questionForm.questionType != 6 | |
527 | + " | |
528 | + > | |
247 | 529 | <div class="qs-options"> |
248 | 530 | <p class="ipt"> |
249 | - <el-input v-if="questionForm.questionType == 2 || | |
250 | - questionForm.questionType == 3 || | |
251 | - questionForm.questionType == 6 | |
252 | - " ref="formAnsIpt2" v-model="questionForm.answerList" @keydown.native=" | |
253 | - keydownAnswer($event, questionForm.questionType, 1) | |
254 | - " @input=" | |
255 | - setAllAnswer($event, questionForm.questionType, 1) | |
256 | - "></el-input> | |
257 | - <el-input v-if="questionForm.questionType == 4" v-model="questionForm.answerList" | |
258 | - readonly=""></el-input> | |
531 | + <el-input | |
532 | + v-if=" | |
533 | + questionForm.questionType == 2 || | |
534 | + questionForm.questionType == 3 || | |
535 | + questionForm.questionType == 6 | |
536 | + " | |
537 | + ref="formAnsIpt2" | |
538 | + v-model="questionForm.answerList" | |
539 | + @keydown.native=" | |
540 | + keydownAnswer($event, questionForm.questionType, 1) | |
541 | + " | |
542 | + @input=" | |
543 | + setAllAnswer($event, questionForm.questionType, 1) | |
544 | + " | |
545 | + ></el-input> | |
546 | + <el-input | |
547 | + v-if="questionForm.questionType == 4" | |
548 | + v-model="questionForm.answerList" | |
549 | + readonly="" | |
550 | + ></el-input> | |
259 | 551 | </p> |
260 | 552 | <p class="answer-box"> |
261 | 553 | <template v-if="questionForm.questionType == 4"> |
262 | - <span class="answer-s active" @click=" | |
263 | - questionForm.answerList.length < questionForm.number | |
264 | - ? (questionForm.answerList += '✓') | |
265 | - : '' | |
266 | - ">✓</span> | |
267 | - <span class="answer-s active" @click=" | |
268 | - questionForm.answerList.length < questionForm.number | |
269 | - ? (questionForm.answerList += '✗') | |
270 | - : '' | |
271 | - ">✗</span> | |
554 | + <span | |
555 | + class="answer-s active" | |
556 | + @click=" | |
557 | + questionForm.answerList.length < questionForm.number | |
558 | + ? (questionForm.answerList += '✓') | |
559 | + : '' | |
560 | + " | |
561 | + >✓</span | |
562 | + > | |
563 | + <span | |
564 | + class="answer-s active" | |
565 | + @click=" | |
566 | + questionForm.answerList.length < questionForm.number | |
567 | + ? (questionForm.answerList += '✗') | |
568 | + : '' | |
569 | + " | |
570 | + >✗</span | |
571 | + > | |
272 | 572 | </template> |
273 | 573 | <template v-if="questionForm.questionType == 3"> |
274 | 574 | <template v-for="(option, opIdx) in rightOptions"> |
275 | - <span v-if="opIdx < questionForm.selectNum" class="answer-s active" :key="option" | |
276 | - @click="setMultiple(questionForm, option, 1)">{{ option }}</span> | |
575 | + <span | |
576 | + v-if="opIdx < questionForm.selectNum" | |
577 | + class="answer-s active" | |
578 | + :key="option" | |
579 | + @click="setMultiple(questionForm, option, 1)" | |
580 | + >{{ option }}</span | |
581 | + > | |
277 | 582 | </template> |
278 | - <span class="answer-s active" @click="setMultiple(questionForm, ',', 1)">,</span> | |
583 | + <span | |
584 | + class="answer-s active" | |
585 | + @click="setMultiple(questionForm, ',', 1)" | |
586 | + >,</span | |
587 | + > | |
279 | 588 | </template> |
280 | - <template v-if="questionForm.questionType == 2 || | |
281 | - questionForm.questionType == 6 | |
282 | - "> | |
589 | + <template | |
590 | + v-if=" | |
591 | + questionForm.questionType == 2 || | |
592 | + questionForm.questionType == 6 | |
593 | + " | |
594 | + > | |
283 | 595 | <template v-for="(option, opIdx) in rightOptions"> |
284 | - <span v-if="opIdx < questionForm.selectNum" class="answer-s active" :key="option" @click=" | |
285 | - questionForm.answerList.length < questionForm.number | |
286 | - ? (questionForm.answerList += option) | |
287 | - : '' | |
288 | - ">{{ option }}</span> | |
596 | + <span | |
597 | + v-if="opIdx < questionForm.selectNum" | |
598 | + class="answer-s active" | |
599 | + :key="option" | |
600 | + @click=" | |
601 | + questionForm.answerList.length < | |
602 | + questionForm.number | |
603 | + ? (questionForm.answerList += option) | |
604 | + : '' | |
605 | + " | |
606 | + >{{ option }}</span | |
607 | + > | |
289 | 608 | </template> |
290 | 609 | </template> |
291 | - <span class="answer-s delButton" @click=" | |
292 | - questionForm.answerList = questionForm.answerList.slice( | |
293 | - 0, | |
294 | - -1 | |
295 | - ) | |
296 | - ">x</span> | |
297 | - <span class="answer-s ac" @click="questionForm.answerList = ''">ac</span> | |
610 | + <span | |
611 | + class="answer-s delButton" | |
612 | + @click=" | |
613 | + questionForm.answerList = | |
614 | + questionForm.answerList.slice(0, -1) | |
615 | + " | |
616 | + >x</span | |
617 | + > | |
618 | + <span | |
619 | + class="answer-s ac" | |
620 | + @click="questionForm.answerList = ''" | |
621 | + >ac</span | |
622 | + > | |
298 | 623 | </p> |
299 | 624 | </div> |
300 | 625 | </el-form-item> |
... | ... | @@ -312,15 +637,28 @@ |
312 | 637 | <p class="name">{{ form.title }}</p> |
313 | 638 | <p class="totals">卷面总分:{{ allScore }}分</p> |
314 | 639 | </div> |
315 | - <div class="question-box" v-for="(question, index) in form.questionList" :key="index"> | |
640 | + <div | |
641 | + class="question-box" | |
642 | + v-for="(question, index) in form.questionList" | |
643 | + :key="index" | |
644 | + > | |
316 | 645 | <p class="question-title"> |
317 | 646 | <span>{{ setBigNum(index) }}、</span> |
318 | 647 | <span class="title-txt">{{ question.questionTitle }}</span> |
319 | 648 | <span class="m20">共:{{ setNums(question.subQuestions) }}题</span> |
320 | 649 | <span>共:{{ setScore(question) }} 分</span> |
321 | - <el-popconfirm title="确定删除这道大题吗?" @confirm="form.questionList.splice(index, 1)"> | |
322 | - <el-button slot="reference" class="delete" type="danger" size="mini" circle | |
323 | - icon="el-icon-delete"></el-button> | |
650 | + <el-popconfirm | |
651 | + title="确定删除这道大题吗?" | |
652 | + @confirm="form.questionList.splice(index, 1)" | |
653 | + > | |
654 | + <el-button | |
655 | + slot="reference" | |
656 | + class="delete" | |
657 | + type="danger" | |
658 | + size="mini" | |
659 | + circle | |
660 | + icon="el-icon-delete" | |
661 | + ></el-button> | |
324 | 662 | </el-popconfirm> |
325 | 663 | </p> |
326 | 664 | <ul class="questions-ul"> |
... | ... | @@ -335,12 +673,21 @@ |
335 | 673 | <div class="qs-upload" v-if="isUpload">知识点</div> |
336 | 674 | <div class="qs-set">操作</div> |
337 | 675 | </li> |
338 | - <li v-for="(subQuestions, indexs) in question.subQuestions" :key="indexs"> | |
339 | - <p class="set-ans-btn" v-if="subQuestions.qusType && | |
340 | - subQuestions.subNum && | |
341 | - subQuestions.subNum > 4 | |
342 | - "> | |
343 | - <el-button type="primary" @click="setFormAns(indexs, index)">批量设置答案</el-button> | |
676 | + <li | |
677 | + v-for="(subQuestions, indexs) in question.subQuestions" | |
678 | + :key="indexs" | |
679 | + > | |
680 | + <p | |
681 | + class="set-ans-btn" | |
682 | + v-if=" | |
683 | + subQuestions.qusType && | |
684 | + subQuestions.subNum && | |
685 | + subQuestions.subNum > 4 | |
686 | + " | |
687 | + > | |
688 | + <el-button type="primary" @click="setFormAns(indexs, index)" | |
689 | + >批量设置答案</el-button | |
690 | + > | |
344 | 691 | </p> |
345 | 692 | <div v-else class="sub-questions"> |
346 | 693 | <div class="qs-num"> |
... | ... | @@ -348,10 +695,17 @@ |
348 | 695 | </div> |
349 | 696 | <div class="qs-type"> |
350 | 697 | <template v-if="isUpload"> |
351 | - <el-select v-model="subQuestions.questionType" placeholder="选择题目类型" | |
352 | - @change="changeSubQuestions($event, subQuestions)"> | |
353 | - <el-option v-for="options in questionOptions" :key="options.value" :label="options.label" | |
354 | - :value="options.value"></el-option> | |
698 | + <el-select | |
699 | + v-model="subQuestions.questionType" | |
700 | + placeholder="选择题目类型" | |
701 | + @change="changeSubQuestions($event, subQuestions)" | |
702 | + > | |
703 | + <el-option | |
704 | + v-for="options in questionOptions" | |
705 | + :key="options.value" | |
706 | + :label="options.label" | |
707 | + :value="options.value" | |
708 | + ></el-option> | |
355 | 709 | </el-select> |
356 | 710 | </template> |
357 | 711 | <template v-else> |
... | ... | @@ -359,125 +713,274 @@ |
359 | 713 | </template> |
360 | 714 | </div> |
361 | 715 | <div class="qs-score"> |
362 | - <el-input-number class="number-ipt" size="medium" :min="1" :max="200" :precision="2" | |
363 | - v-model="subQuestions.score" label="单题分值"></el-input-number> | |
716 | + <el-input-number | |
717 | + class="number-ipt" | |
718 | + size="medium" | |
719 | + :min="1" | |
720 | + :max="200" | |
721 | + :precision="2" | |
722 | + v-model="subQuestions.score" | |
723 | + label="单题分值" | |
724 | + ></el-input-number> | |
364 | 725 | </div> |
365 | 726 | <div class="qs-partScore"> |
366 | 727 | <p v-if="subQuestions.questionType != 3">--</p> |
367 | - <el-input-number class="number-ipt" v-else size="medium" :min="0" :precision="2" | |
368 | - :max="subQuestions.score" :step="0.5" v-model="subQuestions.partScore" label="漏选得分"></el-input-number> | |
728 | + <el-input-number | |
729 | + class="number-ipt" | |
730 | + v-else | |
731 | + size="medium" | |
732 | + :min="0" | |
733 | + :precision="2" | |
734 | + :max="subQuestions.score" | |
735 | + :step="0.5" | |
736 | + v-model="subQuestions.partScore" | |
737 | + label="漏选得分" | |
738 | + ></el-input-number> | |
369 | 739 | </div> |
370 | 740 | <div class="qs-options qs-options2"> |
371 | 741 | <p v-if="subQuestions.questionType == 5">--</p> |
372 | 742 | <p v-if="subQuestions.questionType == 4" class="answer-box"> |
373 | - <span class="answer-s" :class="subQuestions.correctAnswer == 1 ? 'active' : ''" | |
374 | - @click="subQuestions.correctAnswer = 1">✓</span> | |
375 | - <span class="answer-s" :class="subQuestions.correctAnswer == 2 ? 'active' : ''" | |
376 | - @click="subQuestions.correctAnswer = 2">✗</span> | |
743 | + <span | |
744 | + class="answer-s" | |
745 | + :class="subQuestions.correctAnswer == 1 ? 'active' : ''" | |
746 | + @click="subQuestions.correctAnswer = 1" | |
747 | + >✓</span | |
748 | + > | |
749 | + <span | |
750 | + class="answer-s" | |
751 | + :class="subQuestions.correctAnswer == 2 ? 'active' : ''" | |
752 | + @click="subQuestions.correctAnswer = 2" | |
753 | + >✗</span | |
754 | + > | |
377 | 755 | </p> |
378 | 756 | <p v-if="subQuestions.questionType == 3" class="answer-box"> |
379 | - <span class="answer-s" v-for="option in subQuestions.answerOptions.split(',')" :class="subQuestions.correctAnswer?.includes(option) | |
380 | - ? 'active' | |
381 | - : '' | |
382 | - " :key="option" @click="changAnswer(subQuestions, option)">{{ option }}</span> | |
757 | + <span | |
758 | + class="answer-s" | |
759 | + v-for="option in subQuestions.answerOptions.split(',')" | |
760 | + :class=" | |
761 | + subQuestions.correctAnswer?.includes(option) | |
762 | + ? 'active' | |
763 | + : '' | |
764 | + " | |
765 | + :key="option" | |
766 | + @click="changAnswer(subQuestions, option)" | |
767 | + >{{ option }}</span | |
768 | + > | |
383 | 769 | </p> |
384 | 770 | <p v-if="subQuestions.questionType == 2" class="answer-box"> |
385 | - <span class="answer-s" v-for="option in subQuestions.answerOptions.split(',')" :class="subQuestions.correctAnswer == option ? 'active' : '' | |
386 | - " :key="option" @click="subQuestions.correctAnswer = option">{{ option }}</span> | |
771 | + <span | |
772 | + class="answer-s" | |
773 | + v-for="option in subQuestions.answerOptions.split(',')" | |
774 | + :class=" | |
775 | + subQuestions.correctAnswer == option ? 'active' : '' | |
776 | + " | |
777 | + :key="option" | |
778 | + @click="subQuestions.correctAnswer = option" | |
779 | + >{{ option }}</span | |
780 | + > | |
387 | 781 | </p> |
388 | - <p v-if="subQuestions.questionType == 3 || | |
389 | - subQuestions.questionType == 2 | |
390 | - " class="answer-box answer-box2"> | |
391 | - <el-button size="mini" type="primary" icon="el-icon-plus" circle | |
392 | - @click="addOptions(subQuestions)"></el-button> | |
393 | - <el-button size="mini" type="primary" icon="el-icon-minus" round circle | |
394 | - @click="removeOptions(subQuestions)"></el-button> | |
782 | + <p | |
783 | + v-if=" | |
784 | + subQuestions.questionType == 3 || | |
785 | + subQuestions.questionType == 2 | |
786 | + " | |
787 | + class="answer-box answer-box2" | |
788 | + > | |
789 | + <el-button | |
790 | + size="mini" | |
791 | + type="primary" | |
792 | + icon="el-icon-plus" | |
793 | + circle | |
794 | + @click="addOptions(subQuestions)" | |
795 | + ></el-button> | |
796 | + <el-button | |
797 | + size="mini" | |
798 | + type="primary" | |
799 | + icon="el-icon-minus" | |
800 | + round | |
801 | + circle | |
802 | + @click="removeOptions(subQuestions)" | |
803 | + ></el-button> | |
395 | 804 | </p> |
396 | 805 | </div> |
397 | 806 | <template v-if="isUpload"> |
398 | 807 | <div class="qs-upload"> |
399 | 808 | <el-popover placement="right" width="600" trigger="click"> |
400 | 809 | <div class="screenshot-box"> |
401 | - <iframe class="screenshot" v-if="subQuestions.screenshot" :src="subQuestions.screenshot"></iframe> | |
402 | - <p style="textAlign:center"><el-button type="primary" round size="mini" icon="el-icon-upload" | |
403 | - @click="openStem(subQuestions, index, indexs, 1)">{{ subQuestions.screenshot ? "重新选择图片" | |
404 | - : "上传题干" }}</el-button> | |
810 | + <iframe | |
811 | + class="screenshot" | |
812 | + v-if="subQuestions.screenshot" | |
813 | + :src="subQuestions.screenshot" | |
814 | + ></iframe> | |
815 | + <p style="textalign: center"> | |
816 | + <el-button | |
817 | + type="primary" | |
818 | + round | |
819 | + size="mini" | |
820 | + icon="el-icon-upload" | |
821 | + @click="openStem(subQuestions, index, indexs, 1)" | |
822 | + >{{ | |
823 | + subQuestions.screenshot | |
824 | + ? "重新选择图片" | |
825 | + : "上传题干" | |
826 | + }}</el-button | |
827 | + > | |
405 | 828 | </p> |
406 | 829 | </div> |
407 | - <el-button slot="reference" class="icon-tickets" type="primary" circle size="mini" | |
408 | - icon="el-icon-tickets"></el-button> | |
830 | + <el-button | |
831 | + slot="reference" | |
832 | + class="icon-tickets" | |
833 | + type="primary" | |
834 | + circle | |
835 | + size="mini" | |
836 | + icon="el-icon-tickets" | |
837 | + ></el-button> | |
409 | 838 | </el-popover> |
410 | 839 | </div> |
411 | 840 | <div class="qs-upload"> |
412 | 841 | <el-popover placement="right" width="600" trigger="click"> |
413 | 842 | <div class="screenshot-box"> |
414 | - <iframe class="screenshot" v-if="subQuestions.answerScreenshot" | |
415 | - :src="subQuestions.answerScreenshot"></iframe> | |
416 | - <p style="textAlign:center"><el-button type="primary" round size="mini" icon="el-icon-upload" | |
417 | - @click="openStem(subQuestions, index, indexs, 2)">{{ subQuestions.answerScreenshot ? "重新选择图片" | |
418 | - : "上传题目解析" }}</el-button> | |
843 | + <iframe | |
844 | + class="screenshot" | |
845 | + v-if="subQuestions.answerScreenshot" | |
846 | + :src="subQuestions.answerScreenshot" | |
847 | + ></iframe> | |
848 | + <p style="textalign: center"> | |
849 | + <el-button | |
850 | + type="primary" | |
851 | + round | |
852 | + size="mini" | |
853 | + icon="el-icon-upload" | |
854 | + @click="openStem(subQuestions, index, indexs, 2)" | |
855 | + >{{ | |
856 | + subQuestions.answerScreenshot | |
857 | + ? "重新选择图片" | |
858 | + : "上传题目解析" | |
859 | + }}</el-button | |
860 | + > | |
419 | 861 | </p> |
420 | 862 | </div> |
421 | - <el-button slot="reference" class="icon-tickets" type="primary" circle size="mini" | |
422 | - icon="el-icon-tickets"></el-button> | |
863 | + <el-button | |
864 | + slot="reference" | |
865 | + class="icon-tickets" | |
866 | + type="primary" | |
867 | + circle | |
868 | + size="mini" | |
869 | + icon="el-icon-tickets" | |
870 | + ></el-button> | |
423 | 871 | </el-popover> |
424 | 872 | </div> |
425 | 873 | <div class="qs-upload"> |
426 | - <el-button type="primary" circle size="mini" icon="el-icon-price-tag" | |
427 | - @click="openKnowledge(subQuestions, index, indexs)"></el-button> | |
874 | + <el-button | |
875 | + type="primary" | |
876 | + circle | |
877 | + size="mini" | |
878 | + icon="el-icon-price-tag" | |
879 | + @click="openKnowledge(subQuestions, index, indexs)" | |
880 | + ></el-button> | |
428 | 881 | </div> |
429 | 882 | </template> |
430 | 883 | <div class="qs-set"> |
431 | - | |
432 | - <el-popconfirm title="确定删除这道题吗?" @confirm="delTabData(indexs, index)"> | |
433 | - <el-button slot="reference" class="delete" type="danger" size="mini" circle | |
434 | - icon="el-icon-delete"></el-button> | |
884 | + <el-popconfirm | |
885 | + title="确定删除这道题吗?" | |
886 | + @confirm="delTabData(indexs, index)" | |
887 | + > | |
888 | + <el-button | |
889 | + slot="reference" | |
890 | + class="delete" | |
891 | + type="danger" | |
892 | + size="mini" | |
893 | + circle | |
894 | + icon="el-icon-delete" | |
895 | + ></el-button> | |
435 | 896 | </el-popconfirm> |
436 | 897 | </div> |
437 | 898 | </div> |
438 | 899 | </li> |
439 | 900 | </ul> |
440 | 901 | </div> |
441 | - <el-dialog :close-on-click-modal="false" title="批量设置答案" :visible.sync="diaSetAns" width="400" | |
442 | - :modal-append-to-body="false"> | |
902 | + <el-dialog | |
903 | + :close-on-click-modal="false" | |
904 | + title="批量设置答案" | |
905 | + :visible.sync="diaSetAns" | |
906 | + width="400" | |
907 | + :modal-append-to-body="false" | |
908 | + > | |
443 | 909 | <div class="qs-options"> |
444 | 910 | <p class="dia-tips"> |
445 | 911 | 请点击选项按钮设置答案,多选题题目之间用“,”隔开,若添加5道题:“AC,AD,BD,AC,CD” |
446 | 912 | </p> |
447 | 913 | <p>{{ setSubPro(formAns.qusType) }}:</p> |
448 | 914 | <p class="ipt"> |
449 | - <el-input v-if="formAns.qusType == 2 || formAns.qusType == 3" ref="formAnsIpt" v-model="formAns.answerList" | |
915 | + <el-input | |
916 | + v-if="formAns.qusType == 2 || formAns.qusType == 3" | |
917 | + ref="formAnsIpt" | |
918 | + v-model="formAns.answerList" | |
450 | 919 | @keydown.native="keydownAnswer($event, formAns.qusType)" |
451 | - @input="setAllAnswer($event, formAns.qusType)"></el-input> | |
452 | - <el-input v-if="formAns.qusType == 4" v-model="formAns.answerList" readonly=""></el-input> | |
920 | + @input="setAllAnswer($event, formAns.qusType)" | |
921 | + ></el-input> | |
922 | + <el-input | |
923 | + v-if="formAns.qusType == 4" | |
924 | + v-model="formAns.answerList" | |
925 | + readonly="" | |
926 | + ></el-input> | |
453 | 927 | </p> |
454 | 928 | <p class="answer-box"> |
455 | 929 | <template v-if="formAns.qusType == 4"> |
456 | - <span class="answer-s active" @click=" | |
457 | - formAns.answerList.length < formAns.subNum | |
458 | - ? (formAns.answerList += '✓') | |
459 | - : '' | |
460 | - ">✓</span> | |
461 | - <span class="answer-s active" @click=" | |
462 | - formAns.answerList.length < formAns.subNum | |
463 | - ? (formAns.answerList += '✗') | |
464 | - : '' | |
465 | - ">✗</span> | |
930 | + <span | |
931 | + class="answer-s active" | |
932 | + @click=" | |
933 | + formAns.answerList.length < formAns.subNum | |
934 | + ? (formAns.answerList += '✓') | |
935 | + : '' | |
936 | + " | |
937 | + >✓</span | |
938 | + > | |
939 | + <span | |
940 | + class="answer-s active" | |
941 | + @click=" | |
942 | + formAns.answerList.length < formAns.subNum | |
943 | + ? (formAns.answerList += '✗') | |
944 | + : '' | |
945 | + " | |
946 | + >✗</span | |
947 | + > | |
466 | 948 | </template> |
467 | 949 | <template v-if="formAns.qusType == 3"> |
468 | - <span class="answer-s active" v-for="option in formAns.answerOptions.split(',')" :key="option" | |
469 | - @click="setMultiple(formAns, option, 2)">{{ option }}</span> | |
470 | - <span class="answer-s active" @click="setMultiple(formAns, ',', 2)">,</span> | |
950 | + <span | |
951 | + class="answer-s active" | |
952 | + v-for="option in formAns.answerOptions.split(',')" | |
953 | + :key="option" | |
954 | + @click="setMultiple(formAns, option, 2)" | |
955 | + >{{ option }}</span | |
956 | + > | |
957 | + <span | |
958 | + class="answer-s active" | |
959 | + @click="setMultiple(formAns, ',', 2)" | |
960 | + >,</span | |
961 | + > | |
471 | 962 | </template> |
472 | 963 | <template v-if="formAns.qusType == 2"> |
473 | - <span class="answer-s active" v-for="option in formAns.answerOptions.split(',')" :key="option" @click=" | |
474 | - formAns.answerList.length < formAns.subNum | |
475 | - ? (formAns.answerList += option) | |
476 | - : '' | |
477 | - ">{{ option }}</span> | |
964 | + <span | |
965 | + class="answer-s active" | |
966 | + v-for="option in formAns.answerOptions.split(',')" | |
967 | + :key="option" | |
968 | + @click=" | |
969 | + formAns.answerList.length < formAns.subNum | |
970 | + ? (formAns.answerList += option) | |
971 | + : '' | |
972 | + " | |
973 | + >{{ option }}</span | |
974 | + > | |
478 | 975 | </template> |
479 | - <span class="answer-s delButton" @click="formAns.answerList = formAns.answerList.slice(0, -1)">x</span> | |
480 | - <span class="answer-s ac" @click="formAns.answerList = ''">ac</span> | |
976 | + <span | |
977 | + class="answer-s delButton" | |
978 | + @click="formAns.answerList = formAns.answerList.slice(0, -1)" | |
979 | + >x</span | |
980 | + > | |
981 | + <span class="answer-s ac" @click="formAns.answerList = ''" | |
982 | + >ac</span | |
983 | + > | |
481 | 984 | </p> |
482 | 985 | </div> |
483 | 986 | <div class="dialog-footer" slot="footer"> |
... | ... | @@ -486,14 +989,18 @@ |
486 | 989 | </div> |
487 | 990 | </el-dialog> |
488 | 991 | <div class="btn-box"> |
489 | - <el-button type="danger" plain round @click="linkBack">取消</el-button> | |
992 | + <el-button type="danger" plain round @click="linkBack" | |
993 | + >取消</el-button | |
994 | + > | |
490 | 995 | <template v-if="!isUpload"> |
491 | 996 | <el-button round @click="toStep(1)">上一步</el-button> |
492 | 997 | <el-button type="primary" round @click="save">保存</el-button> |
493 | 998 | </template> |
494 | 999 | <template v-else> |
495 | 1000 | <el-button round @click="step = 0">上一步</el-button> |
496 | - <el-button type="primary" round @click="toStep(3)">下一步</el-button> | |
1001 | + <el-button type="primary" round @click="toStep(3)" | |
1002 | + >下一步</el-button | |
1003 | + > | |
497 | 1004 | </template> |
498 | 1005 | </div> |
499 | 1006 | </div> |
... | ... | @@ -503,29 +1010,57 @@ |
503 | 1010 | </div> |
504 | 1011 | <div class="question-box"> |
505 | 1012 | <template v-for="(question, index) in form.questionList"> |
506 | - <div class="screenshot-box" v-for="(subQuestions, indexs) in question.subQuestions" | |
507 | - :key="index + '-' + indexs"> | |
508 | - <iframe class="screenshot" v-if="subQuestions.screenshot" :src="subQuestions.screenshot"></iframe> | |
1013 | + <div | |
1014 | + class="screenshot-box" | |
1015 | + v-for="(subQuestions, indexs) in question.subQuestions" | |
1016 | + :key="index + '-' + indexs" | |
1017 | + > | |
1018 | + <iframe | |
1019 | + class="screenshot" | |
1020 | + v-if="subQuestions.screenshot" | |
1021 | + :src="subQuestions.screenshot" | |
1022 | + ></iframe> | |
509 | 1023 | </div> |
510 | 1024 | </template> |
511 | 1025 | </div> |
512 | 1026 | <div class="btn-box"> |
513 | - <el-button type="danger" plain round @click="linkBack">取消</el-button> | |
1027 | + <el-button type="danger" plain round @click="linkBack" | |
1028 | + >取消</el-button | |
1029 | + > | |
514 | 1030 | <el-button round @click="toStep(2)">上一步</el-button> |
515 | 1031 | <el-button type="primary" round @click="save">保存</el-button> |
516 | 1032 | </div> |
517 | 1033 | </div> |
518 | - <el-dialog :close-on-click-modal="false" :title="stem.type == 1 ? '上传题干' : '上传题目解析'" :visible.sync="dialogStem" | |
519 | - v-if="dialogStem" width="500"> | |
1034 | + <el-dialog | |
1035 | + :close-on-click-modal="false" | |
1036 | + :title="stem.type == 1 ? '上传题干' : '上传题目解析'" | |
1037 | + :visible.sync="dialogStem" | |
1038 | + v-if="dialogStem" | |
1039 | + width="500" | |
1040 | + > | |
520 | 1041 | <div class="upload-box"> |
521 | 1042 | <template v-show="stem.type == 1"> |
522 | - <iframe class="screenshot" v-if="stem.screenshot" :src="stem.screenshot"></iframe> | |
1043 | + <iframe | |
1044 | + class="screenshot" | |
1045 | + v-if="stem.screenshot" | |
1046 | + :src="stem.screenshot" | |
1047 | + ></iframe> | |
523 | 1048 | </template> |
524 | 1049 | <template v-show="stem.type == 2"> |
525 | - <iframe class="screenshot" v-if="stem.answerScreenshot" :src="stem.answerScreenshot"></iframe> | |
1050 | + <iframe | |
1051 | + class="screenshot" | |
1052 | + v-if="stem.answerScreenshot" | |
1053 | + :src="stem.answerScreenshot" | |
1054 | + ></iframe> | |
526 | 1055 | </template> |
527 | - <el-upload class="upload-demo" :action="uploadUrl" :limit="1" :on-success="upSuccess" :on-error="upError" | |
528 | - accept="image/*"> | |
1056 | + <el-upload | |
1057 | + class="upload-demo" | |
1058 | + :action="uploadUrl" | |
1059 | + :limit="1" | |
1060 | + :on-success="upSuccess" | |
1061 | + :on-error="upError" | |
1062 | + accept="image/*" | |
1063 | + > | |
529 | 1064 | <el-button size="small" type="primary">选择照片</el-button> |
530 | 1065 | </el-upload> |
531 | 1066 | </div> |
... | ... | @@ -533,13 +1068,26 @@ |
533 | 1068 | <el-button @click="dialogStem = false">确定</el-button> |
534 | 1069 | </div> |
535 | 1070 | </el-dialog> |
536 | - <el-dialog :close-on-click-modal="false" title="知识点" :visible.sync="dialogKnowledge" width="500"> | |
1071 | + <el-dialog | |
1072 | + :close-on-click-modal="false" | |
1073 | + title="知识点" | |
1074 | + :visible.sync="dialogKnowledge" | |
1075 | + width="500" | |
1076 | + > | |
537 | 1077 | <div> |
538 | 1078 | <el-form ref="form" :model="stem" label-width="160px"> |
539 | 1079 | <el-form-item label="知识点:"> |
540 | - <el-cascader size="small" filterable :show-all-levels="false" collapse clearable placeholder="选择知识点" | |
541 | - v-model="stem.knowledge" :options="knowledgeData" | |
542 | - :props="{ expandTrigger: 'hover', multiple: true }"></el-cascader> | |
1080 | + <el-cascader | |
1081 | + size="small" | |
1082 | + filterable | |
1083 | + :show-all-levels="false" | |
1084 | + collapse | |
1085 | + clearable | |
1086 | + placeholder="选择知识点" | |
1087 | + v-model="stem.knowledge" | |
1088 | + :options="knowledgeData" | |
1089 | + :props="{ expandTrigger: 'hover', multiple: true }" | |
1090 | + ></el-cascader> | |
543 | 1091 | </el-form-item> |
544 | 1092 | </el-form> |
545 | 1093 | </div> |
... | ... | @@ -585,21 +1133,28 @@ export default { |
585 | 1133 | }, |
586 | 1134 | // 知识点列表 根据学段-科目筛选 |
587 | 1135 | knowledgeData: function () { |
588 | - let jsons = [] | |
1136 | + let jsons = []; | |
589 | 1137 | if (this.form.gradeName && this.form.subjectName) { |
590 | - let sectionName = "" | |
591 | - this.gradeClassList.map(item => { | |
1138 | + let sectionName = ""; | |
1139 | + this.gradeClassList.map((item) => { | |
592 | 1140 | if (this.form.gradeName == item.gradeName) { |
593 | - sectionName = item.sectionName | |
1141 | + sectionName = item.sectionName; | |
594 | 1142 | } |
595 | - }) | |
596 | - if (sectionName && Object.keys(this.knowledgeList).includes(sectionName)) { | |
597 | - if (Object.keys(this.knowledgeList[sectionName]).includes(this.form.subjectName)) { | |
598 | - jsons = this.knowledgeList[sectionName][this.form.subjectName] | |
1143 | + }); | |
1144 | + if ( | |
1145 | + sectionName && | |
1146 | + Object.keys(this.knowledgeList).includes(sectionName) | |
1147 | + ) { | |
1148 | + if ( | |
1149 | + Object.keys(this.knowledgeList[sectionName]).includes( | |
1150 | + this.form.subjectName | |
1151 | + ) | |
1152 | + ) { | |
1153 | + jsons = this.knowledgeList[sectionName][this.form.subjectName]; | |
599 | 1154 | } |
600 | 1155 | } |
601 | 1156 | } |
602 | - return jsons | |
1157 | + return jsons; | |
603 | 1158 | }, |
604 | 1159 | }, |
605 | 1160 | watch: { |
... | ... | @@ -698,12 +1253,14 @@ export default { |
698 | 1253 | //返回列表页参数记录 |
699 | 1254 | listType: 1, |
700 | 1255 | listShare: 0, |
701 | - uploadUrl: "/file/uploadImgToHtml" | |
1256 | + uploadUrl: "/file/uploadImgToHtml", | |
702 | 1257 | }; |
703 | 1258 | }, |
704 | 1259 | async created() { |
705 | 1260 | this.listType = this.$route.query.listType ? this.$route.query.listType : 1; |
706 | - this.listShare = this.$route.query.listShare ? this.$route.query.listShare : 0; | |
1261 | + this.listShare = this.$route.query.listShare | |
1262 | + ? this.$route.query.listShare | |
1263 | + : 0; | |
707 | 1264 | this.type = this.$route.query.type ? this.$route.query.type : 1; |
708 | 1265 | this.role = |
709 | 1266 | this.$store.getters.info.showRole || |
... | ... | @@ -714,14 +1271,16 @@ export default { |
714 | 1271 | ]; |
715 | 1272 | await this._GradeList(); |
716 | 1273 | } |
717 | - this.isUpload = this.$route.query.isUpload || false | |
1274 | + this.isUpload = this.$route.query.isUpload || false; | |
718 | 1275 | if (this.isUpload) { |
719 | - let params = this.$route.query.params && JSON.parse(this.$route.query.params) || null | |
720 | - this.form.title = params?.name | |
721 | - this.form.id = params?.id | |
722 | - this.form.examsDuration = params?.examsDuration || 90 | |
723 | - this.form.sharingType = params?.sharingType || 0 | |
724 | - this.formatData(params) | |
1276 | + let params = | |
1277 | + (this.$route.query.params && JSON.parse(this.$route.query.params)) || | |
1278 | + null; | |
1279 | + this.form.title = params?.name; | |
1280 | + this.form.id = params?.id; | |
1281 | + this.form.examsDuration = params?.examsDuration || 90; | |
1282 | + this.form.sharingType = params?.sharingType || 0; | |
1283 | + this.formatData(params); | |
725 | 1284 | } |
726 | 1285 | await this._QuerySubjectList(this.gradeList[0]); |
727 | 1286 | await this._TypeList(); |
... | ... | @@ -752,10 +1311,14 @@ export default { |
752 | 1311 | if (res && res.status == 0) { |
753 | 1312 | if (this.stem.type == 1) { |
754 | 1313 | this.stem.screenshot = res.data.url; |
755 | - this.form.questionList[this.stem.index].subQuestions[this.stem.indexs].screenshot = this.stem.screenshot; | |
1314 | + this.form.questionList[this.stem.index].subQuestions[ | |
1315 | + this.stem.indexs | |
1316 | + ].screenshot = this.stem.screenshot; | |
756 | 1317 | } else { |
757 | 1318 | this.stem.answerScreenshot = res.data.url; |
758 | - this.form.questionList[this.stem.index].subQuestions[this.stem.indexs].answerScreenshot = this.stem.answerScreenshot; | |
1319 | + this.form.questionList[this.stem.index].subQuestions[ | |
1320 | + this.stem.indexs | |
1321 | + ].answerScreenshot = this.stem.answerScreenshot; | |
759 | 1322 | } |
760 | 1323 | this.$message.success("上传成功"); |
761 | 1324 | } else { |
... | ... | @@ -774,7 +1337,9 @@ export default { |
774 | 1337 | }, |
775 | 1338 | // 选择知识点 |
776 | 1339 | setKnowledge() { |
777 | - this.form.questionList[this.stem.index].subQuestions[this.stem.indexs].knowledge = this.stem.knowledge.join("#"); | |
1340 | + this.form.questionList[this.stem.index].subQuestions[ | |
1341 | + this.stem.indexs | |
1342 | + ].knowledge = this.stem.knowledge.join("#"); | |
778 | 1343 | this.dialogKnowledge = false; |
779 | 1344 | }, |
780 | 1345 | //end |
... | ... | @@ -783,7 +1348,7 @@ export default { |
783 | 1348 | linkBack() { |
784 | 1349 | this.$confirm( |
785 | 1350 | (this.type == 2 ? "修改复制的" : "组建的") + |
786 | - "答题卡未保存,确认退出吗?", | |
1351 | + "答题卡未保存,确认退出吗?", | |
787 | 1352 | "提示", |
788 | 1353 | { |
789 | 1354 | confirmButtonText: "取消", |
... | ... | @@ -796,14 +1361,14 @@ export default { |
796 | 1361 | type: "warning", |
797 | 1362 | } |
798 | 1363 | ) |
799 | - .then(() => { }) | |
1364 | + .then(() => {}) | |
800 | 1365 | .catch(() => { |
801 | 1366 | this.$router.push({ |
802 | 1367 | path: "/examinationPaper", |
803 | 1368 | query: { |
804 | 1369 | type: this.listType, |
805 | 1370 | share: this.listShare, |
806 | - } | |
1371 | + }, | |
807 | 1372 | }); |
808 | 1373 | }); |
809 | 1374 | }, |
... | ... | @@ -828,8 +1393,8 @@ export default { |
828 | 1393 | }, |
829 | 1394 | //计算题号 |
830 | 1395 | setNum(index, indexs, sub) { |
831 | - let lengths = 0;//所在大题之前的所有小题数量 | |
832 | - let subIndex = 0;//所在大题的位置 | |
1396 | + let lengths = 0; //所在大题之前的所有小题数量 | |
1397 | + let subIndex = 0; //所在大题的位置 | |
833 | 1398 | for (let i = 0; i < index; i++) { |
834 | 1399 | let subArr = this.form.questionList[i].subQuestions.filter((item) => { |
835 | 1400 | return !!item.questionType; |
... | ... | @@ -846,16 +1411,17 @@ export default { |
846 | 1411 | //统计小题数量 |
847 | 1412 | setNums(ques) { |
848 | 1413 | let lengths = 0; |
849 | - let subArr = ques?.filter((item) => { | |
850 | - return !!item.questionType; | |
851 | - }) || []; | |
1414 | + let subArr = | |
1415 | + ques?.filter((item) => { | |
1416 | + return !!item.questionType; | |
1417 | + }) || []; | |
852 | 1418 | lengths = subArr.length; |
853 | 1419 | return lengths; |
854 | 1420 | }, |
855 | 1421 | //转换中文大题题号 |
856 | 1422 | setBigNum(num) { |
857 | 1423 | let txt = ""; |
858 | - let bigNum = [...cNum] | |
1424 | + let bigNum = [...cNum]; | |
859 | 1425 | txt = bigNum[num]; |
860 | 1426 | |
861 | 1427 | return txt; |
... | ... | @@ -952,7 +1518,7 @@ export default { |
952 | 1518 | if (this.formAns.endIndex == item.questionIndex) { |
953 | 1519 | EndIndex = index; |
954 | 1520 | } |
955 | - return this.formAns.endIndex == item.questionIndex | |
1521 | + return this.formAns.endIndex == item.questionIndex; | |
956 | 1522 | } |
957 | 1523 | ); |
958 | 1524 | for (let i = 0; i <= subNum; i++) { |
... | ... | @@ -966,8 +1532,8 @@ export default { |
966 | 1532 | this.formAns.answerList[subNum - i] == "✓" |
967 | 1533 | ? 1 |
968 | 1534 | : this.formAns.answerList[subNum - i] == "✗" |
969 | - ? 2 | |
970 | - : ""; | |
1535 | + ? 2 | |
1536 | + : ""; | |
971 | 1537 | } |
972 | 1538 | this.form.questionList[this.formAns.listIndex].subQuestions[ |
973 | 1539 | EndIndex - i |
... | ... | @@ -1041,7 +1607,7 @@ export default { |
1041 | 1607 | }, |
1042 | 1608 | toStep(step) { |
1043 | 1609 | if (step == 2) { |
1044 | - this.setStep2() | |
1610 | + this.setStep2(); | |
1045 | 1611 | } else { |
1046 | 1612 | this.formatQuestionList(); |
1047 | 1613 | this.step = step; |
... | ... | @@ -1066,7 +1632,8 @@ export default { |
1066 | 1632 | if (!this.form.questionList.length) { |
1067 | 1633 | this.$message.warning("请添加题目!"); |
1068 | 1634 | return; |
1069 | - } this.formatQuestionList() | |
1635 | + } | |
1636 | + this.formatQuestionList(); | |
1070 | 1637 | //添加题目ID、序号 |
1071 | 1638 | this.form.questionList.map((item, index) => { |
1072 | 1639 | item.questionType = 0; |
... | ... | @@ -1076,12 +1643,12 @@ export default { |
1076 | 1643 | }); |
1077 | 1644 | }); |
1078 | 1645 | //整理问题 |
1079 | - this.formateQuestion() | |
1646 | + this.formateQuestion(); | |
1080 | 1647 | this.step = 2; |
1081 | 1648 | return; |
1082 | 1649 | }, |
1083 | 1650 | formateQuestion() { |
1084 | - this.formatQuestionList() | |
1651 | + this.formatQuestionList(); | |
1085 | 1652 | this.form.questionList?.map((item) => { |
1086 | 1653 | let types = [{}]; |
1087 | 1654 | let addndex = 0; |
... | ... | @@ -1197,8 +1764,8 @@ export default { |
1197 | 1764 | this.questionForm.answerList[i] == "✓" |
1198 | 1765 | ? 1 |
1199 | 1766 | : this.questionForm.answerList[i] == "✗" |
1200 | - ? 2 | |
1201 | - : ""; | |
1767 | + ? 2 | |
1768 | + : ""; | |
1202 | 1769 | } else if (questionsOptions.questionType == 3) { |
1203 | 1770 | answer = this.questionForm.answerList.split(",")[i] || ""; |
1204 | 1771 | } else if (questionsOptions.questionType == 2) { |
... | ... | @@ -1220,9 +1787,9 @@ export default { |
1220 | 1787 | delTabData(subIndex, index) { |
1221 | 1788 | this.form.questionList[index].subQuestions.splice(subIndex, 1); |
1222 | 1789 | if (this.form.questionList[index].subQuestions.length == 0) { |
1223 | - this.form.questionList.splice(index, 1) | |
1790 | + this.form.questionList.splice(index, 1); | |
1224 | 1791 | } |
1225 | - this.formateQuestion() | |
1792 | + this.formateQuestion(); | |
1226 | 1793 | }, |
1227 | 1794 | setScore(question) { |
1228 | 1795 | let score = question.subQuestions?.reduce((a, b) => { |
... | ... | @@ -1256,7 +1823,9 @@ export default { |
1256 | 1823 | questionsOptions.selectNum = 0; |
1257 | 1824 | break; |
1258 | 1825 | } |
1259 | - question.subQuestions ? question.subQuestions.push(questionsOptions) : question.subQuestions = [(questionsOptions)]; | |
1826 | + question.subQuestions | |
1827 | + ? question.subQuestions.push(questionsOptions) | |
1828 | + : (question.subQuestions = [questionsOptions]); | |
1260 | 1829 | this.addSubQuestionsType = ""; |
1261 | 1830 | } |
1262 | 1831 | }, |
... | ... | @@ -1286,7 +1855,7 @@ export default { |
1286 | 1855 | subQuestions.selectNum = 0; |
1287 | 1856 | break; |
1288 | 1857 | } |
1289 | - this.formateQuestion() | |
1858 | + this.formateQuestion(); | |
1290 | 1859 | }, |
1291 | 1860 | //添加选项 |
1292 | 1861 | addOptions(subQuestions) { |
... | ... | @@ -1426,7 +1995,7 @@ export default { |
1426 | 1995 | query: { |
1427 | 1996 | type: this.listType, |
1428 | 1997 | share: this.listShare, |
1429 | - } | |
1998 | + }, | |
1430 | 1999 | }); |
1431 | 2000 | } else { |
1432 | 2001 | this.$message.error(info); |
... | ... | @@ -1473,12 +2042,12 @@ export default { |
1473 | 2042 | const { data, status, info } = await fetchClassList(); |
1474 | 2043 | if (status == 0) { |
1475 | 2044 | this.gradeClassList = data.list?.map((item) => { |
1476 | - console.log(!this.gradeList.includes(item.gradeName)) | |
2045 | + console.log(!this.gradeList.includes(item.gradeName)); | |
1477 | 2046 | if (!this.gradeList.includes(item.gradeName)) { |
1478 | - this.gradeList.push(item.gradeName) | |
2047 | + this.gradeList.push(item.gradeName); | |
1479 | 2048 | } |
1480 | - return item | |
1481 | - }) | |
2049 | + return item; | |
2050 | + }); | |
1482 | 2051 | // this.gradeList = (data.gradeNames && [...data.gradeNames]) || []; |
1483 | 2052 | if (this.type != 2) { |
1484 | 2053 | this.form.gradeName = this.gradeList[0]; |
... | ... | @@ -1502,10 +2071,10 @@ export default { |
1502 | 2071 | } |
1503 | 2072 | const { data, status, info } = await fetchSubjectList({ ...query }); |
1504 | 2073 | if (status === 0) { |
1505 | - let subjectArr = [] | |
2074 | + let subjectArr = []; | |
1506 | 2075 | this.subjectList = |
1507 | 2076 | data.subjectNames?.map((item) => { |
1508 | - subjectArr.push(item.subjectName || item) | |
2077 | + subjectArr.push(item.subjectName || item); | |
1509 | 2078 | return { |
1510 | 2079 | value: this.role == "ROLE_PERSONAL" ? item.subjectName : item, |
1511 | 2080 | label: this.role == "ROLE_PERSONAL" ? item.subjectName : item, |
... | ... | @@ -1539,7 +2108,7 @@ export default { |
1539 | 2108 | this.form.sharingType = data.sharingType; |
1540 | 2109 | } |
1541 | 2110 | this.form.tagId = ""; |
1542 | - this.formatData(data) | |
2111 | + this.formatData(data); | |
1543 | 2112 | } else { |
1544 | 2113 | this.$message.error(info); |
1545 | 2114 | } |
... | ... | @@ -1585,7 +2154,7 @@ export default { |
1585 | 2154 | show: false, |
1586 | 2155 | }; |
1587 | 2156 | }); |
1588 | - } | |
2157 | + }, | |
1589 | 2158 | }, |
1590 | 2159 | }; |
1591 | 2160 | </script> |
... | ... | @@ -1866,7 +2435,7 @@ export default { |
1866 | 2435 | display: flex; |
1867 | 2436 | border-bottom: 1px solid #e2e2e2; |
1868 | 2437 | |
1869 | - &>div { | |
2438 | + & > div { | |
1870 | 2439 | min-height: 40px; |
1871 | 2440 | padding: 5px; |
1872 | 2441 | flex-shrink: 0; |
... | ... | @@ -1931,13 +2500,8 @@ export default { |
1931 | 2500 | .upload-demo { |
1932 | 2501 | text-align: center; |
1933 | 2502 | } |
1934 | - | |
1935 | - .stem-pic { | |
1936 | - display: block; | |
1937 | - margin: 0 auto 20px; | |
1938 | - max-width: 100%; | |
1939 | - max-height: 200px; | |
1940 | - object-fit: cover; | |
2503 | + .screenshot { | |
2504 | + width: 100%; | |
1941 | 2505 | } |
1942 | 2506 | } |
1943 | 2507 | </style> |
1944 | 2508 | \ No newline at end of file | ... | ... |
src/views/examinationPaper/index.vue
... | ... | @@ -5,23 +5,59 @@ |
5 | 5 | <span>备题组卷</span> |
6 | 6 | </template> |
7 | 7 | <template slot="btns"> |
8 | - <el-tooltip v-if="!code && gdClass" effect="dark" content="已归档试卷" placement="bottom"> | |
9 | - <el-button type="primary" icon="fa fa-archive" size="mini" plain circle @click="toArchiving"></el-button> | |
8 | + <el-tooltip | |
9 | + v-if="!code && gdClass" | |
10 | + effect="dark" | |
11 | + content="已归档试卷" | |
12 | + placement="bottom" | |
13 | + > | |
14 | + <el-button | |
15 | + type="primary" | |
16 | + icon="fa fa-archive" | |
17 | + size="mini" | |
18 | + plain | |
19 | + circle | |
20 | + @click="toArchiving" | |
21 | + ></el-button> | |
10 | 22 | </el-tooltip> |
11 | 23 | </template> |
12 | 24 | </back-box> |
13 | 25 | <div class="examinationPaper-type"> |
14 | 26 | <el-button-group> |
15 | - <el-button size="large" :type="query.type == 1 ? 'primary' : 'default'" @click="changPaperType(1)">备题</el-button> | |
16 | - <el-button size="large" :type="query.type == 2 ? 'primary' : 'default'" @click="changPaperType(2)">组卷</el-button> | |
27 | + <el-button | |
28 | + size="large" | |
29 | + :type="query.type == 1 ? 'primary' : 'default'" | |
30 | + @click="changPaperType(1)" | |
31 | + >备题</el-button | |
32 | + > | |
33 | + <el-button | |
34 | + size="large" | |
35 | + :type="query.type == 2 ? 'primary' : 'default'" | |
36 | + @click="changPaperType(2)" | |
37 | + >组卷</el-button | |
38 | + > | |
17 | 39 | </el-button-group> |
18 | 40 | |
19 | 41 | <p> |
20 | - <el-button v-if="query.type == 1" type="primary" size="mini" icon="el-icon-plus" round @click="diaUp = true"> | |
21 | - 导入课件</el-button> | |
22 | - | |
23 | - <el-dropdown v-if="query.type == 2" trigger="click" @command="handleAdd"> | |
24 | - <el-button type="primary" size="mini" icon="el-icon-plus" round>添加试卷</el-button> | |
42 | + <el-button | |
43 | + v-if="query.type == 1" | |
44 | + type="primary" | |
45 | + size="mini" | |
46 | + icon="el-icon-plus" | |
47 | + round | |
48 | + @click="diaUp = true" | |
49 | + > | |
50 | + 导入课件</el-button | |
51 | + > | |
52 | + | |
53 | + <el-dropdown | |
54 | + v-if="query.type == 2" | |
55 | + trigger="click" | |
56 | + @command="handleAdd" | |
57 | + > | |
58 | + <el-button type="primary" size="mini" icon="el-icon-plus" round | |
59 | + >添加试卷</el-button | |
60 | + > | |
25 | 61 | <el-dropdown-menu slot="dropdown"> |
26 | 62 | <el-dropdown-item :command="1">导入试卷</el-dropdown-item> |
27 | 63 | <el-dropdown-item :command="2">手动创建</el-dropdown-item> |
... | ... | @@ -31,20 +67,60 @@ |
31 | 67 | </div> |
32 | 68 | <div class="answer-header"> |
33 | 69 | <div class="sel-box"> |
34 | - <el-select class="sel" v-model="query.classId" placeholder="选择班级" @change="changClazz"> | |
35 | - <el-option v-for="item in classList" :key="item.value" :label="item.label" :value="item.value"> | |
70 | + <el-select | |
71 | + class="sel" | |
72 | + v-model="query.classId" | |
73 | + placeholder="选择班级" | |
74 | + @change="changClazz" | |
75 | + > | |
76 | + <el-option | |
77 | + v-for="item in classList" | |
78 | + :key="item.value" | |
79 | + :label="item.label" | |
80 | + :value="item.value" | |
81 | + > | |
36 | 82 | </el-option> |
37 | 83 | </el-select> |
38 | - <el-select class="sel" v-model="query.subjectName" placeholder="选择科目" @change="getData(false)"> | |
39 | - <el-option v-for="item in subjectList" :key="item.value" :label="item.label" :value="item.value"> | |
84 | + <el-select | |
85 | + class="sel" | |
86 | + v-model="query.subjectName" | |
87 | + placeholder="选择科目" | |
88 | + @change="getData(false)" | |
89 | + > | |
90 | + <el-option | |
91 | + v-for="item in subjectList" | |
92 | + :key="item.value" | |
93 | + :label="item.label" | |
94 | + :value="item.value" | |
95 | + > | |
40 | 96 | </el-option> |
41 | 97 | </el-select> |
42 | - <el-select v-if="query.type == 2" class="sel" v-model="query.tagId" placeholder="选择类型" @change="getData(false)"> | |
43 | - <el-option v-for="item in typeList" :key="item.label" :label="item.label" :value="item.value">{{ item.label }} | |
98 | + <el-select | |
99 | + v-if="query.type == 2" | |
100 | + class="sel" | |
101 | + v-model="query.tagId" | |
102 | + placeholder="选择类型" | |
103 | + @change="getData(false)" | |
104 | + > | |
105 | + <el-option | |
106 | + v-for="item in typeList" | |
107 | + :key="item.label" | |
108 | + :label="item.label" | |
109 | + :value="item.value" | |
110 | + >{{ item.label }} | |
44 | 111 | </el-option> |
45 | 112 | </el-select> |
46 | - <el-input placeholder="试卷名称" v-model="query.title" class="input-with-select" @keyup.enter.native="getData(true)"> | |
47 | - <el-button slot="append" icon="el-icon-search" @click="getData(true)"></el-button> | |
113 | + <el-input | |
114 | + placeholder="试卷名称" | |
115 | + v-model="query.title" | |
116 | + class="input-with-select" | |
117 | + @keyup.enter.native="getData(true)" | |
118 | + > | |
119 | + <el-button | |
120 | + slot="append" | |
121 | + icon="el-icon-search" | |
122 | + @click="getData(true)" | |
123 | + ></el-button> | |
48 | 124 | </el-input> |
49 | 125 | </div> |
50 | 126 | </div> |
... | ... | @@ -54,10 +130,16 @@ |
54 | 130 | </p> |
55 | 131 | <div class="content"> |
56 | 132 | <p class="tab-box"> |
57 | - <span :class="['tab-s', query.share == 0 ? 'active' : '']" @click="changShare(0)">我自编的 ({{ totalCount.my | |
58 | - }})</span> | |
59 | - <span :class="['tab-s', query.share == 1 ? 'active' : '']" @click="changShare(1)">年级共享的 ({{ totalCount.share | |
60 | - }})</span> | |
133 | + <span | |
134 | + :class="['tab-s', query.share == 0 ? 'active' : '']" | |
135 | + @click="changShare(0)" | |
136 | + >我自编的 ({{ totalCount.my }})</span | |
137 | + > | |
138 | + <span | |
139 | + :class="['tab-s', query.share == 1 ? 'active' : '']" | |
140 | + @click="changShare(1)" | |
141 | + >年级共享的 ({{ totalCount.share }})</span | |
142 | + > | |
61 | 143 | </p> |
62 | 144 | <ul v-if="tableData && tableData.length" v-loading="loading"> |
63 | 145 | <li class="item" v-for="item in tableData" :key="item.id"> |
... | ... | @@ -79,48 +161,99 @@ |
79 | 161 | </template> |
80 | 162 | <template v-if="role != 'ROLE_PERSONAL'"> |
81 | 163 | 授课端同步: |
82 | - <span class="clazz" v-for="(clazzChild, indexs) in item.classList" :key="clazzChild.classId" | |
83 | - :class="clazzChild.keepStatus == 1 ? 'active' : ''">{{ | |
84 | - `${clazzChild.className}${indexs != item.classList.length - 1 ? "、" : "" | |
85 | - }` | |
164 | + <span | |
165 | + class="clazz" | |
166 | + v-for="(clazzChild, indexs) in item.classList" | |
167 | + :key="clazzChild.classId" | |
168 | + :class="clazzChild.keepStatus == 1 ? 'active' : ''" | |
169 | + >{{ | |
170 | + `${clazzChild.className}${ | |
171 | + indexs != item.classList.length - 1 ? "、" : "" | |
172 | + }` | |
86 | 173 | }} |
87 | - <i v-if="clazzChild.keepStatus == 1" class="el-icon-success"></i></span> | |
88 | - <el-tooltip effect="dark" content="刷新同步状态" placement="right"> | |
89 | - <i class="icon-refresh el-icon-refresh" @click="refreshStic"></i> | |
174 | + <i | |
175 | + v-if="clazzChild.keepStatus == 1" | |
176 | + class="el-icon-success" | |
177 | + ></i | |
178 | + ></span> | |
179 | + <el-tooltip | |
180 | + effect="dark" | |
181 | + content="刷新同步状态" | |
182 | + placement="right" | |
183 | + > | |
184 | + <i | |
185 | + class="icon-refresh el-icon-refresh" | |
186 | + @click="refreshStic" | |
187 | + ></i> | |
90 | 188 | </el-tooltip> |
91 | 189 | </template> |
92 | 190 | </p> |
93 | 191 | <p class="person"> |
94 | - {{ item.realName }}<em class="s-line">|</em><span class="date">{{ item.modifiedTime }}</span> | |
192 | + {{ item.realName }}<em class="s-line">|</em | |
193 | + ><span class="date">{{ item.modifiedTime }}</span> | |
95 | 194 | </p> |
96 | 195 | </div> |
97 | 196 | <div class="btn-box"> |
98 | 197 | <el-tooltip effect="dark" content="修改答案" placement="bottom"> |
99 | - <el-button class="edit" type="primary" size="mini" circle icon="el-icon-edit" | |
100 | - @click="toEdit(item)"></el-button> | |
198 | + <el-button | |
199 | + class="edit" | |
200 | + type="primary" | |
201 | + size="mini" | |
202 | + circle | |
203 | + icon="el-icon-edit" | |
204 | + @click="toEdit(item)" | |
205 | + ></el-button> | |
101 | 206 | </el-tooltip> |
102 | - <el-dropdown trigger="click" @command="handleDropdownClick($event, item)"> | |
103 | - <el-button type="info" size="mini" circle icon="el-icon-more"></el-button> | |
207 | + <el-dropdown | |
208 | + trigger="click" | |
209 | + @command="handleDropdownClick($event, item)" | |
210 | + > | |
211 | + <el-button | |
212 | + type="info" | |
213 | + size="mini" | |
214 | + circle | |
215 | + icon="el-icon-more" | |
216 | + ></el-button> | |
104 | 217 | <el-dropdown-menu slot="dropdown"> |
105 | - <el-dropdown-item :command="1" | |
106 | - v-if="userName == item.realName && role != 'ROLE_PERSONAL'">修改分享范围</el-dropdown-item> | |
218 | + <el-dropdown-item | |
219 | + :command="1" | |
220 | + v-if="userName == item.realName && role != 'ROLE_PERSONAL'" | |
221 | + >修改分享范围</el-dropdown-item | |
222 | + > | |
107 | 223 | <el-dropdown-item :command="2">复制</el-dropdown-item> |
108 | - <el-dropdown-item v-show="query.share == 0" :command="3">放入回收站</el-dropdown-item> | |
224 | + <el-dropdown-item v-show="query.share == 0" :command="3" | |
225 | + >放入回收站</el-dropdown-item | |
226 | + > | |
109 | 227 | </el-dropdown-menu> |
110 | 228 | </el-dropdown> |
111 | 229 | </div> |
112 | 230 | </li> |
113 | 231 | </ul> |
114 | 232 | <div class="pagination-box"> |
115 | - <el-pagination small="" layout="total,prev, pager, next" :hide-on-single-page="true" :total="total" | |
116 | - @current-change="changePage" :current-page="page" :page-size="size"> | |
233 | + <el-pagination | |
234 | + small="" | |
235 | + layout="total,prev, pager, next" | |
236 | + :hide-on-single-page="true" | |
237 | + :total="total" | |
238 | + @current-change="changePage" | |
239 | + :current-page="page" | |
240 | + :page-size="size" | |
241 | + > | |
117 | 242 | </el-pagination> |
118 | 243 | </div> |
119 | - <el-empty v-if="!loading && tableData.length == 0" content="没有更多数据" :image-size="100"></el-empty> | |
244 | + <el-empty | |
245 | + v-if="!loading && tableData.length == 0" | |
246 | + content="没有更多数据" | |
247 | + :image-size="100" | |
248 | + ></el-empty> | |
120 | 249 | </div> |
121 | 250 | |
122 | - | |
123 | - <el-dialog :close-on-click-modal="false" title="选择分享范围" :visible.sync="dialogVisible" width="400px"> | |
251 | + <el-dialog | |
252 | + :close-on-click-modal="false" | |
253 | + title="选择分享范围" | |
254 | + :visible.sync="dialogVisible" | |
255 | + width="400px" | |
256 | + > | |
124 | 257 | <el-form :model="shareForm" :rules="shareRulesForm" label-width="160px"> |
125 | 258 | <el-form-item prop="share" label="分享范围:"> |
126 | 259 | <el-radio-group v-model="shareForm.sharingType"> |
... | ... | @@ -134,16 +267,33 @@ |
134 | 267 | <el-button @click="dialogVisible = false">取 消</el-button> |
135 | 268 | </div> |
136 | 269 | </el-dialog> |
137 | - <el-dialog :close-on-click-modal="false" title="上传word文档" :visible.sync="diaUp" width="600px"> | |
138 | - <upload :url="url" :params="{ type: query.type }" @upSuccess="upSuccess" fileName="下载"> | |
270 | + <el-dialog | |
271 | + :close-on-click-modal="false" | |
272 | + title="上传word文档" | |
273 | + :visible.sync="diaUp" | |
274 | + width="600px" | |
275 | + > | |
276 | + <upload | |
277 | + :url="url" | |
278 | + :params="{ type: query.type }" | |
279 | + @upSuccess="upSuccess" | |
280 | + fileName="下载" | |
281 | + > | |
139 | 282 | <div class="down-box" slot="down"> |
140 | - <p class="down-head"> <span>第一步:导出菁优网试卷,</span> | |
141 | - <!-- <el-link type="danger" @click="downExcel">模板下载</el-link> 。 --> | |
283 | + <p class="down-head"> | |
284 | + <span>第一步:导出菁优网试卷,</span> | |
285 | + | |
142 | 286 | <span class="img-box"> |
143 | - <el-image class="img" :src="examplePic" :preview-src-list="examplePicList"> | |
287 | + <el-image | |
288 | + class="img" | |
289 | + :src="examplePic" | |
290 | + :preview-src-list="examplePicList" | |
291 | + > | |
144 | 292 | </el-image> |
145 | 293 | 导出选项示例。 |
146 | 294 | </span> |
295 | + 或者 | |
296 | + <el-link type="primary" @click="downExcel">下载模板</el-link> 。 | |
147 | 297 | </p> |
148 | 298 | <p>第二步:上传完成编辑好的试卷。</p> |
149 | 299 | </div> |
... | ... | @@ -158,7 +308,7 @@ |
158 | 308 | <script> |
159 | 309 | import { downloadFile } from "@/utils"; |
160 | 310 | import axios from "axios"; |
161 | -import example from "@/assets/images/example.jpg" | |
311 | +import example from "@/assets/images/example.jpg"; | |
162 | 312 | export default { |
163 | 313 | name: "examinationPaper", |
164 | 314 | data() { |
... | ... | @@ -195,14 +345,15 @@ export default { |
195 | 345 | size: 20, |
196 | 346 | |
197 | 347 | // v1.5 |
198 | - totalCount: {//数量统计 | |
348 | + totalCount: { | |
349 | + //数量统计 | |
199 | 350 | my: 0, |
200 | 351 | share: 0, |
201 | 352 | }, |
202 | - diaUp: false,//上传word弹窗开关 | |
203 | - url: "/api_html/common/paper/upload",//上传文档地址 | |
353 | + diaUp: false, //上传word弹窗开关 | |
354 | + url: "/api_html/common/paper/upload", //上传文档地址 | |
204 | 355 | examplePic: example, |
205 | - examplePicList: [example] | |
356 | + examplePicList: [example], | |
206 | 357 | }; |
207 | 358 | }, |
208 | 359 | async created() { |
... | ... | @@ -213,12 +364,12 @@ export default { |
213 | 364 | this.userName = this.$store.getters.info.name || ""; |
214 | 365 | this.query.type = this.$route.query.type || 1; |
215 | 366 | this.query.share = this.$route.query.share || 0; |
216 | - this._QueryClassList2() | |
367 | + this._QueryClassList2(); | |
217 | 368 | await this._QueryClassList(); |
218 | 369 | if (!this.query.classId) { |
219 | 370 | return; |
220 | 371 | } |
221 | - this._QueryTypeList() | |
372 | + this._QueryTypeList(); | |
222 | 373 | await this._QuerySubjectList(); |
223 | 374 | this._QueryData(); |
224 | 375 | }, |
... | ... | @@ -246,8 +397,8 @@ export default { |
246 | 397 | ...query, |
247 | 398 | listType: this.query.type, |
248 | 399 | listShare: this.query.share, |
249 | - subjectName: this.query.subjectName | |
250 | - } | |
400 | + subjectName: this.query.subjectName, | |
401 | + }, | |
251 | 402 | }; |
252 | 403 | this.$router.push(routerItem); |
253 | 404 | }, |
... | ... | @@ -263,7 +414,7 @@ export default { |
263 | 414 | ...query, |
264 | 415 | listType: this.query.type, |
265 | 416 | listShare: this.query.share, |
266 | - } | |
417 | + }, | |
267 | 418 | }; |
268 | 419 | this.$router.push(routerItem); |
269 | 420 | }, |
... | ... | @@ -272,11 +423,12 @@ export default { |
272 | 423 | path: "/examinationPaperEdit", |
273 | 424 | query: { |
274 | 425 | paperId: item.id, |
275 | - paperType: this.query.type | |
426 | + paperType: this.query.type, | |
276 | 427 | }, |
277 | 428 | }); |
278 | 429 | }, |
279 | - handleDropdownClick(value, item) {//更多 | |
430 | + handleDropdownClick(value, item) { | |
431 | + //更多 | |
280 | 432 | const that = this; |
281 | 433 | switch (value) { |
282 | 434 | case 1: |
... | ... | @@ -300,9 +452,9 @@ export default { |
300 | 452 | } |
301 | 453 | }, |
302 | 454 | changPaperType(type) { |
303 | - this.query.type = type | |
304 | - this.query.tagId = "" | |
305 | - this.changShare(0) | |
455 | + this.query.type = type; | |
456 | + this.query.tagId = ""; | |
457 | + this.changShare(0); | |
306 | 458 | }, |
307 | 459 | changePage(page) { |
308 | 460 | this.page = page; |
... | ... | @@ -351,22 +503,22 @@ export default { |
351 | 503 | async changClazz() { |
352 | 504 | this.page = 1; |
353 | 505 | if (this.query.type == 2) { |
354 | - await this._QueryTypeList() | |
506 | + await this._QueryTypeList(); | |
355 | 507 | } |
356 | 508 | await this._QuerySubjectList(); |
357 | 509 | this._QueryData(false); |
358 | 510 | }, |
359 | 511 | //切换类型 |
360 | 512 | async changShare(share) { |
361 | - this.query.share = share | |
513 | + this.query.share = share; | |
362 | 514 | this.page = 1; |
363 | 515 | this.$router.replace({ |
364 | 516 | name: "examinationPaper", |
365 | 517 | query: { |
366 | 518 | type: this.query.type, |
367 | 519 | share: this.query.share, |
368 | - } | |
369 | - }) | |
520 | + }, | |
521 | + }); | |
370 | 522 | this._QueryData(false); |
371 | 523 | }, |
372 | 524 | // 查找班级 |
... | ... | @@ -456,7 +608,7 @@ export default { |
456 | 608 | value: "", |
457 | 609 | label: "请选择标签", |
458 | 610 | }); |
459 | - this.query.tagId = "" | |
611 | + this.query.tagId = ""; | |
460 | 612 | } else { |
461 | 613 | this.$message.error(info); |
462 | 614 | } |
... | ... | @@ -472,7 +624,7 @@ export default { |
472 | 624 | query = { ...this.query }; |
473 | 625 | for (let key in query) { |
474 | 626 | if (!query[key] && query[key] !== 0) { |
475 | - delete query[key] | |
627 | + delete query[key]; | |
476 | 628 | } |
477 | 629 | } |
478 | 630 | if (!query.classId) { |
... | ... | @@ -505,7 +657,6 @@ export default { |
505 | 657 | } |
506 | 658 | }, |
507 | 659 | |
508 | - | |
509 | 660 | //v1.5 |
510 | 661 | upSuccess(res) { |
511 | 662 | if (res.status == 0) { |
... | ... | @@ -518,32 +669,31 @@ export default { |
518 | 669 | duration: 2000, |
519 | 670 | }); |
520 | 671 | this.diaUp = false; |
521 | - let params = JSON.stringify(res.data) | |
672 | + let params = JSON.stringify(res.data); | |
522 | 673 | if (this.query.type == 2) { |
523 | - this.toAdd({ params, isUpload: 1 }) | |
674 | + this.toAdd({ params, isUpload: 1 }); | |
524 | 675 | } else { |
525 | - this.toAddQs({ params }) | |
676 | + this.toAddQs({ params }); | |
526 | 677 | } |
527 | 678 | } |
528 | 679 | }, |
529 | 680 | handleAdd(value) { |
530 | 681 | if (value == 2) { |
531 | - this.toAdd() | |
682 | + this.toAdd(); | |
532 | 683 | } else { |
533 | - this.diaUp = true | |
684 | + this.diaUp = true; | |
534 | 685 | } |
535 | 686 | }, |
536 | 687 | |
537 | - | |
538 | 688 | async downExcel() { |
539 | 689 | axios("static/试卷模板.docx", { |
540 | - responseType: "arraybuffer" | |
541 | - }).then(res => { | |
690 | + responseType: "arraybuffer", | |
691 | + }).then((res) => { | |
542 | 692 | let blob = new Blob([res.data], { |
543 | 693 | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
544 | 694 | }); |
545 | 695 | downloadFile("试卷模板.docx", blob); |
546 | - }) | |
696 | + }); | |
547 | 697 | }, |
548 | 698 | }, |
549 | 699 | }; |
... | ... | @@ -724,7 +874,7 @@ export default { |
724 | 874 | |
725 | 875 | &.active { |
726 | 876 | color: #667ffd; |
727 | - border-bottom: 1px solid #667ffd | |
877 | + border-bottom: 1px solid #667ffd; | |
728 | 878 | } |
729 | 879 | } |
730 | 880 | } |
... | ... | @@ -737,7 +887,7 @@ export default { |
737 | 887 | |
738 | 888 | .img-box { |
739 | 889 | position: relative; |
740 | - color: #667ffd; | |
890 | + color: #409EFF; | |
741 | 891 | |
742 | 892 | .img { |
743 | 893 | position: absolute; | ... | ... |