WXL
2025-01-08 b26c48a6878519fce4068f4b1ee308e11fecd862
src/views/knowledge/questionbank/particulars/index.vue
@@ -1,403 +1,547 @@
<template>
  <div>
    <div class="presentation-right">
      <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="compileissue"
                >保 存</el-button
              ></span
            ><span style="margin-left: 30px"
              ><el-button type="success" round @click="drawer = true"
                >+选择指标</el-button
              ></span
            >
          </div>
          <div style="margin-left: 8%">
            <el-row :gutter="10">
              <el-col :span="10">
                <el-form-item label="问题分类">
                  <el-select
                    v-model="topicobj.categoryid"
                    size="medium"
                    filterable
                    placeholder="请选择分类"
                  >
                    <el-option-group
                      v-for="group in classifylist"
                      :key="group.id"
                      :label="group.name"
      <div class="sidecolumn">
        <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="nextstep"
                  >问题指标编辑</span
                >
              </template>
            </el-step>
          </el-steps>
        </div>
      </div>
      <div v-if="Editprogress == 1">
        <el-card class="box-card">
          <el-form :inline="true" ref="topicobj" :model="topicobj" :rules="rules" class="demo-form-inline">
            <div class="headline">
              基础信息配置
              <span style="margin-left: 30px"
                ><el-button type="success" @click="topicVisible = true"
                  >预览</el-button
                >
              </span>
              <span style="margin-left: 30px"
                ><el-button type="primary" @click="Saveproblem"
                  >保 存</el-button
                >
              </span>
            </div>
            <el-divider></el-divider>
            <div style="margin-left: 8%">
              <el-form-item label="问题内容" prop="scriptContent">
                <el-input
                  style="width: 40vw"
                  type="textarea"
                  id="scriptContent"
                  v-model="topicobj.scriptContent"
                  @focus="handleInput('scriptContent')"
                  placeholder="请输入问题内容"
                ></el-input>
              </el-form-item>
              <el-form-item label="问题说明" prop="targetname">
                <el-input
                  style="width: 40vw"
                  type="textarea"
                  v-model="topicobj.scriptDesc"
                  placeholder="请输入说明"
                ></el-input>
              </el-form-item>
              <el-row :gutter="10">
                <el-col :span="8">
                  <el-form-item label="问题分类" prop="categoryid">
                    <el-select
                      v-model="topicobj.categoryid"
                      size="medium"
                      filterable
                      placeholder="请选择分类"
                    >
                      <el-option-group
                        v-for="group in classifylist"
                        :key="group.id"
                        :label="group.name"
                      >
                        <el-option
                          v-for="item in group.svyLibScriptCategoryList"
                          :key="item.id"
                          :label="item.name"
                          :value="item.id"
                        >
                        </el-option>
                      </el-option-group>
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="评价类型" prop="scoretype">
                    <el-select
                      v-model="topicobj.scoretype"
                      placeholder="请选择分类"
                    >
                      <el-option
                        v-for="item in group.svyLibScriptCategoryList"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"
                        v-for="group in appraiselist"
                        :key="group.value"
                        :label="group.label"
                        :value="group.value"
                      >
                      </el-option>
                    </el-option-group>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="10">
                <el-form-item label="评价类型">
                  <el-select
                    v-model="topicobj.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-row :gutter="10">
              <el-col :span="8"
                ><el-form-item label="题目标题">
                  <el-input
                    v-model="topicobj.topic"
                    placeholder="请输入标题"
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="8"
                ><el-form-item label="是否可用">
                  <el-select
                    v-model="topicobj.isavailable"
                    size="medium"
                    filterable
                    placeholder="请选择分类"
                  >
                    <el-option
                      class="topicobjaa"
                      v-for="item in usable"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option>
                  </el-select> </el-form-item
              ></el-col>
              <el-col :span="8"
                ><el-form-item label="语言(缺)">
                  <el-select
                    v-model="topicobj.language"
                    size="medium"
                    filterable
                    placeholder="请选择分类"
                  >
                    <el-option
                      class="topicobjaa"
                      v-for="item in languagelist"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option>
                  </el-select> </el-form-item
              ></el-col>
            </el-row>
            <el-row :gutter="10">
              <el-col :span="8"
                ><el-form-item label="是否必填">
                  <el-select
                    v-model="topicobj.ismandatory"
                    size="medium"
                    filterable
                    placeholder="请选择分类"
                  >
                    <el-option
                      class="topicobjaa"
                      v-for="item in required"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option>
                  </el-select> </el-form-item
              ></el-col>
              <el-col :span="8"
                ><el-form-item label="题目类型">
                  <el-select
                    v-model="topicobj.scripttype"
                    size="medium"
                    filterable
                    placeholder="请选择分类"
                  >
                    <el-option
                      class="topicobjaa"
                      v-for="item in valuetype"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option>
                  </el-select> </el-form-item
              ></el-col>
              <el-col :span="8"
                ><el-form-item label="适用方式">
                  <el-select
                    v-model="suitwaylist"
                    size="medium"
                    filterable
                    multiple
                    placeholder="请选择分类"
                  >
                    <el-option
                      class="topicobjaa"
                      v-for="item in mode"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option> </el-select></el-form-item
              ></el-col>
            </el-row>
            <el-form-item label="题目内容">
              <el-input
                style="width: 40vw"
                type="textarea"
                id="script"
                v-model="topicobj.script"
                @focus="handleInput('script')"
                placeholder="请输入题目内容"
              ></el-input>
            </el-form-item>
            <el-form-item label="题目说明">
              <el-input
                style="width: 40vw"
                type="textarea"
                v-model="topicobj.scriptContent"
                placeholder="请输入说明"
              ></el-input>
            </el-form-item>
            <el-row>
              <el-form-item label="标签" prop="desc">
                <div class="xinz-inf">
                  <el-tag
                    :key="tag"
                    type="success"
                    v-for="tag in dynamicTags"
                    closable
                    :disable-transitions="false"
                    @close="handleClosetag(tag)"
                  >
                    {{ tag }}
                  </el-tag>
                  <el-select
                    v-model="inputValue"
                    v-if="inputVisible"
                    @change="handleInputConfirm"
                    filterable
                    remote
                    reserve-keyword
                    default-first-option
                    :remote-method="remoteMethodtag"
                    :loading="loading"
                    placeholder="请选择"
                  >
                    <el-option
                      v-for="item in optionstag"
                      :key="item.tagid"
                      :label="item.tagname"
                      :value="item.tagname"
                    >
                    </el-option>
                  </el-select>
                  <el-button
                    v-else
                    class="button-new-tag"
                    size="small"
                    @click="showInput"
                    >+ 新增标签</el-button
                  >
                </div>
              </el-form-item>
            </el-row>
            <el-row>
              <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-form-item>
            </el-row>
            <!-- <el-form-item label="通知变量" prop="name">
              <div style="margin-bottom: 5px" v-for="item in variablelist">
                <el-row>
                  <el-col :span="5">
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="8" v-if="topicobj.scoretype == 1">
                  <el-form-item label="问题得分" prop="score">
                    <el-input
                      v-model="item.variatename"
                      placeholder="请输入变量名"
                      v-model="topicobj.score"
                      placeholder="请输入分数"
                    ></el-input>
                  </el-col>
                  <el-col :span="8" :offset="1">
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="10">
                <el-col :span="8"
                  ><el-form-item label="问题标题" prop="scriptTopic">
                    <el-input
                      v-model="item.variate"
                      placeholder="请输入变量内容"
                    ></el-input>
                  </el-col>
                  <el-col :span="8" :offset="1">
                    <el-button
                      type="success"
                      icon="el-icon-plus"
                      circle
                      @click="addvariable(item)"
                    ></el-button>
                    <el-button
                      v-if="!item.default"
                      type="danger"
                      icon="el-icon-delete"
                      circle
                      @click="delvariable(item)"
                    ></el-button>
                  </el-col>
                </el-row>
              </div>
            </el-form-item>
            <el-row>
              <el-col :span="24">
                <div
                  style="display: flex; margin-left: 66px; margin-bottom: 10px"
                      v-model="topicobj.scriptTopic"
                      placeholder="请输入标题"
                    ></el-input> </el-form-item
                ></el-col>
                <el-col :span="8"
                  ><el-form-item label="是否可用" prop="isavailable">
                    <el-radio-group v-model="topicobj.isavailable">
                      <el-radio
                      @change="$forceUpdate()"
                        v-for="(item, index) in usable"
                        :label="item.value"
                        >{{ item.label }}</el-radio
                      >
                    </el-radio-group>
                  </el-form-item></el-col
                >
                  <div
                    v-for="item in variablelist"
                    class="tsgname"
                    @click="tsgnameto(item)"
                <!-- <el-col :span="8">
                  <el-form-item label="是否必填" prop="ismandatory">
                    <el-radio-group v-model="topicobj.ismandatory">
                      <el-radio
                      @change="$forceUpdate()"
                        v-for="(item, index) in required"
                        :label="item.value"
                        >{{ item.label }}</el-radio
                      >
                    </el-radio-group>
                  </el-form-item>
                </el-col> -->
              </el-row>
              <el-row :gutter="10">
                <el-col :span="8"
                  ><el-form-item label="问题类型" prop="scriptType">
                    <el-select
                      v-model="topicobj.scriptType"
                      @change="changefn"
                      size="medium"
                      filterable
                      placeholder="请选择分类"
                    >
                      <el-option
                        class="topicobjaa"
                        v-for="item in valuetype"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select> </el-form-item
                ></el-col>
                <el-col :span="8"
                  ><el-form-item label="适用方式" prop="suitway">
                    <el-select
                      v-model="topicobj.suitway"
                      disabled
                      placeholder="请选择"
                    >
                      <el-option
                        class="topicobjaa"
                        v-for="item in mode"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option> </el-select></el-form-item
                ></el-col>
                <el-col :span="8">
                  <el-form-item label="语言" prop="language">
                    <el-select
                      v-model="topicobj.language"
                      size="medium"
                      filterable
                      placeholder="请选择分类"
                    >
                      <el-option
                        class="topicobjaa"
                        v-for="item in languagelist"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select>
                  </el-form-item>
                </el-col>
              </el-row>
              <!-- <el-form-item
              label=""
              prop="scriptContent"
              v-if="topicobj.scriptType == 3"
            >
              <div style="display: flex; margin-bottom: 10px">
                <div class="tsgnames" @click="tsgnametos">插入填空标记</div>
              </div>
            </el-form-item> -->
              <!-- <el-row>
              <el-col :span="20">
                <el-form-item
                  label="填空信息"
                  v-if="
                    topicobj.scriptType == 3 &&
                    topicobj.svyLibScriptOptions.length
                  "
                >
                  <el-card class="box-card" style="width: 200%">
                    <div
                      v-for="item in topicobj.svyLibScriptOptions"
                      v-if="item.isoperation != 3"
                      style="margin-bottom: 10px"
                    >
                      <el-input
                        type="text"
                        placeholder="填入内容信息"
                        v-model="item.aaa"
                      >
                        <el-button
                          slot="append"
                          @click="deletexuanx(item)"
                          type="danger"
                          icon="el-icon-delete"
                          circle
                        ></el-button>
                        <span slot="prepend">{{
                          "(" + item.orderno + ")"
                        }}</span>
                      </el-input>
                    </div>
                  </el-card>
                </el-form-item>
              </el-col>
            </el-row> -->
              <!-- <el-form-item label="选中指标:">
                <span style="margin-left: 30px"
                  ><el-tag type="success" effect="dark">{{
                    topicobj.targetname ? topicobj.targetname : "未选择"
                  }}</el-tag></span
                >
                <span style="margin-left: 30px"
                  ><el-button type="success" round @click="gettargetInfo"
                    >+选择指标</el-button
                  ></span
                >
              </el-form-item> -->
            </div>
            <div class="headline">关联信息配置</div>
            <el-divider></el-divider>
            <div style="margin-left: 8%">
              <el-row>
                <el-form-item label="标签" prop="desc">
                  <div class="xinz-inf">
                    <el-tag
                      :key="tag.tagname"
                      type="success"
                      v-for="tag in dynamicTags"
                      closable
                      :disable-transitions="false"
                      @close="handleClosetag(tag)"
                    >
                      {{ tag.tagname }}
                    </el-tag>
                    <el-select
                      v-model="inputValue"
                      v-if="inputVisible"
                      @change="handleInputConfirm"
                      filterable
                      remote
                      allow-create
                      reserve-keyword
                      default-first-option
                      :remote-method="remoteMethodtag"
                      :loading="loading"
                      placeholder="请选择"
                    >
                      <el-option
                        v-for="item in optionstag"
                        :key="item.tagid"
                        :label="item.tagname"
                        :value="item.tagname"
                      >
                      </el-option>
                    </el-select>
                    <el-button
                      v-else
                      class="button-new-tag"
                      size="small"
                      @click="showInput"
                      >+ 新增标签</el-button
                    >
                  </div>
                </el-form-item>
              </el-row>
              <el-form-item label="题干文件" prop="sickness">
                <div style="width: 40vw">
                  <el-upload
                    class="upload-demo"
                    :action="uploadImgUrl"
                    :headers="headers"
                    accept=".jpg,.png,image/*"
                    :on-success="handleChangetg"
                  >
                    {{ item.variatename }}
                    <el-button size="small" type="primary">点击上传</el-button>
                    <div slot="tip" class="el-upload__tip">
                      只能上传jpg/png类型文件
                    </div>
                  </el-upload>
                  <div style="margin: 20px">
                    <el-image
                      style="width: 100px; height: 100px"
                      :src="topicobj.picturePath"
                      :preview-src-list="[...topicobj.picturePath]"
                    >
                    </el-image>
                  </div>
                </div>
              </el-col></el-row
            > -->
          </div>
          <div v-if="topicobj.valueType == 1">
              </el-form-item>
            </div>
          </el-form>
        </el-card>
      </div>
      <div v-if="Editprogress == 2">
        <el-card class="box-card">
          <el-form :inline="true" ref="topicobj" :model="topicobj" class="demo-form-inline">
            <div class="headline">
              选项设置<span style="margin-left: 30px"
                ><el-button type="primary" round @click="addoption"
                  >+新增</el-button
              指标设置详情
              <span v-if="topicobj.targetname" style="margin-left: 30px"
                ><el-button type="success" @click="topicVisible = true"
                  >预览</el-button
                ></span
              >
              <span style="margin-left: 30px"
                ><el-button type="primary" round @click="gettargetInfo">{{
                  topicobj.targetname ? "修改指标" : "+选择指标"
                }}</el-button></span
              >
              <span style="margin-left: 30px"
                ><el-button type="primary" @click="Saveproblem"
                  >保 存</el-button
                >
              </span>
            </div>
            <div
              class="topicxq"
              v-for="item in topicobj.svyLibScriptOptions"
              v-if="item.isoperation != 3"
            >
              <el-row :gutter="10">
                <el-col :span="11"
                  ><el-form-item label="选项">
            <el-divider></el-divider>
            <el-form ref="form">
              <el-row>
                <el-col :span="10">
                  <el-form-item label="指标名称" prop="deptId">
                    <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 v-if="topicobj.scoretype == 1" label="分值">
                    <el-input
                      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>
                      disabled
                      v-model="topicobj.targetname"
                      placeholder="请输入指标名称"
                      maxlength="20"
                    />
                  </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 :span="12">
                  <el-form-item label="指标描述" prop="deptId">
                    <el-input
                      disabled
                      v-model="topicobj.targetdesc"
                      placeholder="请输入指标描述"
                      maxlength="60"
                    />
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="10">
                <el-form-item label="选中提示">
                  <el-input
                    style="width: 40vw"
                    type="textarea"
                    autosize
                    placeholder="请输入内容"
                    v-model="item.prompt"
                  >
                  </el-input
                ></el-form-item>
              <el-row>
                <el-col :span="10">
                  <el-form-item label="结果类型">
                    <el-radio-group
                      :disabled="true"
                      v-model="topicobj.valueType"
                    >
                      <el-radio :label="1">选项</el-radio>
                      <el-radio :label="2">文本</el-radio>
                      <el-radio :label="3">数值</el-radio>
                    </el-radio-group>
                  </el-form-item>
                </el-col>
                <el-col :span="12">
                  <el-form-item label="问题题型">
                    <el-radio-group
                      :disabled="true"
                      v-model="topicobj.scriptType"
                    >
                      <el-radio :label="'1'">单选</el-radio>
                      <el-radio :label="'2'">多选</el-radio>
                      <el-radio :label="'4'">问答</el-radio>
                    </el-radio-group>
                  </el-form-item>
                </el-col>
              </el-row>
            </el-form>
            <div>
              <el-divider></el-divider>
              <div v-if="topicobj.scriptType != 4">
                <div class="headline">
                  选项设置<span style="margin-left: 30px"
                    ><el-button type="primary" round @click="addoption"
                      >+新增</el-button
                    ></span
                  >
                </div>
                <div
                  class="topicxq"
                  v-for="item in topicobj.svyLibScriptOptions"
                  v-if="item.isoperation != 3"
                >
                  <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 v-if="topicobj.scoretype == 1" label="分值">
                        <el-input
                          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-col
                      :span="2"
                      :offsset="topicobj.scoretype == 4 ? 11 : 0"
                    >
                      <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-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">
                    <el-form-item label="选中提示">
                      <el-input
                        style="width: 40vw"
                        type="textarea"
                        autosize
                        placeholder="请输入内容"
                        v-model="item.prompt"
                      >
                      </el-input
                    ></el-form-item>
                  </el-row>
                  <el-form-item label="选项文件" prop="sickness">
                    <div style="width: 40vw">
                      <el-upload
                        class="upload-demo"
                        :action="uploadImgUrl"
                        :headers="headers"
                        accept=".jpg,.png,image/*"
                        :on-success="handleChange.bind(this, item)"
                      >
                        <el-button size="small" type="primary"
                          >点击上传</el-button
                        >
                      </el-upload>
                      <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>
                </div>
              </div>
              <div v-else class="topicxq">
                <el-input
                  type="textarea"
                  :rows="4"
                  placeholder="此处展示问答题收集信息"
                  v-model="testgovalue"
                >
                </el-input>
              </div>
            </div>
          </div>
        </el-form>
      </el-card>
          </el-form>
        </el-card>
      </div>
    </div>
    <el-drawer
      title="添加选项"
      title="选择指标"
      :visible.sync="drawer"
      custom-class="demo-drawer"
      size="50%"
@@ -410,7 +554,7 @@
          :inline="true"
          label-width="98px"
        >
          <el-form-item label="标题" prop="userName">
          <el-form-item label="指标名称" prop="userName">
            <el-input
              v-model="queryParams.targetname"
              placeholder="请输入"
@@ -418,6 +562,26 @@
              style="width: 200px"
              @keyup.enter.native="gettargetInfo"
            />
          </el-form-item>
          <el-form-item label="指标说明" prop="userName">
            <el-input
              v-model="queryParams.targetdesc"
              placeholder="请输入"
              clearable
              style="width: 200px"
              @keyup.enter.native="gettargetInfo"
            />
          </el-form-item>
          <el-form-item label="指标类型" prop="scriptType">
            <el-select v-model="queryParams.scriptType" placeholder="请选择">
              <el-option
                v-for="(item, index) in qyoptions"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item>
@@ -435,17 +599,45 @@
        </el-form>
        <el-table v-loading="loading" :data="targetList">
          <el-table-column
            label="标题"
            label="指标名称"
            align="center"
            key="targetname"
            prop="targetname"
            width="100"
          />
          <el-table-column
            label="问题内容"
            label="指标说明"
            align="center"
            key="targetdesc"
            prop="targetdesc"
            width="200"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="是否可用"
            align="center"
            key="isavailable"
            prop="isavailable"
          >
            <template slot-scope="scope">
              <dict-tag :options="usable" :value="scope.row.isavailable" />
            </template>
          </el-table-column>
          <el-table-column
            label="问题类型"
            align="center"
            key="scriptType"
            prop="scriptType"
          >
            <template slot-scope="scope">
              <dict-tag :options="valuetype" :value="scope.row.scriptType" />
            </template>
          </el-table-column>
          <el-table-column
            label="选项说明"
            align="center"
            key="optionDesc"
            prop="optionDesc"
            width="200"
            :show-overflow-tooltip="true"
          />
@@ -453,6 +645,7 @@
          <el-table-column
            label="操作"
            align="center"
            fixed="right"
            class-name="small-padding fixed-width"
          >
            <template slot-scope="scope">
@@ -476,6 +669,35 @@
        />
      </div>
    </el-drawer>
    <el-dialog title="问题预览" :visible.sync="topicVisible" width="50%">
      <div class="preview-left">
        <div class="dev-text">
          <span>{{ topicobj.scriptContent }}</span>
        </div>
        <div
          class="dev-xx"
          v-if="topicobj.scriptType != 3 && topicobj.scriptType != 4"
        >
          <el-radio-group v-model="topicobj.asrtext">
            <el-radio
              v-for="(topicobjs, index) in topicobj.svyLibScriptOptions"
              :key="topicobjs.optioncontent"
              :label="topicobjs.optioncontent"
              >{{ topicobjs.optioncontent }}</el-radio
            >
          </el-radio-group>
        </div>
        <div v-else>
          <el-input
            type="textarea"
            placeholder="请输入内容"
            v-model.sync="topicobj.asrtext"
            :rows="2"
          />
        </div>
      </div>
    </el-dialog>
  </div>
</template>
@@ -496,19 +718,30 @@
  illnesslistget,
  getillness,
} from "@/api/AiCentre/index";
import { getToken } from "@/utils/auth";
export default {
  data() {
    return {
      topicobj: {
        svyLibScriptOptions: [],
        svyLibScriptTagList: [],
        suitway: "1",
        scoretype:'4',
        language:'普通话',
      },
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort",
      inputVisible: false,
      inputValue: "",
      currentInputId: "",
      scriptTypels: "",
      total: 0,
      drawer: false,
      loading: false,
      topicVisible: false, //预览弹框
      id: [],
      suitwaylist: [],
      targetList: [],
@@ -519,18 +752,26 @@
        { variatename: "电话", variate: "${phone}", default: 1 },
        { variatename: "病情", variate: "${illness}", default: 1 },
      ],
      url: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
      srcList: [
        "https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg",
        "https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg",
      ],
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        isavailable: "",
        scriptType: "",
      },
      Editprogress: 1,
      optionlist: [
        { value: "topic", table: "topic" },
        { value: "topic", table: "topic" },
        { value: "topic", table: "topic" },
        { value: "scriptTopic", table: "scriptTopic" },
        { value: "scriptTopic", table: "scriptTopic" },
        { value: "scriptTopic", table: "scriptTopic" },
      ],
      inputValueillness: "",
      testgovalue: "",
      required: [],
      themelist: [],
      languagelist: [],
@@ -540,6 +781,7 @@
      inputVisibleillness: false,
      illnessVisible: false, //指标疾病弹框
      deptOptions: [],
      qyoptions: [],
      optionsillness: [],
      illnesslistapi: [],
      illnesslist: [],
@@ -548,30 +790,64 @@
        { label: "分数", value: "1" },
        { label: "ABC等级", value: "2" },
        { label: "优良等级", value: "3" },
        { label: "无", value: "4" },
      ],
      optionstag: [],
      valuetype: [],
      usable: [],
      mode: [], //方式
      // 表单校验
      rules: {
        categoryid: [
          { required: true, message: "问题分类不能为空", trigger: "blur" },
        ],
        scoretype: [
          { required: true, message: "评价类型不能为空", trigger: "blur" },
        ],
        language: [
          { required: true, message: "语言不能为空", trigger: "blur" },
        ],
        isavailable: [
          { required: true, message: "可用状态不能为空", trigger: "blur" },
        ],
        scriptTopic: [
          { required: true, message: "问题标题不能为空", trigger: "blur" },
        ],
        ismandatory: [
          { required: true, message: "是否必填不能为空", trigger: "blur" },
        ],
        scriptType: [
          { required: true, message: "问题类型不能为空", trigger: "blur" },
        ],
        suitway: [
          { required: true, message: "适用方式不能为空", trigger: "blur" },
        ],
        scriptContent: [
          { required: true, message: "问题内容不能为空", trigger: "blur" },
        ],
      },
    };
  },
  created() {
    this.gettabList();
    this.getissueinfo();
    this.test();
    this.gettargetInfo();
    // this.gettargetInfo();
    this.mode = store.getters.mode;
    this.languagelist = store.getters.languagelist;
    this.usable = store.getters.usable;
    this.valuetype = store.getters.askvaluetype;
    this.required = store.getters.required;
    this.qyoptions = store.getters.askvaluetype;
  },
  methods: {
    // 公共方法---------------
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
    },
    processElement(element) {
      return { ...element, isoperation: 1 };
    },
    // 递归扁平化
    flattenArray(arr) {
@@ -592,18 +868,26 @@
    // 获取数据
    getissueinfo() {
      this.id = this.$route.query.id;
      if (this.$route.query.categoryid) {
        this.topicobj.categoryid = Number(this.$route.query.categoryid);
      }
      // 分类
      getissueclassify({}).then((res) => {
        this.classifylist = res.rows;
        console.log(this.classifylist, "分类");
      });
      if (!this.id) {
        return;
      }
      getissuelist({ id: this.id }).then((res) => {
        this.topicobj = res.rows[0];
        this.dynamicTags = this.topicobj.tag.split(",");
        this.suitwaylist = this.topicobj.suitway.split(",");
        if (!this.topicobj.svyLibScriptTagList) {
          this.topicobj.svyLibScriptTagList = [];
        }
        this.dynamicTags = this.topicobj.svyLibScriptTagList.map(
          this.processElement
        );
        this.scriptTypels = this.topicobj.scriptType;
        this.variablelist = JSON.parse(this.topicobj.otherdata)
          ? JSON.parse(this.topicobj.otherdata)
          : this.variablelist;
@@ -619,15 +903,22 @@
      });
    },
    gettargetInfo() {
      if (!this.queryParams.scriptType) {
        this.queryParams.scriptType = this.topicobj.scriptType;
      }
      this.queryParams.suitWay = 1;
      gettargetInfo(this.queryParams).then((res) => {
        this.targetList = res.rows;
        this.total = res.total;
        this.drawer = true;
      });
    },
    // 新增或修改详情
    compileissue() {
      console.log(11223);
      this.topicobj.svyLibScriptOptions = this.topicobj.svyLibScriptOptions.map(
      this.$refs["topicobj"].validate((valid) => {
        if (valid) {
          this.topicobj.svyLibScriptOptions = this.topicobj.svyLibScriptOptions.map(
        (item) => {
          if (item.isoperation != 1 && item.isoperation != 3) {
            item.isoperation = 2;
@@ -635,9 +926,11 @@
          return item;
        }
      );
      this.topicobj.targetoptions = this.topicobj.svyLibScriptOptions
        .filter((item) => item.isoperation != 3)
        .map((item) => item.optioncontent)
        .join(", ");
      this.topicobj.otherdata = JSON.stringify(this.variablelist);
      this.topicobj.tag = this.dynamicTags.join(",");
      this.topicobj.suitway = this.suitwaylist.join(",");
      if (this.id) {
        this.topicobj.isoperation = 2;
        compileissue(this.topicobj).then((res) => {
@@ -679,13 +972,97 @@
      if (this.illnesslistapi.length) {
        deltargetillness(this.illnesslistapi.join(",")).then((res) => {});
      }
        }
      })
    },
    // 判断分值
    Scorejudgment() {
      let scorearr = this.topicobj.svyLibScriptOptions;
      let isValid = scorearr.every((score, index) => {
        if (this.topicobj.scriptType == 1) {
          if (score.score||score.score==0) {
            if (
              Number(score.score) < 0 ||
              Number(score.score) > Number(this.topicobj.score)
            ) {
              console.log(score, "错误分值");
              this.$message({
                message: "选项分值必须在0到" + this.topicobj.score + "分之间",
                type: "warning",
              });
              return false;
            }
            return true;
          } else {
            this.$message({
              message: "选项分值未设置",
              type: "warning",
            });
            return false;
          }
        } else if (this.topicobj.scriptType == 2) {
          // 累加分值
          const totalScore = scorearr.reduce((acc, score) => {
            if (score.score) {
              return acc + Number(score.score);
            }
            return acc; // 如果 score.score 不存在,不累加
          }, 0);
          // 检查累加的分值是否等于 this.topicobj.score
          if (totalScore !== Number(this.topicobj.score)) {
            this.$message({
              message:
                "多选题选项分值总和必须等于 " + this.topicobj.score + " 分",
              type: "warning",
            });
            return false;
          }
          return true; // 如果总分正确,返回 true
        } else if (this.topicobj.scriptType == 4) {
          return true;
        }
      });
      if (isValid) {
        this.compileissue();
      }
    },
    Saveproblem() {
      if (this.topicobj.scoretype == 1) {
        this.Scorejudgment();
      } else {
        this.compileissue();
      }
    },
    // 判断指标
    changefn(item) {
      console.log(item);
      if (this.topicobj.targetname || this.topicobj.svyLibScriptOptions[0]) {
        this.$modal
          .confirm("更改类型后选项将清空是否继续?")
          .then(() => {
            this.scriptTypels = this.topicobj.scriptType;
            this.topicobj.svyLibScriptOptions.forEach((item) => {
              item.isoperation = 3;
            });
          })
          .catch(() => {
            this.topicobj.scriptType = this.scriptTypels;
          });
      }
    },
    // 删除选项
    deletexuanx(row) {
      const index = this.getIndexInArray(
        this.topicobj.svyLibScriptOptions,
        row
      );
      console.log(this.topicobj.svyLibScriptOptions);
      if (this.topicobj.svyLibScriptOptions[index].id) {
        this.topicobj.svyLibScriptOptions[index].isoperation = 3;
      } else {
@@ -704,16 +1081,18 @@
    selectlabel(row) {
      this.$modal
        .confirm(
          '是否选择标题为"' + row.targetname + '"的指标并替换填充问题信息?'
          '是否选择标题为"' +
            row.targetname +
            '"的指标并替换填充问题及选项信息?'
        )
        .then(() => {
          console.log(row);
          console.log(this.topicobj);
          this.topicobj.topic = row.targetname;
          this.topicobj.scriptTopic = row.targetname;
          this.topicobj.valueType = row.valueType;
          this.topicobj.scriptType = row.scriptType;
          this.topicobj.scriptContent = row.targetdesc;
          this.topicobj.isavailable = "0";
          this.topicobj.language = "普通话";
          this.topicobj.targetid = row.id;
          this.topicobj.targetname = row.targetname;
          this.topicobj.svyLibScriptOptions = [];
          const labellist = row.targetoptionList;
          labellist.forEach((item) => {
@@ -735,14 +1114,14 @@
        tagcategoryid: "0",
      };
      listtag(tagqueryParams).then((response) => {
        console.log(response);
        this.optionstag = response.rows;
      });
    },
    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.topicobj.svyLibScriptTagList[lindex].delFlag = 1;
    },
    handleInputConfirm() {
      let tagvalue = {};
@@ -764,7 +1143,8 @@
            };
          }
          // this.dynamicTags.push(tagvalue);
          this.dynamicTags.push(tagvalue.tagname);
          this.topicobj.svyLibScriptTagList.push(tagvalue);
          this.dynamicTags.push(tagvalue);
        });
      }
      this.inputVisible = false;
@@ -840,23 +1220,25 @@
    //   this.illnessVisible = false;
    //   this.$modal.msgSuccess("编辑成功");
    // },
    resetQuery() {},
    // 便捷标签
    tsgnameto(row) {
    resetQuery() {
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
      };
      this.gettargetInfo();
    },
    // 便捷标签插入填空
    tsgnametos(row) {
      let inputValueArr = "";
      let value = this.topicobj.svyLibScriptOptions.length + 1;
      let el = document.querySelector("#" + this.currentInputId);
      //el.selectionStart; 这就是当前光标所在的位置(字符串中字符的index)
      if (this.currentInputId == "script") {
        inputValueArr = this.topicobj.script.split("");
        console.log(123);
      } else if (this.currentInputId == "nomatchtext") {
        inputValueArr = this.topicobj.nomatchtext.split("");
      } else if (this.currentInputId == "sliencetext") {
        inputValueArr = this.topicobj.sliencetext.split("");
      } else if (this.currentInputId == "noclearlytext") {
        inputValueArr = this.topicobj.noclearlytext.split("");
      } else if (this.currentInputId == "submoduletext") {
        inputValueArr = this.topicobj.submoduletext.split("");
      if (this.currentInputId == "scriptContent") {
        console.log(1);
        inputValueArr = this.topicobj.scriptContent.split("");
        console.log(2);
      } else {
        return;
      }
@@ -865,20 +1247,22 @@
      // 拿到选中文字的长度(后续可以用来替换选中的文字)
      let selectLength = el.selectionEnd - el.selectionStart;
      // 将要插入/替换的文字插入/替换(value.name是要插入/替换的字符串)
      inputValueArr.splice(el.selectionStart, selectLength, `${row.variate}`);
      inputValueArr.splice(
        el.selectionStart,
        selectLength,
        "__" + value + "__"
      );
      this.topicobj.svyLibScriptOptions.push({
        orderno: value,
        optiondesc: "",
        isoperation: 1,
      });
      // 把数组重新转换为字符串并赋值
      inputValueArr = inputValueArr.join("");
      console.log(inputValueArr);
      if (this.currentInputId == "script") {
        this.topicobj.script = inputValueArr;
      } else if (this.currentInputId == "nomatchtext") {
        this.topicobj.nomatchtext = inputValueArr;
      } else if (this.currentInputId == "sliencetext") {
        this.topicobj.sliencetext = inputValueArr;
      } else if (this.currentInputId == "noclearlytext") {
        this.topicobj.noclearlytext = inputValueArr;
      } else if (this.currentInputId == "submoduletext") {
        this.topicobj.submoduletext = inputValueArr;
      if (this.currentInputId == "scriptContent") {
        this.topicobj.scriptContent = inputValueArr;
      } else {
        return;
      }
@@ -946,8 +1330,46 @@
    // 筛选错误路线
    screen(data) {
      const arraysGreaterThan10 = data.filter((arr) => this.sumArray(arr) > 21);
      console.log(arraysGreaterThan10, "筛选错误路线大于13分");
    },
    // 选项文件上传
    handleChange(item, response, file, fileList) {
      console.log(response);
      if (response.code == 200) {
        console.log(item);
        let index = this.topicobj.svyLibScriptOptions.findIndex(
          (obj) => obj.optioncontent == item.optioncontent
        );
        console.log(index);
        this.topicobj.svyLibScriptOptions[index].picturePath = response.url;
        console.log(this.topicobj.svyLibScriptOptions[index]);
        this.$forceUpdate();
      } else {
        this.$message.error("图片插入失败");
      }
    },
    // 题干文件上传
    handleChangetg(response, file, fileList) {
      if (response.code == 200) {
        this.topicobj.picturePath = response.url;
      } else {
        this.$message.error("图片插入失败");
      }
    },
    // 下一步
    nextstep() {
      if (this.Editprogress <= 1) {
        // if (this.indexform.targetid) {
        return this.Editprogress++;
        // } else {
        //   this.$message.warning("请先选择关联指标");
        // }
      } else {
      }
    },
    // 上一步
    laststep() {
      this.Editprogress = this.Editprogress - 1;
    },
  },
};
@@ -959,20 +1381,14 @@
  padding: 0 20px;
  font-size: 18px;
  overflow: auto;
  .headline {
    font-size: 20px;
    border-left: 3px solid #41a1be;
    padding-left: 5px;
    margin: 15px 0;
  }
  .topicxq {
    width: 68%;
    width: 72%;
    background-color: #e2f5fc;
    border-radius: 4px;
    margin-top: 15px;
    margin-left: 10%;
    padding-left: 10px;
    padding-top: 15px;
    padding: 20px;
    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);
@@ -1002,6 +1418,21 @@
    }
  }
}
.sidecolumn {
  margin-bottom: 10px;
  padding: 15px;
  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);
}
.headline {
  display: flex;
  font-size: 20px;
  border-left: 4px solid #41a1be;
  padding-left: 5px;
  margin: 15px 0;
}
.tsgname {
  width: 90px;
  margin-right: 10px;
@@ -1017,6 +1448,21 @@
.tsgname:hover {
  background: #3366f5;
}
.tsgnames {
  width: 120px;
  margin-right: 10px;
  text-align: center;
  cursor: pointer;
  height: 40px;
  line-height: 40px;
  background: #66c18c;
  color: #ffff;
  font-size: 18px;
  border-radius: 5px;
}
.tsgnames:hover {
  background: #20894d;
}
.preview-left {
  margin: 20px;
  //   margin: 20px;
@@ -1025,7 +1471,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 {