cl-tab-pane.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <view class="cl-tab-pane" v-show="visible" v-if="loaded">
  3. <template v-if="parent.scrollView">
  4. <cl-scroller
  5. ref="scroller"
  6. :refresher-enabled="refresherEnabled"
  7. @up="handleReachBottom"
  8. @down="handlePullDownRefresh"
  9. >
  10. <template #loading="{ status, text, move }">
  11. <slot name="loading" :status="status" :text="text" :move="move"></slot>
  12. </template>
  13. <slot></slot>
  14. </cl-scroller>
  15. </template>
  16. <template v-else>
  17. <slot></slot>
  18. </template>
  19. </view>
  20. </template>
  21. <script>
  22. import Parent from "../../mixins/parent";
  23. /**
  24. * tab-pane 选项卡内容
  25. * @description 选项卡内容
  26. * @tutorial https://docs.cool-js.com/uni/components/nav/tabs.html
  27. * @property {String, Number} value 绑定值
  28. * @property {Array} label 标签内容
  29. * @property {Boolean} name 唯一标识
  30. * @property {Boolean} prefixIcon 前缀图标
  31. * @property {Number} suffixIcon 后缀图标
  32. * @property {Boolean} lazy 是否延迟加载
  33. * @property {Boolean} refresherEnabled 启用下拉刷新
  34. * @example 见教程
  35. */
  36. export default {
  37. name: "cl-tab-pane",
  38. componentName: "ClTabPane",
  39. props: {
  40. // 标签内容
  41. label: [String, Number],
  42. // 唯一标识
  43. name: [String, Number],
  44. // 前缀图标
  45. prefixIcon: String,
  46. // 后缀图标
  47. suffixIcon: String,
  48. // 是否延迟加载
  49. lazy: Boolean,
  50. // 启用下拉刷新
  51. refresherEnabled: {
  52. type: Boolean,
  53. default: true,
  54. },
  55. },
  56. mixins: [Parent],
  57. data() {
  58. return {
  59. loaded: this.lazy ? false : true,
  60. Keys: ["current", "scrollView"],
  61. ComponentName: "ClTabs",
  62. };
  63. },
  64. computed: {
  65. visible() {
  66. return this.parent.current == this.name;
  67. },
  68. },
  69. watch: {
  70. visible: {
  71. immediate: true,
  72. handler(val) {
  73. if (val) {
  74. this.loaded = true;
  75. }
  76. },
  77. },
  78. },
  79. methods: {
  80. handlePullDownRefresh() {
  81. if (this.refresherEnabled) {
  82. this.$emit("pull-refresh", {
  83. done: () => {
  84. this.$refs["scroller"].end();
  85. },
  86. });
  87. }
  88. },
  89. handleReachBottom() {
  90. this.$emit("loadmore");
  91. },
  92. },
  93. };
  94. </script>