parent
							
								
									626c19dcb3
								
							
						
					
					
						commit
						d344efaa40
					
				
				 2 changed files with 94 additions and 15 deletions
			
			
		@ -0,0 +1,82 @@ | 
				
			||||
<template> | 
				
			||||
  <div class="chart-trend"> | 
				
			||||
    {{term}} | 
				
			||||
    <span>{{rate}}%</span> | 
				
			||||
    <span :class="['chart-trend-icon', trend]" style=""><a-icon :type="'caret-' + trend" /></span> | 
				
			||||
  </div> | 
				
			||||
</template> | 
				
			||||
 | 
				
			||||
<script> | 
				
			||||
import AIcon from 'ant-design-vue/es/icon/icon' | 
				
			||||
export default { | 
				
			||||
  name: 'Trend', | 
				
			||||
  components: {AIcon}, | 
				
			||||
  props: { | 
				
			||||
    term: { | 
				
			||||
      type: String, | 
				
			||||
      required: true | 
				
			||||
    }, | 
				
			||||
    target: { | 
				
			||||
      type: Number, | 
				
			||||
      required: false, | 
				
			||||
      default: 0 | 
				
			||||
    }, | 
				
			||||
    value: { | 
				
			||||
      type: Number, | 
				
			||||
      required: false, | 
				
			||||
      default: 0 | 
				
			||||
    }, | 
				
			||||
    isIncrease: { | 
				
			||||
      type: Boolean, | 
				
			||||
      required: false, | 
				
			||||
      default: null | 
				
			||||
    }, | 
				
			||||
    percent: { | 
				
			||||
      type: Number, | 
				
			||||
      required: false, | 
				
			||||
      default: null | 
				
			||||
    }, | 
				
			||||
    scale: { | 
				
			||||
      type: Number, | 
				
			||||
      required: false, | 
				
			||||
      default: 2 | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  data () { | 
				
			||||
    return { | 
				
			||||
      trend: this.isIncrease ? 'up' : 'down', | 
				
			||||
      rate: this.percent | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  created () { | 
				
			||||
    this.trend = this.caulateTrend() | 
				
			||||
    this.rate = this.caulateRate() | 
				
			||||
  }, | 
				
			||||
  methods: { | 
				
			||||
    caulateRate () { | 
				
			||||
      return (this.percent === null ? Math.abs(this.value - this.target) * 100 / this.target : this.percent).toFixed(this.scale) | 
				
			||||
    }, | 
				
			||||
    caulateTrend () { | 
				
			||||
      let isIncrease = this.isIncrease === null ? this.value >= this.target : this.isIncrease | 
				
			||||
      return isIncrease ? 'up' : 'down' | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
 | 
				
			||||
<style lang="less" scoped> | 
				
			||||
  .chart-trend{ | 
				
			||||
    display: inline-block; | 
				
			||||
    font-size: 14px; | 
				
			||||
    line-height: 22px; | 
				
			||||
    .chart-trend-icon{ | 
				
			||||
      font-size: 12px; | 
				
			||||
      &.up{ | 
				
			||||
        color: #f5222d; | 
				
			||||
      } | 
				
			||||
      &.down{ | 
				
			||||
        color: #52c41a; | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
</style> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue