WXL
2024-08-05 ad0ecacbc73d16c9b95b79ac3c82868cbff33e44
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -141,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">
@@ -282,6 +257,13 @@
              @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
@@ -300,7 +282,7 @@
          </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"
@@ -311,6 +293,7 @@
                  align="center"
                  key="sort"
                  prop="sort"
                  width="50"
                />
                <el-table-column
                  label="题目标题"
@@ -320,14 +303,60 @@
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  label="题型"
                  align="center"
                  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"
@@ -363,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.scriptTopic"
                    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="是否必填">
@@ -416,6 +450,25 @@
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <el-row>
                  <el-col :span="12">
                    <el-form-item
                      label="题目分值"
                      v-if="topicobj.scoretype == 1"
                    >
                      <el-input
                        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
@@ -617,7 +670,7 @@
        <el-button type="primary" @click="laststep()">上一步</el-button>
      </div>
    </div>
    <!-- 预览模版弹窗 -->
    <!-- 添加题目弹窗 -->
    <el-drawer
      title="添加题目"
      :visible.sync="drawer"
@@ -703,6 +756,14 @@
        />
      </div>
    </el-drawer>
    <!-- 添加适用疾病窗口 -->
    <Optional-Form
      ref="child"
      :dialogVisiblepatient="dialogVisiblepatient"
      :overallCase="illnesslist"
      @addoption="dialogVisiblepatient = false"
      @kkoption="dialogVisiblepatient = true"
    />
  </div>
</template>
@@ -714,7 +775,7 @@
  getQtemplateclassify,
  delQtemplateclassify,
  addQtemplateclassify,
  getQtemplatelist,
  getQtemplateobj,
  compileQtemplate,
  Qtemplateinfo,
  compileissue,
@@ -728,9 +789,14 @@
  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: {
@@ -747,6 +813,7 @@
      radioas: "", //填空题答案
      dynamicTags: [],
      inputVisible: false,
      dialogVisiblepatient: false, //适用疾病窗口
      inputValue: "",
      topicobj: {},
      // 总条数
@@ -764,11 +831,7 @@
        { value: "scriptTopic", table: "scriptTopic" },
      ],
      appraiselist: [
        { label: "分数", value: "1" },
        { label: "ABC等级", value: "2" },
        { label: "优良等级", value: "3" },
      ],
      appraiselist: [],
      fileList: [
        {
@@ -803,11 +866,13 @@
      themelist: [],
      languagelist: [],
      courtyardlist: [],
      askvaluetype: [],
      precedencetype: [],
      inputValueillness: "",
      inputVisible: false,
      inputVisibleillness: false,
      illnessVisible: false, //指标疾病弹框
      Operateit: true,
      deptOptions: [],
      optionsillness: [],
      delScriptVOList: [],
@@ -861,7 +926,24 @@
    this.required = store.getters.required;
    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: {
@@ -891,31 +973,27 @@
    getissueinfo() {
      this.id = this.$route.query.id;
      if (this.id) {
        getQtemplatelist({ svyid: this.id }).then((res) => {
        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(",");
          console.log(this.tempDetpRelevanceslist);
        });
        getillness({ outid: this.id, type: 5 }).then((res) => {
          this.illnesslist = res.rows;
          this.illnesslist.forEach((item) => {
            item.icdname = item.icd10name;
          });
        });
      }
      getillnesslist({
        pageNum: 1,
        pageSize: 100,
      }).then((response) => {
        this.optionsillness = response.rows;
      });
      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;
      });
    },
@@ -1067,6 +1145,13 @@
      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;
        }
        if (item.svyLibTemplateTargetoptions) {
          item.svyLibTemplateTargetoptions.forEach((items) => {
            items.nextQuestion = Number(item.sort) + 1;
@@ -1160,60 +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(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("编辑成功");
    },
@@ -1357,8 +1404,7 @@
  // display: flex;
}
.sidecolumn {
  margin: 20px;
  margin-bottom: 0;
  margin: 10px 20px 0 20px;
  padding: 20px;
  background: #edf1f7;
  border: 1px solid #dcdfe6;
@@ -1372,6 +1418,8 @@
  // 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),
@@ -1435,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;
}
@@ -1442,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;
@@ -1452,7 +1518,7 @@
    }
  }
  .presentation-right {
    width: 50%;
    width: 55%;
    max-height: 688px;
    padding: 0 20px;
    font-size: 18px;
@@ -1475,6 +1541,13 @@
.custom-width {
  width: 100px; /* 设置宽度样式 */
}
.el-select {
  width: 40%;
}
.el-cascader {
  width: 40%;
}
::v-deep .addtopic-input {
  input {
    background: #02a7f0;