Commit d5987f6abf3096cca742d8315a75f9e954bf9a28
1 parent
75a5cc20
组件修改答案
Showing
7 changed files
with
420 additions
and
662 deletions
src/components/setAnswer.vue
0 → 100644
1 | +<template> | |
2 | + <el-dialog :visible.sync="diaVisible" width="400" center> | |
3 | + <div slot="title"> | |
4 | + <p> | |
5 | + <!-- 设置答案 <i class="fa fa-exchange" @click="editType = !editType"></i> --> | |
6 | + 设置答案 | |
7 | + </p> | |
8 | + </div> | |
9 | + <div v-show="editType"> | |
10 | + <div v-for="(item, index) in FormQuestionList" :key="index"> | |
11 | + <template v-for="(subQuestions, indexs) in item.subQuestions"> | |
12 | + <div | |
13 | + class="sub-questions" | |
14 | + :key="indexs" | |
15 | + v-if="subQuestions.correctAnswer" | |
16 | + > | |
17 | + <div class="qs-num">题{{ subQuestions.questionIndex }}</div> | |
18 | + <div class="qs-options qs-options2"> | |
19 | + <p v-if="subQuestions.questionType == 4" class="answer-box"> | |
20 | + <span | |
21 | + class="answer-s" | |
22 | + :class="subQuestions.correctAnswer == 1 ? 'active' : ''" | |
23 | + @click="subQuestions.correctAnswer = 1" | |
24 | + >✓</span | |
25 | + > | |
26 | + <span | |
27 | + class="answer-s" | |
28 | + :class="subQuestions.correctAnswer == 2 ? 'active' : ''" | |
29 | + @click="subQuestions.correctAnswer = 2" | |
30 | + >✗</span | |
31 | + > | |
32 | + </p> | |
33 | + <p v-if="subQuestions.questionType == 3" class="answer-box"> | |
34 | + <span | |
35 | + class="answer-s" | |
36 | + v-for="option in subQuestions.answerOptions" | |
37 | + :class=" | |
38 | + subQuestions.correctAnswer.includes(option) ? 'active' : '' | |
39 | + " | |
40 | + :key="option" | |
41 | + @click="changAnswer(subQuestions, option)" | |
42 | + >{{ option }}</span | |
43 | + > | |
44 | + </p> | |
45 | + <p v-if="subQuestions.questionType == 2" class="answer-box"> | |
46 | + <span | |
47 | + class="answer-s" | |
48 | + v-for="option in subQuestions.answerOptions" | |
49 | + :class="subQuestions.correctAnswer == option ? 'active' : ''" | |
50 | + :key="option" | |
51 | + @click="subQuestions.correctAnswer = option" | |
52 | + >{{ option }}</span | |
53 | + > | |
54 | + </p> | |
55 | + </div> | |
56 | + </div> | |
57 | + </template> | |
58 | + </div> | |
59 | + </div> | |
60 | + <!-- <div v-show="!editType"> | |
61 | + <p class="dia-tips"> | |
62 | + 请点击选项按钮设置答案,多选题题目之间用“,”隔开,若添加5道题:“AC,AD,BD,AC,CD” | |
63 | + </p> | |
64 | + <div class="dia-question-box"> | |
65 | + <div v-for="(item, index) in FormQuestionList2" :key="index"> | |
66 | + <template v-for="(items, indexs) in item.subQuestions"> | |
67 | + <div class="set-questions" :key="indexs"> | |
68 | + <div class="qs-num"> | |
69 | + <p>{{ items.name }}</p> | |
70 | + <p>共{{ items.list.length }}题</p> | |
71 | + </div> | |
72 | + <div class="qs-options"> | |
73 | + <p class="ipt"> | |
74 | + <el-input | |
75 | + v-model="items.answerList" | |
76 | + @keydown.native="keydownAnswer($event)" | |
77 | + ></el-input> | |
78 | + </p> | |
79 | + <p class="answer-box"> | |
80 | + <template v-if="items.list[0].questionType == 4"> | |
81 | + <span | |
82 | + class="answer-s active" | |
83 | + @click=" | |
84 | + items.answerList.length < items.list.length | |
85 | + ? (items.answerList += '✓') | |
86 | + : '' | |
87 | + " | |
88 | + >✓</span | |
89 | + > | |
90 | + <span | |
91 | + class="answer-s active" | |
92 | + @click=" | |
93 | + items.answerList.length < items.list.length | |
94 | + ? (items.answerList += '✗') | |
95 | + : '' | |
96 | + " | |
97 | + >✗</span | |
98 | + > | |
99 | + </template> | |
100 | + <template v-if="items.list[0].questionType == 3"> | |
101 | + <span | |
102 | + class="answer-s active" | |
103 | + v-for="option in items.list[0].answerOptions" | |
104 | + :key="option" | |
105 | + @click="setAnswer(items,option)" | |
106 | + >{{ option }}</span | |
107 | + > | |
108 | + <span | |
109 | + class="answer-s active" | |
110 | + @click=" | |
111 | + items.answerList.split(',').length < items.list.length | |
112 | + ? (items.answerList += ',') | |
113 | + : '' | |
114 | + " | |
115 | + >,</span | |
116 | + > | |
117 | + </template> | |
118 | + <template | |
119 | + v-if="items.list[0].questionType == 2" | |
120 | + class="answer-box" | |
121 | + > | |
122 | + <span | |
123 | + class="answer-s active" | |
124 | + v-for="option in items.list[0].answerOptions" | |
125 | + :key="option" | |
126 | + @click=" | |
127 | + items.answerList.length < items.list.length | |
128 | + ? (items.answerList += option) | |
129 | + : '' | |
130 | + " | |
131 | + >{{ option }}</span | |
132 | + > | |
133 | + </template> | |
134 | + <span | |
135 | + class="answer-s delButton" | |
136 | + @click="items.answerList = items.answerList.slice(0, -1)" | |
137 | + >x</span | |
138 | + > | |
139 | + <span | |
140 | + class="answer-s ac" | |
141 | + @click="items.answerList = ''" | |
142 | + >AC</span | |
143 | + > | |
144 | + </p> | |
145 | + </div> | |
146 | + </div> | |
147 | + </template> | |
148 | + </div> | |
149 | + </div> | |
150 | + </div> --> | |
151 | + <div slot="footer"> | |
152 | + <el-button class="dia-btn" type="primary" @click="saveAnswer" | |
153 | + >确 定</el-button | |
154 | + > | |
155 | + <el-button class="dia-btn" type="danger" @click="cancel">取 消</el-button> | |
156 | + </div> | |
157 | + </el-dialog> | |
158 | +</template> | |
159 | + | |
160 | +<script> | |
161 | +import { deepClone } from "utils"; | |
162 | +export default { | |
163 | + name: "SetAnswer", | |
164 | + props: { | |
165 | + diaVisible: false, //修改答案 | |
166 | + paperId: "", | |
167 | + questionList: Array, | |
168 | + }, | |
169 | + data() { | |
170 | + return { | |
171 | + editType: true, //修改答案模式 | |
172 | + FormQuestionList: [], | |
173 | + }; | |
174 | + }, | |
175 | + watch: { | |
176 | + questionList: { | |
177 | + handler: function () { | |
178 | + this.FormQuestionList = deepClone(this.questionList); | |
179 | + console.log(this.questionList); | |
180 | + //组合每道大题中的相同题目 | |
181 | + // let questionList = deepClone(item.questionList); | |
182 | + // for (let i = 0; i < questionList.length; i++) { | |
183 | + // let jsons = {}; | |
184 | + // let answerOptions = []; | |
185 | + // questionList[i].subQuestions.map((items) => { | |
186 | + // let txt = this.setSubPro(items.questionType); | |
187 | + // if (jsons[txt]) { | |
188 | + // jsons[txt].push(items); | |
189 | + // } else { | |
190 | + // jsons[txt] = [items]; | |
191 | + // } | |
192 | + // if (items.questionType == 2 || items.questionType == 3) { | |
193 | + // if (items.answerOptions.length > answerOptions.length) { | |
194 | + // answerOptions = items.answerOptions; | |
195 | + // } | |
196 | + // jsons[txt][0].answerOptions = answerOptions; | |
197 | + // } | |
198 | + // }); | |
199 | + // this.FormQuestionList2[i].subQuestions = Object.keys(jsons).map( | |
200 | + // (item) => { | |
201 | + // return { | |
202 | + // name: item, | |
203 | + // list: jsons[item], | |
204 | + // answerList: "", | |
205 | + // }; | |
206 | + // } | |
207 | + // ); | |
208 | + // } | |
209 | + }, | |
210 | + deep: true, | |
211 | + }, | |
212 | + }, | |
213 | + methods: { | |
214 | + setSubPro(type) { | |
215 | + let tit; | |
216 | + switch (type) { | |
217 | + case 2: | |
218 | + tit = "单选题"; | |
219 | + break; | |
220 | + case 3: | |
221 | + tit = "多选题"; | |
222 | + break; | |
223 | + case 4: | |
224 | + tit = "判断题"; | |
225 | + break; | |
226 | + case 5: | |
227 | + tit = "主观题"; | |
228 | + break; | |
229 | + } | |
230 | + return tit; | |
231 | + }, | |
232 | + keydownAnswer(event) { | |
233 | + //快速答案设置禁止输入 | |
234 | + if ( | |
235 | + event.key == "Meta" || | |
236 | + event.key == "CapsLock" || | |
237 | + event.key == "Shift" || | |
238 | + event.key == "Enter" || | |
239 | + event.key == "Alt" || | |
240 | + event.key == "Backspace" || | |
241 | + event.key == "Delete" || | |
242 | + event.key == "ArrowUp" || | |
243 | + event.key == "ArrowDown" || | |
244 | + event.key == "ArrowLeft" || | |
245 | + event.key == "v" || | |
246 | + event.key == "V" || | |
247 | + event.key == "ArrowRight" | |
248 | + ) { | |
249 | + return; | |
250 | + } else { | |
251 | + event.returnValue = ""; | |
252 | + } | |
253 | + }, | |
254 | + setAnswer(obj, answer) { | |
255 | + //多选答案设置 | |
256 | + obj.answerList += answer; | |
257 | + let str = obj.answerList; | |
258 | + let str2 = checkAnswer( | |
259 | + str, | |
260 | + 3, | |
261 | + obj.list[0].answerOptions, | |
262 | + obj.list.length | |
263 | + ); | |
264 | + obj.answerList = str2; | |
265 | + }, | |
266 | + changAnswer(sub, option) { | |
267 | + //设置多选答案 | |
268 | + let str = new RegExp(option, "g"); | |
269 | + if (sub.correctAnswer?.includes(option)) { | |
270 | + sub.correctAnswer = sub.correctAnswer.replace(str, ""); | |
271 | + } else { | |
272 | + let arrs = (sub.correctAnswer && sub.correctAnswer.split("")) || []; | |
273 | + arrs.push(option); | |
274 | + sub.correctAnswer = arrs.sort().join(""); | |
275 | + } | |
276 | + }, | |
277 | + async saveAnswer() { | |
278 | + const { data, status, message } = await this.$request.modifyPaper({ | |
279 | + paperId: this.paperId, | |
280 | + questionList: questionList, | |
281 | + }); | |
282 | + if (status == 0) { | |
283 | + this.$emit('saveSuccess') | |
284 | + } else { | |
285 | + this.$message.error(message); | |
286 | + } | |
287 | + }, | |
288 | + cancel() { | |
289 | + this.$emit('cancel') | |
290 | + }, | |
291 | + }, | |
292 | +}; | |
293 | +</script> | |
294 | + | |
295 | +<style lang="scss" scoped> | |
296 | +.sub-questions { | |
297 | + width: 100%; | |
298 | + display: flex; | |
299 | + &:hover { | |
300 | + background: #f8f8f8; | |
301 | + } | |
302 | + & > div { | |
303 | + min-height: 40px; | |
304 | + padding: 5px; | |
305 | + flex-shrink: 0; | |
306 | + display: flex; | |
307 | + justify-content: center; | |
308 | + align-items: center; | |
309 | + } | |
310 | + .qs-num { | |
311 | + width: 80px; | |
312 | + font-size: 16px; | |
313 | + color: #333; | |
314 | + font-weight: 500; | |
315 | + } | |
316 | + .qs-options { | |
317 | + flex: 1; | |
318 | + } | |
319 | + .qs-options2 { | |
320 | + text-align: left; | |
321 | + justify-content: flex-start; | |
322 | + padding-left: 20px; | |
323 | + .answer-s { | |
324 | + cursor: pointer; | |
325 | + border-color: #667ffd; | |
326 | + color: #667ffd; | |
327 | + margin: 0 15px; | |
328 | + &.active { | |
329 | + color: #fff; | |
330 | + } | |
331 | + } | |
332 | + } | |
333 | + :deep(.el-select) { | |
334 | + .el-input__inner { | |
335 | + border-radius: 20px; | |
336 | + border-color: #667ffd; | |
337 | + width: 150px; | |
338 | + height: 32px; | |
339 | + line-height: 32px; | |
340 | + background: rgba($color: #667ffd, $alpha: 0.05); | |
341 | + } | |
342 | + .el-input__icon { | |
343 | + line-height: 32px; | |
344 | + } | |
345 | + } | |
346 | +} | |
347 | +</style> | |
0 | 348 | \ No newline at end of file | ... | ... |
src/components/userForm/userInfo.vue deleted
1 | -<template> | |
2 | - <el-dialog :title="title" width="800px" :visible.sync="visible" destroy-on-close @close="closeCallback"> | |
3 | - <div class="card"> | |
4 | - <p class="title"><i class="fa fa-th-large fa-lg"></i>个人资料</p> | |
5 | - <el-form :model="ruleForm2" status-icon :rules="rules" ref="ruleForm2" label-width="100px" class="demo-ruleForm"> | |
6 | - <el-form-item label="用户名" prop="username"> | |
7 | - <el-input v-model="ruleForm2.username" autocomplete="off"></el-input> | |
8 | - </el-form-item> | |
9 | - <el-form-item v-if="!userId" label="密码" prop="password"> | |
10 | - <el-input type="password" v-model="ruleForm2.password" autocomplete="off"></el-input> | |
11 | - </el-form-item> | |
12 | - <el-form-item v-if="!userId" label="确认密码" prop="checkPass"> | |
13 | - <el-input type="password" v-model="ruleForm2.checkPass" autocomplete="off"></el-input> | |
14 | - </el-form-item> | |
15 | - <el-form-item label="角色"> | |
16 | - <el-select v-if="roleName" v-model="ruleForm2.roleId" disabled placeholder="请选择等级"> | |
17 | - <el-option | |
18 | - v-for="item in roleData" | |
19 | - :key="item.id" | |
20 | - :label="item.name" | |
21 | - :value="item.id"> | |
22 | - </el-option> | |
23 | - </el-select> | |
24 | - <el-select v-else v-model="ruleForm2.roleId" placeholder="请选择等级"> | |
25 | - <el-option | |
26 | - v-for="item in roleData" | |
27 | - :key="item.id" | |
28 | - :label="item.name" | |
29 | - :value="item.id" | |
30 | - :disabled="item.disabled"> | |
31 | - </el-option> | |
32 | - </el-select> | |
33 | - </el-form-item> | |
34 | - <el-form-item label="姓名" prop="name"> | |
35 | - <el-input v-model="ruleForm2.name" autocomplete="off"></el-input> | |
36 | - </el-form-item> | |
37 | - <el-form-item label="性别"> | |
38 | - <el-radio-group v-model="ruleForm2.sex"> | |
39 | - <el-radio label="1">男</el-radio> | |
40 | - <el-radio label="2">女</el-radio> | |
41 | - </el-radio-group> | |
42 | - </el-form-item> | |
43 | - <el-form-item label="年龄" prop="age"> | |
44 | - <el-input v-model="ruleForm2.age" autocomplete="off"></el-input> | |
45 | - </el-form-item> | |
46 | - <el-form-item label="手机号" prop="mobilePhone"> | |
47 | - <el-input v-model="ruleForm2.mobilePhone" autocomplete="off"></el-input> | |
48 | - </el-form-item> | |
49 | - <el-form-item label="是否启用"> | |
50 | - <el-switch v-model="ruleForm2.status"></el-switch> | |
51 | - </el-form-item> | |
52 | - <el-form-item label="头像上传"> | |
53 | - <el-upload | |
54 | - class="avatar-uploader" | |
55 | - action="/api/editor/uploadImg" | |
56 | - :show-file-list="false" | |
57 | - :on-success="handleAvatarSuccess" | |
58 | - :before-upload="beforeAvatarUpload"> | |
59 | - <img v-if="ruleForm2.avatar" :src="ruleForm2.avatar" class="avatar"> | |
60 | - <i v-else class="el-icon-plus avatar-uploader-icon"></i> | |
61 | - </el-upload> | |
62 | - </el-form-item> | |
63 | - <el-form-item> | |
64 | - <el-button type="primary" @click="submitForm('ruleForm2')">确 定</el-button> | |
65 | - <el-button @click="resetForm('ruleForm2')">重 置</el-button> | |
66 | - </el-form-item> | |
67 | - </el-form> | |
68 | - </div> | |
69 | - </el-dialog> | |
70 | -</template> | |
71 | - | |
72 | -<script> | |
73 | -export default { | |
74 | - name: "userInfo", | |
75 | - props: { | |
76 | - title: { | |
77 | - type: String, | |
78 | - default: "账号信息" | |
79 | - }, | |
80 | - dialogVisible: { | |
81 | - type: Boolean, | |
82 | - default: false | |
83 | - }, | |
84 | - userId: { | |
85 | - type: String, | |
86 | - default: "" | |
87 | - } | |
88 | - }, | |
89 | - data () { | |
90 | - var validatePass = (rule, value, callback) => { | |
91 | - if (value === "") { | |
92 | - callback(new Error("请输入密码")) | |
93 | - } else { | |
94 | - if (this.ruleForm2.checkPass !== "") { | |
95 | - this.$refs.ruleForm2.validateField("checkPass") | |
96 | - } | |
97 | - callback() | |
98 | - } | |
99 | - } | |
100 | - var validatePass2 = (rule, value, callback) => { | |
101 | - if (value === "") { | |
102 | - callback(new Error("请再次输入密码")) | |
103 | - } else if (value !== this.ruleForm2.password) { | |
104 | - callback(new Error("两次输入密码不一致!")) | |
105 | - } else { | |
106 | - callback() | |
107 | - } | |
108 | - } | |
109 | - return { | |
110 | - roleName: false, | |
111 | - roleData: "", | |
112 | - visible: this.dialogVisible, | |
113 | - ruleForm2: { | |
114 | - mobilePhone: "", | |
115 | - username: "", | |
116 | - password: "", | |
117 | - checkPass: "", | |
118 | - roleId: "", | |
119 | - status: "", | |
120 | - sex: "1", | |
121 | - age: 0, | |
122 | - name: "", | |
123 | - avatar: "" | |
124 | - }, | |
125 | - rules: { | |
126 | - username: [ | |
127 | - { required: true, message: "请输入用户名", trigger: "blur" }, | |
128 | - { min: 3, max: 18, message: "长度在 3 到 18 个字符", trigger: "blur" } | |
129 | - ], | |
130 | - password: [ | |
131 | - {required: true, validator: validatePass, trigger: "blur"} | |
132 | - ], | |
133 | - checkPass: [ | |
134 | - {required: true, validator: validatePass2, trigger: "blur"} | |
135 | - ], | |
136 | - roleId: [ | |
137 | - { required: true, message: "请选择用户角色", trigger: "change" } | |
138 | - ] | |
139 | - } | |
140 | - } | |
141 | - }, | |
142 | - methods: { | |
143 | - handleAvatarSuccess (res, file) { | |
144 | - this.ruleForm2.avatar = res.data[0] | |
145 | - }, | |
146 | - closeCallback () { | |
147 | - this.$emit("successCallback") | |
148 | - }, | |
149 | - beforeAvatarUpload (file) { | |
150 | - const isJPG = file.type === "image/jpeg" | |
151 | - const isPNG = file.type === "image/png" | |
152 | - const isLt2M = file.size / 1024 / 1024 < 2 | |
153 | - | |
154 | - if (!(isJPG || isPNG)) { | |
155 | - this.$message.error("上传头像图片只能是 JPG/PNG 格式!") | |
156 | - } | |
157 | - if (!isLt2M) { | |
158 | - this.$message.error("上传头像图片大小不能超过 2MB!") | |
159 | - } | |
160 | - // eslint-disable-next-line no-mixed-operators | |
161 | - return isLt2M && isJPG || isPNG | |
162 | - }, | |
163 | - getList () { | |
164 | - let that = this | |
165 | - this.$request.fetchGetRoleList().then(function (response) { | |
166 | - that.roleData = response.data.rows | |
167 | - let userId = that.userId | |
168 | - if (!userId) { | |
169 | - return false | |
170 | - } | |
171 | - that.$request.fetchGetUserInfoId({id: userId}) | |
172 | - .then(function (res) { | |
173 | - console.log(res) | |
174 | - res.data.password = "" | |
175 | - if (res.data.status === "1") { | |
176 | - res.data.status = true | |
177 | - } else { | |
178 | - res.data.status = false | |
179 | - } | |
180 | - | |
181 | - that.ruleForm2 = res.data | |
182 | - that.roleName = true | |
183 | - for (let i = 0; i < that.roleData.length; i++) { | |
184 | - if (that.$store.getters.info.role === "超级管理员" && that.$store.getters.info.uid !== userId) { | |
185 | - that.roleName = false | |
186 | - } | |
187 | - } | |
188 | - return false | |
189 | - }) | |
190 | - .catch(function (error) { | |
191 | - console.log(error) | |
192 | - }) | |
193 | - }) | |
194 | - .catch(function (error) { | |
195 | - console.log(error) | |
196 | - }) | |
197 | - }, | |
198 | - submitForm (formName) { | |
199 | - let that = this | |
200 | - this.$refs[formName].validate((valid) => { | |
201 | - if (valid) { | |
202 | - let newData = {} | |
203 | - let fetchFn = this.$request.fetchEditUser | |
204 | - if (!that.userId) { | |
205 | - for (let item in that.ruleForm2) { | |
206 | - if (item !== "checkPass") { | |
207 | - newData[item] = that.ruleForm2[item] | |
208 | - } | |
209 | - } | |
210 | - fetchFn = this.$request.fetchRegister | |
211 | - } else { | |
212 | - for (let item in that.ruleForm2) { | |
213 | - if (item !== "password" && item !== "checkPass") { | |
214 | - newData[item] = that.ruleForm2[item] | |
215 | - } | |
216 | - } | |
217 | - } | |
218 | - fetchFn(newData).then((res) => { | |
219 | - that.$message({ | |
220 | - showClose: true, | |
221 | - message: res.data.message, | |
222 | - type: "success" | |
223 | - }) | |
224 | - }).catch((err) => { | |
225 | - console.log(err) | |
226 | - }) | |
227 | - } else { | |
228 | - console.log("error submit!!") | |
229 | - return false | |
230 | - } | |
231 | - }) | |
232 | - }, | |
233 | - resetForm (formName) { | |
234 | - this.$refs[formName].resetFields() | |
235 | - } | |
236 | - }, | |
237 | - mounted () { | |
238 | - // this.getList() | |
239 | - } | |
240 | -} | |
241 | -</script> | |
242 | -<style scoped> | |
243 | - .demo-ruleForm { | |
244 | - width: 460px; | |
245 | - padding-top: 25px; | |
246 | - } | |
247 | - .el-select { | |
248 | - width: 100%; | |
249 | - } | |
250 | - .card { | |
251 | - width: 560px; | |
252 | - padding-bottom: 15px; | |
253 | - margin: 0px auto; | |
254 | - } | |
255 | - .avatar-uploader .el-upload { | |
256 | - border: 1px dashed #d9d9d9; | |
257 | - border-radius: 6px; | |
258 | - cursor: pointer; | |
259 | - position: relative; | |
260 | - overflow: hidden; | |
261 | - } | |
262 | - .avatar-uploader .el-upload:hover { | |
263 | - border-color: #409EFF; | |
264 | - } | |
265 | - .avatar-uploader-icon { | |
266 | - font-size: 28px; | |
267 | - color: #8c939d; | |
268 | - width: 178px; | |
269 | - height: 178px; | |
270 | - line-height: 178px; | |
271 | - text-align: center; | |
272 | - } | |
273 | - .avatar { | |
274 | - width: 178px; | |
275 | - height: 178px; | |
276 | - display: block; | |
277 | - } | |
278 | -</style> |
src/views/ask/index.vue
... | ... | @@ -9,8 +9,8 @@ |
9 | 9 | <div class="sel-box"> |
10 | 10 | <el-select |
11 | 11 | class="sel" |
12 | - v-model="query.clazzId" | |
13 | - placeholder="" | |
12 | + v-model="query.classId" | |
13 | + placeholder="选择班级" | |
14 | 14 | @change="changClazz" |
15 | 15 | > |
16 | 16 | <el-option |
... | ... | @@ -18,11 +18,11 @@ |
18 | 18 | :key="item.value" |
19 | 19 | :label="item.label" |
20 | 20 | :value="item.value" |
21 | - >{{ item.label }} | |
21 | + > | |
22 | 22 | </el-option> |
23 | 23 | </el-select> |
24 | 24 | <el-select |
25 | - v-if="role == '班主任'" | |
25 | + v-if="role == 'ROLE_BANZHUREN'" | |
26 | 26 | class="sel" |
27 | 27 | multiple |
28 | 28 | collapse-tags |
... | ... | @@ -89,7 +89,7 @@ |
89 | 89 | <div class="table-box"> |
90 | 90 | <el-radio-group v-model="tabIndex" style="margin-bottom: 20px"> |
91 | 91 | <el-radio-button :label="1">单课时报表</el-radio-button> |
92 | - <el-radio-button :label="2" v-if="this.role != '班主任'" | |
92 | + <el-radio-button :label="2" v-if="this.role != 'ROLE_BANZHUREN'" | |
93 | 93 | >阶段问答报表</el-radio-button |
94 | 94 | > |
95 | 95 | <el-radio-button :label="3">阶段互动报表</el-radio-button> |
... | ... | @@ -283,187 +283,23 @@ |
283 | 283 | <el-button type="info" plain round icon="fa fa-cloud-download">导出报表</el-button> |
284 | 284 | </p> |
285 | 285 | </div> |
286 | - <el-dialog :visible.sync="dialogVisible" width="400" center> | |
287 | - <div slot="title"> | |
288 | - <p> | |
289 | - <!-- 设置答案 <i class="fa fa-exchange" @click="editType = !editType"></i> --> | |
290 | - 设置答案 | |
291 | - </p> | |
292 | - </div> | |
293 | - <div v-show="editType"> | |
294 | - <div v-for="(item, index) in form.questionList" :key="index"> | |
295 | - <template v-for="(subQuestions, indexs) in item.subQuestions"> | |
296 | - <div | |
297 | - class="sub-questions" | |
298 | - :key="indexs" | |
299 | - v-if="subQuestions.correctAnswer" | |
300 | - > | |
301 | - <div class="qs-num">题{{ subQuestions.questionIndex }}</div> | |
302 | - <div class="qs-options qs-options2"> | |
303 | - <p v-if="subQuestions.questionType == 4" class="answer-box"> | |
304 | - <span | |
305 | - class="answer-s" | |
306 | - :class="subQuestions.correctAnswer == 1 ? 'active' : ''" | |
307 | - @click="subQuestions.correctAnswer = 1" | |
308 | - >✓</span | |
309 | - > | |
310 | - <span | |
311 | - class="answer-s" | |
312 | - :class="subQuestions.correctAnswer == 2 ? 'active' : ''" | |
313 | - @click="subQuestions.correctAnswer = 2" | |
314 | - >✗</span | |
315 | - > | |
316 | - </p> | |
317 | - <p v-if="subQuestions.questionType == 3" class="answer-box"> | |
318 | - <span | |
319 | - class="answer-s" | |
320 | - v-for="option in subQuestions.answerOptions" | |
321 | - :class=" | |
322 | - subQuestions.correctAnswer.includes(option) | |
323 | - ? 'active' | |
324 | - : '' | |
325 | - " | |
326 | - :key="option" | |
327 | - @click="changAnswer(subQuestions, option)" | |
328 | - >{{ option }}</span | |
329 | - > | |
330 | - </p> | |
331 | - <p v-if="subQuestions.questionType == 2" class="answer-box"> | |
332 | - <span | |
333 | - class="answer-s" | |
334 | - v-for="option in subQuestions.answerOptions" | |
335 | - :class=" | |
336 | - subQuestions.correctAnswer == option ? 'active' : '' | |
337 | - " | |
338 | - :key="option" | |
339 | - @click="subQuestions.correctAnswer = option" | |
340 | - >{{ option }}</span | |
341 | - > | |
342 | - </p> | |
343 | - </div> | |
344 | - </div> | |
345 | - </template> | |
346 | - </div> | |
347 | - </div> | |
348 | - <!-- <div v-show="!editType"> | |
349 | - <p class="dia-tips"> | |
350 | - 请点击选项按钮设置答案,多选题题目之间用“,”隔开,若添加5道题:“AC,AD,BD,AC,CD” | |
351 | - </p> | |
352 | - <div class="dia-question-box"> | |
353 | - <div v-for="(item, index) in form2.questionList" :key="index"> | |
354 | - <template v-for="(items, indexs) in item.subQuestions"> | |
355 | - <div class="set-questions" :key="indexs"> | |
356 | - <div class="qs-num"> | |
357 | - <p>{{ items.name }}</p> | |
358 | - <p>共{{ items.list.length }}题</p> | |
359 | - </div> | |
360 | - <div class="qs-options"> | |
361 | - <p class="ipt"> | |
362 | - <el-input | |
363 | - v-model="items.answerList" | |
364 | - @keydown.native="keydownAnswer($event)" | |
365 | - ></el-input> | |
366 | - </p> | |
367 | - <p class="answer-box"> | |
368 | - <template v-if="items.list[0].questionType == 4"> | |
369 | - <span | |
370 | - class="answer-s active" | |
371 | - @click=" | |
372 | - items.answerList.length < items.list.length | |
373 | - ? (items.answerList += '✓') | |
374 | - : '' | |
375 | - " | |
376 | - >✓</span | |
377 | - > | |
378 | - <span | |
379 | - class="answer-s active" | |
380 | - @click=" | |
381 | - items.answerList.length < items.list.length | |
382 | - ? (items.answerList += '✗') | |
383 | - : '' | |
384 | - " | |
385 | - >✗</span | |
386 | - > | |
387 | - </template> | |
388 | - <template v-if="items.list[0].questionType == 3"> | |
389 | - <span | |
390 | - class="answer-s active" | |
391 | - v-for="option in items.list[0].answerOptions" | |
392 | - :key="option" | |
393 | - @click="setAnswer(items,option)" | |
394 | - >{{ option }}</span | |
395 | - > | |
396 | - <span | |
397 | - class="answer-s active" | |
398 | - @click=" | |
399 | - items.answerList.split(',').length < items.list.length | |
400 | - ? (items.answerList += ',') | |
401 | - : '' | |
402 | - " | |
403 | - >,</span | |
404 | - > | |
405 | - </template> | |
406 | - <template | |
407 | - v-if="items.list[0].questionType == 2" | |
408 | - class="answer-box" | |
409 | - > | |
410 | - <span | |
411 | - class="answer-s active" | |
412 | - v-for="option in items.list[0].answerOptions" | |
413 | - :key="option" | |
414 | - @click=" | |
415 | - items.answerList.length < items.list.length | |
416 | - ? (items.answerList += option) | |
417 | - : '' | |
418 | - " | |
419 | - >{{ option }}</span | |
420 | - > | |
421 | - </template> | |
422 | - <span | |
423 | - class="answer-s delButton" | |
424 | - @click="items.answerList = items.answerList.slice(0, -1)" | |
425 | - >x</span | |
426 | - > | |
427 | - <span | |
428 | - class="answer-s ac" | |
429 | - @click="items.answerList = ''" | |
430 | - >AC</span | |
431 | - > | |
432 | - </p> | |
433 | - </div> | |
434 | - </div> | |
435 | - </template> | |
436 | - </div> | |
437 | - </div> | |
438 | - </div> --> | |
439 | - <div slot="footer"> | |
440 | - <el-button class="dia-btn" type="primary" @click="saveAnswer" | |
441 | - >确 定</el-button | |
442 | - > | |
443 | - <el-button class="dia-btn" type="danger" @click="dialogVisible = false" | |
444 | - >取 消</el-button | |
445 | - > | |
446 | - </div> | |
447 | - </el-dialog> | |
286 | + <set-answer :diaVisible="dialogVisible" :questionList="form.questionList" :paperId="form.id" @saveSuccess="handleSuccess" @cancel="cancel"/> | |
448 | 287 | </div> |
449 | 288 | </template> |
450 | 289 | |
451 | 290 | <script> |
452 | -import { formatDate, deepClone,checkAnswer } from "utils"; | |
291 | +import { formatDate, deepClone, checkAnswer } from "utils"; | |
453 | 292 | export default { |
454 | 293 | data() { |
455 | 294 | return { |
456 | 295 | role: "", |
457 | 296 | loading: false, |
458 | - dialogVisible: false, //修改答案 | |
459 | - editType: true, //修改答案模式 | |
460 | - editId: "", | |
297 | + dialogVisible:false, | |
461 | 298 | form: { questionList: [] }, |
462 | - form2: { questionList: [] }, | |
463 | 299 | date: "", //今天-昨天-本周 |
464 | 300 | query: { |
465 | 301 | //搜索条件 |
466 | - clazzId: "", | |
302 | + classId: "", | |
467 | 303 | subjectId: "", |
468 | 304 | startDay: "", |
469 | 305 | endDay: "", |
... | ... | @@ -563,7 +399,7 @@ export default { |
563 | 399 | ], |
564 | 400 | }, |
565 | 401 | ], |
566 | - tableAsk:[ | |
402 | + tableAsk: [ | |
567 | 403 | { |
568 | 404 | xuehao: 1, |
569 | 405 | xingming: "丁芳菲", |
... | ... | @@ -571,8 +407,8 @@ export default { |
571 | 407 | dadui: 60, |
572 | 408 | canyudu: 90, |
573 | 409 | allzheng: 80, |
574 | - yidazheng:50, | |
575 | - zongpaiming:5 | |
410 | + yidazheng: 50, | |
411 | + zongpaiming: 5, | |
576 | 412 | }, |
577 | 413 | { |
578 | 414 | xuehao: 1, |
... | ... | @@ -581,11 +417,11 @@ export default { |
581 | 417 | dadui: 20, |
582 | 418 | canyudu: 80, |
583 | 419 | allzheng: 60, |
584 | - yidazheng:65, | |
585 | - zongpaiming:4 | |
586 | - } | |
420 | + yidazheng: 65, | |
421 | + zongpaiming: 4, | |
422 | + }, | |
587 | 423 | ], |
588 | - tableStage:[ | |
424 | + tableStage: [ | |
589 | 425 | { |
590 | 426 | xuehao: 1, |
591 | 427 | xingming: "丁芳菲", |
... | ... | @@ -593,19 +429,19 @@ export default { |
593 | 429 | dadui: 60, |
594 | 430 | chouda: 90, |
595 | 431 | choudadui: 80, |
596 | - canyu:50, | |
597 | - duicuo:5 | |
598 | - } | |
599 | - ] | |
432 | + canyu: 50, | |
433 | + duicuo: 5, | |
434 | + }, | |
435 | + ], | |
600 | 436 | }; |
601 | 437 | }, |
602 | 438 | async created() { |
603 | - this.role = this.$store.getters.info.permissions[0]?.roleName; | |
604 | - if (this.role == "班主任") { | |
439 | + this.role = this.$store.getters.info.permissions[0]?.role||""; | |
440 | + if (this.role == "ROLE_BANZHUREN") { | |
605 | 441 | this.query.subjectId = []; |
606 | 442 | } |
607 | - // await this._QueryClassList(); | |
608 | - // await this._QuerySubjectList(); | |
443 | + await this._QueryClassList(); | |
444 | + await this._QuerySubjectList(); | |
609 | 445 | // await this.setDate(1); |
610 | 446 | let startDay = this.query?.startDay; |
611 | 447 | if (!startDay) { |
... | ... | @@ -623,90 +459,7 @@ export default { |
623 | 459 | }, |
624 | 460 | }); |
625 | 461 | }, |
626 | - setSubPro(type) { | |
627 | - let tit; | |
628 | - switch (type) { | |
629 | - case 2: | |
630 | - tit = "单选题"; | |
631 | - break; | |
632 | - case 3: | |
633 | - tit = "多选题"; | |
634 | - break; | |
635 | - case 4: | |
636 | - tit = "判断题"; | |
637 | - break; | |
638 | - case 5: | |
639 | - tit = "主观题"; | |
640 | - break; | |
641 | - } | |
642 | - return tit; | |
643 | - }, | |
644 | - edit(item) { | |
645 | - this.form = deepClone(item); | |
646 | - // this.form2 = deepClone(item); | |
647 | - // //组合每道大题中的相同题目 | |
648 | - // let questionList = deepClone(item.questionList); | |
649 | - // for (let i = 0; i < questionList.length; i++) { | |
650 | - // let jsons = {}; | |
651 | - // let answerOptions = []; | |
652 | - // questionList[i].subQuestions.map((items) => { | |
653 | - // let txt = this.setSubPro(items.questionType); | |
654 | - // if (jsons[txt]) { | |
655 | - // jsons[txt].push(items); | |
656 | - // } else { | |
657 | - // jsons[txt] = [items]; | |
658 | - // } | |
659 | - // if (items.questionType == 2 || items.questionType == 3) { | |
660 | - // if (items.answerOptions.length > answerOptions.length) { | |
661 | - // answerOptions = items.answerOptions; | |
662 | - // } | |
663 | - // jsons[txt][0].answerOptions = answerOptions; | |
664 | - // } | |
665 | - // }); | |
666 | - // this.form2.questionList[i].subQuestions = Object.keys(jsons).map( | |
667 | - // (item) => { | |
668 | - // return { | |
669 | - // name: item, | |
670 | - // list: jsons[item], | |
671 | - // answerList: "", | |
672 | - // }; | |
673 | - // } | |
674 | - // ); | |
675 | - // } | |
676 | - this.dialogVisible = true; | |
677 | - }, | |
678 | - keydownAnswer(event) {//快速答案设置禁止输入 | |
679 | - if ( | |
680 | - event.key == "Meta" || | |
681 | - event.key == "CapsLock" || | |
682 | - event.key == "Shift" || | |
683 | - event.key == "Enter" || | |
684 | - event.key == "Alt" || | |
685 | - event.key == "Backspace" || | |
686 | - event.key == "Delete" || | |
687 | - event.key == "ArrowUp" || | |
688 | - event.key == "ArrowDown" || | |
689 | - event.key == "ArrowLeft" || | |
690 | - event.key == "v" || | |
691 | - event.key == "V" || | |
692 | - event.key == "ArrowRight" | |
693 | - ) { | |
694 | - return; | |
695 | - } else { | |
696 | - event.returnValue = ""; | |
697 | - } | |
698 | - }, | |
699 | - setAnswer(obj,answer){//多选答案设置 | |
700 | - obj.answerList+=answer | |
701 | - let str = obj.answerList; | |
702 | - let str2 = checkAnswer( | |
703 | - str, | |
704 | - 3, | |
705 | - obj.list[0].answerOptions, | |
706 | - obj.list.length | |
707 | - ); | |
708 | - obj.answerList = str2; | |
709 | - }, | |
462 | + | |
710 | 463 | setDate(index) { |
711 | 464 | const that = this; |
712 | 465 | this.date = index == this.date ? "" : index; |
... | ... | @@ -762,68 +515,55 @@ export default { |
762 | 515 | } |
763 | 516 | } |
764 | 517 | }, |
765 | - changAnswer(sub, option) { | |
766 | - //设置多选答案 | |
767 | - let str = new RegExp(option, "g"); | |
768 | - if (sub.correctAnswer?.includes(option)) { | |
769 | - sub.correctAnswer = sub.correctAnswer.replace(str, ""); | |
770 | - } else { | |
771 | - let arrs = (sub.correctAnswer && sub.correctAnswer.split("")) || []; | |
772 | - arrs.push(option); | |
773 | - sub.correctAnswer = arrs.sort().join(""); | |
774 | - } | |
518 | + edit(item) { | |
519 | + this.form = deepClone(item); | |
520 | + this.dialogVisible = true; | |
775 | 521 | }, |
776 | - async saveAnswer(){ | |
777 | - // const { data, code, message } = await this.$request.modifyPaper({...this.form}); | |
778 | - // if (code == 0) { | |
779 | - this.dialogVisible = false | |
780 | - // } else { | |
781 | - // this.$message.error(message); | |
782 | - // } | |
522 | + cancel(){ | |
523 | + this.dialogVisible = false | |
524 | + }, | |
525 | + handleSuccess(){ | |
526 | + this.dialogVisible = false | |
527 | + this._QueryData() | |
783 | 528 | }, |
784 | 529 | async changClazz() { |
785 | 530 | await this._QuerySubjectList(); |
786 | 531 | await this.setDate(1); |
787 | 532 | }, |
788 | 533 | async _QueryClassList() { |
789 | - const { data, code, message } = await this.$request.fetchClassList(); | |
790 | - if (code === 0) { | |
534 | + const { data, status, info } = await this.$request.fetchClassList(); | |
535 | + if (status === 0) { | |
791 | 536 | this.classList = data.list.map((item) => { |
792 | 537 | return { |
793 | - value: item.clazzId, | |
538 | + value: item.classId, | |
794 | 539 | label: item.clazzName, |
795 | 540 | }; |
796 | 541 | }); |
797 | - this.query.clazzId = this.classList[0].value; | |
542 | + this.query.classId = this.classList[0]?.value; | |
798 | 543 | } else { |
799 | - this.$message.error(message); | |
544 | + this.$message.error(info); | |
800 | 545 | } |
801 | 546 | }, |
802 | 547 | async _QuerySubjectList() { |
803 | - const datas = this.query.clazzId | |
804 | - ? { | |
805 | - clazzId: this.query.clazzId, | |
806 | - } | |
807 | - : {}; | |
808 | - const { data, code, message } = await this.$request.fetchSubjectList( | |
809 | - datas | |
548 | + const { data, status, info } = await this.$request.fetchSubjectList( | |
549 | + {classId: this.query.classId,} | |
810 | 550 | ); |
811 | - if (code === 0) { | |
812 | - this.subjectList = data.list.map((item) => { | |
551 | + if (status === 0) { | |
552 | + this.subjectList = data.list?.map((item) => { | |
813 | 553 | return { |
814 | 554 | value: item.subjectId, |
815 | 555 | label: item.subjectName, |
816 | 556 | }; |
817 | - }); | |
818 | - if (this.role == "班主任") { | |
557 | + })||[]; | |
558 | + if (this.role == "ROLE_BANZHUREN") { | |
819 | 559 | this.subjectList.unshift({ |
820 | 560 | value: "", |
821 | 561 | label: "全部", |
822 | 562 | }); |
823 | 563 | } |
824 | - this.query.subjectId = this.subjectList[0].value; | |
564 | + this.query.subjectId = this.subjectList[0]?.value; | |
825 | 565 | } else { |
826 | - this.$message.error(message); | |
566 | + this.$message.error(info); | |
827 | 567 | } |
828 | 568 | }, |
829 | 569 | async _QueryData() { |
... | ... | @@ -835,13 +575,13 @@ export default { |
835 | 575 | query[key] = this.query[key]; |
836 | 576 | } |
837 | 577 | } |
838 | - const { data, code, message } = await this.$request.fetchQuizList({ | |
578 | + const { data, status, info } = await this.$request.fetchQuizList({ | |
839 | 579 | ...query, |
840 | 580 | }); |
841 | 581 | this.loading = false; |
842 | - if (code === 0) { | |
582 | + if (status === 0) { | |
843 | 583 | } else { |
844 | - this.$message.error(message); | |
584 | + this.$message.error(info); | |
845 | 585 | } |
846 | 586 | }, |
847 | 587 | }, |
... | ... | @@ -862,57 +602,7 @@ export default { |
862 | 602 | } |
863 | 603 | } |
864 | 604 | |
865 | -.sub-questions { | |
866 | - width: 100%; | |
867 | - display: flex; | |
868 | - &:hover { | |
869 | - background: #f8f8f8; | |
870 | - } | |
871 | - & > div { | |
872 | - min-height: 40px; | |
873 | - padding: 5px; | |
874 | - flex-shrink: 0; | |
875 | - display: flex; | |
876 | - justify-content: center; | |
877 | - align-items: center; | |
878 | - } | |
879 | - .qs-num { | |
880 | - width: 80px; | |
881 | - font-size: 16px; | |
882 | - color: #333; | |
883 | - font-weight: 500; | |
884 | - } | |
885 | - .qs-options { | |
886 | - flex: 1; | |
887 | - } | |
888 | - .qs-options2 { | |
889 | - text-align: left; | |
890 | - justify-content: flex-start; | |
891 | - padding-left: 20px; | |
892 | - .answer-s { | |
893 | - cursor: pointer; | |
894 | - border-color: #667ffd; | |
895 | - color: #667ffd; | |
896 | - margin: 0 15px; | |
897 | - &.active { | |
898 | - color: #fff; | |
899 | - } | |
900 | - } | |
901 | - } | |
902 | - :deep(.el-select) { | |
903 | - .el-input__inner { | |
904 | - border-radius: 20px; | |
905 | - border-color: #667ffd; | |
906 | - width: 150px; | |
907 | - height: 32px; | |
908 | - line-height: 32px; | |
909 | - background: rgba($color: #667ffd, $alpha: 0.05); | |
910 | - } | |
911 | - .el-input__icon { | |
912 | - line-height: 32px; | |
913 | - } | |
914 | - } | |
915 | -} | |
605 | + | |
916 | 606 | .fa-exchange { |
917 | 607 | color: #667ffd; |
918 | 608 | cursor: pointer; |
... | ... | @@ -924,14 +614,14 @@ export default { |
924 | 614 | margin: 0 20px; |
925 | 615 | padding: 10px 20px; |
926 | 616 | } |
927 | -.dia-tips{ | |
928 | - padding-bottom:10px; | |
929 | - } | |
617 | +.dia-tips { | |
618 | + padding-bottom: 10px; | |
619 | +} | |
930 | 620 | .dia-question-box { |
931 | 621 | padding: 16px 16px 1px; |
932 | 622 | background: #f8f8f8; |
933 | 623 | border-radius: 10px; |
934 | - | |
624 | + | |
935 | 625 | .answer-s { |
936 | 626 | width: 36px; |
937 | 627 | height: 28px; |
... | ... | @@ -958,13 +648,13 @@ export default { |
958 | 648 | background-size: 19px; |
959 | 649 | color: transparent; |
960 | 650 | } |
961 | - .ac{ | |
651 | + .ac { | |
962 | 652 | border-color: #ff6868; |
963 | 653 | background: #ff6868; |
964 | - color:#fff | |
654 | + color: #fff; | |
965 | 655 | } |
966 | 656 | } |
967 | -.down{ | |
968 | -padding-top:16px; | |
657 | +.down { | |
658 | + padding-top: 16px; | |
969 | 659 | } |
970 | 660 | </style> |
971 | 661 | \ No newline at end of file | ... | ... |
src/views/examinationPaper/add.vue
... | ... | @@ -807,7 +807,7 @@ export default { |
807 | 807 | }); |
808 | 808 | if (status == 0) { |
809 | 809 | this.answerTypeList = |
810 | - data.list.map((item) => { | |
810 | + data.list?.map((item) => { | |
811 | 811 | return { |
812 | 812 | typeName: item.tag, |
813 | 813 | id: item.tagId, |
... | ... | @@ -824,7 +824,7 @@ export default { |
824 | 824 | //查询年级列表 |
825 | 825 | const { data, status, info } = await this.$request.fetchGradeList(); |
826 | 826 | if (status == 0) { |
827 | - this.gradeList = [...data.gradeNames] || []; | |
827 | + this.gradeList = data.gradeNames&&[...data.gradeNames] || []; | |
828 | 828 | if (this.type != 2) { |
829 | 829 | this.form.gradeName = this.gradeList[0]; |
830 | 830 | } |
... | ... | @@ -838,12 +838,12 @@ export default { |
838 | 838 | gradeName: grade, |
839 | 839 | }); |
840 | 840 | if (status === 0) { |
841 | - this.subjectList = data.subjectNames.map((item) => { | |
841 | + this.subjectList = data.subjectNames?.map((item) => { | |
842 | 842 | return { |
843 | 843 | value: item, |
844 | 844 | label: item, |
845 | 845 | }; |
846 | - }); | |
846 | + })||[]; | |
847 | 847 | console.log(this.subjectList); |
848 | 848 | if (this.subjectList.length) { |
849 | 849 | this.form.subjectName = this.subjectList[0].value; | ... | ... |
src/views/examinationPaper/index.vue
... | ... | @@ -296,12 +296,12 @@ export default { |
296 | 296 | console.log(status) |
297 | 297 | if (status === 0) { |
298 | 298 | if (!!data.list) { |
299 | - this.classList = data.list.map((item) => { | |
299 | + this.classList = data.list?.map((item) => { | |
300 | 300 | return { |
301 | 301 | value: item.classId, |
302 | 302 | label: item.className, |
303 | 303 | }; |
304 | - }); | |
304 | + })||[]; | |
305 | 305 | this.query.classId = this.classList[0]?.value; |
306 | 306 | } |
307 | 307 | } else { |
... | ... | @@ -314,12 +314,12 @@ export default { |
314 | 314 | classId: this.query.classId, |
315 | 315 | }); |
316 | 316 | if (status === 0) { |
317 | - this.subjectList = data.subjectNames.map((item) => { | |
317 | + this.subjectList = data.subjectNames?.map((item) => { | |
318 | 318 | return { |
319 | 319 | value: item, |
320 | 320 | label: item, |
321 | 321 | }; |
322 | - }); | |
322 | + })||[]; | |
323 | 323 | this.query.subjectName = this.subjectList[0]?.value; |
324 | 324 | } else { |
325 | 325 | this.$message.error(info); | ... | ... |
src/views/examinationPaper/recycle.vue
... | ... | @@ -250,12 +250,12 @@ export default { |
250 | 250 | console.log(status); |
251 | 251 | if (status === 0) { |
252 | 252 | if (!!data.list) { |
253 | - this.classList = data.list.map((item) => { | |
253 | + this.classList = data.list?.map((item) => { | |
254 | 254 | return { |
255 | 255 | value: item.classId, |
256 | 256 | label: item.className, |
257 | 257 | }; |
258 | - }); | |
258 | + })||[]; | |
259 | 259 | this.query.classId = this.classList[0]?.value; |
260 | 260 | } |
261 | 261 | } else { |
... | ... | @@ -268,12 +268,12 @@ export default { |
268 | 268 | classId: this.query.classId, |
269 | 269 | }); |
270 | 270 | if (status === 0) { |
271 | - this.subjectList = data.subjectNames.map((item) => { | |
271 | + this.subjectList = data.subjectNames?.map((item) => { | |
272 | 272 | return { |
273 | 273 | value: item, |
274 | 274 | label: item, |
275 | 275 | }; |
276 | - }); | |
276 | + })||[]; | |
277 | 277 | this.query.subjectName = this.subjectList[0]?.value; |
278 | 278 | } else { |
279 | 279 | this.$message.error(info); |
... | ... | @@ -287,7 +287,7 @@ export default { |
287 | 287 | }); |
288 | 288 | if (status === 0) { |
289 | 289 | this.typeList = |
290 | - data.list.map((item) => { | |
290 | + data.list?.map((item) => { | |
291 | 291 | return { |
292 | 292 | value: item.tagId, |
293 | 293 | label: item.tag, | ... | ... |
src/views/layout/header/header.vue
... | ... | @@ -63,11 +63,10 @@ |
63 | 63 | import Cookies from "js-cookie"; |
64 | 64 | import langSelect from "../../../components/lang/langSelect"; |
65 | 65 | import tabNav from "./tabNav"; |
66 | -import UserInfo from "../../../components/userForm/userInfo"; | |
67 | 66 | |
68 | 67 | export default { |
69 | 68 | name: "Header", |
70 | - components: { tabNav, langSelect, UserInfo }, | |
69 | + components: { tabNav, langSelect }, | |
71 | 70 | computed: { |
72 | 71 | permissions: function () { |
73 | 72 | return this.$store.getters.info.permissions || []; | ... | ... |