create-weapp-vite 2.0.31 → 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 (175) hide show
  1. package/README.md +1 -0
  2. package/dist/{chunk-FGMHC2DJ.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 +1 -1
  7. package/templates/wevu-retail/.editorconfig +9 -0
  8. package/templates/wevu-retail/.vscode/settings.json +10 -0
  9. package/templates/wevu-retail/AGENTS.md +35 -0
  10. package/templates/wevu-retail/README.md +26 -0
  11. package/templates/wevu-retail/auto-import-components.json +1 -0
  12. package/templates/wevu-retail/gitignore +35 -0
  13. package/templates/wevu-retail/package.json +42 -0
  14. package/templates/wevu-retail/postcss.config.js +6 -0
  15. package/templates/wevu-retail/project.config.json +44 -0
  16. package/templates/wevu-retail/project.private.config.json +8 -0
  17. package/templates/wevu-retail/src/app.vue +104 -0
  18. package/templates/wevu-retail/src/common/updateManager.ts +29 -0
  19. package/templates/wevu-retail/src/components/filter/index.vue +134 -0
  20. package/templates/wevu-retail/src/components/filter-popup/index.vue +67 -0
  21. package/templates/wevu-retail/src/components/goods-card/index.vue +219 -0
  22. package/templates/wevu-retail/src/components/goods-list/index.vue +91 -0
  23. package/templates/wevu-retail/src/components/load-more/index.vue +99 -0
  24. package/templates/wevu-retail/src/components/loading-content/index.vue +48 -0
  25. package/templates/wevu-retail/src/components/price/index.vue +104 -0
  26. package/templates/wevu-retail/src/components/promotion/ui-coupon-card/index.vue +143 -0
  27. package/templates/wevu-retail/src/components/promotion/ui-coupon-card/tools.wxs +18 -0
  28. package/templates/wevu-retail/src/components/swipeout/index.vue +118 -0
  29. package/templates/wevu-retail/src/components/swipeout/swipe.wxs +151 -0
  30. package/templates/wevu-retail/src/components/webp-image/index.vue +105 -0
  31. package/templates/wevu-retail/src/components/webp-image/utils.wxs +140 -0
  32. package/templates/wevu-retail/src/config/index.ts +20437 -0
  33. package/templates/wevu-retail/src/custom-tab-bar/data.ts +22 -0
  34. package/templates/wevu-retail/src/custom-tab-bar/index.vue +62 -0
  35. package/templates/wevu-retail/src/model/activities.ts +7 -0
  36. package/templates/wevu-retail/src/model/activity.ts +18 -0
  37. package/templates/wevu-retail/src/model/address.ts +31 -0
  38. package/templates/wevu-retail/src/model/cart.ts +306 -0
  39. package/templates/wevu-retail/src/model/category.ts +175 -0
  40. package/templates/wevu-retail/src/model/comments/queryDetail.ts +50 -0
  41. package/templates/wevu-retail/src/model/comments.ts +298 -0
  42. package/templates/wevu-retail/src/model/coupon.ts +39 -0
  43. package/templates/wevu-retail/src/model/detailsComments.ts +30 -0
  44. package/templates/wevu-retail/src/model/good.ts +1904 -0
  45. package/templates/wevu-retail/src/model/goods.ts +7 -0
  46. package/templates/wevu-retail/src/model/order/applyService.ts +329 -0
  47. package/templates/wevu-retail/src/model/order/orderConfirm.ts +147 -0
  48. package/templates/wevu-retail/src/model/order/orderDetail.ts +1191 -0
  49. package/templates/wevu-retail/src/model/order/orderList.ts +1033 -0
  50. package/templates/wevu-retail/src/model/promotion.ts +20 -0
  51. package/templates/wevu-retail/src/model/search.ts +60 -0
  52. package/templates/wevu-retail/src/model/submitComment.ts +58 -0
  53. package/templates/wevu-retail/src/model/swiper.ts +39 -0
  54. package/templates/wevu-retail/src/model/usercenter.ts +52 -0
  55. package/templates/wevu-retail/src/pages/cart/components/cart-bar/index.vue +104 -0
  56. package/templates/wevu-retail/src/pages/cart/components/cart-empty/index.vue +41 -0
  57. package/templates/wevu-retail/src/pages/cart/components/cart-group/index.vue +333 -0
  58. package/templates/wevu-retail/src/pages/cart/components/cart-group/index.wxs +5 -0
  59. package/templates/wevu-retail/src/pages/cart/components/cart-group/utils.wxs +20 -0
  60. package/templates/wevu-retail/src/pages/cart/components/goods-card/index.vue +334 -0
  61. package/templates/wevu-retail/src/pages/cart/components/specs-popup/index.vue +100 -0
  62. package/templates/wevu-retail/src/pages/cart/index.vue +342 -0
  63. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-sidebar/README.md +95 -0
  64. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.vue +73 -0
  65. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-sidebar/index.vue +121 -0
  66. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.vue +74 -0
  67. package/templates/wevu-retail/src/pages/category/components/goods-category/components/c-tabbar/index.vue +102 -0
  68. package/templates/wevu-retail/src/pages/category/components/goods-category/index.vue +137 -0
  69. package/templates/wevu-retail/src/pages/category/index.vue +50 -0
  70. package/templates/wevu-retail/src/pages/coupon/components/coupon-card/index.vue +95 -0
  71. package/templates/wevu-retail/src/pages/coupon/components/floating-button/index.vue +44 -0
  72. package/templates/wevu-retail/src/pages/coupon/coupon-activity-goods/index.vue +135 -0
  73. package/templates/wevu-retail/src/pages/coupon/coupon-detail/index.vue +94 -0
  74. package/templates/wevu-retail/src/pages/coupon/coupon-list/index.vue +136 -0
  75. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png +0 -0
  76. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/components/images-videos/index.vue +65 -0
  77. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/components/my-video/index.vue +92 -0
  78. package/templates/wevu-retail/src/pages/goods/comments/components/comments-card/index.vue +93 -0
  79. package/templates/wevu-retail/src/pages/goods/comments/create/index.vue +196 -0
  80. package/templates/wevu-retail/src/pages/goods/comments/index.vue +293 -0
  81. package/templates/wevu-retail/src/pages/goods/details/components/buy-bar/index.vue +117 -0
  82. package/templates/wevu-retail/src/pages/goods/details/components/goods-specs-popup/index.vue +440 -0
  83. package/templates/wevu-retail/src/pages/goods/details/components/promotion-popup/index.vue +83 -0
  84. package/templates/wevu-retail/src/pages/goods/details/index.vue +598 -0
  85. package/templates/wevu-retail/src/pages/goods/list/index.vue +299 -0
  86. package/templates/wevu-retail/src/pages/goods/result/index.vue +350 -0
  87. package/templates/wevu-retail/src/pages/goods/search/index.vue +196 -0
  88. package/templates/wevu-retail/src/pages/home/home.vue +215 -0
  89. package/templates/wevu-retail/src/pages/home/readme +8 -0
  90. package/templates/wevu-retail/src/pages/order/after-service-detail/api.ts +34 -0
  91. package/templates/wevu-retail/src/pages/order/after-service-detail/index.vue +430 -0
  92. package/templates/wevu-retail/src/pages/order/after-service-list/api.ts +1262 -0
  93. package/templates/wevu-retail/src/pages/order/after-service-list/index.vue +299 -0
  94. package/templates/wevu-retail/src/pages/order/apply-service/index.vue +665 -0
  95. package/templates/wevu-retail/src/pages/order/components/after-service-button-bar/index.vue +142 -0
  96. package/templates/wevu-retail/src/pages/order/components/customer-service/index.vue +75 -0
  97. package/templates/wevu-retail/src/pages/order/components/goods-card/index.vue +356 -0
  98. package/templates/wevu-retail/src/pages/order/components/noGoods/noGood.wxs +17 -0
  99. package/templates/wevu-retail/src/pages/order/components/noGoods/noGoods.vue +125 -0
  100. package/templates/wevu-retail/src/pages/order/components/order-button-bar/index.vue +262 -0
  101. package/templates/wevu-retail/src/pages/order/components/order-card/index.vue +126 -0
  102. package/templates/wevu-retail/src/pages/order/components/order-goods-card/index.vue +86 -0
  103. package/templates/wevu-retail/src/pages/order/components/reason-sheet/index.vue +161 -0
  104. package/templates/wevu-retail/src/pages/order/components/reason-sheet/reasonSheet.ts +25 -0
  105. package/templates/wevu-retail/src/pages/order/components/selectCoupons/mock.ts +22 -0
  106. package/templates/wevu-retail/src/pages/order/components/selectCoupons/selectCoupon.wxs +16 -0
  107. package/templates/wevu-retail/src/pages/order/components/selectCoupons/selectCoupons.vue +207 -0
  108. package/templates/wevu-retail/src/pages/order/components/specs-goods-card/index.vue +185 -0
  109. package/templates/wevu-retail/src/pages/order/config.ts +94 -0
  110. package/templates/wevu-retail/src/pages/order/delivery-detail/index.vue +145 -0
  111. package/templates/wevu-retail/src/pages/order/delivery-detail/isUrl.wxs +7 -0
  112. package/templates/wevu-retail/src/pages/order/fill-tracking-no/api.ts +71 -0
  113. package/templates/wevu-retail/src/pages/order/fill-tracking-no/index.vue +267 -0
  114. package/templates/wevu-retail/src/pages/order/invoice/index.vue +94 -0
  115. package/templates/wevu-retail/src/pages/order/order-confirm/components/address-card/index.vue +78 -0
  116. package/templates/wevu-retail/src/pages/order/order-confirm/getNotes.wxs +11 -0
  117. package/templates/wevu-retail/src/pages/order/order-confirm/handleInvoice.wxs +11 -0
  118. package/templates/wevu-retail/src/pages/order/order-confirm/index.vue +707 -0
  119. package/templates/wevu-retail/src/pages/order/order-confirm/order.wxs +8 -0
  120. package/templates/wevu-retail/src/pages/order/order-confirm/pay.ts +115 -0
  121. package/templates/wevu-retail/src/pages/order/order-detail/index.vue +456 -0
  122. package/templates/wevu-retail/src/pages/order/order-list/index.vue +288 -0
  123. package/templates/wevu-retail/src/pages/order/pay-result/index.vue +77 -0
  124. package/templates/wevu-retail/src/pages/order/receipt/index.vue +336 -0
  125. package/templates/wevu-retail/src/pages/promotion/promotion-detail/index.vue +145 -0
  126. package/templates/wevu-retail/src/pages/user/address/edit/index.vue +514 -0
  127. package/templates/wevu-retail/src/pages/user/address/list/index.vue +249 -0
  128. package/templates/wevu-retail/src/pages/user/components/t-location/index.vue +156 -0
  129. package/templates/wevu-retail/src/pages/user/components/ui-address-item/index.vue +92 -0
  130. package/templates/wevu-retail/src/pages/user/name-edit/index.vue +49 -0
  131. package/templates/wevu-retail/src/pages/user/person-info/index.vue +198 -0
  132. package/templates/wevu-retail/src/pages/usercenter/address/edit/util.ts +33 -0
  133. package/templates/wevu-retail/src/pages/usercenter/components/order-group/index.vue +90 -0
  134. package/templates/wevu-retail/src/pages/usercenter/components/ui-select-picker/index.vue +108 -0
  135. package/templates/wevu-retail/src/pages/usercenter/components/user-center-card/index.vue +82 -0
  136. package/templates/wevu-retail/src/pages/usercenter/index.vue +301 -0
  137. package/templates/wevu-retail/src/services/_utils/delay.ts +3 -0
  138. package/templates/wevu-retail/src/services/_utils/timeout.ts +3 -0
  139. package/templates/wevu-retail/src/services/activity/fetchActivity.ts +20 -0
  140. package/templates/wevu-retail/src/services/activity/fetchActivityList.ts +20 -0
  141. package/templates/wevu-retail/src/services/address/edit.ts +33 -0
  142. package/templates/wevu-retail/src/services/address/fetchAddress.ts +48 -0
  143. package/templates/wevu-retail/src/services/address/list.ts +31 -0
  144. package/templates/wevu-retail/src/services/cart/cart.ts +20 -0
  145. package/templates/wevu-retail/src/services/comments/fetchComments.ts +18 -0
  146. package/templates/wevu-retail/src/services/comments/fetchCommentsCount.ts +18 -0
  147. package/templates/wevu-retail/src/services/coupon/index.ts +65 -0
  148. package/templates/wevu-retail/src/services/good/comments/fetchCommentDetail.ts +20 -0
  149. package/templates/wevu-retail/src/services/good/fetchCategoryList.ts +18 -0
  150. package/templates/wevu-retail/src/services/good/fetchGood.ts +18 -0
  151. package/templates/wevu-retail/src/services/good/fetchGoods.ts +29 -0
  152. package/templates/wevu-retail/src/services/good/fetchGoodsDetailsComments.ts +37 -0
  153. package/templates/wevu-retail/src/services/good/fetchGoodsList.ts +39 -0
  154. package/templates/wevu-retail/src/services/good/fetchSearchHistory.ts +35 -0
  155. package/templates/wevu-retail/src/services/good/fetchSearchResult.ts +38 -0
  156. package/templates/wevu-retail/src/services/home/home.ts +53 -0
  157. package/templates/wevu-retail/src/services/order/applyService.ts +70 -0
  158. package/templates/wevu-retail/src/services/order/orderConfirm.ts +69 -0
  159. package/templates/wevu-retail/src/services/order/orderDetail.ts +39 -0
  160. package/templates/wevu-retail/src/services/order/orderList.ts +39 -0
  161. package/templates/wevu-retail/src/services/order/orderSubmitComment.ts +22 -0
  162. package/templates/wevu-retail/src/services/promotion/detail.ts +18 -0
  163. package/templates/wevu-retail/src/services/usercenter/fetchPerson.ts +28 -0
  164. package/templates/wevu-retail/src/services/usercenter/fetchUsercenter.ts +18 -0
  165. package/templates/wevu-retail/src/sitemap.json +7 -0
  166. package/templates/wevu-retail/src/utils/addressParse.ts +25 -0
  167. package/templates/wevu-retail/src/utils/getPermission.ts +45 -0
  168. package/templates/wevu-retail/src/utils/mock.ts +51 -0
  169. package/templates/wevu-retail/src/utils/util.ts +134 -0
  170. package/templates/wevu-retail/src/vite-env.d.ts +1 -0
  171. package/templates/wevu-retail/tailwind.config.ts +15 -0
  172. package/templates/wevu-retail/tsconfig.app.json +58 -0
  173. package/templates/wevu-retail/tsconfig.json +11 -0
  174. package/templates/wevu-retail/tsconfig.node.json +33 -0
  175. package/templates/wevu-retail/vite.config.ts +14 -0
@@ -0,0 +1,142 @@
1
+ <script lang="ts">
2
+ import Dialog from 'tdesign-miniprogram/dialog/index';
3
+ import Toast from 'tdesign-miniprogram/toast/index';
4
+
5
+ import { cancelRights } from '../../after-service-detail/api';
6
+ import { ServiceButtonTypes } from '../../config';
7
+
8
+ Component({
9
+ properties: {
10
+ service: {
11
+ type: Object,
12
+ observer(service) {
13
+ const buttonsRight = service.buttons || service.buttonVOs || [];
14
+ this.setData({
15
+ buttons: {
16
+ left: [],
17
+ right: buttonsRight,
18
+ },
19
+ });
20
+ },
21
+ },
22
+ },
23
+
24
+ data: {
25
+ service: {},
26
+ buttons: {
27
+ left: [],
28
+ right: [],
29
+ },
30
+ },
31
+
32
+ methods: {
33
+ // 点击【订单操作】按钮,根据按钮类型分发
34
+ onServiceBtnTap(e) {
35
+ const { type } = e.currentTarget.dataset;
36
+ switch (type) {
37
+ case ServiceButtonTypes.REVOKE:
38
+ this.onConfirm(this.data.service);
39
+ break;
40
+ case ServiceButtonTypes.FILL_TRACKING_NO:
41
+ this.onFillTrackingNo(this.data.service);
42
+ break;
43
+ case ServiceButtonTypes.CHANGE_TRACKING_NO:
44
+ this.onChangeTrackingNo(this.data.service);
45
+ break;
46
+ case ServiceButtonTypes.VIEW_DELIVERY:
47
+ this.viewDelivery(this.data.service);
48
+ break;
49
+ }
50
+ },
51
+
52
+ onFillTrackingNo(service) {
53
+ wx.navigateTo({
54
+ url: `/pages/order/fill-tracking-no/index?rightsNo=${service.id}`,
55
+ });
56
+ },
57
+
58
+ viewDelivery(service) {
59
+ wx.navigateTo({
60
+ url: `/pages/order/delivery-detail/index?data=${JSON.stringify(
61
+ service.logistics || service.logisticsVO,
62
+ )}&source=2`,
63
+ });
64
+ },
65
+
66
+ onChangeTrackingNo(service) {
67
+ wx.navigateTo({
68
+ url: `/pages/order/fill-tracking-no/index?rightsNo=${
69
+ service.id
70
+ }&logisticsNo=${service.logisticsNo}&logisticsCompanyName=${
71
+ service.logisticsCompanyName
72
+ }&logisticsCompanyCode=${service.logisticsCompanyCode}&remark=${
73
+ service.remark || ''
74
+ }`,
75
+ });
76
+ },
77
+
78
+ onConfirm() {
79
+ Dialog.confirm({
80
+ title: '是否撤销退货申请?',
81
+ content: '',
82
+ confirmBtn: '撤销申请',
83
+ cancelBtn: '不撤销',
84
+ }).then(() => {
85
+ const params = { rightsNo: this.data.service.id };
86
+ return cancelRights(params).then(() => {
87
+ Toast({
88
+ context: this,
89
+ selector: '#t-toast',
90
+ message: '你确认撤销申请',
91
+ });
92
+ });
93
+ });
94
+ },
95
+ },
96
+ });
97
+ </script>
98
+
99
+ <template>
100
+ <view class="btn-bar [display:flex] [justify-content:space-between] [align-items:center] [line-height:1] [&_.order-btn]:[background-color:inherit] [&_.order-btn]:[font-size:26rpx] [&_.order-btn]:[padding:16rpx_28rpx] [&_.order-btn]:[line-height:1] [&_.order-btn]:[border-radius:unset] [&_.order-btn]:[min-width:160rpx] [&_.order-btn]:[border-radius:32rpx] [&_.order-btn]:[height:60rpx] [&_.order-btn]:[margin-right:10rpx] [&_.left_.delete-btn]:[font-size:22rpx]">
101
+ <view class="left">
102
+ <t-button
103
+ wx:for="{{buttons.left}}"
104
+ wx:key="type"
105
+ wx:for-item="leftBtn"
106
+ size="extra-small"
107
+ shape="round"
108
+ t-class="order-btn delete-btn"
109
+ catchtap="onServiceBtnTap"
110
+ data-type="{{leftBtn.type}}"
111
+ >
112
+ {{leftBtn.name}}
113
+ </t-button>
114
+ </view>
115
+ <view class="right">
116
+ <t-button
117
+ wx:for="{{buttons.right}}"
118
+ wx:key="type"
119
+ wx:for-item="rightBtn"
120
+ size="extra-small"
121
+ variant="{{ rightBtn.primary ? 'base' : 'outline'}}"
122
+ shape="round"
123
+ t-class="order-btn {{rightBtn.primary ? 'primary' : 'normal'}}"
124
+ catchtap="onServiceBtnTap"
125
+ data-type="{{rightBtn.type}}"
126
+ open-type="{{ rightBtn.openType }}"
127
+ data-share="{{ rightBtn.dataShare }}"
128
+ >
129
+ {{rightBtn.name}}
130
+ </t-button>
131
+ </view>
132
+ </view>
133
+ </template>
134
+
135
+ <json>
136
+ {
137
+ "component": true,
138
+ "usingComponents": {
139
+ "t-button": "tdesign-miniprogram/button/button"
140
+ }
141
+ }
142
+ </json>
@@ -0,0 +1,75 @@
1
+ <script lang="ts">
2
+ Component({
3
+ externalClasses: ['wr-class'],
4
+
5
+ properties: {
6
+ phoneNumber: String,
7
+ desc: String,
8
+ },
9
+
10
+ data: {
11
+ show: false,
12
+ },
13
+
14
+ methods: {
15
+ onBtnTap() {
16
+ this.setData({
17
+ show: true,
18
+ });
19
+ },
20
+
21
+ onDialogClose() {
22
+ this.setData({
23
+ show: false,
24
+ });
25
+ },
26
+
27
+ onCall() {
28
+ const { phoneNumber } = this.properties;
29
+ wx.makePhoneCall({
30
+ phoneNumber,
31
+ });
32
+ },
33
+ onCallOnlineService() {
34
+ wx.showToast({
35
+ title: '你点击了在线客服',
36
+ });
37
+ },
38
+ },
39
+ });
40
+ </script>
41
+
42
+ <template>
43
+ <!-- 联系客服按钮 -->
44
+ <view class="wr-class customer-service text-btn [display:inline] [color:#333] [font-size:24rpx]" hover-class="text-btn--active [opacity:0.5]" bindtap="onBtnTap">联系客服</view>
45
+ <!-- 联系客服弹框 -->
46
+ <t-popup visible="{{show}}" placement="bottom" bind:visible-change="onDialogClose">
47
+ <view class="dialog--customer-service [background-color:#f3f4f5] [overflow:hidden] [&_.content]:[font-size:26rpx] [&_.content]:[margin:32rpx_30rpx] [&_.content]:[text-align:center] [&_.content_.title]:[display:inline] [&_.content_.title]:[color:#999999] [&_.content_.title]:[font-weight:bold] [&_.content_.subtitle]:[display:inline] [&_.content_.subtitle]:[color:#999999] [&_.options_.option]:[color:#333333] [&_.options_.option]:[font-size:30rpx] [&_.options_.option]:[text-align:center] [&_.options_.option]:[height:100rpx] [&_.options_.option]:[line-height:100rpx] [&_.options_.option]:[background-color:white] [&_.options_.option--active]:[opacity:0.5] [&_.options_.option_.main]:[color:#333] [&_.options_.option_.online]:[position:relative] [&_.options_.option_.online]:[top:-17rpx] [&_.options_.option_.online]:[margin-bottom:2rpx]">
48
+ <view class="content" wx:if="{{desc}}">
49
+ <view class="title">服务时间:</view>
50
+ <text class="subtitle">{{desc}}</text>
51
+ </view>
52
+ <view class="options">
53
+ <view
54
+ class="option main"
55
+ hover-class="text-btn--active [opacity:0.5]"
56
+ wx:if="{{phoneNumber}}"
57
+ bindtap="onCall"
58
+ >呼叫 {{phoneNumber}}
59
+ </view>
60
+ <view class="option main online" hover-class="text-btn--active [opacity:0.5]" bindtap="onCallOnlineService">在线客服</view>
61
+ <view class="option" hover-class="text-btn--active [opacity:0.5]" bindtap="onDialogClose">取消</view>
62
+ </view>
63
+ </view>
64
+ </t-popup>
65
+
66
+ </template>
67
+
68
+ <json>
69
+ {
70
+ "component": true,
71
+ "usingComponents": {
72
+ "t-popup": "tdesign-miniprogram/popup/popup"
73
+ }
74
+ }
75
+ </json>
@@ -0,0 +1,356 @@
1
+ <script lang="ts">
2
+ Component({
3
+ options: {
4
+ multipleSlots: true, // 在组件定义时的选项中启用多slot支持
5
+ addGlobalClass: true,
6
+ },
7
+ intersectionObserverContext: null,
8
+
9
+ externalClasses: [
10
+ 'card-class',
11
+ 'title-class',
12
+ 'desc-class',
13
+ 'num-class',
14
+ 'thumb-class',
15
+ 'specs-class',
16
+ 'price-class',
17
+ 'origin-price-class',
18
+ 'price-prefix-class',
19
+ ],
20
+
21
+ relations: {
22
+ '../order-card/index': {
23
+ type: 'ancestor',
24
+ linked(target) {
25
+ this.parent = target;
26
+ },
27
+ },
28
+ },
29
+
30
+ properties: {
31
+ hidden: {
32
+ // 设置为null代表不做类型转换
33
+ type: null,
34
+ value: false,
35
+ observer(hidden) {
36
+ // null就是代表没有设置,没有设置的话不setData,防止祖先组件触发的setHidden操作被覆盖
37
+ if (hidden !== null) {
38
+ this.setHidden(!!hidden);
39
+ }
40
+ },
41
+ },
42
+ id: {
43
+ type: String,
44
+ // `goods-card-88888888`
45
+ // 不能在这里写生成逻辑,如果在这里写,那么假设有多个goods-list时,他们将共享这个值
46
+ value: '',
47
+ observer: (id) => {
48
+ this.genIndependentID(id);
49
+ if (this.properties.thresholds?.length) {
50
+ this.createIntersectionObserverHandle();
51
+ }
52
+ },
53
+ },
54
+ data: {
55
+ type: Object,
56
+ observer(goods) {
57
+ // 有ID的商品才渲染
58
+ if (!goods) {
59
+ return;
60
+ }
61
+
62
+ /** 划线价是否有效 */
63
+ let isValidityLinePrice = true;
64
+ // 判断一次划线价格是否合理
65
+ if (
66
+ goods.originPrice &&
67
+ goods.price &&
68
+ goods.originPrice < goods.price
69
+ ) {
70
+ isValidityLinePrice = false;
71
+ }
72
+
73
+ // 敲定换行数量默认值
74
+ if (goods.lineClamp === undefined || goods.lineClamp <= 0) {
75
+ // tag数组长度 大于0 且 可见
76
+ // 指定换行为1行
77
+ if ((goods.tags?.length || 0) > 0 && !goods.hideKey?.tags) {
78
+ goods.lineClamp = 1;
79
+ } else {
80
+ goods.lineClamp = 2;
81
+ }
82
+ }
83
+
84
+ this.setData({ goods, isValidityLinePrice });
85
+ },
86
+ },
87
+ layout: {
88
+ type: String,
89
+ value: 'horizontal',
90
+ },
91
+ thumbMode: {
92
+ type: String,
93
+ value: 'aspectFill',
94
+ },
95
+ thumbWidth: Number,
96
+ thumbHeight: Number,
97
+ priceFill: {
98
+ type: Boolean,
99
+ value: true,
100
+ },
101
+ currency: {
102
+ type: String,
103
+ value: '¥',
104
+ },
105
+ lazyLoad: {
106
+ type: Boolean,
107
+ value: false,
108
+ },
109
+ centered: {
110
+ type: Boolean,
111
+ value: false,
112
+ },
113
+ showCart: {
114
+ type: Boolean,
115
+ value: false,
116
+ },
117
+ pricePrefix: {
118
+ type: String,
119
+ value: '',
120
+ },
121
+ cartSize: {
122
+ type: Number,
123
+ value: 48,
124
+ },
125
+ cartColor: {
126
+ type: String,
127
+ value: '#FA550F',
128
+ },
129
+ /** 元素可见监控阈值, 数组长度大于0就创建 */
130
+ thresholds: {
131
+ type: Array,
132
+ value: [],
133
+ observer(current) {
134
+ if (current && current.length) {
135
+ this.createIntersectionObserverHandle();
136
+ } else {
137
+ this.clearIntersectionObserverHandle();
138
+ }
139
+ },
140
+ },
141
+ specsIconClassPrefix: {
142
+ type: String,
143
+ value: 'wr',
144
+ },
145
+ specsIcon: {
146
+ type: String,
147
+ value: 'expand_more',
148
+ },
149
+ addCartIconClassPrefix: {
150
+ type: String,
151
+ value: 'wr',
152
+ },
153
+ addCartIcon: {
154
+ type: String,
155
+ value: 'cart',
156
+ },
157
+ },
158
+
159
+ data: {
160
+ hiddenInData: false,
161
+ independentID: '',
162
+ goods: { id: '' },
163
+ /** 保证划线价格不小于原价,否则不渲染划线价 */
164
+ isValidityLinePrice: false,
165
+ },
166
+
167
+ lifetimes: {
168
+ ready() {
169
+ this.init();
170
+ },
171
+ detached() {
172
+ this.clear();
173
+ },
174
+ },
175
+
176
+ methods: {
177
+ clickHandle() {
178
+ this.triggerEvent('click', { goods: this.data.goods });
179
+ },
180
+ clickThumbHandle() {
181
+ this.triggerEvent('thumb', { goods: this.data.goods });
182
+ },
183
+ clickTagHandle(evt) {
184
+ const { index } = evt.currentTarget.dataset;
185
+ this.triggerEvent('tag', { goods: this.data.goods, index });
186
+ },
187
+ // 加入购物车
188
+ addCartHandle(e) {
189
+ const { id } = e.currentTarget;
190
+ const { id: cardID } = e.currentTarget.dataset;
191
+ this.triggerEvent('add-cart', {
192
+ ...e.detail,
193
+ id,
194
+ cardID,
195
+ goods: this.data.goods,
196
+ });
197
+ },
198
+ genIndependentID(id, cb) {
199
+ let independentID;
200
+ if (id) {
201
+ independentID = id;
202
+ } else {
203
+ // `goods-card-88888888`
204
+ independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`;
205
+ }
206
+ this.setData({ independentID }, cb);
207
+ },
208
+
209
+ init() {
210
+ const { thresholds, id, hidden } = this.properties;
211
+ if (hidden !== null) {
212
+ this.setHidden(!!hidden);
213
+ }
214
+
215
+ this.genIndependentID(id || '', () => {
216
+ if (thresholds && thresholds.length) {
217
+ this.createIntersectionObserverHandle();
218
+ }
219
+ });
220
+ },
221
+
222
+ clear() {
223
+ this.clearIntersectionObserverHandle();
224
+ },
225
+
226
+ setHidden(hidden) {
227
+ this.setData({ hiddenInData: !!hidden });
228
+ },
229
+
230
+ createIntersectionObserverHandle() {
231
+ if (this.intersectionObserverContext || !this.data.independentID) {
232
+ return;
233
+ }
234
+
235
+ this.intersectionObserverContext = wx
236
+ .createIntersectionObserver(this, {
237
+ thresholds: this.properties.thresholds,
238
+ })
239
+ .relativeToViewport();
240
+
241
+ this.intersectionObserverContext.observe(
242
+ `#${this.data.independentID}`,
243
+ (res) => {
244
+ this.intersectionObserverCB(res);
245
+ },
246
+ );
247
+ },
248
+ intersectionObserverCB(ob) {
249
+ this.triggerEvent('ob', {
250
+ goods: this.data.goods,
251
+ context: this.intersectionObserverContext,
252
+ ob,
253
+ });
254
+ },
255
+ clearIntersectionObserverHandle() {
256
+ if (this.intersectionObserverContext) {
257
+ try {
258
+ this.intersectionObserverContext.disconnect();
259
+ } catch (e) {}
260
+
261
+ this.intersectionObserverContext = null;
262
+ }
263
+ },
264
+ },
265
+ });
266
+ </script>
267
+
268
+ <template>
269
+ <view
270
+ id="{{independentID}}"
271
+ class="wr-goods-card card-class {{ layout }} {{ centered ? 'center' : ''}} [box-sizing:border-box] [font-size:24rpx] [&_.center_.wr-goods-card__main]:[align-items:center] [&_.center_.wr-goods-card__main]:[justify-content:center] [&_.horizontal-wrap_.wr-goods-card__thumb]:[width:192rpx] [&_.horizontal-wrap_.wr-goods-card__thumb]:[height:192rpx] [&_.horizontal-wrap_.wr-goods-card__thumb]:[border-radius:8rpx] [&_.horizontal-wrap_.wr-goods-card__thumb]:[overflow:hidden] [&_.horizontal-wrap_.wr-goods-card__body]:[flex-direction:column] [&_.horizontal-wrap_.wr-goods-card__short_content]:[flex-direction:row] [&_.horizontal-wrap_.wr-goods-card__short_content]:[align-items:center] [&_.horizontal-wrap_.wr-goods-card__short_content]:[margin:16rpx_0_0_0] [&_.horizontal-wrap_.wr-goods-card__num]:[margin:0_0_0_auto] [&_.vertical_.wr-goods-card__main]:[padding:0_0_22rpx_0] [&_.vertical_.wr-goods-card__main]:[flex-direction:column] [&_.vertical_.wr-goods-card__thumb]:[width:340rpx] [&_.vertical_.wr-goods-card__thumb]:[height:340rpx] [&_.vertical_.wr-goods-card__body]:[margin:20rpx_20rpx_0_20rpx] [&_.vertical_.wr-goods-card__body]:[flex-direction:column] [&_.vertical_.wr-goods-card__long_content]:[overflow:hidden] [&_.vertical_.wr-goods-card__title]:[line-height:36rpx] [&_.vertical_.wr-goods-card__short_content]:[margin:20rpx_0_0_0] [&_.vertical_.wr-goods-card__price]:[order:2] [&_.vertical_.wr-goods-card__price]:[color:#fa4126] [&_.vertical_.wr-goods-card__price]:[margin:20rpx_0_0_0] [&_.vertical_.wr-goods-card__origin-price]:[order:1] [&_.vertical_.wr-goods-card__add-cart]:[position:absolute] [&_.vertical_.wr-goods-card__add-cart]:[bottom:20rpx] [&_.vertical_.wr-goods-card__add-cart]:[right:20rpx]"
272
+ bind:tap="clickHandle"
273
+ data-goods="{{ goods }}"
274
+ hidden="{{hiddenInData}}"
275
+ >
276
+ <view class="wr-goods-card__main [position:relative] [display:flex] [line-height:1] [flex-direction:row] [background:transparent] [padding:16rpx_0rpx]">
277
+ <view class="wr-goods-card__thumb thumb-class [flex-shrink:0] [position:relative] [width:176rpx] [height:176rpx] [&:empty]:[display:none] [&:empty]:[margin:0]" bind:tap="clickThumbHandle">
278
+ <!-- data-src 是方便加购动画读取图片用的 -->
279
+ <t-image
280
+ t-class="wr-goods-card__thumb-com [width:176rpx] [height:176rpx] [border-radius:8rpx] [overflow:hidden]"
281
+ wx:if="{{ !!goods.thumb && !goods.hideKey.thumb }}"
282
+ src="{{ goods.thumb }}"
283
+ mode="{{ thumbMode }}"
284
+ lazy-load="{{ lazyLoad }}"
285
+ />
286
+ <slot name="thumb-cover" />
287
+ </view>
288
+
289
+ <view class="wr-goods-card__body [display:flex] [margin:0_0_0_16rpx] [flex-direction:row] [flex:1_1_auto] [min-height:176rpx]">
290
+ <view class="wr-goods-card__long_content [display:flex] [flex-direction:column] [overflow:hidden] [flex:1_1_auto] [&_.goods_tips]:[width:100%] [&_.goods_tips]:[margin-top:16rpx] [&_.goods_tips]:[text-align:right] [&_.goods_tips]:[color:#fa4126] [&_.goods_tips]:[font-size:24rpx] [&_.goods_tips]:[line-height:32rpx] [&_.goods_tips]:[font-weight:bold]">
291
+ <view wx:if="{{ goods.title && !goods.hideKey.title }}" class="wr-goods-card__title title-class [flex-shrink:0] [font-size:28rpx] [color:#333] [line-height:40rpx] [font-weight:400] [display:-webkit-box] [-webkit-box-orient:vertical] [overflow:hidden] [word-break:break-word]" style="-webkit-line-clamp: {{ goods.lineClamp }};">
292
+ <slot name="before-title" />
293
+ {{ goods.title }}
294
+ </view>
295
+ <slot name="after-title" />
296
+ <view wx:if="{{ goods.desc && !goods.hideKey.desc }}" class="wr-goods-card__desc desc-class [font-size:24rpx] [color:#f5f5f5] [line-height:40rpx] [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:2] [overflow:hidden]">{{ goods.desc }}</view>
297
+ <slot name="after-desc" />
298
+ <view wx:if="{{ goods.specs && goods.specs.length > 0 && !goods.hideKey.specs }}" class="wr-goods-card__specs__desc specs-class [font-size:24rpx] [height:32rpx] [line-height:32rpx] [color:#999999] [margin:8rpx_0] [display:flex] [align-self:flex-start] [flex-direction:row]" bind:tap="clickSpecsHandle">
299
+ <view class="wr-goods-card__specs__desc-text [height:100%] [max-width:380rpx] [word-break:break-all] [overflow:hidden] [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:1]">{{ goods.specs }}</view>
300
+ </view>
301
+ <view class="goods_tips" wx:if="{{goods.stockQuantity !== 0 && goods.quantity >= goods.stockQuantity}}">库存不足</view>
302
+ </view>
303
+
304
+ <view class="wr-goods-card__short_content [display:flex] [flex-direction:column] [justify-content:flex-start] [align-items:flex-end] [margin:0_0_0_46rpx] [&_.no_storage]:[display:flex] [&_.no_storage]:[align-items:center] [&_.no_storage]:[justify-content:space-between] [&_.no_storage]:[height:40rpx] [&_.no_storage]:[color:#333] [&_.no_storage]:[font-size:24rpx] [&_.no_storage]:[line-height:32rpx] [&_.no_storage]:[width:100%]">
305
+ <block wx:if="{{goods.stockQuantity !== 0}}">
306
+ <view wx:if="{{ pricePrefix }}" class="wr-goods-card__price__prefix price-prefix-class [order:0] [color:#666] [margin:0]">{{ pricePrefix }}</view>
307
+ <slot name="price-prefix" />
308
+ <view wx:if="{{ goods.price && !goods.hideKey.price }}" class="wr-goods-card__price [white-space:nowrap] [font-weight:bold] [order:1] [color:#fa4126] [font-size:36rpx] [margin:0] [line-height:48rpx]">
309
+ <price
310
+ wr-class="price-class"
311
+ symbol="{{currency}}"
312
+ price="{{goods.price}}"
313
+ fill="{{priceFill}}"
314
+ decimalSmaller
315
+ />
316
+ </view>
317
+ <view wx:if="{{ goods.originPrice && !goods.hideKey.originPrice && isValidityLinePrice }}" class="wr-goods-card__origin-price [white-space:nowrap] [font-weight:normal] [order:2] [color:#aaaaaa] [font-size:24rpx] [margin:0]">
318
+ <price
319
+ wr-class="origin-price-class"
320
+ symbol="{{currency}}"
321
+ price="{{goods.originPrice}}"
322
+ fill="{{priceFill}}"
323
+ />
324
+ </view>
325
+ <slot name="origin-price" />
326
+ <view wx:if="{{goods.num && !goods.hideKey.num}}" class="wr-goods-card__num num-class [white-space:nowrap] [order:4] [font-size:24rpx] [color:#999] [margin:20rpx_0_0_auto]">
327
+ <text class="wr-goods-card__num__prefix [color:inherit]">x </text>
328
+ {{ goods.num }}
329
+ </view>
330
+ </block>
331
+ <block wx:else>
332
+ <view class="no_storage [&_.no_storage__right]:[width:80rpx] [&_.no_storage__right]:[height:40rpx] [&_.no_storage__right]:[border-radius:20rpx] [&_.no_storage__right]:[border:2rpx_solid_#fa4126] [&_.no_storage__right]:[line-height:40rpx] [&_.no_storage__right]:[text-align:center] [&_.no_storage__right]:[color:#fa4126]">
333
+ <view>请重新选择商品规格</view>
334
+ <view class="no_storage__right">重选</view>
335
+ </view>
336
+ </block>
337
+
338
+ </view>
339
+ <slot name="append-body" />
340
+ </view>
341
+ <slot name="footer" />
342
+ </view>
343
+ <slot name="append-card" />
344
+ </view>
345
+
346
+ </template>
347
+
348
+ <json>
349
+ {
350
+ "component": true,
351
+ "usingComponents": {
352
+ "price": "/components/price/index",
353
+ "t-image": "/components/webp-image/index",
354
+ "t-icon": "tdesign-miniprogram/icon/icon"
355
+ }
356
+ }</json>
@@ -0,0 +1,17 @@
1
+ var isOnlyBack = function (data) {
2
+ return data.limitGoodsList || (data.inValidGoodsList && !data.storeGoodsList);
3
+ };
4
+
5
+ var isShowChangeAddress = function (data) {
6
+ return data.abnormalDeliveryGoodsList;
7
+ };
8
+
9
+ var isShowKeepPay = function (data) {
10
+ return data.outOfStockGoodsList || (data.storeGoodsList && data.inValidGoodsList);
11
+ };
12
+
13
+ module.exports = {
14
+ isOnlyBack: isOnlyBack,
15
+ isShowChangeAddress: isShowChangeAddress,
16
+ isShowKeepPay: isShowKeepPay,
17
+ };