123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- <template>
- <view class="container">
- <view class="header-box">
- <view class="search-box">
- <u-search v-model="searchForm.keyword" :clearabled="true" bg-color="#E5E5E5"
- :input-style="searchInputStyle" placeholder="搜索您想要的内容" @search="toSearch"></u-search>
- </view>
- <view class="tab-box">
- <u-tabs name="label" :list="searchType" :is-scroll="true" v-model="searchForm.type"
- @change="onSearchTypeChange" font-size="24" :bold="false" inactive-color="#000000"
- active-color="#000000" :bar-style="{'background-color': '#2979ff'}" :gutter="25"
- height="45"></u-tabs>
- </view>
- </view>
- <view class="list-box">
- <view class="list-item-box" v-for="item in list" :key="item.id" @click="onClickReport(item)">
- <view class="image-box">
- <image :src="item.imgUrl" mode="aspectFill"></image>
- </view>
- <view class="info-box">
- <view class="title">
- {{item.title}}
- </view>
- <view class="type">
- <span>{{item.type}}</span>
- </view>
- <view class="func">
- <view class="" v-if="item.free > 0"></view>
- <view class="price" v-if="item.price">
- ¥{{item.price}}元
- </view>
- <view class="member-free" v-if="item.price == null && item.free < 1">
- {{item.memberFree > 0 ? '会员免费' : `会员:${item.memberPrice}元`}}
- </view>
- <view class="not-member-price" v-if="item.price == null && item.free < 1">
- 非会员:¥{{item.notMemberPrice}}元
- </view>
- <view v-if="item.free > 0" class="button free">免费</view>
- <view v-else-if="item.memberFree > 0" class="button member-free">会员免费</view>
- <view v-else :class="['button', item.status > 0 ? 'free' : 'buy']">
- {{item.status > 0 ? '已购买' : '立即购买'}}
- </view>
- </view>
- </view>
- </view>
- </view>
- <u-loadmore :status="status" margin-top="20" margin-bottom="20" @loadmore="loadmore"/>
- </view>
- </template>
- <script setup>
- import {
- ref,
- computed
- } from 'vue'
- import {
- onLoad
- } from '@dcloudio/uni-app'
- import {
- loadReportList
- } from '@/api/report.js'
- import { useReportStore } from '@/store/reportStore.js'
- const reportStore = useReportStore();
-
- const customButtonStyle = {
- height: '40rpx',
- lineHeight: '40rpx',
- padding: '0 30rpx'
- }
- const searchInputStyle = {
- backgroundColor: '#E5E5E5'
- }
- const categoryList = ref({});
- const pageNum = ref(1);
- const pageSize = ref(10);
- const count = ref(0);
- const model = ref(null);
- const status = ref('loadmore');
-
- const searchType = ref([{
- label: '全部',
- value: ' '
- }
- ])
- // 对应tab的code
- const currentType = ref(null);
- function onSearchTypeChange(val) {
- currentType.value = searchType.value[val].value;
- pageNum.value = 1;
- search(searchForm.value.keyword, 1, model.value, currentType.value);
- }
- const searchForm = ref({
- keyword: '',
- type: 0
- })
- const modelName = ref()
- const list = ref([])
- const listFilter = ref([])
- function onClickReport(report) {
- uni.navigateTo({
- url: `/pages/reportDetail/reportDetail?id=${report.id}&title=${report.title}`
- })
- }
- function init(){
- searchForm.value.keyword = '';
- pageNum.value = 1
- search('', 1, model.value, currentType.value)
- }
-
- function search(keyword, pageNumber, model, type, pageSize) {
- status.value = 'loading'
- const form = {
- keyword,
- model,
- type,
- pageNumber,
- pageSize: pageSize ? pageSize : 10
- }
- loadReportList(form).then(res => {
- if (res.code === 0) {
- if (pageNumber === 1) {
- list.value = res.data
- } else {
- list.value = [...list.value, ...res.data];
- }
- pageNum.value = pageNumber + 1;
- count.value = res.count;
- if(list.value.length===count.value){
- status.value = 'nomore'
- }else{
- status.value ='loadmore'
- }
- }
- }).catch(()=>{
- status.value ='loadmore'
- })
- }
- function loadmore(){
- search(searchForm.value.keyword, pageNum.value, model.value, currentType.value);
- }
- function toSearch(){
- search(searchForm.value.keyword, 1, model.value, currentType.value);
- }
-
- onLoad((load) => {
- if (load.model) {
- // console.log(load, reportStore.reportCate , "传过来的值")
- searchType.value = reportStore.reportCate[load.model].child;
-
- modelName.value = load.model
- model.value = load.value
-
- currentType.value = searchType.value[0].value;
-
- uni.setNavigationBarTitle({
- title: modelName.value
- })
- init()
- }
- })
- </script>
- <style lang="scss">
- $image-width: 230rpx;
- .container {
- height: 100vh;
- width: 100vw;
- background-color: $uni-text-color-inverse;
- .header-box {
- padding: 0 20rpx;
- background-color: $uni-text-color-inverse;
- @include topMagnet();
- }
- .search-box {
- margin-bottom: 20rpx;
- ::v-deep(.u-search) {
- background-color: #e5e5e5;
- border-radius: 50rpx;
- .u-action {
- width: 18%;
- background-color: $uni-color-primary;
- border-radius: 50rpx;
- color: $uni-text-color-inverse;
- margin-right: 8rpx;
- font-size: 28rpx;
- line-height: 50rpx;
- letter-spacing: 3rpx;
- text-align: center;
- }
- }
- }
- .list-box {
- padding: 0 20rpx;
- .list-item-box {
- padding: 30rpx 20rpx;
- display: flex;
- gap: 20rpx;
- height: 210rpx;
- border-bottom: 5rpx solid #E6E6E6;
- &:active {
- background-color: $uni-bg-color-hover;
- }
- .image-box {
- width: $image-width;
- image {
- width: $image-width;
- flex: 0 0 $image-width;
- height: 100%;
- border-radius: $uni-card-border-radius;
- }
- }
- .info-box {
- .title {
- font-size: $uni-title-font-size-2;
- font-weight: bold;
- line-height: 40rpx;
- margin-bottom: 15rpx;
- @include text-line-overflow(2);
- }
- .type {
- font-size: $uni-font-size-2;
- .iconfont {
- font-size: $uni-font-size-2;
- padding-right: 10rpx;
- }
- }
- .func {
- display: flex;
- justify-content: space-between;
- align-items: flex-end;
- font-size: $uni-font-size-2;
- font-weight: bold;
- .button {
- text-align: center;
- width: 130rpx;
- }
- .price {
- color: $uni-color-error;
- font-size: $uni-title-font-size-3;
- }
- .not-member-price {
- font-size: $uni-font-size-4;
- color: $uni-text-color-grey;
- text-align: end;
- }
- .buy {
- padding: 6rpx 25rpx;
- background-color: $uni-color-error;
- border-radius: $uni-card-border-radius;
- color: $uni-text-color-inverse;
- }
- .free {
- padding: 6rpx 25rpx;
- background-color: $uni-color-primary;
- border-radius: $uni-card-border-radius;
- color: $uni-text-color-inverse;
- }
- .member-free {
- padding: 10rpx 20rpx;
- @include backgroundImg('https://sylwt.top/api/visitor/resources/image?name=/ydl/menber-center/bg-label.png');
- color: $uni-text-color;
- }
- }
- }
- }
- }
- }
- </style>
|