Newer
Older
smartwell_app_front / src / components / ui / progress / Progress.vue
StephanieGitHub on 6 Aug 2019 5 KB first commit
<template>
  <transition name="slide">
    <div class="progress" id="lazyLoad">
      <mt-header class="header" title="Progress" :fixed="headerConf.fixed">
        <div slot="left">
          <mt-button icon="back" @click="back">返回</mt-button>
        </div>
      </mt-header>
      <div class="content" ref="content">
        <div class="row">
          <div class="title">基本功能</div>
          <div class="row-container flex-row">
            <div class="desc flex-1">
              默认
            </div>
            <div class="flex-2">
              <mt-progress class="progress-box"
                           :value="progressConf1.value"
                           :bar-height="progressConf1.barHeight"
              >
              </mt-progress>
            </div>
          </div>
          <div class="row-container flex-row">
            <div class="desc flex-1">
              左右文字
            </div>
            <div class=" flex-2">
              <mt-progress class="progress-box"
                           :value="progressConf2.value"
                           :bar-height="progressConf2.barHeight"
              >
                <div class="slot" slot="start">0%</div>
                <div class="slot" slot="end">100%</div>
              </mt-progress>
            </div>
          </div>
        </div>
        <mt-button type="primary"
                   class="upload"
                   @click="upload"
                   :disabled="progressConf3.disabled"
        >
          上传文件
        </mt-button>
        <mt-progress class="progress-box progress-upload"
                     v-show="progressConf3.flag"
                     :value="progressConf3.value"
        >
          <div class="slot" slot="end">{{showValue}}</div>
        </mt-progress>
        <mt-button type="default"
                   class="upload"
                   @click="pauseUpload"
                   v-show="progressConf3.flag"
                   :disabled="!progressConf3.disabled"
        >
          {{progressConf3.pauseText}}
        </mt-button>
        <mt-button type="danger"
                   class="upload"
                   @click="abolishUpload"
                   v-show="progressConf3.flag"
                   :disabled="!progressConf3.disabled"
        >
          取消上传
        </mt-button>
      </div>
    </div>
  </transition>
</template>

<script type="text/ecmascript-6">
  import { Progress, Button, Toast } from 'mint-ui'
  import { headerMixin } from 'assets/js/mixins'

  export default {
    mixins: [headerMixin],
    data () {
      return {
        progressConf1: {
          value: 50,
          barHeight: 2
        },
        progressConf2: {
          value: 20,
          barHeight: 5
        },
        progressConf3: {
          flag: false,
          pause: false, // 暂停标识
          pauseText: '暂停',
          timer: null,
          value: 0,
          barHeight: 5,
          disabled: false
        }
      }
    },
    computed: {
      showValue () {
        return this.progressConf3.value.toFixed(2) + '%'
      }
    },
    methods: {
      upload () {
        setTimeout(() => {
          Toast({
            message: '正在使用4G',
            position: 'bottom',
            duration: 3000
          });
        }, 1000)
        this.progressConf3.flag = true
        this.progressConf3.disabled = true
        this.timerHandle()
      },
      pauseUpload () {
        this.progressConf3.pause = !this.progressConf3.pause
        this.progressConf3.pauseText = this.progressConf3.pause ? '继续' : '暂停'
        if (this.progressConf3.pause) { // 暂停状态
          clearInterval(this.progressConf3.timer)
          this.progressConf3.timer = null
        } else {
          this.timerHandle()
        }
      },
      abolishUpload () {
        this.progressConf3.value = 0
        this.progressConf3.flag = false
        this.progressConf3.disabled = false
        clearInterval(this.progressConf3.timer)
        Toast({
          message: '已取消',
          iconClass: 'iconfont icon-caozuochenggong'
        });
      },
      timerHandle () {
        this.progressConf3.timer = setInterval(() => {
          this.progressConf3.value += Math.random()
          if (this.progressConf3.value >= 100) {
            clearInterval(this.progressConf3.timer)
            this.progressConf3.timer = null
            this.progressConf3.value = 0
            this.progressConf3.flag = false
            this.progressConf3.disabled = false
            Toast({
              message: '上传完成',
              iconClass: 'iconfont icon-caozuochenggong'
            });
            setTimeout(() => {
              Toast({
                message: '您的流量已不足',
                position: 'bottom',
                duration: 3000
              });
            }, 1000)
          }
        }, 50)
      }
    }
  }
</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
  @import "~assets/css/variable.styl"
  @import "~assets/css/transition.styl"
  @import "~assets/css/flex.styl"
  .progress {
    position absolute
    z-index 100
    top 0
    left 0
    right 0
    bottom 0
    background-color $color-background
    .content {
      padding-top 50px
      .row {
        width 100%
        margin 0 auto
        .title {
          height 40px
          line-height 40px
          padding 0 10px
          font-size $font-size-medium
        }
        .row-container {
          background-color white
          padding 5px 10px
          .desc {
            height 50px
            line-height 50px
          }
          .progress-box {
            height 50px
            .slot {
              line-height 50px
              margin 0 5px
            }
          }
        }
      }
      .upload {
        display block
        width 80%
        margin 0 auto
        margin-top 20px
      }
      .progress-box.progress-upload {
        padding 0 10px
        margin 30px 0
      }
    }
  }
</style>