xuhuajiao
1 month ago
6 changed files with 249 additions and 7 deletions
-
1public/index.html
-
4public/static/config.js
-
4src/main.js
-
3src/utils/request.js
-
231src/views/newBookRecommend-dxh.vue
-
13src/views/newBookRecommend.vue
@ -0,0 +1,4 @@ |
|||
window.g = { |
|||
AXIOS_TIMEOUT: 10000, |
|||
ApiUrl: 'http://192.168.3.5:8080' // 配置服务器地址
|
|||
} |
@ -0,0 +1,231 @@ |
|||
<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.cover" :onerror="defaultImg"> |
|||
</div> |
|||
<div class="book-info"> |
|||
<h4 class="title-item">{{ item.nbName }}</h4> |
|||
<p>作者:{{ item.nbAuthor }}</p> |
|||
<p>出版社:{{ item.nbPublisher }}</p> |
|||
<p>出版年份:{{ item.nbPublisherdate }}</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 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.getBookList() |
|||
}, |
|||
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) |
|||
// } |
|||
// } |
|||
}) |
|||
}) |
|||
}, |
|||
getBookList() { |
|||
const params = { |
|||
libcode: this.libcode, |
|||
pageNo: 1, |
|||
pageSize: 10 |
|||
} |
|||
FetchNewBookRecommend(params).then(res => { |
|||
console.log(res) |
|||
let data = [] |
|||
data = res.newbookList |
|||
data.forEach(item => { |
|||
this.getCoverByISBN(item.isbn.replace(/\-/g, ''), item) |
|||
}) |
|||
}).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 => { |
|||
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> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue