| | |
| | | v-for="(item, index) in questionList" |
| | | :key="item.aaa" |
| | | > |
| | | <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 1"> |
| | | <div |
| | | class="scriptTopic-dev" |
| | | :key="index" |
| | | v-if="item.scriptType == 1" |
| | | :class="{ 'required-error': item.requiredError }" |
| | | > |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、<span style="line-height: 1.5" |
| | | ><span v-if="isRequired(item)" class="required-star">*</span |
| | | >{{ item.scriptContent }} |
| | | <span style="color: #3ba2f7">[单选]</span></span |
| | | > |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 多选 --> |
| | | <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 2"> |
| | | <div |
| | | class="scriptTopic-dev" |
| | | :key="index" |
| | | v-if="item.scriptType == 2" |
| | | :class="{ 'required-error': item.requiredError }" |
| | | > |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、<span style="line-height: 1.5" |
| | | ><span v-if="isRequired(item)" class="required-star">*</span |
| | | >{{ item.scriptContent }} |
| | | <span style="color: #3ba2f7">[多选]</span></span |
| | | > |
| | |
| | | class="scriptTopic-dev" |
| | | :key="index" |
| | | v-if="item.scriptType == 4 || item.scriptType == 3" |
| | | :class="{ 'required-error': item.requiredError }" |
| | | > |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、<span style="line-height: 1.5" |
| | | ><span v-if="isRequired(item)" class="required-star">*</span |
| | | >{{ item.scriptContent |
| | | }}<span style="color: #3ba2f7">[问答]</span></span |
| | | > |
| | |
| | | // 缓存 |
| | | cache(subm) { |
| | | console.log("进入缓存"); |
| | | // 提交场景:先做必填项校验 |
| | | if (subm === true && !this.validateRequired()) { |
| | | return; |
| | | } |
| | | let form = { |
| | | param1: this.taskid, |
| | | param2: this.patid, |
| | |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | // 是否必填(1必填 2不必填) |
| | | isRequired(item) { |
| | | return item.ismandatory == 1 || item.ismandatory == "1"; |
| | | }, |
| | | // 判断题目是否未填写 |
| | | isQuestionEmpty(item) { |
| | | const val = item.questionResult; |
| | | 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 (!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.questionList.indexOf(unfilled[0]); |
| | | const els = this.$el.querySelectorAll(".scriptTopic-dev"); |
| | | if (els[idx]) { |
| | | els[idx].scrollIntoView({ behavior: "smooth", block: "center" }); |
| | | } |
| | | }); |
| | | return false; |
| | | } |
| | | return true; |
| | | }, |
| | | // 处理单选选项 |
| | | handleOptionChange(selectedvalue, index, arr) { |
| | |
| | | } |
| | | .toptitle { |
| | | } |
| | | .required-star { |
| | | color: #f56c6c; |
| | | margin-right: 2px; |
| | | font-weight: 600; |
| | | } |
| | | .scriptTopic-dev.required-error { |
| | | border: 1px solid #f56c6c; |
| | | border-left: 4px solid #f56c6c; |
| | | background: #fef0f0; |
| | | border-radius: 4px; |
| | | padding: 8px; |
| | | } |
| | | .bottom-fixed { |
| | | position: fixed; |
| | | bottom: 0; |