WXL
2024-08-21 adf7c9495ac348644079592059ea4c4d95b84b99
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -413,38 +413,57 @@
                    </el-form-item>
                  </el-col>
                </el-row>
                <el-row :gutter="10">
                  <el-col :span="12"
                    ><el-form-item label="题目类型">
                      <el-select
                        v-model="topicobj.scriptType"
                        disabled
                        size="medium"
                        filterable
                        placeholder="请选择分类"
                      >
                        <el-option
                          class="topicobjaa"
                          v-for="item in askvaluetype"
                          :key="item.value"
                          :label="item.label"
                          :value="item.value"
                        >
                        </el-option> </el-select></el-form-item
                  ></el-col>
                  <el-col :span="12">
                    <el-form-item label="题目分数">
                      <el-input
                        v-model="topicobj.scriptTopic"
                        placeholder="请输入标题"
                      ></el-input> </el-form-item
                  ></el-col>
                </el-row>
                <el-row :gutter="10">
                  <el-col :span="12"
                    ><el-form-item label="是否必填">
                      <el-select
                        v-model="topicobj.ismandatory"
                        placeholder="请选择"
                      >
                        <el-option
                          v-for="item in required"
                          :key="item.value"
                          :label="item.label"
                          :value="item.value"
                      <el-radio-group v-model="topicobj.ismandatory">
                        <el-radio
                          v-for="(item, index) in required"
                          :label="item.value"
                          >{{ item.label }}</el-radio
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col>
                      </el-radio-group>
                    </el-form-item></el-col
                  >
                  <el-col :span="12"
                    ><el-form-item label="是否可用">
                      <el-select
                        v-model="topicobj.isavailable"
                        placeholder="请选择"
                      >
                        <el-option
                          v-for="item in usable"
                          :key="item.value"
                          :label="item.label"
                          :value="item.value"
                      <el-radio-group v-model="topicobj.isavailable">
                        <el-radio
                          v-for="(item, index) in usable"
                          :label="item.value"
                          >{{ item.label }}</el-radio
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col>
                      </el-radio-group>
                    </el-form-item></el-col
                  >
                </el-row>
                <el-row>
                  <el-col :span="12">
@@ -465,7 +484,9 @@
                    <el-radio :label="0">否</el-radio>
                  </el-radio-group>
                </el-form-item>
                <div v-if="topicobj.scriptType != 3">
                <div
                  v-if="topicobj.scriptType == 1 || topicobj.scriptType == 2"
                >
                  <div class="headline">选项设置</div>
                  <div
                    class="topicxq"
@@ -565,7 +586,7 @@
                        <el-input
                          style="width: 20vw"
                          type="textarea"
                          autosize
                          :rows="2"
                          placeholder="此处放置患者回答"
                          v-model="topicobj.reply"
                        >
@@ -573,6 +594,18 @@
                      ></el-form-item>
                    </el-row>
                    <el-form-item label="分值">
                      <template #label>
                        分值
                        <el-tooltip
                          class="item"
                          effect="light"
                          content="填空题分数值由负责人员在问卷手机后手动评价。"
                          placement="top-start"
                        >
                          <i class="el-icon-warning-outline"></i>
                        </el-tooltip>
                        <!-- 在标签后插入红色星号 -->
                      </template>
                      <el-input
                        type="text"
                        placeholder="请输入选项分值"
@@ -673,83 +706,397 @@
      custom-class="demo-drawer"
      size="50%"
    >
      <div class="preview-left">
        <el-form
          :model="queryParams"
          ref="queryForm"
          size="small"
          :inline="true"
          label-width="98px"
        >
          <el-form-item label="问题标题" prop="scriptTopic">
            <el-input
              v-model="queryParams.scriptTopic"
              placeholder="请输入"
              clearable
              style="width: 200px"
              @keyup.enter.native="getaddtopiclist"
            />
          </el-form-item>
          <el-form-item>
            <el-button
              type="primary"
              icon="el-icon-search"
              size="medium"
              @click="getaddtopiclist"
              >搜索</el-button
            >
            <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
              >重置</el-button
            >
          </el-form-item>
        </el-form>
        <el-table v-loading="loading" :data="userList">
          <el-table-column
            label="标题"
            align="center"
            key="scriptTopic"
            prop="scriptTopic"
            width="100"
          />
          <el-table-column
            label="问题内容"
            align="center"
            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"
          />
          <el-table-column
            label="操作"
            align="center"
            class-name="small-padding fixed-width"
          >
            <template slot-scope="scope">
              <el-button size="medium" type="text" @click="addtopic(scope.row)"
                ><span class="button-textxg"
                  ><i class="el-icon-circle-plus-outline"></i>添加</span
                ></el-button
      <div style="margin: 0 25px">
        <el-tabs v-model="activeName">
          <el-tab-pane label="题库选取" name="first">
            <div class="preview-left">
              <el-form
                :model="queryParams"
                ref="queryForm"
                size="small"
                :inline="true"
                label-width="98px"
              >
            </template>
          </el-table-column>
        </el-table>
        <pagination
          v-show="total > 0"
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="getaddtopiclist"
        />
                <el-form-item label="问题标题" prop="scriptTopic">
                  <el-input
                    v-model="queryParams.scriptTopic"
                    placeholder="请输入"
                    clearable
                    style="width: 200px"
                    @keyup.enter.native="getaddtopiclist"
                  />
                </el-form-item>
                <el-form-item label="题目类型" prop="scriptTopic">
                  <el-select
                    v-model="queryParams.scriptType"
                    size="medium"
                    filterable
                    placeholder="请选择分类"
                  >
                    <el-option
                      class="topicobjaa"
                      v-for="item in askvaluetype"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item>
                  <el-button
                    type="primary"
                    icon="el-icon-search"
                    size="medium"
                    @click="getaddtopiclist"
                    >搜索</el-button
                  >
                  <el-button
                    icon="el-icon-refresh"
                    size="medium"
                    @click="resetQuery"
                    >重置</el-button
                  >
                </el-form-item>
              </el-form>
              <el-table v-loading="loading" :data="userList">
                <el-table-column
                  label="标题"
                  align="center"
                  key="scriptTopic"
                  prop="scriptTopic"
                  width="100"
                />
                <el-table-column
                  label="问题内容"
                  align="center"
                  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"
                />
                <el-table-column
                  label="操作"
                  align="center"
                  class-name="small-padding fixed-width"
                >
                  <template slot-scope="scope">
                    <el-button
                      size="medium"
                      type="text"
                      @click="addtopic(scope.row)"
                      ><span class="button-textxg"
                        ><i class="el-icon-circle-plus-outline"></i>添加</span
                      ></el-button
                    >
                  </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-tab-pane>
          <el-tab-pane label="手动配置" name="second">
            <div class="preview-left">
              <el-form
                :inline="true"
                :model="indexform"
                class="demo-form-inline"
              >
                <div class="headline">
                  题目设置详情
                  <span style="margin-left: 30px"
                    ><el-button type="primary" @click="Submittopicobj"
                      >保存新增</el-button
                    ></span
                  >
                </div>
                <el-divider></el-divider>
                <div>
                  <el-row :gutter="10">
                    <el-col :span="12">
                      <el-form-item label="题目标题">
                        <el-input
                          v-model="indexform.scriptTopic"
                          placeholder="请输入题目标题"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :span="12">
                      <el-form-item label="题目得分">
                        <el-input
                          v-model="indexform.score"
                          placeholder="请输入分数"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <el-row :gutter="10">
                    <el-col :span="12">
                      <el-form-item label="评价类型">
                        <el-select
                          v-model="indexform.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-col :span="12">
                      <el-form-item label="语言">
                        <el-select
                          v-model="indexform.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="12">
                      <el-form-item label="是否可用">
                        <el-radio-group v-model="indexform.isAvailable">
                          <el-radio
                            v-for="(item, index) in usable"
                            :label="item.value"
                            >{{ item.label }}</el-radio
                          >
                        </el-radio-group>
                      </el-form-item>
                    </el-col>
                    <el-col :span="12">
                      <el-form-item label="是否必填">
                        <el-radio-group v-model="indexform.ismandatory">
                          <el-radio
                            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="18"
                      ><el-form-item label="题目内容">
                        <el-input
                          style="width: 400px"
                          type="textarea"
                          v-model="indexform.scriptContent"
                          placeholder="请从左侧列表选择"
                        ></el-input> </el-form-item
                    ></el-col>
                  </el-row>
                </div>
                <div>
                  <el-form-item label="指标名称" prop="deptId">
                    <el-input
                      v-model="indexform.targetname"
                      placeholder="请输入指标名称"
                      maxlength="20"
                    />
                  </el-form-item>
                  <el-form-item label="指标描述" prop="deptId">
                    <el-input
                      v-model="indexform.targetdesc"
                      placeholder="请输入指标描述"
                      maxlength="60"
                    />
                  </el-form-item>
                  <el-row>
                    <el-col :span="20">
                      <el-form-item label="值类型">
                        <el-radio-group v-model="indexform.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-row>
                  <el-row>
                    <el-col :span="20">
                      <el-form-item label="题目类型">
                        <el-radio-group v-model="indexform.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>
                </div>
                <div class="topicxq" v-if="indexform.scriptType == 4">
                  <el-row>
                    <el-col :span="20">
                      <el-form-item label="收集内容">
                        <el-input
                          style="width: 400px"
                          type="textarea"
                          v-model="indexform.value"
                          placeholder="问题收集内容"
                        ></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
                <div v-else>
                  <div class="headline">
                    <div class="basics">
                      选项设置
                      <span style="margin-left: 30px"
                        ><el-button type="primary" round @click="addoption"
                          >+新增</el-button
                        ></span
                      >
                    </div>
                  </div>
                  <el-divider></el-divider>
                  <div
                    class="topicxq"
                    v-for="item in indexform.svyLibTemplateTargetoptions"
                    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="indexform.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="indexform.scoretype == 2"
                          label="ABC等级"
                        >
                          <el-radio-group v-model="item.score">
                            <el-radio label="A">A</el-radio>
                            <el-radio label="B">B</el-radio>
                            <el-radio label="C">C</el-radio>
                          </el-radio-group>
                        </el-form-item>
                        <el-form-item
                          v-else-if="indexform.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="indexform.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: 400px"
                          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>
              </el-form>
            </div>
          </el-tab-pane>
        </el-tabs>
      </div>
    </el-drawer>
    <!-- 添加适用疾病窗口 -->
@@ -807,6 +1154,7 @@
      radio: "false", //单选题选中
      radios: [], //多选题选中
      radioas: "", //填空题答案
      activeName: "first",
      dynamicTags: [],
      inputVisible: false,
      dialogVisiblepatient: false, //适用疾病窗口
@@ -818,6 +1166,9 @@
        svyTemplateLibScripts: [],
        tempDetpRelevances: [],
        svyLibTemplateTagList: [],
      },
      indexform: {
        svyLibTemplateTargetoptions: [],
      },
      rules: {},
      rulesa: {},
@@ -998,8 +1349,7 @@
    submitForm(formName) {
      this.$modal.loading("正在上传数据,请稍候...");
      this.ruleForm.suitway = this.ruleForm.suitway.join(",");
      if (condition) {
      }
      if (this.id) {
        this.ruleForm.isoperation = 2;
        compileQtemplate(this.ruleForm).then((res) => {
@@ -1014,9 +1364,7 @@
        compileQtemplate(this.ruleForm).then((res) => {
          this.$modal.msgSuccess("新增成功");
          this.confirmillness(res.data);
          this.$modal.closeLoading();
          this.$router.go(-1);
        });
      }
@@ -1046,7 +1394,6 @@
      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;
        }
@@ -1158,7 +1505,24 @@
    },
    // 修改题目信息
    Submittopicobj() {},
    Submittopicobj() {
      this.$modal
        .confirm(
          '是否确认新增名称为"' + this.indexform.scriptTopic + '"的问题数据?'
        )
        .then(() => {
          this.indexform.isoperation = 1;
          this.indexform.svyLibTemplateTargetoptions.forEach((item) => {
            item.isoperation = 1;
          });
          this.ruleForm.svyTemplateLibScripts.push(this.indexform);
          this.indexform = { svyTemplateLibScripts: [] };
          this.drawer = false;
          this.sortFn();
          this.$modal.msgSuccess("题目新增成功,保存模版失效");
        });
    },
    // 新增变量
    addvariable() {
      this.variablelist.push({
@@ -1391,6 +1755,34 @@
      console.log(arraysGreaterThan10, "筛选错误路线大于13分");
    },
    // 新问题新增
    addoption() {
      if (!this.indexform.svyLibTemplateTargetoptions) {
        this.indexform.svyLibTemplateTargetoptions = [];
      }
      this.indexform.svyLibTemplateTargetoptions.push({
        score: "",
        isoperation: 1,
      });
      console.log(this.indexform.svyLibTemplateTargetoptions);
    },
    // 选项文件上传
    handleChange(item, response, file, fileList) {
      console.log(response);
      if (response.code == 200) {
        console.log(item);
        let index = this.indexform.svyLibTemplateTargetoptions.findIndex(
          (obj) => obj.optioncontent == item.optioncontent
        );
        console.log(index);
        this.indexform.svyLibTemplateTargetoptions[index].picturePath =
          response.url;
        console.log(this.indexform.svyLibTemplateTargetoptions[index]);
        this.$forceUpdate();
      } else {
        this.$message.error("图片插入失败");
      }
    },
  },
};
</script>
@@ -1454,6 +1846,14 @@
      margin-bottom: 10px;
    }
  }
}
.headline {
  display: flex;
  justify-content: space-between;
  font-size: 20px;
  border-left: 3px solid #41a1be;
  padding-left: 5px;
  margin: 15px 0;
}
.xinz-inf {
  font-size: 18px;
@@ -1534,11 +1934,22 @@
    }
  }
}
.topicxq {
  background-color: #e2f5fc;
  border-radius: 4px;
  margin-top: 15px;
  margin-left: 10%;
  padding-left: 20px;
  padding-top: 15px;
  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);
}
.custom-width {
  width: 100px; /* 设置宽度样式 */
}
.el-select {
  width: 40%;
  width: 280px;
}
.el-cascader {