WXL
2024-08-19 9bc27231d681cbc1bae6d8f199521d332c9c23f7
src/views/repositoryai/templateku/configurat/index.vue
@@ -212,12 +212,24 @@
              >
            </div>
          </el-form-item>
          <el-form-item label="适用疾病" prop="region">
          <div class="xinz-infs">
            <el-form-item label="适用疾病" prop="region">
              <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>
          </div>
          <div style="margin-left: 120px; margin-bottom: 10px">
            <el-button type="warning" @click="$refs.child.handleAddpatient()"
              >添加疾病</el-button
              >疾病详情</el-button
            >
          </el-form-item>
          </div>
          <el-form-item label="适用院区" prop="region">
            <el-select
              style="width: 500px"
@@ -410,11 +422,11 @@
              >
                <div class="headline">
                  题目设置详情
                  <span style="margin-left: 30px"
                  <!-- <span style="margin-left: 30px"
                    ><el-button type="primary" @click="Submittopicobj"
                      >保存</el-button
                    ></span
                  >
                  > -->
                </div>
                <el-form-item label="题目标题">
                  <el-input
@@ -462,6 +474,10 @@
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <el-form-item label="问题语音" v-if="topicobj.scriptVoice">
                  <mini-audio :audio-source="topicobj.scriptVoice"></mini-audio>
                </el-form-item>
                <div
                  class="topicxq"
                  v-if="topicobj.valueType == 2 || topicobj.valueType == 3"
@@ -512,38 +528,16 @@
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <!-- <el-row :gutter="10">
                      <el-col :span="12"
                        ><el-form-item label="处理">
                          <el-input
                            type="text"
                            placeholder="(默认)无声"
                            v-model="topicobj.text"
                            maxlength="10"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row> -->
                    <el-row :gutter="10">
                      <el-col :span="16">
                        <el-form-item label="语音文件">
                          <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"
                          >
                            <el-button size="small" type="primary"
                              >点击上传</el-button
                            >
                          </el-upload>
                        </el-form-item></el-col
                      >
                        <el-form-item
                          label="无匹配语音"
                          v-if="topicobj.nomatchvoice"
                        >
                          <mini-audio
                            :audio-source="topicobj.nomatchvoice"
                          ></mini-audio> </el-form-item
                      ></el-col>
                    </el-row>
                  </div>
                  <div class="topicxq">
@@ -560,38 +554,21 @@
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <!-- <el-row :gutter="10">
                      <el-col :span="12"
                        ><el-form-item label="处理">
                          <el-input
                            type="text"
                            placeholder="(默认)无声"
                            v-model="topicobj.text"
                            maxlength="10"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row> -->
                    <el-row :gutter="10">
                      <el-col :span="16">
                        <el-form-item label="语音文件">
                          <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"
                          >
                            <el-button size="small" type="primary"
                              >点击上传</el-button
                            >
                          </el-upload>
                        </el-form-item></el-col
                      >
                        <el-form-item
                          label="语音文件"
                          v-if="topicobj.noclearlyvoice"
                        >
                          <mini-audio
                            :audio-source="
                              topicobj.noclearlyvoice
                                ? topicobj.noclearlyvoice
                                : 'https://example.com/example.mp3'
                            "
                          ></mini-audio> </el-form-item
                      ></el-col>
                    </el-row>
                  </div>
                  <div class="topicxq">
@@ -608,38 +585,21 @@
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <!-- <el-row :gutter="10">
                      <el-col :span="12"
                        ><el-form-item label="处理">
                          <el-input
                            type="text"
                            placeholder="(默认)无声"
                            v-model="topicobj.text"
                            maxlength="10"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row> -->
                    <el-row :gutter="10">
                      <el-col :span="16">
                        <el-form-item label="语音文件">
                          <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"
                          >
                            <el-button size="small" type="primary"
                              >点击上传</el-button
                            >
                          </el-upload>
                        </el-form-item></el-col
                      >
                        <el-form-item
                          label="语音文件"
                          v-if="topicobj.sliencevoice"
                        >
                          <mini-audio
                            :audio-source="
                              topicobj.sliencevoice
                                ? topicobj.sliencevoice
                                : 'https://example.com/example.mp3'
                            "
                          ></mini-audio> </el-form-item
                      ></el-col>
                    </el-row>
                  </div>
                </div>
@@ -734,82 +694,441 @@
      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="userName">
            <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
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="getaddtopiclist"
        />
                <el-form-item label="标题" prop="userName">
                  <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
                    >
                  </template>
                </el-table-column>
              </el-table>
              <pagination
                :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>
                <el-form-item label="题目标题">
                  <el-input
                    v-model="indexform.scriptTopic"
                    placeholder="请输入题目标题"
                  ></el-input>
                </el-form-item>
                <el-form-item label="问题节点">
                  <el-input
                    v-model="indexform.targetid"
                    placeholder="请输入问题节点"
                  ></el-input>
                </el-form-item>
                <el-row :gutter="10">
                  <el-col :span="12"
                    ><el-form-item label="是否必填">
                      <el-select
                        v-model="indexform.isMust"
                        placeholder="默认必填"
                      >
                        <el-option
                          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="12"
                    ><el-form-item label="取值类型">
                      <el-select
                        v-model="indexform.valueType"
                        placeholder="请选择"
                        :disabled="true"
                      >
                        <el-option
                          v-for="item in valuetype"
                          :key="item.value"
                          :label="item.label"
                          :value="item.value"
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col> -->
                </el-row>
                <el-row>
                  <el-col :span="6">
                    <el-form-item label="问题语音" prop="verbaltrickyy">
                      <el-upload
                        class="upload-demo"
                        :action="uploadImgUrl"
                        :headers="headers"
                        :show-file-list="false"
                        :on-success="
                          (response, file) => handleChange(response, file, 1)
                        "
                        accept=".wav,.mp3"
                        :limit="1"
                      >
                        <el-button size="small" type="primary"
                          >点击上传</el-button
                        >
                      </el-upload>
                    </el-form-item>
                  </el-col>
                  <el-col :span="6">
                    <span
                      style="font-size: 18px; margin-top: 10px"
                      v-if="indexform.scriptVoice"
                      >{{
                        indexform.scriptVoice.substring(
                          indexform.scriptVoice.lastIndexOf("/") + 1
                        )
                      }}</span
                    >
                  </el-col>
                  <el-col :span="6">
                    <mini-audio
                      :audio-source="
                        indexform.scriptVoice
                          ? indexform.scriptVoice
                          : 'https://example.com/example.mp3'
                      "
                    ></mini-audio>
                  </el-col>
                </el-row>
                <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
                          @input="typeselection"
                          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 == 2">
                  <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">选项设置</div>
                  </div>
                  <el-divider></el-divider>
                  <Regular
                    :TargetoptionList="indexform.ivrLibaScriptTargetoptionList"
                    @deloption="deloption"
                    :controlsc="false"
                  />
                  <!-- 无匹配类型 -->
                  <div class="topicxq">
                    <el-row :gutter="10">
                      <el-col :span="20"
                        ><el-form-item label="无匹配话术">
                          <el-input
                            type="textarea"
                            style="width: 400px"
                            placeholder="请输入"
                            v-model="indexform.noMatchText"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <el-row>
                      <el-col :span="6">
                        <el-form-item label="无匹配语音" prop="verbaltrickyy">
                          <el-upload
                            class="upload-demo"
                            :action="uploadImgUrl"
                            :show-file-list="false"
                            :headers="headers"
                            :on-success="
                              (response, file) =>
                                handleChange(response, file, 2)
                            "
                            accept=".wav,.mp3"
                            :limit="1"
                          >
                            <el-button size="small" type="primary"
                              >点击上传</el-button
                            >
                          </el-upload>
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <span
                          style="font-size: 12px"
                          v-if="indexform.nomatchvoice"
                          >{{
                            indexform.nomatchvoice.substring(
                              indexform.nomatchvoice.lastIndexOf("/") + 1
                            )
                          }}</span
                        >
                      </el-col>
                      <el-col :span="6">
                        <mini-audio
                          :audio-source="
                            indexform.nomatchvoice
                              ? indexform.nomatchvoice
                              : 'https://example.com/example.mp3'
                          "
                        ></mini-audio>
                      </el-col>
                    </el-row>
                  </div>
                  <div class="topicxq">
                    <el-row :gutter="10">
                      <el-col :span="20"
                        ><el-form-item label="听不清话术">
                          <el-input
                            style="width: 400px"
                            type="textarea"
                            placeholder="请输入"
                            v-model="indexform.noClearlyText"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <el-row>
                      <el-col :span="6">
                        <el-form-item label="听不清语音" prop="verbaltrickyy">
                          <el-upload
                            class="upload-demo"
                            :action="uploadImgUrl"
                            :show-file-list="false"
                            :headers="headers"
                            :on-success="
                              (response, file) =>
                                handleChange(response, file, 4)
                            "
                            accept=".wav,.mp3"
                            :limit="1"
                          >
                            <el-button size="small" type="primary"
                              >点击上传</el-button
                            >
                          </el-upload>
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <span
                          style="font-size: 12px"
                          v-if="indexform.noclearlyvoice"
                          >{{
                            indexform.noclearlyvoice.substring(
                              indexform.noclearlyvoice.lastIndexOf("/") + 1
                            )
                          }}</span
                        >
                      </el-col>
                      <el-col :span="6">
                        <mini-audio
                          :audio-source="
                            indexform.noclearlyvoice
                              ? indexform.noclearlyvoice
                              : 'https://example.com/example.mp3'
                          "
                        ></mini-audio>
                      </el-col>
                    </el-row>
                  </div>
                  <div class="topicxq">
                    <el-row :gutter="10">
                      <el-col :span="20"
                        ><el-form-item label="静默话术">
                          <el-input
                            type="textarea"
                            style="width: 400px"
                            placeholder="请输入"
                            v-model="indexform.slienceText"
                            show-word-limit
                          >
                          </el-input> </el-form-item
                      ></el-col>
                    </el-row>
                    <el-row>
                      <el-col :span="6">
                        <el-form-item label="静默语音" prop="verbaltrickyy">
                          <el-upload
                            class="upload-demo"
                            :action="uploadImgUrl"
                            :show-file-list="false"
                            :headers="headers"
                            :on-success="
                              (response, file) =>
                                handleChange(response, file, 3)
                            "
                            accept=".wav,.mp3"
                            :limit="1"
                          >
                            <el-button size="small" type="primary"
                              >点击上传</el-button
                            >
                          </el-upload>
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <span
                          style="font-size: 12px"
                          v-if="indexform.sliencevoice"
                          >{{
                            indexform.sliencevoice.substring(
                              indexform.sliencevoice.lastIndexOf("/") + 1
                            )
                          }}</span
                        >
                      </el-col>
                      <el-col :span="6">
                        <mini-audio
                          :audio-source="
                            indexform.sliencevoice
                              ? indexform.sliencevoice
                              : 'https://example.com/example.mp3'
                          "
                        ></mini-audio>
                      </el-col>
                    </el-row>
                  </div>
                </div>
              </el-form>
            </div>
          </el-tab-pane>
        </el-tabs>
      </div>
    </el-drawer>
    <!-- 添加适用疾病窗口 -->
@@ -847,12 +1166,17 @@
  getgenerallist,
} from "@/api/AiCentre/index";
import OptionalForm from "@/components/OptionalForm"; //正则组件
import { getToken } from "@/utils/auth";
export default {
  name: "SpeechTemplates",
  name: "Tpuconfigurat",
  components: { Regular, OptionalForm },
  data() {
    return {
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort",
      Editprogress: 1, //编辑进度
      loading: false, // 遮罩层
      drawer: false, //控制展开
@@ -860,6 +1184,9 @@
      radioas: "", //填空题答案
      task: null, //是否来自任务
      taskform: null, //任务信息
      indexform: {
        ivrLibaScriptTargetoptionList: [],
      },
      labelInfovalue: [], //标签临时存储
      deptNamesvalue: [], //科室临时存储
      dialogVisiblepatient: false, //适用疾病窗口
@@ -922,6 +1249,7 @@
      tempDetpRelevanceslist: [],
      delScriptVOList: [],
      optionIndex: "",
      activeName: "first",
      variablelist: [
        { variatename: "姓名", variate: "${name}", default: 1 },
        { variatename: "电话", variate: "${phone}", default: 1 },
@@ -969,6 +1297,20 @@
    this.precedencetype = store.getters.precedencetype;
  },
  mounted() {},
  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: {
    //公共方法--------------------
@@ -1166,10 +1508,22 @@
          });
        });
    },
    // 控制文件
    handleChange(file, fileList) {
      this.fileList = fileList.slice(-3);
    //控制语音文件
    handleChange(response, file, additionalParam) {
      console.log(response);
      console.log(additionalParam);
      if (additionalParam == 1) {
        this.indexform.scriptVoice = response.url;
        console.log(this.indexform.scriptVoice);
      } else if (additionalParam == 2) {
        this.indexform.nomatchvoice = response.url;
        console.log(this.indexform.nomatchvoice);
      } else if (additionalParam == 3) {
        this.indexform.sliencevoice = response.url;
      } else if (additionalParam == 4) {
        this.indexform.noclearlyvoice = response.url;
      }
      this.$forceUpdate();
    },
    // 文件超出个数限制时的钩子
    handleExceed(files, fileList) {
@@ -1375,11 +1729,28 @@
        .confirm("即将前往模版测试页面,请确认模版数据已保存。")
        .then((res) => {
          this.$router.push({
            path: "/knowledge/templateku/configurat/measurement",
            path: "/knowledge/tpuconfigurat/measurement",
            query: { id: this.id, name: this.ruleForm.templateName },
          });
        })
        .catch(() => {});
    },
    // 新建模版中临时题目
    // 题目类型更换
    typeselection(row) {
      if (row == 1 && !this.indexform.ivrLibaScriptTargetoptionList.length) {
        this.indexform.ivrLibaScriptTargetoptionList.push({
          guid: 1,
          isoperation: 1,
          targetvalue: "",
          targetregex: "",
          targetregex2: "",
          dynamiccruxs: [],
          nodynamiccruxs: [],
          dynamiccruxsJson: "",
          nodynamiccruxsJson: "",
        });
      }
    },
  },
};
@@ -1442,6 +1813,21 @@
      margin-bottom: 10px;
    }
  }
  .headline {
    display: flex;
    justify-content: space-between;
    font-size: 20px;
    border-left: 3px solid #41a1be;
    padding-left: 5px;
    margin: 15px 0;
  }
  .topicxq {
    background-color: #e2f5fc;
    border-radius: 4px;
    margin-top: 10px;
    padding-left: 10px;
    padding-top: 15px;
  }
}
.xinz-inf {
  font-size: 18px;
@@ -1467,6 +1853,14 @@
    vertical-align: bottom;
  }
}
.xinz-infs {
  font-size: 18px;
  line-height: 48px;
  .el-tag + .el-tag {
    margin-left: 10px;
  }
}
.addtopic {
  margin-top: 30px;
}