|
|
<template> <!-- 新书推荐 --> <div class="content-main new-main"> <div class="swiper-container"> <div class="swiper-wrapper new-book-list"> <div v-for="(item,index) in rankingList" :key="index" class="swiper-slide" @click="handleDetails(index)"> <div class="book-list-item"> <div class="book-img"> <img :src="item.imgPath" :onerror="defaultImg"> </div> <div class="book-info"> <h4 class="title-item">{{ item.name }}</h4> <p>作者:{{ item.author }}</p> <p>出版社:{{ item.publisher }}</p> <p>出版年份:{{ item.publisherdate }}</p> </div> </div> </div> </div> <div class="icon iconfont prev-btn"> <svg class="icon svg-icon" aria-hidden="true"> <use xlink:href="#icon-zuohua" /> </svg> </div> <div class="icon iconfont next-btn"> <svg class="icon svg-icon" aria-hidden="true"> <use xlink:href="#icon-youhua" /> </svg> </div> </div> <BookDetails ref="detailDom" /> </div></template>
<script>import { Swiper } from 'vue-awesome-swiper'import 'swiper/swiper-bundle.css'// import { FetchNewBookRecommend, FetchCoverByISBN, getBookDetailsByISBN } from '@/api/inquiryMachine'
import { FetchNewBook, FetchMarcByISBN, getBookDetailsByISBN } from '@/api/inquiryMachine'import BookDetails from './module/bookDetails.vue'export default { name: 'NewBookRecommend', components: { BookDetails }, data() { return { defaultImg: 'this.src="' + require('@/assets/images/default-img.png') + '"', coverUrl: null, rankingList: [] } }, created() { this.getNewBook() }, mounted() { }, methods: { initSwiper() { this.$nextTick(() => { new Swiper('.swiper-container', { touchEventsTarget: '.swiper-container', slidesPerView: 5, spaceBetween: 20, centeredSlides: true, observer: true, // loop: true,
centeredSlidesBounds: true, watchSlidesVisibility: true, navigation: { nextEl: '.next-btn', prevEl: '.prev-btn' } // on: {
// click: function() {
// alert(this.clickedIndex)
// }
// }
}) }) },
getNewBook() { console.log('this.$route.query.libcode', this.$route.query.libcode) const params = { 'libcode': this.$route.query.libcode, 'size': 40 } FetchNewBook(params).then(res => { // 图片地址格式 http://192.168.99.67:8080/downloadFile/qytsg/ae281b90-b100-4541-9379-3e104854652c.png
// 图片地址格式 http://192.168.99.72:14000/api/fileRelevant/getImg?imgType=2&imgId=c964bcab-ec82-43f0-8653-04d930d7da4a
const linkSrc = process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API console.log('res.data', res) this.rankingList = res.map(item => { if (item.imgPath) { item.imgPath = linkSrc + '/api/fileRelevant/getImg?imgType=2&imgId=' + item.imgPath return Promise.resolve(item) } else { const params = { 'sIsbn': item.isbn } return FetchMarcByISBN(params).then(response => { const result = JSON.parse(response.data)[0] if (result.srcurl) { item.imgPath = result.srcurl return item } else if (result.img) { item.imgPath = 'data:image/png;base64,' + result.img return item } else { return null } }) } }) Promise.all(this.rankingList).then(results => { this.rankingList = results.filter(item => item !== null) this.initSwiper() })
console.log('this.rankingList', this.rankingList) }) }, // getBookList() {
// const linkSrc = process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API
// const params = {
// libcode: this.libcode,
// pageNo: 1,
// pageSize: 10
// }
// FetchNewBookRecommend(params).then(res => {
// console.log(res)
// this.rankingList = res.newbookList.map((item, index) => {
// if (item.nbImgPath) {
// item.cover = linkSrc + '/downloadFile' + item.nbImgPath
// } else {
// item.cover = null
// }
// return item
// })
// this.initSwiper()
// }).catch(() => {
// this.$message.error('接口错误')
// })
// },
// getCoverByISBN(isbn, item) {
// const params = {
// isbn: isbn
// }
// FetchCoverByISBN(params).then((res) => {
// // item.cover = window.URL.createObjectURL(res)
// item.cover = res
// this.rankingList.push(item)
// this.initSwiper()
// })
// },
// 详情
handleDetails(index) { const params = { isbn: this.rankingList[index].isbn.replace(/\-/g, '') } getBookDetailsByISBN(params).then(res => { const linkSrc = process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API res.imgPath = linkSrc + '/api/fileRelevant/getImg?imgType=2&imgId=' + res.bookCover this.$refs.detailDom.bookData = res
this.$refs.detailDom.dialogVisible = true }) } }}</script>
<style lang="scss">@import "~@/assets/styles/index.scss";.new-main{ position: relative; padding: 0 50px;}.new-book-list{ color: #333; .book-list-item{ width: 100%; box-shadow: 0px 0px 20px 1px #D2D2D2; border-radius: 2px 2px 2px 2px; } .book-img{ height: 6.575rem; display: flex; align-items: center; overflow: hidden; img{ display: block; width: 100%; // height: 100%;
} } .book-info{ padding: 10px 20px; h4{ font-weight: normal; margin-bottom: 20px; } p{ margin-bottom: 10px; } }}
.icon{ height: 1.1em;}.prev-btn,.next-btn{ position: absolute; bottom: 60px; font-size: 60px; // color: #71C09E;
z-index: 999;}
.prev-btn{ left: 100px;}
.next-btn{ right: 100px;}
.swiper-container { width: 100%; height: 100%; overflow: hidden;}.swiper-slide { display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; transition: 300ms; transform: scale(0.84); .book-info{ line-height: 20px; font-size: 16px; h4{ font-size: 20px; } }}
.swiper-slide.swiper-slide-prev,.swiper-slide.swiper-slide-next { font-size: 28px; transform: scale(0.9); .book-info{ line-height: 28px; font-size: 22px; h4{ font-size: 28px; } }}
.swiper-slide-active,.swiper-slide-duplicate-active { transform: scaleX(1); .book-info{ line-height: 40px; font-size: 28px; h4{ font-size: 40px; } }}</style>
|