gxd-uni-library-editx 1.0.0

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 (215) hide show
  1. package/.editorconfig +14 -0
  2. package/README.md +447 -0
  3. package/index.js +3 -0
  4. package/package.json +104 -0
  5. package/postcss.config.js +22 -0
  6. package/settings.js.tpl +68 -0
  7. package/src/XdAppClass.1.0.js +257 -0
  8. package/src/XdAppClass.js +150 -0
  9. package/src/components/XdAddress/XdAddress.vue +579 -0
  10. package/src/components/XdAddressSelect/XdAddressSelect.vue +243 -0
  11. package/src/components/XdBaiduMap/XdBaiduMap.vue +204 -0
  12. package/src/components/XdBaiduOverlay/XdBaiduOverlay.vue +345 -0
  13. package/src/components/XdBaiduSearch/XdBaiduSearch.vue +354 -0
  14. package/src/components/XdBar/XdBar.vue +339 -0
  15. package/src/components/XdButton/XdButton.vue +288 -0
  16. package/src/components/XdCartList/XdCartList.vue +791 -0
  17. package/src/components/XdCartNoStoreList/XdCartNoStoreList.vue +747 -0
  18. package/src/components/XdCity/XdCity.vue +620 -0
  19. package/src/components/XdCity/city.js +93 -0
  20. package/src/components/XdCity/testData.js +124 -0
  21. package/src/components/XdCityLocation/XdCityLocation.vue +314 -0
  22. package/src/components/XdCityLocation/jweixin.js +72 -0
  23. package/src/components/XdCityShow/XdCityShow.vue +354 -0
  24. package/src/components/XdClipImage/XdClipImage.vue +879 -0
  25. package/src/components/XdCoins/XdCoins.vue +66 -0
  26. package/src/components/XdConfirm/XdConfirm.vue +240 -0
  27. package/src/components/XdContentXss/XdContentXss.vue +71 -0
  28. package/src/components/XdDailog/XdDailog.vue +258 -0
  29. package/src/components/XdDate/XdDataItemOne.vue +236 -0
  30. package/src/components/XdDate/XdDate.vue +1081 -0
  31. package/src/components/XdDate/XdDateItem.vue +316 -0
  32. package/src/components/XdDate/XdDateTime.vue +929 -0
  33. package/src/components/XdDate/i18n/en.json +19 -0
  34. package/src/components/XdDate/i18n/index.js +8 -0
  35. package/src/components/XdDate/i18n/zh-Hans.json +19 -0
  36. package/src/components/XdDate/i18n/zh-Hant.json +19 -0
  37. package/src/components/XdDate/keypress.js +45 -0
  38. package/src/components/XdDate/util.js +418 -0
  39. package/src/components/XdDownDrawer/XdDownDrawer.vue +176 -0
  40. package/src/components/XdEditPwd/XdEditPwd.vue +305 -0
  41. package/src/components/XdEnterOrderList/XdEnterOrderList.vue +413 -0
  42. package/src/components/XdExpressTimeLine/XdExpressTimeLine.vue +280 -0
  43. package/src/components/XdFilter/XdFilter.vue +541 -0
  44. package/src/components/XdFontIcon/XdFontIcon.vue +165 -0
  45. package/src/components/XdFontIcon/css/icon.less +498 -0
  46. package/src/components/XdFooterBar/XdFooterBar.vue +291 -0
  47. package/src/components/XdFooterTabbar/XdFooterTabbar.vue +284 -0
  48. package/src/components/XdForm/XdForm.vue +481 -0
  49. package/src/components/XdForm/validate.js +486 -0
  50. package/src/components/XdFormCheckbox/XdFormCheckbox.vue +858 -0
  51. package/src/components/XdFormDate.vue +187 -0
  52. package/src/components/XdFormInput/XdFormInput.vue +535 -0
  53. package/src/components/XdFormInput/common.js +56 -0
  54. package/src/components/XdFormItem/XdFormItem.vue +583 -0
  55. package/src/components/XdFormSelect/XdFormSelect.vue +119 -0
  56. package/src/components/XdImage/XdImage.vue +113 -0
  57. package/src/components/XdItemCardUser/XdItemCardUser.vue +232 -0
  58. package/src/components/XdItemFilmImage/XdItemFilmImage.vue +146 -0
  59. package/src/components/XdItemFilmText/XdItemFilmText.vue +83 -0
  60. package/src/components/XdItemPhysical/XdItemPhysical.vue +410 -0
  61. package/src/components/XdItemPhysicalPack/XdItemPhysicalPack.vue +240 -0
  62. package/src/components/XdItemStore/XdItemStore.vue +236 -0
  63. package/src/components/XdItemUserInfo/XdItemUserInfo.vue +175 -0
  64. package/src/components/XdJson/XdJson.vue +398 -0
  65. package/src/components/XdKeyValue/XdKeyValue.vue +150 -0
  66. package/src/components/XdLabelNew/XdLabelNew.vue +193 -0
  67. package/src/components/XdLayout/XdLayout.vue +634 -0
  68. package/src/components/XdLoading/XdLoading.vue +165 -0
  69. package/src/components/XdMore/XdMore.vue +66 -0
  70. package/src/components/XdMpHtml/XdMpHtml.vue +458 -0
  71. package/src/components/XdMpHtml/node/node.vue +536 -0
  72. package/src/components/XdMpHtml/parser.js +1260 -0
  73. package/src/components/XdMpHtml/static/js/handler.js +1 -0
  74. package/src/components/XdMpHtml/static/js/uni.webview.min.js +1 -0
  75. package/src/components/XdMpHtml/static/local.html +1 -0
  76. package/src/components/XdMy/XdMy.vue +294 -0
  77. package/src/components/XdMySuccess/XdMySuccess.vue +603 -0
  78. package/src/components/XdNavTab/XdNavTab.vue +147 -0
  79. package/src/components/XdNoData/XdNoData.vue +87 -0
  80. package/src/components/XdNoticeBar/XdNoticeBar.vue +501 -0
  81. package/src/components/XdNumber/XdNumber.vue +210 -0
  82. package/src/components/XdNumberUni/XdNumberUni.vue +270 -0
  83. package/src/components/XdNumberUni/readme.md +42 -0
  84. package/src/components/XdOnlineConfirm/XdOnlineConfirm.vue +385 -0
  85. package/src/components/XdOnlineDetail/XdOnlineDetail.vue +332 -0
  86. package/src/components/XdOnlinePay/XdOnlinePay.vue +349 -0
  87. package/src/components/XdOnlineSchedule/XdOnlineSchedule.vue +453 -0
  88. package/src/components/XdOnlineSeat/XdOnlineSeat.vue +796 -0
  89. package/src/components/XdOnlineSeatMove/XdOnlineSeatMove.vue +1012 -0
  90. package/src/components/XdPayCombo/XdPayCombo.vue +118 -0
  91. package/src/components/XdPreviewImage/XdPreviewImage.vue +372 -0
  92. package/src/components/XdPwPay/XdPwPay.vue +214 -0
  93. package/src/components/XdRadio/XdRadio.vue +151 -0
  94. package/src/components/XdRangeSlider/XdRangeSlider.vue +355 -0
  95. package/src/components/XdRedName/XdRedName.vue +35 -0
  96. package/src/components/XdSearchBar/XdSearchBar.vue +286 -0
  97. package/src/components/XdSelect/XdSelect.vue +382 -0
  98. package/src/components/XdSelectCity/XdSelectCity.vue +270 -0
  99. package/src/components/XdSelectTime/XdSelectTime.vue +342 -0
  100. package/src/components/XdStar/XdStar.vue +261 -0
  101. package/src/components/XdStoreCashier/XdStoreCashier.vue +526 -0
  102. package/src/components/XdStoreItem/XdStoreItem.vue +400 -0
  103. package/src/components/XdStoreOrderDetail/XdStoreOrderDetail.vue +1571 -0
  104. package/src/components/XdStoreOrderList/XdStoreOrderList.vue +450 -0
  105. package/src/components/XdStoreProductInfo/XdStoreProductInfo.vue +940 -0
  106. package/src/components/XdStoreProductType/XdStoreProductType.vue +307 -0
  107. package/src/components/XdSuccess/XdSuccess.vue +527 -0
  108. package/src/components/XdSwipeSelect/XdSwipeSelect.vue +99 -0
  109. package/src/components/XdSwiper/XdSwiper.vue +124 -0
  110. package/src/components/XdSwitch/XdSwitch.vue +204 -0
  111. package/src/components/XdTab/XdTab.vue +220 -0
  112. package/src/components/XdTabScroll/XdTabScroll.vue +212 -0
  113. package/src/components/XdTag/XdTag.vue +423 -0
  114. package/src/components/XdTimeLine/XdTimeLine.vue +121 -0
  115. package/src/components/XdTips/XdTips.vue +212 -0
  116. package/src/components/XdTipsBlock/XdTipsBlock.vue +141 -0
  117. package/src/components/XdTitleSection/XdTitleSection.vue +152 -0
  118. package/src/components/XdTitleTab/XdTitleTab.vue +227 -0
  119. package/src/components/XdUnit/XdUnit.vue +206 -0
  120. package/src/components/XdUpload/XdUpload.vue +197 -0
  121. package/src/components/XdUploadImage/XdUploadImage.vue +145 -0
  122. package/src/components/Xdlogs/XdLogs.vue +144 -0
  123. package/src/components/autoload.js +211 -0
  124. package/src/components/swipeAction/UniSwipeAction.vue +43 -0
  125. package/src/components/swipeActionItem/UniSwipeActionItem.vue +386 -0
  126. package/src/components/swipeActionItem/bindingx.js +298 -0
  127. package/src/components/swipeActionItem/index.wxs +321 -0
  128. package/src/components/swipeActionItem/isPC.js +18 -0
  129. package/src/components/swipeActionItem/mpalipay.js +210 -0
  130. package/src/components/swipeActionItem/mpother.js +252 -0
  131. package/src/components/swipeActionItem/mpwxs.js +140 -0
  132. package/src/dome/dome/address.vue +415 -0
  133. package/src/dome/dome/auth/login.vue +166 -0
  134. package/src/dome/dome/baidu_show.vue +20 -0
  135. package/src/dome/dome/cake.vue +186 -0
  136. package/src/dome/dome/cart.vue +205 -0
  137. package/src/dome/dome/cart_store.vue +149 -0
  138. package/src/dome/dome/cashier/cashier.vue +73 -0
  139. package/src/dome/dome/cashier/check_cashier.vue +469 -0
  140. package/src/dome/dome/cashier/success.vue +127 -0
  141. package/src/dome/dome/city.vue +148 -0
  142. package/src/dome/dome/cityData.js +9 -0
  143. package/src/dome/dome/clip.vue +82 -0
  144. package/src/dome/dome/date/date.vue +273 -0
  145. package/src/dome/dome/date/selected.js +315 -0
  146. package/src/dome/dome/dcom/app1.vue +13 -0
  147. package/src/dome/dome/dcom/app2.vue +13 -0
  148. package/src/dome/dome/dcom/app3.vue +13 -0
  149. package/src/dome/dome/dcom/app4.vue +13 -0
  150. package/src/dome/dome/dcom/app5.vue +13 -0
  151. package/src/dome/dome/dcom/index.vue +1 -0
  152. package/src/dome/dome/debug/debug.vue +95 -0
  153. package/src/dome/dome/docache/docache.vue +88 -0
  154. package/src/dome/dome/express.vue +269 -0
  155. package/src/dome/dome/form.vue +312 -0
  156. package/src/dome/dome/icon.js +125 -0
  157. package/src/dome/dome/icon.vue +93 -0
  158. package/src/dome/dome/index.vue +725 -0
  159. package/src/dome/dome/item.vue +236 -0
  160. package/src/dome/dome/json/json.vue +88 -0
  161. package/src/dome/dome/layout.vue +105 -0
  162. package/src/dome/dome/line.vue +113 -0
  163. package/src/dome/dome/map/search.vue +70 -0
  164. package/src/dome/dome/my.vue +171 -0
  165. package/src/dome/dome/notice.vue +93 -0
  166. package/src/dome/dome/online/confirm.vue +92 -0
  167. package/src/dome/dome/online/detail.vue +80 -0
  168. package/src/dome/dome/online/pay.vue +78 -0
  169. package/src/dome/dome/online/schedule.vue +73 -0
  170. package/src/dome/dome/online/seat.vue +98 -0
  171. package/src/dome/dome/order/detail.vue +166 -0
  172. package/src/dome/dome/order/enter_order.vue +294 -0
  173. package/src/dome/dome/order/list.vue +219 -0
  174. package/src/dome/dome/order/order.js +18 -0
  175. package/src/dome/dome/order/success.vue +68 -0
  176. package/src/dome/dome/product.vue +179 -0
  177. package/src/dome/dome/store_cashier.vue +67 -0
  178. package/src/dome/dome/swiper.vue +32 -0
  179. package/src/dome/dome/webview.vue +61 -0
  180. package/src/install.js +183 -0
  181. package/src/main/address/address.vue +251 -0
  182. package/src/main/cart/cart.vue +149 -0
  183. package/src/main/cashier/cashier.vue +72 -0
  184. package/src/main/cashier/check_cashier.vue +483 -0
  185. package/src/main/city/city.vue +149 -0
  186. package/src/main/date/date.vue +260 -0
  187. package/src/main/order/order.js +19 -0
  188. package/src/main/order/order.vue +222 -0
  189. package/src/main/product/detail.vue +121 -0
  190. package/src/main/product/type.vue +108 -0
  191. package/src/main/search/search.vue +501 -0
  192. package/src/pages.json +337 -0
  193. package/src/plugins/CreatedComponentsPlugin.js +19 -0
  194. package/src/plugins/JsonRename.js +72 -0
  195. package/src/plugins/SetAppParams.js +171 -0
  196. package/src/project.js +18 -0
  197. package/src/utils/Cookie.js +68 -0
  198. package/src/utils/Runtime.js +105 -0
  199. package/src/utils/Storage.js +104 -0
  200. package/src/utils/XdNetwork.js +133 -0
  201. package/src/utils/helper.js +1321 -0
  202. package/src/utils/nourl.js +95 -0
  203. package/src/utils/project.js +17 -0
  204. package/src/utils/xd.auth.js +61 -0
  205. package/src/utils/xd.base.js +474 -0
  206. package/src/utils/xd.common.js +240 -0
  207. package/src/utils/xd.event.js +99 -0
  208. package/src/utils/xd.frame.js +96 -0
  209. package/src/utils/xd.path.js +96 -0
  210. package/src/utils/xdAppLog.js +170 -0
  211. package/src/utils/xdWxLog.js +302 -0
  212. package/src/utils/xdh5log.js +307 -0
  213. package/src/websetting.js +64 -0
  214. package/tsconfig.json +9 -0
  215. package/xd.less +180 -0
@@ -0,0 +1,747 @@
1
+ <template>
2
+ <view
3
+ :style="{
4
+ paddingBottom: defaultFooterHeight + 'rpx'
5
+ }"
6
+ >
7
+ <view
8
+ class="xd-store-cart"
9
+ v-if="dataList.length > 0 && uiOptions !== null"
10
+ >
11
+ <uni-swipe-action>
12
+ <uni-swipe-action-item
13
+ @click="(e)=>{bindClick(e,item,index)}"
14
+ @change="swipeChange(item,index)"
15
+ :right-options="uiOptions"
16
+ v-for="(item,index) in dataList"
17
+ :key="item.key"
18
+ >
19
+ <view class="xd-store-cart__item">
20
+ <view class="xd-store-cart__item-radio">
21
+ <xd-radio
22
+ :disabled="(item['stock'] === '0' || !item['stock']) || (item['status'] !== undefined && item['status'] !== status)"
23
+ @change="(status)=>{handleSelectToItem(item,index, status)}"
24
+ :color="uiRadioColor"
25
+ size="mini"
26
+ v-model="item.check"></xd-radio>
27
+ </view>
28
+ <view
29
+ class="xd-store-cart__item-image"
30
+ @click="toCartDetial(item)"
31
+ :style="{width: productWidth + 'rpx', height: productHeight + 'rpx'}"
32
+ >
33
+ <image :src="item['thumb']"></image>
34
+ <view
35
+ v-if="item['status'] !== status && item['msg']"
36
+ class="xd-store-cart__item-image-tips"
37
+ >
38
+ <view>{{item['msg']}}</view>
39
+ </view>
40
+ </view>
41
+ <view class="xd-store-cart__item-right" :style="{height: productHeight + 'rpx' }">
42
+ <view class="xd-store-cart__item-right-title" @click="toCartDetial(item)">{{item['product_name']}}</view>
43
+ <view class="xd-store-cart__item-right-bottom">
44
+ <xd-unit :price="item['sale_price']"></xd-unit>
45
+ <xd-number
46
+ :min="0"
47
+ v-if="!(item['stock'] === '0' || !item['stock'])"
48
+ v-model="item.number"
49
+ :width="60"
50
+ @change="(res, type)=>{handleUpdateChange(item, index , res, type)}"
51
+ ></xd-number>
52
+ </view>
53
+ </view>
54
+ </view>
55
+ </uni-swipe-action-item>
56
+ </uni-swipe-action>
57
+ </view>
58
+ <view class="no-data" v-if="uiOptions !== null && dataList.length === 0">{{noData}}</view>
59
+ <xd-more color="#333" v-if="idRecommend">
60
+ <view class="xd-store-cart-tips">
61
+ <view>
62
+ <xd-font-icon icon="icontesetuijian" size="40" :color="$mainColor"></xd-font-icon>
63
+ </view>
64
+ <view>为您推荐</view>
65
+ </view>
66
+ </xd-more>
67
+ <view class="xd-store-recommend" v-if="idRecommend">
68
+ <slot>
69
+ <view class="xd-store-recommend-left" v-if="recommendLeftList.length > 0">
70
+ <view v-for="(itemL,idxL) in recommendLeftList" :key="idxL">
71
+ <xd-shop-item @onToProductDetail="handleToProductDetail" :item="itemL"></xd-shop-item>
72
+ </view>
73
+ </view>
74
+ <view class="xd-store-recommend-right" v-if="recommendRightList.length > 0">
75
+ <view v-for="(itemR,idxR) in recommendRightList" :key="idxR">
76
+ <xd-shop-item @onToProductDetail="handleToProductDetail" :item="itemR"></xd-shop-item>
77
+ </view>
78
+ </view>
79
+ </slot>
80
+ </view>
81
+ <view
82
+ class="xd-store-cart-btn"
83
+ v-if="totalPrice !== null && totalProductCount !== null"
84
+ :style="{
85
+ bottom: bottom + 'px',
86
+ height: defaultFooterHeight + 'rpx'
87
+ }"
88
+ >
89
+ <view>
90
+ <xd-radio
91
+ size="mini"
92
+ :color="uiRadioColor"
93
+ v-model="uiIsAll"
94
+ @change="handleSelectToAll"
95
+ ></xd-radio>
96
+ <view>全选</view>
97
+ </view>
98
+ <view>
99
+ <text>合计:</text>
100
+ <view>
101
+ <xd-unit color="#333" :price="totalPrice"></xd-unit>
102
+ </view>
103
+ </view>
104
+ <view>
105
+ <xd-button
106
+ :disabled="toPayStatus"
107
+ type="primary"
108
+ size="mini"
109
+ @click="toConfirm"
110
+ >去结算({{totalProductCount}})</xd-button>
111
+ </view>
112
+ </view>
113
+ </view>
114
+ </template>
115
+
116
+ <script>
117
+ import XdRadio from "@/components/XdRadio/XdRadio";
118
+ import XdNumber from "@/components/XdNumber/XdNumber";
119
+ import XdUnit from "@/components/XdUnit/XdUnit";
120
+ import UniSwipeActionItem from "@/components/swipeActionItem/UniSwipeActionItem";
121
+ import UniSwipeAction from "@/components/swipeAction/UniSwipeAction";
122
+ import XdMore from "@/components/XdMore/XdMore";
123
+ import XdButton from "@/components/XdButton/XdButton";
124
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
125
+ import XdStoreItem from "@/components/XdStoreItem/XdStoreItem";
126
+ import storage from "@/common/storage";
127
+
128
+ /**
129
+ * @description 带店铺商品信息 (XdCartList)
130
+ * @property radioColor {String} 选中按钮颜色值 默认:$mainColor
131
+ * @property defaultFooterHeight {Number} 底部去结算所在高度 默认:100 单位:rpx
132
+ * @property options {Object} 左滑动块选项配置 默认:{text: '收藏', type: 'collect', style: {backgroundColor: 'orange', padding: '0 30rpx'}},
133
+ * @property isAll {String} 是否全选 默认:true
134
+ * @property noData {String} 无数据显示文案 默认:购物车暂无商品
135
+ * @property idRecommend { Boolean } 是否显示推荐列表 默认:true
136
+ * @property productWidth {Number} 产品图宽度 默认:240 单位:rpx
137
+ * @property productHeight {Number} 产品图高度 默认:240 单位:rpx
138
+ *
139
+ * @event {Function} onCartRemove 滑选删除事件
140
+ * @event {Function} onCartUpdateNumber 重置数量事件
141
+ * @event {Function} onCartList 获取购物车列表数据
142
+ * @event {Function} onPay 点击结算按钮事件
143
+ * @event {Function} onToCartDetail 点击购物车列表中商品事件
144
+ * @event {Function} onRecommendList 获取推荐商品列表事件
145
+ * @event {Function} onToProductDetail 点击推荐商品列表中商品事件
146
+ *
147
+ * @method {Function} setIsAll 设置全选/取消方法(this.$refs['xd-store-cart'].setIsAll(status);
148
+ */
149
+
150
+ export default {
151
+ name: "XdCartNoStoreList",
152
+ components: {
153
+ XdStoreItem,
154
+ XdFontIcon,
155
+ XdButton,
156
+ XdMore,
157
+ XdUnit,
158
+ XdNumber,
159
+ XdRadio,
160
+ UniSwipeActionItem,
161
+ UniSwipeAction
162
+ },
163
+ props:{
164
+ radioColor: {
165
+ type: String,
166
+ default: '',
167
+ },
168
+
169
+ defaultFooterHeight: {
170
+ type: Number,
171
+ default: 120, //底部tabber高度 单位rpx
172
+ },
173
+
174
+ options: {
175
+ type: Array,
176
+ default(){
177
+ return [
178
+ //格式(text:文案,type: 按钮类型, style: 按钮样式)
179
+ {text: '收藏', type: 'collect', style: {backgroundColor: 'orange', padding: '0 30rpx'}},
180
+ ];
181
+ }
182
+ },
183
+
184
+ //是否为全选
185
+ isAll: {
186
+ type: Boolean,
187
+ default: false,
188
+ },
189
+
190
+ //无购物车数据提示文案
191
+ noData: {
192
+ type: String,
193
+ default: '购物车暂无商品'
194
+ },
195
+
196
+
197
+ //是否显示推荐商品数据
198
+ idRecommend: {
199
+ type: Boolean,
200
+ default: true,
201
+ },
202
+
203
+ productWidth: {
204
+ type: Number,
205
+ default: 240
206
+ },
207
+ productHeight: {
208
+ type: Number,
209
+ default: 240
210
+ },
211
+
212
+ },
213
+ computed:{
214
+ toPayStatus(){
215
+ return this.totalPrice <= 0 || this.totalProductCount <= 0;
216
+ },
217
+ },
218
+ data(){
219
+ return {
220
+ status: 1,
221
+ uiRadioColor: null, //选中框主色调
222
+ paddingBottom: 0,
223
+ bottom: 0, //支付按钮底部距离
224
+ uiOptions: null,
225
+
226
+ swipeClickTime: null, //防止多次点击
227
+ uiIsAll: null, //是否为全选
228
+ totalPrice: null, //合计总价
229
+ totalProductCount: null, //共计N件商品
230
+ totalProductTypeCount: null,//共计N种商品
231
+
232
+ //购物车数据格式
233
+ cartTestData: [
234
+ {
235
+ "thumb": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/20210119153621543.jpg?x-oss-process=style\/200_200",
236
+ "product_name": "\u8d1d\u87ba\u6865 \u67f3\u5dde\u87ba\u86f3\u7c89\u666e\u901a\u88c5 330g*5\u5305",
237
+ "sale_price": 55,
238
+ "number": 2,
239
+ "id": 251928,
240
+ 'stock': '0',
241
+ 'check': false,
242
+ "status": 0, //商品是否已下架
243
+ 'msg': '补货中', //补货中 已下架,
244
+ }, {
245
+ "thumb": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/20210119151849615.jpg?x-oss-process=style\/200_200",
246
+ "product_name": "JIAJIA\/\u52a0\u52a0 \u8c03\u5473\u54c1\u7ec4\u5408C\u6b3e",
247
+ "sale_price": 47,
248
+ "number": 3,
249
+ "id": 251906,
250
+ 'stock': 10,
251
+ 'check': false
252
+ }
253
+ ],
254
+
255
+ //购物车数据列表
256
+ dataList:[],
257
+
258
+ //推荐测试数据
259
+ recommendTestData:[
260
+ {
261
+ "id": "1409469",
262
+ "product_name": "\u8d1d\u87ba\u6865 \u67f3\u5dde\u87ba\u86f3\u7c89\u666e\u901a\u88c5 330g*5\u5305",
263
+ "sale_price": 55,
264
+ "thumb": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/20210119153621543.jpg?x-oss-process=style\/200_200",
265
+ "hot": "1",
266
+ "newon": "2"
267
+ }, {
268
+ "id": "1409459",
269
+ "product_name": "JIAJIA\/\u52a0\u52a0 \u8c03\u5473\u54c1\u7ec4\u5408C\u6b3e",
270
+ "sale_price": 47,
271
+ "thumb": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/20210119151849615.jpg?x-oss-process=style\/200_200",
272
+ "hot": "2",
273
+ "newon": "2"
274
+ }, {
275
+ "id": "1409458",
276
+ "product_name": "JIAJIA\/\u52a0\u52a0 \u8c03\u5473\u54c1\u7ec4\u5408B\u6b3e",
277
+ "sale_price": 47,
278
+ "thumb": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/20210119151734654.jpg?x-oss-process=style\/200_200",
279
+ "hot": "2",
280
+ "newon": "2"
281
+ }, {
282
+ "id": "1409457",
283
+ "product_name": "JIAJIA\/\u52a0\u52a0 \u8c03\u5473\u54c1\u7ec4\u5408A\u6b3e",
284
+ "sale_price": 57,
285
+ "thumb": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/20210119151624114.jpg?x-oss-process=style\/200_200",
286
+ "hot": "2",
287
+ "newon": "1"
288
+ }
289
+ ],
290
+ recommendRightList: [],
291
+ recommendLeftList: [],
292
+
293
+ }
294
+ },
295
+ created(){
296
+ this.uiIsAll = this.isAll;
297
+ this.uiRadioColor = this.$mainColor;
298
+ if (this.radioColor) {
299
+ this.uiRadioColor = this.radioColor;
300
+ }
301
+
302
+ //滑块显示按钮(已设置默认删除)
303
+ this.uiOptions = this.options
304
+ .concat([{text: '删除', type: 'del', system: true, style: {backgroundColor: 'red'}}]);
305
+
306
+ this.paddingBottom = storage.get('xd-layout') ? storage.get('xd-layout')['safeHeight'] : 0;
307
+ this.bottom = this.$rpxNum * this.defaultFooterHeight + this.paddingBottom;
308
+
309
+ //获取购物车列表数据
310
+ this.getList();
311
+
312
+ //显示推荐数据
313
+ if(this.idRecommend) {
314
+ this.getRecommendList();
315
+ }
316
+
317
+
318
+ },
319
+ methods:{
320
+
321
+ /**
322
+ * @description 获取购物车已选中商品
323
+ */
324
+ getSelectData(){
325
+ let temp = [];
326
+ this.$xdUniHelper.cloneDeep(this.dataList).map(item=>{
327
+ if(item.check) temp.push(item);
328
+ });
329
+ return temp;
330
+ },
331
+
332
+ /**
333
+ * @description 初始化数据
334
+ * @param list
335
+ */
336
+ init(list) {
337
+ let temp = [];
338
+ try {
339
+ if(this.$xdUniHelper.checkVarType(list) !== 'array') {
340
+ throw new Error('购物车列表数据格式为:Array');
341
+ }else {
342
+ list.map(item => {
343
+ let check = null;
344
+ if(item.check) check = item.check;
345
+ else check = this.isAll;
346
+
347
+ if(item['stock'] === '0' || !item['stock'] || (item['status'] !== undefined && item['status'] !== status)) {
348
+ check = false;
349
+ }
350
+ temp.push({
351
+ ...item,
352
+ check: check,
353
+ key: this.$xdUniHelper.randomChar(30) ,
354
+ oldNumber: item['number'],
355
+ });
356
+ });
357
+
358
+ //计算产品各种总数
359
+ this.setTotal(temp);
360
+ this.dataList = this.$xdUniHelper.cloneDeep(temp)
361
+ }
362
+ } catch (e) {
363
+ console.error(e);
364
+ console.log('List format:', this.cartTestData);
365
+ this.dataList = [];
366
+ }
367
+
368
+ },
369
+
370
+ /**
371
+ * @description 获取购物车列表数据
372
+ */
373
+ getList(){
374
+ //this.$xdShowLoading({});
375
+ this.$emit('onCartList', (list) => {
376
+ //this.$xdHideLoading();
377
+ if(list === null) {
378
+ this.init(this.$xdUniHelper.cloneDeep(this.cartTestData))
379
+ }else{
380
+ this.init(list)
381
+ }
382
+ });
383
+ },
384
+
385
+ /**
386
+ * @description 初始化数据
387
+ * @param list
388
+ */
389
+ initRecommend(list) {
390
+ if(list.length === 0) {
391
+ this.recommendRightList = [];
392
+ this.recommendLeftList = [];
393
+ return
394
+ }
395
+ let recommendRightList = [];
396
+ let recommendLeftList = [];
397
+ list.map((item,index)=>{
398
+ if(index%2 === 0) recommendLeftList.push(item);
399
+ else recommendRightList.push(item)
400
+ });
401
+ this.recommendRightList = recommendRightList;
402
+ this.recommendLeftList = recommendLeftList;
403
+
404
+ console.log('initRecommend',this.recommendRightList, this.recommendLeftList, list)
405
+ },
406
+
407
+ /**
408
+ * @description 获取推荐数据列表
409
+ */
410
+ getRecommendList() {
411
+ console.log('initRecommend')
412
+ this.$emit('onRecommendList', (list) => {
413
+ console.log('initRecommend', list)
414
+ if (list === null) {
415
+ this.initRecommend(this.$xdUniHelper.cloneDeep(this.recommendTestData))
416
+ } else {
417
+ this.initRecommend(list)
418
+ }
419
+ });
420
+ },
421
+
422
+ /**
423
+ * 设置各种总是设置
424
+ */
425
+ setTotal(list){
426
+ let totalPrice = 0;
427
+ let totalProductCount = 0;
428
+ this.totalProductTypeCount = list.length;
429
+ let all = true;
430
+ list.map(item => {
431
+ if(item.check) {
432
+ totalProductCount += item.number;
433
+ let price = this.$xdUniHelper.multiplyFloatNumber(item.number, item.sale_price);
434
+ totalPrice = this.$xdUniHelper.addFloatNumber(price, totalPrice);
435
+ }
436
+ if(!item.check) all = false;
437
+ });
438
+ this.totalPrice = totalPrice;
439
+ this.totalProductCount = totalProductCount;
440
+ this.uiIsAll = all;
441
+ if(this.totalProductTypeCount === 0) this.uiIsAll = false;
442
+ this.$emit('update:count', this.totalProductTypeCount)
443
+ },
444
+
445
+ /**
446
+ * @description 设置购物车数量
447
+ * @param item 当前操作购物车对象
448
+ * @param index 操作对象所在购物车位置
449
+ * @param number 购物车对象更新数量
450
+ * @param type 操作类型 add=>增加 cut=>减少
451
+ */
452
+ handleUpdateChange(item , index, number, type){
453
+ this.$xdShowLoading({});
454
+ //status 1=>更新成功 2=>更新失败
455
+ this.$emit('onCartUpdateNumber',{item, index, number, type}, (status) => {
456
+ let temp = this.$xdUniHelper.cloneDeep(item);
457
+ temp['key'] = this.$xdUniHelper.randomChar(30)
458
+ if(status === 1) {
459
+ temp['oldNumber'] = number;
460
+ }else{
461
+ temp['number'] = temp['oldNumber'];
462
+ }
463
+ this.dataList.splice(index, 1, temp);
464
+ this.setTotal(this.dataList);
465
+ this.$xdHideLoading();
466
+ });
467
+ },
468
+
469
+ /**
470
+ * @description 删除购物车
471
+ * @param item 购物车商品信息
472
+ * @param index 购物车商品所在位置
473
+ */
474
+ removeCartProduct(item, index){
475
+ this.$xdShowLoading({});
476
+ //status 1=>删除成功 2=>删除失败
477
+ this.$emit('onCartRemove', {item, index} , (status)=>{
478
+ if(status === 1) {
479
+ this.dataList.splice(index, 1);
480
+ this.setTotal(this.dataList);
481
+ }
482
+ this.$xdHideLoading();
483
+ });
484
+ },
485
+
486
+ /**
487
+ * @description 点击滑动按钮时间
488
+ * @param e 被点击按钮对象
489
+ * @param item 店铺对象
490
+ * @param index 门店索引值
491
+ */
492
+ bindClick(e, item, index) {
493
+ if(this.swipeClickTime){
494
+ clearTimeout(this.swipeClickTime);
495
+ this.swipeClickTime = null;
496
+ }
497
+ this.swipeClickTime = setTimeout(()=>{
498
+ //删除按钮
499
+ if(e.position === 'right' && e.content.type === 'del' && e.content.system) {
500
+ this.removeCartProduct(item, index);
501
+ }
502
+ //自定义按钮
503
+ else{
504
+ this.$emit('onCustomBtn', {e, item, index});
505
+ }
506
+ console.log(e, item, index)
507
+ }, 100);
508
+ },
509
+
510
+ /**
511
+ * @description 滑动事件
512
+ * @param item 店铺对象
513
+ * @param index 当前购物车位置
514
+ */
515
+ swipeChange(item, index) {
516
+ this.$emit('onSwipeChange', {item, index})
517
+ },
518
+
519
+ /**
520
+ * @description 购物车选中/取消商品
521
+ * @param item 店铺对象
522
+ * @param index 当前购物车位置
523
+ * @param status 选中状态
524
+ */
525
+ handleSelectToItem(item,index, status){
526
+ let temp = {...item, key: this.$xdUniHelper.randomChar(30), check: status};
527
+ this.dataList.splice(index,1, temp);
528
+ this.setTotal(this.dataList);
529
+ },
530
+
531
+ /**
532
+ * @description 购物车全选/取消
533
+ */
534
+ handleSelectToAll(status){
535
+ let temp = [];
536
+ this.dataList.map(item=>{
537
+ let check = status;
538
+ if (item['stock'] === '0' || !item['stock']) {
539
+ check = false;
540
+ }
541
+ temp.push({...item, check: check, key: this.$xdUniHelper.randomChar(30)})
542
+ });
543
+ this.dataList = temp;
544
+ this.setTotal(temp);
545
+ },
546
+
547
+ /**
548
+ * @description 购物车列表查看产品详情事件
549
+ * @param item
550
+ */
551
+ toCartDetial(item){
552
+ this.$emit('onToCartDetail', item)
553
+ },
554
+
555
+ /**
556
+ * @description 推荐商品查看详情
557
+ * @param item
558
+ */
559
+ handleToProductDetail(item){
560
+ this.$emit('onToProductDetail', item)
561
+ },
562
+
563
+ /**
564
+ * @description 确认订单
565
+ */
566
+ toConfirm() {
567
+ this.$emit('onPay', {
568
+ data: this.getSelectData(),
569
+ ids: this.$xdUniHelper.getListKeyForValue(this.getSelectData())
570
+ });
571
+ },
572
+
573
+ },
574
+ }
575
+
576
+
577
+
578
+ </script>
579
+
580
+ <style scoped lang="less">
581
+ .no-data {
582
+ display: flex;
583
+ justify-content: center;
584
+ align-items: center;
585
+ text-align: center;
586
+ font-size: @xd-font-size-lg;
587
+ line-height: unit(200,rpx);
588
+ color: #999;
589
+ }
590
+ .xd-store-cart {
591
+ padding: 0;
592
+ box-sizing: border-box;
593
+
594
+
595
+ &__item {
596
+ display: flex;
597
+ justify-content: space-between;
598
+ align-items: center;
599
+ margin-bottom: unit(20,rpx);
600
+ background: #fff;
601
+ padding: unit(20,rpx);
602
+
603
+ &-radio {
604
+ flex-shrink: 0;
605
+ padding: 0 unit(20,rpx) 0 0;
606
+ }
607
+
608
+ &-image {
609
+ flex-shrink: 0;
610
+ margin-right: unit(20,rpx);
611
+ background: #efefef;
612
+ box-shadow: 0 0 unit(10,rpx) rgba(0,0,0,.08);
613
+ position: relative;
614
+
615
+ &-tips {
616
+ position: absolute;
617
+ left: 50%;
618
+ top: 50%;
619
+ transform: translate(-50%, -50%);
620
+ background: rgba(0, 0, 0, .4);
621
+ color: #666;
622
+ font-size: @xd-font-size-base;
623
+ display: flex;
624
+ justify-content: center;
625
+ align-items: center;
626
+ height: unit(200, rpx);
627
+ width: unit(200, rpx);
628
+ border-radius: 50%;
629
+ overflow: hidden;
630
+ box-shadow: rgba(0, 0, unit(10, rpx), rgba(0, 0, 0, .5));
631
+
632
+
633
+ & > view {
634
+ line-height: unit(40, rpx);
635
+ width: 100%;
636
+ text-align: center;
637
+ color: #f8f8f8;
638
+ text-shadow: rgba(0, 0, unit(10, rpx), rgba(0, 0, 0, .5));
639
+ }
640
+ }
641
+
642
+ & > image {
643
+ width: 100%;
644
+ height: 100%;
645
+ }
646
+ }
647
+
648
+ &-right {
649
+ flex: 1;
650
+ width: 0;
651
+ position: relative;
652
+
653
+ &-title {
654
+ .uni-max-cut(3, 120);
655
+ line-height: unit(40,rpx);
656
+ font-size: @xd-font-size-base;
657
+ }
658
+
659
+ &-bottom {
660
+ position: absolute;
661
+ left: 0;
662
+ right: 0;
663
+ bottom: 0;
664
+ display: flex;
665
+ justify-content: space-between;
666
+ align-items: center;
667
+ }
668
+ }
669
+ }
670
+ }
671
+
672
+ .xd-store-cart-tips {
673
+ display: flex;
674
+ justify-content: center;
675
+ align-items: center;
676
+
677
+ & > view:first-child {
678
+ margin-right: unit(10,rpx);
679
+ }
680
+ }
681
+
682
+ .xd-store-recommend {
683
+ padding-top: unit(20,rpx);
684
+ display: flex;
685
+ justify-content: space-between;
686
+ align-items: flex-start;
687
+
688
+ & > view {
689
+ flex: 1;
690
+ margin-right: unit(20,rpx);
691
+ width: 0;
692
+
693
+ &> view {
694
+ margin-bottom: unit(20, rpx);
695
+
696
+ &:last-child {
697
+ margin-bottom: 0;
698
+ }
699
+ }
700
+
701
+ &:last-child {
702
+ margin-right: 0;
703
+ }
704
+ }
705
+ }
706
+
707
+ .xd-store-cart-btn {
708
+ display: flex;
709
+ justify-content: space-between;
710
+ align-items: center;
711
+ position: fixed;
712
+ left: 0;
713
+ right: 0;
714
+ background: #fff;
715
+ padding: 0 unit(20,rpx);
716
+ box-shadow: 0 0 unit(10,rpx) rgba(0,0,0,.08);
717
+ z-index: 300;
718
+
719
+ & > view {
720
+ display: flex;
721
+ justify-content: center;
722
+ align-items: center;
723
+ }
724
+
725
+ & > view:first-child {
726
+ flex-shrink: 0;
727
+ font-size: @xd-font-size-base;
728
+ padding-right: unit(30,rpx);
729
+
730
+ & > view:last-child {
731
+ margin-left: unit(10,rpx);
732
+ }
733
+ }
734
+
735
+ & > view:last-child {
736
+ flex-shrink: 0;
737
+ }
738
+
739
+ & > view:nth-child(2) {
740
+ flex: 1;
741
+ width: 0;
742
+ justify-content: flex-start;
743
+ font-size: @xd-font-size-lg;
744
+ }
745
+ }
746
+ </style>
747
+