Blame view

src/components/progress/progress.vue 3.7 KB
7fa943eb   梁灏   init
1
2
  <template>
      <div :class="wrapClasses">
c1dcac7a   梁灏   add Progress UI
3
4
5
6
7
          <div :class="outerClasses">
              <div :class="innerClasses">
                  <div :class="bgClasses" :style="bgStyle"></div>
              </div>
          </div>
7fa943eb   梁灏   init
8
9
10
11
12
13
14
15
16
17
          <span v-if="!hideInfo" :class="textClasses">
              <slot>
                  <span v-if="isStatus" :class="textInnerClasses">
                      <Icon :type="statusIcon"></Icon>
                  </span>
                  <span v-else :class="textInnerClasses">
                      {{ percent }}%
                  </span>
              </slot>
          </span>
7fa943eb   梁灏   init
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
      </div>
  </template>
  <script>
      import Icon from '../icon';
      import { oneOf } from '../../utils/assist';
  
      const prefixCls = 'ivu-progress';
  
      export default {
          components: { Icon },
          props: {
              percent: {
                  type: Number,
                  default: 0
              },
              status: {
                  validator (value) {
                      return oneOf(value, ['normal', 'active', 'wrong', 'success']);
                  },
                  default: 'normal'
              },
              hideInfo: {
                  type: Boolean,
                  default: false
              },
              strokeWidth: {
                  type: Number,
                  default: 10
              }
          },
5d08ddf2   梁灏   support Progress ...
48
49
50
          data () {
              return {
                  currentStatus: this.status
a190ce84   梁灏   support Collapse
51
              };
5d08ddf2   梁灏   support Progress ...
52
          },
7fa943eb   梁灏   init
53
54
          computed: {
              isStatus () {
5d08ddf2   梁灏   support Progress ...
55
                  return this.currentStatus == 'wrong' || this.currentStatus == 'success';
7fa943eb   梁灏   init
56
57
58
              },
              statusIcon () {
                  let type = '';
5d08ddf2   梁灏   support Progress ...
59
                  switch (this.currentStatus) {
7fa943eb   梁灏   init
60
                      case 'wrong':
c1dcac7a   梁灏   add Progress UI
61
                          type = 'ios-close';
7fa943eb   梁灏   init
62
63
                          break;
                      case 'success':
b0893113   jingsam   :art: add eslint
64
                          type = 'ios-checkmark';
7fa943eb   梁灏   init
65
66
67
68
69
70
71
72
73
                          break;
                  }
  
                  return type;
              },
              bgStyle () {
                  return {
                      width: `${this.percent}%`,
                      height: `${this.strokeWidth}px`
b0893113   jingsam   :art: add eslint
74
                  };
7fa943eb   梁灏   init
75
76
77
78
              },
              wrapClasses () {
                  return [
                      `${prefixCls}`,
5d08ddf2   梁灏   support Progress ...
79
                      `${prefixCls}-${this.currentStatus}`,
7fa943eb   梁灏   init
80
                      {
5d08ddf2   梁灏   support Progress ...
81
                          [`${prefixCls}-show-info`]: !this.hideInfo
7fa943eb   梁灏   init
82
83
  
                      }
b0893113   jingsam   :art: add eslint
84
                  ];
7fa943eb   梁灏   init
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
              },
              textClasses () {
                  return `${prefixCls}-text`;
              },
              textInnerClasses () {
                  return `${prefixCls}-text-inner`;
              },
              outerClasses () {
                  return `${prefixCls}-outer`;
              },
              innerClasses () {
                  return `${prefixCls}-inner`;
              },
              bgClasses () {
                  return `${prefixCls}-bg`;
              }
          },
5d08ddf2   梁灏   support Progress ...
102
          created () {
7fa943eb   梁灏   init
103
104
105
106
107
              this.handleStatus();
          },
          methods: {
              handleStatus (isDown) {
                  if (isDown) {
5d08ddf2   梁灏   support Progress ...
108
109
                      this.currentStatus = 'normal';
                      this.$emit('on-status-change', 'normal');
7fa943eb   梁灏   init
110
111
                  } else {
                      if (parseInt(this.percent, 10) == 100) {
5d08ddf2   梁灏   support Progress ...
112
113
                          this.currentStatus = 'success';
                          this.$emit('on-status-change', 'success');
7fa943eb   梁灏   init
114
115
116
117
118
119
120
121
122
123
124
                      }
                  }
              }
          },
          watch: {
              percent (val, oldVal) {
                  if (val < oldVal) {
                      this.handleStatus(true);
                  } else {
                      this.handleStatus();
                  }
5d08ddf2   梁灏   support Progress ...
125
126
127
              },
              status (val) {
                  this.currentStatus = val;
7fa943eb   梁灏   init
128
129
              }
          }
b0893113   jingsam   :art: add eslint
130
131
      };
  </script>