mirror of
http://112.124.100.131/ebiz-ai/ebiz-base-ai.git
synced 2025-12-13 04:46:50 +08:00
feat(AI): 添加 PDF预览功能并优化界面
- 新增 pdf.vue 组件用于渲染 PDF 文件 - 在 TabBox组件中添加 PDF 预览对话框 - 优化 treasureBox 组件的列表展示 - 在 AI 页面中添加滚动到顶部按钮 - 修复 SCSS 变量定义方式
This commit is contained in:
@@ -5,18 +5,33 @@
|
|||||||
{{item.title}}
|
{{item.title}}
|
||||||
</div>
|
</div>
|
||||||
<div class='box-container'>
|
<div class='box-container'>
|
||||||
<div v-for='list in item.list'>
|
<div v-for='list in item.list' :class='list.value?"link":"" ' @click='view(list)'>
|
||||||
{{list.title}}
|
{{list.title}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<van-dialog v-model="show" width='90%' :title='title' confirm-button-color='#2E5CA9'>
|
||||||
|
<div style='height: 70vh;overflow: scroll' >
|
||||||
|
<pdf :url='url' v-if='show'></pdf>
|
||||||
|
</div>
|
||||||
|
</van-dialog>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import {Dialog} from 'vant'
|
||||||
|
import pdf from '@/views/AI/components/pdf.vue'
|
||||||
export default {
|
export default {
|
||||||
name: 'box',
|
name: 'box',
|
||||||
data() {
|
data() {
|
||||||
return {}
|
return {
|
||||||
|
url:'',
|
||||||
|
show:false,
|
||||||
|
title:''
|
||||||
|
}
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
list: {
|
list: {
|
||||||
@@ -25,9 +40,20 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {},
|
watch: {},
|
||||||
components: {},
|
components: {
|
||||||
|
[Dialog.name]:Dialog,
|
||||||
|
pdf
|
||||||
|
},
|
||||||
filters: {},
|
filters: {},
|
||||||
methods: {},
|
methods: {
|
||||||
|
view(item){
|
||||||
|
console.log(item)
|
||||||
|
if(!item.value) return
|
||||||
|
this.url = item.value
|
||||||
|
this.title = item.title
|
||||||
|
this.show = true
|
||||||
|
},
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -40,6 +66,7 @@ export default {
|
|||||||
$primary-color: #2E5CA9; // 修复了 SCSS 变量的定义方式
|
$primary-color: #2E5CA9; // 修复了 SCSS 变量的定义方式
|
||||||
$primary-text-color: #F6AA21; // 修复了 SCSS 变量的定义方式
|
$primary-text-color: #F6AA21; // 修复了 SCSS 变量的定义方式
|
||||||
$primary-trans-color: rgba(135, 162, 208, 0.5); // 使用rgba定义颜色,透明度为0.8
|
$primary-trans-color: rgba(135, 162, 208, 0.5); // 使用rgba定义颜色,透明度为0.8
|
||||||
|
|
||||||
.tab-box{
|
.tab-box{
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -61,6 +88,10 @@ $primary-trans-color: rgba(135, 162, 208, 0.5); // 使用rgba定义颜色,透
|
|||||||
//justify-content: space-between;
|
//justify-content: space-between;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
.link{
|
||||||
|
color:$primary-color
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
48
src/views/AI/components/pdf.vue
Normal file
48
src/views/AI/components/pdf.vue
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<template>
|
||||||
|
<div style='height: 100%;'>
|
||||||
|
<div v-if='!numPages' style='height: 100%;display: flex;align-items: center;justify-content: center;'>
|
||||||
|
<van-loading color="#2E5CA9" vertical>加载中...</van-loading>
|
||||||
|
</div>
|
||||||
|
<pdf-container :src="url" ref="pdfContainer" v-for="index in numPages" :key="index" :page="index" ></pdf-container>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import pdfContainer from 'vue-pdf'
|
||||||
|
export default {
|
||||||
|
name: 'pdfTemplate',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// url: 'https://www.gjtool.cn/pdfh5/git.pdf',
|
||||||
|
// url: 'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf',
|
||||||
|
numPages: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
url: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
pdfContainer
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getNumPages()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getNumPages() {
|
||||||
|
let loadingTask = pdfContainer.createLoadingTask(this.url)
|
||||||
|
loadingTask.promise.then(pdf => {
|
||||||
|
this.numPages = pdf.numPages
|
||||||
|
this.url = loadingTask
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
// .catch(err => {
|
||||||
|
// console.log('pdf加载失败', err)
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -75,7 +75,7 @@ export default {
|
|||||||
list:this.item.detail.knowledge[i].split(',').map(item=>{
|
list:this.item.detail.knowledge[i].split(',').map(item=>{
|
||||||
return {
|
return {
|
||||||
title:item,
|
title:item,
|
||||||
value:item
|
// value:item
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -7,6 +7,13 @@
|
|||||||
<messageComponent :messagesList="messages" :is-deep="isDeep" :is-search="isSearching" :think-ok='isThink'></messageComponent>
|
<messageComponent :messagesList="messages" :is-deep="isDeep" :is-search="isSearching" :think-ok='isThink'></messageComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 按钮点击滚动到顶-->
|
||||||
|
<div class="button-container" style='background: #fff'>
|
||||||
|
<van-icon name="upgrade" size='2em' @click='scrollToTop' />
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<button @click="searchInternet" :class="{ active: isSearching }">
|
<button @click="searchInternet" :class="{ active: isSearching }">
|
||||||
@@ -97,8 +104,10 @@ export default {
|
|||||||
this.hasTreasureBox()
|
this.hasTreasureBox()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
this.autoScrollEnabled = true
|
||||||
this.axiosGetAiChat()
|
this.axiosGetAiChat()
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
throttle(fn, delay = 50) {
|
throttle(fn, delay = 50) {
|
||||||
@@ -112,6 +121,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
scrollToTop(){
|
||||||
|
const messageArea = this.$refs.messageArea
|
||||||
|
messageArea.scrollTop = 0
|
||||||
|
},
|
||||||
|
|
||||||
scrollToBottom: function () {
|
scrollToBottom: function () {
|
||||||
if (!this.autoScrollEnabled) return
|
if (!this.autoScrollEnabled) return
|
||||||
|
|
||||||
@@ -285,7 +299,13 @@ $primary-trans-color: rgba(135, 162, 208, 0.5);
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
background: #f7f8fa;
|
background: #f7f8fa;
|
||||||
|
position: relative;
|
||||||
|
.button-container{
|
||||||
|
position: fixed;
|
||||||
|
bottom: 120px;
|
||||||
|
right:10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
.chat-content {
|
.chat-content {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
.message-area {
|
.message-area {
|
||||||
|
|||||||
Reference in New Issue
Block a user