uniapp-dyckui 4.1.1

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 (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/assets/style.BFlsbpSj.css +1472 -0
  4. package/dist/index.cjs.js +1380 -0
  5. package/dist/index.cjs.js.map +1 -0
  6. package/dist/index.es.js +1380 -0
  7. package/dist/index.es.js.map +1 -0
  8. package/dist/src/components/MyComs/Button/index.d.ts +3 -0
  9. package/dist/src/components/MyComs/Button/index.vue.d.ts +93 -0
  10. package/dist/src/components/MyComs/Dialog/index.d.ts +3 -0
  11. package/dist/src/components/MyComs/Dialog/index.vue.d.ts +65 -0
  12. package/dist/src/components/MyComs/Divider/index.d.ts +3 -0
  13. package/dist/src/components/MyComs/Divider/index.vue.d.ts +53 -0
  14. package/dist/src/components/MyComs/DropdownSelect/dropdownSelect.d.ts +10 -0
  15. package/dist/src/components/MyComs/DropdownSelect/index.d.ts +4 -0
  16. package/dist/src/components/MyComs/DropdownSelect/index.vue.d.ts +26 -0
  17. package/dist/src/components/MyComs/DropdownSelect/type.d.ts +13 -0
  18. package/dist/src/components/MyComs/DropdownWithBadge/dropdownWithBadge.d.ts +5 -0
  19. package/dist/src/components/MyComs/DropdownWithBadge/index.d.ts +4 -0
  20. package/dist/src/components/MyComs/DropdownWithBadge/index.vue.d.ts +26 -0
  21. package/dist/src/components/MyComs/DropdownWithBadge/type.d.ts +9 -0
  22. package/dist/src/components/MyComs/FilterDrawer/hasBadge.d.ts +8 -0
  23. package/dist/src/components/MyComs/FilterDrawer/index.d.ts +5 -0
  24. package/dist/src/components/MyComs/FilterDrawer/index.vue.d.ts +26 -0
  25. package/dist/src/components/MyComs/FilterDrawer/type.d.ts +8 -0
  26. package/dist/src/components/MyComs/FilterDrawer/useFilterDrawer.d.ts +10 -0
  27. package/dist/src/components/MyComs/InfiniteScroll/index.d.ts +3 -0
  28. package/dist/src/components/MyComs/InfiniteScroll/index.vue.d.ts +65 -0
  29. package/dist/src/components/MyComs/Popup/index.d.ts +3 -0
  30. package/dist/src/components/MyComs/Popup/index.vue.d.ts +119 -0
  31. package/dist/src/components/MyComs/PullRefresh/index.d.ts +3 -0
  32. package/dist/src/components/MyComs/PullRefresh/index.vue.d.ts +117 -0
  33. package/dist/src/components/MyComs/Swiper/index.d.ts +3 -0
  34. package/dist/src/components/MyComs/Swiper/index.vue.d.ts +79 -0
  35. package/dist/src/components/MyComs/Toast/index.d.ts +3 -0
  36. package/dist/src/components/MyComs/Toast/index.vue.d.ts +108 -0
  37. package/dist/src/components/MyComs/index.d.ts +20 -0
  38. package/package.json +218 -0
  39. package/src/components/MyComs/Button/README.md +235 -0
  40. package/src/components/MyComs/Button/index.ts +3 -0
  41. package/src/components/MyComs/Button/index.vue +413 -0
  42. package/src/components/MyComs/Dialog/README.md +160 -0
  43. package/src/components/MyComs/Dialog/index.ts +2 -0
  44. package/src/components/MyComs/Dialog/index.vue +275 -0
  45. package/src/components/MyComs/Divider/README.md +0 -0
  46. package/src/components/MyComs/Divider/index.ts +2 -0
  47. package/src/components/MyComs/Divider/index.vue +106 -0
  48. package/src/components/MyComs/DropdownSelect/README.md +112 -0
  49. package/src/components/MyComs/DropdownSelect/dropdownSelect.less +75 -0
  50. package/src/components/MyComs/DropdownSelect/dropdownSelect.ts +59 -0
  51. package/src/components/MyComs/DropdownSelect/index.ts +4 -0
  52. package/src/components/MyComs/DropdownSelect/index.vue +88 -0
  53. package/src/components/MyComs/DropdownSelect/type.ts +15 -0
  54. package/src/components/MyComs/DropdownWithBadge/README.md +77 -0
  55. package/src/components/MyComs/DropdownWithBadge/dropdownWithBadge.less +11 -0
  56. package/src/components/MyComs/DropdownWithBadge/dropdownWithBadge.ts +10 -0
  57. package/src/components/MyComs/DropdownWithBadge/index.ts +4 -0
  58. package/src/components/MyComs/DropdownWithBadge/index.vue +39 -0
  59. package/src/components/MyComs/DropdownWithBadge/type.ts +12 -0
  60. package/src/components/MyComs/FilterDrawer/filterDrawer.less +117 -0
  61. package/src/components/MyComs/FilterDrawer/hasBadge.ts +41 -0
  62. package/src/components/MyComs/FilterDrawer/index.ts +5 -0
  63. package/src/components/MyComs/FilterDrawer/index.vue +53 -0
  64. package/src/components/MyComs/FilterDrawer/type.ts +9 -0
  65. package/src/components/MyComs/FilterDrawer/useFilterDrawer.ts +38 -0
  66. package/src/components/MyComs/InfiniteScroll/index.ts +2 -0
  67. package/src/components/MyComs/InfiniteScroll/index.vue +171 -0
  68. package/src/components/MyComs/Popup/README.md +684 -0
  69. package/src/components/MyComs/Popup/index.ts +2 -0
  70. package/src/components/MyComs/Popup/index.vue +835 -0
  71. package/src/components/MyComs/PullRefresh/README.md +600 -0
  72. package/src/components/MyComs/PullRefresh/index.ts +2 -0
  73. package/src/components/MyComs/PullRefresh/index.vue +599 -0
  74. package/src/components/MyComs/Swiper/README.md +202 -0
  75. package/src/components/MyComs/Swiper/index.ts +2 -0
  76. package/src/components/MyComs/Swiper/index.vue +245 -0
  77. package/src/components/MyComs/Toast/README.md +604 -0
  78. package/src/components/MyComs/Toast/index.ts +2 -0
  79. package/src/components/MyComs/Toast/index.vue +372 -0
  80. package/src/components/MyComs/index.ts +33 -0
@@ -0,0 +1,202 @@
1
+ # Swiper 轮播图组件
2
+
3
+ 一个基于 Vue 3 + TypeScript 开发的轮播图组件,支持自动轮播、手动切换、指示器、箭头导航等功能,提供丰富的配置选项。
4
+
5
+ ## 基本用法
6
+
7
+ ### 引入组件
8
+
9
+ ```vue
10
+ <script setup>
11
+ import Swiper from '@/components/MyComs/Swiper/index.vue'
12
+ </script>
13
+ ```
14
+
15
+ ### 基础使用
16
+
17
+ ```vue
18
+ <template>
19
+ <Swiper :items="imageItems">
20
+ <template #default="{ item }">
21
+ <img :src="item.image" :alt="item.title" class="swiper-image" />
22
+ </template>
23
+ </Swiper>
24
+ </template>
25
+
26
+ <script setup>
27
+ import { ref } from 'vue'
28
+ import Swiper from '@/components/MyComs/Swiper/index.vue'
29
+
30
+ const imageItems = ref([
31
+ { image: 'https://picsum.photos/id/237/800/400', title: '图片1' },
32
+ { image: 'https://picsum.photos/id/1040/800/400', title: '图片2' },
33
+ { image: 'https://picsum.photos/id/1043/800/400', title: '图片3' }
34
+ ])
35
+ </script>
36
+
37
+ <style scoped>
38
+ .swiper-image {
39
+ width: 100%;
40
+ height: 300px;
41
+ object-fit: cover;
42
+ }
43
+ </style>
44
+ ```
45
+
46
+ ## API
47
+
48
+ ### Props
49
+
50
+ | 参数名 | 类型 | 默认值 | 说明 |
51
+ | --- | --- | --- | --- |
52
+ | items | `any[]` | `[]` | 轮播数据数组 |
53
+ | initialIndex | `number` | `0` | 初始轮播索引 |
54
+ | autoPlay | `boolean` | `true` | 是否自动轮播 |
55
+ | interval | `number` | `3000` | 轮播间隔时间(毫秒) |
56
+ | duration | `number` | `300` | 轮播过渡时长(毫秒) |
57
+ | showIndicators | `boolean` | `true` | 是否显示指示器 |
58
+ | showArrows | `boolean` | `false` | 是否显示左右箭头 |
59
+ | loop | `boolean` | `true` | 是否循环播放 |
60
+
61
+ ### Events
62
+
63
+ | 事件名 | 说明 | 回调参数 |
64
+ | --- | --- | --- |
65
+ | change | 轮播切换时触发 | `index: number` - 当前轮播索引 |
66
+ | prev | 点击上一张时触发 | `index: number` - 当前轮播索引 |
67
+ | next | 点击下一张时触发 | `index: number` - 当前轮播索引 |
68
+
69
+ ### Slots
70
+
71
+ | 插槽名 | 说明 | 参数 |
72
+ | --- | --- | --- |
73
+ | default | 轮播项内容 | `{ item: any, index: number }` |
74
+
75
+ ## 示例
76
+
77
+ ### 禁用自动播放
78
+
79
+ ```vue
80
+ <Swiper :items="imageItems" :auto-play="false">
81
+ <!-- 内容 -->
82
+ </Swiper>
83
+ ```
84
+
85
+ ### 显示左右箭头
86
+
87
+ ```vue
88
+ <Swiper :items="imageItems" :show-arrows="true">
89
+ <!-- 内容 -->
90
+ </Swiper>
91
+ ```
92
+
93
+ ### 自定义轮播间隔
94
+
95
+ ```vue
96
+ <Swiper :items="imageItems" :interval="5000">
97
+ <!-- 内容 -->
98
+ </Swiper>
99
+ ```
100
+
101
+ ### 非循环模式
102
+
103
+ ```vue
104
+ <Swiper :items="imageItems" :loop="false">
105
+ <!-- 内容 -->
106
+ </Swiper>
107
+ ```
108
+
109
+ ### 隐藏指示器
110
+
111
+ ```vue
112
+ <Swiper :items="imageItems" :show-indicators="false">
113
+ <!-- 内容 -->
114
+ </Swiper>
115
+ ```
116
+
117
+ ### 带文字内容的轮播
118
+
119
+ ```vue
120
+ <Swiper :items="contentItems" :show-arrows="true">
121
+ <template #default="{ item }">
122
+ <div class="swiper-content">
123
+ <h3>{{ item.title }}</h3>
124
+ <p>{{ item.description }}</p>
125
+ <button>{{ item.button }}</button>
126
+ </div>
127
+ </template>
128
+ </Swiper>
129
+
130
+ <script setup>
131
+ const contentItems = ref([
132
+ {
133
+ title: '欢迎使用',
134
+ description: '这是一个功能强大的轮播图组件',
135
+ button: '了解更多'
136
+ },
137
+ {
138
+ title: '响应式设计',
139
+ description: '适配各种屏幕尺寸',
140
+ button: '查看详情'
141
+ }
142
+ ])
143
+ </script>
144
+ ```
145
+
146
+ ## 自定义样式
147
+
148
+ ### 指示器样式
149
+
150
+ 可以通过深度选择器自定义指示器样式:
151
+
152
+ ```vue
153
+ <style scoped>
154
+ .swiper-demo {
155
+ :deep(.indicator-item) {
156
+ background-color: rgba(0, 0, 0, 0.3);
157
+
158
+ &.active {
159
+ background-color: #409eff;
160
+ }
161
+ }
162
+ }
163
+ </style>
164
+ ```
165
+
166
+ ### 箭头样式
167
+
168
+ 可以通过深度选择器自定义箭头样式:
169
+
170
+ ```vue
171
+ <style scoped>
172
+ .swiper-demo {
173
+ :deep(.swiper-arrow) {
174
+ background-color: rgba(0, 0, 0, 0.5);
175
+ color: white;
176
+
177
+ &:hover {
178
+ background-color: rgba(0, 0, 0, 0.7);
179
+ }
180
+ }
181
+ }
182
+ </style>
183
+ ```
184
+
185
+ ## 注意事项
186
+
187
+ 1. 确保 `items` 参数是一个非空数组,否则轮播图不会显示内容
188
+ 2. 当 `autoPlay` 设为 `true` 时,建议 `items` 数组长度至少为 2
189
+ 3. 自定义内容时,建议为轮播项设置固定高度,以确保轮播图显示正常
190
+ 4. 在移动端使用时,建议关闭自动轮播,以提升用户体验
191
+
192
+ ## 浏览器兼容性
193
+
194
+ 支持所有现代浏览器,包括 Chrome、Firefox、Safari、Edge 等。
195
+
196
+ ## 版本历史
197
+
198
+ ### v1.0.0
199
+ - 初始版本
200
+ - 支持自动轮播、手动切换
201
+ - 支持指示器和箭头导航
202
+ - 提供丰富的配置选项
@@ -0,0 +1,2 @@
1
+ import Component from './index.vue';
2
+ export default Component;
@@ -0,0 +1,245 @@
1
+ <template>
2
+ <view class="sw-swiper">
3
+ <view
4
+ class="swiper-wrapper"
5
+ :style="{
6
+ transform: `translateX(-${currentIndex * 100}%)`,
7
+ transition: `transform ${duration}ms ease`,
8
+ }"
9
+ >
10
+ <view
11
+ v-for="(item, index) in items"
12
+ :key="index"
13
+ class="swiper-item"
14
+ >
15
+ <slot :item="item" :index="index" />
16
+ </view>
17
+ </view>
18
+
19
+ <!-- 指示器 -->
20
+ <view v-if="showIndicators" class="swiper-indicators">
21
+ <view
22
+ v-for="(item, index) in items"
23
+ :key="index"
24
+ class="indicator-item"
25
+ :class="{ active: index === currentIndex }"
26
+ @click="currentIndex = index"
27
+ />
28
+ </view>
29
+
30
+ <!-- 左右箭头 -->
31
+ <view
32
+ v-if="showArrows"
33
+ class="swiper-arrow swiper-arrow-left"
34
+ @click="prev"
35
+ />
36
+ <view
37
+ v-if="showArrows"
38
+ class="swiper-arrow swiper-arrow-right"
39
+ @click="next"
40
+ />
41
+ </view>
42
+ </template>
43
+
44
+ <script setup lang="ts">
45
+ import { onMounted, onUnmounted, ref, watch, withDefaults } from 'vue'
46
+
47
+ interface Props {
48
+ items: any[]
49
+ initialIndex?: number
50
+ autoPlay?: boolean
51
+ interval?: number
52
+ duration?: number
53
+ showIndicators?: boolean
54
+ showArrows?: boolean
55
+ loop?: boolean
56
+ }
57
+
58
+ const props = withDefaults(defineProps<Props>(), {
59
+ initialIndex: 0,
60
+ autoPlay: true,
61
+ interval: 3000,
62
+ duration: 300,
63
+ showIndicators: true,
64
+ showArrows: false,
65
+ loop: true,
66
+ })
67
+
68
+ const emit = defineEmits<{
69
+ (e: 'change', index: number): void
70
+ (e: 'prev', index: number): void
71
+ (e: 'next', index: number): void
72
+ }>()
73
+
74
+ const currentIndex = ref(props.initialIndex)
75
+ let timer: any = null
76
+
77
+ // 自动播放
78
+ function startAutoPlay() {
79
+ if (props.autoPlay && props.items.length > 1) {
80
+ timer = setInterval(() => {
81
+ next()
82
+ }, props.interval)
83
+ }
84
+ }
85
+
86
+ function stopAutoPlay() {
87
+ if (timer) {
88
+ clearInterval(timer)
89
+ timer = null
90
+ }
91
+ }
92
+
93
+ // 上一张
94
+ function prev() {
95
+ if (props.loop) {
96
+ currentIndex.value = currentIndex.value === 0 ? props.items.length - 1 : currentIndex.value - 1
97
+ }
98
+ else if (currentIndex.value > 0) {
99
+ currentIndex.value--
100
+ }
101
+ emit('prev', currentIndex.value)
102
+ emit('change', currentIndex.value)
103
+ }
104
+
105
+ // 下一张
106
+ function next() {
107
+ if (props.loop) {
108
+ currentIndex.value = currentIndex.value === props.items.length - 1 ? 0 : currentIndex.value + 1
109
+ }
110
+ else if (currentIndex.value < props.items.length - 1) {
111
+ currentIndex.value++
112
+ }
113
+ emit('next', currentIndex.value)
114
+ emit('change', currentIndex.value)
115
+ }
116
+
117
+ // 监听items变化
118
+ watch(() => props.items, (newItems) => {
119
+ if (newItems.length < currentIndex.value + 1) {
120
+ currentIndex.value = Math.min(currentIndex.value, newItems.length - 1)
121
+ }
122
+ stopAutoPlay()
123
+ startAutoPlay()
124
+ }, { deep: true })
125
+
126
+ // 监听自动播放设置
127
+ watch(() => props.autoPlay, (autoPlay) => {
128
+ if (autoPlay) {
129
+ startAutoPlay()
130
+ }
131
+ else {
132
+ stopAutoPlay()
133
+ }
134
+ })
135
+
136
+ onMounted(() => {
137
+ startAutoPlay()
138
+ })
139
+
140
+ onUnmounted(() => {
141
+ stopAutoPlay()
142
+ })
143
+
144
+ // 暴露方法
145
+ defineExpose({
146
+ prev,
147
+ next,
148
+ currentIndex,
149
+ })
150
+ </script>
151
+
152
+ <style lang="less" scoped>
153
+ // 轮播图组件样式
154
+ .sw-swiper {
155
+ position: relative;
156
+ width: 100%;
157
+ overflow: hidden;
158
+
159
+ .swiper-wrapper {
160
+ display: flex;
161
+ width: 100%;
162
+ height: 100%;
163
+ }
164
+
165
+ .swiper-item {
166
+ flex-shrink: 0;
167
+ width: 100%;
168
+ height: 100%;
169
+ }
170
+
171
+ // 指示器
172
+ .swiper-indicators {
173
+ position: absolute;
174
+ bottom: 32rpx;
175
+ left: 50%;
176
+ transform: translateX(-50%);
177
+ display: flex;
178
+ gap: 16rpx;
179
+
180
+ .indicator-item {
181
+ width: 16rpx;
182
+ height: 16rpx;
183
+ border-radius: 50%;
184
+ background-color: rgba(255, 255, 255, 0.5);
185
+ cursor: pointer;
186
+ transition: all 0.3s ease;
187
+
188
+ &.active {
189
+ width: 16rpx;
190
+ height: 16rpx;
191
+ background-color: #fff;
192
+ }
193
+ }
194
+ }
195
+
196
+ // 箭头
197
+ .swiper-arrow {
198
+ position: absolute;
199
+ top: 50%;
200
+ transform: translateY(-50%);
201
+ width: 76rpx;
202
+ height: 76rpx;
203
+ border-radius: 50%;
204
+ background-color: rgba(255, 255, 255, 0.85);
205
+ border: none;
206
+ display: flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ cursor: pointer;
210
+ z-index: 10;
211
+ transition: all 0.3s ease;
212
+ box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.15);
213
+
214
+ &:hover {
215
+ background-color: rgba(255, 255, 255, 1);
216
+ transform: translateY(-50%) scale(1.1);
217
+ }
218
+
219
+ &:before {
220
+ content: '';
221
+ width: 24rpx;
222
+ height: 24rpx;
223
+ border-top: 4rpx solid #333;
224
+ border-left: 4rpx solid #333;
225
+ display: inline-block;
226
+ }
227
+
228
+ &.swiper-arrow-left {
229
+ left: 30rpx;
230
+
231
+ &:before {
232
+ transform: rotate(-45deg);
233
+ }
234
+ }
235
+
236
+ &.swiper-arrow-right {
237
+ right: 30rpx;
238
+
239
+ &:before {
240
+ transform: rotate(135deg);
241
+ }
242
+ }
243
+ }
244
+ }
245
+ </style>