WXL (wul)
12 小时以前 e9f35f9782f3d99d742c294fe503fc1294f203c4
src/views/outsideChainnew.vue
@@ -8,7 +8,9 @@
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
                : "亲爱的患者-家属,我们是" +
                  localStorage.getItem("orgname") +
                  "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
            }}
            <!-- 亲爱的患者/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
@@ -20,9 +22,15 @@
          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
              >
@@ -35,7 +43,7 @@
              >
                <el-radio
                  border
                  v-for="(items, index) in item.ivrLibaScriptTargetoptionList"
                  v-for="(items, index) in item.ivrTaskScriptTargetoptionList"
                  :class="
                    items.isabnormal && item.questionResult == items.targetvalue
                      ? 'red-star'
@@ -52,9 +60,15 @@
            </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
              >
@@ -68,7 +82,7 @@
                <el-checkbox
                  border
                  @change="$forceUpdate()"
                  v-for="(items, indexs) in item.ivrLibaScriptTargetoptionList"
                  v-for="(items, indexs) in item.ivrTaskScriptTargetoptionList"
                  :key="indexs"
                  :label="items.targetvalue"
                >
@@ -82,9 +96,15 @@
            </div>
          </div>
          <!-- 填空 -->
          <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 4||item.scriptType == 3">
          <div
            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
              >
@@ -163,12 +183,13 @@
      kcb: "",
      excep: "",
      taskname: "",
      param6: null,
      questionList: [
        // {
        //   scriptType: 1,
        //   scriptContent: "您的年龄范围是?",
        //   questionResult: null,
        //   ivrLibaScriptTargetoptionList: [
        //   ivrTaskScriptTargetoptionList: [
        //     { targetvalue: "18-25", value: "18-25", isabnormal: true },
        //     { targetvalue: "26-35", value: "26-35" },
        //     { targetvalue: "36-45", value: "36-45" },
@@ -181,7 +202,7 @@
        //   scriptType: 1,
        //   scriptContent: "您的职业是什么?",
        //   questionResult: null,
        //   ivrLibaScriptTargetoptionList: [
        //   ivrTaskScriptTargetoptionList: [
        //     { targetvalue: "学生", value: "student" },
        //     { targetvalue: "教师", value: "teacher" },
        //     { targetvalue: "工程师", value: "engineer" },
@@ -194,7 +215,7 @@
        //   scriptType: 2,
        //   scriptContent: "您感兴趣的活动有哪些?",
        //   questionResult: [],
        //   ivrLibaScriptTargetoptionList: [
        //   ivrTaskScriptTargetoptionList: [
        //     { targetvalue: "旅游", value: "travel", isabnormal: true },
        //     { targetvalue: "阅读", value: "reading", isabnormal: true },
        //     { targetvalue: "运动", value: "sports", isabnormal: true },
@@ -207,7 +228,7 @@
        //   scriptType: 1,
        //   scriptContent: "您的职业是什么?",
        //   questionResult: null,
        //   ivrLibaScriptTargetoptionList: [
        //   ivrTaskScriptTargetoptionList: [
        //     { targetvalue: "学生", value: "student" },
        //     { targetvalue: "教师", value: "teacher" },
        //     { targetvalue: "工程师", value: "engineer" },
@@ -220,7 +241,7 @@
        //   scriptType: 1,
        //   scriptContent: "您的职业是什么?",
        //   questionResult: null,
        //   ivrLibaScriptTargetoptionList: [
        //   ivrTaskScriptTargetoptionList: [
        //     { targetvalue: "学生", value: "student" },
        //     { targetvalue: "教师", value: "teacher" },
        //     { targetvalue: "工程师", value: "engineer", isabnormal: true },
@@ -233,7 +254,7 @@
        //   scriptType: 1,
        //   scriptContent: "您的职业是什么?",
        //   questionResult: null,
        //   ivrLibaScriptTargetoptionList: [
        //   ivrTaskScriptTargetoptionList: [
        //     { targetvalue: "学生", value: "student" },
        //     { targetvalue: "教师", value: "teacher" },
        //     { targetvalue: "工程师", value: "engineer" },
@@ -281,17 +302,21 @@
    geturlinfo() {
      // let url = window.location.href;
      let url = this.$route.query.p;
      console.log(445);
      // 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
          );
          this.param6 = res.data.param6;
        }
      });
    },
@@ -320,7 +345,7 @@
      // let taskids = this.encrypt(this.taskid);
      // let patids = this.encrypt(this.patid);
      // 先取缓存
      getCachequestionnaire({ param1: this.taskid, param2: this.patid }).then(
      getCachequestionnaire({ param1: this.taskid, param2: this.patid,param6:this.param6 }).then(
        (res) => {
          if (res.code == 200) {
            this.questionList = res.data;
@@ -345,7 +370,7 @@
    },
    // 获取数据
    getExternalfollowup() {
      getExternalfollowup({ param1: this.taskid, param2: this.patid }).then(
      getExternalfollowup({ param1: this.taskid, param2: this.patid,param6:this.param6 }).then(
        (res) => {
          if (res.code == 200) {
            this.questionList = res.data.script;
@@ -383,10 +408,12 @@
      let form = {
        param1: this.taskid,
        param2: this.patid,
        param6: this.param6,
        excep: this.excep,
        type: this.type,
        serviceSubtaskDetailList: [],
      };
      const arr = structuredClone(this.questionList);
      // arr.forEach((item) => {
      //   item.asrtext = JSON.stringify(item.questionResult);
@@ -408,17 +435,22 @@
    // 缓存
    cache(subm) {
      console.log("进入缓存");
      // 提交场景:先做必填项校验
      if (subm === true && !this.validateRequired()) {
        return;
      }
      let form = {
        param1: this.taskid,
        param2: this.patid,
        param6: this.param6,
        type: this.type,
        ivrLibaTemplateScriptVOList: [],
        ivrTaskTemplateScriptVOList: [],
      };
      const arr = structuredClone(this.questionList);
      console.log(arr, "srr");
      arr.forEach((item, index) => {
        if (item.scriptType == 3||item.scriptType == 4) return;
        var obj = item.ivrLibaScriptTargetoptionList.find(
        if (item.scriptType == 3 || item.scriptType == 4) return;
        var obj = item.ivrTaskScriptTargetoptionList.find(
          (items) => items.targetvalue == item.questionResult
        );
        console.log(obj, "isabnormal");
@@ -437,7 +469,7 @@
          item.questionResult = JSON.stringify(item.questionResult);
        }
      });
      form.ivrLibaTemplateScriptVOList = arr;
      form.ivrTaskTemplateScriptVOList = arr;
      Cachequestionnaire(form).then((res) => {
        if (res.code == 200) {
          if (subm) {
@@ -446,10 +478,49 @@
        }
      });
    },
    // 是否必填(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) {
      // 查找选中的选项对象
      const selectedOption = arr.ivrLibaScriptTargetoptionList.find(
      const selectedOption = arr.ivrTaskScriptTargetoptionList.find(
        (option) => option.targetvalue == selectedvalue
      );
      if (selectedOption) {
@@ -464,7 +535,7 @@
      // ��加分数
      let score = 0;
      selectedvalues.forEach((value) => {
        const selectedOption = arr.ivrLibaScriptTargetoptionList.find(
        const selectedOption = arr.ivrTaskScriptTargetoptionList.find(
          (option) => option.targetvalue == value
        );
        if (selectedOption) {
@@ -596,6 +667,18 @@
}
.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;