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