Files
huangjingfen/pro_v3.5.1/view/uniapp_v2/pages/users/spreadData/contributionRank.vue
apple 8e17762510 feat(uniapp_v2): 二开功能迁移与小程序主包优化
- 从 uniapp 迁移 HJF 页面、API、组件及用户/订单相关改动
- queue、assets 使用独立分包以降低主包体积
- 修复首页单根节点与支付结果页 v-if 链
- 关闭 HjfDemoPanel 全局注册;uniNoticeBar 注释 $getAppWebview 避免 __webviewId__ 报错
- 配置域名与 manifest 应用名称;cache/store 防御性处理

Made-with: Cursor
2026-03-26 12:16:01 +08:00

200 lines
5.2 KiB
Vue

<template>
<view>
<view class="top-card w-full relative" :style="[topCardStyle]">
<NavBar
class="TopBar"
titleText="用户贡献榜"
textSize="34rpx"
:isScrolling="isScrolling"
iconColor="#333333"
textColor="#333333"
showBack></NavBar>
<view class="h-100 flex-around-center fs-28 text--w111-666 relative z-20">
<text class="w-112 text-center" :class="{'tab-active': contributeType == 'order_count'}" @tap="toggleContribute('order_count')">订单数</text>
<text class="w-112" :class="{'tab-active': contributeType == 'order_price'}" @tap="toggleContribute('order_price')">订单金额</text>
<text class="w-112 text-center" :class="{'tab-active': contributeType == 'brokerage'}" @tap="toggleContribute('brokerage')">收益</text>
</view>
<view class="abs-lb w-full h-192 gradient-white"></view>
</view>
<view class="px-20 w-full relative z-10 empty-card" :style="[cardTop]">
<view class="w-full bg--w111-fff rd-24rpx">
<view class="py-32" v-if="contributeData.length">
<view class="flex-between-center fs-22 lh-30rpx text--w111-666 pl-38 mb-28">
<text class="w-44">排名</text>
<text class="w-168">用户</text>
<text class="w-72">订单数</text>
<text class="w-108">订单金额</text>
<text class="w-108">收益</text>
</view>
<view class="flex-between-center rank-cell fs-22 lh-30rpx text--w111-666 pl-38"
v-for="(item,index) in contributeData" :key="index">
<view class="w-44">
<text class="SemiBold rank-1" v-show="index == 0">1</text>
<text class="SemiBold rank-2" v-show="index == 1">2</text>
<text class="SemiBold rank-3" v-show="index == 2">3</text>
<text class="SemiBold text--w111-ccc" v-show="index > 2">{{ index + 1 }}</text>
</view>
<view class="w-168 flex-y-center">
<image class="w-44 h-44 rd-50-p111- block mr-8" :src="item.avatar"></image>
<view class="w-116 line1">{{ item.nickname || '微信用户' }}</view>
</view>
<text class="w-72">{{ item.total_order_count }}</text>
<text class="w-108">¥{{ item.total_order_price }}</text>
<text class="w-108">¥{{ item.total_brokerage }}</text>
</view>
</view>
<view class="py-32 empty-card" v-else>
<emptyPage title="暂无贡献榜单数据~" src="/statics/images/noOrder.gif"></emptyPage>
</view>
</view>
</view>
</view>
</template>
<script>
import colors from '@/mixins/color.js';
import { spreadContributeApi } from "@/api/user.js"
import { HTTP_REQUEST_URL } from '@/config/app.js';
import { toLogin } from '@/libs/login.js';
import { mapGetters } from 'vuex';
import home from '@/components/home/index.vue';
import NavBar from "@/components/NavBar.vue";
import emptyPage from '@/components/emptyPage.vue'
let sysHeight = uni.getWindowInfo().statusBarHeight;
export default {
data() {
return {
sysHeight,
isScrolling: false,
berHeight: 40,
active: 0,
params:{
page:1,
limit:10
},
loading: false,
contributeType: 'order_count',
contributeData:[],
}
},
mixins: [colors],
components: { home, NavBar, emptyPage },
computed: {
...mapGetters(['isLogin']),
topCardStyle(){
return {
height: 145 + this.berHeight + 'px'
}
},
cardTop(){
return {
'top': `-${this.sysHeight + 96}px`
}
},
},
onPageScroll(option) {
uni.$emit('scroll');
if (option.scrollTop > 50) {
this.isScrolling = true;
} else if (option.scrollTop < 50) {
this.isScrolling = false;
}
},
onLoad() {
setTimeout(()=>{
this.getHeight();
},100)
if(this.isLogin){
this.getContribute();
}else{
toLogin();
}
},
methods: {
changeTab(type){
this.active = type;
},
getHeight() {
let that = this;
uni.createSelectorQuery().select('.TopBar').boundingClientRect(function(rect) {
this.berHeight = rect.height;
}).exec();
},
toggleContribute(val){
this.contributeType = val;
this.params.page = 1;
this.contributeData = [];
this.loading = false;
this.getContribute();
},
getContribute(){
if (this.loading) return;
this.loading = true;
spreadContributeApi(this.contributeType, this.params).then(res=>{
let list = res.data;
let loading = list.length < this.params.limit;
this.contributeData = this.contributeData.concat(list);
this.params.page++;
this.loading = loading;
}).catch((err) => {
this.$util.Tips({
title: err
});
});
},
},
onReachBottom() {
this.getContribute();
},
}
</script>
<style lang="scss">
.top-card{
background: #FFEEC7;
}
.tab-active{
font-weight: bold;
color: #333333;
position: relative;
&:after{
content: "";
position: absolute;
left: 50%;
bottom: -12rpx;
transform: translateX(-50%);
width: 40rpx;
height: 10rpx;
background-image: url("../static/rank_tab_fix.png");
background-size: cover;
}
}
.gradient-white{
background: linear-gradient( 180deg, rgba(245,245,245,0) 0%, #F5F5F5 100%);
}
.content-card{
top: -192rpx;
}
.rank-1{
color: #E73E05;
}
.rank-2{
color: #E26F04;
}
.rank-3{
color: #F4BB00;
}
.rank-cell ~ .rank-cell{
margin-top: 40rpx;
}
.empty-card{
/* #ifdef MP */
margin-top: 192rpx;
/* #endif */
}
.w-44{
width: 44rpx;
}
</style>