WXL
2025-04-30 6be49398a90a339a6c72ac9ea7a09fc368acda87
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -14,7 +14,7 @@
          <el-step>
            <template slot="title">
              <span style="cursor: pointer" @click="Editprogress = 2"
                >问卷题目</span
                >问卷问题</span
              >
            </template>
          </el-step>
@@ -36,10 +36,25 @@
          :model="ruleForm"
          :rules="rules"
          ref="ruleForm"
          label-width="100px"
          label-width="180px"
          class="demo-ruleForm"
        >
          <el-row :gutter="10">
          <el-form-item label="问卷名称" prop="svyname">
            <div style="width: 55vw">
              <el-input v-model="ruleForm.svyname"></el-input>
            </div>
          </el-form-item>
          <el-form-item label="问卷描述" prop="description">
            <el-input
              style="width: 55vw"
              type="textarea"
              :rows="2"
              placeholder="请输入内容"
              v-model="ruleForm.description"
            >
            </el-input
          ></el-form-item>
          <el-row :gutter="20">
            <el-col :span="10">
              <el-form-item label="问卷分类" prop="categoryid">
                <el-select
@@ -64,7 +79,7 @@
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="10">
            <el-col :span="8">
              <el-form-item label="评价类型" prop="scoreType">
                <el-select
                  v-model="ruleForm.scoreType"
@@ -83,8 +98,8 @@
          </el-row>
          <el-row :gutter="20">
            <el-col :span="10">
              <el-form-item label="可用状态" prop="isAvailable">
                <el-radio-group v-model="ruleForm.isAvailable">
              <el-form-item label="可用状态" prop="isenable">
                <el-radio-group v-model="ruleForm.isenable">
                  <el-radio
                    v-for="(item, index) in usable"
                    :label="item.value"
@@ -102,22 +117,27 @@
              </el-form-item>
            </el-col>
          </el-row>
          <el-form-item label="问卷标题" prop="svyname">
            <div style="width: 55vw">
              <el-input v-model="ruleForm.svyname"></el-input>
            </div>
          </el-form-item>
          <el-form-item label="问卷描述" prop="description">
            <el-input
              style="width: 55vw"
              type="textarea"
              :rows="5"
              autosize
              placeholder="请输入内容"
              v-model="ruleForm.description"
            >
            </el-input
          ></el-form-item>
          <!-- <el-row :gutter="20">
            <el-col :span="10">
              <el-form-item label="长期任务" prop="longTemp">
                <el-radio-group v-model="ruleForm.longTemp">
                  <el-radio
                    v-for="(item, index) in longtype"
                    :label="item.value"
                    >{{ item.label }}</el-radio
                  >
                </el-radio-group>
              </el-form-item>
            </el-col>
            <el-col :span="8" v-if="ruleForm.longTemp">
              <el-form-item label="任务周期(几天后)" prop="name">
                <el-input
                  v-model="ruleForm.sendDay"
                  placeholder="默认5天后"
                ></el-input>
              </el-form-item>
            </el-col>
          </el-row> -->
          <el-row>
            <el-form-item prop="dynamicTags">
@@ -230,25 +250,50 @@
          <el-row>
            <el-col :span="20"
              ><el-form-item label="适用科室" prop="region">
                <el-cascader
                  style="width: 55vw"
                <el-select
                  v-model="tempDetpRelevanceslist"
                  :options="deptList"
                  :props="props"
                  :show-all-levels="false"
                  clearable
                  @remove-tag="removetag"
                  style="width: 55vw"
                  size="medium"
                  multiple
                  filterable
                  placeholder="请选择科室"
                >
                  <template slot-scope="{ node, data }">
                    <span>{{ data.deptName }}</span>
                    <span v-if="!node.isLeaf">
                      ({{ data.children.length }})
                    </span>
                  </template>
                </el-cascader>
              </el-form-item></el-col
            >
                  <el-option
                    class="ruleFormaa"
                    v-for="item in flatArray"
                    :key="item.deptCode"
                    :label="item.label"
                    :value="item.deptCode"
                  >
                  </el-option>
                </el-select> </el-form-item
            ></el-col>
          </el-row>
          <el-form-item label="问卷结束语" prop="conclusion">
          <el-row>
            <el-col :span="20"
              ><el-form-item label="适用病区" prop="region">
                <el-select
                  v-model="tempbelongWards"
                  @remove-tag="removehpsp"
                  style="width: 55vw"
                  size="medium"
                  multiple
                  filterable
                  placeholder="请选择病区"
                >
                  <el-option
                    class="ruleFormaa"
                    v-for="item in flatArray"
                    :key="item.deptCode"
                    :label="item.label"
                    :value="item.deptCode"
                  >
                  </el-option>
                </el-select> </el-form-item
            ></el-col>
          </el-row>
          <el-form-item label="结束语" prop="conclusion">
            <el-input
              style="width: 55vw; line-height: 80px"
              type="textarea"
@@ -265,7 +310,7 @@
              >下一步</el-button
            >
            <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
            <el-button @click="Departmenttreatment('ruleForm')"
            <el-button @click="toExamine('ruleForm')"
              >保存问卷基础信息</el-button
            >
          </el-form-item>
@@ -274,14 +319,14 @@
      <!-- 问卷设置 -->
      <div v-if="Editprogress == 2">
        <div class="leftvlue-jbxx">
          问卷题目设置
          问卷问题设置
          <span style=""
            ><el-button
              type="warning"
              icon="el-icon-finished"
              round
              @click="test"
              >题目规则效验</el-button
              >问题规则效验</el-button
            ></span
          >
        </div>
@@ -293,17 +338,17 @@
              icon="el-icon-plus"
              round
              @click="getaddtopiclist"
              >添加题目</el-button
              >添加问题</el-button
            >
            <el-button
              type="success"
              icon="el-icon-edit-outline"
              round
              @click="Operateit = !Operateit"
              >{{ !Operateit ? "编辑题目" : "完整信息展示" }}</el-button
              >{{ !Operateit ? "编辑问题" : "完整信息展示" }}</el-button
            >
          </div>
          <div style="display: flex" v-if="ruleForm.scoreType==1">
          <div style="display: flex" v-if="ruleForm.scoreType == 1">
            <span
              style="
                width: 180px;
@@ -334,7 +379,7 @@
                  width="50"
                />
                <el-table-column
                  label="题目标题"
                  label="问题主题"
                  align="center"
                  key="scriptTopic"
                  prop="scriptTopic"
@@ -356,7 +401,7 @@
                </el-table-column>
                <el-table-column
                  v-if="!Operateit"
                  label="题目内容"
                  label="问题内容"
                  align="center"
                  key="scriptContent"
                  prop="scriptContent"
@@ -390,7 +435,6 @@
                  align="center"
                  key="nextScriptno"
                  prop="nextScriptno"
                  :show-overflow-tooltip="true"
                >
                  <template slot-scope="scope">
                    <span>{{
@@ -445,10 +489,10 @@
                :model="topicobj"
                class="demo-form-inline"
              >
                <div class="headline">题目设置详情</div>
                <div class="headline">问题设置详情</div>
                <el-row :gutter="10">
                  <el-col :span="12">
                    <el-form-item label="题目标题">
                    <el-form-item label="问题主题">
                      <el-input
                        v-model="topicobj.scriptTopic"
                        placeholder="请输入标题"
@@ -463,9 +507,23 @@
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-row :gutter="10">
                  <el-form-item label="问题内容">
                    <el-input
                      style="width: 600px"
                      type="textarea"
                      :rows="2"
                      autosize
                      placeholder="请输入问题内容"
                      v-model="topicobj.scriptContent"
                    >
                    </el-input
                  ></el-form-item>
                </el-row>
                <el-row :gutter="10">
                  <el-col :span="12"
                    ><el-form-item label="题目类型">
                    ><el-form-item label="问题类型">
                      <el-select
                        v-model="topicobj.scriptType"
                        disabled
@@ -484,8 +542,8 @@
                  ></el-col>
                  <el-col :span="12">
                    <el-form-item
                      label="题目分值"
                      v-if="topicobj.scoretype == 1"
                      label="问题分值"
                      v-if="ruleForm.scoreType == 1"
                    >
                      <el-input
                        v-model="topicobj.score"
@@ -509,7 +567,7 @@
                  >
                  <el-col :span="12"
                    ><el-form-item label="是否可用">
                      <el-radio-group v-model="topicobj.isavailable">
                      <el-radio-group v-model="topicobj.isenable">
                        <el-radio
                          v-for="(item, index) in usable"
                          :label="item.value"
@@ -547,8 +605,8 @@
                    v-for="item in topicobj.svyLibTemplateTargetoptions"
                  >
                    <el-row :gutter="5">
                      <el-col :span="16"
                        ><el-form-item label="选项">
                      <el-col :span="12"
                        ><el-form-item label="选项名称">
                          <el-input
                            type="text"
                            placeholder="请输入选项"
@@ -557,9 +615,9 @@
                          >
                          </el-input> </el-form-item
                      ></el-col>
                      <el-col :span="8">
                      <el-col :span="12">
                        <el-form-item
                          v-if="topicobj.scoretype == 1"
                          v-if="ruleForm.scoreType == 1"
                          label="选项分值"
                        >
                          <el-input
@@ -572,17 +630,17 @@
                          </el-input>
                        </el-form-item>
                        <el-form-item
                          v-else-if="topicobj.scoretype == 2"
                          v-else-if="ruleForm.scoreType == 2"
                          label="ABC等级"
                        >
                          <el-radio-group v-model="item.score">
                            <el-radio label="A">A</el-radio>
                            <el-radio label="B">B</el-radio>
                            <el-radio label="C">C</el-radio>
                            <el-radio :label="1">A</el-radio>
                            <el-radio :label="2">B</el-radio>
                            <el-radio :label="3">C</el-radio>
                          </el-radio-group>
                        </el-form-item>
                        <el-form-item
                          v-else-if="topicobj.scoretype == 3"
                          v-else-if="ruleForm.scoreType == 3"
                          label="优良等级"
                        >
                          <el-radio-group v-model="item.score">
@@ -592,6 +650,14 @@
                          </el-radio-group>
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="10">
                      <el-form-item label="异常提醒">
                        <el-radio-group v-model="item.isabnormal">
                          <el-radio :label="1">是</el-radio>
                          <el-radio :label="0">否</el-radio>
                        </el-radio-group>
                      </el-form-item>
                    </el-row>
                    <el-row :gutter="10" v-if="topicobj.branchFlag == 1">
                      <el-col :span="20"
@@ -681,8 +747,8 @@
        >
        <el-button type="primary" @click="laststep()">上一步</el-button>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
        <el-button @click="Departmenttreatment('ruleForm')"
          >保存题目数据</el-button
        <el-button @click="toExamine('ruleForm')"
          >保存问题数据</el-button
        >
      </div>
      <!-- 问卷预览 -->
@@ -753,9 +819,9 @@
        <el-button type="primary" @click="laststep()">上一步</el-button>
      </div>
    </div>
    <!-- 添加题目弹窗 -->
    <!-- 添加问题弹窗 -->
    <el-drawer
      title="添加题目"
      title="添加问题"
      :visible.sync="drawer"
      custom-class="demo-drawer"
      size="50%"
@@ -780,7 +846,7 @@
                    @keyup.enter.native="getaddtopiclist"
                  />
                </el-form-item>
                <el-form-item label="题目类型" prop="scriptTopic">
                <el-form-item label="问题类型" prop="scriptTopic">
                  <el-select
                    v-model="queryParams.scriptType"
                    size="medium"
@@ -873,7 +939,7 @@
                class="demo-form-inline"
              >
                <div class="headline">
                  题目设置详情
                  问题设置详情
                  <span style="margin-left: 30px"
                    ><el-button type="primary" @click="Submittopicobj"
                      >保存新增</el-button
@@ -883,16 +949,27 @@
                <el-divider></el-divider>
                <div>
                  <el-row :gutter="10">
                    <el-col :span="18"
                      ><el-form-item label="问题内容">
                        <el-input
                          style="width: 400px"
                          type="textarea"
                          v-model="indexform.scriptContent"
                          placeholder="请输入问题内容"
                        ></el-input> </el-form-item
                    ></el-col>
                  </el-row>
                  <el-row :gutter="10">
                    <el-col :span="12">
                      <el-form-item label="题目标题">
                      <el-form-item label="问题主题">
                        <el-input
                          v-model="indexform.scriptTopic"
                          placeholder="请输入题目标题"
                          placeholder="请输入问题主题"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :span="12">
                      <el-form-item label="题目得分">
                      <el-form-item label="问题得分">
                        <el-input
                          v-model="indexform.score"
                          placeholder="请输入分数"
@@ -904,7 +981,7 @@
                    <el-col :span="12">
                      <el-form-item label="评价类型">
                        <el-select
                          v-model="indexform.scoretype"
                          v-model="indexform.scoreType"
                          placeholder="请选择分类"
                        >
                          <el-option
@@ -940,7 +1017,7 @@
                  <el-row :gutter="10">
                    <el-col :span="12">
                      <el-form-item label="是否可用">
                        <el-radio-group v-model="indexform.isAvailable">
                        <el-radio-group v-model="indexform.isenable">
                          <el-radio
                            v-for="(item, index) in usable"
                            :label="item.value"
@@ -961,21 +1038,13 @@
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <el-row :gutter="10">
                    <el-col :span="18"
                      ><el-form-item label="题目内容">
                        <el-input
                          style="width: 400px"
                          type="textarea"
                          v-model="indexform.scriptContent"
                          placeholder="请从左侧列表选择"
                        ></el-input> </el-form-item
                    ></el-col>
                  </el-row>
                </div>
                <div>
                  <el-form-item label="指标名称" prop="deptId">
                    <el-input
                      style="width: 250px"
                      type="textarea"
                      :rows="2"
                      v-model="indexform.targetname"
                      placeholder="请输入指标名称"
                      maxlength="20"
@@ -983,6 +1052,9 @@
                  </el-form-item>
                  <el-form-item label="指标描述" prop="deptId">
                    <el-input
                      style="width: 250px"
                      type="textarea"
                      :rows="2"
                      v-model="indexform.targetdesc"
                      placeholder="请输入指标描述"
                      maxlength="60"
@@ -991,7 +1063,7 @@
                  <el-row>
                    <el-col :span="20">
                      <el-form-item label="值类型">
                      <el-form-item label="结果类型">
                        <el-radio-group v-model="indexform.valueType">
                          <el-radio :label="1">选项</el-radio>
                          <el-radio :label="2">文本</el-radio>
@@ -1002,7 +1074,7 @@
                  </el-row>
                  <el-row>
                    <el-col :span="20">
                      <el-form-item label="题目类型">
                      <el-form-item label="问题类型">
                        <el-radio-group v-model="indexform.scriptType">
                          <el-radio :label="1">单选</el-radio>
                          <el-radio :label="2">多选</el-radio>
@@ -1048,6 +1120,7 @@
                      <el-col :span="11"
                        ><el-form-item label="选项名称">
                          <el-input
                            style="width: 400px"
                            type="text"
                            placeholder="请输入选项分值"
                            v-model="item.optioncontent"
@@ -1057,7 +1130,7 @@
                      ></el-col>
                      <el-col :span="11">
                        <el-form-item
                          v-if="indexform.scoretype == 1"
                          v-if="indexform.scoreType == 1"
                          label="分值"
                        >
                          <el-input
@@ -1069,17 +1142,17 @@
                          </el-input>
                        </el-form-item>
                        <el-form-item
                          v-else-if="indexform.scoretype == 2"
                          v-else-if="indexform.scoreType == 2"
                          label="ABC等级"
                        >
                          <el-radio-group v-model="item.score">
                            <el-radio label="A">A</el-radio>
                            <el-radio label="B">B</el-radio>
                            <el-radio label="C">C</el-radio>
                            <el-radio :label="1">A</el-radio>
                            <el-radio :label="2">B</el-radio>
                            <el-radio :label="3">C</el-radio>
                          </el-radio-group>
                        </el-form-item>
                        <el-form-item
                          v-else-if="indexform.scoretype == 3"
                          v-else-if="indexform.scoreType == 3"
                          label="优良等级"
                        >
                          <el-radio-group v-model="item.score">
@@ -1092,7 +1165,7 @@
                      <el-col
                        :span="2"
                        :offsset="indexform.scoretype == 4 ? 11 : 0"
                        :offsset="indexform.scoreType == 4 ? 11 : 0"
                      >
                        <el-button
                          type="danger"
@@ -1103,7 +1176,7 @@
                      </el-col>
                    </el-row>
                    <el-row :gutter="10">
                      <el-form-item label="预警提醒">
                      <el-form-item label="异常提醒">
                        <el-radio-group v-model="item.isabnormal">
                          <el-radio :label="1">是</el-radio>
                          <el-radio :label="0">否</el-radio>
@@ -1170,8 +1243,8 @@
import store from "@/store";
import {
  getQtemplateclassify,
  delQtemplateclassify,
  addQtemplateclassify,
  depthospgetson,
  depthospgetsonlist,
  getQtemplateobj,
  compileQtemplate,
  Qtemplateinfo,
@@ -1180,6 +1253,7 @@
  Followupinfo,
  issueinfo,
  getissuelist,
  depthospgetsondel,
  deltargetillness,
  addtargetillness,
  getillnesslist,
@@ -1188,6 +1262,7 @@
} from "@/api/AiCentre/index";
import OptionalForm from "@/components/OptionalForm"; //正则组件
import { getToken } from "@/utils/auth";
import { deptTreeSelect } from "@/api/system/user";
export default {
  name: "Questionnaireinfo",
@@ -1221,7 +1296,9 @@
        tempDetpRelevances: [],
        svyLibTemplateTagList: [],
        scoreType: "4",
        isAvailable: "0",
        isenable: "0",
        longTemp: "0",
        sendDay: "5",
      },
      indexform: {
        svyLibTemplateTargetoptions: [],
@@ -1235,19 +1312,19 @@
          { required: true, message: "评价类型不能为空", trigger: "blur" },
        ],
        svyname: [
          { required: true, message: "问卷标题不能为空", trigger: "blur" },
          { required: true, message: "问卷名称不能为空", trigger: "blur" },
        ],
        isAvailable: [
        isenable: [
          { required: true, message: "可用状态不能为空", trigger: "blur" },
        ],
        scriptTopic: [
          { required: true, message: "题目标题不能为空", trigger: "blur" },
          { required: true, message: "问题主题不能为空", trigger: "blur" },
        ],
        ismandatory: [
          { required: true, message: "是否必填不能为空", trigger: "blur" },
        ],
        scriptType: [
          { required: true, message: "题目类型不能为空", trigger: "blur" },
          { required: true, message: "问题类型不能为空", trigger: "blur" },
        ],
        suitway: [
          { required: true, message: "问卷方式不能为空", trigger: "blur" },
@@ -1290,8 +1367,8 @@
          sdadd: ["sss", "ssccss", "ssaas", "ss"],
        },
      ],
      addvalue: "添加题目",
      // 题目表格数据
      addvalue: "添加问题",
      // 问题表格数据
      userList: [],
      deptList: [],
      props: { multiple: true, value: "deptId", label: "deptName" },
@@ -1306,17 +1383,27 @@
      illnessVisible: false, //指标疾病弹框
      Operateit: true,
      deptOptions: [],
      flatArray: [],
      optionsillness: [],
      delScriptVOList: [],
      illnesslistapi: [],
      illnesslist: [],
      tempDetpRelevanceslist: [],
      tempDetpRelevanceslist: [], //科室数据
      tempDetpRelevanceslistform: [], //科室数据
      tempbelongWards: [], //病区数据
      tempbelongWardsform: [], //病区数据
      optionstag: [],
      valuetype: [],
      qremark: [],
      hosplist: [],
      deptlist: [],
      usable: [
        { value: "0", label: "可用" },
        { value: "1", label: "停用" },
      ],
      longtype: [
        { value: "0", label: "普通任务" },
        { value: "1", label: "长期任务" },
      ],
      required: [
        { value: "1", label: "必填" },
@@ -1328,29 +1415,15 @@
        pageNum: 1,
        pageSize: 10,
      },
      arr: [
        [
          { id: 1, grade: "5" },
          { id: 2, grade: "5" },
          { id: 3, grade: "5" },
          { id: 4, grade: "5" },
        ],
        [
          { id: 1, grade: "5" },
          { id: 3, grade: "5" },
          { id: 4, grade: "5" },
        ],
        [
          { id: 1, grade: "5" },
          { id: 2, grade: "5" },
          { id: 4, grade: "5" },
        ],
      ],
      belongWards: [],
      belongDepts: [],
      queryParamsdept: {
        tempid: "",
        type: 1,
      },
    };
  },
  activated() {
    console.log(this.id);
    if (this.id != this.$route.query.id) {
      this.getissueinfo();
      this.gettabList();
@@ -1363,14 +1436,18 @@
        this.ruleForm.svyLibTemplateTagList.filter(
          (item) => item.isoperation != 3
        );
      if (this.ruleForm.suitway)
        this.ruleForm.suitway = this.ruleForm.suitway.split(",");
      this.delScriptVOList = [];
      this.tempDetpRelevanceslistform = [];
      this.tempbelongWardsform = [];
      this.$forceUpdate();
      console.log(this.ruleForm.svyTemplateLibScripts);
    }
  },
  created() {
    this.getissueinfo();
    this.gettabList();
    this.getDeptTree();
    this.mode = store.getters.Askmode;
    this.languagelist = store.getters.languagelist;
    this.usable = store.getters.usable;
@@ -1379,6 +1456,8 @@
    this.courtyardlist = store.getters.courtyardlist;
    this.askvaluetype = store.getters.askvaluetype;
    this.appraiselist = store.getters.appraiselist;
    this.belongWards = store.getters.belongWards;
    this.belongDepts = store.getters.belongDepts;
    // this.test();
  },
@@ -1396,7 +1475,6 @@
      return this.illnesslist.length - 10;
    },
  },
  methods: {
    // 公共方法---------------
    getIndexInArray(arr, obj) {
@@ -1423,14 +1501,17 @@
    // 获取数据
    getissueinfo() {
      this.id = this.$route.query.id;
      (this.ruleForm = {
      this.queryParamsdept.tempid = this.id;
      this.ruleForm = {
        svyTemplateLibScripts: [],
        tempDetpRelevances: [],
        svyLibTemplateTagList: [],
        scoreType: "4",
        isAvailable: "0",
      }),
        (this.topicobj = {});
        isenable: "0",
        longTemp: "0",
        sendDay: "5",
      };
      this.topicobj = {};
      if (this.id) {
        getQtemplateobj({ svyid: this.id }).then((res) => {
@@ -1438,8 +1519,9 @@
          this.dynamicTags = this.ruleForm.svyLibTemplateTagList.map(
            this.processElement
          );
          this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
          this.ruleForm.suitway = this.ruleForm.suitway.split(",");
          console.log(this.dynamicTags, "this.dynamicTags");
          if (this.ruleForm.suitway)
            this.ruleForm.suitway = this.ruleForm.suitway.split(",");
        });
        getillness({ outid: this.id, type: 5 }).then((res) => {
          this.illnesslist = res.rows;
@@ -1451,13 +1533,55 @@
        this.ruleForm.isenable = "1";
      }
      listDept(this.queryParams).then((response) => {
        this.deptList = this.handleTree(response.data, "deptId");
      });
      // 分类
      getQtemplateclassify({}).then((res) => {
        this.optionsclass = res.rows;
      });
      this.tempDetpRelevanceslist = [];
      this.tempbelongWards = [];
      if (this.queryParamsdept.tempid) {
        depthospgetsonlist(this.queryParamsdept).then((res) => {
          if (res.code == 200) {
            let arr = res.rows;
            arr.forEach((item) => {
              if (item.deptType == 1) {
                this.deptlist.push(item);
                this.tempDetpRelevanceslist.push(item.deptCode);
              } else if (item.deptType == 2) {
                this.hosplist.push(item);
                this.tempbelongWards.push(item.deptCode);
              }
            });
          }
        });
      }
    },
    // 获取科室树
    getDeptTree() {
      // 科室列表
      deptTreeSelect().then((response) => {
        this.deptOptions = response.data;
        this.flatArray = this.flattenArray(response.data);
      });
    },
    flattenArray(multiArray) {
      let result = [];
      // 递归函数,用于将多级数组转换为一维数组,只包含最底层的元素
      function flatten(element) {
        // 如果当前元素有子元素,继续递归
        if (element.children && element.children.length > 0) {
          element.children.forEach((child) => flatten(child));
        } else {
          // 克隆元素以避免修改原始数据
          let item = JSON.parse(JSON.stringify(element));
          result.push(item); // 将最底层的元素添加到结果数组
        }
      }
      // 从顶层元素开始递归
      multiArray.forEach((element) => flatten(element));
      return result; // 返回只包含最底层元素的一维数组
    },
    submitForm(formName) {
      this.$modal.loading("正在修正保存数据,请稍候...");
@@ -1467,59 +1591,148 @@
      if (!this.ruleForm.categoryid) {
        this.ruleForm.categoryid = -1;
      }
      // 题目保存处理
      //   提交
      this.ruleForm.svyTemplateLibScripts.forEach((res) => {
        if (!res.isoperation) {
          res.isoperation = 2;
        }
        res.ivrLibaScriptTargetoptionList = res.svyLibTemplateTargetoptions.map(
          (item) => {
            if (!item.isoperation) {
              item.isoperation = 2;
              item.templateID = this.ruleForm.id;
            }
            return item;
          }
        );
      });
      this.delScriptVOList.forEach((item) => {
        this.ruleForm.svyTemplateLibScripts.push(item);
      });
      if (this.id) {
        this.ruleForm.isoperation = 2;
        this.ruleForm.tempDetpRelevances = null;
        compileQtemplate(this.ruleForm).then((res) => {
          this.$modal.msgSuccess("修改成功");
          this.confirmillness();
          this.putbelongDepts();
          this.$modal.closeLoading();
          this.$router.go(-1);
          // this.$router.go(-1);
          window.location.reload();
        });
      } else {
        this.ruleForm.isoperation = 1;
        this.ruleForm.version = this.ruleForm.version
          ? this.ruleForm.version
          : "1.0";
        this.ruleForm.tempDetpRelevances = null;
        compileQtemplate(this.ruleForm).then((res) => {
          this.$modal.msgSuccess("新增成功");
          this.confirmillness(res.data);
          this.putbelongDepts(res.data);
          this.$modal.closeLoading();
          this.$router.go(-1);
        });
      }
    },
    // 科室处理
    // 题目校验
    toExamine() {
      // 遍历题目集合
      for (let i = 0; i <  this.ruleForm.svyTemplateLibScripts.length; i++) {
        const question =  this.ruleForm.svyTemplateLibScripts[i];
        // 如果 scriptType 为 4,则跳过当前题目
        if (question.scriptType === 4) {
          continue;
        }
        // 获取当前题目的选项集合
        const options = question.svyLibTemplateTargetoptions;
        // 创建一个 Set 来存储选项名称,用于检测重复
        const optionNames = new Set();
        // 遍历选项集合
        for (let j = 0; j < options.length; j++) {
          const option = options[j];
          const optionContent = option.optioncontent;
          // 如果选项名称已经存在于 Set 中,说明重复
          if (optionNames.has(optionContent)) {
            this.$message.error(
              `题目 ${question.id} 的选项名称 "${optionContent}" 重复`
            );
            return false; // 返回 false 表示校验失败
          }
          // 将选项名称添加到 Set 中
          optionNames.add(optionContent);
        }
      }
      // 如果所有题目都校验通过,返回 true
      console.log("所有题目校验通过,选项名称无重复");
       this.Departmenttreatment();
    },
    // 科室/院区处理
    Departmenttreatment() {
      this.ruleForm.deptNames = JSON.stringify(this.tempDetpRelevanceslist);
      this.ruleForm.svyTemplateLibScripts =
        this.ruleForm.svyTemplateLibScripts.concat(this.delScriptVOList);
      const result = this.tempDetpRelevanceslist.map(
        (subArr) => subArr[subArr.length - 1]
      );
      // id数组查数组对象
      result.forEach((item) => {
        const condition = this.ruleForm.tempDetpRelevances.some(
          (obj) => obj.deptId === item
        );
        if (!condition) {
          listDept({ deptId: item }).then((res) => {
            console.log(res.data[0]);
            res.data[0].type = 2;
            this.ruleForm.tempDetpRelevances.push(res.data[0]);
      this.tempDetpRelevanceslist.forEach((item) => {
        console.log(item);
        let result = this.deptlist.some((obj) => obj.deptCode == item);
        console.log(this.result, "result");
        if (!result) {
          this.tempDetpRelevanceslistform.push({
            deptType: 1,
            longTemp: this.ruleForm.longTemp,
            deptCode: item,
            tempid: this.id,
            type: 1,
          });
        }
      });
      // 数组对象查id数组
      this.ruleForm.tempDetpRelevances.forEach((item) => {
        const condition = result.some((obj) => obj === item.deptId);
        if (!condition) {
          const index = this.ruleForm.tempDetpRelevances.indexOf(item);
          this.ruleForm.tempDetpRelevances[index].delFlag = 1;
      this.tempbelongWards.forEach((item) => {
        let result = this.hosplist.some((obj) => obj.deptCode == item);
        if (!result) {
          this.tempbelongWardsform.push({
            deptType: 2,
            longTemp: this.ruleForm.longTemp,
            deptCode: item,
            tempid: this.id,
            type: 1,
          });
        }
      });
      // return
      setTimeout(() => {
        this.submitForm();
      }, 1000);
      }, 500);
    },
    // 科室删除触发
    removetag(row) {
      let result = this.deptlist
        .filter((item) => item.deptCode == row)
        .map((item) => item.id);
      console.log(result.length);
      if (result.length) {
        depthospgetsondel(result).then((res) => {
          if (res.code) {
          }
        });
      }
    },
    // 删除删除触发
    removehpsp(row) {
      let result = this.hosplist
        .filter((item) => item.deptCode == row)
        .map((item) => item.id);
      if (result.length) {
        depthospgetsondel(result).then((res) => {
          if (res.code) {
          }
        });
      }
    },
    // 下一步
    nextstep() {
@@ -1548,10 +1761,10 @@
          });
        });
    },
    // 获取题目列表
    // 获取问题列表
    getaddtopiclist() {
      this.drawer = true;
      this.queryParams.scoretype = this.ruleForm.scoreType;
      this.queryParams.scoreType = this.ruleForm.scoreType;
      getissuelist(this.queryParams).then((res) => {
        this.loading = false;
        this.userList = res.rows;
@@ -1559,7 +1772,7 @@
        console.log(this.userList);
      });
    },
    // 新增题目
    // 新增问题
    addtopic(row) {
      row.isoperation = 1;
      row.svyLibScriptOptions.forEach((item) => {
@@ -1618,7 +1831,7 @@
      console.log(this.ruleForm.svyTemplateLibScripts);
    },
    // 修改题目信息
    // 修改问题信息
    Submittopicobj() {
      this.$modal
        .confirm(
@@ -1634,7 +1847,7 @@
          this.drawer = false;
          this.sortFn();
          this.$modal.msgSuccess("题目新增成功,保存模板失效");
          this.$modal.msgSuccess("问题新增成功,保存模板失效");
        });
    },
    // 新增变量
@@ -1738,6 +1951,30 @@
      this.illnessVisible = false;
      this.$modal.msgSuccess("编辑成功");
    },
    // 保存科室/病区
    putbelongDepts(id) {
      this.tempDetpRelevanceslistform.forEach((item) => {
        if (!item.tempid) item.tempid = id;
      });
      this.tempbelongWardsform.forEach((item) => {
        if (!item.tempid) item.tempid = id;
      });
      if (this.tempDetpRelevanceslistform.length > 0) {
        depthospgetson(this.tempDetpRelevanceslistform).then((res) => {
          if (res.code == 200) {
            this.$modal.msgSuccess("科室新增成功");
          }
        });
      }
      if (this.tempbelongWardsform.length > 0) {
        depthospgetson(this.tempbelongWardsform).then((res) => {
          if (res.code == 200) {
            this.$modal.msgSuccess("院区新增成功");
          }
        });
      }
    },
    resetQuery() {
      this.queryParams = { pageNum: 1, pageSize: 10 };
      this.getaddtopiclist();
@@ -1888,7 +2125,7 @@
    sumArray(arr) {
      // const arrsum = arr;
      // arrsum.forEach((item) => {
      //   // 判断题目和模板层级
      //   // 判断问题和模板层级
      //   console.log(item, "一条链路");
      //   const totalScore = item.reduce((accumulator, current) => {
@@ -1915,7 +2152,7 @@
      if (allGreaterThanTen) {
        this.$modal.msgSuccess("分值校验成功");
      } else {
        this.$modal.msgError("题目分值累加和模板分值不符");
        this.$modal.msgError("问题分值累加和模板分值不符");
      }
    },
@@ -1929,9 +2166,9 @@
        );
        if (notInB.length) {
          this.$modal.msgError("题目未全部使用");
          this.$modal.msgError("问题未全部使用");
        } else {
          this.$modal.msgSuccess("题目全部使用");
          this.$modal.msgSuccess("问题全部使用");
        }
      });
      arr.forEach((item) => {
@@ -1940,10 +2177,10 @@
          return acc;
        }, {});
        const whether = item.values(idCount).some((count) => count > 1); // 如果有任何 id 的计数大于 1 就返回 true
        if (!whether) this.$modal.msgError("配置项有题目重复");
        if (!whether) this.$modal.msgError("配置项有问题重复");
      });
    },
    // 题目和选项间的分值判断
    // 问题和选项间的分值判断
    Scorejudgment() {
      let scorearr = this.topicobj.svyLibScriptOptions;
      let isValid = scorearr.every((score, index) => {