yinbangzhong
2024-09-10 1da0bc255179f25b5227bec27833cf486cb6cb90
src/views/sessionManager/index.vue
@@ -121,7 +121,7 @@
                  />
                </template>
                <template #content>
                  <a-card v-if="isExistTip(sessionDetail.content)">
                  <a-card v-if="isExistTip(sessionDetail.content)" style="padding: 10px">
                    <div
                      :class="{ chatItemAnswer: theme === 'light' }"
                      :style="{
@@ -160,10 +160,13 @@
                              "
                            >
                              <img
                                style="width: 20px; height: 20px"
                                style="width: 15px; height: 15px"
                                :src="tipImage"
                              />
                            </a-tooltip>
                            <span v-if="tipIndex == item.len - 1">
                              {{ breakContent.substring(item.index + 5) }}
                            </span>
                          </span>
                          <span v-else-if="tipIndex == item.len - 1">
                            {{
@@ -179,7 +182,7 @@
                              "
                            >
                              <img
                                style="width: 20px; height: 20px"
                                style="width: 15px; height: 15px"
                                :src="tipImage"
                              />
                            </a-tooltip>
@@ -199,7 +202,7 @@
                              "
                            >
                              <img
                                style="width: 20px; height: 20px"
                                style="width: 15px; height: 15px"
                                :src="tipImage"
                              />
                            </a-tooltip>
@@ -238,12 +241,9 @@
                    </ul>
                  </div> -->
                </template>
                <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
                <template #actions>
                  <!-- <div
                    v-for="(item, leng) in messagenList.reference"
                    :key="leng"
                  > -->
                  <div>
                    <div>
                      <template
@@ -308,12 +308,7 @@
                </template>
                <template #actions>
                  <!-- <div class="icon-box">
                    <div>
                      <img :src="getIconByExtension('pdf')" alt="" />
                    </div>
                    <div class="icon-text"> 文件类型 </div>
                  </div> -->
                  <div
                    class="action"
                    @click="stopChat"
@@ -329,24 +324,12 @@
                </template>
              </a-comment>
            </div>
            <!-- <div class="chartStart" v-if="isStart" @click="startChat"
              >停止生成</div
            >
            <div class="chartStart v-else" @click="stopChat">重新生成</div> -->
          </a-scrollbar>
          <div class="chat_bottom">
            <div class="center-bottom">
              <!-- <a-textarea
              v-model="inputMsg"
              @keydown.shift.enter="sendMessage"
              style="height: 180px"
              placeholder="输入您想了解的内容,Shift+Enter发送"
              :max-length="500"
              allow-clear
              show-word-limit
            >
            </a-textarea> -->
              <a-textarea
                v-model="inputMsg"
                @keydown.shift.enter="handleShiftEnter"
@@ -382,12 +365,6 @@
                  :sessionId="activeSessionId"
                  @selectFileCallback="selectFileCallback"
                ></updataFile>
                <!-- <uploadFile
                  ref="fileInput"
                  :handleRemove="handleRemove"
                  :typeXLse="false"
                  @selectFileCallback="selectFileCallback"
                ></uploadFile> -->
                <a-button
                  :disabled="chatDis"
@@ -483,11 +460,10 @@
      </a-col>
    </a-row>
    <a-modal title=" " v-model:visible="fileVisible" :footer="false" fullscreen>
      <!--      <docx  previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>-->
      <docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx>
      <excel v-if="documenttype == 'excel'" :previewSrc="previewSrc"></excel>
      <excel v-if="documenttype == ('xlsx' || 'xls')" :previewSrc="previewSrc"></excel>
      <Pdf v-if="documenttype == 'pdf'" :previewSrc="previewSrc"></Pdf>
      <txt v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt>
      <txt  v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt>
    </a-modal>
    <a-modal
      v-model:visible="visible"
@@ -591,7 +567,7 @@
  let from = reactive({
    name: '未命名会话',
  });
  const isStopChat = ref(false);
  const currIndex = ref(0);
  const displayedText = ref(''); // 正在显示的文字
  let timer: number | null = null;
@@ -712,7 +688,7 @@
  const clickHref = async (item) => {
    documenttype.value = item.doc_name.split('.').pop();
    previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`;
    previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`+"?t="+new Date().getTime();
    fileVisible.value = true;
  };
@@ -780,53 +756,6 @@
    activeSessionId.value = conversation_id;
  };
  //上传
  // const selectFileCallback = async (resData, file) => {
  //   console.log(111);
  //   try {
  //     const formData = new FormData();
  //     uploaditemList.value = resData;
  //     uploaditemList.value.map((item) => {
  //       if (item.name == file[0].file.name) {
  //         item.onFileSelectedLoading = true;
  //         item.textName = '上传中';
  //       }
  //       return item;
  //     });
  //     debugger;
  //     if (!activeSessionId.value) {
  //       await createSession(resData);
  //     }
  //     // onFileSelectedLoading.value = true;
  //     // textName.value = '上传中';
  //     formData.append('files', file[0].file);
  //     formData.append('conversation_id', activeSessionId.value);
  //     console.log(formData, 'formData');
  //     const { data, code } = await uploadAndParse(formData);
  //     if (code === 200) {
  //       uploaditemList.value.map((item: any) => {
  //         item.onFileSelectedLoading = false;
  //         item.textName = '上传成功';
  //         return item;
  //       });
  //       getInfo(data);
  //       // onFileSelectedLoading.value = false;
  //       // textName.value = '上传成功';
  //     }
  //   } catch (err) {
  //     uploaditemList.value.map((item: any) => {
  //       item.onFileSelectedLoading = false;
  //       item.textName = '上传失败';
  //       return item;
  //     });
  //     // onFileSelectedLoading.value = false;
  //     // textName.value = '上传失败';
  //     Message.error('上传失败');
  //   }
  // };
  //上传成功解析getinfo
  const getInfo = async (id) => {
@@ -922,7 +851,7 @@
    console.log(name, '新建会话名称');
    const res = await addSessionApi({
      dialog_id: '',
      dialog_id: id,
      conversation_desc: name,
    });
    // console.log(res, "res");
@@ -942,6 +871,7 @@
  // 发送
  const sentClick = () => {
    displayedText.value="";
    sendMessage('click');
    uploaditemList.value = [];
  };
@@ -1000,11 +930,14 @@
    }
  };
  let message_stop = [];
  let message_id = "";
  const startChat = async (valMsg) => {
    chatDis.value = true;
    loading.value = true;
    chartLoading.value = true;
    toStop = false;
    displayedText.value = '';
    chartLoading.value = true;
    sessionDetailList.value.push({
      content: valMsg,
      role: 'user',
@@ -1033,6 +966,7 @@
    currIndex.value = 0;
    while (true) {
      if (toStop) {
        message_stop.push(message_id);
        displayedText.value = '';
        setChatDataMeg(chatDataMeg);
        break;
@@ -1044,6 +978,16 @@
        try {
          const val = JSON.parse(value?.data || '');
          const d = val?.data;
          if (message_id != d.message_id) {
            message_id = d.message_id;
            message_stop = [];
          } else {
            //message_stop中查找message_id
            const index = message_stop.findIndex(item => item === message_id);
            if (index > -1) {
              break;
            }
          }
          if (typeof d !== 'boolean') {
            // console.info("data:", d);
            streamStr.value = d.content;
@@ -1057,12 +1001,8 @@
          console.info('done');
          displayedText.value = '';
          chartLoading.value = false;
          if (isStopChat.value) {
            setChatDataMeg(chatDataMeg);
          } else {
            queryNewSessionDetail(activeSessionId.value);
            EventBus.emit('queryAppUsageList');
          }
          queryNewSessionDetail(activeSessionId.value);
          EventBus.emit('queryAppUsageList');
          break;
        }
      }
@@ -1073,14 +1013,8 @@
  };
  const stopChat = async () => {
    // const { code, data } = await stopChatApi(activeSessionId.value);
    // if (code === 200) {
    //   Message.success("已停止");
    //   queryNewSessionDetail(activeSessionId.value);
    // }
    loading.value = false;
    chatDis.value = false;
    isStopChat.value = true;
    toStop = true;
    console.log('stopChat');
    console.log(displayedText.value, 'displayedText');
@@ -1103,7 +1037,9 @@
      .concat(lastArr);
    console.log(sessionDetailList.value, 'sessionDetailList2');
    console.log(chatObj, 'chatObj对象');
    chatObj.message = chatObj.message.concat(lastArr);
    if (chatObj?.message) {
      chatObj.message = chatObj.message.concat(lastArr);
    }
    Object.assign(chatDataMeg, {
      id: chatObj.id,
      conversation_id: chatObj.id,
@@ -1133,7 +1069,6 @@
      agentTitle.value = data.name;
      from.name = data.name;
      refreshScroll(); //刷新滚动条位置
      isStopChat.value = false;
    }
  };
@@ -1205,6 +1140,7 @@
      // fileInput.value.cancel();
    });
    EventBus.on('newChat', () => {
      uploaditemList.value = [];
      agentType.value = '1';
      // createSession('');
      activeSessionId.value = '';