From e9f35f9782f3d99d742c294fe503fc1294f203c4 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 14 九月 2026 11:10:31 +0800
Subject: [PATCH] 测试完成
---
src/views/outsideChainwtnew.vue | 197 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 181 insertions(+), 16 deletions(-)
diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue
index 4d5e662..f37bec9 100644
--- a/src/views/outsideChainwtnew.vue
+++ b/src/views/outsideChainwtnew.vue
@@ -1,5 +1,15 @@
<template>
<div class="questionnaire-optimized">
+ <!-- 鎻愪氦涓殑鍏ㄥ睆鍔犺浇閬僵锛堝ぇ瀛椾綋锛岄�傝�佸寲锛� -->
+ <div v-if="submitting" class="submit-loading-mask">
+ <div class="submit-loading-box">
+ <div class="submit-loading-spinner"></div>
+ <div class="submit-loading-title">闂嵎鎻愪氦涓�</div>
+ <div class="submit-loading-tip">璇风◢鍊欙紝姝e湪涓婁紶鎮ㄧ殑绛旀...</div>
+ <div class="submit-loading-warn">璇蜂笉瑕佸叧闂垨鍒锋柊椤甸潰</div>
+ </div>
+ </div>
+
<div v-if="loading && !accomplish" class="loading-container">
<div class="loading-content">
<i class="el-icon-loading loading-icon"></i>
@@ -54,6 +64,7 @@
item.prompt &&
item.scriptResult &&
(item.scriptType !== 2 || item.scriptResult.length > 0),
+ 'required-error': item.requiredError,
}"
>
<!-- 棰樼洰棰樺共 -->
@@ -61,7 +72,11 @@
<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
@@ -191,6 +206,7 @@
item.prompt &&
item.scriptResult &&
(item.scriptType !== 2 || item.scriptResult.length > 0),
+ 'required-error': item.requiredError,
}"
>
<!-- 棰樼洰棰樺共 -->
@@ -198,7 +214,11 @@
<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
@@ -317,8 +337,9 @@
type="primary"
@click="cache(true)"
class="submit-button"
+ :loading="submitting"
>
- 鎻愪氦闂嵎
+ {{ submitting ? "鎻愪氦涓�..." : "鎻愪氦闂嵎" }}
</el-button>
</div>
</div>
@@ -372,6 +393,7 @@
dialogVisible: false,
Endornot: true,
accomplish: false,
+ submitting: false, // 鎻愪氦涓殑鍔犺浇鐘舵��
dimensionTypes: [
{
value: 1,
@@ -662,19 +684,35 @@
// }
// });
form.serviceSubtaskDetailList = arr;
- Submitaquestionnaire(form).then((res) => {
- if (res.code == 200) {
- if (this.jsy) {
- this.dialogVisible = true;
+ Submitaquestionnaire(form)
+ .then((res) => {
+ this.submitting = false;
+ if (res.code == 200) {
+ if (this.jsy) {
+ this.dialogVisible = true;
+ }
+ this.accomplish = true;
+ this.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ } else {
+ this.$modal.msgError(res.msg || "鎻愪氦澶辫触锛岃閲嶈瘯");
}
- this.accomplish = true;
- this.$modal.msgSuccess("鎻愪氦鎴愬姛");
- }
- });
+ })
+ .catch(() => {
+ this.submitting = false;
+ this.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+ });
},
// 缂撳瓨
cache(subm) {
console.log("杩涘叆缂撳瓨");
+ // 鎻愪氦鍦烘櫙锛氬厛鍋氬繀濉」鏍¢獙
+ if (subm === true && !this.validateRequired()) {
+ return;
+ }
+ // 鎻愪氦鍦烘櫙锛氬紑鍚姞杞界姸鎬侊紝闃叉閲嶅鐐瑰嚮
+ if (subm === true) {
+ this.submitting = true;
+ }
let form = {
param1: this.taskid,
param2: this.patid,
@@ -720,13 +758,66 @@
});
form.svyTaskTemplateScriptVOS = arr;
form.type = 2;
- Cachequestionnaire(form).then((res) => {
- if (res.code == 200) {
- if (subm) {
- this.submitForm();
+ Cachequestionnaire(form)
+ .then((res) => {
+ if (res.code == 200) {
+ if (subm) {
+ this.submitForm();
+ }
+ } else {
+ // 缂撳瓨澶辫触锛氭仮澶嶆彁浜ょ姸鎬�
+ if (subm) {
+ this.submitting = false;
+ this.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+ }
}
- }
+ })
+ .catch(() => {
+ if (subm) {
+ this.submitting = false;
+ 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;
},
// 鑾峰彇鍙棰樼洰鐨勬纭簭鍙凤紙瑙e喅璺抽鍚庡簭鍙蜂笉杩炵画鐨勯棶棰橈級
getVisibleQuestionIndex(index) {
@@ -1004,6 +1095,12 @@
border-left: 4px solid #e6a23c;
}
+ &.required-error {
+ border-color: #f56c6c;
+ border-left: 4px solid #f56c6c;
+ background: #fef0f0;
+ }
+
&:last-child {
margin-bottom: 0;
}
@@ -1035,6 +1132,12 @@
font-weight: 600;
color: #175997;
min-width: 16px;
+}
+
+.required-star {
+ color: #f56c6c;
+ margin-right: 2px;
+ font-weight: 600;
}
// .question-text {
@@ -1316,6 +1419,68 @@
min-height: 70vh;
}
+/* ===== 鎻愪氦涓細閫傝�佸寲鍏ㄥ睆鍔犺浇閬僵 ===== */
+.submit-loading-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.55);
+ z-index: 3000;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 20px;
+}
+
+.submit-loading-box {
+ background: #ffffff;
+ border-radius: 20px;
+ padding: 48px 56px;
+ text-align: center;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
+ max-width: 85vw;
+ box-sizing: border-box;
+}
+
+.submit-loading-spinner {
+ width: 72px;
+ height: 72px;
+ margin: 0 auto 24px;
+ border: 8px solid #e8eef5;
+ border-top-color: #175997;
+ border-right-color: #2a77c9;
+ border-radius: 50%;
+ animation: submit-spin 1s linear infinite;
+}
+
+@keyframes submit-spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.submit-loading-title {
+ font-size: 28px;
+ font-weight: 700;
+ color: #175997;
+ margin-bottom: 14px;
+}
+
+.submit-loading-tip {
+ font-size: 20px;
+ color: #303a47;
+ line-height: 1.6;
+}
+
+.submit-loading-warn {
+ margin-top: 18px;
+ font-size: 17px;
+ color: #e6a23c;
+ font-weight: 500;
+}
+
.loading-content {
text-align: center;
padding: 40px;
--
Gitblit v1.9.3