Blame view

src/components/progress/progress.vue 3.99 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
      </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
48921bf5   Rijn   add vertical prog...
46
47
48
49
              },
              vertical: {
                  type: Boolean,
                  default: false
7fa943eb   梁灏   init
50
51
              }
          },
5d08ddf2   梁灏   support Progress ...
52
53
54
          data () {
              return {
                  currentStatus: this.status
a190ce84   梁灏   support Collapse
55
              };
5d08ddf2   梁灏   support Progress ...
56
          },
7fa943eb   梁灏   init
57
58
          computed: {
              isStatus () {
5d08ddf2   梁灏   support Progress ...
59
                  return this.currentStatus == 'wrong' || this.currentStatus == 'success';
7fa943eb   梁灏   init
60
61
62
              },
              statusIcon () {
                  let type = '';
5d08ddf2   梁灏   support Progress ...
63
                  switch (this.currentStatus) {
7fa943eb   梁灏   init
64
                      case 'wrong':
c1dcac7a   梁灏   add Progress UI
65
                          type = 'ios-close';
7fa943eb   梁灏   init
66
67
                          break;
                      case 'success':
b0893113   jingsam   :art: add eslint
68
                          type = 'ios-checkmark';
7fa943eb   梁灏   init
69
70
71
72
73
74
                          break;
                  }
  
                  return type;
              },
              bgStyle () {
48921bf5   Rijn   add vertical prog...
75
76
77
78
                  return this.vertical ? {
                      height: `${this.percent}%`,
                      width: `${this.strokeWidth}px`
                  } : {
7fa943eb   梁灏   init
79
80
                      width: `${this.percent}%`,
                      height: `${this.strokeWidth}px`
b0893113   jingsam   :art: add eslint
81
                  };
7fa943eb   梁灏   init
82
83
84
85
              },
              wrapClasses () {
                  return [
                      `${prefixCls}`,
5d08ddf2   梁灏   support Progress ...
86
                      `${prefixCls}-${this.currentStatus}`,
7fa943eb   梁灏   init
87
                      {
48921bf5   Rijn   add vertical prog...
88
89
                          [`${prefixCls}-show-info`]: !this.hideInfo,
                          [`${prefixCls}-vertical`]: this.vertical
7fa943eb   梁灏   init
90
91
  
                      }
b0893113   jingsam   :art: add eslint
92
                  ];
7fa943eb   梁灏   init
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
              },
              textClasses () {
                  return `${prefixCls}-text`;
              },
              textInnerClasses () {
                  return `${prefixCls}-text-inner`;
              },
              outerClasses () {
                  return `${prefixCls}-outer`;
              },
              innerClasses () {
                  return `${prefixCls}-inner`;
              },
              bgClasses () {
                  return `${prefixCls}-bg`;
              }
          },
5d08ddf2   梁灏   support Progress ...
110
          created () {
7fa943eb   梁灏   init
111
112
113
114
115
              this.handleStatus();
          },
          methods: {
              handleStatus (isDown) {
                  if (isDown) {
5d08ddf2   梁灏   support Progress ...
116
117
                      this.currentStatus = 'normal';
                      this.$emit('on-status-change', 'normal');
7fa943eb   梁灏   init
118
119
                  } else {
                      if (parseInt(this.percent, 10) == 100) {
5d08ddf2   梁灏   support Progress ...
120
121
                          this.currentStatus = 'success';
                          this.$emit('on-status-change', 'success');
7fa943eb   梁灏   init
122
123
124
125
126
127
128
129
130
131
132
                      }
                  }
              }
          },
          watch: {
              percent (val, oldVal) {
                  if (val < oldVal) {
                      this.handleStatus(true);
                  } else {
                      this.handleStatus();
                  }
5d08ddf2   梁灏   support Progress ...
133
134
135
              },
              status (val) {
                  this.currentStatus = val;
7fa943eb   梁灏   init
136
137
              }
          }
b0893113   jingsam   :art: add eslint
138
139
      };
  </script>