app-goods-list.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692
  1. <template>
  2. <view class="app-goods-list" :class="listClass">
  3. <block v-for="(goods, index) in list" :key="index">
  4. <!-- 列表模式 -->
  5. <template v-if="listStyle == 1">
  6. <view class="dir-left-nowrap goods-item-1" @click="jump(goods)">
  7. <view class="box-grow-0 cover-pic">
  8. <view class="out-dialog" v-if="goods.goods_stock == 0 && appSetting.is_show_stock == '1'">
  9. <image :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
  10. </view>
  11. <app-image :img-src="goods.cover_pic" borderRadius="16rpx" width="251rpx"
  12. height="200rpx"></app-image>
  13. </view>
  14. <view class="box-grow-1 dir-top-nowrap content main-between">
  15. <view class="box-grow-0 t-omit-two goods-name goods-name-style" v-if="isShowGoodsName == 1">{{goods.name}}</view>
  16. <view class="dir-top-nowrap" :class="isShowGoodsName == 1 ? 'box-grow-0' : 'box-grow-1'">
  17. <view class="box-grow-0 cross-bottom"
  18. v-if="goods.is_level == 1 && goods.is_negotiable != 1 && is_show_member">
  19. <app-member-price :price="goods.level_price"></app-member-price>
  20. </view>
  21. <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user"
  22. v-if="goods.vip_card_appoint.discount > 0"
  23. :discount="goods.vip_card_appoint.discount">
  24. </app-sup-vip>
  25. <view :class="isShowCart == 0 || goods.is_negotiable == 1 ? 'dir-left-nowrap' : 'dir-top-nowrap'"
  26. class="box-grow-1">
  27. <view class="dir-left-nowrap cross-center sales-box">
  28. <view class="box-grow-1 box-grow--moeny" :class="theme">
  29. <template v-if="goods.is_negotiable == 1">
  30. <view>价格面议</view>
  31. </template>
  32. <template v-else>
  33. <app-price :price="`${goods.price}`" type="text-price-all"></app-price>
  34. </template>
  35. </view>
  36. <!-- <view v-if="goods.sales && goods.is_negotiable != 1" class="box-grow-1 sales">{{goods.sales}}</view> -->
  37. <view v-if="goods.sales && goods.is_negotiable != 1" class="box-grow-1 sales"></view>
  38. <!-- <view @click.stop="specification(goods)" class="box-grow-0 cross-center main-center cart-box"
  39. v-if="goods.is_negotiable != 1 && isShowCart == 1 && goods.goods_stock > 0">
  40. <img class="goods-cart" src="/static/image/icon/goods-cart.png">
  41. </view> -->
  42. <view class="moneyAndBtn-btn" @click.stop="specification(goods)" v-if="goods.is_negotiable != 1 && isShowCart == 1 && goods.goods_stock > 0">
  43. 立即报名
  44. </view>
  45. </view>
  46. </view>
  47. </view>
  48. </view>
  49. </view>
  50. </template>
  51. <!-- 一行两个 -->
  52. <template v-if="listStyle == 2">
  53. <view class="box-grow-0 goods-item-2 dir-top-nowrap" @click="jump(goods)"
  54. :class="index%2 === 0 ? 'mr-14' : ''">
  55. <view class="box-grow-0">
  56. <view class="out-dialog" v-if="goods.goods_stock == 0 && appSetting.is_show_stock == '1'">
  57. <image :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
  58. </view>
  59. <app-image :img-src="goods.cover_pic" width="344rpx" height="344rpx"
  60. :border-radius="`16rpx 16rpx 0 0`"></app-image>
  61. </view>
  62. <view class="box-grow-0 goods-name t-omit-two padding" v-if="isShowGoodsName == 1">{{goods.name}}</view>
  63. <view class="box-grow-1 dir-top-nowrap main-right">
  64. <view class="box-grow-0 cross-bottom padding"
  65. v-if="goods.is_level == 1 && goods.is_negotiable != 1 && is_show_member">
  66. <app-member-price :price="goods.level_price"></app-member-price>
  67. </view>
  68. <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin="4rpx 24rpx 0"
  69. v-if="goods.vip_card_appoint.discount > 0"
  70. :discount="goods.vip_card_appoint.discount"></app-sup-vip>
  71. <view class="box-grow-0 dir-left-nowrap content padding">
  72. <view :class="theme" class="box-grow-0">
  73. <template v-if="goods.is_negotiable == 1">
  74. <view>价格面议</view>
  75. </template>
  76. <template v-else>
  77. <app-price :price="`${goods.price}`" type="text-price-all"></app-price>
  78. </template>
  79. </view>
  80. <template v-if="goods.is_negotiable != 1">
  81. <view class="dir-left-nowrap cross-center sales-box box-grow-1"
  82. :class="[isShowCart == 1 ? '' : 'main-right']"
  83. v-if="goods.sales">
  84. <view class="sales">{{goods.sales}}</view>
  85. </view>
  86. <view v-if="isShowCart == 1 && goods.goods_stock > 0" :class="[goods.sales ? 'box-grow-0' : 'box-grow-1 main-right']">
  87. <img @click.stop="specification(goods)" class="goods-cart"
  88. src="/static/image/icon/goods-cart.png">
  89. </view>
  90. </template>
  91. </view>
  92. </view>
  93. </view>
  94. </template>
  95. <!-- 一行三个 -->
  96. <template v-if="listStyle == 3">
  97. <view class="box-grow-0 goods-item-3 dir-top-nowrap" @click="jump(goods)"
  98. :class="index%3 === 2 ? '' : 'mr-8'">
  99. <view class="box-grow-0">
  100. <view class="out-dialog" v-if="goods.goods_stock == 0 && appSetting.is_show_stock == '1'">
  101. <image :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
  102. </view>
  103. <app-image :img-src="goods.cover_pic" width="238rpx" height="238rpx"
  104. :border-radius="`16rpx 16rpx 0 0`"></app-image>
  105. </view>
  106. <view class="box-grow-0 goods-name t-omit-two padding" v-if="isShowGoodsName == 1">{{goods.name}}</view>
  107. <view class="box-grow-1 dir-top-nowrap main-right">
  108. <view class="box-grow-0 cross-bottom padding"
  109. v-if="goods.is_level == 1 && goods.is_negotiable != 1 && is_show_member">
  110. <app-member-price :price="goods.level_price"></app-member-price>
  111. </view>
  112. <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin="4rpx 20rpx 0"
  113. v-if="goods.vip_card_appoint.discount > 0"
  114. :discount="goods.vip_card_appoint.discount"></app-sup-vip>
  115. <view :class="theme" class="padding box-grow-0">
  116. <template v-if="goods.is_negotiable == 1">
  117. <view>价格面议</view>
  118. </template>
  119. <template v-else>
  120. <app-price :price="`${goods.price}`" type="text-price-all"></app-price>
  121. </template>
  122. </view>
  123. <view class="sales-box cross-bottom box-grow-1">
  124. <view v-if="goods.sales && goods.is_negotiable != 1" class="box-grow-1 sales">{{goods.sales}}</view>
  125. <view v-if="goods.is_negotiable != 1 && isShowCart == 1 && goods.goods_stock > 0" class="box-grow-0">
  126. <img @click.stop="specification(goods)" class="goods-cart cross-bottom"
  127. src="/static/image/icon/goods-cart.png">
  128. </view>
  129. </view>
  130. </view>
  131. </view>
  132. </template>
  133. </block>
  134. <!-- <app-attr ref="attr" :goods="item" :select-attr="selectAttr" :attr-group-list="attrGroup" :show="show"
  135. @attrtap="onAttr" :previewUrl="previewUrl" :submitUrl="submitUrl"></app-attr> -->
  136. <view class="attr">
  137. <app-attr ref="attr"
  138. :goods="item"
  139. :select-attr="selectAttr"
  140. :attr-group-list="attrGroup"
  141. :show="show"
  142. :cartShow="cartShow"
  143. :buyText="buyText"
  144. :buyClick="buyBool"
  145. :plugin="plugin"
  146. :previewUrl="previewUrl"
  147. :submitUrl="submitUrl"
  148. @buyClick="buyClick"
  149. @attrtap="onAttr"
  150. @attr="attr"
  151. >
  152. <view slot="extra" v-if="sign === 'pintuan'">
  153. <app-pt-attr
  154. v-if="pt"
  155. :pintuan_groups="item.pintuan_groups"
  156. :selectGroupAttrId="selectGroupAttrId"
  157. @click="setGroupAttrID"
  158. ></app-pt-attr>
  159. </view>
  160. </app-attr>
  161. </view>
  162. <view v-if="sign === 'pintuan' && show_pt">
  163. <app-iphone-x>
  164. <view class="pintuan dir-left-nowrap" slot="empty-area">
  165. <view class="single box-grow-1 dir-top-nowrap" @click="individual" v-if="item">
  166. <text class="app-text">单独购买</text>
  167. </view>
  168. <view class="tuan box-grow-1 dir-top-nowrap" @click="multiplayer">
  169. <text class="app-text">拼团</text>
  170. </view>
  171. </view>
  172. </app-iphone-x>
  173. </view>
  174. </view>
  175. </template>
  176. <script>
  177. import {mapState, mapGetters} from "vuex";
  178. import appPrice from '../../page-component/goods/app-price.vue';
  179. import appAttr from '../app-attr/app-attr.vue';
  180. import appPtAttr from '../app-pt-attr/app-pt-attr.vue';
  181. import appMemberPrice from "../app-member-mark/app-member-price.vue";
  182. import appSupVip from '../app-sup-vip/app-sup-vip.vue';
  183. import appIphoneX from '../../basic-component/app-iphone-x/app-iphone-x.vue';
  184. import allPay from '../../../pages/goods/all-pay.js';
  185. export default {
  186. name: "app-goods-list",
  187. components: {
  188. 'app-price': appPrice,
  189. 'app-attr': appAttr,
  190. 'app-pt-attr': appPtAttr,
  191. 'app-member-price': appMemberPrice,
  192. 'app-sup-vip': appSupVip,
  193. 'app-iphone-x': appIphoneX,
  194. },
  195. props: {
  196. listStyle: {
  197. type: String,
  198. default() {
  199. return '2';
  200. }
  201. },
  202. list: Array,
  203. previewUrl: String,
  204. submitUrl: String,
  205. is_show_member: {
  206. type: Boolean,
  207. default() {
  208. return true;
  209. }
  210. }
  211. },
  212. data() {
  213. return {
  214. show: 0,
  215. buyText: '立即购买',
  216. sign: '',
  217. goods_id: '',
  218. cartShow: 1,
  219. plugin: '',
  220. goods_list: [],
  221. buyBool: false,
  222. cur_index: 0,
  223. item: null,
  224. show_pt: false,
  225. pt: true,
  226. selectAttr: {},
  227. appAttr: {},
  228. attrGroup: [],
  229. selectGroupAttrId: -1,
  230. }
  231. },
  232. computed: {
  233. ...mapState({
  234. theme: state => state.mallConfig.theme + '-color',
  235. appImg: state => state.mallConfig.__wxapp_img.mall,
  236. appSetting: state => state.mallConfig.mall.setting,
  237. isShowCart: state => state.mallConfig.mall.setting.is_show_cart,
  238. isShowGoodsName: state => state.mallConfig.mall.setting.is_show_goods_name,
  239. }),
  240. ...mapGetters('mallConfig', {
  241. getVideo: 'getVideo'
  242. }),
  243. listClass() {
  244. if (this.listStyle == 3) {
  245. return `list-style-3 dir-left-wrap`;
  246. } else if (this.listStyle == 2) {
  247. return `list-style-2 dir-left-wrap`;
  248. } else {
  249. return ``;
  250. }
  251. }
  252. },
  253. watch: {
  254. appAttr: {
  255. handler(data) {
  256. if (data.display === 'none') {
  257. this.show_pt = false;
  258. // this.selectAttr = {};
  259. }
  260. }
  261. }
  262. },
  263. methods: {
  264. setGroupAttrID(id) {
  265. this.selectGroupAttrId = id;
  266. this.selectAttr = {};
  267. this.request_pt(id);
  268. },
  269. multiplayer() {
  270. if (this.pt) {
  271. if (this.selectAttr && Object.keys(this.selectAttr).length === 0) {
  272. uni.showToast({
  273. title: '请选择规格',
  274. icon: "none"
  275. })
  276. } else if (this.selectAttr && Object.keys(this.selectAttr).length > 0) {
  277. let mch_id = this.item.mch_id;
  278. let mch_list = [];
  279. let goods = {
  280. id: this.item.id,
  281. attr: [],
  282. num: this.appAttr.number,
  283. goods_attr_id: this.selectAttr.id,
  284. cart_id: 0,
  285. };
  286. for (let i = 0; i < this.selectAttr.attr_list.length; i++) {
  287. let attr = {
  288. attr_id: this.selectAttr.attr_list[i].attr_id,
  289. attr_group_id: this.selectAttr.attr_list[i].attr_group_id,
  290. };
  291. goods.attr.push(attr);
  292. }
  293. mch_list.push({
  294. mch_id: mch_id,
  295. pintuan_order_id: 0,
  296. pintuan_group_id: this.selectGroupAttrId,
  297. goods_list: [goods],
  298. });
  299. uni.navigateTo({
  300. url: `/pages/order-submit/order-submit?mch_list=${JSON.stringify(mch_list)}&preview_url=${encodeURIComponent(this.$api.pt.order_preview)}&submit_url=${encodeURIComponent(this.$api.pt.order_submit)}&order_page_url=/plugins/pt/order/order&plugin=pt`
  301. });
  302. }
  303. } else {
  304. this.selectAttr = {};
  305. this.pt = true;
  306. this.request_pt(this.selectGroupAttrId);
  307. }
  308. },
  309. buyClick(data) {
  310. allPay(data, this.sign, this, this.goods_list[this.cur_index]);
  311. },
  312. attr(data) {
  313. this.appAttr = data;
  314. },
  315. specification(goods) {
  316. this.goods_id = goods.id;
  317. this.sign = goods.sign;
  318. if(this.sign != 'pintuan') {
  319. this.item = goods;
  320. this.attrGroup = goods.attr_groups;
  321. this.show = Math.random();
  322. }
  323. switch (this.sign) {
  324. case "advance":
  325. this.cartShow = 0;
  326. this.buyText = '支付定金';
  327. this.buyBool = true;
  328. break;
  329. case "booking":
  330. this.cartShow = 0;
  331. this.buyText = '立即预约';
  332. this.plugin = 'booking';
  333. break;
  334. case "pintuan":
  335. this.$request({
  336. url: this.$api.pt.detail,
  337. data: {
  338. id: this.goods_id,
  339. group_id: 0,
  340. }
  341. }).then((res) => {
  342. this.item = res.data.detail;
  343. this.selectGroupAttrId = this.item.pintuan_groups[0].id;
  344. this.attrGroup = this.item.attr_groups;
  345. this.show = Math.random();
  346. this.show_pt = true;
  347. this.request_pt(this.selectGroupAttrId);
  348. });
  349. break;
  350. case "integral_mall":
  351. this.cartShow = 0;
  352. this.buyText = '立即兑换';
  353. break;
  354. case "step":
  355. this.cartShow = 0;
  356. this.buyText = '立即兑换';
  357. break;
  358. case "gift":
  359. this.cartShow = 0;
  360. this.buyBool = true;
  361. this.buyText = '加入礼包';
  362. break;
  363. default:
  364. break;
  365. }
  366. },
  367. async request_pt(group_id) {
  368. try {
  369. const response = await this.$request({
  370. url: this.$api.pt.detail,
  371. data: {
  372. id: this.goods_id,
  373. group_id: group_id,
  374. }
  375. });
  376. if (response.code === 0) {
  377. this.item = response.data.detail;
  378. }
  379. } catch(e) {
  380. throw new Error(e);
  381. }
  382. },
  383. buy() {
  384. if (!this.submit()) {
  385. return false;
  386. }
  387. let goods = this.item;
  388. let number = this.appAttr.number;
  389. let select_attr = this.selectAttr;
  390. let goods_attr_id = select_attr.id;
  391. let attr = [];
  392. for (let i in select_attr.attr_list) {
  393. attr.push({
  394. attr_id: select_attr.attr_list[i].attr_id,
  395. attr_group_id: select_attr.attr_list[i].attr_group_id,
  396. });
  397. }
  398. let mch_list = [];
  399. let mch = {
  400. mch_id: goods.mch_id ? goods.mch_id : 0,
  401. goods_list: []
  402. };
  403. mch.goods_list.push({
  404. id: goods.id,
  405. attr: attr,
  406. num: number,
  407. cat_id: 0,
  408. goods_attr_id: goods_attr_id
  409. });
  410. mch_list.push(mch);
  411. uni.navigateTo({
  412. url: '/pages/order-submit/order-submit?mch_list=' + JSON.stringify(mch_list),
  413. })
  414. },
  415. individual() {
  416. if (this.pt) {
  417. this.pt = false;
  418. this.selectAttr = {};
  419. this.request_pt(0);
  420. } else {
  421. if (Object.keys(this.selectAttr).length === 0) {
  422. uni.showToast({
  423. title: '请选择规格',
  424. icon: "none"
  425. })
  426. } else {
  427. this.buy();
  428. }
  429. }
  430. },
  431. jump(data) {
  432. // #ifndef MP-BAIDU
  433. if (data.video_url && this.getVideo == 1) {
  434. uni.navigateTo({
  435. url: `/pages/goods/video?goods_id=${data.id}&sign=${data.sign}`
  436. });
  437. } else {
  438. uni.navigateTo({
  439. url: data.page_url
  440. });
  441. }
  442. // #endif
  443. // #ifdef MP-BAIDU
  444. uni.navigateTo({
  445. url: data.page_url
  446. });
  447. // #endif
  448. },
  449. onAttr(data) {
  450. this.selectAttr = data;
  451. },
  452. },
  453. created() {
  454. }
  455. }
  456. </script>
  457. <style scoped lang="scss">
  458. .box-grow--moeny{
  459. font-size:34rpx;
  460. font-family:Source Han Sans CN;
  461. font-weight:500;
  462. color: #FF4800;
  463. }
  464. .goods-name-style{
  465. font-size:34rpx;
  466. font-family:Source Han Sans CN;
  467. font-weight:500;
  468. color:rgba(61,61,61,1);
  469. overflow: hidden;
  470. text-overflow: ellipsis;
  471. white-space: nowrap;
  472. }
  473. .attr {
  474. position: fixed;
  475. bottom: 0;
  476. left: 0;
  477. z-index: 1503;
  478. }
  479. .pintuan {
  480. width: #{750upx};
  481. height: #{110upx};
  482. color: #ffffff;
  483. .single {
  484. background-color: #f39800;
  485. text-align: center;
  486. line-height: #{110upx};
  487. }
  488. .tuan {
  489. background-color: #ff4544;
  490. text-align: center;
  491. line-height: #{110upx};
  492. }
  493. }
  494. .app-goods-list {
  495. font-size: $uni-font-size-general-one;
  496. color: $uni-important-color-black;
  497. .sales {
  498. color: $uni-general-color-two;
  499. }
  500. .goods-item-1 {
  501. padding: #{16rpx} #{24rpx};
  502. background-color: #ffffff;
  503. border-top: #{1rpx} solid #e2e2e2;
  504. .cover-pic {
  505. border-radius: #{16rpx};
  506. margin-right: #{24rpx};
  507. position: relative;
  508. .out-dialog {
  509. width: #{200rpx};
  510. height: #{200rpx};
  511. position: absolute;
  512. top: 0;
  513. left: 0;
  514. z-index: 10;
  515. background-color: rgba(0,0,0,.5);
  516. image {
  517. width: #{200rpx};
  518. height: #{200rpx};
  519. }
  520. }
  521. }
  522. .content {
  523. padding: #{8rpx} 0;
  524. .sales {
  525. font-size: #{20rpx};
  526. }
  527. }
  528. .cart {
  529. width: #{50rpx};
  530. height: #{50rpx};
  531. display: block;
  532. }
  533. .sales-box {
  534. position: relative;
  535. }
  536. .cart-box {
  537. position: absolute;
  538. width:#{56rpx};
  539. height:#{56rpx};
  540. border-radius: 50%;
  541. border: 1px solid #ff4544;
  542. right: #{10rpx};
  543. bottom:#{5rpx};
  544. }
  545. }
  546. &.list-style-2 {
  547. padding: 0 #{24rpx};
  548. }
  549. .goods-item-2 {
  550. width: #{344rpx};
  551. margin-top: #{14rpx};
  552. background-color: #ffffff;
  553. border-radius: #{16rpx};
  554. overflow: hidden;
  555. position: relative;
  556. .out-dialog {
  557. border-top-left-radius: #{16rpx};
  558. border-top-right-radius: #{16rpx};
  559. width: #{344rpx};
  560. height: #{344rpx};
  561. position: absolute;
  562. top: 0;
  563. left: 0;
  564. z-index: 10;
  565. background-color: rgba(0,0,0,.5);
  566. image {
  567. width: #{344rpx};
  568. height: #{344rpx};
  569. }
  570. }
  571. &.mr-14 {
  572. margin-right: #{14rpx};
  573. }
  574. .goods-name {
  575. padding-top: #{20rpx};
  576. line-height: 1.4;
  577. margin-bottom: #{8rpx};
  578. }
  579. .content {
  580. margin-bottom: #{14rpx};
  581. }
  582. .padding {
  583. padding-left: #{24rpx};
  584. padding-right: #{24rpx};
  585. }
  586. .sales {
  587. font-size: #{20rpx};
  588. }
  589. .sales-box {
  590. margin-left: #{12rpx};
  591. }
  592. }
  593. &.list-style-3 {
  594. padding: 0 #{10rpx};
  595. }
  596. .goods-item-3 {
  597. width: #{238rpx};
  598. margin-top: #{8rpx};
  599. background-color: #ffffff;
  600. border-radius: #{16rpx};
  601. overflow: hidden;
  602. position: relative;
  603. .out-dialog {
  604. border-top-left-radius: #{16rpx};
  605. border-top-right-radius: #{16rpx};
  606. width: #{238rpx};
  607. height: #{238rpx};
  608. position: absolute;
  609. top: 0;
  610. left: 0;
  611. z-index: 10;
  612. background-color: rgba(0,0,0,.5);
  613. image {
  614. width: #{238rpx};
  615. height: #{238rpx};
  616. }
  617. }
  618. &.mr-8 {
  619. margin-right: #{8rpx};
  620. }
  621. .goods-name {
  622. line-height: 1.4;
  623. }
  624. .padding {
  625. padding-left: #{20rpx};
  626. padding-right: #{20rpx};
  627. }
  628. .sales {
  629. font-size: #{20rpx};
  630. padding-top: #{6rpx};
  631. }
  632. & > view:last-child {
  633. padding-bottom: #{20rpx};
  634. }
  635. .sales-box {
  636. padding: 0 #{20rpx};
  637. }
  638. }
  639. .goods-cart {
  640. width: #{36rpx};
  641. height: #{36rpx};
  642. }
  643. .goods-price {
  644. font-size: #{32rpx};
  645. }
  646. .sales-box {
  647. /*position: relative;*/
  648. }
  649. .moneyAndBtn-btn{
  650. font-size:34upx;
  651. font-family:Source Han Sans CN;
  652. font-weight:500;
  653. color: #fff;
  654. background: #F09A21;
  655. padding: 10upx 22upx;
  656. text-align: center;
  657. box-shadow: 0 4px 10px #999;
  658. border-radius: 8upx;
  659. }
  660. }
  661. </style>