create-weapp-vite 2.0.30 → 2.0.32

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 (179) hide show
  1. package/README.md +1 -0
  2. package/dist/{chunk-HT7GOIHP.js → chunk-IT75MAH3.js} +3 -2
  3. package/dist/cli.js +5 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +1 -1
  6. package/package.json +2 -2
  7. package/templates/tailwindcss/package.json +1 -1
  8. package/templates/tdesign/package.json +1 -1
  9. package/templates/vant/package.json +1 -1
  10. package/templates/wevu-retail/.editorconfig +9 -0
  11. package/templates/wevu-retail/.vscode/settings.json +10 -0
  12. package/templates/wevu-retail/AGENTS.md +35 -0
  13. package/templates/wevu-retail/README.md +26 -0
  14. package/templates/wevu-retail/auto-import-components.json +1 -0
  15. package/templates/wevu-retail/gitignore +35 -0
  16. package/templates/wevu-retail/package.json +42 -0
  17. package/templates/wevu-retail/postcss.config.js +6 -0
  18. package/templates/wevu-retail/project.config.json +44 -0
  19. package/templates/wevu-retail/project.private.config.json +8 -0
  20. package/templates/wevu-retail/src/app.vue +104 -0
  21. package/templates/wevu-retail/src/common/updateManager.ts +29 -0
  22. package/templates/wevu-retail/src/components/filter/index.vue +134 -0
  23. package/templates/wevu-retail/src/components/filter-popup/index.vue +67 -0
  24. package/templates/wevu-retail/src/components/goods-card/index.vue +219 -0
  25. package/templates/wevu-retail/src/components/goods-list/index.vue +91 -0
  26. package/templates/wevu-retail/src/components/load-more/index.vue +99 -0
  27. package/templates/wevu-retail/src/components/loading-content/index.vue +48 -0
  28. package/templates/wevu-retail/src/components/price/index.vue +104 -0
  29. package/templates/wevu-retail/src/components/promotion/ui-coupon-card/index.vue +143 -0
  30. package/templates/wevu-retail/src/components/promotion/ui-coupon-card/tools.wxs +18 -0
  31. package/templates/wevu-retail/src/components/swipeout/index.vue +118 -0
  32. package/templates/wevu-retail/src/components/swipeout/swipe.wxs +151 -0
  33. package/templates/wevu-retail/src/components/webp-image/index.vue +105 -0
  34. package/templates/wevu-retail/src/components/webp-image/utils.wxs +140 -0
  35. package/templates/wevu-retail/src/config/index.ts +20437 -0
  36. package/templates/wevu-retail/src/custom-tab-bar/data.ts +22 -0
  37. package/templates/wevu-retail/src/custom-tab-bar/index.vue +62 -0
  38. package/templates/wevu-retail/src/model/activities.ts +7 -0
  39. package/templates/wevu-retail/src/model/activity.ts +18 -0
  40. package/templates/wevu-retail/src/model/address.ts +31 -0
  41. package/templates/wevu-retail/src/model/cart.ts +306 -0
  42. package/templates/wevu-retail/src/model/category.ts +175 -0
  43. package/templates/wevu-retail/src/model/comments/queryDetail.ts +50 -0
  44. package/templates/wevu-retail/src/model/comments.ts +298 -0
  45. package/templates/wevu-retail/src/model/coupon.ts +39 -0
  46. package/templates/wevu-retail/src/model/detailsComments.ts +30 -0
  47. package/templates/wevu-retail/src/model/good.ts +1904 -0
  48. package/templates/wevu-retail/src/model/goods.ts +7 -0
  49. package/templates/wevu-retail/src/model/order/applyService.ts +329 -0
  50. package/templates/wevu-retail/src/model/order/orderConfirm.ts +147 -0
  51. package/templates/wevu-retail/src/model/order/orderDetail.ts +1191 -0
  52. package/templates/wevu-retail/src/model/order/orderList.ts +1033 -0
  53. package/templates/wevu-retail/src/model/promotion.ts +20 -0
  54. package/templates/wevu-retail/src/model/search.ts +60 -0
  55. package/templates/wevu-retail/src/model/submitComment.ts +58 -0
  56. package/templates/wevu-retail/src/model/swiper.ts +39 -0
  57. package/templates/wevu-retail/src/model/usercenter.ts +52 -0
  58. package/templates/wevu-retail/src/pages/cart/components/cart-bar/index.vue +104 -0
  59. package/templates/wevu-retail/src/pages/cart/components/cart-empty/index.vue +41 -0
  60. package/templates/wevu-retail/src/pages/cart/components/cart-group/index.vue +333 -0
  61. package/templates/wevu-retail/src/pages/cart/components/cart-group/index.wxs +5 -0
  62. package/templates/wevu-retail/src/pages/cart/components/cart-group/utils.wxs +20 -0
  63. package/templates/wevu-retail/src/pages/cart/components/goods-card/index.vue +334 -0
  64. package/templates/wevu-retail/src/pages/cart/components/specs-popup/index.vue +100 -0
  65. package/templates/wevu-retail/src/pages/cart/index.vue +342 -0
  66. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-sidebar/README.md +95 -0
  67. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.vue +73 -0
  68. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-sidebar/index.vue +121 -0
  69. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.vue +74 -0
  70. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-tabbar/index.vue +102 -0
  71. package/templates/wevu-retail/src/pages/category/components/goods-category/index.vue +137 -0
  72. package/templates/wevu-retail/src/pages/category/index.vue +50 -0
  73. package/templates/wevu-retail/src/pages/coupon/components/coupon-card/index.vue +95 -0
  74. package/templates/wevu-retail/src/pages/coupon/components/floating-button/index.vue +44 -0
  75. package/templates/wevu-retail/src/pages/coupon/coupon-activity-goods/index.vue +135 -0
  76. package/templates/wevu-retail/src/pages/coupon/coupon-detail/index.vue +94 -0
  77. package/templates/wevu-retail/src/pages/coupon/coupon-list/index.vue +136 -0
  78. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png +0 -0
  79. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/components/images-videos/index.vue +65 -0
  80. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/components/my-video/index.vue +92 -0
  81. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/index.vue +93 -0
  82. package/templates/wevu-retail/src/pages/goods/comments/create/index.vue +196 -0
  83. package/templates/wevu-retail/src/pages/goods/comments/index.vue +293 -0
  84. package/templates/wevu-retail/src/pages/goods/details/components/buy-bar/index.vue +117 -0
  85. package/templates/wevu-retail/src/pages/goods/details/components/goods-specs-popup/index.vue +440 -0
  86. package/templates/wevu-retail/src/pages/goods/details/components/promotion-popup/index.vue +83 -0
  87. package/templates/wevu-retail/src/pages/goods/details/index.vue +598 -0
  88. package/templates/wevu-retail/src/pages/goods/list/index.vue +299 -0
  89. package/templates/wevu-retail/src/pages/goods/result/index.vue +350 -0
  90. package/templates/wevu-retail/src/pages/goods/search/index.vue +196 -0
  91. package/templates/wevu-retail/src/pages/home/home.vue +215 -0
  92. package/templates/wevu-retail/src/pages/home/readme +8 -0
  93. package/templates/wevu-retail/src/pages/order/after-service-detail/api.ts +34 -0
  94. package/templates/wevu-retail/src/pages/order/after-service-detail/index.vue +430 -0
  95. package/templates/wevu-retail/src/pages/order/after-service-list/api.ts +1262 -0
  96. package/templates/wevu-retail/src/pages/order/after-service-list/index.vue +299 -0
  97. package/templates/wevu-retail/src/pages/order/apply-service/index.vue +665 -0
  98. package/templates/wevu-retail/src/pages/order/components/after-service-button-bar/index.vue +142 -0
  99. package/templates/wevu-retail/src/pages/order/components/customer-service/index.vue +75 -0
  100. package/templates/wevu-retail/src/pages/order/components/goods-card/index.vue +356 -0
  101. package/templates/wevu-retail/src/pages/order/components/noGoods/noGood.wxs +17 -0
  102. package/templates/wevu-retail/src/pages/order/components/noGoods/noGoods.vue +125 -0
  103. package/templates/wevu-retail/src/pages/order/components/order-button-bar/index.vue +262 -0
  104. package/templates/wevu-retail/src/pages/order/components/order-card/index.vue +126 -0
  105. package/templates/wevu-retail/src/pages/order/components/order-goods-card/index.vue +86 -0
  106. package/templates/wevu-retail/src/pages/order/components/reason-sheet/index.vue +161 -0
  107. package/templates/wevu-retail/src/pages/order/components/reason-sheet/reasonSheet.ts +25 -0
  108. package/templates/wevu-retail/src/pages/order/components/selectCoupons/mock.ts +22 -0
  109. package/templates/wevu-retail/src/pages/order/components/selectCoupons/selectCoupon.wxs +16 -0
  110. package/templates/wevu-retail/src/pages/order/components/selectCoupons/selectCoupons.vue +207 -0
  111. package/templates/wevu-retail/src/pages/order/components/specs-goods-card/index.vue +185 -0
  112. package/templates/wevu-retail/src/pages/order/config.ts +94 -0
  113. package/templates/wevu-retail/src/pages/order/delivery-detail/index.vue +145 -0
  114. package/templates/wevu-retail/src/pages/order/delivery-detail/isUrl.wxs +7 -0
  115. package/templates/wevu-retail/src/pages/order/fill-tracking-no/api.ts +71 -0
  116. package/templates/wevu-retail/src/pages/order/fill-tracking-no/index.vue +267 -0
  117. package/templates/wevu-retail/src/pages/order/invoice/index.vue +94 -0
  118. package/templates/wevu-retail/src/pages/order/order-confirm/components/address-card/index.vue +78 -0
  119. package/templates/wevu-retail/src/pages/order/order-confirm/getNotes.wxs +11 -0
  120. package/templates/wevu-retail/src/pages/order/order-confirm/handleInvoice.wxs +11 -0
  121. package/templates/wevu-retail/src/pages/order/order-confirm/index.vue +707 -0
  122. package/templates/wevu-retail/src/pages/order/order-confirm/order.wxs +8 -0
  123. package/templates/wevu-retail/src/pages/order/order-confirm/pay.ts +115 -0
  124. package/templates/wevu-retail/src/pages/order/order-detail/index.vue +456 -0
  125. package/templates/wevu-retail/src/pages/order/order-list/index.vue +288 -0
  126. package/templates/wevu-retail/src/pages/order/pay-result/index.vue +77 -0
  127. package/templates/wevu-retail/src/pages/order/receipt/index.vue +336 -0
  128. package/templates/wevu-retail/src/pages/promotion/promotion-detail/index.vue +145 -0
  129. package/templates/wevu-retail/src/pages/user/address/edit/index.vue +514 -0
  130. package/templates/wevu-retail/src/pages/user/address/list/index.vue +249 -0
  131. package/templates/wevu-retail/src/pages/user/components/t-location/index.vue +156 -0
  132. package/templates/wevu-retail/src/pages/user/components/ui-address-item/index.vue +92 -0
  133. package/templates/wevu-retail/src/pages/user/name-edit/index.vue +49 -0
  134. package/templates/wevu-retail/src/pages/user/person-info/index.vue +198 -0
  135. package/templates/wevu-retail/src/pages/usercenter/address/edit/util.ts +33 -0
  136. package/templates/wevu-retail/src/pages/usercenter/components/order-group/index.vue +90 -0
  137. package/templates/wevu-retail/src/pages/usercenter/components/ui-select-picker/index.vue +108 -0
  138. package/templates/wevu-retail/src/pages/usercenter/components/user-center-card/index.vue +82 -0
  139. package/templates/wevu-retail/src/pages/usercenter/index.vue +301 -0
  140. package/templates/wevu-retail/src/services/_utils/delay.ts +3 -0
  141. package/templates/wevu-retail/src/services/_utils/timeout.ts +3 -0
  142. package/templates/wevu-retail/src/services/activity/fetchActivity.ts +20 -0
  143. package/templates/wevu-retail/src/services/activity/fetchActivityList.ts +20 -0
  144. package/templates/wevu-retail/src/services/address/edit.ts +33 -0
  145. package/templates/wevu-retail/src/services/address/fetchAddress.ts +48 -0
  146. package/templates/wevu-retail/src/services/address/list.ts +31 -0
  147. package/templates/wevu-retail/src/services/cart/cart.ts +20 -0
  148. package/templates/wevu-retail/src/services/comments/fetchComments.ts +18 -0
  149. package/templates/wevu-retail/src/services/comments/fetchCommentsCount.ts +18 -0
  150. package/templates/wevu-retail/src/services/coupon/index.ts +65 -0
  151. package/templates/wevu-retail/src/services/good/comments/fetchCommentDetail.ts +20 -0
  152. package/templates/wevu-retail/src/services/good/fetchCategoryList.ts +18 -0
  153. package/templates/wevu-retail/src/services/good/fetchGood.ts +18 -0
  154. package/templates/wevu-retail/src/services/good/fetchGoods.ts +29 -0
  155. package/templates/wevu-retail/src/services/good/fetchGoodsDetailsComments.ts +37 -0
  156. package/templates/wevu-retail/src/services/good/fetchGoodsList.ts +39 -0
  157. package/templates/wevu-retail/src/services/good/fetchSearchHistory.ts +35 -0
  158. package/templates/wevu-retail/src/services/good/fetchSearchResult.ts +38 -0
  159. package/templates/wevu-retail/src/services/home/home.ts +53 -0
  160. package/templates/wevu-retail/src/services/order/applyService.ts +70 -0
  161. package/templates/wevu-retail/src/services/order/orderConfirm.ts +69 -0
  162. package/templates/wevu-retail/src/services/order/orderDetail.ts +39 -0
  163. package/templates/wevu-retail/src/services/order/orderList.ts +39 -0
  164. package/templates/wevu-retail/src/services/order/orderSubmitComment.ts +22 -0
  165. package/templates/wevu-retail/src/services/promotion/detail.ts +18 -0
  166. package/templates/wevu-retail/src/services/usercenter/fetchPerson.ts +28 -0
  167. package/templates/wevu-retail/src/services/usercenter/fetchUsercenter.ts +18 -0
  168. package/templates/wevu-retail/src/sitemap.json +7 -0
  169. package/templates/wevu-retail/src/utils/addressParse.ts +25 -0
  170. package/templates/wevu-retail/src/utils/getPermission.ts +45 -0
  171. package/templates/wevu-retail/src/utils/mock.ts +51 -0
  172. package/templates/wevu-retail/src/utils/util.ts +134 -0
  173. package/templates/wevu-retail/src/vite-env.d.ts +1 -0
  174. package/templates/wevu-retail/tailwind.config.ts +15 -0
  175. package/templates/wevu-retail/tsconfig.app.json +58 -0
  176. package/templates/wevu-retail/tsconfig.json +11 -0
  177. package/templates/wevu-retail/tsconfig.node.json +33 -0
  178. package/templates/wevu-retail/vite.config.ts +14 -0
  179. package/templates/wevu-tdesign/package.json +1 -1
@@ -0,0 +1,219 @@
1
+ <script lang="ts">
2
+ Component({
3
+ options: {
4
+ addGlobalClass: true,
5
+ },
6
+
7
+ properties: {
8
+ id: {
9
+ type: String,
10
+ value: '',
11
+ observer(id) {
12
+ this.genIndependentID(id);
13
+ if (this.properties.thresholds?.length) {
14
+ this.createIntersectionObserverHandle();
15
+ }
16
+ },
17
+ },
18
+ data: {
19
+ type: Object,
20
+ observer(data) {
21
+ if (!data) {
22
+ return;
23
+ }
24
+ let isValidityLinePrice = true;
25
+ if (data.originPrice && data.price && data.originPrice < data.price) {
26
+ isValidityLinePrice = false;
27
+ }
28
+ this.setData({ goods: data, isValidityLinePrice });
29
+ },
30
+ },
31
+ currency: {
32
+ type: String,
33
+ value: '¥',
34
+ },
35
+
36
+ thresholds: {
37
+ type: Array,
38
+ value: [],
39
+ observer(thresholds) {
40
+ if (thresholds && thresholds.length) {
41
+ this.createIntersectionObserverHandle();
42
+ } else {
43
+ this.clearIntersectionObserverHandle();
44
+ }
45
+ },
46
+ },
47
+ },
48
+
49
+ data: {
50
+ independentID: '',
51
+ goods: { id: '' },
52
+ isValidityLinePrice: false,
53
+ },
54
+
55
+ lifetimes: {
56
+ ready() {
57
+ this.init();
58
+ },
59
+ detached() {
60
+ this.clear();
61
+ },
62
+ },
63
+
64
+ pageLifeTimes: {},
65
+
66
+ methods: {
67
+ clickHandle() {
68
+ this.triggerEvent('click', { goods: this.data.goods });
69
+ },
70
+
71
+ clickThumbHandle() {
72
+ this.triggerEvent('thumb', { goods: this.data.goods });
73
+ },
74
+
75
+ addCartHandle(e) {
76
+ const { id } = e.currentTarget;
77
+ const { id: cardID } = e.currentTarget.dataset;
78
+ this.triggerEvent('add-cart', {
79
+ ...e.detail,
80
+ id,
81
+ cardID,
82
+ goods: this.data.goods,
83
+ });
84
+ },
85
+
86
+ genIndependentID(id) {
87
+ let independentID;
88
+ if (id) {
89
+ independentID = id;
90
+ } else {
91
+ independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`;
92
+ }
93
+ this.setData({ independentID });
94
+ },
95
+
96
+ init() {
97
+ const { thresholds, id } = this.properties;
98
+ this.genIndependentID(id);
99
+ if (thresholds && thresholds.length) {
100
+ this.createIntersectionObserverHandle();
101
+ }
102
+ },
103
+
104
+ clear() {
105
+ this.clearIntersectionObserverHandle();
106
+ },
107
+
108
+ intersectionObserverContext: null,
109
+
110
+ createIntersectionObserverHandle() {
111
+ if (this.intersectionObserverContext || !this.data.independentID) {
112
+ return;
113
+ }
114
+ this.intersectionObserverContext = this.createIntersectionObserver({
115
+ thresholds: this.properties.thresholds,
116
+ }).relativeToViewport();
117
+
118
+ this.intersectionObserverContext.observe(
119
+ `#${this.data.independentID}`,
120
+ (res) => {
121
+ this.intersectionObserverCB(res);
122
+ },
123
+ );
124
+ },
125
+
126
+ intersectionObserverCB() {
127
+ this.triggerEvent('ob', {
128
+ goods: this.data.goods,
129
+ context: this.intersectionObserverContext,
130
+ });
131
+ },
132
+
133
+ clearIntersectionObserverHandle() {
134
+ if (this.intersectionObserverContext) {
135
+ try {
136
+ this.intersectionObserverContext.disconnect();
137
+ } catch (e) {}
138
+ this.intersectionObserverContext = null;
139
+ }
140
+ },
141
+ },
142
+ });
143
+ </script>
144
+
145
+ <template>
146
+ <view
147
+ id="{{independentID}}"
148
+ class="goods-card [box-sizing:border-box] [font-size:24rpx] [border-radius:0_0_16rpx_16rpx] [border-bottom:none]"
149
+ bind:tap="clickHandle"
150
+ data-goods="{{ goods }}"
151
+ >
152
+ <view class="goods-card__main [position:relative] [display:flex] [line-height:1] [padding:0] [background:transparent] [width:342rpx] [border-radius:0_0_16rpx_16rpx] [align-items:center] [justify-content:center] [margin-bottom:16rpx] [flex-direction:column]">
153
+ <view class="goods-card__thumb [flex-shrink:0] [position:relative] [width:340rpx] [height:340rpx] [&:empty]:[display:none] [&:empty]:[margin:0]" bind:tap="clickThumbHandle">
154
+ <t-image
155
+ wx:if="{{ !!goods.thumb }}"
156
+ t-class="goods-card__img [display:block] [width:100%] [height:100%] [border-radius:16rpx_16rpx_0_0] [overflow:hidden]"
157
+ src="{{ goods.thumb }}"
158
+ mode="aspectFill"
159
+ lazy-load
160
+ />
161
+ </view>
162
+ <view class="goods-card__body [display:flex] [flex:1_1_auto] [background:#fff] [border-radius:0_0_16rpx_16rpx] [padding:16rpx_24rpx_18rpx] [flex-direction:column]">
163
+ <view class="goods-card__upper [display:flex] [flex-direction:column] [overflow:hidden] [flex:1_1_auto]">
164
+ <view wx:if="{{ goods.title }}" class="goods-card__title [flex-shrink:0] [font-size:28rpx] [color:#333] [font-weight:400] [display:-webkit-box] [height:72rpx] [-webkit-box-orient:vertical] [-webkit-line-clamp:2] [overflow:hidden] [word-break:break-word] [line-height:36rpx]">
165
+ {{ goods.title }}
166
+ </view>
167
+ <view wx:if="{{ goods.tags && !!goods.tags.length }}" class="goods-card__tags [display:flex] [flex-direction:row] [flex-wrap:wrap] [margin:8rpx_0_0_0]">
168
+ <view
169
+ wx:for="{{ goods.tags }}"
170
+ wx:key="index"
171
+ wx:for-item="tag"
172
+ class="goods-card__tag [color:#fa4126] [background:transparent] [font-size:20rpx] [border:1rpx_solid_#fa4126] [padding:0_8rpx] [border-radius:16rpx] [line-height:30rpx] [margin:0_8rpx_8rpx_0] [display:block] [overflow:hidden] [white-space:nowrap] [word-break:keep-all] [text-overflow:ellipsis]"
173
+ data-index="{{index}}"
174
+ >
175
+ {{tag}}
176
+ </view>
177
+ </view>
178
+ </view>
179
+ <view class="goods-card__down [display:flex] [position:relative] [flex-direction:row] [justify-content:flex-start] [align-items:baseline] [line-height:32rpx] [margin:8rpx_0_0_0]">
180
+ <price
181
+ wx:if="{{ goods.price }}"
182
+ wr-class="spec-for-price [font-size:36rpx] [white-space:nowrap] [font-weight:700] [order:1] [color:#fa4126] [margin:0]"
183
+ symbol-class="spec-for-symbol [font-size:24rpx]"
184
+ symbol="{{currency}}"
185
+ price="{{goods.price}}"
186
+ />
187
+ <price
188
+ wx:if="{{ goods.originPrice && isValidityLinePrice }}"
189
+ wr-class="goods-card__origin-price [white-space:nowrap] [font-weight:700] [order:2] [color:#bbbbbb] [font-size:24rpx] [margin:0_0_0_8rpx]"
190
+ symbol="{{currency}}"
191
+ price="{{goods.originPrice}}"
192
+ type="delthrough"
193
+ />
194
+ <t-icon
195
+ class="goods-card__add-cart [order:3] [margin:auto_0_0_auto] [position:absolute] [bottom:0] [right:0]"
196
+ prefix="wr"
197
+ name="cartAdd"
198
+ id="{{independentID}}-cart"
199
+ data-id="{{independentID}}"
200
+ catchtap="addCartHandle"
201
+ size="48rpx"
202
+ color="#FA550F"
203
+ />
204
+ </view>
205
+ </view>
206
+ </view>
207
+ </view>
208
+
209
+ </template>
210
+
211
+ <json>
212
+ {
213
+ "component": true,
214
+ "usingComponents": {
215
+ "price": "/components/price/index",
216
+ "t-icon": "tdesign-miniprogram/icon/icon",
217
+ "t-image": "/components/webp-image/index"
218
+ }
219
+ }</json>
@@ -0,0 +1,91 @@
1
+ <script lang="ts">
2
+ Component({
3
+ externalClasses: ['wr-class'],
4
+
5
+ properties: {
6
+ goodsList: {
7
+ type: Array,
8
+ value: [],
9
+ },
10
+ id: {
11
+ type: String,
12
+ value: '',
13
+ observer: (id) => {
14
+ this.genIndependentID(id);
15
+ },
16
+ },
17
+ thresholds: {
18
+ type: Array,
19
+ value: [],
20
+ },
21
+ },
22
+
23
+ data: {
24
+ independentID: '',
25
+ },
26
+
27
+ lifetimes: {
28
+ ready() {
29
+ this.init();
30
+ },
31
+ },
32
+
33
+ methods: {
34
+ onClickGoods(e) {
35
+ const { index } = e.currentTarget.dataset;
36
+ this.triggerEvent('click', { ...e.detail, index });
37
+ },
38
+
39
+ onAddCart(e) {
40
+ const { index } = e.currentTarget.dataset;
41
+ this.triggerEvent('addcart', { ...e.detail, index });
42
+ },
43
+
44
+ onClickGoodsThumb(e) {
45
+ const { index } = e.currentTarget.dataset;
46
+ this.triggerEvent('thumb', { ...e.detail, index });
47
+ },
48
+
49
+ init() {
50
+ this.genIndependentID(this.id || '');
51
+ },
52
+
53
+ genIndependentID(id) {
54
+ if (id) {
55
+ this.setData({ independentID: id });
56
+ } else {
57
+ this.setData({
58
+ independentID: `goods-list-${~~(Math.random() * 10 ** 8)}`,
59
+ });
60
+ }
61
+ },
62
+ },
63
+ });
64
+ </script>
65
+
66
+ <template>
67
+ <view class="goods-list-wrap wr-class [display:flex] [flex-flow:row_wrap] [justify-content:space-between] [padding:0] [background:#fff]" id="{{independentID}}">
68
+ <block wx:for="{{goodsList}}" wx:for-item="item" wx:key="index">
69
+ <goods-card
70
+ id="{{independentID}}-gd-{{index}}"
71
+ data="{{item}}"
72
+ currency="{{item.currency || '¥'}}"
73
+ thresholds="{{thresholds}}"
74
+ class="goods-card-inside"
75
+ data-index="{{index}}"
76
+ bind:thumb="onClickGoodsThumb"
77
+ bind:click="onClickGoods"
78
+ bind:add-cart="onAddCart"
79
+ />
80
+ </block>
81
+ </view>
82
+
83
+ </template>
84
+
85
+ <json>
86
+ {
87
+ "component": true,
88
+ "usingComponents": {
89
+ "goods-card": "/components/goods-card/index"
90
+ }
91
+ }</json>
@@ -0,0 +1,99 @@
1
+ <script lang="ts">
2
+ Component({
3
+ externalClasses: ['wr-class', 'wr-class--no-more'],
4
+
5
+ options: { multipleSlots: true },
6
+
7
+ properties: {
8
+ status: {
9
+ type: Number,
10
+ value: 0,
11
+ },
12
+ loadingText: {
13
+ type: String,
14
+ value: '加载中...',
15
+ },
16
+ noMoreText: {
17
+ type: String,
18
+ value: '没有更多了',
19
+ },
20
+ failedText: {
21
+ type: String,
22
+ value: '加载失败,点击重试',
23
+ },
24
+ color: {
25
+ type: String,
26
+ value: '#BBBBBB',
27
+ },
28
+ failedColor: {
29
+ type: String,
30
+ value: '#FA550F',
31
+ },
32
+ size: {
33
+ type: null,
34
+ value: '40rpx',
35
+ },
36
+ loadingBackgroundColor: {
37
+ type: String,
38
+ value: '#F5F5F5',
39
+ },
40
+ listIsEmpty: {
41
+ type: Boolean,
42
+ value: false,
43
+ },
44
+ },
45
+
46
+ methods: {
47
+ /** 点击处理 */
48
+ tapHandle() {
49
+ // 失败重试
50
+ if (this.data.status === 3) {
51
+ this.triggerEvent('retry');
52
+ }
53
+ },
54
+ },
55
+ });
56
+ </script>
57
+
58
+ <template>
59
+ <view
60
+ class="load-more wr-class [font-size:24rpx] [height:100rpx] [display:flex] [flex-direction:column] [justify-content:center] [&_.t-class-loading]:[display:flex] [&_.t-class-loading]:[justify-content:center] [&_.t-class-loading-text]:[color:#bbbbbb] [&_.t-class-indicator]:[color:#b9b9b9]"
61
+ style="{{listIsEmpty && (status === 0 || status === 2) ? 'display: none' : '' }}"
62
+ bindtap="tapHandle"
63
+ >
64
+ <!-- 加载中 -->
65
+
66
+ <t-loading
67
+ t-class="t-class-loading"
68
+ t-class-text="t-class-loading-text"
69
+ t-class-indicator="t-class-indicator"
70
+ loading="{{status === 1}}"
71
+ text="加载中..."
72
+ theme="circular"
73
+ size="40rpx"
74
+ />
75
+
76
+ <!-- 已全部加载 -->
77
+ <t-divider wx:if="{{status === 2}}" t-class="t-class-divider" t-class-content="t-class-divider-content">
78
+ <text slot="content">{{noMoreText}}</text>
79
+ </t-divider>
80
+
81
+ <!-- 加载失败 -->
82
+ <view class="load-more__error [margin:auto]" wx:if="{{status===3}}">
83
+ 加载失败
84
+ <text class="load-more__refresh-btn [margin-left:16rpx] [color:#fa4126]" bind:tap="tapHandle">刷新</text>
85
+ </view>
86
+ </view>
87
+
88
+ <!-- 支持通过slot传入页面/列表的空态,load-more来控制空态的显示状态 -->
89
+ <slot wx:if="{{listIsEmpty && (status === 0 || status === 2)}}" name="empty" />
90
+ </template>
91
+
92
+ <json>
93
+ {
94
+ "component": true,
95
+ "usingComponents": {
96
+ "t-loading": "tdesign-miniprogram/loading/loading",
97
+ "t-divider": "tdesign-miniprogram/divider/divider"
98
+ }
99
+ }</json>
@@ -0,0 +1,48 @@
1
+ <script lang="ts">
2
+ Component({
3
+ externalClasses: ['wr-class'],
4
+ properties: {
5
+ position: {
6
+ type: String,
7
+ value: 'static',
8
+ },
9
+ noMask: Boolean,
10
+ type: {
11
+ type: String,
12
+ value: 'circular',
13
+ },
14
+ vertical: Boolean,
15
+ size: {
16
+ type: String,
17
+ value: '50rpx',
18
+ },
19
+ backgroundColor: {
20
+ type: String,
21
+ value: 'rgba(0, 0, 0, .6)',
22
+ },
23
+ },
24
+ });
25
+ </script>
26
+
27
+ <template>
28
+ <view class="t-class loading-content {{position}} [width:100%] [height:100%] [background-color:rgba(0,_0,_0,_0.6)] [position:relative] [&_.absolute]:[position:absolute] [&_.absolute]:[z-index:1] [&_.absolute]:[left:0] [&_.absolute]:[top:0] [&_.fixed]:[position:fixed] [&_.fixed]:[z-index:1] [&_.fixed]:[left:0] [&_.fixed]:[top:0] [&_.loading]:[width:100%] [&_.loading]:[height:100%] [&_.loading]:[visibility:visible]" style="{{(position === 'static' || noMask) ? 'visibility: hidden;' : ''}} background-color: {{backgroundColor}}">
29
+ <t-loading
30
+ t-class="loading"
31
+ theme="{{type}}"
32
+ layout="{{vertical}}"
33
+ size="{{size}}"
34
+ >
35
+ <slot/>
36
+ </t-loading>
37
+ </view>
38
+
39
+ </template>
40
+
41
+ <json>
42
+ {
43
+ "component": true,
44
+ "usingComponents": {
45
+ "t-loading": "tdesign-miniprogram/loading/loading"
46
+ }
47
+ }
48
+ </json>
@@ -0,0 +1,104 @@
1
+ <script lang="ts">
2
+ Component({
3
+ externalClasses: ['wr-class', 'symbol-class', 'decimal-class'],
4
+ useStore: [],
5
+ properties: {
6
+ priceUnit: {
7
+ type: String,
8
+ value: 'fen',
9
+ }, // 价格单位,分 | 元, fen,yuan
10
+ price: {
11
+ type: null,
12
+ value: '',
13
+ observer(price) {
14
+ this.format(price);
15
+ },
16
+ }, // 价格, 以分为单位
17
+ type: {
18
+ type: String,
19
+ value: '', //
20
+ }, // main 粗体, lighter 细体, mini 黑色, del 中划线, delthrough 中划线,包括货币符号
21
+ symbol: {
22
+ type: String,
23
+ value: '¥', // '¥',
24
+ }, // 货币符号,默认是人民币符号¥
25
+ fill: Boolean, // 是否自动补齐两位小数
26
+ decimalSmaller: Boolean, // 小数字号小一点
27
+ lineThroughWidth: {
28
+ type: null,
29
+ value: '0.12em',
30
+ }, // 划线价线条高度
31
+ },
32
+
33
+ data: {
34
+ pArr: [],
35
+ },
36
+
37
+ methods: {
38
+ format(price) {
39
+ price = parseFloat(`${price}`);
40
+ const pArr = [];
41
+ if (!isNaN(price)) {
42
+ const isMinus = price < 0;
43
+ if (isMinus) {
44
+ price = -price;
45
+ }
46
+ if (this.properties.priceUnit === 'yuan') {
47
+ const priceSplit = price.toString().split('.');
48
+ pArr[0] = priceSplit[0];
49
+ pArr[1] = !priceSplit[1]
50
+ ? '00'
51
+ : priceSplit[1].length === 1
52
+ ? `${priceSplit[1]}0`
53
+ : priceSplit[1];
54
+ } else {
55
+ price = Math.round(price * 10 ** 8) / 10 ** 8; // 恢复精度丢失
56
+ price = Math.ceil(price); // 向上取整
57
+ pArr[0] = price >= 100 ? `${price}`.slice(0, -2) : '0';
58
+ pArr[1] = `${price + 100}`.slice(-2);
59
+ }
60
+ if (!this.properties.fill) {
61
+ // 如果 fill 为 false, 不显示小数末尾的0
62
+ if (pArr[1] === '00') pArr[1] = '';
63
+ else if (pArr[1][1] === '0') pArr[1] = pArr[1][0];
64
+ }
65
+ if (isMinus) {
66
+ pArr[0] = `-${pArr[0]}`;
67
+ }
68
+ }
69
+ this.setData({ pArr });
70
+ },
71
+ },
72
+ });
73
+ </script>
74
+
75
+ <template>
76
+ <wxs module="utils">
77
+ var REGEXP = getRegExp('^\\d+(\\.\\d+)?$');
78
+ function addUnit(value) {
79
+ if (value == null) {
80
+ return '';
81
+ }
82
+ return REGEXP.test('' + value) ? value + 'rpx' : value;
83
+ }
84
+ module.exports = {
85
+ addUnit: addUnit
86
+ };
87
+ </wxs>
88
+ <view class="price {{type}} wr-class [display:inline] [color:inherit] [font-size:inherit] [text-decoration:inherit] [white-space:nowrap]">
89
+ <view wx:if="{{type === 'delthrough'}}" class="line" style="height:{{utils.addUnit(lineThroughWidth)}};" />
90
+ <view class="symbol symbol-class [display:inline] [color:inherit] [font-size:inherit] [font-size:0.8em] [white-space:nowrap]">{{symbol}}</view>
91
+ <view class="pprice [display:inline] [margin:0_0_0_4rpx] [white-space:nowrap]">
92
+ <view class="integer inline [display:inline] [white-space:nowrap] [color:inherit] [font-size:inherit]">{{pArr[0]}}</view>
93
+ <view wx:if="{{pArr[1]}}" class="decimal inline {{decimalSmaller ? 'smaller' : ''}} decimal-class [display:inline] [white-space:nowrap] [color:inherit] [font-size:inherit] [&_.smaller]:[font-size:0.8em] [&_.smaller]:[vertical-align:baseline]">.{{pArr[1]}}</view>
94
+ </view>
95
+ </view>
96
+
97
+ </template>
98
+
99
+ <json>
100
+ {
101
+ "component": true,
102
+ "usingComponents": {}
103
+ }
104
+ </json>