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.
242 lines
5.5 KiB
242 lines
5.5 KiB
<template>
|
|
<view style="background-color: #fff; padding-bottom:5px;">
|
|
<view class="my-search-container">
|
|
<view class="my-search-wrapper">
|
|
<picker
|
|
mode="selector"
|
|
:range="rangeText"
|
|
:value="selectIndex"
|
|
@change="onPickerChange"
|
|
class="picker-select"
|
|
>
|
|
<view class="picker-display">
|
|
{{ selectValueText || '请选择分类' }}
|
|
<uni-icons type="arrowdown" size="14" color="#999" style="margin-left: 4px;" />
|
|
</view>
|
|
</picker>
|
|
<uni-search-bar
|
|
class="my-search-bar"
|
|
@confirm="onSearch"
|
|
@focus="onFocus"
|
|
@blur="onBlur"
|
|
@clear="onClear"
|
|
@cancel="onCancel"
|
|
@input="onInput"
|
|
cancelButton="none"
|
|
bgColor="#f7f7f7"
|
|
v-model="value"
|
|
placeholder="请输入搜索内容"
|
|
>
|
|
<uni-icons slot="clearIcon" type="clear" color="#999999" />
|
|
</uni-search-bar>
|
|
</view>
|
|
|
|
<view class="search-btn-container" @click="onSearch">
|
|
<button class="search-btn" type="primary" >搜索</button>
|
|
</view>
|
|
|
|
<!-- 有数据才显示 -->
|
|
<view class="filter-container">
|
|
<view class="total-reslut" v-if="listData.length > 0">
|
|
搜索到 {{ total }} 条记录,共 {{ totalPage }} 页,当前第 {{ page }} 页
|
|
</view>
|
|
<view>筛选</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 有数据才显示列表 -->
|
|
<view style="padding-top: 154px;" v-if="listData.length > 0">
|
|
<scroll-view
|
|
scroll-y
|
|
style="height: calc(100vh - 80px);"
|
|
@scrolltolower="onScrollLower"
|
|
>
|
|
<book-list-item
|
|
class="hot-list-item"
|
|
v-for="(item, index) in listData"
|
|
:key="index"
|
|
:data="item"
|
|
:ranking="index + 1"
|
|
@click="onItemClick(item)"
|
|
></book-list-item>
|
|
|
|
<view class="load-more" v-if="total > listData.length">
|
|
上拉加载更多...
|
|
</view>
|
|
<view class="load-more" v-if="total <= listData.length && listData.length > 0">
|
|
没有更多数据了
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import BookListItem from "@/components/book-list-item/book-list-item.vue";
|
|
|
|
export default {
|
|
components: {
|
|
BookListItem
|
|
},
|
|
data() {
|
|
return {
|
|
selectValue: '',
|
|
selectValueText: '',
|
|
selectIndex: 0,
|
|
value:'',
|
|
range: [
|
|
{ value: 0, text: "任意词" },
|
|
{ value: 1, text: "题名" },
|
|
{ value: 2, text: "著者" },
|
|
{ value: 3, text: "ISBN" },
|
|
{ value: 4, text: "主题" },
|
|
{ value: 5, text: "出版社" },
|
|
{ value: 6, text: "分类号" }
|
|
],
|
|
rangeText: [],
|
|
listData:[],
|
|
size: 10,
|
|
page: 1,
|
|
total: 0,
|
|
totalPage: 0
|
|
};
|
|
},
|
|
onLoad() {
|
|
this.rangeText = this.range.map(item => item.text);
|
|
this.selectValue = this.range[0].value;
|
|
this.selectValueText = this.range[0].text;
|
|
},
|
|
methods: {
|
|
onPickerChange(e) {
|
|
const index = e.detail.value;
|
|
this.selectIndex = index;
|
|
this.selectValue = this.range[index].value;
|
|
this.selectValueText = this.range[index].text;
|
|
},
|
|
async getBookList() {
|
|
uni.showLoading({ title: '搜索中...' });
|
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
|
|
const mockList = [];
|
|
for (let i = 0; i < this.size; i++) {
|
|
const idx = (this.page - 1) * this.size + i + 1;
|
|
mockList.push({
|
|
id: idx,
|
|
title: `穆尔西医生带你走出孤独`,
|
|
desc: `关键词:${this.value}|检索类型:${this.selectValueText}`,
|
|
nickname: `穆尔西`,
|
|
imgCover:'http://wxtest.twgbz.cn/spider/bookcover/978-7-5546-1700-7',
|
|
publish: "中国青年出版社",
|
|
});
|
|
}
|
|
|
|
this.total = 37;
|
|
this.totalPage = 4;
|
|
|
|
if (this.page === 1) {
|
|
this.listData = mockList;
|
|
} else {
|
|
this.listData = [...this.listData, ...mockList];
|
|
}
|
|
uni.hideLoading();
|
|
},
|
|
onScrollLower() {
|
|
if (this.listData.length >= this.total) return;
|
|
this.page++;
|
|
this.getBookList();
|
|
},
|
|
onSearch() {
|
|
this.page = 1;
|
|
this.getBookList();
|
|
uni.showToast({ title: '搜索:' + this.value, icon: 'none' });
|
|
},
|
|
onItemClick(item) {
|
|
// uni.showToast({ title: '点击了:' + item.title, icon: 'none' });
|
|
uni.navigateTo({
|
|
url: "/subpkg/pages/book-detail/book-detail?isbn=" + item.isbn
|
|
})
|
|
},
|
|
onFocus() {},
|
|
onBlur() {},
|
|
onClear() {
|
|
this.value = '';
|
|
this.listData = []; // 清空列表
|
|
this.total = 0;
|
|
},
|
|
onCancel() {},
|
|
onInput(val) { this.value = val; }
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.my-search-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 15px 20px;
|
|
background: #fff;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 99;
|
|
height: 124px;
|
|
.my-search-wrapper{
|
|
display: flex;
|
|
align-items: center;
|
|
width: 100%;
|
|
padding: 5px 0;
|
|
background-color: #f7f7f7;
|
|
border-radius: 36px;
|
|
overflow: hidden;
|
|
}
|
|
.picker-select {
|
|
width: 60px;
|
|
border-right: 1px solid #c9c9c9;
|
|
}
|
|
.picker-display {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 6px 0;
|
|
font-size: 14px;
|
|
color: #333;
|
|
}
|
|
.my-search-bar {
|
|
flex: 1;
|
|
::v-deep .uni-searchbar {
|
|
padding: 0 !important;
|
|
background: transparent !important;
|
|
}
|
|
}
|
|
.search-btn-container{
|
|
width: 100%;
|
|
margin-top: 10px;
|
|
.search-btn{
|
|
background-color: #01a4fe;
|
|
font-size: 15px;
|
|
border-radius: 20px;
|
|
}
|
|
}
|
|
}
|
|
.filter-container {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
padding-top: 10px;
|
|
font-size: 13px;
|
|
color: #666;
|
|
}
|
|
.load-more {
|
|
text-align: center;
|
|
padding: 10px;
|
|
font-size: 13px;
|
|
color: #999;
|
|
}
|
|
.total-reslut{
|
|
flex: 1;
|
|
line-height: 20px;
|
|
font-size: 13px;
|
|
color: #01a4fe;
|
|
font-weight: 400;
|
|
}
|
|
</style>
|