mescroll-empty.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. <image v-if="icon" class="empty-icon" src="/static/nocontent-1.png" mode="widthFix" />
  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. },
  27. // 使用computed获取配置,用于支持option的动态配置
  28. computed: {
  29. // 图标
  30. icon() {
  31. return this.option.icon == null ? GlobalOption.up.empty.icon : this.option.icon; // 此处不使用短路求值, 用于支持传空串不显示图标
  32. },
  33. // 文本提示
  34. tip() {
  35. return this.option.tip == null ? GlobalOption.up.empty.tip : this.option.tip; // 此处不使用短路求值, 用于支持传空串不显示文本提示
  36. }
  37. },
  38. methods: {
  39. // 点击按钮
  40. emptyClick() {
  41. this.$emit('emptyclick');
  42. }
  43. }
  44. };
  45. </script>
  46. <style>
  47. /* 无任何数据的空布局 */
  48. .mescroll-empty {
  49. box-sizing: border-box;
  50. width: 100%;
  51. padding: 60% 50rpx;
  52. text-align: center;
  53. }
  54. .mescroll-empty.empty-fixed {
  55. z-index: 99;
  56. position: absolute; /*transform会使fixed失效,最终会降级为absolute */
  57. top: 100rpx;
  58. left: 0;
  59. }
  60. .mescroll-empty .empty-icon {
  61. width: 280rpx;
  62. height: 280rpx;
  63. }
  64. .mescroll-empty .empty-tip {
  65. font-size: 24rpx;
  66. margin-top: -80rpx;
  67. color: gray;
  68. }
  69. .mescroll-empty .empty-btn {
  70. display: inline-block;
  71. margin-top: 40rpx;
  72. min-width: 200rpx;
  73. padding: 18rpx;
  74. font-size: 28rpx;
  75. border: 1rpx solid #e04b28;
  76. border-radius: 60rpx;
  77. color: #e04b28;
  78. }
  79. .mescroll-empty .empty-btn:active {
  80. opacity: 0.75;
  81. }
  82. </style>