mescroll-empty.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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="btnText" class="empty-btn" @click="emptyClick">{{ btnText }}</view>
  11. </view>
  12. </template>
  13. <script>
  14. // 引入全局配置
  15. import GlobalOption from './../mescroll-uni-option.js';
  16. // 引入国际化工具类
  17. import mescrollI18n from './../mescroll-i18n.js';
  18. export default {
  19. props: {
  20. // empty的配置项: 默认为GlobalOption.up.empty
  21. option: {
  22. type: Object,
  23. default() {
  24. return {};
  25. }
  26. }
  27. },
  28. // 使用computed获取配置,用于支持option的动态配置
  29. computed: {
  30. // 图标
  31. icon() {
  32. if (this.option.icon != null) { // 此处不使用短路求值, 用于支持传空串不显示图标
  33. return this.option.icon
  34. } else{
  35. let i18nType = mescrollI18n.getType() // 国际化配置
  36. if (this.option.i18n) {
  37. return this.option.i18n[i18nType].icon
  38. } else{
  39. return GlobalOption.i18n[i18nType].up.empty.icon || GlobalOption.up.empty.icon
  40. }
  41. }
  42. },
  43. // 文本提示
  44. tip() {
  45. if (this.option.tip != null) { // 支持传空串不显示文本提示
  46. return this.option.tip
  47. } else{
  48. let i18nType = mescrollI18n.getType() // 国际化配置
  49. if (this.option.i18n) {
  50. return this.option.i18n[i18nType].tip
  51. } else{
  52. return GlobalOption.i18n[i18nType].up.empty.tip || GlobalOption.up.empty.tip
  53. }
  54. }
  55. },
  56. // 按钮文本
  57. btnText() {
  58. if (this.option.i18n) {
  59. let i18nType = mescrollI18n.getType() // 国际化配置
  60. return this.option.i18n[i18nType].btnText
  61. } else{
  62. return this.option.btnText
  63. }
  64. }
  65. },
  66. methods: {
  67. // 点击按钮
  68. emptyClick() {
  69. this.$emit('emptyclick');
  70. }
  71. }
  72. };
  73. </script>
  74. <style>
  75. /* 无任何数据的空布局 */
  76. .mescroll-empty {
  77. box-sizing: border-box;
  78. width: 100%;
  79. padding: 100rpx 50rpx;
  80. text-align: center;
  81. }
  82. .mescroll-empty.empty-fixed {
  83. z-index: 99;
  84. position: absolute; /*transform会使fixed失效,最终会降级为absolute */
  85. top: 100rpx;
  86. left: 0;
  87. }
  88. .mescroll-empty .empty-icon {
  89. width: 280rpx;
  90. height: 280rpx;
  91. }
  92. .mescroll-empty .empty-tip {
  93. margin-top: 20rpx;
  94. font-size: 24rpx;
  95. color: gray;
  96. }
  97. .mescroll-empty .empty-btn {
  98. display: inline-block;
  99. margin-top: 40rpx;
  100. min-width: 200rpx;
  101. padding: 18rpx;
  102. font-size: 28rpx;
  103. border: 1rpx solid #e04b28;
  104. border-radius: 60rpx;
  105. color: #e04b28;
  106. }
  107. .mescroll-empty .empty-btn:active {
  108. opacity: 0.75;
  109. }
  110. </style>