suerprisePlus
2024-07-16 6069325e1a37cf0462afda1627d4c660735dc57e
src/components/Chat/chatList.vue
@@ -1,56 +1,95 @@
<template>
  <div class="body">
    <div :style="pageConfig.width | setWidth">
  <div class="body webBody">
    <div :class="$store.state.setScreenFlag ? 'webmainBox_Active' : 'webmainBox'">
      <div class="web__main" ref="main">
        <div class="web__main-item" v-for="(item, index) in list" :key="loding(index)"
          :class="{ 'web__main-item--mine': item.mine }">
          <div class="web__main_content">
            <div>
              <img :src="item.img" />
            </div>
            <div class="web__main_Date">
              <div>
                <cite>
                  <div style="display: flex">
                  <div style="float: left;">
                    {{ item.name }}
                    <!-- <div style="margin-left: 10px" v-show="item.file">
                      <el-select
                        @change="(val) => setFileChange(val)"
                        v-model="item.file"
                        size="mini"
                      >
                        <el-option
                          v-for="(res, key) in item.fileList"
                          :key="key"
                          :label="res.name"
                          :value="res.url"
                        >
                        </el-option>
                      </el-select>
                    </div> -->
                  </div>
                  <div>
                  <div v-show="item.sourceValue" class="sourcefrom" style="float: left;margin-left:20px">
                    <el-select size="small" v-model="item.sourceValue" placeholder="资料来源">
                      <el-option value="1" label="GEDB"></el-option>
                      <el-option value="2" label="GeoAgent"></el-option>
                    </el-select>
                  </div>
                  <div style="float: right;">
                    {{ item.date }}
                  </div>
                </cite>
              </div>
              <div class="web__main-text">
                <div v-for="(res, key) in item.list" :key="key">
                  <div v-if="res.type === 'html'">
                    <div v-html="res.val"></div>
                  </div>
                  <div v-if="res.type === 'JsonHtml'">
                    <div class="JsonHtml">
                      <table>
                        <tr>
                          <th v-show="index != 'rowspan'" v-for="(item, index) in res.val[0]" :key=index>
                            {{ index }}
                          </th>
                        </tr>
                        <tr v-if="!item.break" v-for="(item, index) in res.val" :key=index>
                          <td v-if="item.rowspan != ''" :rowspan="item.rowspan">
                            {{ item[Object.keys(item)[0]] }}
                          </td>
                          <td v-if="Object.keys(item)[0] != n && n != 'rowspan'" v-for="(rs, n ) in item " :key="n"> {{
                            item[n] }}</td>
                          <!--  -->
                        </tr>
                      </table>
                      <div>
                        <p v-for="(item, index) in res.val[res.val.length - 1].break" :key=index>
                          {{ item.bak }}
                        </p>
                      </div>
                    </div>
                  </div>
                  <div v-if="res.type === 'text'">
                    {{ res.val }}
                  </div>
                  <div v-else-if="res.type == 'loader'">
                    <span v-html="handleDetail(res.val)" ref="content"></span>
                  </div>
                  <div style="margin-bottom:10px" v-else-if="res.type == 'rag'">
                  <div v-else-if="res.type == 'markdown'">
                    <vue-markdown :source="res.val" class="newConcentLeft my-markdown"></vue-markdown>
                    <div v-show="res.link" style="float: right; ">
                      <a @click="setDownLoadFile(res.link)" style="color: white">下载报告</a>
                    </div>
                  </div>
                  <div v-else-if="res.type == 'table'">
                    <table class="contTable">
                      <thead>
                        <th v-for="(item, index) in res.val[0]" :key="index">
                          {{ item }}
                        </th>
                      </thead>
                      <tbody>
                        <tr v-for="(item, index) in res.val[1]" :key="index">
                          <td v-for="(rs, flag) in item" :key="flag">
                            {{ rs }}
                          </td>
                        </tr>
                      </tbody>
                    </table>
                  </div>
                  <div style="margin-bottom: 10px" v-else-if="res.type == 'rag'">
                    <div v-show="res.acction">
                      {{ res.acction }}
                    </div>
                    <div> {{ res.question }} </div>
                    <div style="display: flex;">
                    <div>{{ res.question }}</div>
                    <div style="display: flex">
                      来源: {{ res.source }}
                      <div @click.stop="setRagMoreList(res.msg)" class="setRagMore" v-show="res.more">
                        ...更多
@@ -58,9 +97,7 @@
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
@@ -94,7 +131,7 @@
        width = value - 30 + "px";
      }
      if (width == "100vh") {
        return "99vh"
        return "99vh";
      }
      return width;
    }
@@ -118,7 +155,7 @@
      imgSrc: "",
      videoSrc: "",
      audioSrc: "",
      isDisabled: true,
      isDisabled: true
    };
  },
  watch: {
@@ -132,6 +169,21 @@
    }
  },
  methods: {
    setrowSpan(res, name) {
      if (Object.keys(res)[0] == name) {
        return res['rowspan']
      } else {
        return 1
      }
    },
    setDownLoadFile(res) {
      const downloadLink = document.createElement('a');
      downloadLink.href = res
      document.body.appendChild(downloadLink);
      downloadLink.click();
      document.body.removeChild(downloadLink);
    },
    setRagMoreList(res) {
      if (this.isDisabled) {
        this.isDisabled = false;
@@ -140,9 +192,8 @@
        }, 500);
        setTimeout(() => {
          this.isDisabled = false;
        }, 3000)
        }, 3000);
      }
    },
    setFileChange(res) {
      if (res == "testUrl") return;
@@ -269,8 +320,57 @@
  vertical-align: bottom;
  display: inline-block;
}
.contTable {
  border: 1px solid white;
  font-family: "Arial", sans-serif !important;
}
.contTable th {
  border: 1px solid white;
  padding: 10px;
  text-align: center;
  font-size: 16px;
}
.contTable td {
  border: 1px solid white;
  padding: 10px;
  text-align: center;
  font-size: 14px;
}
</style>
<style scoped>
.webBody {
  display: flex;
  justify-content: center;
}
/deep/.el-select:hover .el-input__inner {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #ffffff !important;
}
/deep/ .el-input__inner {
  background-color: rgba(255, 255, 255, 0.1) !important;
  padding: 0 10px !important;
  color: #ffffff !important;
}
/deep/.el-input--small .el-input__inner {
  height: 30px;
  font-size: 12px;
}
.webmainBox {
  width: 50%;
}
.webmainBox_Active {
  width: 90%;
}
.web__main-item {
  position: relative;
  font-size: 0;
@@ -291,7 +391,6 @@
  padding: 10px !important;
  border-radius: 10px !important;
  margin-top: 10px;
}
.web__main-user {
@@ -368,8 +467,8 @@
  text-align: left;
  font-style: normal;
  width: 100%;
  display: flex;
  justify-content: space-between;
  /* display: flex; */
  /* justify-content: space-between; */
}
.web__main-arrow {
@@ -469,15 +568,40 @@
.setRagMore {
  margin-left: 10px;
}
.setRagMore:hover {
  color: #409EFF;
  color: #409eff;
}
</style>
<style>
.el-select-dropdown {
  background-color: #555555 !important;
  color: #409eff !important;
}
.el-select-dropdown__item {
  color: #ffffff !important;
  background: transparent !important;
}
.el-select-dropdown__item.selected {
  color: #409eff !important;
  background: transparent !important;
}
.el-select-dropdown__item.selected span {
  color: #409eff !important;
  background: transparent !important;
}
.el-select-dropdown__item:hover {
  /* background-color: #555555 !important; */
  color: #409eff !important;
}
.parentBox {
  height: 100%;
  /* background: rgb(31, 31, 31); */
@@ -544,35 +668,130 @@
    /* 结束旋转 div 元素 */
  }
}
.newConcentLeft {
  margin: 16px;
  font-family: PingFangSC, PingFang SC;
  font-weight: 400;
  font-size: 14px;
  text-align: left;
  font-style: normal;
  white-space: pre-wrap;
  word-wrap: break-word;
}
.JsonHtml table {
  border: 1px solid white;
  text-align: center;
  line-height: 30px;
  font-family: "Arial", sans-serif;
  font-size: 16px;
}
.JsonHtml tr {
  border: 1px solid white;
}
.JsonHtml th {
  border: 1px solid white;
  padding: 10px 10px;
}
.JsonHtml td {
  border: 1px solid white;
  padding: 10px 10px;
}
.newConcentLeft table {
  border: 1px solid white;
  text-align: center;
  line-height: 30px;
  font-family: "Arial", sans-serif;
  font-size: 16px;
}
.newConcentLeft tr {
  border: 1px solid white;
}
.newConcentLeft th {
  border: 1px solid white;
}
.newConcentLeft td {
  border: 1px solid white;
}
.newConcentLeft img {
  width: 75%;
}
.newConcentLeft table {
  width: 100%;
}
.newConcentLeft pre {
  white-space: normal;
}
.newConcentLeft li {
  font-size: 15px !important;
  line-height: 15px !important;
  list-style: disc;
}
.newConcentLeft p {
  font-size: 15px !important;
  /*  */
}
.newConcentLeft h1 {
  font-size: 2rem !important;
  padding: 20px 0px;
  border-bottom: 1px solid rgba(209, 209, 209, 0.0);
}
.newConcentLeft h2 {
  padding:30px 0px;
  line-height: 0px;
  border-bottom: 1px solid rgba(209, 209, 209, 0.0);
  /*  */
}
</style>
<style>
.web_Main_markDown h1 {
  line-height: 30px !important;
/* .web_Main_markDown h1 {
  line-height: 20px !important;
  font-size: 20px !important;
}
.web_Main_markDown h2 {
  line-height: 25px !important;
  line-height: 20px !important;
  font-size: 18px !important;
  margin-left: 10px;
}
.web_Main_markDown h3 {
  line-height: 25px !important;
  line-height: 20px !important;
  font-size: 18px !important;
  margin-left: 10px;
}
.web_Main_markDown li {
  line-height: 20px !important;
  line-height: 15px !important;
  font-size: 16px !important;
  margin-left: 20px;
}
.web_Main_markDown p {
  line-height: 20px !important;
  line-height: 15px !important;
  font-size: 16px !important;
  margin-left: 20px;
}
@@ -581,5 +800,5 @@
  background: #555555;
  padding: 10px;
  border-radius: 10px;
}
</style>
} */
</style>