<template>
|
|
<view class="search-container">
|
|
|
|
<!-- 顶部搜索栏 -->
|
|
<view class="search-header">
|
|
<uv-search v-model="searchKeyword" placeholder="请输入内容" :show-action="true" action-text="搜索" :action-style="{
|
|
color: '#fff',
|
|
backgroundColor: '#06DADC',
|
|
borderRadius: '198rpx',
|
|
width: '100rpx',
|
|
height: '64rpx',
|
|
textAlign: 'center',
|
|
fontSize: '26rpx',
|
|
lineHeight: '64rpx',
|
|
}" @search="handleSearch" @custom="handleSearch" @clear="handleSearch"></uv-search>
|
|
<!-- 分类标签栏 -->
|
|
<uv-tabs
|
|
:list="categoryTabs"
|
|
:current="currentTab"
|
|
keyName="title"
|
|
@change="switchTab"
|
|
:scrollable="true"
|
|
:lineColor="'#000'"
|
|
:activeStyle="{ color: '#000', fontWeight: '900' }"
|
|
:inactiveStyle="{ color: '#606266' }"
|
|
></uv-tabs>
|
|
</view>
|
|
|
|
|
|
<!-- 搜索结果列表 -->
|
|
<view class="search-results">
|
|
<BookList :list="list" :isLoading="isLoading" />
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
|
|
import MixinList from '@/mixins/list.js'
|
|
import BookList from '@/components/BookList.vue'
|
|
|
|
export default {
|
|
mixins: [MixinList],
|
|
components: {
|
|
BookList
|
|
},
|
|
data() {
|
|
return {
|
|
mixinListApi: 'book.list',
|
|
// 自定义onShow
|
|
mixinListConfig: {
|
|
customOnShow: true,
|
|
},
|
|
searchKeyword: '',
|
|
label: '',
|
|
currentTab: 0,
|
|
categoryTabs: [],
|
|
bookList: [
|
|
|
|
]
|
|
}
|
|
},
|
|
methods: {
|
|
mixinSetParams() {
|
|
const params = {}
|
|
// 只有当不是"全部"选项时才添加category参数
|
|
if (this.categoryTabs[this.currentTab] && this.categoryTabs[this.currentTab].id) {
|
|
params.category = this.categoryTabs[this.currentTab].id
|
|
}
|
|
if (this.label) {
|
|
params.label = this.label
|
|
}
|
|
if (this.searchKeyword) {
|
|
params.title = this.searchKeyword
|
|
}
|
|
return params
|
|
},
|
|
handleSearch() {
|
|
// console.log('搜索:', this.searchKeyword)
|
|
this.list = []
|
|
this.initPage()
|
|
this.getList(true)
|
|
// 这里添加搜索逻辑
|
|
},
|
|
|
|
switchTab(e) {
|
|
this.currentTab = e.index
|
|
this.initPage()
|
|
this.getList(true)
|
|
},
|
|
// 获取书籍分类
|
|
async getCategory() {
|
|
const categoryRes = await this.$api.book.category()
|
|
if (categoryRes.code === 200) {
|
|
this.categoryTabs = categoryRes.result.map(item => ({
|
|
title: item.title,
|
|
id: item.id
|
|
}))
|
|
// 在数组开头添加"全部"选项
|
|
this.categoryTabs.unshift({
|
|
title: '全部',
|
|
id: null
|
|
})
|
|
}
|
|
},
|
|
},
|
|
onLoad(options) {
|
|
if (options.label) {
|
|
this.label = options.label
|
|
}
|
|
},
|
|
async onShow() {
|
|
await this.getCategory()
|
|
this.getList()
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.search-container {
|
|
background: #fff;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.search-header {
|
|
padding: 10rpx 32rpx 6rpx;
|
|
background: #fff;
|
|
position: sticky;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
background-color: #fff;
|
|
z-index: 9;
|
|
}
|
|
|
|
|
|
.search-results {
|
|
padding: 32rpx;
|
|
}
|
|
</style>
|