江夏区图书馆自助查询机
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

<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>