progress.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <div class="nut-progress">
  3. <div class="nut-progress-outer" :class="[showText && !textInside ? 'nut-progress-outer-part' :'','nut-progress-'+size]" :style="{height: strokeWidth + 'px'}">
  4. <div :class="['nut-progress-inner',status=='active' ? 'nut-active' : '']" :style="bgStyle">
  5. <div class="nut-progress-text" :style="{lineHeight:strokeWidth + 'px'}" v-if="showText && textInside"> {{percentage}}%</div>
  6. </div>
  7. </div>
  8. <div class="nut-progress-text" :style="{lineHeight:strokeWidth + 'px'}" v-if="showText && !textInside">
  9. <slot>
  10. <template v-if="status=='text' || status=='active'" >
  11. {{percentage}}%
  12. </template>
  13. <template v-else-if="status=='success' || 'wrong'">
  14. <i :class="statusIcon"></i>
  15. </template>
  16. </slot>
  17. </div>
  18. </div>
  19. </template>
  20. <script>
  21. export default {
  22. name:'nut-progress',
  23. props: {
  24. percentage: {
  25. type: [Number,String],
  26. default: 0,
  27. required: true
  28. },
  29. size: {
  30. type: String,
  31. default: ''
  32. },
  33. status: {
  34. type: String,
  35. default: 'text'
  36. },
  37. strokeWidth: {
  38. type:[Number,String],
  39. default: ''
  40. },
  41. textInside: {
  42. type: Boolean,
  43. default: false
  44. },
  45. showText: {
  46. type: Boolean,
  47. default: true
  48. },
  49. strokeColor: {
  50. type: String,
  51. default: ''
  52. }
  53. },
  54. data() {
  55. return {
  56. currentStatus: this.status,
  57. };
  58. },
  59. computed:{
  60. bgStyle () {
  61. const style = {};
  62. style.width = this.percentage + '%';
  63. style.backgroundColor = this.strokeColor || '';
  64. return style;
  65. },
  66. statusIcon () {
  67. return this.status==='success' ? 'nut-icon-success' : this.status==='wrong' ? 'nut-icon-fail' : '';
  68. }
  69. },
  70. methods: {
  71. }
  72. }
  73. </script>