index.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <view :class="classes">
  3. <template v-for="item in size" :key="item">
  4. <view v-if="item === current" :class="`${componentName}--number`">
  5. {{ (fillZero && padZero(item)) || item }}
  6. </view>
  7. <view v-else :class="`${componentName}--dot`"></view>
  8. </template>
  9. </view>
  10. </template>
  11. <script lang="ts">
  12. import { toRefs, computed } from 'vue';
  13. import { createComponent } from '@/packages/utils/create';
  14. import { padZero } from '@/packages/utils/util';
  15. const { componentName, create } = createComponent('indicator');
  16. export default create({
  17. props: {
  18. size: {
  19. type: Number,
  20. default: 3,
  21. required: true
  22. },
  23. current: {
  24. type: Number,
  25. default: 1,
  26. required: true
  27. },
  28. block: {
  29. type: Boolean,
  30. default: false
  31. },
  32. align: {
  33. type: String,
  34. default: 'center'
  35. },
  36. fillZero: {
  37. type: Boolean,
  38. default: true
  39. }
  40. },
  41. setup(props) {
  42. const { block, align } = toRefs(props);
  43. const classes = computed(() => {
  44. const prefixCls = componentName;
  45. return {
  46. [prefixCls]: true,
  47. [`${prefixCls}--block`]: block.value,
  48. [`${prefixCls}--align__${align.value}`]: block.value && align.value
  49. };
  50. });
  51. return { classes, componentName, padZero };
  52. }
  53. });
  54. </script>