index.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 && item < 10 ? `0${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. const { componentName, create } = createComponent('indicator');
  15. export default create({
  16. props: {
  17. size: {
  18. type: Number,
  19. default: 3,
  20. required: true
  21. },
  22. current: {
  23. type: Number,
  24. default: 1,
  25. required: true
  26. },
  27. block: {
  28. type: Boolean,
  29. default: false
  30. },
  31. align: {
  32. type: String,
  33. default: 'center'
  34. },
  35. fillZero: {
  36. type: Boolean,
  37. default: true
  38. }
  39. },
  40. setup(props) {
  41. const { block, align } = toRefs(props);
  42. const classes = computed(() => {
  43. const prefixCls = componentName;
  44. return {
  45. [prefixCls]: true,
  46. [`${prefixCls}--block`]: block.value,
  47. [`${prefixCls}--align__${align.value}`]: block.value && align.value
  48. };
  49. });
  50. return { classes, componentName };
  51. }
  52. });
  53. </script>