stellar-ui-v2 1.35.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/common/css/common.scss +61 -0
  2. package/components/ste-animate/README.md +117 -0
  3. package/components/ste-animate/animate.scss +247 -0
  4. package/components/ste-animate/ste-animate.vue +200 -0
  5. package/components/ste-badge/README.md +171 -0
  6. package/components/ste-badge/ste-badge.vue +238 -0
  7. package/components/ste-barcode/README.md +36 -0
  8. package/components/ste-barcode/encode2.js +317 -0
  9. package/components/ste-barcode/ste-barcode.vue +213 -0
  10. package/components/ste-button/README.md +129 -0
  11. package/components/ste-button/ste-button.vue +345 -0
  12. package/components/ste-calendar/README.md +304 -0
  13. package/components/ste-calendar/self-date.js +119 -0
  14. package/components/ste-calendar/ste-calendar.vue +578 -0
  15. package/components/ste-checkbox/README.md +297 -0
  16. package/components/ste-checkbox/ste-checkbox.vue +305 -0
  17. package/components/ste-checkbox-group/ste-checkbox-group.vue +133 -0
  18. package/components/ste-code-input/README.md +67 -0
  19. package/components/ste-code-input/ste-code-input.vue +302 -0
  20. package/components/ste-date-picker/README.md +135 -0
  21. package/components/ste-date-picker/ste-date-picker.vue +407 -0
  22. package/components/ste-drag/README.md +103 -0
  23. package/components/ste-drag/ste-drag.vue +203 -0
  24. package/components/ste-dropdown-menu/README.md +358 -0
  25. package/components/ste-dropdown-menu/ste-dropdown-menu.vue +405 -0
  26. package/components/ste-dropdown-menu-item/ste-dropdown-menu-item.vue +176 -0
  27. package/components/ste-icon/README.md +90 -0
  28. package/components/ste-icon/iconfont.css +8 -0
  29. package/components/ste-icon/ste-icon.vue +147 -0
  30. package/components/ste-image/README.md +154 -0
  31. package/components/ste-image/ste-image.vue +218 -0
  32. package/components/ste-index-item/ste-index-item.vue +96 -0
  33. package/components/ste-index-list/README.md +153 -0
  34. package/components/ste-index-list/ste-index-list.vue +128 -0
  35. package/components/ste-input/README.md +146 -0
  36. package/components/ste-input/ste-input.vue +480 -0
  37. package/components/ste-loading/README.md +81 -0
  38. package/components/ste-loading/ste-loading.vue +166 -0
  39. package/components/ste-media-preview/README.md +243 -0
  40. package/components/ste-media-preview/TouchScaleing.js +102 -0
  41. package/components/ste-media-preview/ste-media-preview.vue +267 -0
  42. package/components/ste-message-box/README.md +217 -0
  43. package/components/ste-message-box/ste-message-box.js +72 -0
  44. package/components/ste-message-box/ste-message-box.vue +380 -0
  45. package/components/ste-notice-bar/README.md +129 -0
  46. package/components/ste-notice-bar/ste-notice-bar.vue +331 -0
  47. package/components/ste-number-keyboard/README.md +246 -0
  48. package/components/ste-number-keyboard/keyboard.vue +140 -0
  49. package/components/ste-number-keyboard/ste-number-keyboard.vue +240 -0
  50. package/components/ste-picker/ste-picker.vue +258 -0
  51. package/components/ste-popup/README.md +148 -0
  52. package/components/ste-popup/ste-popup.vue +337 -0
  53. package/components/ste-price/README.md +129 -0
  54. package/components/ste-price/ste-price.vue +258 -0
  55. package/components/ste-progress/README.md +87 -0
  56. package/components/ste-progress/ste-progress.vue +200 -0
  57. package/components/ste-qrcode/README.md +50 -0
  58. package/components/ste-qrcode/ste-qrcode.vue +164 -0
  59. package/components/ste-qrcode/uqrcode.js +34 -0
  60. package/components/ste-radio/README.md +286 -0
  61. package/components/ste-radio/ste-radio.vue +293 -0
  62. package/components/ste-radio-group/ste-radio-group.vue +128 -0
  63. package/components/ste-rate/README.md +115 -0
  64. package/components/ste-rate/ste-rate.vue +202 -0
  65. package/components/ste-read-more/README.md +111 -0
  66. package/components/ste-read-more/ste-read-more.vue +133 -0
  67. package/components/ste-rich-text/README.md +31 -0
  68. package/components/ste-rich-text/ste-rich-text.vue +70 -0
  69. package/components/ste-scroll-to/README.md +68 -0
  70. package/components/ste-scroll-to/mixin.js +173 -0
  71. package/components/ste-scroll-to/ste-scroll-to.vue +45 -0
  72. package/components/ste-scroll-to-item/ste-scroll-to-item.vue +25 -0
  73. package/components/ste-search/README.md +262 -0
  74. package/components/ste-search/ste-search.vue +547 -0
  75. package/components/ste-select/README.md +434 -0
  76. package/components/ste-select/datapager.vue +62 -0
  77. package/components/ste-select/datetime.vue +106 -0
  78. package/components/ste-select/defaultDate.js +142 -0
  79. package/components/ste-select/ste-select.vue +843 -0
  80. package/components/ste-signature/README.md +105 -0
  81. package/components/ste-signature/ste-signature.vue +220 -0
  82. package/components/ste-slider/README.md +165 -0
  83. package/components/ste-slider/ste-slider.vue +544 -0
  84. package/components/ste-step/ste-step.vue +264 -0
  85. package/components/ste-stepper/README.md +170 -0
  86. package/components/ste-stepper/ste-stepper.vue +373 -0
  87. package/components/ste-steps/README.md +132 -0
  88. package/components/ste-steps/ste-steps.vue +65 -0
  89. package/components/ste-sticky/README.md +52 -0
  90. package/components/ste-sticky/ste-sticky.vue +127 -0
  91. package/components/ste-swipe-action/README.md +197 -0
  92. package/components/ste-swipe-action/ste-swipe-action.vue +303 -0
  93. package/components/ste-swipe-action-group/ste-swipe-action-group.vue +104 -0
  94. package/components/ste-swiper/README.md +173 -0
  95. package/components/ste-swiper/ste-swiper.vue +462 -0
  96. package/components/ste-swiper-item/ste-swiper-item.vue +41 -0
  97. package/components/ste-switch/README.md +110 -0
  98. package/components/ste-switch/ste-switch.vue +144 -0
  99. package/components/ste-tab/ste-tab.vue +87 -0
  100. package/components/ste-table/README.md +785 -0
  101. package/components/ste-table/common.js +8 -0
  102. package/components/ste-table/ste-table.vue +666 -0
  103. package/components/ste-table/utils.js +20 -0
  104. package/components/ste-table-column/checkbox-icon.vue +65 -0
  105. package/components/ste-table-column/common.scss +65 -0
  106. package/components/ste-table-column/radio-icon.vue +110 -0
  107. package/components/ste-table-column/ste-table-column.vue +255 -0
  108. package/components/ste-table-column/sub-table.vue +116 -0
  109. package/components/ste-table-column/table-popover.vue +204 -0
  110. package/components/ste-table-column/var.scss +1 -0
  111. package/components/ste-tabs/README.md +475 -0
  112. package/components/ste-tabs/props.js +212 -0
  113. package/components/ste-tabs/ste-tabs.vue +758 -0
  114. package/components/ste-text/README.md +66 -0
  115. package/components/ste-text/ste-text.vue +72 -0
  116. package/components/ste-toast/README.md +243 -0
  117. package/components/ste-toast/ste-toast.js +69 -0
  118. package/components/ste-toast/ste-toast.vue +231 -0
  119. package/components/ste-touch-swipe/README.md +104 -0
  120. package/components/ste-touch-swipe/TouchEvent.js +72 -0
  121. package/components/ste-touch-swipe/ste-touch-swipe.vue +327 -0
  122. package/components/ste-touch-swipe-item/ste-touch-swipe-item.vue +33 -0
  123. package/components/ste-tour/README.md +194 -0
  124. package/components/ste-tour/ste-tour.vue +355 -0
  125. package/components/ste-tree/README.md +240 -0
  126. package/components/ste-tree/ste-tree.vue +350 -0
  127. package/components/ste-upload/README.md +276 -0
  128. package/components/ste-upload/ReadFile.js +229 -0
  129. package/components/ste-upload/ste-upload.vue +526 -0
  130. package/components/ste-video/README.md +60 -0
  131. package/components/ste-video/props.js +149 -0
  132. package/components/ste-video/ste-video.vue +647 -0
  133. package/config/color.js +22 -0
  134. package/index.js +2 -0
  135. package/package.json +19 -0
  136. package/utils/Color.js +66 -0
  137. package/utils/System.js +110 -0
  138. package/utils/dayjs.min.js +1 -0
  139. package/utils/mixin.js +67 -0
  140. package/utils/store.js +7 -0
  141. package/utils/utils.js +604 -0
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <view class="wrapper">
3
+ <view
4
+ class="ellipsis-box"
5
+ @touchstart="handleTouchStart"
6
+ @touchend="handleTouchEnd"
7
+ @mousedown="handleTouchStart"
8
+ >
9
+ {{ text }}
10
+ </view>
11
+ <!-- 不做展示,正常显示文字长度,用于判断是否超过长度 -->
12
+ <text class="measure-text">{{ text }}</text>
13
+
14
+ <view
15
+ class="popover"
16
+ :class="showPopover ? 'show' : 'hidden'"
17
+ :style="{ left: popoverLeft + 'px', top: popoverTop + 'px' }"
18
+ :animation="animationData"
19
+ >
20
+ <view class="popover-content">
21
+ {{ text }}
22
+ </view>
23
+ <view class="popover-arrow" :style="{ left: arrowLeft + '%' }"></view>
24
+ </view>
25
+ </view>
26
+ </template>
27
+
28
+ <script>
29
+ import utils from '../../utils/utils.js';
30
+ const DURATION = 200;
31
+ const ANIMATION_PROP = { duration: DURATION, timingFunction: 'ease-out' };
32
+ export default {
33
+ props: {
34
+ text: {
35
+ type: [String, null],
36
+ default: '',
37
+ },
38
+ },
39
+ data() {
40
+ return {
41
+ pressTimer: null,
42
+ showPopover: false,
43
+ popoverLeft: 0,
44
+ popoverTop: 0,
45
+ arrowLeft: 50, // 箭头的左边距百分比
46
+ isTextOverflow: false,
47
+ animationData: null,
48
+ };
49
+ },
50
+ mounted() {
51
+ this.$nextTick(() => {
52
+ this.checkTextOverflow();
53
+ });
54
+ },
55
+ watch: {
56
+ text() {
57
+ this.checkTextOverflow();
58
+ },
59
+ },
60
+ methods: {
61
+ async checkTextOverflow() {
62
+ const containerData = await utils.querySelector('.ellipsis-box', this);
63
+ let textData = await utils.querySelector('.measure-text', this);
64
+
65
+ if (containerData && textData) {
66
+ this.isTextOverflow = textData.width > containerData.width;
67
+ }
68
+ },
69
+ handleTouchStart(e) {
70
+ if (!this.isTextOverflow) return;
71
+
72
+ this.pressTimer = setTimeout(() => {
73
+ this.showPopover = true;
74
+ this.$nextTick(() => {
75
+ this.updatePopoverPosition();
76
+ });
77
+ }, 100);
78
+ // #ifdef WEB
79
+ window.addEventListener('mouseup', this.doHide);
80
+ // #endif
81
+ },
82
+ async updatePopoverPosition() {
83
+ const containerData = await utils.querySelector('.ellipsis-box', this);
84
+ const popoverData = await utils.querySelector('.popover', this);
85
+ if (!containerData || !popoverData) return;
86
+
87
+ const systemInfo = utils.System;
88
+ const MARGIN = 10; // 间隔像素,避免贴边或者贴着弹出元素
89
+
90
+ // 计算文本框中心点
91
+ const boxCenter = containerData.left + containerData.width / 2;
92
+
93
+ // 计算 popover 的位置
94
+ let left = boxCenter - popoverData.width / 2;
95
+
96
+ // 确保 popover 不超出屏幕左边
97
+ if (left < MARGIN) {
98
+ left = MARGIN;
99
+ }
100
+
101
+ // 确保 popover 不超出屏幕右边
102
+ if (left + popoverData.width > systemInfo.getWindowWidth() - MARGIN) {
103
+ left = systemInfo.getWindowWidth() - popoverData.width - MARGIN;
104
+ }
105
+
106
+ // 计算箭头位置(相对于 popover 的百分比)
107
+ const arrowLeft = ((boxCenter - left) / popoverData.width) * 100;
108
+ this.popoverLeft = left;
109
+ this.popoverTop = containerData.top - popoverData.height - (MARGIN + 5);
110
+
111
+ this.arrowLeft = Math.max(10, Math.min(90, arrowLeft)); // 限制箭头在 10% 到 90% 之间
112
+ this.doShow();
113
+ },
114
+
115
+ handleTouchEnd() {
116
+ this.doHide();
117
+ },
118
+
119
+ doShow() {
120
+ this.$nextTick(() => {
121
+ let animation = uni.createAnimation(ANIMATION_PROP);
122
+ animation.opacity(1).step();
123
+ this.animationData = animation.export();
124
+ });
125
+ },
126
+ doHide() {
127
+ if (this.pressTimer) {
128
+ clearTimeout(this.pressTimer);
129
+ this.pressTimer = null;
130
+ }
131
+ let animation = uni.createAnimation(ANIMATION_PROP);
132
+ animation.opacity(0).step();
133
+ this.animationData = animation.export();
134
+ setTimeout(() => {
135
+ this.showPopover = false;
136
+ }, DURATION);
137
+ // #ifdef WEB
138
+ window.removeEventListener('mouseup', this.doHide);
139
+ // #endif
140
+ },
141
+ },
142
+ };
143
+ </script>
144
+
145
+ <style lang="scss" scoped>
146
+ .wrapper {
147
+ position: relative;
148
+ }
149
+
150
+ .ellipsis-box {
151
+ white-space: nowrap;
152
+ overflow: hidden;
153
+ text-overflow: ellipsis;
154
+ // #ifdef H5
155
+ user-select: none;
156
+ // #endif
157
+ }
158
+
159
+ .measure-text {
160
+ position: fixed;
161
+ left: -9999px;
162
+ top: -9999px;
163
+ white-space: nowrap;
164
+ visibility: hidden;
165
+ }
166
+
167
+ .popover {
168
+ position: fixed;
169
+ z-index: 999;
170
+ pointer-events: none;
171
+ opacity: 0;
172
+ &.show {
173
+ display: block;
174
+ }
175
+
176
+ &.hidden {
177
+ display: none;
178
+ }
179
+ }
180
+
181
+ .popover-content {
182
+ background-color: rgba(0, 0, 0, 0.8);
183
+ color: white;
184
+ padding: 8px 12px;
185
+ border-radius: 4px;
186
+ font-size: 14px;
187
+ line-height: 1.4;
188
+ word-break: break-word;
189
+ white-space: normal;
190
+ max-width: 60vw;
191
+ text-align: left;
192
+ }
193
+
194
+ .popover-arrow {
195
+ position: absolute;
196
+ bottom: -6px;
197
+ transform: translateX(-50%);
198
+ width: 0;
199
+ height: 0;
200
+ border-left: 6px solid transparent;
201
+ border-right: 6px solid transparent;
202
+ border-top: 6px solid rgba(0, 0, 0, 0.8);
203
+ }
204
+ </style>
@@ -0,0 +1 @@
1
+ $default-border: 2rpx solid #ebebeb;
@@ -0,0 +1,475 @@
1
+ # Tabs 标签页
2
+ 标签页组件,集成了常见标签页所需功能。
3
+
4
+ ---$
5
+
6
+ ### 代码演示
7
+ **JavaScript**后面的演示代码中涉及到的变量和方法都使用本javasaript代码
8
+ ```javascript
9
+ export default {
10
+ data() {
11
+ return {
12
+ list1: [
13
+ {
14
+ title: '标签1',
15
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
16
+ content: 'https://image.whzb.com/chain/StellarUI/image/img1.jpg',
17
+ },
18
+ {
19
+ title: '标签2',
20
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
21
+ content: 'https://image.whzb.com/chain/StellarUI/image/img2.jfif',
22
+ },
23
+ {
24
+ title: '标签3标签3标签3标签3',
25
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
26
+ content: 'https://image.whzb.com/chain/StellarUI/image/img3.jpg',
27
+ },
28
+ {
29
+ title: '标签4',
30
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
31
+ content: 'https://image.whzb.com/chain/StellarUI/image/img4.jpg',
32
+ },
33
+ ],
34
+ };
35
+ },
36
+ computed: {
37
+ list2() {
38
+ return [].concat(this.list1, [
39
+ {
40
+ title: '标签5',
41
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
42
+ content: 'https://image.whzb.com/chain/StellarUI/image/img5.jfif',
43
+ },
44
+ {
45
+ title: '标签6',
46
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
47
+ content: 'https://image.whzb.com/chain/StellarUI/image/img6.jfif',
48
+ },
49
+ {
50
+ title: '标签7',
51
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
52
+ content: 'https://image.whzb.com/chain/StellarUI/image/img7.jfif',
53
+ },
54
+ {
55
+ title: '标签8',
56
+ image: `https://image.whzb.com/chain/StellarUI/图片.jpg`,
57
+ content: 'https://image.whzb.com/chain/StellarUI/image/img8.jfif',
58
+ },
59
+ ]);
60
+ },
61
+ },
62
+ };
63
+ ```
64
+ #### 基础用法
65
+ - 外层使用`ste-tabs`父标签包裹
66
+ - `divideNum`表示自动一屏均分标签最大数量,默认值为`4`,当子标签数量大于该值时,则根据实际宽度自动排列
67
+ - `active`表示当前激活的选项,默认值`0`,支持`sync`双向绑定;当类型为`Number`时绑定子元素的`index`属性,当类型为`String`时,绑定子元素的`name`属性
68
+ - `ste-tabs`标签设置`tabWidth`属性可设置每一项标签的宽度
69
+ - `ellipsis`属性开启时可当文本长度大于标签宽度时会显示省略号
70
+ - 内层使用`ste-tab`子标签描述每一个标签页
71
+ - `title`属性设置标签主标题
72
+ - `index`或`name`设置标签唯一值,与父元素的`active`绑定
73
+
74
+
75
+ ```html
76
+ <!-- 标签数量小于或等于divideNum时,标签宽度均分 -->
77
+ <ste-tabs>
78
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" :index="index">
79
+ <view>{{ item.title }}内容</view>
80
+ <image style="width: 100%; height: 300px" :src="item.content" />
81
+ </ste-tab>
82
+ </ste-tabs>
83
+ <!-- 子元素数量大于divideNum时,自动排列 -->
84
+ <ste-tabs>
85
+ <ste-tab v-for="(item, index) in list2" :key="index" :title="item.title" :index="index">
86
+ <view>{{ item.title }}内容</view>
87
+ <image style="width: 100%; height: 300px" :src="item.content" />
88
+ </ste-tab>
89
+ </ste-tabs>
90
+ <!-- 统一标签宽度 -->
91
+ <ste-tabs tabWidth="180">
92
+ <ste-tab v-for="(item, index) in list2" :key="index" :title="item.title" :index="index">
93
+ <view>{{ item.title }}内容</view>
94
+ <image style="width: 100%; height: 300px" :src="item.content" />
95
+ </ste-tab>
96
+ </ste-tabs>
97
+ <!-- 超出显示省略号 -->
98
+ <ste-tabs tabWidth="180" ellipsis>
99
+ <ste-tab v-for="(item, index) in list2" :key="index" :title="item.title" :index="index">
100
+ <view>{{ item.title }}内容</view>
101
+ <image style="width: 100%; height: 300px" :src="item.content" />
102
+ </ste-tab>
103
+ </ste-tabs>
104
+ ```
105
+
106
+ #### 吸顶
107
+ - `ste-tabs`标签设置`sticky`属性可让标签自动吸顶
108
+ ```html
109
+ <ste-tabs showSubtitle sticky>
110
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" subTitle="子标题" :index="index">
111
+ <view>{{ item.title }}内容</view>
112
+ <image style="width: 100%; height: 300px" :src="item.content" />
113
+ </ste-tab>
114
+ </ste-tabs>
115
+ ```
116
+ #### 图片和子标题
117
+ - `ste-tabs`标签
118
+ - 设置`showSubtitle`属性可以开启子标题显示,开启子标题显示时,下划线会自动隐藏
119
+ - 设置`showImage`属性可以开启图片显示
120
+ - `imageBorderWidth`属性可以设置激活选项图片的边框宽度,设置为`0`时不展示
121
+ - `ste-tab`标签
122
+ - `subTitle`属性设置每一项的子标题内容,长度不得大于`6`,大于`6`时会被强制截断
123
+ - `image`属性设置每一项的图片链接,同原生`image`的`src`属性
124
+ - `imageWidth`和`imageHeight`属性可以自定义图片大小,`imageRadius`属性可以自定义标签圆角弧度
125
+ ```html
126
+ <!-- 当显示子标题时,下划线会自动隐藏 -->
127
+ <ste-tabs showSubtitle>
128
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" subTitle="子标题" :index="index">
129
+ <view>{{ item.title }}内容</view>
130
+ <image style="width: 100%; height: 300px" :src="item.content" />
131
+ </ste-tab>
132
+ </ste-tabs>
133
+ <!-- 展示图片主标题和子标题 -->
134
+ <ste-tabs showSubtitle showImage>
135
+ <ste-tab
136
+ v-for="(item, index) in list1"
137
+ :key="index"
138
+ :image="item.image"
139
+ :title="item.title"
140
+ subTitle="子标题"
141
+ :index="index"
142
+ >
143
+ <view>{{ item.title }}内容</view>
144
+ <image style="width: 100%; height: 300px" :src="item.content" />
145
+ </ste-tab>
146
+ </ste-tabs>
147
+ <!-- 隐藏主标题,展示图片主标题和子标题,图片边框隐藏 -->
148
+ <ste-tabs showSubtitle showImage :showTitle="false" imageBorderWidth="0">
149
+ <ste-tab v-for="(item, index) in list1" :key="index" :image="item.image" subTitle="子标题" :index="index">
150
+ <view>{{ item.title }}内容</view>
151
+ <image style="width: 100%; height: 300px" :src="item.content" />
152
+ </ste-tab>
153
+ </ste-tabs>
154
+ <!-- 图片大小和圆角 -->
155
+ <ste-tabs showSubtitle showImage :showTitle="false" imageWidth="200" imageHeight="90" imageRadius="18">
156
+ <ste-tab v-for="(item, index) in list2" :key="index" :image="item.image" subTitle="子标题" :index="index">
157
+ <view>{{ item.title }}内容</view>
158
+ <image style="width: 100%; height: 300px" :src="item.content" />
159
+ </ste-tab>
160
+ </ste-tabs>
161
+ ```
162
+ #### 下拉选项
163
+ - 开启下拉选项,当标签数量小于`divideNum`时不生效
164
+ - `ste-tabs`标签
165
+ - `pullDown`属性可以开启下拉选项卡
166
+ - `maskLeft`、`maskRight`、`maskBottom`、`maskTop`属性可以设置开启下拉选项时,背景蒙层的位置
167
+ ```html
168
+ <ste-tabs pullDown :showTitle="false" showImage showSubtitle tabWidth="180" tabPadding="12">
169
+ <ste-tab v-for="(item, index) in list2" :key="index" :image="item.image" subTitle="子标题" :index="index">
170
+ <view>{{ item.title }}内容</view>
171
+ <image style="width: 100%; height: 300px" :src="item.content" />
172
+ </ste-tab>
173
+ </ste-tabs>
174
+ <!-- -->
175
+ <ste-tabs
176
+ pullDown
177
+ :showTitle="false"
178
+ showImage
179
+ showSubtitle
180
+ tabWidth="180"
181
+ tabPadding="12"
182
+ maskLeft="30"
183
+ maskRight="30"
184
+ maskBottom="120"
185
+ maskTop="180"
186
+ >
187
+ <ste-tab v-for="(item, index) in list2" :key="index" :image="item.image" subTitle="子标题" :index="index">
188
+ <view>{{ item.title }}内容</view>
189
+ <image style="width: 100%; height: 300px" :src="item.content" />
190
+ </ste-tab>
191
+ </ste-tabs>
192
+ ```
193
+ #### 颜色
194
+ - 除背景外的其他颜色只支持`16进制`、`rgb`或者`rgba`格式
195
+ - `ste-tabs`标签
196
+ - `color`属性可以修改主题颜色,包括(滑块颜色,边框颜色,选中图片边框颜色,选中的背景色,激活下拉列表中选项颜色),默认值#0090FF
197
+ - `background`属性可以设置标签栏背景,支持图片和颜色
198
+ - `titleColor`设置主标题默认字体颜色
199
+ - `activeTitleColor`设置主标题激活状态下的字体颜色
200
+ - `subColor`设置子标题默认颜色
201
+ - `activeSubColor`设置子标题激活状态下的字体颜色
202
+ ```html
203
+ <!-- 主题和背景 -->
204
+ <ste-tabs pullDown showImage showSubtitle tabWidth="180" tabPadding="12" color="#f00" background="#ffa">
205
+ <ste-tab
206
+ v-for="(item, index) in list2"
207
+ :key="index"
208
+ :title="item.title"
209
+ :image="item.image"
210
+ subTitle="子标题"
211
+ :index="index"
212
+ >
213
+ <view>{{ item.title }}内容</view>
214
+ <image style="width: 100%; height: 300px" :src="item.content" />
215
+ </ste-tab>
216
+ </ste-tabs>
217
+ <!-- 主标题字体颜色 -->
218
+ <ste-tabs pullDown titleColor="#f90" activeTitleColor="#09f">
219
+ <ste-tab v-for="(item, index) in list2" :key="index" :title="item.title" :index="index">
220
+ <view>{{ item.title }}内容</view>
221
+ <image style="width: 100%; height: 300px" :src="item.content" />
222
+ </ste-tab>
223
+ </ste-tabs>
224
+ <!-- 子标题字体颜色 -->
225
+ <ste-tabs pullDown showSubtitle subColor="#09f" activeSubColor="#f90" tabWidth="180" tabPadding="12">
226
+ <ste-tab v-for="(item, index) in list2" :key="index" :title="item.title" subTitle="子标题" :index="index">
227
+ <view>{{ item.title }}内容</view>
228
+ <image style="width: 100%; height: 300px" :src="item.content" />
229
+ </ste-tab>
230
+ </ste-tabs>
231
+ ```
232
+ #### 手势切换
233
+ - `ste-tabs`标签设置`swipeable`属性可开启手势切换
234
+ ```html
235
+ <ste-tabs showSubtitle swipeable>
236
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" subTitle="子标题" :index="index">
237
+ <view>{{ item.title }}内容</view>
238
+ <image style="width: 100%; height: 300px" :src="item.content" />
239
+ </ste-tab>
240
+ </ste-tabs>
241
+ ```
242
+ #### 卡片模式
243
+ - `ste-tabs`标签
244
+ - `type`等于`card`时开启卡片模式
245
+ - 设置`border`属性可以为卡片加边框(只在卡片模式下生效)
246
+ ```html
247
+ <!-- 开启卡片模式 -->
248
+ <ste-tabs swipeable type="card">
249
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" :index="index">
250
+ <view>{{ item.title }}内容</view>
251
+ <image style="width: 100%; height: 300px" :src="item.content" />
252
+ </ste-tab>
253
+ </ste-tabs>
254
+ <!-- 带边框 -->
255
+ <ste-tabs swipeable type="card" border>
256
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" :index="index">
257
+ <view>{{ item.title }}内容</view>
258
+ <image style="width: 100%; height: 300px" :src="item.content" />
259
+ </ste-tab>
260
+ </ste-tabs>
261
+ ```
262
+ #### 间距
263
+ - `ste-tabs`标签的`tabSpace`可以修改标签间距,默认为`0`
264
+ ```html
265
+ <ste-tabs swipeable type="card" tabSpace="12">
266
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" :index="index">
267
+ <view>{{ item.title }}内容</view>
268
+ <image style="width: 100%; height: 300px" :src="item.content" />
269
+ </ste-tab>
270
+ </ste-tabs>
271
+ ```
272
+
273
+ #### 分割线
274
+ - `ste-tabs`标签设置`showGapLine`时在子项之间展示分割线
275
+ ```html
276
+ <!-- 线性模式下展示分割线 -->
277
+ <ste-tabs swipeable showGapLine>
278
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" :index="index">
279
+ <view>{{ item.title }}内容</view>
280
+ <image style="width: 100%; height: 300px" :src="item.content" />
281
+ </ste-tab>
282
+ </ste-tabs>
283
+ <!-- 显示子标题样式 -->
284
+ <ste-tabs swipeable showGapLine showSubtitle>
285
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" subTitle="子标题" :index="index">
286
+ <view>{{ item.title }}内容</view>
287
+ <image style="width: 100%; height: 300px" :src="item.content" />
288
+ </ste-tab>
289
+ </ste-tabs>
290
+ <!-- 卡片模式下展示分割线 -->
291
+ <ste-tabs type="card" swipeable showGapLine tabSpace="14">
292
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" :index="index">
293
+ <view>{{ item.title }}内容</view>
294
+ <image style="width: 100%; height: 300px" :src="item.content" />
295
+ </ste-tab>
296
+ </ste-tabs>
297
+ ```
298
+
299
+
300
+ #### 锁定和禁用
301
+ - `ste-tabs`标签
302
+ - `lock`可以锁定标签栏不让操作,样式不变
303
+ - `disabled`可以禁用全部标签栏不让操作,标签栏变成灰色
304
+ - `ste-tab`标签
305
+ - `disabled`可以禁用当前标签页不让操作,当前标签变成灰色
306
+ ```html
307
+ <!-- 锁定 -->
308
+ <ste-tabs swipeable showGapLine showSubtitle lock>
309
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" subTitle="子标题" :index="index">
310
+ <view>{{ item.title }}内容</view>
311
+ <image style="width: 100%; height: 300px" :src="item.content" />
312
+ </ste-tab>
313
+ </ste-tabs>
314
+ <!-- 全局禁用 -->
315
+ <ste-tabs swipeable showGapLine showSubtitle disabled>
316
+ <ste-tab v-for="(item, index) in list1" :key="index" :title="item.title" subTitle="子标题" :index="index">
317
+ <view>{{ item.title }}内容</view>
318
+ <image style="width: 100%; height: 300px" :src="item.content" />
319
+ </ste-tab>
320
+ </ste-tabs>
321
+ <!-- 单项禁用 -->
322
+ <ste-tabs swipeable showGapLine showSubtitle>
323
+ <ste-tab
324
+ v-for="(item, index) in list1"
325
+ :key="index"
326
+ :title="item.title"
327
+ subTitle="子标题"
328
+ :index="index"
329
+ :disabled="index === 1"
330
+ >
331
+ <view>{{ item.title }}内容</view>
332
+ <image style="width: 100%; height: 300px" :src="item.content" />
333
+ </ste-tab>
334
+ </ste-tabs>
335
+ ```
336
+ #### 徽标
337
+ - `ste-tab`标签
338
+ - `showDot`右上角是否展示小红点
339
+ - `badge`右上角徽标的内容
340
+ - `showZeroBadge`当 badge 为数字 0 时,是否展示徽标
341
+ ```html
342
+ <ste-tabs swipeable showGapLine showSubtitle>
343
+ <ste-tab
344
+ v-for="(item, index) in list1"
345
+ :key="index"
346
+ :title="item.title"
347
+ :badge="index"
348
+ subTitle="子标题"
349
+ :index="index"
350
+ >
351
+ <view>{{ item.title }}内容</view>
352
+ <image style="width: 100%; height: 300px" :src="item.content" />
353
+ </ste-tab>
354
+ </ste-tabs>
355
+ ```
356
+
357
+ #### 异形
358
+ - `ste-tabs`标签
359
+ - `showSubtitle`显示子标题
360
+ - `showTitle` = `false`隐藏主标题
361
+ - `background`调整标签栏背景
362
+ - `subColor`调整子标题颜色
363
+ - `activeSubColor`调整选中子标题颜色
364
+ - `color`调整主题色(子标签背景色)
365
+ - `tabPadding`调整标签内边距
366
+ - `subTitleHeight`调整子标题高度
367
+ - `showLine` = `false`隐藏下划线
368
+ - `radius`调整标签栏圆角
369
+ - `subTitleRadius`调整子标题圆角
370
+ ```html
371
+ <ste-tabs
372
+ showSubtitle
373
+ :showTitle="false"
374
+ background="#0090FF"
375
+ subColor="#fff"
376
+ activeSubColor="#0090FF"
377
+ color="#fff"
378
+ tabPadding="6"
379
+ subTitleHeight="66"
380
+ :showLine="false"
381
+ radius="45"
382
+ subTitleRadius="33"
383
+ >
384
+ <ste-tab v-for="(item, index) in list1" :key="index" :subTitle="item.title" :index="index">
385
+ <view>{{ item.title }}内容</view>
386
+ <image style="width: 100%; height: 300px" :src="item.content" />
387
+ </ste-tab>
388
+ </ste-tabs>
389
+ ```
390
+
391
+ ### API
392
+ #### Tabs Props
393
+ 背景之外的颜色属性只支持`16进制`、`RGB`、`RGBA`格式
394
+ | 属性名 | 说明 | 类型 | 默认值 | 可选值 | 支持版本 |
395
+ | ----- | ----- | ----- | ----- | ----- | ----- |
396
+ | `active` | 当前激活的选项,支持sync双向绑定 (类型为number时tab绑定index,类型为string时tab绑定name) | `String`/`Number` | `0` | - | - |
397
+ | `type` | 样式风格类型 | `String` | `"line"` | `"line"`线性模式<br/>`"card"`卡片模式 | - |
398
+ | `color` | 主题色(滑块颜色,边框颜色,选中的背景色,激活下拉列表中选项颜色) | `String` | `#0090FF` | - | - |
399
+ | `radius` | 标签栏圆角 (单位rpx) | `String`/`Number` | `0` | - | - |
400
+ | `background` | 标签栏背景 | `String` | `""` | - | - |
401
+ | `showImage` | 是否显示图片 | `Boolean` | `false` | - | - |
402
+ | `showTitle` | 是否显示标题 | `Boolean` | `true` | - | - |
403
+ | `titleHeight` | 主标题高度 (单位rpx) | `String`/`Number` | `48` | - | - |
404
+ | `showSubtitle` | 是否显示子标题 | `Boolean` | `false` | - | - |
405
+ | `duration` | 切换动画时长 (单位秒) | `Number` | `0.3` | - | - |
406
+ | `showLine` | 底部条是否展示 (显示副标题时无法展示) | `Boolean` | `true` | - | - |
407
+ | `lineWidth` | 底部条宽度 (单位rpx) | `String`/`Number` | `52` | - | - |
408
+ | `lineHeight` | 底部条高度 (单位rpx) | `String`/`Number` | `6` | - | - |
409
+ | `border` | 是否显示边框 (仅在card模式下生效) | `Boolean` | `false` | - | - |
410
+ | `ellipsis` | 是否开启选项文本超长省略 | `Boolean` | `false` | - | - |
411
+ | `tabWidth` | 选项宽度 (单位rpx) | `String`/`Number` | `"auto"` | - | - |
412
+ | `tabPadding` | 选项内边距,单位rpx | `String`/`Number` | `24` | - | - |
413
+ | `tabSpace` | 选项间距 (单位rpx) | `String`/`Number` | `0` | - | - |
414
+ | `divideNum` | 标签栏均分最大数量 (设置0则不均分) | `Number` | `4` | - | - |
415
+ | `sticky` | 是否开启吸顶 | `Boolean` | `false` | - | - |
416
+ | `offsetTop` | 吸顶距离 (单位rpx) | `String`/`Number` | `0` | - | - |
417
+ | `swipeable` | 是否开启手势滑动切换 | `Boolean` | `false` | - | - |
418
+ | `titleColor` | 主标题字体颜色和下拉列表中主标题颜色 | `String` | `"#000000"` | - | - |
419
+ | `activeTitleColor`| 激活主标题字体颜色 | `String` | `"#000000"` | - | - |
420
+ | `subColor` | 子标题字体颜色和下拉列表中子标题颜色 | `String` | `"#000000"` | - | - |
421
+ | `activeSubColor` | 激活子标题字体颜色和下拉列表中子标题激活颜色 | `String` | `"#ffffff"` | - | - |
422
+ | `subTitleHeight` | 子标题高度 (单位rpx) | `String`/`Number` | `42` | - | - |
423
+ | `subTitleRadius` | 子标题圆角 (单位rpx) | `String`/`Number` | `21` | - | - |
424
+ | `imageWidth` | 图片宽度 | `String`/`Number` | `80` | - | - |
425
+ | `imageHeight` | 图片高度 | `String`/`Number` | `80` | - | - |
426
+ | `imageRadius` | 图片圆角 | `String`/`Number` | `50%` | - | - |
427
+ | `imageBorderWidth`| 选中图片边框宽度 | `String`/`Number` | `4` | - | - |
428
+ | `showGapLine` | 是否显示分割线 | `Boolean` | `false` | - | - |
429
+ | `lock` | 是否锁定(无法切换) | `Boolean` | `false` | - | - |
430
+ | `disabled` | 是否禁用(全部功能失效并且置灰) | `Boolean` | `false` | - | - |
431
+ | `pullDown` | 是否有下拉选项(当选项数量大于均分数量时生效) | `Boolean` | `false` | - | - |
432
+ | `placeholder` | 下拉占位符 | `String` | `"请选择"` | - | - |
433
+ | `maskTop` | 下拉蒙层顶部距离 | `String`/`Number` | `0` | - | - |
434
+ | `maskRight` | 下拉蒙层右侧距离 | `String`/`Number` | `0` | - | - |
435
+ | `maskBottom` | 下拉蒙层底部距离 | `String`/`Number` | `0` | - | - |
436
+ | `maskLeft` | 下拉蒙层左侧距离 | `String`/`Number` | `0` | - | - |
437
+ | `maskZindex` | 下拉蒙层层级 | `Number` | `1001` | - | - |
438
+
439
+ #### Tabs Events
440
+ 您可以通过监听`change`事件,事件参数为用户选中标签项的`props`对象,您可以监听该事件获取当前选中的标签。
441
+ |事件名 |说明 |事件参数 |支持版本 |
442
+ | --- | --- | --- | --- |
443
+ | `click-tab` | 监听tab点击事件,不受`disabled`和`lock`属性影响 | {...tab,index}| - |
444
+ | `change` | 监听tab切换 | {...tab,index}| - |
445
+
446
+ #### Tabs Slot
447
+ |插槽名 |说明 |插槽参数 |支持版本 |
448
+ | --- | --- | --- | --- |
449
+ | `default` | 默认插槽,请传入`ste-tab`标签列表 | - | - |
450
+
451
+ #### Tabs Method
452
+ |插槽名 |说明 |插槽参数 |支持版本 |
453
+ | --- | --- | --- | --- |
454
+ | `init`| 数据加载完成后调用 | - | `v1.13.0` |
455
+
456
+ #### Tab Props
457
+ | 属性名 | 说明 | 类型 | 默认值 | 可选值 |支持版本 |
458
+ | ----- | ----- | ----- | ----- | ----- | ----- |
459
+ | `title` | 标题 | `String` | - | - | - |
460
+ | `subTitle` | 子标题 | `String` | - | - | - |
461
+ | `image` | 图片(同image的src属性) | `String` | - | - | - |
462
+ | `name` | 标签唯一标识(当tabs的active值类型为string时,作为匹配激活的标识符) | `String` | - | - | - |
463
+ | `index` | 标签下标(当tabs的active值类型为number时,作为匹配激活的标识符) | `Number` | - | - | - |
464
+ | `disabled` | 禁用当前标签 | `Boolean` | `false` | - | - |
465
+ | `showDot` | 是否在主标题右上角显示小红点(隐藏主标题时无法显示) | `Boolean` | `false` | - | - |
466
+ | `badge` | 右上角徽标的内容 | `String`/`Number` | `0` | - | - |
467
+ | `showZeroBadge` | 当 badge 为数字 0 时,是否展示徽标 | `Boolean` | `false` | - | - |
468
+
469
+ #### Tab Slot
470
+ |插槽名 |说明 |插槽参数 |支持版本 |
471
+ | --- | --- | --- | --- |
472
+ | `default` | 默认插槽,在插槽中的内容会展示在标签内容区域 | - | - |
473
+
474
+
475
+ {{xuyajun}}