You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							168 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							168 lines
						
					
					
						
							3.5 KiB
						
					
					
				
								<!-- 商品评论的分页 -->
							 | 
						|
								<template>
							 | 
						|
								  <s-layout title="全部评论">
							 | 
						|
								    <su-tabs
							 | 
						|
								      :list="state.type"
							 | 
						|
								      :scrollable="false"
							 | 
						|
								      @change="onTabsChange"
							 | 
						|
								      :current="state.currentTab"
							 | 
						|
								    />
							 | 
						|
								    <!-- 评论列表 -->
							 | 
						|
								    <view class="ss-m-t-20">
							 | 
						|
								      <view class="list-item" v-for="item in state.pagination.list" :key="item">
							 | 
						|
								        <comment-item :item="item" />
							 | 
						|
								      </view>
							 | 
						|
								    </view>
							 | 
						|
								    <s-empty v-if="state.pagination.total === 0" text="暂无数据" icon="/static/data-empty.png" />
							 | 
						|
								    <!-- 下拉 -->
							 | 
						|
								    <uni-load-more
							 | 
						|
								      icon-type="auto"
							 | 
						|
								      v-if="state.pagination.total > 0"
							 | 
						|
								      :status="state.loadStatus"
							 | 
						|
								      :content-text="{
							 | 
						|
								        contentdown: '上拉加载更多',
							 | 
						|
								      }"
							 | 
						|
								      @tap="loadMore"
							 | 
						|
								    />
							 | 
						|
								  </s-layout>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script setup>
							 | 
						|
								  import CommentApi from '@/sheep/api/product/comment';
							 | 
						|
								  import { onLoad, onReachBottom } from '@dcloudio/uni-app';
							 | 
						|
								  import { reactive } from 'vue';
							 | 
						|
								  import _ from 'lodash-es';
							 | 
						|
								  import commentItem from '../components/detail/comment-item.vue';
							 | 
						|
								
							 | 
						|
								  const state = reactive({
							 | 
						|
								    id: 0, // 商品 SPU 编号
							 | 
						|
								    type: [
							 | 
						|
								      { type: 0, name: '全部' },
							 | 
						|
								      { type: 1, name: '好评' },
							 | 
						|
								      { type: 2, name: '中评' },
							 | 
						|
								      { type: 3, name: '差评' },
							 | 
						|
								    ],
							 | 
						|
								    currentTab: 0, // 选中的 TAB
							 | 
						|
								    loadStatus: '',
							 | 
						|
								    pagination: {
							 | 
						|
								      list: [],
							 | 
						|
								      total: 0,
							 | 
						|
								      pageNo: 1,
							 | 
						|
								      pageSize: 8,
							 | 
						|
								    },
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  // 切换选项卡
							 | 
						|
								  function onTabsChange(e) {
							 | 
						|
								    state.currentTab = e.index;
							 | 
						|
								    // 加载列表
							 | 
						|
								    state.pagination.pageNo = 1;
							 | 
						|
								    state.pagination.list = [];
							 | 
						|
								    state.pagination.total = 0;
							 | 
						|
								    getList();
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  async function getList() {
							 | 
						|
								    // 加载列表
							 | 
						|
								    state.loadStatus = 'loading';
							 | 
						|
								    let res = await CommentApi.getCommentPage(
							 | 
						|
								      state.id,
							 | 
						|
								      state.pagination.pageNo,
							 | 
						|
								      state.pagination.pageSize,
							 | 
						|
								      state.type[state.currentTab].type,
							 | 
						|
								    );
							 | 
						|
								    if (res.code !== 0) {
							 | 
						|
								      return;
							 | 
						|
								    }
							 | 
						|
								    // 合并列表
							 | 
						|
								    state.pagination.list = _.concat(state.pagination.list, res.data.list);
							 | 
						|
								    state.pagination.total = res.data.total;
							 | 
						|
								    state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  // 加载更多
							 | 
						|
								  function loadMore() {
							 | 
						|
								    if (state.loadStatus === 'noMore') {
							 | 
						|
								      return;
							 | 
						|
								    }
							 | 
						|
								    state.pagination.pageNo++;
							 | 
						|
								    getList();
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  onLoad((options) => {
							 | 
						|
								    state.id = options.id;
							 | 
						|
								    getList();
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  // 上拉加载更多
							 | 
						|
								  onReachBottom(() => {
							 | 
						|
								    loadMore();
							 | 
						|
								  });
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style lang="scss" scoped>
							 | 
						|
								  .list-item {
							 | 
						|
								    padding: 32rpx 30rpx 20rpx 20rpx;
							 | 
						|
								    background: #fff;
							 | 
						|
								
							 | 
						|
								    .avatar {
							 | 
						|
								      width: 52rpx;
							 | 
						|
								      height: 52rpx;
							 | 
						|
								      border-radius: 50%;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .nickname {
							 | 
						|
								      font-size: 26rpx;
							 | 
						|
								      font-weight: 500;
							 | 
						|
								      color: #999999;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .create-time {
							 | 
						|
								      font-size: 24rpx;
							 | 
						|
								      font-weight: 500;
							 | 
						|
								      color: #c4c4c4;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .content-title {
							 | 
						|
								      font-size: 26rpx;
							 | 
						|
								      font-weight: 400;
							 | 
						|
								      color: #666666;
							 | 
						|
								      line-height: 42rpx;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .content-img {
							 | 
						|
								      width: 174rpx;
							 | 
						|
								      height: 174rpx;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .cicon-info-o {
							 | 
						|
								      font-size: 26rpx;
							 | 
						|
								      color: #c4c4c4;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .foot-title {
							 | 
						|
								      font-size: 24rpx;
							 | 
						|
								      font-weight: 500;
							 | 
						|
								      color: #999999;
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  .btn-box {
							 | 
						|
								    width: 100%;
							 | 
						|
								    height: 120rpx;
							 | 
						|
								    background: #fff;
							 | 
						|
								    border-top: 2rpx solid #eee;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  .tab-btn {
							 | 
						|
								    width: 130rpx;
							 | 
						|
								    height: 62rpx;
							 | 
						|
								    background: #eeeeee;
							 | 
						|
								    border-radius: 31rpx;
							 | 
						|
								    font-size: 28rpx;
							 | 
						|
								    font-weight: 400;
							 | 
						|
								    color: #999999;
							 | 
						|
								    border: 1px solid #e5e5e5;
							 | 
						|
								    margin-right: 10rpx;
							 | 
						|
								  }
							 | 
						|
								</style>
							 |