mescroll-empty.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <!--空布局
  2. 可作为独立的组件, 不使用mescroll的页面也能单独引入, 以便APP全局统一管理:
  3. import MescrollEmpty from '@/components/mescroll-uni/components/mescroll-empty.vue';
  4. <mescroll-empty v-if="isShowEmpty" :option="optEmpty" @emptyclick="emptyClick"></mescroll-empty>
  5. -->
  6. <template>
  7. <view class="mescroll-empty" :class="{ 'empty-fixed': option.fixed }" :style="{ 'z-index': option.zIndex, top: option.top }">
  8. <view> <image v-if="icon" class="empty-icon" :src="icon" mode="widthFix" /> </view>
  9. <view v-if="tip" class="empty-tip">{{ tip }}</view>
  10. <view v-if="option.btnText" class="empty-btn" @click="emptyClick">{{ option.btnText }}</view>
  11. </view>
  12. </template>
  13. <script>
  14. // 引入全局配置
  15. import GlobalOption from './../mescroll-uni-option.js';
  16. export default {
  17. props: {
  18. // empty的配置项: 默认为GlobalOption.up.empty
  19. option: {
  20. type: Object,
  21. default() {
  22. return {};
  23. }
  24. }
  25. },
  26. // 使用computed获取配置,用于支持option的动态配置
  27. computed: {
  28. // 图标
  29. icon() {
  30. return this.option.icon == null ? GlobalOption.up.empty.icon : this.option.icon; // 此处不使用短路求值, 用于支持传空串不显示图标
  31. },
  32. // 文本提示
  33. tip() {
  34. return this.option.tip == null ? GlobalOption.up.empty.tip : this.option.tip; // 此处不使用短路求值, 用于支持传空串不显示文本提示
  35. }
  36. },
  37. methods: {
  38. // 点击按钮
  39. emptyClick() {
  40. this.$emit('emptyclick');
  41. }
  42. }
  43. };
  44. </script>
  45. <style>
  46. /* 无任何数据的空布局 */
  47. .mescroll-empty {
  48. box-sizing: border-box;
  49. width: 100%;
  50. padding: 100rpx 50rpx;
  51. text-align: center;
  52. }
  53. .mescroll-empty.empty-fixed {
  54. z-index: 99;
  55. position: absolute; /*transform会使fixed失效,最终会降级为absolute */
  56. top: 100rpx;
  57. left: 0;
  58. }
  59. .mescroll-empty .empty-icon {
  60. width: 280rpx;
  61. height: 280rpx;
  62. }
  63. .mescroll-empty .empty-tip {
  64. margin-top: 20rpx;
  65. font-size: 24rpx;
  66. color: gray;
  67. }
  68. .mescroll-empty .empty-btn {
  69. display: inline-block;
  70. margin-top: 40rpx;
  71. min-width: 200rpx;
  72. padding: 18rpx;
  73. font-size: 28rpx;
  74. border: 1rpx solid #e04b28;
  75. border-radius: 60rpx;
  76. color: #e04b28;
  77. }
  78. .mescroll-empty .empty-btn:active {
  79. opacity: 0.75;
  80. }
  81. </style>