zhangxiao
2024-08-27 b9bfd6535e15d700f469c25008dfb323e28dbfaa
src/views/sessionManager/index.vue
@@ -78,9 +78,38 @@
                  />
                </template>
                <template #content>
                  <div :class="{ chartUserText: theme === 'light' }"
                    >{{ sessionDetail.content }}
                  <div :class="{ chartUserText: theme === 'light' }">
                    {{ sessionDetail.content }}
                    <!-- <a-input
                      :style="{ width: '100%' }"
                      v-model="sessionDetail.content"
                      v-if="isEdit"
                    />
                    <div v-else>
                      {{ sessionDetail.content }}
                    </div> -->
                  </div>
                  <!-- <div v-if="!isEdit">
                    <span
                      class="action"
                      v-if="index != 0"
                      @click="copy(sessionDetail.content)"
                    >
                      <icon-copy /> 复制
                    </span>
                    <span class="action" @click="edit()">
                      <icon-pen /> 编辑
                    </span>
                  </div>
                  <a-space v-else>
                    <a-button type="outline" size="mini" @click="cancelEdit(1)"
                      >取消</a-button
                    >
                    <a-button type="primary" size="mini" @click="cancelEdit(2)"
                      >确定</a-button
                    >
                  </a-space> -->
                </template>
              </a-comment>
              <a-comment v-else-if="sessionDetail.role === 'assistant'">
@@ -99,8 +128,10 @@
                        backgroundColor:
                          theme === 'light' ? '#ffffff' : '#000000',
                      }"
                      style="border: none;"
                      v-for="(breakContent, breakIndex) in breakLine(sessionDetail.content)"
                      style="border: none"
                      v-for="(breakContent, breakIndex) in breakLine(
                        sessionDetail.content
                      )"
                    >
                      <div
                        :class="{ chatItemAnswer: theme === 'light' }"
@@ -108,15 +139,16 @@
                        backgroundColor:
                          theme === 'light' ? '#ffffff' : '#000000',
                      }"
                        style="border: none;"
                      v-if="isExistTip(breakContent)">
                        style="border: none"
                        v-if="isExistTip(breakContent)"
                      >
                        <div
                          :class="{ chatItemAnswer: theme === 'light' }"
                          :style="{
                        backgroundColor:
                          theme === 'light' ? '#ffffff' : '#000000',
                      }"
                          style="border: none;"
                          style="border: none"
                          v-for="(item, tipIndex) in tipMatch(breakContent)"
                        >
                      <span v-if="tipIndex == 0">
@@ -151,9 +183,7 @@
                            :src="tipImage"
                          />
                        </a-tooltip>
                        {{
                              breakContent.substring(item.index+5)
                            }}
                            {{ breakContent.substring(item.index + 5) }}
                      </span>
                          <span v-else>
                        {{
@@ -185,7 +215,7 @@
                    <a-textarea
                      readonly
                      auto-size
                      v-model="sessionDetail.content"
                      :default-value="chartText(sessionDetail.content)"
                      :class="{ chatItemAnswer: theme === 'light' }"
                      :style="{
                      backgroundColor:
@@ -194,6 +224,9 @@
                      style="border: none"
                    >
                    </a-textarea>
                    <!-- <div v-html="chartText(sessionDetail.content)">
                    </div> -->
                  </a-card>
                </template>
                <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
@@ -237,6 +270,7 @@
                  >
                    <icon-refresh /> 重新生成
                  </span>
                  <!-- <span class="action"><icon-to-bottom />下载 </span> -->
                </template>
              </a-comment>
              <a-comment v-else-if="sessionDetail.role === 'last'">
@@ -502,7 +536,7 @@
  import docx from '@/views/dmx/knowledgeLib/components/docx.vue';
  import excel from '@/views/dmx/knowledgeLib/components/excel.vue';
  import txtPdf from '@/views/dmx/knowledgeLib/components/txtPdf.vue';
  import { is } from "immutable";
  import { is } from 'immutable';
  // const url = ref('../../assets/session/PDF.png');
@@ -589,17 +623,29 @@
  const breakLine = (message: string): string[] => {
    //按\n分割字符串
    let arr = message.split('\n');
    return arr
  }
    return arr;
  };
  const chartText = (message: string): string => {
    //去除所有的#和**
    let arr = message.replace(/\*\*|\#\#\#/g, '');
    return arr;
  };
  const tipMatch = (msg: string): any[] => {
    //match session.content中的##[0-9]$$的索引
    let indexs: any[] = [];
    let preTip = 0;
    let matches=msg.match(/##([0-9]+)\$\$/g)
    let matches = msg.match(/##([0-9]+)\$\$/g);
    matches?.map((item) => {
      let i = msg.indexOf(item);
      indexs.push({ index: i, item: item, preIndex: preTip, len: matches.length });
      indexs.push({
        index: i,
        item: item,
        preIndex: preTip,
        len: matches.length,
      });
      preTip = i;
    });
    return indexs;
@@ -713,6 +759,19 @@
    await toClipboard(text); //参数为要复制的文本
  };
  const isEdit = ref(false);
  const edit = () => {
    isEdit.value = !isEdit.value;
  };
  const cancelEdit = (val) => {
    if (val == 1) {
      isEdit.value = !isEdit.value;
    } else {
      //编辑保存
      isEdit.value = !isEdit.value;
    }
  };
  const DialogList = async () => {
    const { code, data } = await getDialogListApi();
    if (code === 200) {