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.
183 lines
5.5 KiB
183 lines
5.5 KiB
<template>
|
|
<div class="content-main">
|
|
<Search ref="searchRefs" />
|
|
<div class="bookList-wrap" style="margin: 30px 44px;">
|
|
<div class="bookList-left">
|
|
<Ranking />
|
|
</div>
|
|
<!-- 图书列表 -->
|
|
<div class="book-content2">
|
|
<div class="result">检索结果:<span>{{ totalNum }}</span>册</div>
|
|
<div class="book-all-list" @scroll="listenScroll">
|
|
<div v-for="(item,index) in bookList" :key="index" class="book-item" @click="getBookDetaisByBookRecNo(item)">
|
|
<div class="book-info">
|
|
<div class="book-img">
|
|
<img :src="item.bookCover && item.bookCover === null ? defaultImg : baseUrl + '/api/fileRelevant/getImg?imgType=2&imgId=' + item.bookCover+'.jpg'" :onerror="defaultImg" alt="">
|
|
<!-- <img :src="coverUrl+'/demoRecommend/getBookCover.do?id='+item.id" :onerror="defaultImg" alt=""> -->
|
|
</div>
|
|
<div class="book-txt">
|
|
<h4> {{ item.title }} </h4>
|
|
<div class="book-autor"> {{ item.author }} </div>
|
|
<div class="book-publish"> {{ item.publisher }} </div>
|
|
<div class="book-isbn">ISBN:{{ item.isbn }}</div>
|
|
<!-- <div class="book-intro title-item"> {{ item.introduce }} </div> -->
|
|
<div class="to-book-more">查看详情</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="!hasNextPage" class="load-data">暂无更多数据</div>
|
|
<div v-else class="load-data">加载中...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<BookDetails ref="bookDetailsRef" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { FetchFindBooksByQuery, FetchBookDetaisByBookRecNo } from '@/api/inquiryMachine'
|
|
import { positionCrud } from './mixins/index.js'
|
|
import Search from './module/search'
|
|
import Ranking from './module/ranking'
|
|
import BookDetails from './module/bookDetails'
|
|
|
|
export default {
|
|
name: 'BookList',
|
|
components: {
|
|
Search,
|
|
Ranking,
|
|
BookDetails
|
|
},
|
|
mixins: [positionCrud],
|
|
data() {
|
|
return {
|
|
baseUrl: process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API,
|
|
defaultImg: 'this.src="' + require('@/assets/images/default-img.png') + '"',
|
|
bookList: [],
|
|
coverUrl: null,
|
|
pageIndex: 1,
|
|
pageSize: 10,
|
|
hasNextPage: false,
|
|
totalPages: 0,
|
|
totalNum: 0
|
|
}
|
|
},
|
|
computed: {
|
|
},
|
|
created() {
|
|
},
|
|
mounted() {
|
|
this.getBookRecommendList()
|
|
},
|
|
methods: {
|
|
getLocation(row) {
|
|
const parts = []
|
|
if (row.floorName) {
|
|
parts.push(row.floorName)
|
|
}
|
|
if (row.regionName) {
|
|
parts.push(row.regionName)
|
|
}
|
|
if (row.gridName) {
|
|
parts.push(row.gridName)
|
|
}
|
|
return parts.length > 0 ? parts.join('-') : '-'
|
|
},
|
|
getBookRecommendList() {
|
|
let params
|
|
if (localStorage.getItem('searchKey')) {
|
|
this.$refs.searchRefs.keyword = localStorage.getItem('searchKey')
|
|
this.$refs.searchRefs.keyWordIndex = parseInt(localStorage.getItem('keyWordIndex'))
|
|
params = {
|
|
'fondsCode': this.libcode,
|
|
'search': localStorage.getItem('searchKey'),
|
|
'page': this.pageIndex - 1,
|
|
'size': this.pageSize
|
|
}
|
|
} else {
|
|
params = {
|
|
'fondsCode': this.libcode,
|
|
'search': this.$refs.searchRefs.keyword,
|
|
'page': this.pageIndex - 1,
|
|
'size': this.pageSize
|
|
}
|
|
}
|
|
FetchFindBooksByQuery(params).then(res => {
|
|
const resData = res.content
|
|
if (resData.length === 0) {
|
|
this.hasNextPage = false
|
|
} else {
|
|
this.hasNextPage = resData.length === this.pageSize
|
|
}
|
|
|
|
this.totalNum = res.totalElements
|
|
this.totalPages = res.totalPages
|
|
this.bookList = this.bookList.concat(resData)
|
|
// if (this.pageIndex > res.totalPages) {
|
|
// this.hasNextPage = false
|
|
// }
|
|
localStorage.removeItem('searchKey')
|
|
localStorage.removeItem('keyWordIndex')
|
|
}).catch(() => {
|
|
this.$message.error('接口错误')
|
|
})
|
|
},
|
|
// 监听滚动
|
|
listenScroll(e) {
|
|
const ele = e.srcElement ? e.srcElement : e.target
|
|
if (ele.scrollTop + ele.offsetHeight > ele.scrollHeight - 100) { // 监听滚动到div底部
|
|
this.addMoreData()
|
|
}
|
|
},
|
|
// 加载更多
|
|
addMoreData() {
|
|
if (this.hasNextPage) {
|
|
this.getBookRecommendList()
|
|
this.pageIndex++
|
|
}
|
|
},
|
|
getBookDetaisByBookRecNo(item) {
|
|
FetchBookDetaisByBookRecNo({
|
|
'bookRecNo': item.bookRecNo
|
|
}).then(res => {
|
|
this.$refs.bookDetailsRef.getBookRankingDetail(res)
|
|
}).catch(() => {
|
|
this.$message.error('接口错误')
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import "~@/assets/styles/index.scss";
|
|
::v-deep .el-dialog{
|
|
width: 930px;
|
|
border-radius: 16px;
|
|
background: #F8F8FD;
|
|
box-shadow: 0px 3px 20px 1px rgba(0,0,0,0.05);
|
|
.el-dialog__body{
|
|
padding: 20px 0 23px 0;
|
|
}
|
|
}
|
|
|
|
.detail-dialog{
|
|
::v-deep .el-dialog__header{
|
|
display: none;
|
|
}
|
|
}
|
|
.dialog-book{
|
|
padding: 30px;
|
|
font-size: 28px;
|
|
.book-txt{
|
|
color: #191A1A!important;
|
|
font-size: 30px !important;
|
|
}
|
|
.book-autor{
|
|
font-size: 24px !important;
|
|
}
|
|
.book-publish{
|
|
font-size: 28px !important;
|
|
}
|
|
}
|
|
</style>
|