WXL
2024-08-05 ad0ecacbc73d16c9b95b79ac3c82868cbff33e44
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -2,14 +2,27 @@
  <div class="Questionnairemanagement">
    <!-- 左侧栏 -->
    <div class="sidecolumn">
      <div style="height: 400px">
        <el-steps direction="vertical" :active="Editprogress">
          <el-step title="基础信息"></el-step>
          <el-step title="问卷题目"></el-step>
          <el-step
            title="问卷预览"
            description="查看问卷预览,可导出PDF"
          ></el-step>
      <div>
        <el-steps finish-status="success" :active="Editprogress" simple>
          <el-step>
            <template slot="title">
              <span style="cursor: pointer" @click="Editprogress = 1"
                >基础信息</span
              >
            </template>
          </el-step>
          <el-step>
            <template slot="title">
              <span style="cursor: pointer" @click="Editprogress = 2"
                >问卷题目</span
              >
            </template>
          </el-step>
          <el-step description="查看问卷预览,可导出PDF">
            <span slot="title" style="cursor: pointer" @click="Editprogress = 3"
              >问卷预览</span
            >
          </el-step>
        </el-steps>
      </div>
    </div>
@@ -26,28 +39,48 @@
          label-width="100px"
          class="demo-ruleForm"
        >
          <el-form-item label="问卷分类" prop="region">
            <el-select
              v-model="ruleForm.categoryid"
              size="medium"
              filterable
              placeholder="请选择分类"
            >
              <el-option-group
                v-for="group in optionsclass"
                :key="group.id"
                :label="group.name"
              >
                <el-option
                  v-for="item in group.svyLibTitleCategoryList"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
          <el-row :gutter="10">
            <el-col :span="10">
              <el-form-item label="问卷分类" prop="region">
                <el-select
                  v-model="ruleForm.categoryid"
                  size="medium"
                  filterable
                  placeholder="请选择分类"
                >
                </el-option>
              </el-option-group>
            </el-select>
          </el-form-item>
                  <el-option-group
                    v-for="group in optionsclass"
                    :key="group.id"
                    :label="group.name"
                  >
                    <el-option
                      v-for="item in group.svyLibTemplateCategoryList"
                      :key="item.id"
                      :label="item.name"
                      :value="item.id"
                    >
                    </el-option>
                  </el-option-group>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="10">
              <el-form-item label="评价类型">
                <el-select
                  v-model="ruleForm.scoreType"
                  placeholder="请选择分类"
                >
                  <el-option
                    v-for="group in appraiselist"
                    :key="group.value"
                    :label="group.label"
                    :value="group.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-form-item label="问卷标题" prop="name">
            <div style="width: 30%">
              <el-input v-model="ruleForm.svyname"></el-input>
@@ -64,33 +97,18 @@
            </el-input
          ></el-form-item>
          <el-form-item label="文件" prop="sickness">
            <div style="width: 40%">
              <el-upload
                class="upload-demo"
                action="https://jsonplaceholder.typicode.com/posts/"
                :on-change="handleChange"
                :file-list="fileList"
              >
                <el-button size="small" type="primary">点击上传</el-button>
                <div slot="tip" class="el-upload__tip">
                  只能上传jpg/png/xsl文件,且不超过50mb
                </div>
              </el-upload>
            </div>
          </el-form-item>
          <el-row>
            <el-form-item label="标签" prop="desc">
              <div class="xinz-inf">
                <el-tag
                  :key="tag"
                  :key="tag.tagname"
                  type="success"
                  v-for="tag in dynamicTags"
                  closable
                  :disable-transitions="false"
                  @close="handleClosetag(tag)"
                >
                  {{ tag }}
                  {{ tag.tagname }}
                </el-tag>
                <el-select
                  v-model="inputValue"
@@ -98,6 +116,7 @@
                  @change="handleInputConfirm"
                  filterable
                  remote
                  allow-create
                  reserve-keyword
                  default-first-option
                  :remote-method="remoteMethodtag"
@@ -122,49 +141,24 @@
              </div>
            </el-form-item>
          </el-row>
          <el-row>
          <div class="xinz-infs">
            <el-form-item label="适用疾病" prop="region">
              <div class="xinz-inf">
                <el-tag
                  :key="item.icd10name"
                  type="warning"
                  v-for="item in illnesslist"
                  closable
                  :disable-transitions="false"
                  @close="handleCloseillness(item)"
                >
                  {{ item.icd10name }}
                </el-tag>
                <el-select
                  v-model="inputValueillness"
                  v-if="inputVisibleillness"
                  @change="illnessConfirm"
                  :remote-method="remoteMethod"
                  filterable
                  remote
                  allow-create
                  default-first-option
                  placeholder="请选择/查询"
                  :loading="loading"
                >
                  <el-option
                    v-for="item in optionsillness"
                    :key="item.icdid"
                    :label="item.icdname"
                    :value="item.icdid"
                  >
                  </el-option>
                </el-select>
                <el-button
                  v-else
                  class="button-new-tag"
                  size="small"
                  @click="inputVisibleillness = true"
                  >+ 新增疾病</el-button
                >
              </div>
              <el-tag
                v-for="tag in displayedTags"
                :key="tag.icdid"
                type="warning"
                :disable-transitions="false"
              >
                {{ tag.icdname }}
              </el-tag>
              <el-tag v-if="hasMore" type="info">+{{ remaining }} more</el-tag>
            </el-form-item>
          </el-row>
          </div>
          <div style="margin-left: 120px; margin-bottom: 10px">
            <el-button type="warning" @click="$refs.child.handleAddpatient()"
              >疾病详情</el-button
            >
          </div>
          <el-row :gutter="20">
            <el-col :span="6">
              <el-form-item label="版本号" prop="name">
@@ -254,41 +248,115 @@
      <div v-if="Editprogress == 2">
        <div class="leftvlue-jbxx">问卷题目设置</div>
        <el-divider></el-divider>
        <div class="addtopic">
          <el-button
            type="primary"
            icon="el-icon-plus"
            round
            @click="getaddtopiclist"
            >添加题目</el-button
          >
        <div style="display: flex; justify-content: space-between">
          <div>
            <el-button
              type="primary"
              icon="el-icon-plus"
              round
              @click="getaddtopiclist"
              >添加题目</el-button
            >
            <el-button
              type="success"
              icon="el-icon-edit-outline"
              round
              @click="Operateit = !Operateit"
              >{{ !Operateit ? "编辑题目" : "完整信息展示" }}</el-button
            >
          </div>
          <div style="display: flex">
            <span
              style="
                width: 180px;
                font-size: 20px;
                font-weight: normal;
                color: red;
              "
              >问卷总分:</span
            >
            <el-input
              v-model="ruleForm.scriptScore"
              placeholder="请输入分数"
            ></el-input>
          </div>
        </div>
        <div class="presentation">
          <div class="presentation-left">
          <div :class="Operateit ? 'presentation-left' : 'spresentation-left'">
            <el-card class="box-card" style="min-height: 688px">
              <el-table v-loading="loading" :data="ruleForm.svyLibTopics">
              <el-table
                v-loading="loading"
                :data="ruleForm.svyTemplateLibScripts"
              >
                <el-table-column
                  label="序号"
                  align="center"
                  key="guid"
                  prop="guid"
                  key="sort"
                  prop="sort"
                  width="50"
                />
                <el-table-column
                  label="题目"
                  label="题目标题"
                  align="center"
                  key="topic"
                  prop="topic"
                  key="scriptTopic"
                  prop="scriptTopic"
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  label="主要内容"
                  label="题型"
                  align="center"
                  key="topicContent"
                  prop="topicContent"
                  key="scriptType"
                  prop="scriptType"
                  :show-overflow-tooltip="true"
                >
                  <template slot-scope="scope">
                    <dict-tag
                      :options="askvaluetype"
                      :value="scope.row.scriptType"
                    />
                  </template>
                </el-table-column>
                <el-table-column
                  v-if="!Operateit"
                  label="题目内容"
                  align="center"
                  key="scriptContent"
                  prop="scriptContent"
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  v-if="!Operateit"
                  label="指标名称"
                  align="center"
                  key="targetname"
                  prop="targetname"
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  v-if="!Operateit"
                  label="是否必填"
                  align="center"
                  key="ismandatory"
                  prop="ismandatory"
                  :show-overflow-tooltip="true"
                >
                  <template slot-scope="scope">
                    <dict-tag
                      :options="required"
                      :value="scope.row.ismandatory"
                    />
                  </template>
                </el-table-column>
                <el-table-column
                  label="下题跳转"
                  align="center"
                  key="nextScriptno"
                  prop="nextScriptno"
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  v-if="Operateit"
                  label="操作"
                  align="center"
                  width="250"
@@ -324,27 +392,32 @@
              </el-table>
            </el-card>
          </div>
          <div class="presentation-right">
          <div class="presentation-right" v-if="Operateit">
            <el-card class="box-card">
              <el-form
                :inline="true"
                :model="topicobj"
                class="demo-form-inline"
              >
                <div class="headline">
                  题目设置详情
                  <span style="margin-left: 30px"
                    ><el-button type="primary" @click="Submittopicobj"
                      >保存</el-button
                    ></span
                  >
                </div>
                <el-form-item label="题目标题">
                  <el-input
                    v-model="topicobj.topic"
                    placeholder="请输入标题"
                  ></el-input>
                </el-form-item>
                <div class="headline">题目设置详情</div>
                <el-row :gutter="10">
                  <el-col :span="12">
                    <el-form-item label="题目标题">
                      <el-input
                        v-model="topicobj.scriptTopic"
                        placeholder="请输入标题"
                      ></el-input> </el-form-item
                  ></el-col>
                  <el-col :span="12">
                    <el-form-item label="下题跳转" v-if="!topicobj.branchFlag">
                      <el-input
                        v-model="topicobj.nextScriptno"
                        placeholder="请输入题号"
                      ></el-input>
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-row :gutter="10">
                  <el-col :span="12"
                    ><el-form-item label="是否必填">
@@ -377,75 +450,142 @@
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <div class="headline">选项设置</div>
                <div
                  class="topicxq"
                  v-for="item in topicobj.svyLibTopicoptions"
                >
                  <el-row :gutter="10">
                    <el-col :span="11"
                      ><el-form-item label="题号">
                        <el-input
                          type="text"
                          placeholder="请输入"
                          v-model="item.topicid"
                          show-word-limit
                        >
                        </el-input> </el-form-item
                    ></el-col>
                    <el-col :span="11"
                      ><el-form-item label="分值">
                        <el-input
                          type="text"
                          placeholder="请输入"
                          v-model="item.score"
                          show-word-limit
                        >
                        </el-input> </el-form-item
                    ></el-col>
                  </el-row>
                  <el-row :gutter="10">
                    <el-col :span="11"
                      ><el-form-item label="选项">
                        <el-input
                          type="text"
                          placeholder="请输入选项"
                          v-model="item.optioncontent"
                          show-word-limit
                        >
                        </el-input> </el-form-item
                    ></el-col>
                    <el-col :span="11"
                      ><el-form-item label="下题跳转">
                        <el-input
                          type="text"
                          placeholder="请输入题号"
                          v-model="item.jump"
                          show-word-limit
                        >
                        </el-input> </el-form-item
                    ></el-col>
                    <el-col :span="2">
                      <el-button
                        type="danger"
                        icon="el-icon-delete"
                        circle
                        @click="deletexuanx(item)"
                      ></el-button>
                    </el-col>
                  </el-row>
                  <el-row :gutter="10">
                    <el-form-item label="选中提示">
                <el-row>
                  <el-col :span="12">
                    <el-form-item
                      label="题目分值"
                      v-if="topicobj.scoretype == 1"
                    >
                      <el-input
                        style="width: 20vw"
                        type="textarea"
                        autosize
                        placeholder="请输入内容"
                        v-model="item.prompt"
                        v-model="topicobj.score"
                        placeholder="请输入题号"
                      ></el-input>
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-form-item label="是否由选项配置跳转">
                  <el-radio-group v-model="topicobj.branchFlag">
                    <el-radio :label="1">是</el-radio>
                    <el-radio :label="0">否</el-radio>
                  </el-radio-group>
                </el-form-item>
                <div v-if="topicobj.scriptType != 3">
                  <div class="headline">选项设置</div>
                  <div
                    class="topicxq"
                    v-for="item in topicobj.svyLibTemplateTargetoptions"
                  >
                    <el-row :gutter="5">
                      <el-col :span="16"
                        ><el-form-item label="选项">
                          <el-input
                            type="text"
                            placeholder="请输入选项"
                            v-model="item.optioncontent"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                      <el-col :span="8">
                        <el-form-item
                          v-if="topicobj.scoretype == 1"
                          label="分值"
                        >
                          <el-input
                            class="custom-width"
                            type="text"
                            placeholder="请输入选项分值"
                            v-model="item.score"
                            show-word-limit
                          >
                          </el-input>
                        </el-form-item>
                        <el-form-item
                          v-else-if="topicobj.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-group>
                        </el-form-item>
                        <el-form-item
                          v-else-if="topicobj.scoretype == 3"
                          label="优良等级"
                        >
                          <el-radio-group v-model="item.score">
                            <el-radio label="优">优</el-radio>
                            <el-radio label="良">良</el-radio>
                            <el-radio label="差">差</el-radio>
                          </el-radio-group>
                        </el-form-item>
                      </el-col>
                    </el-row>
                    <el-row :gutter="10">
                      <el-col :span="20"
                        ><el-form-item label="下题跳转(序号)">
                          <el-input
                            type="text"
                            placeholder="请输入题号"
                            v-model="item.nextQuestion"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <el-row :gutter="10">
                      <el-form-item label="选中提示">
                        <el-input
                          style="width: 20vw"
                          type="textarea"
                          autosize
                          placeholder="请输入内容"
                          v-model="item.prompt"
                        >
                        </el-input
                      ></el-form-item>
                    </el-row>
                    <el-row :gutter="10">
                      <el-form-item label="选项文件" prop="sickness">
                        <div style="width: 40vw">
                          <div style="margin: 20px">
                            <el-image
                              style="width: 100px; height: 100px"
                              :src="item.picturePath"
                              :preview-src-list="[...item.picturePath]"
                            >
                            </el-image>
                          </div>
                        </div>
                      </el-form-item>
                    </el-row>
                  </div>
                </div>
                <div v-else>
                  <div class="topicxq">
                    <el-row :gutter="10">
                      <el-form-item label="答案">
                        <el-input
                          style="width: 20vw"
                          type="textarea"
                          autosize
                          placeholder="此处放置患者回答"
                          v-model="topicobj.reply"
                        >
                        </el-input
                      ></el-form-item>
                    </el-row>
                    <el-form-item label="分值">
                      <el-input
                        type="text"
                        placeholder="请输入选项分值"
                        v-model="topicobj.score"
                        show-word-limit
                      >
                      </el-input
                    ></el-form-item>
                  </el-row>
                      </el-input>
                    </el-form-item>
                  </div>
                </div>
              </el-form>
            </el-card>
@@ -457,7 +597,9 @@
        >
        <el-button type="primary" @click="laststep()">上一步</el-button>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
        <el-button @click="submitForm('ruleForm')">保存题目数据</el-button>
        <el-button @click="Departmenttreatment('ruleForm')"
          >保存题目数据</el-button
        >
      </div>
      <!-- 问卷预览 -->
      <div v-if="Editprogress == 3">
@@ -465,42 +607,57 @@
        <el-divider></el-divider>
        <div class="preview-left">
          <!-- 单选 -->
          <div class="topic-dev" v-for="item in valssu" :key="item.aaa">
          <div
            class="scriptTopic-dev"
            v-for="item in ruleForm.svyTemplateLibScripts"
            :key="item.sort"
            v-if="item.scriptType == 1"
          >
            <div class="dev-text">
              {{ item.idd }}、[单选]<span>{{ item.wssd }}</span>
              {{ item.sort }}、[单选]<span>{{ item.scriptContent }}</span>
            </div>
            <div class="dev-xx">
              <el-radio-group v-model="radio">
              <el-radio-group v-model="item.remark">
                <el-radio
                  v-for="(items, index) in item.sdadd"
                  v-for="(items, index) in item.svyLibTemplateTargetoptions"
                  :key="index"
                  :label="index"
                  >{{ items }}</el-radio
                  >{{ items.optioncontent }}</el-radio
                >
              </el-radio-group>
            </div>
          </div>
          <!-- 多选 -->
          <div class="topic-dev" v-for="item in valssu" :key="item.aaa">
          <div
            class="scriptTopic-dev"
            v-for="item in ruleForm.svyTemplateLibScripts"
            :key="item.sort"
            v-if="item.scriptType == 2"
          >
            <div class="dev-text">
              {{ item.idd }}、[多选]<span>{{ item.wssd }}</span>
              {{ item.sort }}、[多选]<span>{{ item.scriptContent }}</span>
            </div>
            <div class="dev-xx">
              <el-checkbox-group v-model="radios">
              <el-checkbox-group v-model="qremark">
                <el-checkbox
                  v-for="(items, index) in item.sdadd"
                  v-for="(items, index) in item.svyLibTemplateTargetoptions"
                  :key="index"
                  :label="index"
                >
                  {{ items }}
                  {{ items.optioncontent }}
                </el-checkbox>
              </el-checkbox-group>
            </div>
          </div>
          <!-- 填空 -->
          <div class="topic-dev" v-for="item in valssu" :key="item.aaa">
          <div
            class="scriptTopic-dev"
            v-for="item in ruleForm.svyTemplateLibScripts"
            :key="item.sort"
            v-if="item.scriptType == 3"
          >
            <div class="dev-text">
              {{ item.idd }}、[填空]<span>{{ item.wssd }}</span>
              {{ item.sort }}、[填空]<span>{{ item.scriptContent }}</span>
            </div>
            <div class="dev-xx">
              <el-input placeholder="请输入答案" v-model="radioas" clearable>
@@ -513,12 +670,12 @@
        <el-button type="primary" @click="laststep()">上一步</el-button>
      </div>
    </div>
    <!-- 预览模版弹窗 -->
    <!-- 添加题目弹窗 -->
    <el-drawer
      title="添加题目"
      :visible.sync="drawer"
      custom-class="demo-drawer"
      width="50%"
      size="50%"
    >
      <div class="preview-left">
        <el-form
@@ -528,9 +685,9 @@
          :inline="true"
          label-width="98px"
        >
          <el-form-item label="标题" prop="userName">
          <el-form-item label="问题标题" prop="scriptTopic">
            <el-input
              v-model="queryParams.userName"
              v-model="queryParams.scriptTopic"
              placeholder="请输入"
              clearable
              style="width: 200px"
@@ -555,15 +712,23 @@
          <el-table-column
            label="标题"
            align="center"
            key="topic"
            prop="topic"
            key="scriptTopic"
            prop="scriptTopic"
            width="100"
          />
          <el-table-column
            label="问题内容"
            align="center"
            key="topicContent"
            prop="topicContent"
            key="scriptContent"
            prop="scriptContent"
            width="200"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="选项内容"
            align="center"
            key="targetoptions"
            prop="targetoptions"
            width="200"
            :show-overflow-tooltip="true"
          />
@@ -582,8 +747,23 @@
            </template>
          </el-table-column>
        </el-table>
        <pagination
          v-show="total > 0"
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="getaddtopiclist"
        />
      </div>
    </el-drawer>
    <!-- 添加适用疾病窗口 -->
    <Optional-Form
      ref="child"
      :dialogVisiblepatient="dialogVisiblepatient"
      :overallCase="illnesslist"
      @addoption="dialogVisiblepatient = false"
      @kkoption="dialogVisiblepatient = true"
    />
  </div>
</template>
@@ -595,7 +775,7 @@
  getQtemplateclassify,
  delQtemplateclassify,
  addQtemplateclassify,
  getQtemplatelist,
  getQtemplateobj,
  compileQtemplate,
  Qtemplateinfo,
  compileissue,
@@ -609,10 +789,20 @@
  illnesslistget,
  getillness,
} from "@/api/AiCentre/index";
import OptionalForm from "@/components/OptionalForm"; //正则组件
import { getToken } from "@/utils/auth";
export default {
  name: "Qcompilequer",
  components: { OptionalForm },
  data() {
    return {
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort",
      sidecolumnrabs: "left", //方向
      Editprogress: 1, //编辑进度
      currentVersion: "1.2.3", //当前版本
@@ -623,18 +813,25 @@
      radioas: "", //填空题答案
      dynamicTags: [],
      inputVisible: false,
      dialogVisiblepatient: false, //适用疾病窗口
      inputValue: "",
      topicobj: {},
      // 总条数
      total: 1,
      ruleForm: {},
      ruleForm: {
        svyTemplateLibScripts: [],
        tempDetpRelevances: [],
        svyLibTemplateTagList: [],
      },
      rules: {},
      rulesa: {},
      optionsclass: [], //分类列表
      optionlist: [
        { value: "topic", table: "topic" },
        { value: "topic", table: "topic" },
        { value: "scriptTopic", table: "scriptTopic" },
        { value: "scriptTopic", table: "scriptTopic" },
      ],
      appraiselist: [],
      fileList: [
        {
@@ -669,38 +866,84 @@
      themelist: [],
      languagelist: [],
      courtyardlist: [],
      askvaluetype: [],
      precedencetype: [],
      inputValueillness: "",
      inputVisible: false,
      inputVisibleillness: false,
      illnessVisible: false, //指标疾病弹框
      Operateit: true,
      deptOptions: [],
      optionsillness: [],
      delScriptVOList: [],
      illnesslistapi: [],
      illnesslist: [],
      tempDetpRelevanceslist: [],
      optionstag: [],
      xjxsoptions: [],
      usable: [],
      required: [],
      valuetype: [],
      qremark: [],
      usable: [
        { value: "0", label: "可用" },
        { value: "1", label: "停用" },
      ],
      required: [
        { value: "1", label: "必填" },
        { value: "2", label: "不必填" },
      ],
      mode: [], //方式
      // 查询参数
      queryParams: {
        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" },
        ],
      ],
    };
  },
  created() {
    this.gettabList();
    this.getissueinfo();
    this.mode = store.getters.mode;
    this.mode = store.getters.Askmode;
    this.languagelist = store.getters.languagelist;
    this.usable = store.getters.usable;
    this.required = store.getters.required;
    this.xjxsoptions = store.getters.xjxsoptions;
    this.valuetype = store.getters.valuetype;
    this.courtyardlist = store.getters.courtyardlist;
    this.askvaluetype = store.getters.askvaluetype;
    this.appraiselist = store.getters.appraiselist;
    // this.test();
  },
  computed: {
    displayedTags() {
      // 返回前10个tag
      return this.illnesslist.slice(0, 10);
    },
    hasMore() {
      // 判断是否有更多的tag
      return this.illnesslist.length > 10;
    },
    remaining() {
      // 计算剩余的tag数量
      return this.illnesslist.length - 10;
    },
  },
  methods: {
@@ -708,16 +951,19 @@
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
    },
    processElement(element) {
      return { ...element, isoperation: 1 };
    },
    // 递归扁平化
    flattenArray(arr) {
      let result = [];
      arr.forEach((item) => {
        result.push(item);
        if (item.svyLibTitleCategoryList) {
        if (item.svyLibTemplateCategoryList) {
          result = result.concat(
            this.flattenArray(item.svyLibTitleCategoryList)
            this.flattenArray(item.svyLibTemplateCategoryList)
          );
          delete item.svyLibTitleCategoryList;
          delete item.svyLibTemplateCategoryList;
        }
      });
      return result;
@@ -726,45 +972,53 @@
    // 获取数据
    getissueinfo() {
      this.id = this.$route.query.id;
      getQtemplatelist({ svyid: this.id }).then((res) => {
        this.ruleForm = res.rows[0];
        this.dynamicTags = this.ruleForm.labelInfo.split(",");
        this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
        this.ruleForm.suitway = this.ruleForm.suitway.split(",");
        console.log(this.tempDetpRelevanceslist);
      });
      getillnesslist({
        pageNum: 1,
        pageSize: 100,
      }).then((response) => {
        this.optionsillness = response.rows;
      });
      getillness({ outid: this.id, type: 5 }).then((res) => {
        this.illnesslist = res.rows;
      });
      if (this.id) {
        getQtemplateobj({ svyid: this.id }).then((res) => {
          this.ruleForm = res.rows[0];
          this.dynamicTags = this.ruleForm.svyLibTemplateTagList.map(
            this.processElement
          );
          this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
          this.ruleForm.suitway = this.ruleForm.suitway.split(",");
        });
        getillness({ outid: this.id, type: 5 }).then((res) => {
          this.illnesslist = res.rows;
          this.illnesslist.forEach((item) => {
            item.icdname = item.icd10name;
          });
        });
      }
      listDept(this.queryParams).then((response) => {
        this.deptList = this.handleTree(response.data, "deptId");
      });
      // 分类
      getQtemplateclassify({}).then((res) => {
        // this.optionsclass = this.flattenArray(res.rows);
        this.optionsclass = res.rows;
      });
    },
    submitForm(formName) {
      this.ruleForm.labelInfo = this.dynamicTags.join(",");
      this.$modal.loading("正在上传数据,请稍候...");
      this.ruleForm.suitway = this.ruleForm.suitway.join(",");
      if (this.id) {
        this.ruleForm.isoperation = 2;
        compileQtemplate(this.ruleForm).then((response) => {
        compileQtemplate(this.ruleForm).then((res) => {
          this.$modal.msgSuccess("修改成功");
          this.confirmillness();
          this.$modal.closeLoading();
          this.$router.go(-1);
        });
      } else {
        this.ruleForm.isoperation = 1;
        compileQtemplate(this.ruleForm).then((response) => {
        compileQtemplate(this.ruleForm).then((res) => {
          this.$modal.msgSuccess("新增成功");
          this.confirmillness(res.data);
          this.$modal.closeLoading();
          this.$router.go(-1);
        });
      }
@@ -773,10 +1027,12 @@
    Departmenttreatment() {
      this.ruleForm.deptNames = JSON.stringify(this.tempDetpRelevanceslist);
      console.log(this.tempDetpRelevanceslist);
      this.ruleForm.svyTemplateLibScripts =
        this.ruleForm.svyTemplateLibScripts.concat(this.delScriptVOList);
      console.log(this.tempDetpRelevanceslist, "this.tempDetpRelevanceslist");
      const result = this.tempDetpRelevanceslist.map(
        (subArr) => subArr[subArr.length - 1]
      );
      console.log(result);
      // id数组查数组对象
      result.forEach((item) => {
        const condition = this.ruleForm.tempDetpRelevances.some(
@@ -790,20 +1046,18 @@
          });
        }
      });
      console.log(this.ruleForm.tempDetpRelevances);
      // 数组对象查id数组
      this.ruleForm.tempDetpRelevances.forEach((item) => {
        const condition = result.some((obj) => obj === item.deptId);
        if (!condition) {
          console.log(condition);
          const index = this.ruleForm.tempDetpRelevances.indexOf(item);
          this.ruleForm.tempDetpRelevances[index].delFlag = 1;
        }
      });
      console.log(this.ruleForm.tempDetpRelevances);
      setTimeout(() => {
        this.submitForm();
      }, 1000);
      // this.submitForm();
    },
    // 下一步
    nextstep() {
@@ -835,6 +1089,7 @@
    // 获取题目列表
    getaddtopiclist() {
      this.drawer = true;
      this.queryParams.scoretype = this.ruleForm.scoreType;
      getissuelist(this.queryParams).then((res) => {
        this.loading = false;
        this.userList = res.rows;
@@ -845,44 +1100,65 @@
    // 新增题目
    addtopic(row) {
      row.isoperation = 1;
      this.ruleForm.svyLibTopics.push(row);
      console.log(row, "row");
      row.svyLibScriptOptions.forEach((item) => {
        item.isoperation = 1;
      });
      row.svyLibTemplateTargetoptions = row.svyLibScriptOptions;
      this.ruleForm.svyTemplateLibScripts.push(row);
      this.sortFn();
      this.$modal.msgSuccess("新增成功");
    },
    handleDelete(row) {
      this.ruleForm.svyLibTopics.splice(
        this.ruleForm.svyLibTopics.indexOf(row),
        1
      );
      let index = this.ruleForm.svyTemplateLibScripts.indexOf(row);
      this.ruleForm.svyTemplateLibScripts.splice(index, 1);
      row.isoperation = 3;
      this.delScriptVOList.push(row);
      this.sortFn();
    },
    handleUpdate(row) {
      getissuelist({ svyid: row.svyid }).then((res) => {
        this.topicobj = res.rows[0];
      });
      this.topicobj = row;
      this.radioas = "";
      console.log(this.topicobj, "看数据");
      // getissuelist({ svyid: row.svyid }).then((res) => {
      // });
    },
    syioption(row) {
      const index = this.getIndexInArray(this.ruleForm.svyLibTopics, row);
      const item = this.ruleForm.svyLibTopics.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.ruleForm.svyLibTopics.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
      const index = this.getIndexInArray(
        this.ruleForm.svyTemplateLibScripts,
        row
      );
      const item = this.ruleForm.svyTemplateLibScripts.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.ruleForm.svyTemplateLibScripts.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
      this.sortFn();
    },
    xiayioption(row) {
      const index = this.getIndexInArray(this.ruleForm.svyLibTopics, row);
      const item = this.ruleForm.svyLibTopics.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.ruleForm.svyLibTopics.splice(index + 1, 0, item); // 将item插入到索引位置的前一位
      const index = this.getIndexInArray(
        this.ruleForm.svyTemplateLibScripts,
        row
      );
      const item = this.ruleForm.svyTemplateLibScripts.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.ruleForm.svyTemplateLibScripts.splice(index + 1, 0, item); // 将item插入到索引位置的前一位
      this.sortFn();
    },
    sortFn() {
      this.ruleForm.svyLibTopics = this.ruleForm.svyLibTopics.map(
        (item, index) => {
          return {
            guid: index + 1,
            svyid: item.svyid,
            topic: item.topic,
            topicContent: item.topicContent,
          };
      console.log(this.ruleForm.svyTemplateLibScripts, "序前值");
      this.ruleForm.svyTemplateLibScripts.forEach((item, index) => {
        item.sort = Number(index) + 1;
        console.log(this.ruleForm.svyTemplateLibScripts.length, "length");
        if (item.sort == this.ruleForm.svyTemplateLibScripts.length) {
          item.nextScriptno = "已是最后一题";
        } else {
          item.nextScriptno = item.sort + 1;
        }
      );
      console.log(this.ruleForm.svyLibTopics);
        if (item.svyLibTemplateTargetoptions) {
          item.svyLibTemplateTargetoptions.forEach((items) => {
            items.nextQuestion = Number(item.sort) + 1;
          });
        }
      });
      console.log(this.ruleForm.svyTemplateLibScripts);
    },
    // 修改题目信息
@@ -903,10 +1179,7 @@
        console.log("未找到该对象");
      }
    },
    // 控制文件
    handleChange(file, fileList) {
      this.fileList = fileList.slice(-3);
    },
    // 标签-----------------
    gettabList() {
      const tagqueryParams = {
@@ -922,7 +1195,11 @@
    handleClosetag(tag) {
      console.log(tag);
      console.log(this.dynamicTags.indexOf(tag));
      const lindex = this.dynamicTags.indexOf(tag);
      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
      this.ruleForm.svyLibTemplateTagList[lindex].delFlag = 1;
      // this.ruleForm.ivrLibaTemplateTargetList[lindex].isoperation = 3;
    },
    handleInputConfirm() {
@@ -944,9 +1221,9 @@
              isoperation: 1,
            };
          }
          // this.ruleForm.ivrLibaTemplateTargetList.push(tagvalue);
          this.ruleForm.svyLibTemplateTagList.push(tagvalue);
          // this.dynamicTags.push(tagvalue);
          this.dynamicTags.push(tagvalue.tagname);
          this.dynamicTags.push(tagvalue);
        });
      }
      this.inputVisible = false;
@@ -968,57 +1245,22 @@
    showInput() {
      this.inputVisible = true;
    },
    // 疾病-----------------------
    handleCloseillness(tag) {
      this.illnesslist.splice(this.illnesslist.indexOf(tag), 1);
      if (tag.id) {
        this.illnesslistapi.push(tag.id);
      }
    },
    remoteMethod(value) {
      console.log(value);
      const illnessqueryParams = {
        pageNum: 1,
        pageSize: 100,
        icdname: value,
      };
      this.loading = true;
      setTimeout(() => {
        this.loading = false;
        getillnesslist(illnessqueryParams).then((response) => {
          this.optionsillness = response.rows;
        });
      }, 200);
    },
    illnessConfirm(item) {
      let opeavalue = {};
      let tagname = this.inputValueillness;
      illnesslistget(item).then((res) => {
        opeavalue = res.data;
        opeavalue.outid = this.id;
        opeavalue.type = 5;
        opeavalue.icd10id = opeavalue.icdid;
        opeavalue.icd10name = opeavalue.icdname;
        opeavalue.icd10code = opeavalue.icdcode;
        if (tagname) {
          this.illnesslist.push(opeavalue);
        }
      });
      console.log(this.illnesslist);
      this.inputVisibleillness = false;
      this.inputValueillness = "";
    },
    // 保存
    confirmillness() {
    // 保存疾病
    confirmillness(guid) {
      this.illnesslist.forEach((item, index) => {
        if (guid) {
          item.outid = guid;
        } else {
          console.log(this.ruleForm);
          item.outid = this.ruleForm.svyid;
        }
        item.icd10name = item.icdname;
        item.icd10code = item.icdcode;
        item.type = 5;
        if (!item.id) {
          addtargetillness(item).then((res) => {});
        }
      });
      if (this.illnesslistapi.length) {
        deltargetillness(this.illnesslistapi.join(",")).then((res) => {});
      }
      this.illnessVisible = false;
      this.$modal.msgSuccess("编辑成功");
    },
@@ -1030,35 +1272,154 @@
    resetForm(formName) {
      this.$refs[formName].resetFields();
    },
    // 问卷分数限制算法
    // 混合路线
    generateCombinations(arrays, currentIndex = 0, currentCombination = []) {
      if (currentIndex === arrays.length) {
        return [currentCombination];
      }
      const currentArray = arrays[currentIndex];
      const newCombinations = [];
      for (const item of currentArray) {
        const newCombination = [...currentCombination, item];
        const combinations = this.generateCombinations(
          arrays,
          currentIndex + 1,
          newCombination
        );
        newCombinations.push(...combinations);
      }
      return newCombinations;
    },
    // 执行
    test() {
      const arrays = [
        ["2", "3", "4", "5"],
        ["1", "2", "5", "6"],
        ["3", "4", "5", "3"],
        ["3", "2", "5", "7"],
      ];
      const arraysa = [
        {
          id: 1,
          grade: "5",
          arr: [
            { name: "不错", skip: 2 },
            { name: "一般", skip: 2 },
            { name: "还不错", skip: 2 },
            { name: "很棒", skip: 3 },
          ],
        },
        {
          id: 2,
          grade: "5",
          arr: [
            { name: "优秀", skip: 3 },
            { name: "良好", skip: 3 },
            { name: "一般", skip: 3 },
            { name: "较差", skip: 4 },
          ],
        },
        {
          id: 3,
          grade: "5",
          arr: [
            { name: "是的", skip: 4 },
            { name: "不清楚", skip: 4 },
            { name: "还可", skip: 4 },
            { name: "一般", skip: 4 },
          ],
        },
        {
          id: 4,
          grade: "5",
          arr: [
            { name: "真不错", skip: null },
            { name: "还可以", skip: null },
            { name: "一般般", skip: null },
            { name: "不清楚", skip: null },
          ],
        },
      ];
      // const newMixArray = this.generateCombinations(arrays);
      const newMixArray = this.getExecutionOrders(arraysa);
      console.log(newMixArray, "全部路线");
      this.screen(newMixArray);
    },
    getExecutionOrders(data) {
      let orders = [];
      const explore = (currentOrder, id) => {
        console.log(currentOrder, "currentOrder", id);
        const currentQuestion = data[currentOrder[currentOrder.length - 1]];
        if (
          currentQuestion.arr.some(
            (option) =>
              option.skip !== null && !currentOrder.includes(option.skip)
          )
        ) {
          currentQuestion.arr.forEach((option) => {
            if (option.skip !== null && !currentOrder.includes(option.skip)) {
              explore([...currentOrder, option.skip]);
            }
          });
        } else {
          orders.push(
            currentOrder.map((id) => ({
              id: data[id].id,
              grade: data[id].grade,
            }))
          );
        }
      };
      console.log(data, "data");
      data.forEach((entry) => {
        explore([entry.id], entry.id);
      });
      return orders;
    },
    // 数组求和
    sumArray(arr) {
      return arr.reduce((acc, curr) => acc + parseInt(curr), 0);
    },
    // 筛选错误路线
    screen(data) {
      const arraysGreaterThan10 = data.filter((arr) => this.sumArray(arr) > 21);
      console.log(arraysGreaterThan10, "筛选错误路线大于13分");
    },
  },
};
</script>
<style lang="scss" scoped>
.Questionnairemanagement {
  display: flex;
  // display: flex;
}
.sidecolumn {
  width: 300px;
  min-height: 100vh;
  text-align: center;
  //   display: flex;
  //   margin-top: 20px;
  margin: 20px;
  margin-bottom: 0;
  padding: 30px;
  margin: 10px 20px 0 20px;
  padding: 20px;
  background: #edf1f7;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
}
.leftvlue {
  //   display: flex;
  //   flex: 1;
  width: 80%;
  margin-top: 20px;
  //   margin: 20px;
  // //   display: flex;
  // //   flex: 1;
  // width: 80%;
  // margin-top: 20px;
  margin: 20px;
  padding: 30px;
  padding-top: 5px;
  margin-top: 10px;
  background: #ffff;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
@@ -1090,7 +1451,7 @@
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
  .topic-dev {
  .scriptTopic-dev {
    margin-bottom: 25px;
    font-size: 20px !important;
    .dev-text {
@@ -1122,6 +1483,14 @@
    vertical-align: bottom;
  }
}
.xinz-infs {
  font-size: 18px;
  line-height: 48px;
  .el-tag + .el-tag {
    margin-left: 10px;
  }
}
.addtopic {
  margin-top: 30px;
}
@@ -1129,7 +1498,17 @@
  margin: 20px 0;
  display: flex;
  .presentation-left {
    width: 50%;
    width: 45%;
    // height: 500px;
    .button-textxg {
      color: #024df0;
    }
    .button-textsc {
      color: #f52727;
    }
  }
  .spresentation-left {
    width: 100%;
    // height: 500px;
    .button-textxg {
      color: #024df0;
@@ -1139,7 +1518,7 @@
    }
  }
  .presentation-right {
    width: 50%;
    width: 55%;
    max-height: 688px;
    padding: 0 20px;
    font-size: 18px;
@@ -1158,6 +1537,16 @@
      padding-top: 15px;
    }
  }
}
.custom-width {
  width: 100px; /* 设置宽度样式 */
}
.el-select {
  width: 40%;
}
.el-cascader {
  width: 40%;
}
::v-deep .addtopic-input {
  input {
@@ -1185,7 +1574,7 @@
  width: 22px;
  height: 22px;
}
// ::v-deep.topic-dev.el-radio__label {
// ::v-deep.scriptTopic-dev.el-radio__label {
//   font-size: 24px;
// }
::v-deep.el-radio-group {