From 5fbc4feb28dfc709652cbf8dc74c7f5751116d75 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 04 二月 2026 18:00:26 +0800
Subject: [PATCH] 测试完成

---
 src/views/outsideChainwtnew copy.vue |  849 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 849 insertions(+), 0 deletions(-)

diff --git a/src/views/outsideChainwtnew copy.vue b/src/views/outsideChainwtnew copy.vue
new file mode 100644
index 0000000..205e6d2
--- /dev/null
+++ b/src/views/outsideChainwtnew copy.vue
@@ -0,0 +1,849 @@
+<template>
+  <div class="questionnaire-optimized">
+    <div class="content-wrapper" v-if="!accomplish">
+      <div class="questionnaire-container">
+        <!-- 闂嵎鏍囬鍖哄煙 -->
+        <div class="questionnaire-header">
+          <h1 class="questionnaire-title">
+            {{ taskname ? taskname : "闂嵎" }}
+          </h1>
+          <div class="questionnaire-description">
+            {{
+              kcb
+                ? kcb
+                : "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸鍖婚櫌鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤闅忚闂嵎銆�"
+            }}
+          </div>
+        </div>
+
+        <el-divider class="custom-divider"></el-divider>
+
+        <!-- 闂嵎棰樼洰鍖哄煙 -->
+        <div class="questions-section">
+          <div
+            class="question-item"
+            v-for="(item, index) in visibleQuestions"
+            :key="item.id"
+            :class="{
+              'has-warning':
+                item.prompt &&
+                item.scriptResult &&
+                (item.scriptType !== 2 || item.scriptResult.length > 0),
+            }"
+          >
+            <!-- 棰樼洰棰樺共 -->
+            <div class="question-stem">
+              <span class="question-number"
+                >{{ getVisibleQuestionIndex(index) }}.</span
+              >
+              <span class="question-text">{{ item.scriptContent }}</span>
+              <span class="question-type-tag">
+                {{
+                  item.scriptType === 1
+                    ? "[鍗曢�塢"
+                    : item.scriptType === 2
+                    ? "[澶氶�塢"
+                    : "[闂瓟]"
+                }}
+              </span>
+            </div>
+
+            <!-- 鍗曢�夐鐩� -->
+            <div
+              class="question-options"
+              v-if="item.scriptType == 1 && !item.ishide"
+            >
+              <el-radio-group class="options-group" v-model="item.scriptResult">
+                <el-radio
+                  v-for="(
+                    option, optionIndex
+                  ) in item.svyTaskTemplateTargetoptions"
+                  :key="optionIndex"
+                  :label="option.optioncontent"
+                  :class="{
+                    'abnormal-option':
+                      option.isabnormal &&
+                      item.scriptResult == option.optioncontent,
+                  }"
+                  @click.native.prevent="
+                    handleRadioToggle(
+                      item,
+                      index,
+                      item.svyTaskTemplateTargetoptions,
+                      option.optioncontent
+                    )
+                  "
+                  class="option-radio"
+                >
+                  <span class="option-text">{{ option.optioncontent }}</span>
+                </el-radio>
+              </el-radio-group>
+            </div>
+
+            <!-- 澶氶�夐鐩� -->
+            <div class="question-options" v-if="item.scriptType == 2">
+              <el-checkbox-group
+                class="options-group"
+                v-model="item.scriptResult"
+              >
+                <el-checkbox
+                  v-for="(
+                    option, optionIndex
+                  ) in item.svyTaskTemplateTargetoptions"
+                  :key="optionIndex"
+                  :label="option.optioncontent"
+                  :class="{
+                    'abnormal-option': option.isabnormal,
+                  }"
+                  @change="$forceUpdate()"
+                  class="option-checkbox"
+                >
+                  <span class="option-text">{{ option.optioncontent }}</span>
+                </el-checkbox>
+              </el-checkbox-group>
+            </div>
+
+            <!-- 濉┖棰樼洰 -->
+            <div class="question-input" v-if="item.scriptType == 4">
+              <el-input
+                type="textarea"
+                :rows="3"
+                placeholder="璇疯緭鍏ユ偍鐨勫洖绛�"
+                v-model="item.scriptResult"
+                clearable
+                class="answer-textarea"
+              ></el-input>
+            </div>
+
+            <!-- 鎻愮ず淇℃伅 -->
+            <div
+              class="question-warning"
+              v-show="
+                item.prompt &&
+                item.scriptResult &&
+                (item.scriptType !== 2 || item.scriptResult.length > 0)
+              "
+            >
+              <el-alert
+                :title="item.prompt"
+                type="warning"
+                :closable="false"
+                class="warning-alert"
+              ></el-alert>
+            </div>
+          </div>
+        </div>
+
+        <!-- 鎻愪氦鎸夐挳 -->
+        <div class="submit-section">
+          <el-button type="primary" @click="cache(true)" class="submit-button">
+            鎻愪氦闂嵎
+          </el-button>
+        </div>
+      </div>
+    </div>
+
+    <!-- 瀹屾垚椤甸潰 -->
+    <div class="completion-page" v-else>
+      <div class="completion-content">
+        <div class="completion-icon">鉁�</div>
+        <h2 class="completion-title">鎰熻阿鎮ㄧ殑閰嶅悎!</h2>
+        <p class="completion-message">
+          {{
+            jsy
+              ? jsy
+              : "鐢熸椿涓婅鍔抽�哥粨鍚堬紝娉ㄦ剰浼戞伅鍜岃惀鍏伙紝閫傚綋閿荤偧锛屾垝鐑熼檺閰掞紝淇濇寔蹇冩儏鑸掔晠锛屽畾鏈熷璇娿�傞偅鏈鍥炶灏卞埌杩欓噷锛岀鎮ㄨ韩浣撳仴搴凤紒"
+          }}
+        </p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  getExternalfollowup,
+  getCachequestionnaire,
+  Cachequestionnaire,
+  Submitaquestionnaire,
+  geturlinfo,
+} from "@/api/AiCentre/index";
+import JSEncrypt from "jsencrypt";
+export default {
+  data() {
+    return {
+      taskid: 355,
+      patid: 265823,
+      kcb: "",
+      excep: 0,
+      isabnormal: 0,
+      taskname: "",
+      questionList: [],
+      jsy: null,
+      dialogVisible: false,
+      Endornot: true,
+      accomplish: false,
+      // 鍓嶇鍏挜
+      publicKey:
+        "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKR0yHv0rbJWQE+Sc7/FwpW66qMd9qX2k6z+SDgkSdxWh/1GbBoAP7bDQQRF6vXmoKsD2ya42H6XRLSDXAoayuMCAwEAAQ== ",
+      // 鍚庣绉侀挜
+      privateKey:
+        " MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==",
+      formData: {
+        question1: "",
+        question2: "",
+        question3: "",
+      },
+    };
+  },
+  mounted() {
+    // window.addEventListener("beforeunload", this.cache);
+  },
+  beforeDestroy() {
+    // window.removeEventListener("beforeunload", this.cache);
+  },
+  created() {
+    this.geturlinfo();
+  },
+  computed: {
+    // 璁$畻灞炴�э細鑾峰彇鎵�鏈夊彲瑙佺殑棰樼洰
+    visibleQuestions() {
+      if (!Array.isArray(this.questionList)) {
+        return [];
+      }
+      return this.questionList.filter((question) => !question.ishide);
+    },
+  },
+  methods: {
+    // 瑙f瀽urlid
+    geturlinfo() {
+      // let url = window.location.href;
+      let url = this.$route.query.p;
+      console.log(url, "url");
+      // let url = 'http://218.108.11.22:8093/sf/003';
+      // let urlid = this.extractLastSegmentFromUrl(url);
+
+      geturlinfo(url).then((res) => {
+        if (res.code == 200) {
+          this.getQuestionnaire(
+            res.data.param1,
+            res.data.param2,
+            res.data.param3,
+            res.data.param5
+          );
+        }
+      });
+    },
+    //     extractLastSegmentFromUrl(url) {
+    //     // 鎵惧埌鏈�鍚庝竴涓�'/'鐨勪綅缃�
+    //     const lastSlashIndex = url.lastIndexOf('/');
+    //     // 濡傛灉鎵惧埌浜�'/'锛屾埅鍙栧叾鍚庣殑鎵�鏈夊瓧绗�
+    //     if (lastSlashIndex !== -1) {
+    //         return url.substring(lastSlashIndex + 1);
+    //     }
+    //     // 濡傛灉娌℃湁鎵惧埌'/'锛岃繑鍥炵┖瀛楃涓�
+    //     return '';
+    // },
+
+    // 鑾峰彇鏁版嵁
+    getQuestionnaire(param1, param2, param3) {
+      this.taskid = decodeURIComponent(param1);
+      this.patid = decodeURIComponent(param2);
+      this.taskname = decodeURIComponent(param3);
+      // let taskid =
+      //   "OFp7tn/B6x7IzKJetvGWHdSWBj7msRlnlj6am9dyuHTH6sEt4uBbVCUXs5kcF/e4O2W6vqHf2Bz9K3/evbYDmw==";
+      // let patid =
+      //   "CVk0j8O86AeCqhV5WPsBBYDg9fec0wDoDlP9imYK4wDBNIkxywZzMJEGlPagOxnq6qr2WYZo0U8MUGWRGnq8ZA==";
+      // this.taskid = this.decrypt(taskid);
+      // this.patid = this.decrypt(patid);
+      // let taskids = this.encrypt(this.taskid);
+      // let patids = this.encrypt(this.patid);
+      // 鍏堝彇缂撳瓨
+      getCachequestionnaire({ param1: this.taskid, param2: this.patid }).then(
+        (res) => {
+          if (res.code == 200) {
+            this.questionList = res.data.result;
+            this.accomplish = res.data.submit;
+            if (this.questionList[0]) {
+              this.questionList.forEach((item) => {
+                if (item.scriptResult && item.scriptType != 2) {
+                  item.scriptResult = JSON.parse(item.scriptResult);
+                } else if (item.scriptResult && item.scriptType == 2) {
+                  item.scriptResult = item.scriptResult.split("&");
+                }
+              });
+              return;
+            } else {
+              this.getExternalfollowup();
+            }
+          } else {
+            this.getExternalfollowup();
+          }
+        }
+      );
+    },
+    // 鑾峰彇鏁版嵁
+    getExternalfollowup() {
+      getExternalfollowup({ param1: this.taskid, param2: this.patid }).then(
+        (res) => {
+          if (res.code == 200) {
+            this.questionList = res.data.script;
+            this.jsy = res.data.jsy;
+            this.kcb = res.data.kcb;
+            // 澶勭悊棰樼洰鏀堕泦缁撴灉鏍煎紡
+            this.questionList.forEach((item) => {
+              item.nextScriptno = Number(item.nextScriptno);
+              if (item.scriptType == 2) {
+                item.scriptResult = [];
+              }
+            });
+          }
+        }
+      );
+    },
+    // 鍔犲瘑鍑芥暟
+    encrypt(txt) {
+      const encryptor = new JSEncrypt();
+      encryptor.setPublicKey(this.publicKey); // 璁剧疆鍏挜
+      return encryptor.encrypt(txt); // 瀵规暟鎹繘琛屽姞瀵�
+    },
+    // 瑙e瘑鍑芥暟
+    decrypt(txt) {
+      const encryptor = new JSEncrypt();
+      encryptor.setPrivateKey(this.privateKey); // 璁剧疆绉侀挜
+      return encryptor.decrypt(txt); // 瀵规暟鎹繘琛岃В瀵�
+    },
+    // 鎻愪氦
+    submitForm() {
+      // 鎻愪氦琛ㄥ崟閫昏緫
+      let form = {
+        param1: this.taskid,
+        param2: this.patid,
+        excep: this.excep,
+        isabnormal: this.isabnormal,
+        serviceSubtaskDetailList: [],
+      };
+      console.log(form.isabnormal, "formisabnormal");
+
+      const arr = structuredClone(this.questionList);
+      // arr.forEach((item) => {
+      //   item.asrtext = JSON.stringify(item.scriptResult);
+      //   if (item.scriptType == 2 && item.scriptResult[0]) {
+      //     item.scriptResult = item.scriptResult.join("&");
+      //   }
+      // });
+      form.serviceSubtaskDetailList = arr;
+      Submitaquestionnaire(form).then((res) => {
+        if (res.code == 200) {
+          if (this.jsy) {
+            this.dialogVisible = true;
+          }
+          this.accomplish = true;
+          this.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        }
+      });
+    },
+    // 缂撳瓨
+    cache(subm) {
+      console.log("杩涘叆缂撳瓨");
+      let form = {
+        param1: this.taskid,
+        param2: this.patid,
+        svyTaskTemplateScriptVOS: [],
+      };
+      const arr = structuredClone(this.questionList);
+      arr.forEach((item) => {
+        item.ishide = item.ishide ? 1 : 0;
+      });
+      arr.forEach((item, index) => {
+        if (item.scriptType == 1 && item.scriptResult) {
+          var obj = item.svyTaskTemplateTargetoptions.find(
+            (items) => items.optioncontent == item.scriptResult
+          );
+          console.log(item);
+
+          console.log(obj, "obj");
+          if (obj.sendTaskid) {
+            item.sendTaskname = obj.sendTaskname;
+            item.sendTaskid = obj.sendTaskid;
+            console.log(String(obj.sendTaskid).split(","));
+            item.sendTaskids = String(obj.sendTaskid).split(",");
+          }
+          if (obj) {
+            form.excep = obj.isabnormal;
+            form.isabnormal = obj.isabnormal;
+            if (this.isabnormal != 1 && obj.isabnormal) {
+              this.excep = obj.isabnormal;
+              this.isabnormal = obj.isabnormal;
+            }
+            console.log(obj.isabnormal);
+          }
+        }
+      });
+
+      arr.forEach((item) => {
+        if (item.scriptType == 2 && item.scriptResult[0]) {
+          item.scriptResult = item.scriptResult.join("&");
+        } else if (item.scriptType != 2 && item.scriptResult) {
+          item.scriptResult = JSON.stringify(item.scriptResult);
+        }
+      });
+      form.svyTaskTemplateScriptVOS = arr;
+      form.type = 2;
+      Cachequestionnaire(form).then((res) => {
+        if (res.code == 200) {
+          if (subm) {
+            this.submitForm();
+          }
+        }
+      });
+    },
+    // 鑾峰彇鍙棰樼洰鐨勬纭簭鍙凤紙瑙e喅璺抽鍚庡簭鍙蜂笉杩炵画鐨勯棶棰橈級
+    getVisibleQuestionIndex(index) {
+      return index + 1;
+    },
+    // 鏂板鐨勫垏鎹㈤�変腑/鍙栨秷閫変腑鏂规硶
+    handleRadioToggle(questionItem, index, options, optionValue) {
+      // 淇濆瓨褰撳墠鐘舵�佷互渚垮悗缁瘮杈�
+      const previousState = JSON.parse(JSON.stringify(this.questionList));
+
+      // 鍘熸湁鐨勫鐞嗛�昏緫
+      if (questionItem.scriptResult === optionValue) {
+        questionItem.scriptResult = "";
+        questionItem.isabnormal = 0;
+        questionItem.showAppendInput = false;
+      } else {
+        questionItem.scriptResult = optionValue;
+        this.handleOptionChange(optionValue, index, options, questionItem);
+      }
+
+      // 澶勭悊瀹屾垚鍚庯紝纭繚閲嶆柊璁$畻鍙棰樼洰鐨勫簭鍙�
+      this.$forceUpdate();
+    },
+
+    // 鍦╩ethods閮ㄥ垎锛屼慨鏀筯andleOptionChange鏂规硶:
+    handleOptionChange(selectedOption, questionIndex, options, a) {
+      console.log(selectedOption, questionIndex, options, a, "888");
+
+      if (document.activeElement) {
+        document.activeElement.blur();
+      }
+
+      // 鎵惧埌琚�変腑鐨勯�夐」瀵硅薄
+      const selectedOptionObj = options.find(
+        (item) => item.optioncontent == selectedOption
+      );
+      if (selectedOptionObj) {
+        this.questionList[questionIndex].nextScriptno =
+          selectedOptionObj.nextQuestion;
+        this.questionList[questionIndex].score = selectedOptionObj.score;
+        this.questionList[questionIndex].prompt = selectedOptionObj.prompt;
+      }
+      // 澶勭悊寮傚父鐘舵�侀珮浜�
+      this.questionList[questionIndex].isabnormal =
+        selectedOptionObj.isabnormal;
+      // 澶勭悊闄勫姞杈撳叆妗嗘樉绀�
+
+      this.questionList[questionIndex].showAppendInput =
+        selectedOptionObj.appendflag == 1;
+      console.log(this.questionList);
+
+      // if (!this.questionList[questionIndex].showAppendInput) {
+      //   this.questionList[questionIndex].answerps = ""; // 娓呴櫎闄勫姞淇℃伅
+      // }
+      // 淇濆瓨褰撳墠棰樼洰涔嬪墠宸茬粡闅愯棌鐨勯鐩姸鎬�
+      const previouslyHiddenBeforeCurrent = this.questionList
+        .slice(0, questionIndex)
+        .map((item, index) => (item.ishide ? index : -1))
+        .filter((index) => index !== -1);
+
+      // 淇濆瓨涔嬪墠鍥爊extQuestion=0鑰岄殣钘忕殑棰樼洰鑼冨洿
+      const previouslyHiddenByEnd = this.questionList
+        .map((item, index) => (item.hiddenByEnd ? index : -1))
+        .filter((index) => index !== -1);
+
+      // 濡傛灉branchFlag涓�1锛屽鐞嗛鐩烦杞�
+      if (a.branchFlag == 1) {
+        if (selectedOptionObj.nextQuestion == 0) {
+          // 缁撴潫闂瓟 - 闅愯棌鍚庨潰鎵�鏈夐鐩苟鏍囪
+          this.questionList = this.questionList.map((item, index) => ({
+            ...item,
+            ishide: index > questionIndex,
+            hiddenByEnd: index > questionIndex, // 鏍囪杩欎簺棰樼洰鏄缁撴潫闂瓟闅愯棌鐨�
+          }));
+        } else {
+          // 姝e父璺宠浆閫昏緫
+          const nextQuestionIndex = selectedOptionObj.nextQuestion - 1;
+          console.log(nextQuestionIndex, 4);
+          console.log(selectedOptionObj);
+
+          this.questionList = this.questionList.map((item, index) => {
+            // 淇濈暀褰撳墠棰樼洰涔嬪墠鐨勯殣钘忕姸鎬�
+            if (index < questionIndex) {
+              return {
+                ...item,
+                ishide: previouslyHiddenBeforeCurrent.includes(index),
+                hiddenByEnd: false, // 娓呴櫎缁撴潫鏍囪
+              };
+            }
+
+            // 褰撳墠棰樼洰鎬绘槸鍙
+            if (index === questionIndex) {
+              return { ...item, ishide: 0, hiddenByEnd: false };
+            }
+
+            // 鏄剧ず鐩爣涓嬩竴棰�
+            if (index === nextQuestionIndex) {
+              return { ...item, ishide: 0, hiddenByEnd: false };
+            }
+
+            // 濡傛灉鏄箣鍓嶈缁撴潫闂瓟闅愯棌鐨勯鐩紝鐜板湪搴旇鎭㈠鏄剧ず
+            if (item.hiddenByEnd) {
+              return { ...item, ishide: 0, hiddenByEnd: false };
+            }
+
+            // 闅愯棌褰撳墠棰樺拰鐩爣棰樹箣闂寸殑棰樼洰
+            if (index > questionIndex && index < nextQuestionIndex) {
+              return { ...item, ishide: 1, hiddenByEnd: false };
+            }
+
+            // 鍏朵粬鎯呭喌淇濇寔鍘熺姸
+            return item;
+          });
+        }
+      } else {
+        // 濡傛灉娌℃湁璺宠浆锛屽彧闇�纭繚涓嬩竴棰樺彲瑙�
+        this.questionList = this.questionList.map((item, index) => ({
+          ...item,
+          ishide: index === questionIndex + 1 ? 0 : item.ishide,
+          hiddenByEnd: index === questionIndex + 1 ? false : item.hiddenByEnd,
+        }));
+      }
+
+      // 鍦ㄥ鐞嗗畬棰樼洰鏄剧ず/闅愯棌鍚庯紝寮哄埗鏇存柊瑙嗗浘浠ョ‘淇濆簭鍙锋纭�
+      this.$nextTick(() => {
+        this.$forceUpdate();
+      });
+    },
+    // 澶勭悊鍗曢�夐�夐」
+    // handleOptionChange(selectedvalue, index, arr) {
+    //   // 鏌ユ壘閫変腑鐨勯�夐」瀵硅薄
+    //   const selectedOption = arr.svyTaskTemplateTargetoptions.find(
+    //     (option) => option.optioncontent == selectedvalue
+    //   );
+    //   if (selectedOption) {
+    //     this.questionList[index].nextScriptno = selectedOption.nextQuestion;
+    //     this.questionList[index].score = selectedOption.score;
+    //     this.questionList[index].prompt = selectedOption.prompt;
+    //   }
+    // },
+    // 澶勭悊澶氶�夐�夐」
+    // updateScore(selectedvalues, index, arr) {
+    //   // 锟斤拷鍔犲垎鏁�
+    //   let score = 0;
+    //   selectedvalues.forEach((value) => {
+    //     const selectedOption = arr.svyTaskTemplateTargetoptions.find(
+    //       (option) => option.optioncontent == value
+    //     );
+    //     if (selectedOption) {
+    //       score += Number(selectedOption.score);
+    //     }
+    //   });
+    //   this.questionList[index].score = score;
+    // },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.questionnaire-optimized {
+  min-height: 100vh;
+  background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
+  padding: 20px 0;
+  font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
+}
+
+.content-wrapper {
+  max-width: 800px;
+  margin: 0 auto;
+  padding: 0 15px;
+}
+
+.questionnaire-container {
+  background: #ffffff;
+  border-radius: 12px;
+  box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08);
+  padding: 30px;
+  margin-bottom: 30px;
+}
+
+.questionnaire-header {
+  text-align: center;
+  margin-bottom: 25px;
+}
+
+.questionnaire-title {
+  color: #175997;
+  font-size: 28px;
+  font-weight: 700;
+  margin-bottom: 15px;
+  line-height: 1.3;
+}
+
+.questionnaire-description {
+  font-size: 18px;
+  color: #5a6c84;
+  line-height: 1.6;
+  max-width: 700px;
+  margin: 0 auto;
+}
+
+.custom-divider {
+  margin: 25px 0;
+  background-color: #eaeef2;
+}
+
+.questions-section {
+  margin-bottom: 40px;
+}
+
+.question-item {
+  margin-bottom: 35px;
+  padding: 20px;
+  border-radius: 8px;
+  border: 1px solid #eaeef2;
+  transition: all 0.3s ease;
+
+  &:hover {
+    border-color: #d1e0f0;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+  }
+
+  &.has-warning {
+    border-left: 4px solid #e6a23c;
+  }
+}
+
+.question-stem {
+  display: flex;
+  align-items: flex-start;
+  margin-bottom: 20px;
+  font-size: 18px;
+}
+
+.question-number {
+  font-weight: 600;
+  color: #175997;
+  margin-right: 8px;
+  min-width: 24px;
+}
+
+.question-text {
+  flex: 1;
+  line-height: 1.5;
+  color: #2c3e50;
+  font-weight: 500;
+}
+
+.question-type-tag {
+  color: #3ba2f7;
+  font-size: 14px;
+  margin-left: 10px;
+  font-weight: 500;
+}
+
+.question-options {
+  margin: 15px 0;
+}
+
+.options-group {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+}
+
+.option-radio,
+.option-checkbox {
+  margin: 0;
+  padding: 12px 15px;
+  border-radius: 6px;
+  border: 1px solid #e0e0e0;
+  transition: all 0.2s;
+
+  &:hover {
+    border-color: #c0c4cc;
+    background-color: #f8fafc;
+  }
+}
+
+:deep(.option-radio .el-radio__label),
+:deep(.option-checkbox .el-checkbox__label) {
+  display: flex;
+  align-items: center;
+  font-size: 16px;
+}
+
+.option-text {
+  margin-right: 5px;
+}
+
+.abnormal-indicator {
+  color: #f56c6c;
+  font-weight: bold;
+}
+
+.abnormal-option {
+  :deep(.el-radio__inner) {
+    border-color: #f56c6c;
+  }
+
+  :deep(.el-checkbox__inner) {
+    border-color: #f56c6c;
+  }
+}
+
+.question-input {
+  margin: 15px 0;
+}
+
+.answer-textarea {
+  :deep(.el-textarea__inner) {
+    font-size: 16px;
+    line-height: 1.5;
+  }
+}
+
+.question-warning {
+  margin-top: 15px;
+}
+
+.warning-alert {
+  :deep(.el-alert__title) {
+    font-size: 15px;
+    line-height: 1.4;
+  }
+}
+
+.submit-section {
+  text-align: center;
+  padding: 20px 0 10px;
+}
+
+.submit-button {
+  width: 100%;
+  max-width: 300px;
+  height: 50px;
+  font-size: 18px;
+  font-weight: 500;
+  border-radius: 8px;
+  background: linear-gradient(135deg, #175997 0%, #2a77c9 100%);
+  border: none;
+  box-shadow: 0 4px 12px rgba(23, 89, 151, 0.3);
+  transition: all 0.3s;
+
+  &:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 6px 16px rgba(23, 89, 151, 0.4);
+  }
+
+  &:active {
+    transform: translateY(0);
+  }
+}
+
+.completion-page {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  min-height: 70vh;
+  padding: 20px;
+}
+
+.completion-content {
+  text-align: center;
+  max-width: 600px;
+  padding: 40px;
+  background: #ffffff;
+  border-radius: 12px;
+  box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08);
+}
+
+.completion-icon {
+  font-size: 80px;
+  color: #52c41a;
+  margin-bottom: 20px;
+}
+
+.completion-title {
+  color: #175997;
+  font-size: 32px;
+  font-weight: 700;
+  margin-bottom: 20px;
+}
+
+.completion-message {
+  font-size: 18px;
+  color: #5a6c84;
+  line-height: 1.6;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+  .content-wrapper {
+    padding: 0 10px;
+  }
+
+  .questionnaire-container {
+    padding: 20px 15px;
+  }
+
+  .questionnaire-title {
+    font-size: 24px;
+  }
+
+  .questionnaire-description {
+    font-size: 16px;
+  }
+
+  .question-stem {
+    font-size: 16px;
+    flex-direction: column;
+    align-items: flex-start;
+  }
+
+  .question-type-tag {
+    margin-left: 0;
+    margin-top: 5px;
+  }
+
+  .question-item {
+    padding: 15px;
+  }
+
+  .completion-content {
+    padding: 30px 20px;
+  }
+
+  .completion-title {
+    font-size: 28px;
+  }
+
+  .completion-message {
+    font-size: 16px;
+  }
+}
+
+@media (max-width: 480px) {
+  .questionnaire-title {
+    font-size: 22px;
+  }
+
+  .completion-title {
+    font-size: 24px;
+  }
+
+  .completion-icon {
+    font-size: 60px;
+  }
+}
+</style>

--
Gitblit v1.9.3