185 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Vue
		
	
	
<!-- 分销明细  -->
 | 
						|
<template>
 | 
						|
  <view class="distribution-log-wrap">
 | 
						|
    <view class="header-box">
 | 
						|
      <image class="header-bg" :src="sheep.$url.static('/static/img/shop/commission/title2.png')" />
 | 
						|
      <view class="ss-flex header-title">
 | 
						|
        <view class="title">实时动态</view>
 | 
						|
        <text class="cicon-forward"></text>
 | 
						|
      </view>
 | 
						|
    </view>
 | 
						|
    <scroll-view
 | 
						|
      scroll-y="true"
 | 
						|
      @scrolltolower="loadmore"
 | 
						|
      class="scroll-box log-scroll"
 | 
						|
      scroll-with-animation="true"
 | 
						|
    >
 | 
						|
      <view v-if="state.pagination.data">
 | 
						|
        <view
 | 
						|
          class="log-item-box ss-flex ss-row-between"
 | 
						|
          v-for="item in state.pagination.data"
 | 
						|
          :key="item.id"
 | 
						|
        >
 | 
						|
          <view class="log-item-wrap">
 | 
						|
            <view class="log-item ss-flex ss-ellipsis-1 ss-col-center">
 | 
						|
              <view class="ss-flex ss-col-center">
 | 
						|
                <image
 | 
						|
                  v-if="item.oper_type === 'user'"
 | 
						|
                  class="log-img"
 | 
						|
                  :src="sheep.$url.cdn(item.oper?.avatar)"
 | 
						|
                  mode="aspectFill"
 | 
						|
                ></image>
 | 
						|
                <image
 | 
						|
                  v-else-if="item.oper_type === 'admin'"
 | 
						|
                  class="log-img"
 | 
						|
                  :src="sheep.$url.static('/static/img/shop/avatar/default_user.png')"
 | 
						|
                  mode="aspectFill"
 | 
						|
                ></image>
 | 
						|
                <image
 | 
						|
                  v-else
 | 
						|
                  class="log-img"
 | 
						|
                  :src="sheep.$url.static('/static/img/shop/avatar/notice.png')"
 | 
						|
                  mode="aspectFill"
 | 
						|
                ></image>
 | 
						|
              </view>
 | 
						|
              <view class="log-text ss-ellipsis-1">{{ item.remark }}</view>
 | 
						|
            </view>
 | 
						|
          </view>
 | 
						|
          <text class="log-time">{{ dayjs(item.create_time).fromNow() }}</text>
 | 
						|
        </view>
 | 
						|
      </view>
 | 
						|
 | 
						|
      <!-- 加载更多 -->
 | 
						|
      <uni-load-more
 | 
						|
        v-if="state.pagination.total > 0"
 | 
						|
        :status="state.loadStatus"
 | 
						|
        color="#333333"
 | 
						|
        @tap="loadmore"
 | 
						|
      />
 | 
						|
    </scroll-view>
 | 
						|
  </view>
 | 
						|
</template>
 | 
						|
 | 
						|
<script setup>
 | 
						|
  import sheep from '@/sheep';
 | 
						|
  import { computed, reactive } from 'vue';
 | 
						|
  import _ from 'lodash';
 | 
						|
  import dayjs from 'dayjs';
 | 
						|
 | 
						|
  const state = reactive({
 | 
						|
    loadStatus: '',
 | 
						|
    pagination: {
 | 
						|
      data: [],
 | 
						|
      current_page: 1,
 | 
						|
      total: 1,
 | 
						|
      last_page: 1,
 | 
						|
    },
 | 
						|
  });
 | 
						|
 | 
						|
  async function getLog(page = 1) {
 | 
						|
    const res = await sheep.$api.commission.log({
 | 
						|
      page,
 | 
						|
    });
 | 
						|
    if (res.error === 0) {
 | 
						|
      let list = _.concat(state.pagination.data, res.data.data);
 | 
						|
      state.pagination = {
 | 
						|
        ...res.data,
 | 
						|
        data: list,
 | 
						|
      };
 | 
						|
      if (state.pagination.current_page < state.pagination.last_page) {
 | 
						|
        state.loadStatus = 'more';
 | 
						|
      } else {
 | 
						|
        state.loadStatus = 'noMore';
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  getLog();
 | 
						|
 | 
						|
  // 加载更多
 | 
						|
  function loadmore() {
 | 
						|
    if (state.loadStatus !== 'noMore') {
 | 
						|
      getLog(state.pagination.current_page + 1);
 | 
						|
    }
 | 
						|
  }
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
  .distribution-log-wrap {
 | 
						|
    width: 690rpx;
 | 
						|
    margin: 0 auto;
 | 
						|
    margin-bottom: 20rpx;
 | 
						|
    border-radius: 12rpx;
 | 
						|
    z-index: 3;
 | 
						|
    position: relative;
 | 
						|
    .header-box {
 | 
						|
      width: 690rpx;
 | 
						|
      height: 76rpx;
 | 
						|
      position: relative;
 | 
						|
      .header-bg {
 | 
						|
        width: 690rpx;
 | 
						|
        height: 76rpx;
 | 
						|
      }
 | 
						|
      .header-title {
 | 
						|
        position: absolute;
 | 
						|
        left: 20rpx;
 | 
						|
        top: 24rpx;
 | 
						|
      }
 | 
						|
      .title {
 | 
						|
        font-size: 28rpx;
 | 
						|
        font-weight: 500;
 | 
						|
        color: #ffffff;
 | 
						|
        line-height: 30rpx;
 | 
						|
      }
 | 
						|
      .cicon-forward {
 | 
						|
        font-size: 30rpx;
 | 
						|
        font-weight: 400;
 | 
						|
        color: #ffffff;
 | 
						|
        line-height: 30rpx;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    .log-scroll {
 | 
						|
      height: 600rpx;
 | 
						|
      background: #fdfae9;
 | 
						|
      padding: 10rpx 20rpx 0;
 | 
						|
      box-sizing: border-box;
 | 
						|
      border-radius: 0 0 12rpx 12rpx;
 | 
						|
 | 
						|
      .log-item-box {
 | 
						|
        margin-bottom: 20rpx;
 | 
						|
        .log-time {
 | 
						|
          // margin-left: 30rpx;
 | 
						|
          text-align: right;
 | 
						|
          font-size: 24rpx;
 | 
						|
          font-family: OPPOSANS;
 | 
						|
          font-weight: 400;
 | 
						|
          color: #c4c4c4;
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      .loadmore-wrap {
 | 
						|
        // line-height: 80rpx;
 | 
						|
      }
 | 
						|
 | 
						|
      .log-item {
 | 
						|
        // background: rgba(#ffffff, 0.2);
 | 
						|
        border-radius: 24rpx;
 | 
						|
        padding: 6rpx 20rpx 6rpx 12rpx;
 | 
						|
 | 
						|
        .log-img {
 | 
						|
          width: 40rpx;
 | 
						|
          height: 40rpx;
 | 
						|
          border-radius: 50%;
 | 
						|
          margin-right: 10rpx;
 | 
						|
        }
 | 
						|
 | 
						|
        .log-text {
 | 
						|
          max-width: 480rpx;
 | 
						|
          font-size: 24rpx;
 | 
						|
          font-weight: 500;
 | 
						|
          color: #333333;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
</style>
 |