| | |
| | | item.prompt && |
| | | item.scriptResult && |
| | | (item.scriptType !== 2 || item.scriptResult.length > 0), |
| | | 'required-error': item.requiredError, |
| | | }" |
| | | > |
| | | <!-- 题目题干 --> |
| | |
| | | <span class="question-number" |
| | | >{{ getQuestionNumber(group, index) }}.</span |
| | | > |
| | | <span class="question-text">{{ item.scriptContent }}</span> |
| | | <span class="question-text" |
| | | ><span v-if="isRequired(item)" class="required-star" |
| | | >*</span |
| | | >{{ item.scriptContent }}</span |
| | | > |
| | | <span class="question-type-tag"> |
| | | {{ |
| | | item.scriptType == 1 |
| | |
| | | item.prompt && |
| | | item.scriptResult && |
| | | (item.scriptType !== 2 || item.scriptResult.length > 0), |
| | | 'required-error': item.requiredError, |
| | | }" |
| | | > |
| | | <!-- 题目题干 --> |
| | |
| | | <span class="question-number" |
| | | >{{ getVisibleQuestionIndex(index) }}.</span |
| | | > |
| | | <span class="question-text">{{ item.scriptContent }}</span> |
| | | <span class="question-text" |
| | | ><span v-if="isRequired(item)" class="required-star" |
| | | >*</span |
| | | >{{ item.scriptContent }}</span |
| | | > |
| | | <span class="question-type-tag"> |
| | | {{ |
| | | item.scriptType == 1 |
| | |
| | | // 缓存 |
| | | cache(subm) { |
| | | console.log("进入缓存"); |
| | | // 提交场景:先做必填项校验 |
| | | if (subm === true && !this.validateRequired()) { |
| | | return; |
| | | } |
| | | // 提交场景:开启加载状态,防止重复点击 |
| | | if (subm === true) { |
| | | this.submitting = true; |
| | |
| | | this.$modal.msgError("提交失败,请重试"); |
| | | } |
| | | }); |
| | | }, |
| | | // 是否必填(1必填 2不必填) |
| | | isRequired(item) { |
| | | return item.ismandatory == 1 || item.ismandatory == "1"; |
| | | }, |
| | | // 判断题目是否未填写 |
| | | isQuestionEmpty(item) { |
| | | const val = item.scriptResult; |
| | | if (item.scriptType == 2) { |
| | | return !val || (Array.isArray(val) && val.length === 0); |
| | | } |
| | | return val === undefined || val === null || val === ""; |
| | | }, |
| | | // 保存前必填项校验 |
| | | validateRequired() { |
| | | const list = this.questionList || []; |
| | | list.forEach((item) => { |
| | | if (item.requiredError) this.$set(item, "requiredError", false); |
| | | }); |
| | | const unfilled = []; |
| | | list.forEach((item) => { |
| | | if (item.ishide) return; |
| | | if (!this.isRequired(item)) return; |
| | | if (this.isQuestionEmpty(item)) unfilled.push(item); |
| | | }); |
| | | if (unfilled.length > 0) { |
| | | unfilled.forEach((item) => this.$set(item, "requiredError", true)); |
| | | this.$modal.msgWarning( |
| | | `还有 ${unfilled.length} 道必填题未填写,请补充后再提交` |
| | | ); |
| | | this.$nextTick(() => { |
| | | const idx = this.visibleQuestions.indexOf(unfilled[0]); |
| | | const els = this.$el.querySelectorAll(".question-item"); |
| | | if (els[idx]) { |
| | | els[idx].scrollIntoView({ behavior: "smooth", block: "center" }); |
| | | } |
| | | }); |
| | | return false; |
| | | } |
| | | return true; |
| | | }, |
| | | // 获取可见题目的正确序号(解决跳题后序号不连续的问题) |
| | | getVisibleQuestionIndex(index) { |
| | |
| | | border-left: 4px solid #e6a23c; |
| | | } |
| | | |
| | | &.required-error { |
| | | border-color: #f56c6c; |
| | | border-left: 4px solid #f56c6c; |
| | | background: #fef0f0; |
| | | } |
| | | |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | |
| | | min-width: 16px; |
| | | } |
| | | |
| | | .required-star { |
| | | color: #f56c6c; |
| | | margin-right: 2px; |
| | | font-weight: 600; |
| | | } |
| | | |
| | | // .question-text { |
| | | // line-height: 1.5; |
| | | // color: #2c3e50; |