WXL
2024-09-09 5c35457d2cc1fd0dcf8de9f3de838d58e8296cb8
src/views/outsideChainwt.vue
@@ -1,6 +1,6 @@
<template>
  <div class="questionnaire">
    <div class="CONTENT">
    <div class="CONTENT" v-if="!accomplish">
      <div class="title">{{ taskname ? taskname : "问卷" }}</div>
      <div class="preview-left">
        <!-- 单选 -->
@@ -14,14 +14,21 @@
              {{ index + 1 }}、[单选]<span>{{ item.scriptContent }}</span>
            </div>
            <div class="dev-xx">
              <el-radio-group v-model="item.scriptResult" @change="handleOptionChange($event, index, item)">
              <el-radio-group
                v-model="item.scriptResult"
                @change="handleOptionChange($event, index, item)"
              >
                <el-radio
                  border
                  v-for="(items, index) in item.svyLibTemplateTargetoptions"
                  :key="index"
                  :label="items.optioncontent"
                  >{{ items.optioncontent }}</el-radio
                >
              </el-radio-group>
            </div>
            <div v-show="item.prompt">
              <el-alert :title="item.prompt" type="warning"> </el-alert>
            </div>
          </div>
          <!-- 多选 -->
@@ -30,8 +37,12 @@
              {{ index + 1 }}、[多选]<span>{{ item.scriptContent }}</span>
            </div>
            <div class="dev-xx">
              <el-checkbox-group v-model="item.scriptResult">
              <el-checkbox-group
                v-model="item.scriptResult"
                @change="updateScore($event, index, item)"
              >
                <el-checkbox
                border
                  @change="$forceUpdate()"
                  v-for="(items, indexs) in item.svyLibTemplateTargetoptions"
                  :key="indexs"
@@ -40,6 +51,9 @@
                  {{ items.optioncontent }}
                </el-checkbox>
              </el-checkbox-group>
            </div>
            <div v-show="item.prompt && item.scriptResult[0]">
              <el-alert :title="item.prompt" type="warning"> </el-alert>
            </div>
          </div>
          <!-- 填空 -->
@@ -63,10 +77,33 @@
      <el-form :model="formData" label-width="80px">
        <el-form-item>
          <el-button type="primary" @click="cache(true)">提交问卷</el-button>
          <el-button type="primary" @click="cache">缓存问卷</el-button>
          <!-- <el-button type="primary" @click="cache">缓存问卷</el-button> -->
        </el-form-item>
      </el-form>
    </div>
    <div class="CONTENT" v-else>
      <div class="preview-left" style="margin-top: 100px">
        <div
          style="
            font-size: 24px;
            color: #175997;
            font-weight: 600;
            margin-bottom: 10px;
          "
        >
          感谢您的配合!
        </div>
        <div style="font-size: 20px">{{ revisitAfter }}</div>
      </div>
    </div>
    <!-- <el-dialog
      :visible.sync="dialogVisible"
      width="50%"
    >
      <div>
        <el-alert :title="revisitAfter" type="success"> </el-alert>
      </div>
    </el-dialog> -->
  </div>
</template>
@@ -84,6 +121,10 @@
      taskid: 355,
      patid: 265823,
      questionList: null,
      revisitAfter: null,
      dialogVisible: false,
      Endornot: true,
      accomplish: true,
      // 前端公钥
      publicKey:
        "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKR0yHv0rbJWQE+Sc7/FwpW66qMd9qX2k6z+SDgkSdxWh/1GbBoAP7bDQQRF6vXmoKsD2ya42H6XRLSDXAoayuMCAwEAAQ== ",
@@ -97,7 +138,12 @@
      },
    };
  },
  mounted() {
    window.addEventListener("beforeunload", this.cache);
  },
  beforeDestroy() {
    window.removeEventListener("beforeunload", this.cache);
  },
  created() {
    this.getQuestionnaire();
  },
@@ -113,22 +159,20 @@
      //   "CVk0j8O86AeCqhV5WPsBBYDg9fec0wDoDlP9imYK4wDBNIkxywZzMJEGlPagOxnq6qr2WYZo0U8MUGWRGnq8ZA==";
      // this.taskid = this.decrypt(taskid);
      // this.patid = this.decrypt(patid);
      // this.$modal.msgSuccess("用户id为" + this.patid);
      // this.$modal.msgSuccess("任务id为" + this.taskid);
      // let taskids = this.encrypt(this.taskid);
      // let patids = this.encrypt(this.patid);
      console.log(this.$route.query.param1);
      console.log(this.$route.query.param2);
      // 先取缓存
      getCachequestionnaire({ param1: this.taskid, param2: this.patid }).then(
        (res) => {
          if (res.code == 200) {
            this.questionList = res.data;
            this.accomplish = res.data.submit;
            if (this.questionList[0]) {
              this.questionList.forEach((item) => {
                if (item.scriptResult) {
                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;
@@ -146,7 +190,8 @@
      getExternalfollowup({ param1: this.taskid, param2: this.patid }).then(
        (res) => {
          if (res.code == 200) {
            this.questionList = res.rows;
            this.questionList = res.data.script;
            this.revisitAfter = res.data.revisitAfter;
            // 处理题目收集结果格式
            this.questionList.forEach((item) => {
              item.nextScriptno = Number(item.nextScriptno);
@@ -158,14 +203,12 @@
        }
      );
    },
    // 加密函数
    encrypt(txt) {
      const encryptor = new JSEncrypt();
      encryptor.setPublicKey(this.publicKey); // 设置公钥
      return encryptor.encrypt(txt); // 对数据进行加密
    },
    // 解密函数
    decrypt(txt) {
      const encryptor = new JSEncrypt();
@@ -181,22 +224,26 @@
        serviceSubtaskDetailList: [],
      };
      const arr = structuredClone(this.questionList);
      arr.forEach((item) => {
        item.asrtext = JSON.stringify(item.scriptResult);
        if (item.scriptType == 2 && item.scriptResult[0]) {
          item.asrtext = item.scriptResult.join("&");
        }
      });
      // 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.revisitAfter) {
            this.dialogVisible = true;
          }
          this.accomplish = true;
          this.$modal.msgSuccess("提交成功");
        }
      });
      // 可以将数据提交到后端或者进行其他处理
    },
    // 缓存
    cache(subm) {
      console.log("进入缓存");
      let form = {
        param1: this.taskid,
        param2: this.patid,
@@ -204,20 +251,23 @@
      };
      const arr = structuredClone(this.questionList);
      arr.forEach((item) => {
        item.scriptResult = JSON.stringify(item.scriptResult);
        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.svyLibTemplateScriptVOS = arr;
      Cachequestionnaire(form).then((res) => {
        if (res.code == 200) {
          this.$modal.msgSuccess("提交成功");
          if (subm) {
            this.submitForm();
          }
        }
      });
    },
    // 处理选项
    handleOptionChange(selectedvalue, index,arr) {
    // 处理单选选项
    handleOptionChange(selectedvalue, index, arr) {
      // 查找选中的选项对象
      const selectedOption = arr.svyLibTemplateTargetoptions.find(
        (option) => option.optioncontent == selectedvalue
@@ -225,7 +275,23 @@
      if (selectedOption) {
        // 将选中的选项对象的 id 赋值给 obj.sonId
        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.svyLibTemplateTargetoptions.find(
          (option) => option.optioncontent == value
        );
        if (selectedOption) {
          score += Number(selectedOption.score);
        }
      });
      this.questionList[index].score = score;
    },
  },
};
@@ -233,7 +299,8 @@
<style lang="scss" scoped>
.questionnaire {
  background-image: url("../assets/images/chainbackground.jpg");
  // background-image: url("../assets/images/chainbackground.jpg");
  background-color: #DDDDDD;
  background-size: cover;
  background-attachment: fixed; /* 保持背景固定 */
  background-position: center;
@@ -252,9 +319,9 @@
  }
}
.preview-left {
  margin: 20px;
  margin: 10px;
  //   margin: 20px;
  padding: 30px;
  padding: 10px;
  // background: #ffff;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
@@ -267,4 +334,18 @@
    }
  }
}
::v-deep.el-alert--warning.is-light {
  background-color: #fbf9f3;
  color: #ffba00;
}
::v-deep {
  .el-alert__title {
    font-size: 18px;
    line-height: 18px;
  }
}
::v-deep.el-radio.el-radio__label {
  font-size: 22px;
  line-height: 2;
}
</style>