109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<template>
							 | 
						||
| 
								 | 
							
								  <div class="progress">
							 | 
						||
| 
								 | 
							
								    <div class="progress-item" v-for="(item, index) in rate" :key="index">
							 | 
						||
| 
								 | 
							
								      <BFC>
							 | 
						||
| 
								 | 
							
								        <div class="percent" slot="right">
							 | 
						||
| 
								 | 
							
								          {{ item.val * 100 }}
							 | 
						||
| 
								 | 
							
								          <div class="unit">%</div>
							 | 
						||
| 
								 | 
							
								        </div>
							 | 
						||
| 
								 | 
							
								        <div class="info" slot="center">
							 | 
						||
| 
								 | 
							
								          <div class="bar">
							 | 
						||
| 
								 | 
							
								            <div class="bar-color">
							 | 
						||
| 
								 | 
							
								              <div class="bf" :style="{ width: item.val * 100 + '%' }"></div>
							 | 
						||
| 
								 | 
							
								            </div>
							 | 
						||
| 
								 | 
							
								          </div>
							 | 
						||
| 
								 | 
							
								          <div class="tit">
							 | 
						||
| 
								 | 
							
								            {{ item.key }}
							 | 
						||
| 
								 | 
							
								          </div>
							 | 
						||
| 
								 | 
							
								        </div>
							 | 
						||
| 
								 | 
							
								      </BFC>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								  </div>
							 | 
						||
| 
								 | 
							
								</template>
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
								import BFC from "../BFC.vue";
							 | 
						||
| 
								 | 
							
								import { mapState } from 'vuex'
							 | 
						||
| 
								 | 
							
								export default {
							 | 
						||
| 
								 | 
							
								  name: "ProgressDesc",
							 | 
						||
| 
								 | 
							
								  components: {BFC},
							 | 
						||
| 
								 | 
							
								  computed: {
							 | 
						||
| 
								 | 
							
								    ...mapState({
							 | 
						||
| 
								 | 
							
								      info: state => state.system.info
							 | 
						||
| 
								 | 
							
								    }),
							 | 
						||
| 
								 | 
							
								    rate () {
							 | 
						||
| 
								 | 
							
								      return this.info?.rate || []
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								<style scoped lang="less">
							 | 
						||
| 
								 | 
							
								  .progress {
							 | 
						||
| 
								 | 
							
								    display: flex;
							 | 
						||
| 
								 | 
							
								    justify-content: space-between;
							 | 
						||
| 
								 | 
							
								    align-items: flex-start;
							 | 
						||
| 
								 | 
							
								    flex-wrap: wrap;
							 | 
						||
| 
								 | 
							
								    width: 100%;
							 | 
						||
| 
								 | 
							
								    height: 100%;
							 | 
						||
| 
								 | 
							
								    .progress-item {
							 | 
						||
| 
								 | 
							
								      width: 50%;
							 | 
						||
| 
								 | 
							
								      height: 40px;
							 | 
						||
| 
								 | 
							
								      box-sizing: border-box;
							 | 
						||
| 
								 | 
							
								      padding: 0 4px;
							 | 
						||
| 
								 | 
							
								      .percent {
							 | 
						||
| 
								 | 
							
								        height: 40px;
							 | 
						||
| 
								 | 
							
								        line-height: 40px;
							 | 
						||
| 
								 | 
							
								        /** 文本1 */
							 | 
						||
| 
								 | 
							
								        font-size: 28px;
							 | 
						||
| 
								 | 
							
								        font-weight: 400;
							 | 
						||
| 
								 | 
							
								        letter-spacing: 0px;
							 | 
						||
| 
								 | 
							
								        color: rgba(255, 255, 255, 1);
							 | 
						||
| 
								 | 
							
								        word-break: keep-all;
							 | 
						||
| 
								 | 
							
								        margin-top: -10px;
							 | 
						||
| 
								 | 
							
								        display: flex;
							 | 
						||
| 
								 | 
							
								        justify-content: flex-start;
							 | 
						||
| 
								 | 
							
								        align-items: center;
							 | 
						||
| 
								 | 
							
								        .unit {
							 | 
						||
| 
								 | 
							
								          /** 文本1 */
							 | 
						||
| 
								 | 
							
								          font-size: 16px;
							 | 
						||
| 
								 | 
							
								          font-weight: 400;
							 | 
						||
| 
								 | 
							
								          letter-spacing: 0px;
							 | 
						||
| 
								 | 
							
								          line-height: 38.42px;
							 | 
						||
| 
								 | 
							
								          color: rgba(255, 255, 255, 1);
							 | 
						||
| 
								 | 
							
								          text-align: left;
							 | 
						||
| 
								 | 
							
								          vertical-align: top;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      .tit {
							 | 
						||
| 
								 | 
							
								        /** 文本1 */
							 | 
						||
| 
								 | 
							
								        font-size: 16px;
							 | 
						||
| 
								 | 
							
								        font-weight: 400;
							 | 
						||
| 
								 | 
							
								        letter-spacing: 0px;
							 | 
						||
| 
								 | 
							
								        line-height: 21.95px;
							 | 
						||
| 
								 | 
							
								        color: rgba(64, 204, 151, 1);
							 | 
						||
| 
								 | 
							
								        text-align: left;
							 | 
						||
| 
								 | 
							
								        vertical-align: top;
							 | 
						||
| 
								 | 
							
								        margin-top: 5px;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      .info {
							 | 
						||
| 
								 | 
							
								        height: 40px;
							 | 
						||
| 
								 | 
							
								        padding-right: 10px;
							 | 
						||
| 
								 | 
							
								        padding-top: 10px;
							 | 
						||
| 
								 | 
							
								        .bar {
							 | 
						||
| 
								 | 
							
								          height: 3px;
							 | 
						||
| 
								 | 
							
								          background: rgba(64, 204, 151, 0.3);
							 | 
						||
| 
								 | 
							
								          position: relative;
							 | 
						||
| 
								 | 
							
								          .bf {
							 | 
						||
| 
								 | 
							
								            position: absolute;
							 | 
						||
| 
								 | 
							
								            left: 0;
							 | 
						||
| 
								 | 
							
								            top: -1px;
							 | 
						||
| 
								 | 
							
								            height: 5px;
							 | 
						||
| 
								 | 
							
								            background: rgba(64, 204, 151, 1);          ;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								</style>
							 |