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,299 @@
1
+ <script lang="ts">
2
+ import { fetchGoodsList } from '../../../services/good/fetchGoodsList';
3
+ import Toast from 'tdesign-miniprogram/toast/index';
4
+
5
+ const initFilters = {
6
+ overall: 1,
7
+ sorts: '',
8
+ layout: 0,
9
+ };
10
+
11
+ Page({
12
+ data: {
13
+ goodsList: [],
14
+ layout: 0,
15
+ sorts: '',
16
+ overall: 1,
17
+ show: false,
18
+ minVal: '',
19
+ maxVal: '',
20
+ filter: initFilters,
21
+ hasLoaded: false,
22
+ loadMoreStatus: 0,
23
+ loading: true,
24
+ },
25
+
26
+ pageNum: 1,
27
+ pageSize: 30,
28
+ total: 0,
29
+
30
+ handleFilterChange(e) {
31
+ const { layout, overall, sorts } = e.detail;
32
+ this.pageNum = 1;
33
+ this.setData({
34
+ layout,
35
+ sorts,
36
+ overall,
37
+ loadMoreStatus: 0,
38
+ });
39
+ this.init(true);
40
+ },
41
+
42
+ generalQueryData(reset = false) {
43
+ const { filter, keywords, minVal, maxVal } = this.data;
44
+ const { pageNum, pageSize } = this;
45
+ const { sorts, overall } = filter;
46
+ const params = {
47
+ sort: 0, // 0 综合,1 价格
48
+ pageNum: 1,
49
+ pageSize: 30,
50
+ keyword: keywords,
51
+ };
52
+
53
+ if (sorts) {
54
+ params.sort = 1;
55
+ params.sortType = sorts === 'desc' ? 1 : 0;
56
+ }
57
+
58
+ if (overall) {
59
+ params.sort = 0;
60
+ } else {
61
+ params.sort = 1;
62
+ }
63
+ params.minPrice = minVal ? minVal * 100 : 0;
64
+ params.maxPrice = maxVal ? maxVal * 100 : undefined;
65
+ if (reset) return params;
66
+ return {
67
+ ...params,
68
+ pageNum: pageNum + 1,
69
+ pageSize,
70
+ };
71
+ },
72
+
73
+ async init(reset = true) {
74
+ const { loadMoreStatus, goodsList = [] } = this.data;
75
+ const params = this.generalQueryData(reset);
76
+ if (loadMoreStatus !== 0) return;
77
+ this.setData({
78
+ loadMoreStatus: 1,
79
+ loading: true,
80
+ });
81
+ try {
82
+ const result = await fetchGoodsList(params);
83
+ const code = 'Success';
84
+ const data = result;
85
+ if (code.toUpperCase() === 'SUCCESS') {
86
+ const { spuList, totalCount = 0 } = data;
87
+ if (totalCount === 0 && reset) {
88
+ this.total = totalCount;
89
+ this.setData({
90
+ emptyInfo: {
91
+ tip: '抱歉,未找到相关商品',
92
+ },
93
+ hasLoaded: true,
94
+ loadMoreStatus: 0,
95
+ loading: false,
96
+ goodsList: [],
97
+ });
98
+ return;
99
+ }
100
+
101
+ const _goodsList = reset ? spuList : goodsList.concat(spuList);
102
+ const _loadMoreStatus = _goodsList.length === totalCount ? 2 : 0;
103
+ this.pageNum = params.pageNum || 1;
104
+ this.total = totalCount;
105
+ this.setData({
106
+ goodsList: _goodsList,
107
+ loadMoreStatus: _loadMoreStatus,
108
+ });
109
+ } else {
110
+ this.setData({
111
+ loading: false,
112
+ });
113
+ wx.showToast({
114
+ title: '查询失败,请稍候重试',
115
+ });
116
+ }
117
+ } catch (error) {
118
+ this.setData({
119
+ loading: false,
120
+ });
121
+ }
122
+ this.setData({
123
+ hasLoaded: true,
124
+ loading: false,
125
+ });
126
+ },
127
+
128
+ onLoad() {
129
+ this.init(true);
130
+ },
131
+
132
+ onReachBottom() {
133
+ const { goodsList } = this.data;
134
+ const { total = 0 } = this;
135
+ if (goodsList.length === total) {
136
+ this.setData({
137
+ loadMoreStatus: 2,
138
+ });
139
+ return;
140
+ }
141
+ this.init(false);
142
+ },
143
+
144
+ handleAddCart() {
145
+ Toast({
146
+ context: this,
147
+ selector: '#t-toast',
148
+ message: '点击加购',
149
+ });
150
+ },
151
+
152
+ tagClickHandle() {
153
+ Toast({
154
+ context: this,
155
+ selector: '#t-toast',
156
+ message: '点击标签',
157
+ });
158
+ },
159
+
160
+ gotoGoodsDetail(e) {
161
+ const { index } = e.detail;
162
+ const { spuId } = this.data.goodsList[index];
163
+ wx.navigateTo({
164
+ url: `/pages/goods/details/index?spuId=${spuId}`,
165
+ });
166
+ },
167
+
168
+ showFilterPopup() {
169
+ this.setData({
170
+ show: true,
171
+ });
172
+ },
173
+
174
+ showFilterPopupClose() {
175
+ this.setData({
176
+ show: false,
177
+ });
178
+ },
179
+
180
+ onMinValAction(e) {
181
+ const { value } = e.detail;
182
+ this.setData({ minVal: value });
183
+ },
184
+
185
+ onMaxValAction(e) {
186
+ const { value } = e.detail;
187
+ this.setData({ maxVal: value });
188
+ },
189
+
190
+ reset() {
191
+ this.setData({ minVal: '', maxVal: '' });
192
+ },
193
+
194
+ confirm() {
195
+ const { minVal, maxVal } = this.data;
196
+ let message = '';
197
+ if (minVal && !maxVal) {
198
+ message = `价格最小是${minVal}`;
199
+ } else if (!minVal && maxVal) {
200
+ message = `价格范围是0-${minVal}`;
201
+ } else if (minVal && maxVal && minVal <= maxVal) {
202
+ message = `价格范围${minVal}-${this.data.maxVal}`;
203
+ } else {
204
+ message = '请输入正确范围';
205
+ }
206
+ if (message) {
207
+ Toast({
208
+ context: this,
209
+ selector: '#t-toast',
210
+ message,
211
+ });
212
+ }
213
+ this.pageNum = 1;
214
+ this.setData(
215
+ {
216
+ show: false,
217
+ minVal: '',
218
+ goodsList: [],
219
+ loadMoreStatus: 0,
220
+ maxVal: '',
221
+ },
222
+ () => {
223
+ this.init();
224
+ },
225
+ );
226
+ },
227
+ });
228
+ </script>
229
+
230
+ <template>
231
+ <view class="goods-list-container [display:block] [&_.t-search]:[padding:0_30rpx] [&_.t-search]:[background-color:#fff] [&_.t-class__input-container]:[height:64rpx] [&_.t-class__input-container]:[border-radius:32rpx] [&_.t-search__left-icon]:[display:flex] [&_.t-search__left-icon]:[align-items:center] [&_.t-search__input]:[font-size:28rpx] [&_.t-search__input]:[color:rgb(116,_116,_116)] [&_.category-goods-list]:[background-color:#f2f2f2] [&_.category-goods-list]:[overflow-y:scroll] [&_.category-goods-list]:[-webkit-overflow-scrolling:touch] [&_.category-goods-list]:[padding:20rpx_24rpx] [&_.wr-goods-list]:[background:#f2f2f2] [&_.t-image__mask]:[display:flex] [&_.empty-wrap]:[margin-top:184rpx] [&_.empty-wrap]:[margin-bottom:120rpx] [&_.empty-wrap]:[height:300rpx] [&_.empty-wrap_.empty-tips_.empty-content_.content-text]:[margin-top:40rpx] [&_.price-container]:[padding:32rpx] [&_.price-container]:[height:100vh] [&_.price-container]:[max-width:632rpx] [&_.price-container]:[background-color:#fff] [&_.price-container]:[border-radius:30rpx_0_0_30rpx] [&_.price-container]:[box-sizing:border-box] [&_.price-between]:[font-size:26rpx] [&_.price-between]:[font-weight:500] [&_.price-between]:[color:rgba(51,_51,_51,_1)] [&_.price-ipts-wrap]:[width:100%] [&_.price-ipts-wrap]:[display:flex] [&_.price-ipts-wrap]:[align-items:center] [&_.price-ipts-wrap]:[justify-content:space-around] [&_.price-ipts-wrap]:[margin-top:24rpx] [&_.price-ipts-wrap_.price-divided]:[width:16rpx] [&_.price-ipts-wrap_.price-divided]:[margin:0_24rpx] [&_.price-ipts-wrap_.price-divided]:[color:#333333] [&_.price-ipts-wrap_.t-input__wrapper]:[margin:0] [&_.price-ipts-wrap_.t-input__content]:[font-size:24rpx] [&_.price-ipts-wrap_.t-input__placeholder]:[font-size:24rpx] [&_.price-ipts-wrap_.price-ipt]:[border-radius:8rpx]">
232
+ <filter
233
+ wr-class="filter-container"
234
+ bind:change="handleFilterChange"
235
+ layout="{{layout}}"
236
+ sorts="{{sorts}}"
237
+ overall="{{overall}}"
238
+ bind:showFilterPopup="showFilterPopup"
239
+ >
240
+ <filter-popup
241
+ slot="filterPopup"
242
+ show="{{show}}"
243
+ bind:showFilterPopupClose="showFilterPopupClose"
244
+ bind:reset="reset"
245
+ bind:confirm="confirm"
246
+ >
247
+ <view class="price-container" slot="filterSlot">
248
+ <view class="price-between">价格区间</view>
249
+ <view class="price-ipts-wrap">
250
+ <t-input
251
+ align="center"
252
+ type="number"
253
+ t-class="price-ipt"
254
+ placeholder="最低价"
255
+ value="{{minVal}}"
256
+ bindchange="onMinValAction"
257
+ />
258
+ <view class="price-divided">-</view>
259
+ <t-input
260
+ align="center"
261
+ type="number"
262
+ t-class="price-ipt"
263
+ placeholder="最高价"
264
+ value="{{maxVal}}"
265
+ bindchange="onMaxValAction"
266
+ />
267
+ </view>
268
+ </view>
269
+ </filter-popup>
270
+ </filter>
271
+ <view class="empty-wrap" wx:if="{{goodsList.length === 0 && hasLoaded}}">
272
+ <t-empty t-class="empty-tips" size="240rpx" description="暂无相关商品" />
273
+ </view>
274
+ <view class="category-goods-list" wx:if="{{goodsList.length}}">
275
+ <goods-list
276
+ wr-class="wr-goods-list"
277
+ goodsList="{{goodsList}}"
278
+ bind:click="gotoGoodsDetail"
279
+ bind:addcart="handleAddCart"
280
+ />
281
+ </view>
282
+ <load-more wx:if="{{goodsList.length > 0}}" status="{{loadMoreStatus}}" no-more-text="没有更多了" />
283
+ </view>
284
+ <t-toast id="t-toast" />
285
+ </template>
286
+
287
+ <json>
288
+ {
289
+ "navigationBarTitleText": "商品列表",
290
+ "usingComponents": {
291
+ "t-input": "tdesign-miniprogram/input/input",
292
+ "t-empty": "tdesign-miniprogram/empty/empty",
293
+ "t-toast": "tdesign-miniprogram/toast/toast",
294
+ "goods-list": "/components/goods-list/index",
295
+ "filter": "/components/filter/index",
296
+ "filter-popup": "/components/filter-popup/index",
297
+ "load-more": "/components/load-more/index"
298
+ }
299
+ }</json>
@@ -0,0 +1,350 @@
1
+ <script lang="ts">
2
+ /* eslint-disable no-param-reassign */
3
+ import { getSearchResult } from '../../../services/good/fetchSearchResult';
4
+ import Toast from 'tdesign-miniprogram/toast/index';
5
+
6
+ const initFilters = {
7
+ overall: 1,
8
+ sorts: '',
9
+ };
10
+
11
+ Page({
12
+ data: {
13
+ goodsList: [],
14
+ sorts: '',
15
+ overall: 1,
16
+ show: false,
17
+ minVal: '',
18
+ maxVal: '',
19
+ minSalePriceFocus: false,
20
+ maxSalePriceFocus: false,
21
+ filter: initFilters,
22
+ hasLoaded: false,
23
+ keywords: '',
24
+ loadMoreStatus: 0,
25
+ loading: true,
26
+ },
27
+
28
+ total: 0,
29
+ pageNum: 1,
30
+ pageSize: 30,
31
+
32
+ onLoad(options) {
33
+ const { searchValue = '' } = options || {};
34
+ this.setData(
35
+ {
36
+ keywords: searchValue,
37
+ },
38
+ () => {
39
+ this.init(true);
40
+ },
41
+ );
42
+ },
43
+
44
+ generalQueryData(reset = false) {
45
+ const { filter, keywords, minVal, maxVal } = this.data;
46
+ const { pageNum, pageSize } = this;
47
+ const { sorts, overall } = filter;
48
+ const params = {
49
+ sort: 0, // 0 综合,1 价格
50
+ pageNum: 1,
51
+ pageSize: 30,
52
+ keyword: keywords,
53
+ };
54
+
55
+ if (sorts) {
56
+ params.sort = 1;
57
+ params.sortType = sorts === 'desc' ? 1 : 0;
58
+ }
59
+ if (overall) {
60
+ params.sort = 0;
61
+ } else {
62
+ params.sort = 1;
63
+ }
64
+ params.minPrice = minVal ? minVal * 100 : 0;
65
+ params.maxPrice = maxVal ? maxVal * 100 : undefined;
66
+ if (reset) return params;
67
+ return {
68
+ ...params,
69
+ pageNum: pageNum + 1,
70
+ pageSize,
71
+ };
72
+ },
73
+
74
+ async init(reset = true) {
75
+ const { loadMoreStatus, goodsList = [] } = this.data;
76
+ const params = this.generalQueryData(reset);
77
+ if (loadMoreStatus !== 0) return;
78
+ this.setData({
79
+ loadMoreStatus: 1,
80
+ loading: true,
81
+ });
82
+ try {
83
+ const result = await getSearchResult(params);
84
+ const code = 'Success';
85
+ const data = result;
86
+ if (code.toUpperCase() === 'SUCCESS') {
87
+ const { spuList, totalCount = 0 } = data;
88
+ if (totalCount === 0 && reset) {
89
+ this.total = totalCount;
90
+ this.setData({
91
+ emptyInfo: {
92
+ tip: '抱歉,未找到相关商品',
93
+ },
94
+ hasLoaded: true,
95
+ loadMoreStatus: 0,
96
+ loading: false,
97
+ goodsList: [],
98
+ });
99
+ return;
100
+ }
101
+
102
+ const _goodsList = reset ? spuList : goodsList.concat(spuList);
103
+ _goodsList.forEach((v) => {
104
+ v.tags = v.spuTagList.map((u) => u.title);
105
+ v.hideKey = { desc: true };
106
+ });
107
+ const _loadMoreStatus = _goodsList.length === totalCount ? 2 : 0;
108
+ this.pageNum = params.pageNum || 1;
109
+ this.total = totalCount;
110
+ this.setData({
111
+ goodsList: _goodsList,
112
+ loadMoreStatus: _loadMoreStatus,
113
+ });
114
+ } else {
115
+ this.setData({
116
+ loading: false,
117
+ });
118
+ wx.showToast({
119
+ title: '查询失败,请稍候重试',
120
+ });
121
+ }
122
+ } catch (error) {
123
+ this.setData({
124
+ loading: false,
125
+ });
126
+ }
127
+ this.setData({
128
+ hasLoaded: true,
129
+ loading: false,
130
+ });
131
+ },
132
+
133
+ handleCartTap() {
134
+ wx.switchTab({
135
+ url: '/pages/cart/index',
136
+ });
137
+ },
138
+
139
+ handleSubmit() {
140
+ this.setData(
141
+ {
142
+ goodsList: [],
143
+ loadMoreStatus: 0,
144
+ },
145
+ () => {
146
+ this.init(true);
147
+ },
148
+ );
149
+ },
150
+
151
+ onReachBottom() {
152
+ const { goodsList } = this.data;
153
+ const { total = 0 } = this;
154
+ if (goodsList.length === total) {
155
+ this.setData({
156
+ loadMoreStatus: 2,
157
+ });
158
+ return;
159
+ }
160
+ this.init(false);
161
+ },
162
+
163
+ handleAddCart() {
164
+ Toast({
165
+ context: this,
166
+ selector: '#t-toast',
167
+ message: '点击加购',
168
+ });
169
+ },
170
+
171
+ gotoGoodsDetail(e) {
172
+ const { index } = e.detail;
173
+ const { spuId } = this.data.goodsList[index];
174
+ wx.navigateTo({
175
+ url: `/pages/goods/details/index?spuId=${spuId}`,
176
+ });
177
+ },
178
+
179
+ handleFilterChange(e) {
180
+ const { overall, sorts } = e.detail;
181
+ const { total } = this;
182
+ const _filter = {
183
+ sorts,
184
+ overall,
185
+ };
186
+ this.setData({
187
+ filter: _filter,
188
+ sorts,
189
+ overall,
190
+ });
191
+
192
+ this.pageNum = 1;
193
+ this.setData(
194
+ {
195
+ goodsList: [],
196
+ loadMoreStatus: 0,
197
+ },
198
+ () => {
199
+ total && this.init(true);
200
+ },
201
+ );
202
+ },
203
+
204
+ showFilterPopup() {
205
+ this.setData({
206
+ show: true,
207
+ });
208
+ },
209
+
210
+ showFilterPopupClose() {
211
+ this.setData({
212
+ show: false,
213
+ });
214
+ },
215
+
216
+ onMinValAction(e) {
217
+ const { value } = e.detail;
218
+ this.setData({ minVal: value });
219
+ },
220
+
221
+ onMaxValAction(e) {
222
+ const { value } = e.detail;
223
+ this.setData({ maxVal: value });
224
+ },
225
+
226
+ reset() {
227
+ this.setData({ minVal: '', maxVal: '' });
228
+ },
229
+
230
+ confirm() {
231
+ const { minVal, maxVal } = this.data;
232
+ let message = '';
233
+ if (minVal && !maxVal) {
234
+ message = `价格最小是${minVal}`;
235
+ } else if (!minVal && maxVal) {
236
+ message = `价格范围是0-${minVal}`;
237
+ } else if (minVal && maxVal && minVal <= maxVal) {
238
+ message = `价格范围${minVal}-${this.data.maxVal}`;
239
+ } else {
240
+ message = '请输入正确范围';
241
+ }
242
+ if (message) {
243
+ Toast({
244
+ context: this,
245
+ selector: '#t-toast',
246
+ message,
247
+ });
248
+ }
249
+ this.pageNum = 1;
250
+ this.setData(
251
+ {
252
+ show: false,
253
+ minVal: '',
254
+ goodsList: [],
255
+ loadMoreStatus: 0,
256
+ maxVal: '',
257
+ },
258
+ () => {
259
+ this.init();
260
+ },
261
+ );
262
+ },
263
+ });
264
+ </script>
265
+
266
+ <template>
267
+ <view class="result-container [display:block] [&_.t-search]:[padding:0_30rpx] [&_.t-search]:[background-color:#fff] [&_.t-class__input-container]:[height:64rpx] [&_.t-class__input-container]:[border-radius:32rpx] [&_.t-search__left-icon]:[display:flex] [&_.t-search__left-icon]:[align-items:center] [&_.t-search__input]:[font-size:28rpx] [&_.t-search__input]:[color:#333] [&_.category-goods-list]:[background-color:#f2f2f2] [&_.category-goods-list]:[overflow-y:scroll] [&_.category-goods-list]:[padding:20rpx_24rpx] [&_.category-goods-list]:[-webkit-overflow-scrolling:touch] [&_.wr-goods-list]:[background:#f2f2f2] [&_.t-image__mask]:[display:flex] [&_.empty-wrap]:[margin-top:184rpx] [&_.empty-wrap]:[margin-bottom:120rpx] [&_.empty-wrap]:[height:300rpx] [&_.empty-wrap_.empty-tips_.empty-content_.content-text]:[margin-top:40rpx] [&_.price-container]:[padding:32rpx] [&_.price-container]:[height:100vh] [&_.price-container]:[max-width:632rpx] [&_.price-container]:[background-color:#fff] [&_.price-container]:[border-radius:30rpx_0_0_30rpx] [&_.price-between]:[font-size:26rpx] [&_.price-between]:[font-weight:500] [&_.price-between]:[color:rgba(51,_51,_51,_1)] [&_.price-ipts-wrap]:[width:100%] [&_.price-ipts-wrap]:[display:flex] [&_.price-ipts-wrap]:[flex-direction:row] [&_.price-ipts-wrap]:[justify-content:space-around] [&_.price-ipts-wrap]:[margin-top:24rpx] [&_.price-ipts-wrap_.price-divided]:[position:relative] [&_.price-ipts-wrap_.price-divided]:[width:22rpx] [&_.price-ipts-wrap_.price-divided]:[margin:0_20rpx] [&_.price-ipts-wrap_.price-divided]:[color:#222427] [&_.price-ipts-wrap_.price-ipt]:[box-sizing:border-box] [&_.price-ipts-wrap_.price-ipt]:[width:246rpx] [&_.price-ipts-wrap_.price-ipt]:[font-size:24rpx] [&_.price-ipts-wrap_.price-ipt]:[height:56rpx] [&_.price-ipts-wrap_.price-ipt]:[padding:0_24rpx] [&_.price-ipts-wrap_.price-ipt]:[text-align:center] [&_.price-ipts-wrap_.price-ipt]:[border-radius:8rpx] [&_.price-ipts-wrap_.price-ipt]:[color:#333] [&_.price-ipts-wrap_.price-ipt]:[background:rgba(245,_245,_245,_1)] [&_.t-input__control]:[font-size:24rpx] [&_.t-input__control]:[text-align:center]">
268
+ <t-search
269
+ t-class="t-search"
270
+ t-class-input-container="t-class__input-container"
271
+ t-class-left="t-search__left-icon"
272
+ t-class-input="t-search__input"
273
+ value="{{keywords}}"
274
+ leftIcon=""
275
+ placeholder="iPhone12pro"
276
+ bind:submit="handleSubmit"
277
+ >
278
+ <t-icon slot="left-icon" prefix="wr" name="search" size="40rpx" color="#bbb" />
279
+ </t-search>
280
+ <filter
281
+ wr-class="filter-container"
282
+ bind:change="handleFilterChange"
283
+ layout="{{layout}}"
284
+ sorts="{{sorts}}"
285
+ overall="{{overall}}"
286
+ bind:showFilterPopup="showFilterPopup"
287
+ >
288
+ <filter-popup
289
+ show="{{show}}"
290
+ slot="filterPopup"
291
+ bind:showFilterPopupClose="showFilterPopupClose"
292
+ bind:reset="reset"
293
+ bind:confirm="confirm"
294
+ >
295
+ <view class="price-container" slot="filterSlot">
296
+ <view class="price-between">价格区间</view>
297
+ <view class="price-ipts-wrap">
298
+ <t-input
299
+ type="number"
300
+ t-class="price-ipt"
301
+ t-class-input="t-class-input"
302
+ placeholder="最低价"
303
+ value="{{minVal}}"
304
+ bindchange="onMinValAction"
305
+ />
306
+ <view class="price-divided">-</view>
307
+ <t-input
308
+ type="number"
309
+ t-class="price-ipt"
310
+ t-class-input="t-class-input"
311
+ placeholder="最高价"
312
+ value="{{maxVal}}"
313
+ bindchange="onMaxValAction"
314
+ />
315
+ </view>
316
+ </view>
317
+ </filter-popup>
318
+ </filter>
319
+ <view class="empty-wrap" wx:if="{{goodsList.length === 0 && hasLoaded}}">
320
+ <t-empty t-class="empty-tips" size="240rpx" description="暂无相关商品" />
321
+ </view>
322
+ <view class="category-goods-list" wx:if="{{goodsList.length}}">
323
+ <goods-list
324
+ wr-class="wr-goods-list"
325
+ goodsList="{{goodsList}}"
326
+ bind:click="gotoGoodsDetail"
327
+ bind:addcart="handleAddCart"
328
+ />
329
+ </view>
330
+ <load-more wx:if="{{goodsList.length > 0}}" status="{{loadMoreStatus}}" no-more-text="没有更多了" />
331
+ </view>
332
+ <t-toast id="t-toast" />
333
+ </template>
334
+
335
+ <json>
336
+ {
337
+ "navigationBarTitleText": "搜索",
338
+ "usingComponents": {
339
+ "t-search": "tdesign-miniprogram/search/search",
340
+ "t-input": "tdesign-miniprogram/input/input",
341
+ "t-empty": "tdesign-miniprogram/empty/empty",
342
+ "t-toast": "tdesign-miniprogram/toast/toast",
343
+ "goods-list": "/components/goods-list/index",
344
+ "filter": "/components/filter/index",
345
+ "filter-popup": "/components/filter-popup/index",
346
+ "load-more": "/components/load-more/index",
347
+ "t-icon": "tdesign-miniprogram/icon/icon"
348
+ },
349
+ "onReachBottomDistance": 50
350
+ }</json>