WXL
2024-04-07 8f4cb950a38f4e2c24ec96916d2aad0eb8c9aa9d
测试完成
已添加1个文件
已修改7个文件
938 ■■■■■ 文件已修改
src/components/Regular/index.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/getters.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/general/index.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/general/particulars/index.vue 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/templateku/configurat/index.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/templateku/configurat/measurement.vue 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/shortmessage/communication/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/websocket/websocket.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Regular/index.vue
@@ -13,7 +13,7 @@
            </el-input> </el-form-item
        ></el-col>
        <el-col :span="12"
          ><el-form-item label="节点ID">
          ><el-form-item label="选项节点">
            <el-input
              type="text"
              placeholder="请输入节点"
@@ -36,11 +36,11 @@
            </el-input> </el-form-item
        ></el-col>
        <el-col :span="12"
          ><el-form-item label="选中跳转(缺)">
          ><el-form-item label="选中跳转">
            <el-input
              type="text"
              placeholder="请输入题目节点"
              v-model="item.jump"
              v-model="item.nextQuestion"
              show-word-limit
            >
            </el-input> </el-form-item
@@ -55,7 +55,7 @@
            closable
            effect="dark"
            :disable-transitions="false"
            @close="handleClosecrux(crux, item)"
            @close="handleClosecrux(crux, item, 1)"
          >
            {{ crux }}
          </el-tag>
@@ -97,7 +97,7 @@
            closable
            effect="dark"
            :disable-transitions="false"
            @close="handleClosecrux(crux, item)"
            @close="handleClosecrux(crux, item, 2)"
          >
            {{ crux }}
          </el-tag>
@@ -223,9 +223,6 @@
  created() {
    this.regular = store.getters.regular;
    this.noregular = store.getters.noregular;
  },
  methods: {
@@ -275,11 +272,15 @@
      );
    },
    handleClosecrux(crux, item) {
      if (this.whether == 1) {
        this.dynamiccruxs.splice(this.dynamiccruxs.indexOf(crux), 1);
    handleClosecrux(crux, item, whether) {
      if (whether == 1) {
        item.dynamiccruxs.splice(item.dynamiccruxs.indexOf(crux), 1);
        console.log(1);
        console.log(item.dynamiccruxs);
        console.log(item.nodynamiccruxs);
      } else {
        this.nodynamiccruxs.splice(this.nodynamiccruxs.indexOf(crux), 1);
        console.log(2);
        item.nodynamiccruxs.splice(item.nodynamiccruxs.indexOf(crux), 1);
      }
      this.generateRegex(item);
    },
src/store/getters.js
@@ -91,6 +91,25 @@
      },
    },
  ],
   // æ˜¯å¦å¯ç”¨ï¼ˆæ•°ï¼‰
   usablesz: (state) => [
    {
      value: 0,
      label: "启用",
      raw: {
        cssClass: "",
        listClass: "",
      },
    },
    {
      value: 1,
      label: "停用",
      raw: {
        cssClass: "",
        listClass: "",
      },
    },
  ],
   // æ˜¯å¦å¿…å¡«
   required: (state) => [
    {
src/views/repositoryai/general/index.vue
@@ -536,23 +536,9 @@
    },
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.reset();
      this.title = "新增通用库";
      this.indexform = {
        baseTagList: [],
        targetoptionList: [],
      };
      this.testuserList = [
        {
          guid: 1,
          isoperation: 1,
          targettype: "1",
          targetvalue: "",
          targetregex: "",
        },
      ];
      this.indexopen = true;
      this.measurement = false;
      this.$router.push({
        path: "/knowledge/general/particulars/",
      });
    },
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
    handleUpdate(row) {
src/views/repositoryai/general/particulars/index.vue
@@ -1,20 +1,63 @@
<template>
  <div>
    <el-card style="margin: 20px" class="box-card">
      <el-form
        :model="baseForm"
        :rules="bases"
        ref="baseForm"
        label-width="100px"
        class="demo-baseForm"
      >
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="模版名称" prop="extName">
              <el-input
                v-model="baseForm.extName"
                placeholder="请输入"
              ></el-input> </el-form-item
          ></el-col>
          <el-col :span="12">
            <el-form-item label="模版分类" prop="groupID">
              <el-select v-model="baseForm.groupID" placeholder="请选择分类">
                <el-option
                  v-for="item in deptOptions"
                  :key="item.intertcatid"
                  :label="item.categoryname"
                  :value="item.intertcatid"
                >
                </el-option>
              </el-select> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="模版概述" prop="name">
              <el-input
                v-model="baseForm.note"
                placeholder="请输入"
              ></el-input> </el-form-item
          ></el-col>
          <el-col :span="12">
            <el-form-item label="是否可用" prop="resource">
              <el-select v-model="baseForm.isEnable" placeholder="请选择状态">
                <el-option
                  v-for="item in usable"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select> </el-form-item
          ></el-col>
        </el-row>
      </el-form>
      <div class="elcardiv">
        <div class="leftvlue-jbxx">话术列表</div>
        <el-divider></el-divider>
        <el-table :data="targetList" :row-class-name="tableRowClassName">
          <el-table-column label="序号" align="center" key="id" prop="id" />
          <el-table-column
            label="问题主题(缺)"
            align="center"
            key="extName"
            prop="extName"
            width="200"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="问题文本"
            align="center"
@@ -24,41 +67,15 @@
            :show-overflow-tooltip="true"
          >
          </el-table-column>
          <el-table-column
            label="回复语音(缺)"
            align="center"
            key="switchTexty"
            width="200"
            prop="switchTexty"
            :show-overflow-tooltip="true"
          >
          </el-table-column>
          <el-table-column
            label="适用方式(缺)"
            align="center"
            key="suitWay"
            prop="suitWay"
          >
            <template slot-scope="scope">
              <span v-for="item in scope.row.suitWay">{{ item }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="语言(缺)"
            align="center"
            key="language"
            prop="language"
            width="120"
          />
          <el-table-column
            label="是否可用(改)"
            label="是否可用"
            align="center"
            key="isEnable"
            prop="isEnable"
          >
            <template slot-scope="scope">
              <dict-tag :options="usable" :value="scope.row.isEnable" />
              <span>{{ scope.row.isEnable == 1 ? "停用" : "启用" }}</span>
            </template>
          </el-table-column>
          <el-table-column
@@ -81,8 +98,7 @@
              <el-button
                size="medium"
                type="text"
                @click="handleUpdate(scope.row)"
                v-hasPermi="['system:user:edit']"
                @click="handleUpdate(scope.row, scope.$index)"
                ><span class="button-textxg"
                  ><i class="el-icon-edit"></i>修改</span
                ></el-button
@@ -92,7 +108,6 @@
                size="medium"
                type="text"
                @click="handleDelete(scope.row)"
                v-hasPermi="['system:user:remove']"
                ><span class="button-textsc"
                  ><i class="el-icon-delete"></i>删除</span
                ></el-button
@@ -110,44 +125,17 @@
          <div style="margin: 15px; margin-top: 50px">
            <div class="leftvlue-jbxx">话术编辑</div>
            <el-divider></el-divider>
            <el-form-item label="话术文本" prop="name">
              <el-input
                v-model="ruleForm.switchText"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
            <el-row :gutter="20">
              <el-col :span="12">
                <el-form-item label="模版名称" prop="name">
                  <el-input
                    v-model="ruleForm.name"
                    placeholder="请输入"
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="12">
                <el-form-item label="模版分类" prop="resource">
                  <el-select
                    v-model="ruleForm.groupID"
                    placeholder="请选择分类"
                  >
                    <el-option
                      v-for="item in deptOptions"
                      :key="item.intertcatid"
                      :label="item.categoryname"
                      :value="item.intertcatid"
                    >
                    </el-option>
                  </el-select> </el-form-item
              ></el-col>
            </el-row>
            <el-row :gutter="20">
              <el-col :span="12">
                <el-form-item label="问题主题" prop="name">
                  <el-input
                    v-model="ruleForm.name"
                    placeholder="请输入"
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="12">
                <el-form-item label="是否可用" prop="resource">
                  <el-select
                    v-model="ruleForm.assortid"
                    placeholder="请选择状态"
                  >
                <el-form-item label="是否启用" prop="resource">
                  <el-select v-model="ruleForm.isEnable" placeholder="请选择">
                    <el-option
                      v-for="item in usable"
                      :key="item.value"
@@ -157,30 +145,11 @@
                    </el-option>
                  </el-select> </el-form-item
              ></el-col>
            </el-row>
            <el-form-item label="问题文本" prop="name">
              <el-input v-model="ruleForm.name" placeholder="请输入"></el-input>
            </el-form-item>
            <el-row :gutter="20">
              <el-col :span="12">
                <el-form-item label="语言" prop="resource">
                  <el-select v-model="ruleForm.language" placeholder="请选择">
                <el-form-item label="是否为结束语" prop="resource">
                  <el-select v-model="ruleForm.isEnd" placeholder="请选择">
                    <el-option
                      v-for="item in languagelist"
                      :key="item.label"
                      :label="item.label"
                      :value="item.label"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="适用方式" prop="resource">
                  <el-select v-model="ruleForm.mode" placeholder="请选择">
                    <el-option
                      v-for="item in mode"
                      v-for="item in usablend"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
@@ -207,14 +176,28 @@
              <el-input
                type="textarea"
                placeholder="请输入匹配正则"
                v-model="ruleForm.desc"
                v-model="ruleForm.selfRegex"
              ></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="submitForm('ruleForm')"
                >立即创建</el-button
                >保存模版</el-button
              >
              <el-button @click="resetForm('ruleForm')">重置</el-button>
              <el-button
                v-if="ruleForm.id"
                type="primary"
                plain
                @click="modification('edit')"
                >保存话术</el-button
              >
              <el-button
                v-else
                type="success"
                plain
                @click="modification('add')"
                >新增话术</el-button
              >
              <el-button @click="resetForm('ruleForm')">关闭</el-button>
            </el-form-item>
          </div>
        </el-form>
@@ -229,6 +212,8 @@
  editgeneravaluel,
  addgeneravaluel,
  getgeneravaluelinfo,
  addgeneral,
  editgeneral,
  getgeneralinfo,
  getgeneralclassify,
  delgeneravaluelinfo,
@@ -240,47 +225,62 @@
      loading: false,
      id: null,
      usable: [],
      index: "",
      languagelist: [],
      deptOptions:[],
      deptOptions: [],
      mode: [],
      pitchon: "还好吗",
      targetList: [{ switchText: "还好吗" }, { switchText: "还不错" }],
      pitchon: "",
      targetList: [],
      fileList: [
        {
          name: "food.jpeg",
          url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
        },
      ],
      ruleForm: {
        name: "",
        region: "",
        date1: "",
        date2: "",
        delivery: false,
        type: [],
        resource: "",
        desc: "*(人|打|班啊|唔系真人(è¾¹|咽|咩)*(单位|地方医院|中心|卫生|议员|服务)",
      usablend: [
        {
          value: 0,
          label: "非结束语",
        },
        {
          value: 1,
          label: "结束语",
        },
      ],
      ruleForm: {},
      baseForm: {
        extName: "",
      },
      rules: {},
      bases: {},
    };
  },
  created() {
    this.id = this.$route.query.id;
    this.getList();
    this.usable = store.getters.usable;
    this.usable = store.getters.usablesz;
    this.languagelist = store.getters.languagelist;
    this.mode = store.getters.mode;
  },
  methods: {
    getList() {
      this.loading = true;
      this.id = this.$route.query.id;
      getgeneralinfo({ pid: this.id }).then((res) => {
        this.targetList = res.rows;
        console.log(this.targetList);
        this.loading = false;
      });
      if (this.id) {
        this.$modal.loading("请稍候...");
        getgeneralinfo(this.id).then((res) => {
          if (res.code == 200) {
            this.baseForm = res.data;
          }
          this.$modal.closeLoading();
        });
        getgeneravaluellist({ extID: this.id }).then((res) => {
          if (res.code == 200) {
            this.targetList = res.rows;
          }
          this.$modal.closeLoading();
        });
      }
      getgeneralclassify({}).then((res) => {
        this.deptOptions = res.rows;
        console.log(res);
@@ -289,11 +289,86 @@
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {},
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
    handleUpdate(row) {
    handleUpdate(row, index) {
      this.pitchon = row.switchText;
      this.ruleForm = row;
      this.index = index;
    },
    submitForm() {},
    resetForm() {},
    // åˆ é™¤
    handleDelete(item) {
      this.$modal
        .confirm("是否确认删除该话术项?")
        .then((res) => {
          if (item.id) {
            delgeneravaluelinfo(item.id).then((res) => {
              this.$modal.msgSuccess("删除成功");
            });
          }
          this.targetList = this.targetList.filter((obj) => obj !== item);
        })
        .catch(() => {});
    },
    // ä¿å­˜ä¸»è¡¨
    submitForm() {
      if (this.baseForm.id) {
        editgeneral(this.baseForm).then((res) => {
          if (res.code == 200) {
            this.$modal.msgSuccess("修改成功");
            this.savetalk();
          }
        });
      } else {
        addgeneral(this.baseForm).then((res) => {
          if (res.code == 200) {
            this.$modal.msgSuccess("新增成功");
            this.baseForm.id = res.data.id;
            this.id = res.data.id;
            this.savetalk();
          }
        });
      }
    },
    // ä¿å­˜è¯æœ¯
    savetalk() {
      this.targetList.forEach((obj) => {
        if (obj.id) {
          editgeneravaluel(obj).then((res) => {
            this.getList();
          });
        } else {
          obj.extID = this.baseForm.id;
          addgeneravaluel(obj).then((res) => {
            this.getList();
          });
        }
      });
    },
    modification(type) {
      if (type == "add") {
        console.log(this.ruleForm, "ruleForm");
        this.targetList.push(this.ruleForm);
      } else {
        this.targetList[this.index] = this.ruleForm;
      }
      this.ruleForm = {};
    },
    // å…³é—­
    resetForm() {
      this.$confirm("即将退出页面, è¯·ç¡®è®¤æ•°æ®æ˜¯å¦ä¿å­˜?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$router.go(-1);
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消",
          });
        });
    },
    // æ–‡ä»¶----------------------
    // æŽ§åˆ¶æ–‡ä»¶
    handleChange(file, fileList) {
@@ -309,7 +384,6 @@
    },
    tableRowClassName({ row, rowIndex }) {
      if (row.switchText == this.pitchon) {
        console.log(123);
        return "warning-row";
      }
      return "";
src/views/repositoryai/templateku/configurat/index.vue
@@ -86,9 +86,10 @@
            </div>
          </el-form-item>
          <el-row :gutter="20">
            <el-col :span="10">
            <el-col :span="12">
              <el-form-item label="版本号" prop="version">
                <el-input
                  style="width: 220px"
                  v-model="ruleForm.version"
                  placeholder="默认1.0.1"
                ></el-input> </el-form-item
@@ -113,7 +114,7 @@
          </el-row>
          <el-row :gutter="20">
            <el-col :span="10">
            <el-col :span="12">
              <el-form-item label="语言" prop="name">
                <el-select
                  v-model="ruleForm.language"
@@ -254,6 +255,7 @@
          </el-form-item>
          <el-form-item label="适用院区" prop="region">
            <el-select
              style="width: 500px"
              v-model="ruleForm.campus"
              size="medium"
              multiple
@@ -272,6 +274,7 @@
          </el-form-item>
          <el-form-item label="适用科室" prop="region">
            <el-cascader
              style="width: 500px"
              v-model="tempDetpRelevanceslist"
              :options="deptList"
              :props="props"
@@ -296,63 +299,46 @@
              <el-option
                class="ruleFormaa"
                v-for="item in generallist"
                :key="item.value"
                :label="item.label"
                :value="item.value"
                :key="item.id"
                :label="item.extName"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-row :gutter="20">
            <el-col :span="8">
              <el-form-item label="随访前处理(是否需要)" prop="name">
                <el-select
                  v-model="ruleForm.prefollowup"
                  size="medium"
                  filterable
                  placeholder="请选择"
                >
                  <el-option
                    class="ruleFormaa"
                    v-for="item in prefollowuplist"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select> </el-form-item
              <el-form-item label="随访前处理" prop="name">
                <el-input
                  v-model="ruleForm.revisitBefore"
                ></el-input></el-form-item
            ></el-col>
            <el-col :span="9">
              <el-form-item label="随访后处理(是否需要)" prop="region">
                <el-select
                  v-model="ruleForm.postfollowup"
                  size="medium"
                  filterable
                  placeholder="请选择分类"
                >
                  <el-option
                    class="ruleFormaa"
                    v-for="item in postfollowuplist"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select> </el-form-item
              <el-form-item label="随访后处理" prop="region">
                <el-input
                  v-model="ruleForm.revisitAfter"
                ></el-input> </el-form-item
            ></el-col>
          </el-row>
          <el-row :gutter="20">
            <el-col :span="10">
            <el-col :span="8">
              <el-form-item label="静默时间(秒)" prop="name">
                <div style="width: 40%">
                  <el-input
                    v-model="ruleForm.silencetime"
                  ></el-input></div></el-form-item
            ></el-col>
            <el-col :span="10">
            <el-col :span="8">
              <el-form-item label="静默次数" prop="name">
                <div style="width: 40%">
                  <el-input
                    v-model="ruleForm.noVoiceNum"
                  ></el-input></div></el-form-item
            ></el-col>
            <el-col :span="8">
              <el-form-item label="无匹配重复(次)" prop="region">
                <div style="width: 40%">
                  <el-input v-model="ruleForm.name"></el-input>
                  <el-input v-model="ruleForm.mateNum"></el-input>
                </div> </el-form-item
            ></el-col>
          </el-row>
@@ -390,8 +376,8 @@
                <el-table-column
                  label="编号"
                  align="center"
                  key="guid"
                  prop="guid"
                  key="targetid"
                  prop="targetid"
                />
                <el-table-column
                  label="标题"
@@ -466,6 +452,13 @@
                    :disabled="true"
                  ></el-input>
                </el-form-item>
                <el-form-item label="问题节点">
                  <el-input
                    v-model="topicobj.targetid"
                    placeholder="请从左侧列表选择"
                    :disabled="true"
                  ></el-input>
                </el-form-item>
                <el-row :gutter="10">
                  <el-col :span="12"
                    ><el-form-item label="是否必填">
@@ -509,90 +502,7 @@
                    >
                  </div>
                </div>
                <!-- <div
                  class="topicxq"
                  v-for="item in topicobj.ivrLibaScriptTargetoptionList"
                >
                  <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="节点ID">
                        <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">
                    <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.jump"
                          show-word-limit
                        >
                        </el-input> </el-form-item
                    ></el-col>
                  </el-row>
                  <el-form-item label="匹配正则">
                    <el-input
                      style="width: 24vw"
                      type="textarea"
                      placeholder="请输入题号"
                      v-model="item.targetregex"
                      show-word-limit
                    >
                    </el-input>
                  </el-form-item>
                  <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-col :span="8">
                      <div style="text-align: right; padding-right: 10px">
                        <el-button type="danger" @click="" round>删除</el-button>
                      </div>
                    </el-col>
                  </el-row>
                </div> -->
                <Regular
                  :TargetoptionList="topicobj.ivrLibaScriptTargetoptionList"
                  @deloption="deloption"
@@ -756,13 +666,17 @@
      </div>
      <!-- éšè®¿æ¨¡ç‰ˆé¢„览 -->
      <div v-if="Editprogress == 3">
        <div class="leftvlue-jbxx">随访模版预览</div>
        <div class="leftvlue-jbxx">随访模版问题预览</div>
        <el-divider></el-divider>
        <div class="preview-left">
          <!-- å•选 -->
          <div class="topic-dev" v-for="(item,index) in valssu" :key="item.aaa">
          <div
            class="topic-dev"
            v-for="(item, index) in valssu"
            :key="item.aaa"
          >
            <div class="dev-text">
              {{ index+1 }}、[单选]<span>{{ item.questionText }}</span>
              {{ index + 1 }}、[单选]<span>{{ item.questionText }}</span>
            </div>
            <div class="dev-xx">
              <el-radio-group v-model="radio">
@@ -776,9 +690,13 @@
            </div>
          </div>
          <!-- å¤šé€‰ -->
          <div class="topic-dev" v-for="(item,index) in valssu" :key="item.aaa">
          <div
            class="topic-dev"
            v-for="(item, index) in valssu"
            :key="item.aaa"
          >
            <div class="dev-text">
              {{ index+1 }}、[多选]<span>{{ item.questionText }}</span>
              {{ index + 1 }}、[多选]<span>{{ item.questionText }}</span>
            </div>
            <div class="dev-xx">
              <el-checkbox-group v-model="radios">
@@ -803,9 +721,9 @@
            </div>
          </div> -->
        </div>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
        <el-button type="warning">导出为pdf</el-button>
        <el-button type="primary" plain @click="laststep()">上一步</el-button>
        <el-button type="warning" @click="measurement()">前往测试</el-button>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
      </div>
    </div>
    <!-- æ·»åŠ é¢˜ç›®å¼¹çª— -->
@@ -903,6 +821,7 @@
  getillnesslist,
  illnesslistget,
  getillness,
  getgenerallist,
} from "@/api/AiCentre/index";
export default {
@@ -988,7 +907,7 @@
          sdadd: ["sss", "ssccss", "ssaas", "ss"],
        },
      ],
      radio:'',
      radio: "",
      addvalue: "添加题目",
      // é¢˜ç›®è¡¨æ ¼æ•°æ®
      userList: [
@@ -1039,6 +958,7 @@
  },
  methods: {
    //公共方法--------------------
    getIndexInArray(arr, obj) {
      return arr.indexOf(obj);
    },
@@ -1051,11 +971,17 @@
      getvFollowup({ id: this.id }).then((res) => {
        this.ruleForm = res.data;
        this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
        this.ruleForm.suitway = this.ruleForm.suitway.split(",");
        this.ruleForm.campus = this.ruleForm.campus.split(",");
        this.ruleForm.submoduleID = this.ruleForm.submoduleID.split(",");
        this.ruleForm.submoduleID = this.ruleForm.submoduleID.map((res) => {
          return Number(res);
        });
        console.log(this.ruleForm.submoduleID, "this.ruleForm.submoduleID取");
        this.dynamicTags = this.ruleForm.ivrLibaTemplateTagList;
        this.dynamicTags = this.ruleForm.ivrLibaTemplateTagList.map(
          this.processElement
        );
@@ -1080,8 +1006,15 @@
      getFollowupclassify({}).then((res) => {
        this.indexAssortlist = res.rows;
      });
      getgenerallist({
        pageNum: 1,
        pageSize: 100,
      }).then((res) => {
        this.generallist = res.rows;
      });
      // ç–¾ç—…列
    },
    //
    submitForm(formName) {
      if (this.ruleForm.id) {
        this.ruleForm.isoperation = 2;
@@ -1094,6 +1027,19 @@
      this.ruleForm.submoduleID = this.ruleForm.submoduleID.join(",");
      //   æäº¤
      this.ruleForm.ivrLibaTemplateScriptVOList.forEach((res) => {
        if (!res.isoperation) {
          res.isoperation = 2;
        }
        res.ivrLibaScriptTargetoptionList =
          res.ivrLibaScriptTargetoptionList.map((item) => {
            if (!item.isoperation) {
              item.isoperation = 2;
              item.templateID = this.ruleForm.id;
            }
            return item;
          });
      });
      this.illnesslist.forEach((item, index) => {
        if (!item.id) {
@@ -1289,11 +1235,11 @@
        this.topicobj = row;
      } else {
        getverbaltrick({ id: row.id }).then((res) => {
          if (res.code==200) {
          if (res.code == 200) {
            this.topicobj = res.data;
            console.log(res.data, "topicobj");
          }else{
            console.log('没找到');
          } else {
            console.log("没找到");
          }
        });
      }
@@ -1322,11 +1268,19 @@
      this.ruleForm.ivrLibaTemplateScriptVOList.splice(index + 1, 0, item); // å°†item插入到索引位置的前一位
      this.sortFn();
    },
    // é—®é¢˜æŽ’序
    sortFn() {
      this.ruleForm.ivrLibaTemplateScriptVOList =
        this.ruleForm.ivrLibaTemplateScriptVOList.map((item, index) => {
          return Object.assign({}, item, { guid: (index + 1).toString() });
          return Object.assign({}, item, { targetid: (index + 1).toString() });
        });
      this.ruleForm.ivrLibaTemplateScriptVOList.forEach((question, index) => {
        question.ivrLibaScriptTargetoptionList =
          question.ivrLibaScriptTargetoptionList.map((option) => {
            option.nextQuestion = Number(question.targetid) + 1;
            return option;
          });
      });
      console.log(this.ruleForm.ivrLibaTemplateScriptVOList);
    },
    // -----------------------话术选项
@@ -1387,9 +1341,21 @@
    // é¢„览---------------
    preview() {
      console.log(this.ruleForm);
      this.valssu = this.ruleForm.ivrLibaTemplateScriptVOList
      this.valssu = this.ruleForm.ivrLibaTemplateScriptVOList;
      this.Editprogress = 3;
    },
    // å‰å¾€æµ‹è¯•
    measurement() {
      this.$modal
        .confirm("即将前往模版测试页面,请确认模版数据已保存。")
        .then((res) => {
          this.$router.push({
            path: "/knowledge/templateku/configurat/measurement",
            query: { id: this.id, name: this.ruleForm.templateName },
          });
        })
        .catch(() => {});
    },
  },
};
</script>
src/views/repositoryai/templateku/configurat/measurement.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,298 @@
<template>
  <!-- èŠè¿žé¡µé¢è®°å½• -->
  <div class="Followupdetailspage">
    <div>
      <el-card class="box-card">
        <div slot="header" class="clearfix">
          <span>{{ TemplateName }}</span>
          <el-button
            style="float: right; padding: 3px 0; color: red"
            type="text"
            @click="$router.go(-1)"
            >退出测试</el-button
          >
          <el-button
            style="float: right; padding: 3px 0; margin-right: 10px"
            type="text"
            @click="drawer = true"
            >查看匹配结果</el-button
          >
        </div>
        <div class="borderdiv">
          <div v-for="item in Answerline">
            <div class="leftside" v-if="item.isEat == 1">
              <i class="el-icon-phone-outline"></i><span>{{ item.value }}</span>
            </div>
            <div class="offside" v-else-if="item.isEat == 2">
              <i class="el-icon-user"></i>
              <div class="offside-value">
                <el-input :disabled="true" v-model="item.value"></el-input>
              </div>
            </div>
            <div class="offside" v-else-if="item.isEat == 3">
              <i class="el-icon-user"></i>
              <div class="offside-value">
                <el-input v-model="item.value"></el-input>
                <el-radio v-model="radio" label="1">备选项</el-radio>
                <el-radio v-model="radio" label="2">备选项2</el-radio>
                <el-radio v-model="radio" label="3">备选项3</el-radio>
                <el-radio v-model="radio" label="4">备选项4</el-radio>
              </div>
            </div>
          </div>
        </div>
        <div style="margin-top: 15px">
          <el-input
            placeholder="请输入内容"
            @keyup.enter.native="sendFn"
            v-model="answer"
          >
            <el-button
              style="background-color: #7799fa; color: #ffff; border: 0"
              @click="sendFn"
              slot="append"
              type="primary"
              >发送</el-button
            >
          </el-input>
        </div>
      </el-card>
      <el-drawer title="匹配结果" :visible.sync="drawer" direction="rtl">
        <div class="preview-left">
          <!-- å•选 -->
          <div
            class="topic-dev"
            v-for="(item, index) in questionList"
            :key="item.aaa"
          >
            <div class="dev-text">
              {{ index + 1 }}、<span>{{ item.questionText }}</span>
            </div>
            <div class="dev-xx">
              <el-radio-group v-model="item.radio">
                <el-radio
                  v-for="(items, index) in item.ivrLibaScriptTargetoptionList"
                  :key="items.id"
                  :label="items.id"
                  >{{ items.targetvalue }}</el-radio
                >
              </el-radio-group>
            </div>
          </div>
        </div>
      </el-drawer>
    </div>
  </div>
</template>
<script>
import {
  sendWebsocket,
  websocketSend,
  closeWebsocket,
} from "@/websocket/websocket.js";
export default {
  data() {
    return {
      answer: "", //回答
      id: null,
      TemplateName: "随访模版名称", //模版名
      radio: "1",
      userid: "",
      input: "还不错",
      drawer: false,
      radio: "2",
      code: "",
      Answerline: [],
      questionList: [],
    };
  },
  created() {
    this.TemplateName = this.$route.query.name;
    this.requstWs(); //进入页面创建连接
  },
  methods: {
    // å»ºç«‹è¿žæŽ¥
    requstWs(message, next, file) {
      console.log("连接");
      this.id = this.$route.query.id;
      // é˜²æ­¢ç”¨æˆ·å¤šæ¬¡è¿žç»­ç‚¹å‡»å‘起请求,所以要先关闭上次的ws请求。
      closeWebsocket();
      console.log(this.id);
      const obj = {
        type: "text",
        userId: "1",
        templateId: this.id,
        content: null,
      };
      // å‘èµ·ws请求
      sendWebsocket(
        "ws://localhost:8089/chat?userId=1",
        obj,
        this.wsMessage,
        this.wsError
      );
    },
    // æŽ¥æ”¶ws返回的数据
    wsMessage(data) {
      let dataJson = data;
      dataJson = JSON.parse(dataJson);
      dataJson = JSON.parse(dataJson);
      console.log(dataJson, "数据");
      if (!this.Answerline[0]) {
        this.Answerline.push({
          value: dataJson.kcb,
          isEat: 1,
        });
      }
      this.Answerline.push({
        value: dataJson.nowQuestion.questionText,
        isEat: 1,
      });
      this.questionList = dataJson.questionList;
      this.questionList = this.questionList.map((item) => {
        item.ivrLibaScriptTargetoptionList.forEach((row) => {
          if (row.isUserOperation) {
            item.radio = row.id;
          }
        });
        return item;
      });
      // IMUI.appendMessage(data);
    },
    //ws错误回调
    wsError(data) {
      console.log(data);
    },
    sendFn() {
      // æ¶ˆæ¯å‘送
      const obj = {
        type: "text",
        userId: "1",
        templateId: "",
        questionMessage: { content: this.answer },
      };
      console.log(obj, "入参");
      // å‘èµ·ws请求
      sendWebsocket(
        "ws://localhost:8089/chat?userId=1",
        obj,
        this.wsMessage,
        this.wsError
      );
      this.Answerline.push({
        value: this.answer,
        isEat: 2,
      });
      this.answer = "";
    },
  },
};
</script>
<style lang="scss" scoped>
.Followupdetailspage {
  margin: 10px;
}
.Followuserinfo {
  margin: 20px 10px;
  align-items: center;
  padding: 30px;
  background: #ffff;
  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);
  .userinfo-text {
    font-size: 20px;
    margin-right: 20px;
    margin-bottom: 10px;
  }
  .userinfo-value {
    color: rgb(15, 139, 211);
    span {
      margin-right: 20px;
    }
  }
}
.borderdiv {
  min-height: 60vh;
  font-size: 20px;
  padding: 30px;
  max-height: 700px;
  overflow: auto;
  .leftside {
    margin-bottom: 30px;
    span {
      width: 400px;
      margin-left: 20px;
      padding: 10px;
      color: #fff;
      background: rgb(110, 196, 247);
      border-radius: 10px;
    }
  }
  .offside {
    display: flex;
    flex-direction: row-reverse;
    margin-bottom: 10px;
    .offside-value {
      padding: 10px;
      background: rgb(217, 173, 253);
      border-radius: 10px;
      color: #fff;
      margin-right: 20px;
    }
  }
}
.preview-left {
  margin: 20px;
  //   margin: 20px;
  padding: 30px;
  background: #ffff;
  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);
  .topic-dev {
    margin-bottom: 25px;
    font-size: 20px !important;
    .dev-text {
      margin-bottom: 10px;
    }
  }
}
::v-deep.offside-value .el-radio__label {
  color: #fff;
}
::v-deep.el-input.is-disabled .el-input__inner {
  background-color: #fff;
  border-color: #dfe4ed;
  color: #000;
  cursor: not-allowed;
}
.mulsz {
  font-size: 25px;
  margin-top: 20px;
}
.text {
  font-size: 14px;
}
.item {
  margin-bottom: 18px;
}
.clearfix {
  font-size: 20px;
}
.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both;
}
</style>
src/views/shortmessage/communication/index.vue
@@ -660,7 +660,7 @@
      };
      // å‘èµ·ws请求
      sendWebsocket(
        "ws://192.168.1.4:8080/chat?userId=2",
        "ws://localhost:8089/chat?userId=1",
        obj,
        this.wsMessage,
        this.wsError
src/websocket/websocket.js
@@ -22,8 +22,9 @@
    // æ·»åŠ çŠ¶æ€åˆ¤æ–­ï¼Œå½“ä¸ºOPEN时,发送消息
    if (websock.readyState === websock.OPEN) { // websock.OPEN = 1 
      // å‘给后端的数据需要字符串化
      websock.send(agentData)
      websock.send(JSON.stringify(agentData))
      console.log('连接成功');
    }
    if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3 
      console.log('websock.readyState=3')
@@ -55,7 +56,7 @@
}
// å»ºç«‹ws连接
function websocketOpen (e) {
  // console.log('ws连接成功')
  console.log('ws连接成功')
}
 
// åˆå§‹åŒ–weosocket
@@ -70,10 +71,11 @@
//   const requstWsUrl = wsUrl + '?' + token
  const requstWsUrl = wsUrl
  websock = new WebSocket(requstWsUrl)
  websock.onmessage = function (e) {
    console.log('websocketonMessage');
    websocketonmessage(e)
  } 
  websock.onopen = function () {
    websocketOpen()
  }