fs-grid-item.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <view
  3. class="fs-grid-item"
  4. :class="{'fs-grid-item-border': border,'fs-grid-item-radius': radius}"
  5. :style="{padding: padding ? '20rpx 0' : 0,backgroundColor: bgColor}"
  6. @click="handleClick">
  7. <slot></slot>
  8. </view>
  9. </template>
  10. <script setup>
  11. import { inject } from 'vue'
  12. const props = defineProps({
  13. link: String,
  14. linkType: {
  15. type: String,
  16. default: 'navigateTo'
  17. },
  18. })
  19. const emits = defineEmits(['click'])
  20. const gird = inject('fsGrid', {})
  21. const { border, padding, bgColor, radius } = gird
  22. const handleClick = () => {
  23. if (props.link) {
  24. uni[props.linkType]({
  25. url: props.link
  26. })
  27. }
  28. emits('click')
  29. }
  30. </script>
  31. <style lang="scss" scoped>
  32. .fs-grid-item{
  33. display: flex;
  34. align-items: center;
  35. justify-content: center;
  36. flex-direction: column;
  37. text-align: center;
  38. position: relative;
  39. height: 100%;
  40. background-color: #fff;
  41. &-border::before{
  42. position: absolute;
  43. content: '';
  44. top: 0;
  45. right: 0;
  46. bottom: 0;
  47. left: 0;
  48. border: 1px solid var(--border-color);
  49. margin-left: -1px;
  50. margin-top: -1px;
  51. }
  52. &-radius{
  53. border-radius: var(--radius);
  54. }
  55. }
  56. </style>