| <template> | |
|   <view class="search-container"> | |
|     <!-- 状态栏安全区域 --> | |
|     <uv-status-bar></uv-status-bar> | |
|      | |
|     <!-- 顶部搜索栏 --> | |
|     <view class="search-header"> | |
|       <uv-search  | |
|         v-model="searchKeyword" | |
|         placeholder="请输入内容" | |
|         :show-action="true" | |
|         action-text="搜索" | |
|         :action-style="{ | |
|           color: '#fff', | |
|           backgroundColor: '#FFA500', | |
|           borderRadius: '198rpx', | |
|           width: '100rpx', | |
|           height: '64rpx', | |
|           textAlign: 'center', | |
|           fontSize: '26rpx', | |
|           lineHeight: '64rpx', | |
|         }" | |
|         :customStyle="{ | |
|           width: '500rpx', | |
|         }" | |
|         @search="handleSearch" | |
|         @custom="handleSearch" | |
|       ></uv-search> | |
|     </view> | |
|      | |
|     <!-- 分类标签栏 --> | |
|     <view class="category-tabs"> | |
|       <scroll-view scroll-x class="tab-scroll"> | |
|         <view class="tab-list"> | |
|           <view  | |
|             v-for="(tab, index) in categoryTabs"  | |
|             :key="index" | |
|             class="tab-item" | |
|             :class="{ active: currentTab === index }" | |
|             @click="switchTab(index)" | |
|           > | |
|             {{ tab }} | |
|           </view> | |
|         </view> | |
|       </scroll-view> | |
|     </view> | |
|      | |
|     <!-- 搜索结果列表 --> | |
|     <view class="search-results"> | |
|       <view  | |
|         v-for="(book, index) in bookList"  | |
|         :key="index" | |
|         class="book-item" | |
|         @click="goToDetail(book)" | |
|       > | |
|         <view class="book-cover"> | |
|           <image :src="book.cover" mode="aspectFill"></image> | |
|         </view> | |
|         <view class="book-info"> | |
|           <view class="book-title">{{ book.title }}</view> | |
|           <view class="book-author">{{ book.author }}</view> | |
|           <view class="book-meta"> | |
|             <view class="book-duration"> | |
|               <image src="/static/播放图标.png" mode="aspectFill" class="book-icon"></image> | |
|               <text>{{ book.duration }}</text> | |
|             </view> | |
|             <view class="book-membership"  :class="classMap[book.membershipType]"> | |
|               {{ book.membership }} | |
|             </view> | |
|           </view> | |
|         </view> | |
|       </view> | |
|     </view> | |
|   </view> | |
| </template> | |
|  | |
| <script> | |
| export default { | |
|   data() { | |
|     return { | |
|       searchKeyword: '短文', | |
|       currentTab: 0, | |
|       categoryTabs: ['为你推荐', '精选', '短文', '专栏', '初中', '四六级'], | |
|       // 类型引射表 | |
|       classMap: { | |
|         premium: 'book-membership-premium', | |
|         vip: 'book-membership-vip', | |
|         basic: 'book-membership-basic', | |
|       }, | |
|       bookList: [ | |
|         { | |
|           cover: '/static/主页图标.png', | |
|           title: '短文全脑孩子:12项革命性策略...', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '蕾朵会员', | |
|           membershipType: 'premium' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '盛放会员', | |
|           membershipType: 'vip' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '蕾朵会员', | |
|           membershipType: 'premium' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '盛放会员', | |
|           membershipType: 'vip' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '萌芽会员', | |
|           membershipType: 'basic' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '萌芽会员', | |
|           membershipType: 'basic' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '萌芽会员', | |
|           membershipType: 'basic' | |
|         }, | |
|         { | |
|           cover: '/static/默认图片.png', | |
|           title: '精讲短文', | |
|           author: 'Daniel J. Siegel / Tina Payne Bryson / Del...', | |
|           duration: '03:24', | |
|           membership: '萌芽会员', | |
|           membershipType: 'basic' | |
|         }, | |
|       ] | |
|     } | |
|   }, | |
|   methods: { | |
|     handleSearch() { | |
|       console.log('搜索:', this.searchKeyword) | |
|       // 这里添加搜索逻辑 | |
|     }, | |
|     switchTab(index) { | |
|       this.currentTab = index | |
|       console.log('切换分类:', this.categoryTabs[index]) | |
|       // 这里添加分类切换逻辑 | |
|     }, | |
|     goToDetail(book) { | |
|       console.log('查看详情:', book) | |
|       // 这里添加跳转详情页逻辑 | |
|     } | |
|   } | |
| } | |
| </script> | |
|  | |
| <style scoped lang="scss"> | |
| .search-container { | |
|   background: #fff; | |
|   min-height: 100vh; | |
| } | |
| 
 | |
| .search-header { | |
|   padding: 10rpx 32rpx  20rpx; | |
|   background: #fff; | |
| } | |
| 
 | |
| .category-tabs { | |
|   background: #fff; | |
|   // border-bottom: 1rpx solid #f0f0f0; | |
|    | |
|   .tab-scroll { | |
|     white-space: nowrap; | |
|   } | |
|    | |
|   .tab-list { | |
|     display: flex; | |
|     padding: 0 32rpx; | |
|   } | |
|    | |
|   .tab-item { | |
|     flex-shrink: 0; | |
|     padding: 24rpx 22rpx; | |
|     font-size: 32rpx; | |
|     color: $secondary-text-color; | |
|     position: relative; | |
|      | |
|     &.active { | |
|       color: $primary-text-color; | |
|       font-weight: 600; | |
|        | |
|       &::after { | |
|         content: ''; | |
|         position: absolute; | |
|         bottom: 0; | |
|         left: 50%; | |
|         transform: translateX(-50%); | |
|         width: 22rpx; | |
|         height: 4rpx; | |
|         background: $primary-text-color; | |
|         border-radius: 2rpx; | |
|       } | |
|     } | |
|   } | |
| } | |
| 
 | |
| .search-results { | |
|   padding: 32rpx; | |
|   display: flex; | |
|   flex-direction: column; | |
|   gap: 32rpx; | |
| } | |
| 
 | |
| .book-item { | |
|   display: flex; | |
|   align-items: center; | |
|   // border-bottom: 1rpx solid #f5f5f5; | |
|   background: #F8F8F8; | |
|   // width: 686rpx; | |
|   height: 212rpx; | |
|   gap: 16rpx; | |
|   border-radius: 16rpx; | |
|   padding: 0rpx 16rpx; | |
| 
 | |
|   &:last-child { | |
|     border-bottom: none; | |
|   } | |
|    | |
|   .book-cover { | |
|     width: 136rpx; | |
|     height: 180rpx; | |
|     border-radius: 16rpx; | |
|     overflow: hidden; | |
|     margin-right: 16rpx; | |
|      | |
|     image { | |
|       width: 100%; | |
|       height: 100%; | |
|     } | |
|   } | |
|    | |
|   .book-info { | |
|     flex: 1; | |
|     display: flex; | |
|     flex-direction: column; | |
|     justify-content: space-between; | |
|   } | |
|    | |
|   .book-title { | |
|     font-size: 32rpx; | |
|     font-weight: 600; | |
|     color: $primary-text-color; | |
|     line-height: 48rpx; | |
|     letter-spacing: 0; | |
|     margin-bottom: 12rpx; | |
|     overflow: hidden; | |
|      | |
|     text-overflow: ellipsis; | |
|   } | |
|    | |
|   .book-author { | |
|     font-size: 24rpx; | |
|     color: $secondary-text-color; | |
|     margin-bottom: 16rpx; | |
|     overflow: hidden; | |
|     text-overflow: ellipsis; | |
|     white-space: nowrap; | |
|   } | |
|    | |
|   .book-meta { | |
|     display: flex; | |
|     align-items: center; | |
|     justify-content: space-between; | |
|   } | |
|    | |
|   .book-duration { | |
|     display: flex; | |
|     align-items: center; | |
|     font-size: 22rpx; | |
|     color: #999; | |
|     .book-icon{ | |
|       width: 18rpx; | |
|       height: 18rpx; | |
|     } | |
|     text { | |
|       margin-left: 8rpx; | |
|     } | |
|   } | |
|    | |
|   .book-membership { | |
|     padding: 8rpx 16rpx; | |
|     border-radius: 8rpx; | |
|     font-size: 24rpx; | |
|     color: #211508; | |
|   } | |
| } | |
| 
 | |
| .book-membership-premium { | |
|   background: #E9F1FF; | |
|   border: 2rpx solid #C4DAFF | |
| } | |
| 
 | |
| .book-membership-vip { | |
|   background: #FFF4E9; | |
|   border: 2rpx solid #FFE2C4 | |
| } | |
| 
 | |
| .book-membership-basic { | |
|   background: #FFE9E9; | |
|   border: 2rpx solid #FFDBC4 | |
| } | |
|    | |
| 
 | |
| </style> |