123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <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>
|