1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
| <template>
| <view>
| <view v-if="copyContent.length > 0" class="ranking">
| <view class="ranking-item" v-for="(content,index) in copyContent" :key="index" :style="{padding:progressPadding+'rpx'}">
| <view class="name">{{content.name}}</view>
| <view class="progress" >
| <text :style="{background:content.background,width:content.width + '%',height:progressWidth+'rpx'}"></text>
| </view>
| <view class="num">{{content.num}}</view>
| </view>
| </view>
| </view>
| </template>
|
| <script>
| export default{
| name:'ranking-list',
| props:{
| content:{
| type: Array,
| default() {
| return []
| }
| },
| isPC:{
| type:Boolean,
| default:false
| },
| isRank:{
| type:Boolean,
| default:false
| }
| },
| data(){
| return{
| progressWidth:24,
| progressPadding:10,
| maxNumber:0,
| culCount:0,
| copyContent:[]
| }
| },
| watch:{
| content(newV){
| this.init()
| }
| },
| methods:{
| init(){
| this.copyContent = this.deepClone(this.content)
| if(this.copyContent && this.copyContent.length >0){
| if(this.isRank){
| this.copyContent = this.copyContent.sort((a,b) => b.num - a.num);
| this.maxNumber = this.copyContent[0].num;
| }else{
| this.maxNumber = Math.max.apply(Math,this.copyContent.map(item => { return item.num }));
| }
| this.copyContent.map((item,index) =>{
| item.width = this.computeWidth(this.maxNumber,item.num);
| });
| }
| },
| computeWidth(max,current){
| let num = (current / max) * 100;
| return num.toFixed(2);
| },
| deepClone(obj) {
| var cloneObj = new obj.constructor()
| if(obj === null) return obj
| if(obj instanceof Date) return new Date(obj)
| if(obj instanceof RegExp) return new RegExp(obj)
| if (typeof obj !== 'object') return obj
| for (var i in obj) {
| if (obj.hasOwnProperty(i)) {
| cloneObj[i] = this.deepClone(obj[i])
| }
| }
| return cloneObj
| }
| },
| mounted() {
| if(this.isPC){
| this.progressWidth = 40;
| this.progressPadding = 30;
| }
| this.init();
| }
| }
| </script>
|
| <style scoped lang="scss">
| .ranking-item{
| display: flex;
| margin-bottom: 13rpx;
| align-content: center;
| height: 50rpx;
|
| .name{
| padding-right: 10rpx;
| color: #868688;
| font-size: 20rpx;
| flex: 1;
| white-space: nowrap;
| overflow: hidden;
| text-overflow: ellipsis;
| }
| .progress{
| flex:5;
| text-align: left;
| padding-right: 10rpx;
|
| text{
| display: inline-block;
| border-radius: 30rpx;
| vertical-align:top;
| }
|
| }
| .num{
| font-size: 26rpx;
| color: #3EB2F5;
| flex: 1;
| }
| }
| </style>
|
|