- <template>
- <view class="page">
- <!-- 导航栏 -->
- <navbar title="书城"
- leftClick
- @leftClick="$utils.navigateBack"
- bgColor="#E3441A"
- color="#fff" />
-
- <!-- 分类商品列表 -->
- <view class="category"
- >
-
- <view class="tabs">
- <uv-tabs
- :list="category"
- :activeStyle="{color : '#f00', fontWeight : 600}"
- lineColor="#f00"
- :inactiveStyle="{color: 'rgba(0,0,0,.8)'}"
- lineHeight="8rpx"
- lineWidth="50rpx"
- :current="current"
- @click="clickTabs"></uv-tabs>
- </view>
-
- <uv-vtabs
- :list="category[current].children"
- :current="currentChildren"
- keyName="name"
- :chain="false"
- @change="change">
- <uv-vtabs-item>
- <view class="category-item">
- <view class="novel-list" v-if="categoryList.shopList.length > 0">
- <novelItem
- v-for="(book, index) in categoryList.shopList"
- :key="index"
- :book="book">
- </novelItem>
- </view>
- <uv-empty v-if="categoryList.shopList.length == 0" text="还没有呢"/>
- </view>
- </uv-vtabs-item>
- </uv-vtabs>
- </view>
-
- <!-- tabbar -->
- <tabber select="category" />
- </view>
- </template>
-
- <script>
- import {
- mapState
- } from 'vuex'
- import tabber from '@/components/base/tabbar.vue'
- import novelItem from '@/components/novel/novelItem.vue'
- export default {
- // mixins: [mixinsList],
- components: {
- tabber,
- novelItem
- },
- data() {
- return {
- mixinsListApi: '',
- current : 0,
- currentChildren : 0,
- categoryList: {
- shopList: [
- {
- id: '1',
- title: '我是半妖',
- cover: 'https://images.unsplash.com/photo-1506744038136-46273834b3fb?auto=format&fit=facearea&w=400&h=400',
- author: '东方不败',
- desc: '这是一部关于半妖少年成长的玄幻小说,讲述了主角在人妖两界的冒险故事。',
- tags: ['玄幻', '冒险', '热血'],
- status: '连载中'
- },
- {
- id: '2',
- title: '兽王进化',
- cover: 'https://images.unsplash.com/photo-1519125323398-675f0ddb6308?auto=format&fit=facearea&w=400&h=400',
- author: '天下霸唱',
- desc: '一场意外让主角获得兽王血脉,开始了进化之路...',
- tags: ['奇幻', '冒险'],
- status: '连载中'
- },
- {
- id: '3',
- title: '魔法少女纯爷们',
- cover: 'https://images.unsplash.com/photo-1465101046530-73398c7f28ca?auto=format&fit=facearea&w=400&h=400',
- author: '南派三叔',
- desc: '一个普通男孩意外获得魔法少女的力量,开始了奇妙冒险...',
- tags: ['搞笑', '奇幻'],
- status: '已完结'
- }
- ]
- },
- category: [
- {
- id: '1',
- name: '男生',
- children: [
- { id: '101', name: '玄幻' },
- { id: '102', name: '奇幻' },
- { id: '103', name: '武侠' },
- { id: '104', name: '仙侠' },
- { id: '105', name: '都市' },
- { id: '106', name: '历史' },
- { id: '107', name: '军事' },
- { id: '108', name: '游戏' },
- { id: '109', name: '体育' }
- ]
- },
- {
- id: '2',
- name: '女生',
- children: [
- { id: '201', name: '古代言情' },
- { id: '202', name: '现代言情' },
- { id: '203', name: '幻想言情' },
- { id: '204', name: '青春校园' },
- { id: '205', name: '纯爱' }
- ]
- },
- {
- id: '3',
- name: '出版',
- children: [
- { id: '301', name: '文学' },
- { id: '302', name: '传记' },
- { id: '303', name: '励志' },
- { id: '304', name: '名著' },
- { id: '305', name: '经管' }
- ]
- }
- ]
- }
- },
- computed: {
- },
- onLoad({
- search,
- cid
- }) {
- if (search) {
- this.queryParams.title = search
- }
-
- // 初始化默认分类的书籍列表
- if (this.category.length > 0) {
- if (cid) {
- // 如果有指定分类ID,则显示对应分类
- let foundCategory = false
- this.category.forEach((n, i) => {
- if (n.id == cid) {
- this.current = i
- foundCategory = true
- }
- })
-
- if (foundCategory) {
- this.updateBookList(this.category[this.current].children[0].id)
- } else {
- // 如果未找到指定分类,显示第一个分类
- this.updateBookList(this.category[0].children[0].id)
- }
- } else {
- // 没有指定分类ID,显示第一个分类
- this.updateBookList(this.category[0].children[0].id)
- }
- }
-
- // this.$store.commit('getCategoryList')
- // if(this.category.length > 0 && cid){
- // this.category.forEach((n, i) => {
- // if(n.id == cid){
- // this.current = i
- // }
- // })
- // // this.queryParams.classId = cid
- // }else if (this.category.length > 0) {
- // // this.queryParams.classId = this.category[0].id
- // }
- },
- methods: {
- change(e) {
- // this.queryParams.classId = this.category[e].id
- this.currentChildren = e
- // 更新对应分类的书籍列表
- this.updateBookList(this.category[this.current].children[e].id)
- },
- clickTabs({index}){
- this.current = index
- this.currentChildren = 0
- // 更新对应分类的书籍列表
- this.updateBookList(this.category[index].children[0].id)
- },
- updateBookList(categoryId) {
- // 模拟获取不同分类的书籍数据
- // 实际项目中应该调用API获取数据
- console.log('获取分类ID为: ' + categoryId + ' 的书籍')
-
- // 这里只是简单模拟不同分类有不同数量的书
- const bookCount = Math.floor(Math.random() * 3) + 1
- const tempList = []
-
- for (let i = 0; i < bookCount; i++) {
- tempList.push({
- id: categoryId + '-' + i,
- title: '分类' + categoryId + '的书' + i,
- cover: 'https://images.unsplash.com/photo-1506744038136-46273834b3fb?auto=format&fit=facearea&w=400&h=400',
- author: '作者' + categoryId,
- desc: '这是分类' + categoryId + '的第' + i + '本书...',
- tags: ['分类' + categoryId, '热门'],
- status: i % 2 === 0 ? '连载中' : '已完结'
- })
- }
-
- this.categoryList.shopList = tempList
- },
- search(){
- for(let i = 0;i < 10;i++){
- delete this.queryParams[i]
- }
- this.queryParams.pageSize = 10
- this.getData()
- },
- }
- }
- </script>
-
- <style scoped lang="scss">
- .page {
- /deep/ .uv-vtabs {
- height: calc(100vh - 600rpx) !important;
- }
-
- /deep/ .uv-vtabs__bar {
- height: calc(100vh - 600rpx) !important;
- }
-
- /deep/ .uv-vtabs__content {
- height: calc(100vh - 600rpx) !important;
- }
-
- .search {
- position: relative;
- background: #FFFFFF;
- margin: 20rpx;
- border-radius: 41rpx;
- padding: 10rpx 20rpx;
- display: flex;
- align-items: center;
-
- /deep/ .uv-search__action {
- background-color: $uni-color;
- color: #FFFFFF;
- padding: 10rpx 20rpx;
- border-radius: 30rpx;
- }
- }
-
- &::v-deep .uv-vtabs__content {
- background: transparent !important;
- overflow: hidden;
- }
- }
-
- .category {
- font-size: 30rpx;
- color: #333;
- .category-title{
- position: relative;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 120rpx;
-
- &::before,
- &::after {
- position: absolute;
- top: 50%;
- content: '';
- width: 10%;
- border-top: 2rpx solid black;
- }
-
- &::before {
- left: 25%;
- }
-
- &::after {
- right: 25%;
- }
- }
-
- &::v-deep .uv-vtabs {
- width: 750rpx;
- overflow: hidden;
- }
-
- .list {
- width: 100%;
- padding: 0rpx 20rpx;
- box-sizing: border-box;
- }
-
- .category-item {
- padding: 0 20rpx;
-
- .novel-list {
- width: 100%;
- display: flex;
- flex-direction: column;
- gap: 10rpx;
- }
- }
- }
- </style>
|