Files
dvcp_v2_wxcp_app/src/project/biaopin/AppDialogue/Detail.vue
2024-07-18 10:09:39 +08:00

295 lines
7.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="Detail">
<!-- <AiTopFixed>
<div class="back">
<div class="top-select" @click="back">
<u-icon name="arrow-left" color="#fff" size="28"></u-icon>返回
</div>
<p>模型应用</p>
</div>
<div class="search-content">
<u-search v-model="searchVal" :clearabled="true" placeholder="请输入搜索关键词…" :show-action="false"
bg-color="#F4F6FA" search-icon-color="#666" color="#666" height="72" @search="getSearchList" @clear="handerClear">
</u-search>
</div>
</AiTopFixed> -->
<div class="search-content">
<u-search v-model="searchVal" :clearabled="true" placeholder="请输入搜索关键词…" :show-action="false"
bg-color="#F4F6FA" search-icon-color="#666" color="#666" height="72" @search="getSearchList" @clear="handerClear">
</u-search>
</div>
<div class="list-content">
<div v-for="(item, index) in messageList" :key="index">
<div class="send-time">{{item.createTime.substring(5, 16)}}</div>
<div :class="item.userType == 1 ? 'item-left' : 'item-right'">
<img src="https://cdn.cunwuyun.cn/wechat/baiduAI/user-img.png" alt="" class="user-img" v-if="item.userType == 1">
<div class="item" :class="'item'+index">
<u-icon name="play-right-fill" color="#CCE2FF" size="20" v-if="item.userType != 1" class="u-icon-right"></u-icon>
<u-icon name="play-left-fill" color="#F3F5F7" size="20" v-if="item.userType == 1" class="u-icon-left"></u-icon>
<div class="voice-div" v-if="item.sdkFileUrl" @click="play(item.sdkFileUrl, index)">
<span>8</span>
<img src="https://cdn.cunwuyun.cn/wechat/baiduAI/play-d.gif" alt="" v-if="item.isPlay">
<img src="https://cdn.cunwuyun.cn/wechat/baiduAI/play-j.png" alt="" v-else>
</div>
<p v-if="!item.sdkFileUrl">{{item.content || ''}}</p>
</div>
<img src="https://cdn.cunwuyun.cn/wechat/baiduAI/user-img.png" alt="" class="user-img" v-if="item.userType != 1">
</div>
</div>
<AiEmpty v-if="!messageList.length"/>
</div>
</div>
</template>
<script>
import {mapState} from "vuex";
export default {
name: 'Detail',
props: ['params'],
data() {
return {
backgroundNavbar: {
background: 'url(https://cdn.cunwuyun.cn/wechat/biaopin/residentAssistant/header-bg.jpeg) no-repeat',
backgroundSize: 'cover',
},
searchVal: '',
messageList: [
// {
// userType: 0,
// sdkFileUrl: 'http://test87ftp.cunwuyun.cn/20240104/output.mp3',
// isPlay: false
// }
],
current: 1,
pages: 2,
aiConfigId: '',
conversationId: ''
}
},
computed: {
...mapState(['user']),
},
onLoad(e) {
this.aiConfigId = e.aiConfigId
this.conversationId = e.conversationId
this.getHistoryList()
},
onShow() {
document.title = 'Copilot小助理'
},
onPullDownRefresh() {
if(this.current > this.pages) {
return this.$u.toast('没有更多记录')
}
this.current = this.current + 1
this.getHistoryList()
},
methods: {
getHistoryList() {
if(!this.user.token) {
return this.$u.toast("请先进行登录")
}
this.$loading()
this.$http.post(`/app/appaicopilotinfo/list?current=${this.current}&size=10&content=${this.searchVal}&aiConfigId=${this.aiConfigId}&conversationId=${this.conversationId}`).then(res => {
if(res.code == 0 && res.data.records.length) {
res.data.records.map((item) => {
if(item.sdkFileUrl) {
item.isPlay = false
}
})
this.messageList = this.current == 1 ? res.data.records : [...res.data.records, ...this.messageList]
var idPage = res.data.records.length-1
this.$nextTick(() => {
uni.pageScrollTo({
duration: 300,
selector: this.current == 1 ? `.item${this.messageList.length-1}` : `.item${idPage}`
});
})
this.pages = res.data.pages
this.$hideLoading()
}else {
if(this.current == 1) {
this.messageList = []
}
}
})
},
getSearchList() {
this.current = 1
this.getHistoryList()
},
handerClear() {
this.searchVal = ''
this.getSearchList()
},
play(src, index) {
innerAudioContext.stop();
if(this.messageList[index].isPlay) {
innerAudioContext.onStop(() => {
this.messageList[index].isPlay = false
})
return
}
this.messageList.map((item) => {
if(item.sdkFileUrl) {
item.isPlay = false
}
})
this.messageList[index].isPlay = true
innerAudioContext.src = src;
this.$nextTick(() => {
innerAudioContext.play();
})
innerAudioContext.onEnded(() => {
this.messageList[index].isPlay = false
})
},
playStop(index) {
innerAudioContext.stop();
innerAudioContext.onStop(() => {
this.messageList[index].isPlay = false
})
},
back() {
this.$emit('back')
}
},
}
</script>
<style lang="scss" scoped>
page {
height: 100%;
}
.Detail {
height: 100vh;
background-color: #fff;
position: relative;
.back {
position: relative;
padding-top: 28px;
.top-select {
line-height: 64px;
background: #026AF2;
border-radius: 32px;
position: absolute;
left: 0;
top: 28px;
text-align: center;
padding: 0 24px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 28px;
color: #FFF;
z-index: 9;
::v-deep .u-icon {
margin-right: 8px;
}
}
p {
text-align: center;
font-family: PingFangSC-Regular;
font-size: 24px;
color: #708099;
line-height: 64px;
}
}
.search-content {
padding: 32px;
width: 100%;
background-color: #fff;
box-sizing: border-box;
position: fixed;
left: 0;
z-index: 99;
}
.list-content {
width: 100%;
box-sizing: border-box;
background-color: #fff;
padding: 144px 32px 364px;
.send-time {
display: block;
width: 100%;
line-height: 28px;
font-family: PingFangSC-Regular;
font-weight: 400;
font-size: 20px;
color: #999;
text-align: center;
margin-bottom: 28px;
}
.user-img {
display: inline-block;
width: 72px;
height: 72px;
vertical-align: top;
}
.item {
display: inline-block;
max-width: 440px;
border-radius: 8px;
padding: 18px;
box-sizing: border-box;
margin-bottom: 28px;
position: relative;
.voice-div {
img {
width: 26px;
height: 28px;
}
span {
display: inline-block;
color: #333;
font-size: 28px;
font-family: PingFangSC;
line-height: 28px;
margin-right: 68px;
}
}
p {
word-break: break-all;
line-height: 40px;
font-family: SourceHanSansCN-Regular;
font-size: 32px;
color: #333;
}
}
.item-right {
display: flex;
justify-content: flex-end;
.item {
background-color: #CCE2FF;
}
.user-img {
margin-left: 24px;
}
.u-icon-right {
position: absolute;
top: 12px;
right: -12px;
}
}
.item-left {
.item {
background-color: #F3F5F7;
}
.user-img {
margin-right: 24px;
}
.u-icon-left {
position: absolute;
top: 12px;
left: -12px;
}
}
}
}
</style>