You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.7 KiB

9 months ago
<template>
<template v-for="(item, index) in source" :key="index">
<div v-if="item.type === 'table'" style="width: 100%; position: relative">
<chatTable :data="item.content"></chatTable>
<el-button style="position: absolute;top: 5px;right: 0;z-index: 1;width:30px;height: 30px" @click="downLoadTable(item.content)">
<el-icon><Download/></el-icon>
</el-button>
</div>
<div v-else-if="item.type === 'html_image'" style="width: 100%;margin-top: 5px;height: 320px">
<htmlCharts :is_large="is_large" :index="'chat-iframe-'+chatIndex+'-'+index" :data="item.content"></htmlCharts>
</div>
<div v-else-if="item.type === 'G6_ER'" style="width: 100%;height: 300px; overflow: hidden; margin-top: 5px;position: relative">
<antvg6 :is_large="is_large" :g6Data="item.content" :g6Index="'g6-container-'+chatIndex+'-'+index"></antvg6>
<el-button style="position: absolute;top: 5px;right: 0;z-index: 1;width:30px;height: 30px" @click="fullscreenG6(item.content)">
<el-icon><FullScreen/></el-icon>
</el-button>
</div>
<div v-if="item.type === 'docs'" style="width: 100%;margin-top: 5px">
<div v-for="doc in item.docs">
<el-link type="primary" @click="downLoadFile(doc)" :underline="false">{{ doc.file_name }}</el-link>
</div>
</div>
9 months ago
<div v-else style="width: 100%;margin-top: 5px">
<markdown :markdown-string="item.content"></markdown>
</div>
</template>
</template>
<script setup>
import * as XLSX from 'xlsx';
6 months ago
import { saveAs } from 'file-saver';
9 months ago
import markdown from './markdown.vue'
import antvg6 from './antv-g6.vue'
import chatTable from './chatTable.vue'
import htmlCharts from './htmlCharts.vue'
import {Download, FullScreen} from "@element-plus/icons-vue";
import { ref, watch} from 'vue'
const { proxy } = getCurrentInstance();
9 months ago
const props = defineProps({
source: Array,
is_large: Boolean,
chatIndex: Number,
})
const emit = defineEmits(['fullscreenG6'])
function fullscreenG6(data){
emit('fullscreenG6',data)
}
function downLoadFile(doc){
let data = {file:doc.file_name,bucket: doc.bucket,sessionId: doc.session_id}
proxy.download("/default-api/aichat/file/download", {
...data,
}, doc.file_name);
}
9 months ago
function downLoadTable(data){
const worksheet = XLSX.utils.json_to_sheet(data);
// 创建一个新的工作簿并将工作表添加到工作簿中
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 生成 Excel 文件并触发下载
6 months ago
const excelBuffer = XLSX.write(workbook,{bookType:'xlsx',type:'array'});
const excel = new Blob([excelBuffer], { type: 'application/octet-stream' });
saveAs(excel, '导出文件.xlsx');
9 months ago
}
</script>
<style lang="scss" scoped>
</style>