12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <template>
- <view>
- <view class="ranking">
- <view class="ranking-item" v-for="(content,index) in content" :key="index">
- <view class="name">{{content.name}}</view>
- <view class="progress" >
- <text :style="{backgroundImage:'linear-gradient(to top right,'+getColor(0,index)+','+getColor(1,index)+')',width:content.width + '%'}"></text>
- </view>
- <view class="num">{{content.num}}</view>
- </view>
- </view>
- </view>
- </template>
- <script>
- export default{
- name:'ranking-list',
- props:{
- content:{
- type: Array,
- default() {
- return []
- }
- }
- },
- methods:{
- init(){
- if(this.content && this.content.length >0){
- this.content = this.content.sort((a,b) => b.num - a.num);
- let max = this.content[0].num;
- this.content.map((item,index) =>{
- item.width = this.computeWidth(max,item.num);
- });
- this.$emit("updateRanking",this.content)
- }
- },
- computeWidth(max,current){
- let num = (current / max) * 100;
- return num.toFixed(2);
- },
- getColor(id,index){
- let color = "";
- switch(index){
- case 0:
- color = id == 0 ? "#fff":"#A80BFC";
- break;
- case 1:
- color = id == 0 ? "#fff":"#740CFF";
- break;
- case 2:
- color = id == 0 ? "#fff":"#4A08DC";
- break;
- default :
- color = id == 0 ? "#fff":"#1936DA";
- break;
- }
- return color;
- },
- },
- mounted() {
- this.init();
- }
- }
- </script>
- <style scoped lang="scss">
- .ranking-item{
- display: flex;
- margin-bottom: 13rpx;
- padding: 10rpx;
- align-content: center;
-
- .name{
- padding-right: 10rpx;
- color: #868688;
- }
- .progress{
- flex:5;
- text-align: left;
- padding-right: 10rpx;
-
- text{
- display: inline-block;
- height: 100%;
- }
-
- }
- .num{
- font-size: 26rpx;
- color: #3EB2F5;
- }
- }
- </style>
|