WXL
2024-06-21 0c80816a30c8bc4a3613a2302a30202d84784c1d
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -2,14 +2,27 @@
  <div class="Questionnairemanagement">
    <!-- 左侧栏 -->
    <div class="sidecolumn">
      <div style="height: 400px">
        <el-steps direction="vertical" :active="Editprogress">
          <el-step title="基础信息"></el-step>
          <el-step title="问卷题目"></el-step>
          <el-step
            title="问卷预览"
            description="查看问卷预览,可导出PDF"
          ></el-step>
      <div>
        <el-steps finish-status="success" :active="Editprogress" simple>
          <el-step>
            <template slot="title">
              <span style="cursor: pointer" @click="Editprogress = 1"
                >基础信息</span
              >
            </template>
          </el-step>
          <el-step>
            <template slot="title">
              <span style="cursor: pointer" @click="Editprogress = 2"
                >问卷题目</span
              >
            </template>
          </el-step>
          <el-step description="查看问卷预览,可导出PDF">
            <span slot="title" style="cursor: pointer" @click="Editprogress = 3"
              >问卷预览</span
            >
          </el-step>
        </el-steps>
      </div>
    </div>
@@ -26,23 +39,48 @@
          label-width="100px"
          class="demo-ruleForm"
        >
          <el-form-item label="问卷分类" prop="region">
            <el-select
              v-model="ruleForm.categoryid"
              size="medium"
              filterable
              placeholder="请选择分类"
            >
              <el-option
                class="ruleFormaa"
                v-for="item in optionsclass"
                :key="item.id"
                :label="item.name"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-row :gutter="10">
            <el-col :span="10">
              <el-form-item label="问卷分类" prop="region">
                <el-select
                  v-model="ruleForm.categoryid"
                  size="medium"
                  filterable
                  placeholder="请选择分类"
                >
                  <el-option-group
                    v-for="group in optionsclass"
                    :key="group.id"
                    :label="group.name"
                  >
                    <el-option
                      v-for="item in group.svyLibTemplateCategoryList"
                      :key="item.id"
                      :label="item.name"
                      :value="item.id"
                    >
                    </el-option>
                  </el-option-group>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="10">
              <el-form-item label="评价类型">
                <el-select
                  v-model="ruleForm.scoreType"
                  placeholder="请选择分类"
                >
                  <el-option
                    v-for="group in appraiselist"
                    :key="group.value"
                    :label="group.label"
                    :value="group.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-form-item label="问卷标题" prop="name">
            <div style="width: 30%">
              <el-input v-model="ruleForm.svyname"></el-input>
@@ -249,59 +287,81 @@
      <div v-if="Editprogress == 2">
        <div class="leftvlue-jbxx">问卷题目设置</div>
        <el-divider></el-divider>
        <div class="addtopic">
          <el-button
            type="primary"
            icon="el-icon-plus"
            round
            @click="getaddtopiclist"
            >添加题目</el-button
          >
        <div style="display: flex; justify-content: space-between">
          <div>
            <el-button
              type="primary"
              icon="el-icon-plus"
              round
              @click="getaddtopiclist"
              >添加题目</el-button
            >
          </div>
          <div style="display: flex">
            <span style="width: 180px; font-size: 20px; font-weight: normal; color: red"
              >问卷总分:</span
            >
            <el-input
              v-model="ruleForm.scriptScore"
              placeholder="请输入分数"
            ></el-input>
          </div>
        </div>
        <div class="presentation">
          <div class="presentation-left">
            <el-card class="box-card" style="min-height: 688px">
              <el-table v-loading="loading" :data="ruleForm.svyLibTopics">
              <el-table v-loading="loading" :data="ruleForm.svyLibScripts">
                <el-table-column
                  label="序号"
                  align="center"
                  key="topicid"
                  prop="topicid"
                  key="guid"
                  prop="guid"
                />
                <el-table-column
                  label="题目"
                  label="题目标题"
                  align="center"
                  key="topic"
                  prop="topic"
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  label="主要内容"
                  label="题目内容"
                  align="center"
                  key="topicContent"
                  prop="topicContent"
                  key="script"
                  prop="script"
                  :show-overflow-tooltip="true"
                />
                <el-table-column
                  label="操作"
                  align="center"
                  width="200"
                  width="250"
                  class-name="small-padding fixed-width"
                >
                  <template slot-scope="scope">
                    <el-button
                      icon="el-icon-edit"
                      type="primary"
                      round
                      circle
                      @click="handleUpdate(scope.row)"
                      >修改</el-button
                    >
                    ></el-button>
                    <el-button
                      type="danger"
                      icon="el-icon-delete"
                      circle
                      @click="handleDelete(scope.row)"
                    ></el-button>
                    <el-button
                      @click="syioption(scope.row)"
                      type="success"
                      icon="el-icon-top"
                      circle
                    ></el-button>
                    <el-button
                      @click="xiayioption(scope.row)"
                      type="success"
                      icon="el-icon-bottom"
                      circle
                    ></el-button>
                  </template>
                </el-table-column>
@@ -364,7 +424,7 @@
                <div class="headline">选项设置</div>
                <div
                  class="topicxq"
                  v-for="item in topicobj.svyLibTopicoptions"
                  v-for="item in topicobj.svyLibTemplateTargetoptions"
                >
                  <el-row :gutter="10">
                    <el-col :span="11"
@@ -372,7 +432,7 @@
                        <el-input
                          type="text"
                          placeholder="请输入"
                          v-model="item.topicid"
                          v-model="item.id"
                          show-word-limit
                        >
                        </el-input> </el-form-item
@@ -441,7 +501,9 @@
        >
        <el-button type="primary" @click="laststep()">上一步</el-button>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
        <el-button @click="submitForm('ruleForm')">保存题目数据</el-button>
        <el-button @click="Departmenttreatment('ruleForm')"
          >保存题目数据</el-button
        >
      </div>
      <!-- 问卷预览 -->
      <div v-if="Editprogress == 3">
@@ -502,7 +564,7 @@
      title="添加题目"
      :visible.sync="drawer"
      custom-class="demo-drawer"
      width="50%"
      size="50%"
    >
      <div class="preview-left">
        <el-form
@@ -512,9 +574,9 @@
          :inline="true"
          label-width="98px"
        >
          <el-form-item label="标题" prop="userName">
          <el-form-item label="问题标题" prop="topic">
            <el-input
              v-model="queryParams.userName"
              v-model="queryParams.topic"
              placeholder="请输入"
              clearable
              style="width: 200px"
@@ -546,8 +608,8 @@
          <el-table-column
            label="问题内容"
            align="center"
            key="topicContent"
            prop="topicContent"
            key="script"
            prop="script"
            width="200"
            :show-overflow-tooltip="true"
          />
@@ -566,6 +628,13 @@
            </template>
          </el-table-column>
        </el-table>
        <pagination
          v-show="total > 0"
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="getaddtopiclist"
        />
      </div>
    </el-drawer>
  </div>
@@ -585,6 +654,7 @@
  compileissue,
  delQtemplateinfo,
  Followupinfo,
  issueinfo,
  getissuelist,
  deltargetillness,
  addtargetillness,
@@ -597,7 +667,7 @@
  data() {
    return {
      sidecolumnrabs: "left", //方向
      Editprogress: 2, //编辑进度
      Editprogress: 1, //编辑进度
      currentVersion: "1.2.3", //当前版本
      loading: false, // 遮罩层
      drawer: false, //控制展开
@@ -617,6 +687,11 @@
      optionlist: [
        { value: "topic", table: "topic" },
        { value: "topic", table: "topic" },
      ],
      appraiselist: [
        { label: "分数", value: "1" },
        { label: "ABC等级", value: "2" },
        { label: "优良等级", value: "3" },
      ],
      fileList: [
@@ -659,11 +734,12 @@
      illnessVisible: false, //指标疾病弹框
      deptOptions: [],
      optionsillness: [],
      delScriptVOList: [],
      illnesslistapi: [],
      illnesslist: [],
      tempDetpRelevanceslist: [],
      optionstag: [],
      xjxsoptions: [],
      valuetype: [],
      usable: [],
      required: [],
      mode: [], //方式
@@ -678,18 +754,34 @@
  created() {
    this.gettabList();
    this.getissueinfo();
    this.mode = store.getters.mode;
    this.mode = store.getters.Askmode;
    this.languagelist = store.getters.languagelist;
    this.usable = store.getters.usable;
    this.required = store.getters.required;
    this.xjxsoptions = store.getters.xjxsoptions;
    this.valuetype = store.getters.valuetype;
    this.courtyardlist = store.getters.courtyardlist;
  },
  methods: {
    // 公共方法---------------
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
    },
    // 递归扁平化
    flattenArray(arr) {
      let result = [];
      arr.forEach((item) => {
        result.push(item);
        if (item.svyLibTemplateCategoryList) {
          result = result.concat(
            this.flattenArray(item.svyLibTemplateCategoryList)
          );
          delete item.svyLibTemplateCategoryList;
        }
      });
      return result;
    },
    // -----------------------------
    // 获取数据
    getissueinfo() {
      this.id = this.$route.query.id;
@@ -712,7 +804,9 @@
      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;
      });
    },
@@ -738,10 +832,12 @@
    Departmenttreatment() {
      this.ruleForm.deptNames = JSON.stringify(this.tempDetpRelevanceslist);
      console.log(this.tempDetpRelevanceslist);
      this.ruleForm.svyLibScripts = this.ruleForm.svyLibScripts.concat(
        this.delScriptVOList
      );
      const result = this.tempDetpRelevanceslist.map(
        (subArr) => subArr[subArr.length - 1]
      );
      console.log(result);
      // id数组查数组对象
      result.forEach((item) => {
        const condition = this.ruleForm.tempDetpRelevances.some(
@@ -755,20 +851,18 @@
          });
        }
      });
      console.log(this.ruleForm.tempDetpRelevances);
      // 数组对象查id数组
      this.ruleForm.tempDetpRelevances.forEach((item) => {
        const condition = result.some((obj) => obj === item.deptId);
        if (!condition) {
          console.log(condition);
          const index = this.ruleForm.tempDetpRelevances.indexOf(item);
          this.ruleForm.tempDetpRelevances[index].delFlag = 1;
        }
      });
      console.log(this.ruleForm.tempDetpRelevances);
      setTimeout(() => {
        this.submitForm();
      }, 1000);
      // this.submitForm();
    },
    // 下一步
    nextstep() {
@@ -810,17 +904,49 @@
    // 新增题目
    addtopic(row) {
      row.isoperation = 1;
      this.ruleForm.svyLibTopics.push(row);
      row.svyLibScriptOptions.forEach((item) => {
        item.isoperation = 1;
      });
      this.ruleForm.svyLibScripts.push(row);
      this.$modal.msgSuccess("新增成功");
    },
    handleDelete(row) {
      this.ruleForm.svyLibTopics.splice(
        this.ruleForm.svyLibTopics.indexOf(row),
        1
      );
      let index = this.ruleForm.svyLibScripts.indexOf(row);
      this.ruleForm.svyLibScripts.splice(index, 1);
      row.isoperation = 3;
      this.delScriptVOList.push(row);
      this.sortFn();
    },
    handleUpdate(row) {
      console.log(row);
      this.topicobj = row;
      // getissuelist({ svyid: row.svyid }).then((res) => {
      // });
    },
    syioption(row) {
      const index = this.getIndexInArray(this.ruleForm.svyLibScripts, row);
      const item = this.ruleForm.svyLibScripts.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.ruleForm.svyLibScripts.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
      this.sortFn();
    },
    xiayioption(row) {
      const index = this.getIndexInArray(this.ruleForm.svyLibScripts, row);
      const item = this.ruleForm.svyLibScripts.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
      this.ruleForm.svyLibScripts.splice(index + 1, 0, item); // 将item插入到索引位置的前一位
      this.sortFn();
    },
    sortFn() {
      this.ruleForm.svyLibScripts = this.ruleForm.svyLibScripts.map(
        (item, index) => {
          return {
            guid: index + 1,
            svyid: item.svyid,
            script: item.script,
            script: item.script,
          };
        }
      );
      console.log(this.ruleForm.svyLibScripts);
    },
    // 修改题目信息
@@ -974,28 +1100,23 @@
<style lang="scss" scoped>
.Questionnairemanagement {
  display: flex;
  // display: flex;
}
.sidecolumn {
  width: 300px;
  min-height: 100vh;
  text-align: center;
  //   display: flex;
  //   margin-top: 20px;
  margin: 20px;
  margin-bottom: 0;
  padding: 30px;
  padding: 20px;
  background: #edf1f7;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
}
.leftvlue {
  //   display: flex;
  //   flex: 1;
  width: 80%;
  margin-top: 20px;
  //   margin: 20px;
  // //   display: flex;
  // //   flex: 1;
  // width: 80%;
  // margin-top: 20px;
  margin: 20px;
  padding: 30px;
  background: #ffff;
  border: 1px solid #dcdfe6;