WXL
2024-10-24 6f35ca70caf02e1c2b7dbab32794c1cc1f5dbf60
src/components/Regular/index.vue
@@ -1,210 +1,239 @@
<template>
  <div>
    <div class="topicxq" v-for="item in TargetoptionList">
      <el-row :gutter="10">
        <el-col :span="12"
          ><el-form-item label="选项名称">
            <el-input
              type="text"
              placeholder="请输入"
              v-model="item.targetvalue"
              show-word-limit
            >
            </el-input> </el-form-item
        ></el-col>
        <el-col :span="12"
          ><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-col
        >
        <el-col :span="12" v-if="intent"
          ><el-form-item label="选项节点">
            <el-input
              type="text"
              placeholder="请输入节点"
              v-model="item.targetid"
              show-word-limit
            >
            </el-input> </el-form-item
        ></el-col>
      </el-row>
      <el-row :gutter="10" v-if="!intent">
        <el-col :span="20"
          ><el-form-item label="选项说明">
            <el-input
              type="text"
              placeholder="请输入"
              v-model="item.optiondesc"
              show-word-limit
            >
            </el-input> </el-form-item
        ></el-col>
      </el-row>
      <el-row :gutter="10" v-if="intent">
        <el-col :span="12"
          ><el-form-item label="处理">
            <el-input
              type="text"
              placeholder="(默认)无声"
              v-model="item.text"
              maxlength="10"
              show-word-limit
            >
            </el-input> </el-form-item
        ></el-col>
        <el-col :span="12"
          ><el-form-item label="选中跳转">
            <el-input
              type="text"
              placeholder="请输入题目节点"
              v-model="item.nextQuestion"
              show-word-limit
            >
            </el-input> </el-form-item
        ></el-col>
      </el-row>
      <el-form-item label="关键字(含)" prop="desc">
        <div class="xinz-inf">
          <el-tag
            :key="crux"
            type="success"
            v-for="crux in item.dynamiccruxs"
            closable
            effect="dark"
            :disable-transitions="false"
            @close="handleClosecrux(crux, item, 1)"
      <el-form :inline="true" :rules="rules" :model="item" label-width="80px">
        <el-row :gutter="10">
          <el-col :span="12"
            ><el-form-item prop="targetvalue" label="选项名称">
              <el-input
                type="text"
                placeholder="请输入(必填项)"
                v-model="item.targetvalue"
                show-word-limit
              >
              </el-input> </el-form-item
          ></el-col>
          <el-col :span="12"
            ><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-col
          >
            {{ crux }}
          </el-tag>
          <el-select
            v-model="inputValue"
            v-if="item.inputVisible"
            @change="handleInputConfirm(item)"
            filterable
            remote
            allow-create
            reserve-keyword
            default-first-option
            :loading="loading"
            placeholder="请选择"
          >
            <el-option
              v-for="items in regular"
              :key="items.label"
              :label="items.label"
              :value="items.label"
            >
            </el-option>
          </el-select>
          <el-button
            v-else
            class="button-new-tag"
            size="small"
            @click="showInput(item)"
            >+ 新增</el-button
          >
        </div>
      </el-form-item>
      <el-form-item label="关键字(非)" prop="desc">
        <div class="xinz-inf">
          <el-tag
            :key="crux"
            type="warning"
            v-for="crux in item.nodynamiccruxs"
            closable
            effect="dark"
            :disable-transitions="false"
            @close="handleClosecrux(crux, item, 2)"
          >
            {{ crux }}
          </el-tag>
          <el-select
            v-model="inputValue"
            v-if="item.noinputVisible"
            @change="handleInputConfirm(item)"
            filterable
            remote
            allow-create
            reserve-keyword
            default-first-option
            :loading="loading"
            placeholder="请选择"
          >
            <el-option
              v-for="items in noregular"
              :key="items.value"
              :label="items.label"
              :value="items.label"
            >
            </el-option>
          </el-select>
          <el-button
            v-else
            class="button-new-tag"
            size="small"
            @click="showInputno(item)"
            >+ 新增</el-button
          >
        </div>
      </el-form-item>
          <!-- <el-col :span="12" v-if="intent"
            ><el-form-item label="选项节点">
              <el-input
                type="text"
                placeholder="请输入节点"
                v-model="item.targetid"
                show-word-limit
              >
              </el-input> </el-form-item
          ></el-col> -->
        </el-row>
        <el-row :gutter="10" v-if="!intent">
          <el-col :span="20"
            ><el-form-item label="选项说明">
              <el-input
                style="width: 500px"
                type="textarea"
                :rows="2"
                placeholder="请输入"
                v-model="item.optiondesc"
                show-word-limit
              >
              </el-input> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="10" v-if="intent">
          <el-col :span="12"
            ><el-form-item label="处理">
              <el-input
                type="text"
                placeholder="(默认)无声"
                v-model="item.text"
                maxlength="10"
                show-word-limit
              >
              </el-input> </el-form-item
          ></el-col>
          <el-col :span="12" v-show="branchFlag"
            ><el-form-item label="选中跳转">
              <el-input
                type="text"
                @blur="$emit('branchFlagfn', item.nextQuestion)"
                placeholder="请输入题目节点"
                v-model="item.nextQuestion"
                show-word-limit
              >
              </el-input> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="10" v-if="scriptType == 1">
                      <el-form-item label="选中提示">
                        <el-input
                          style="width: 24vw"
                          type="textarea"
                          autosize
                          placeholder="请输入内容"
                          v-model="item.prompt"
                        >
                        </el-input
                      ></el-form-item>
                    </el-row>
        <el-row>
          <el-form-item label="关键字(含)" prop="desc" v-if="hasValue">
            <div class="xinz-inf">
              <el-tag
                :key="crux"
                type="success"
                v-for="crux in item.dynamiccruxs"
                closable
                effect="dark"
                :disable-transitions="false"
                @close="handleClosecrux(crux, item, 1)"
              >
                {{ crux }}
              </el-tag>
              <el-select
                v-model="inputValue"
                v-if="item.inputVisible"
                @change="handleInputConfirm(item)"
                filterable
                remote
                allow-create
                reserve-keyword
                default-first-option
                :loading="loading"
                placeholder="请选择"
              >
                <el-option
                  v-for="items in regular"
                  :key="items.label"
                  :label="items.label"
                  :value="items.label"
                >
                </el-option>
              </el-select>
              <el-button
                v-else
                class="button-new-tag"
                size="small"
                @click="showInput(item)"
                >+ 新增</el-button
              >
            </div>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="关键字(非)" prop="adesc" v-if="hasValue">
            <div class="xinz-inf">
              <el-tag
                :key="crux"
                type="warning"
                v-for="crux in item.nodynamiccruxs"
                closable
                effect="dark"
                :disable-transitions="false"
                @close="handleClosecrux(crux, item, 2)"
              >
                {{ crux }}
              </el-tag>
              <el-select
                v-model="inputValue"
                v-if="item.noinputVisible"
                @change="handleInputConfirm(item)"
                filterable
                remote
                allow-create
                reserve-keyword
                default-first-option
                :loading="loading"
                placeholder="请选择"
              >
                <el-option
                  v-for="items in noregular"
                  :key="items.value"
                  :label="items.label"
                  :value="items.label"
                >
                </el-option>
              </el-select>
              <el-button
                v-else
                class="button-new-tag"
                size="small"
                @click="showInputno(item)"
                >+ 新增</el-button
              >
            </div>
          </el-form-item>
        </el-row>
      <el-row :gutter="10">
        <el-col :span="16" v-if="intent">
          <el-form-item label="语音文件">
        <el-form-item label="选项文件" prop="sickness" v-if="Verbalproblem">
          <div style="width: 40vw">
            <el-upload
              class="upload-demo"
              style="display: flex"
              action="https://jsonplaceholder.typicode.com/posts/"
              :on-change="handleChange"
              :file-list="fileList"
              :limit="1"
              :on-exceed="handleExceed"
              :action="uploadImgUrl"
              :headers="headers"
              accept=".jpg,.png,image/*"
              :on-success="handleChange.bind(this, item)"
            >
              <el-button size="small" type="primary">点击上传</el-button>
            </el-upload>
          </el-form-item></el-col
        >
        <el-col :span="intent ? 8 : 22">
          <div style="text-align: right; padding-right: 10px">
            <el-button
              v-if="controlsc"
              @click="$emit('addoption', item)"
              type="success"
              icon="el-icon-circle-plus-outline"
              circle
            ></el-button>
            <el-button
              type="danger"
              icon="el-icon-delete"
              circle
              @click="$emit('deloption', item)"
            ></el-button>
            <el-button
              v-if="controlsc"
              @click="$emit('syioption', item)"
              type="primary"
              icon="el-icon-top"
              circle
            ></el-button>
            <el-button
              v-if="controlsc"
              @click="$emit('xiayioption', item)"
              type="primary"
              icon="el-icon-bottom"
              circle
            ></el-button>
            <div style="margin: 20px">
              <el-image
                style="width: 100px; height: 100px"
                :src="item.picturePath"
                :preview-src-list="[...item.picturePath]"
              >
              </el-image>
            </div>
          </div>
        </el-col>
      </el-row>
        </el-form-item>
        <el-row :gutter="10">
          <el-col>
            <div style="text-align: right; padding-right: 10px">
              <el-button
                v-if="controlsc || addoption"
                @click="$emit('addoption', item)"
                type="success"
                icon="el-icon-circle-plus-outline"
                circle
              ></el-button>
              <el-button
                type="danger"
                icon="el-icon-delete"
                circle
                @click="$emit('deloption', item)"
              ></el-button>
              <el-button
                v-if="controlsc"
                @click="$emit('syioption', item)"
                type="primary"
                icon="el-icon-top"
                circle
              ></el-button>
              <el-button
                v-if="controlsc"
                @click="$emit('xiayioption', item)"
                type="primary"
                icon="el-icon-bottom"
                circle
              ></el-button>
            </div>
          </el-col>
        </el-row>
      </el-form>
    </div>
  </div>
</template>
<script>
import store from "@/store";
import { getToken } from "@/utils/auth";
export default {
  data() {
@@ -217,6 +246,10 @@
          url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
        },
      ],
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort",
      whether: 1, //1为关键词,2为否定关键词
      inputValue: "",
      inputVisible: false,
@@ -226,6 +259,14 @@
      noregular: [],
      nodynamiccruxs: ["别", "不"],
      dynamiccruxs: ["好"],
      rules: {
        targetvalue: [
          { required: true, message: "请输入选项名称", trigger: "blur" },
        ],
        isabnormal: [
          { required: true, message: "请输入选项名称", trigger: "blur" },
        ],
      },
    };
  },
  props: {
@@ -238,9 +279,29 @@
      type: Boolean,
      default: true,
    },
    scriptType: {
      type: String,
      default: '1',
    },
    addoption: {
      type: Boolean,
      default: false,
    },
    intent: {
      type: Boolean,
      default: true,
    },
    hasValue: {
      type: Boolean,
      default: true,
    },
    Verbalproblem: {
      type: Boolean,
      default: true,
    },
    branchFlag: {
      type: Boolean,
      default: false,
    },
  },
@@ -288,9 +349,9 @@
      this.handleSelectionChange();
    },
    // 控制文件
    handleChange(file, fileList) {
      this.fileList = fileList.slice(-3);
    },
    // handleChange(file, fileList) {
    //   this.fileList = fileList.slice(-3);
    // },
    // 文件超出个数限制时的钩子
    handleExceed(files, fileList) {
      this.$message.warning(
@@ -364,6 +425,17 @@
      console.log(this.TargetoptionList);
      this.$emit("handleSelectionChange", selection);
    },
    // 选项文件上传
    handleChange(item, response, file, fileList) {
      console.log(response, "response");
      console.log(item, "item");
      console.log(this.TargetoptionList, "this.TargetoptionList");
      let index = this.TargetoptionList.findIndex(
        (obj) => obj.guid == item.guid
      );
      console.log(index);
      this.TargetoptionList[index].picturePath = response.url;
    },
  },
};
</script>