多租户商城-商户小程序端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1827 lines
45 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <view
  3. class="container u-skeleton"
  4. @scroll="handlePageScroll"
  5. >
  6. <global-loading/>
  7. <view style="background-color: #FAFAFA">
  8. <!-- 拼团滚动-->
  9. <view class="news-box">
  10. <view class="news-bg">
  11. <swiper
  12. class="goodsImgswiper-box"
  13. :vertical="true"
  14. :circular="true"
  15. interval="8000"
  16. duration="2000"
  17. :autoplay="true"
  18. >
  19. <swiper-item
  20. v-for="(item, index) of broadCastList"
  21. :key="index"
  22. >
  23. <view class="news-item flex-items">
  24. <image
  25. class="item-avatar"
  26. :src="item.headImage"
  27. ></image>
  28. <view class="news-item-user">{{ item.name }}</view>
  29. <view class="news-item-info">{{ item.timeStr }}</view>
  30. <view
  31. class="news-item-info"
  32. v-if="item.type === 1"
  33. >给了好评
  34. </view>
  35. <view
  36. class="news-item-info"
  37. v-if="item.type === 2"
  38. >正在拼单
  39. </view>
  40. <view
  41. class="news-item-info"
  42. v-if="item.type === 3"
  43. >拼单成功
  44. </view>
  45. <view
  46. class="news-item-info"
  47. v-if="item.type === 4"
  48. >下单
  49. </view>
  50. </view>
  51. </swiper-item>
  52. </swiper>
  53. </view>
  54. </view>
  55. <!-- 轮播图+分享+价格名称+活动倒计时+优惠券 -->
  56. <GoodActivityDetail
  57. ref="goodActivityDetail"
  58. :sku-select="selectedSku"
  59. :product-info="productData"
  60. :time-active-type="timeActiveType"
  61. :mark-tools="markTools"
  62. :shop-mark-tools="shopMarkTools"
  63. @activityEnd="handleActivityEnd"
  64. @couponClick="handleShowCoupon"
  65. />
  66. <view class="prod-descr-title">产品描述</view>
  67. <view class="prod-descr-content">POÄNG 波昂扶手椅设计经典舒适耐用推出40多年来一直深受大众喜爱延续了摇椅经典的弯曲造型舒适的弹性达到全新高度</view>
  68. <view class="border-line"/>
  69. <!-- 选择SKU -->
  70. <view
  71. class="fs24 chooseSize-box flex-start"
  72. @click=" handleShowGoodsSkuSelect(6)">
  73. <view class="chooseSize-content flex-items flex-row flex-sp-between u-skeleton-fillet">
  74. <view class="flex-row-plus ">
  75. <label class="fs28 font-color-252744 fs-bold mar-left-30 font-color-999">{{$t('product.specification')}}</label>
  76. <view class="fs28 font-color-595B6B mar-left-30 flex-items">
  77. <view
  78. class="mar-right-10"
  79. v-for="(item, index) of currentSuk"
  80. :key="index"
  81. >{{ item.skuText || '-' }}
  82. </view>
  83. </view>
  84. </view>
  85. <image
  86. class="arrow-icon"
  87. src="https://wechat.hnthee.com/ceres-local-file/image/icon_common_grey_forward.png"
  88. ></image>
  89. </view>
  90. </view>
  91. <view class="sku-image-box">
  92. <!--规格图片遍历处理最大只显示4个-->
  93. <image class="sku-image" :src="imageUrl"/>
  94. <image class="sku-image" :src="imageUrl"/>
  95. <image class="sku-image-select" :src="imageUrl"/>
  96. <image class="sku-image" :src="imageUrl"/>
  97. <image class="sku-image-more" @click=" handleShowGoodsSkuSelect(6)" src="https://wechat.hnthee.com/ceres-local-file/image/prod_detail_sku_more.png"/>
  98. </view>
  99. <view class="border-line"/>
  100. <!-- 发货 -->
  101. <view class="express-box flex-items flex-row fs24 u-skeleton-fillet">
  102. <label class="fs28 font-color-252744 fs-bold mar-right-20 ">{{$t('order.send')}}</label>
  103. <!-- <image
  104. src="https://ceres.zkthink.com/static/images/mapIcon.png"
  105. v-if="productData.receive && productData.receive.receiveAdress"
  106. ></image>-->
  107. <label
  108. class="fs28 font-color-595B6B mar-left-10 mapName mar-right-30"
  109. v-if="productData.receive && productData.receive.receiveAdress"
  110. >{{
  111. productData.receive.receiveAdress
  112. }}</label>
  113. <label class="fs28 font-color-595B6B">{{$t('common.express')}}¥ {{ productData.logisticsPrice || 0 }}</label>
  114. </view>
  115. <view class="border-line-wide"/>
  116. <!--结合销售-->
  117. <combined-sales
  118. :pid="productId"
  119. :productData="productData"
  120. ></combined-sales>
  121. <!--拼团-->
  122. <view
  123. v-if="selectedSku.activityType === 1"
  124. class="borRig-line-20"
  125. ></view>
  126. <!-- 拼单列表 -->
  127. <view
  128. v-if="selectedSku.activityType === 1&&topThreeCollageOrders.length > 0"
  129. class="goodsDiscount"
  130. >
  131. <view class="questionTit mar-left-30 flex-items flex-row flex-sp-between">
  132. <label class="">这些人正在拼单</label>
  133. <view class="allMoreBox">
  134. <view
  135. class="allMore"
  136. @click="handleOpenGroupBookingList"
  137. >查看全部
  138. </view>
  139. <image
  140. class="evaluateAllArrow-icon mar-left-10"
  141. src="https://ceres.zkthink.com/static/img/user/arrow.png"
  142. ></image>
  143. </view>
  144. </view>
  145. <view
  146. class="groupBuy"
  147. v-for="(Gitem, index) in topThreeCollageOrders"
  148. :key="index"
  149. >
  150. <view
  151. class="groupBuyList"
  152. v-if="Gitem.time > 0"
  153. >
  154. <view class="groupBuyItem">
  155. <view class="leftAvatar">
  156. <img
  157. :src="Gitem.headImage"
  158. alt=""
  159. >
  160. <span>{{ Gitem.name }}</span>
  161. </view>
  162. <view class="rightInfo">
  163. <view
  164. class="groupBuyTime"
  165. style="width: 70%;"
  166. >
  167. <view class="needPeople flex-row-plus">还差<b>{{ Gitem.person }}</b>拼成</view>
  168. <view class="endDate">剩余{{ handleGetDownTime(Gitem.time) }}</view>
  169. </view>
  170. <view
  171. class="groupBuyBtn"
  172. @click="handleGoGroupBooking(Gitem.collageId)"
  173. >和Ta拼
  174. </view>
  175. </view>
  176. </view>
  177. </view>
  178. </view>
  179. </view>
  180. <!-- 评价 -->
  181. <GoodEvaluateAndQuestion
  182. ref="goodEvaluateAndQuestion"
  183. class=" u-skeleton-fillet"
  184. :product-info="productData"
  185. :comment-list="commentList"
  186. />
  187. <!-- 店铺 -->
  188. <view class="inStore-box flex-items flex-row flex-sp-between u-skeleton-fillet">
  189. <view class="flex-display flex-row">
  190. <view>
  191. <image
  192. @click="handleJumpToStore"
  193. class="inStore-logo default-img"
  194. onerror="this.src='url(https://wechat.hnthee.com/ceres-local-file/image/default.png) no-repeat center';this.οnerrοr=null"
  195. :src="productData.shopLogo"
  196. ></image>
  197. </view>
  198. <view class="flex-display flex-column mar-left-20">
  199. <label @click="handleJumpToStore" class="fs32 fs-bold font-color-252744">{{ productData.shopName }}</label>
  200. <view class="flex-display flex-row fs24 font-color-252744 mar-top-5">
  201. <label>{{$t('common.classifynum')}}{{ productData.classifyNumber }}</label>
  202. <label class="mar-left-30">{{$t('common.soldnum',{number:productData.number})}}</label>
  203. </view>
  204. </view>
  205. </view>
  206. <view
  207. class="inStore-but"
  208. @click="handleJumpToStore"
  209. >去逛逛
  210. </view>
  211. </view>
  212. <!-- 详细信息 -->
  213. <view class="goodsDetails-box u-skeleton-fillet">
  214. <view class="goodsDetails-title">
  215. <view class="goodsDetails-Line"></view>
  216. <label class="goodsDetails-text">{{$t('common.goodsdetail')}}</label>
  217. <view class="goodsDetails-Line"></view>
  218. </view>
  219. <view class="goodsDetailsimg-box">
  220. <view class="">
  221. <rich-text :nodes="sellDescList"></rich-text>
  222. </view>
  223. </view>
  224. </view>
  225. </view>
  226. <!-- 底部购买 -->
  227. <view class="buygoods-box">
  228. <!-- <view
  229. class="buygoodsBut-box flex-row-plus"
  230. :style="{'height':(isIphone === true? 160:130)+'rpx'}"
  231. >-->
  232. <view
  233. class="buygoodsBut-box flex-row-plus"
  234. >
  235. <view class="btns_container">
  236. <view
  237. class="btns flex-column-plus"
  238. @click="handleJumpToStore"
  239. >
  240. <image
  241. class="store-icon"
  242. src="@/static/images/temp/prod_detail_shop.png"
  243. ></image>
  244. <!-- <label class="fs20 font-color-252744">{{$t('common.beautishop')}}</label>-->
  245. </view>
  246. <!-- #ifdef MP-WEIXIN || APP-PLUS || H5 -->
  247. <!-- <view
  248. class="btns flex-column-plus mar-left-10"
  249. @click="flyToService"
  250. >
  251. <image
  252. class="store-icon"
  253. src="https://ceres.zkthink.com/static/images/service-product-detail.png"
  254. ></image>
  255. <label class="fs22">{{$t('common.service')}}</label>
  256. </view>-->
  257. <!-- #endif -->
  258. <view
  259. class="btns flex-column-plus mar-left-10 flex-items Cart"
  260. @click="handleJumpToShopCart"
  261. >
  262. <view
  263. class="cartAllNum"
  264. v-if="allCartNum>0"
  265. >{{ allCartNum }}
  266. </view>
  267. <image
  268. class="store-icon"
  269. src="@/static/images/temp/prod_detail_cart.png"
  270. ></image>
  271. <!-- <label class="fs20 font-color-252744">{{$t('page.shoppingcart')}}</label>-->
  272. </view>
  273. </view>
  274. <view class="btns_container">
  275. <view
  276. class="flex-row-plus offShelf"
  277. v-if="productData.shelveState === 0"
  278. >
  279. {{$t('common.spyxj')}}
  280. </view>
  281. <view
  282. class="flex-row-plus flex-items"
  283. v-else-if="selectedSku.activityType === 1"
  284. >
  285. <view
  286. class="joinShopCartBut"
  287. @click=" handleShowGoodsSkuSelect(4)"
  288. >{{$t('common.ddgm')}}
  289. </view>
  290. <view
  291. class="buyNowBut"
  292. @click=" handleShowGoodsSkuSelect(3)"
  293. >{{$t('common.wykt')}}
  294. </view>
  295. </view>
  296. <view
  297. class="flex-row-plus flex-items"
  298. v-else
  299. >
  300. <view
  301. class="joinShopCartBut"
  302. @click=" handleShowGoodsSkuSelect(1)"
  303. >{{$t('common.addtocart')}}
  304. </view>
  305. <view
  306. class="buyNowBut"
  307. @click=" handleShowGoodsSkuSelect(2)"
  308. >{{$t('common.buynow')}}
  309. </view>
  310. </view>
  311. </view>
  312. </view>
  313. </view>
  314. <!-- 回到顶部 -->
  315. <view class="returnTopService-box">
  316. <view
  317. class="returnTop-box flex-items-plus flex-column"
  318. @click="handleReturnTop"
  319. :style="{'display':(returnTopFlag===true? 'flex':'none')}"
  320. >
  321. <image
  322. class="returnTopImg"
  323. src="https://wechat.hnthee.com/ceres-local-file/image/scroll_top.png"
  324. ></image>
  325. </view>
  326. </view>
  327. <!-- SKU选择器 -->
  328. <GoodSkuSelect
  329. ref="skuSelect"
  330. :product-data="productData"
  331. :selected-sku="selectedSku"
  332. :collage-id="collageId"
  333. @postSelectSku="selectSkuPostProcessor"
  334. @getCurrentSku="handleSelectSku"
  335. @changeCartNum="(num)=>allCartNum = num"
  336. />
  337. <!-- 优惠券选择器 -->
  338. <coupon-popup
  339. ref="couponPopup"
  340. :markTools="markTools"
  341. :shopMarkTools="shopMarkTools"
  342. :setTop="topLeft"
  343. :currentActive="currentActive"
  344. ></coupon-popup>
  345. <!-- 拼单弹框 -->
  346. <u-popup
  347. class="popupDiscount"
  348. v-model="showGroupBuyList"
  349. mode="center"
  350. border-radius="14"
  351. close-icon-pos="top-right"
  352. close-icon-size="20"
  353. >
  354. <view class="popupDiscountTit">这些人正在拼单</view>
  355. <view class="groupBuy">
  356. <view class="groupBuyList">
  357. <scroll-view
  358. style="height: 480upx;"
  359. scroll-y
  360. >
  361. <view
  362. class="groupBuyItem1"
  363. v-for="(aitem,index) in selectedSku.collageOrders"
  364. :key="index"
  365. >
  366. <view
  367. class="leftAvatar"
  368. v-if="aitem.time > 0"
  369. >
  370. <img
  371. :src="aitem.headImage"
  372. alt=""
  373. >
  374. <view class="groupBuyTime">
  375. <view class="needPeople"><span>{{ aitem.name }}</span>还差<b>{{ aitem.person }}</b>
  376. </view>
  377. <view class="endDate">剩余{{ handleGetDownTime(aitem.time) }}</view>
  378. </view>
  379. </view>
  380. <view
  381. class="rightInfo"
  382. v-if="aitem.time > 0"
  383. >
  384. <view
  385. class="groupBuyBtn"
  386. @click="handleGoGroupBooking(aitem.collageId)"
  387. >和Ta拼
  388. </view>
  389. </view>
  390. </view>
  391. </scroll-view>
  392. </view>
  393. </view>
  394. </u-popup>
  395. <!-- 骨架屏 -->
  396. <Skeleton
  397. el-color="#efefef"
  398. bg-color="#fff"
  399. :loading="isFirstComeIn&&loading"
  400. :animation="true"
  401. ></Skeleton>
  402. </view>
  403. </template>
  404. <script>
  405. import Skeleton from "../../components/Skeleton";
  406. import UButton from "../../uview-ui/components/u-button/u-button";
  407. import CombinedSales from "@/components/activities/combinedSales";
  408. import CouponPopup from "../../components/goodsDetalils/coupon-popup";
  409. import { Services } from "../../utils/services";
  410. import GoodEvaluateAndQuestion from "./components/GoodEvaluateAndQuestion";
  411. import GoodActivityDetail from "./components/GoodActivityDetail";
  412. import GoodSkuSelect from "./components/GoodSkuSelect";
  413. import { TimeFormatting } from "../../utils/timeUtil";
  414. import USkeleton from "../../uview-ui/components/u-skeleton/u-skeleton";
  415. const NET = require('../../utils/request')
  416. const API = require('../../config/api')
  417. export default {
  418. components: {
  419. USkeleton,
  420. Skeleton,
  421. CouponPopup,
  422. CombinedSales,
  423. UButton,
  424. GoodEvaluateAndQuestion, GoodActivityDetail, GoodSkuSelect
  425. },
  426. data() {
  427. return {
  428. isFirstComeIn: true,
  429. loading: true,
  430. isIphone: "",
  431. returnTopFlag: false, // 回到顶部
  432. productId: '', // 商品ID,有可能屎缓存数据
  433. shopGroupWorkId: null,// 拼团数据ID
  434. topThreeCollageOrders: {}, //当前商品拼单数据
  435. collageId: 0, // 去拼团时的拼单ID
  436. broadCastList: [], // 拼团滚动数据
  437. showGroupBuyList: false, // 是否展示拼单弹窗
  438. shopGroupWorkTicker: null, // 拼团倒计时定时器
  439. paramSkuId: null, // 秒杀商品ID
  440. // 商品详情
  441. productData: {},
  442. // 当前选中SKU
  443. selectedSku: {},
  444. currentSuk: [], // 选中的SKU(子组件给当前页面做数据渲染)
  445. buyNum: 1,// 当前选取的SKU购买数量
  446. storeId: '',// 店铺ID
  447. commentList: [], // 商品评价列表
  448. sellDescList: '', // 商品详情长图(富文本)
  449. timeActiveType: true,// 是否开启活动(非则预热)
  450. btnType: 1, // 拉起SKU窗口的按钮类型 1加入购物车 2立即购买 3开团 4单独购买 6选择SKU
  451. allCartNum: 0, // 购物车数量
  452. markTools: [], //平台优惠券
  453. shopMarkTools: [], //店铺优惠券
  454. currentActive: 0, // 优惠券选项卡类型
  455. topLeft: 0, // 距离顶部(返回顶部使用)
  456. // 埋点对象
  457. pointOption: {
  458. inTime: null,
  459. data: {
  460. eventType: 1,
  461. productIds: '',
  462. }
  463. },
  464. imageUrl: 'http://122.9.152.120/ceres-local-file/file/2023/05/4237d7abe33d45a485a4b81c865e55bb_9344949001256.png'
  465. }
  466. },
  467. created() {
  468. if (this.ticker) { //这一段是防止进入页面出去后再进来计时器重复启动
  469. clearInterval(this.ticker);
  470. }
  471. if (this.allCartNum > 99) {
  472. this.allCartNum = '...'
  473. }
  474. },
  475. beforeDestroy() {
  476. },
  477. onShow() {
  478. },
  479. onLoad(options) {
  480. // 页面滚动条归0,不然骨架屏有问题
  481. uni.pageScrollTo({
  482. scrollTop:0,
  483. duration:0
  484. })
  485. this.productData = {
  486. logisticsPrice: 0,
  487. images: ['123', '123', '123'],
  488. productName: '....',
  489. ifCollect: 1,
  490. }
  491. this.selectedSku = {
  492. activityType: 0,
  493. originalPrice: 0
  494. }
  495. if(options.detail){
  496. options = this.$getJumpParam(options)
  497. }
  498. this.isFirstComeIn = true
  499. this.loading = true
  500. let salesId = null
  501. this.pointOption.inTime = new Date().getTime()
  502. this.isIphone = getApp().globalData.isIphone;
  503. let item = getApp().globalData.productShareItem
  504. if (item) {
  505. const item = getApp().globalData.productShareItem
  506. this.shopId = parseInt(item.shopId)
  507. this.productId = item.productId
  508. this.paramSkuId = item.skuId
  509. salesId = parseInt(item.salesId)
  510. getApp().globalData.productShareItem = undefined
  511. } else {
  512. this.shopId = parseInt(options.shopId)
  513. this.productId = options.productId
  514. this.paramSkuId = options.skuId
  515. salesId = parseInt(options.salesId)
  516. }
  517. // 判断是否是拼团
  518. if (options.shopGroupWorkId) {
  519. this.shopGroupWorkId = options.shopGroupWorkId
  520. }
  521. this.handleGetProductDetail()
  522. // 绑定分销关系
  523. salesId && this.shopId ? this.bindSalesCustomer(salesId, this.shopId) : ''
  524. this.allCartNum = uni.getStorageSync('allCartNum')
  525. },
  526. onUnload() {
  527. // 判断是否要埋点
  528. const nowTime = new Date().getTime()
  529. if (nowTime - this.pointOption.inTime >= 5000) {
  530. // 埋点
  531. this.pointOption.data.productIds = this.productId
  532. this.$store.dispatch('doPointer', this.pointOption.data)
  533. }
  534. // 销毁平团倒计时计时器
  535. if (this.shopGroupWorkTicker) {
  536. clearInterval(this.shopGroupWorkTicker)
  537. this.shopGroupWorkTicker = null
  538. }
  539. },
  540. mounted() {
  541. },
  542. onPageScroll(e) {
  543. this.returnTopFlag = e.scrollTop > 600;
  544. this.topLeft = e.scrollTop
  545. },
  546. methods: {
  547. /**
  548. * 页面滚动事件
  549. * @param e
  550. */
  551. handlePageScroll(e) {
  552. this.topLeft = e.scrollTop
  553. },
  554. /**
  555. * 选取sku
  556. * @param skuObj:{currentSuk:object,selectedSku:object,buyNum:number}
  557. */
  558. handleSelectSku(skuObj) {
  559. this.currentSuk = skuObj.currentSku
  560. this.selectedSku = skuObj.skuItem
  561. this.buyNum = skuObj.buyNum
  562. },
  563. /**
  564. * 选择sku后置方法
  565. * 判断有无活动等操作
  566. */
  567. selectSkuPostProcessor() {
  568. const ifEnable = this.selectedSku['ifEnable']
  569. if (this.selectedSku.activityType === 1 && ifEnable === 0) {
  570. this.topThreeCollageOrders = this.selectedSku.collageOrders.slice(0, 3)
  571. }
  572. if ([1, 2, 3, 4, 5].includes(this.selectedSku.activityType) && ifEnable === 0) {
  573. this.$refs.goodActivityDetail.handleGetCountDownNumber(this.selectedSku.endTime)
  574. }
  575. this.timeActiveType = ifEnable === 0;
  576. },
  577. /**
  578. * 获取拼团滚动数据
  579. */
  580. async handleGetGroupBookingRollList() {
  581. let param = {
  582. productId: this.productId,
  583. shopGroupWorkId: this.shopGroupWorkId ?? undefined,
  584. }
  585. const res = await NET.request(API.GetBroadCastList, param, 'GET')
  586. this.broadCastList = res.data
  587. },
  588. /**
  589. * 和他人拼单
  590. * @param collageId 已存在的拼团订单ID
  591. */
  592. handleGoGroupBooking(collageId) {
  593. this.showGroupBuyList = false
  594. this.collageId = collageId
  595. this.$refs.skuSelect.goodsDetailShowFlag = true
  596. },
  597. /**
  598. * 设置拼团倒计时
  599. */
  600. handleSetDownTime() { //这个计时器是每秒减去数组中指定字段的时间
  601. let productHaveCollageOrder = false
  602. // 判断sku组合中是否存在拼单
  603. const skuCollects = this.productData.map
  604. for (const skuCollectItemKey in skuCollects) {
  605. const collageOrders = skuCollects[skuCollectItemKey]['collageOrders']
  606. if (collageOrders && collageOrders.length > 0) {
  607. productHaveCollageOrder = true
  608. break
  609. }
  610. }
  611. if (!productHaveCollageOrder) return
  612. this.shopGroupWorkTicker = setInterval(() => {
  613. for (const skuCollectItemKey in skuCollects) {
  614. const collageOrders = skuCollects[skuCollectItemKey]['collageOrders']
  615. if (collageOrders && collageOrders.length > 0) {
  616. collageOrders.forEach(collageItem => {
  617. collageItem.time > 0 ? collageItem.time -= 1000 : ''
  618. })
  619. }
  620. }
  621. }, 1000);
  622. },
  623. /**
  624. * 根据时间戳获取格式化时间处理计时器
  625. * @param remainMillSecs 毫秒还有多久结束
  626. * @return {string}
  627. */
  628. handleGetDownTime(remainMillSecs) {
  629. if (remainMillSecs <= 0) {
  630. clearInterval(this.shopGroupWorkTicker)
  631. this.shopGroupWorkTicker = null
  632. this.handleGetProductDetail()
  633. }
  634. const timeFormatting = TimeFormatting(remainMillSecs / 1000);
  635. return `${ timeFormatting.hour }:${ timeFormatting.min }:${ timeFormatting.sec }`;
  636. },
  637. /**
  638. * 跳转到购物车
  639. */
  640. handleJumpToShopCart() {
  641. this.$jumpToTabbar('../../pages/tabbar/cart/index')
  642. },
  643. /**
  644. * 跳转到店铺
  645. */
  646. handleJumpToStore() {
  647. this.$jump(`../store/index?storeId=${ this.shopId }`)
  648. },
  649. /**
  650. * 返回头部
  651. */
  652. handleReturnTop() {
  653. uni.pageScrollTo({
  654. scrollTop: 0,
  655. duration: 300
  656. });
  657. },
  658. /**
  659. * 打开SKU弹窗
  660. * @param type 1加入购物车 2立即购买 3开团 4单独购买 6选择SKU
  661. */
  662. handleShowGoodsSkuSelect(type) {
  663. // 为type情况时,绝不可能为和他人拼单
  664. this.collageId = 0
  665. this.$refs.skuSelect.btnType = type
  666. this.$refs.skuSelect.goodsDetailShowFlag = true
  667. },
  668. /**
  669. * 打开优惠券弹窗
  670. */
  671. handleShowCoupon() {
  672. this.$refs.couponPopup.showActivity = true
  673. },
  674. /**
  675. * 活动商品时间到后置方法
  676. * 供GoodActivityDetail组件调用
  677. */
  678. handleActivityEnd() {
  679. this.selectedSku.activityType = 0
  680. location.reload()
  681. },
  682. /**
  683. * 获取商品详情
  684. */
  685. async handleGetProductDetail() {
  686. this.loading = true
  687. // uni.showLoading({
  688. // title: '加载中...',
  689. // mask: true
  690. // })
  691. try {
  692. let postData = {
  693. shopId: this.shopId,
  694. productId: this.productId,
  695. skuId: this.paramSkuId,
  696. terminal: 1
  697. }
  698. const res = await NET.request(API.QueryProductDetail, postData, "GET")
  699. this.isFirstComeIn = false
  700. this.loading = false
  701. this.productData = res.data
  702. this.markTools = res.data.markTools //平台优惠券
  703. this.shopMarkTools = res.data.shopMarkTools //店铺优惠券
  704. this.currentActive = this.markTools.length === 0 && this.shopMarkTools.length > 0 ? 1 : 0
  705. //处理单规格商品,如果是单款式商品,需要特殊处理productData.names
  706. const skuCollectionList = this.productData.map
  707. const skuCollectionListKeys = Object.keys(skuCollectionList)
  708. if (skuCollectionListKeys.length === 1 && skuCollectionListKeys[0] === '单款项') {
  709. this.productData.names[0].values.push({
  710. skuValue: this.productData.names[0].skuName,
  711. valueCode: '单款项'
  712. })
  713. }
  714. //如果sku的图像为空,设置为商品的图像
  715. for (const key in skuCollectionList) {
  716. if (!skuCollectionList[key].image) {
  717. skuCollectionList[key].image = this.productData.images[0]
  718. }
  719. }
  720. // 评价
  721. this.commentList = res.data.comments
  722. // 宝贝详情
  723. this.sellDescList = res.data.text.replace(/\<img class=\"wscnph\"/gi,
  724. '<img')
  725. .replace(/\<img style=\"display: block; margin-left: auto; margin-right: auto;\"/gi,
  726. '<img')
  727. .replace(/\<img/gi,
  728. '<img style="display:block;float: none;margin: 0;padding: 0;width:100%;max-width:100%;height:auto" ')
  729. //渲染商详之后,如果参数传了skuId,则选中该skuId,否则选中第一个规格
  730. this.$nextTick(async () => {
  731. if (this.paramSkuId) {
  732. this.$refs.skuSelect.handleSelectBySkuId(this.paramSkuId)
  733. } else {
  734. // 默认选中第0个
  735. for (const skuRowItem of this.productData.names) {
  736. this.$refs.skuSelect.handleClickSkuItem(skuRowItem.nameCode, skuRowItem.values[0].valueCode)
  737. }
  738. }
  739. //如果是拼团,设置拼团id
  740. if (this.productData.activityType === 1) {
  741. this.shopGroupWorkId = this.productData.shopGroupWorkId
  742. await this.handleGetGroupBookingRollList()
  743. this.handleSetDownTime();
  744. }
  745. await this.$refs.goodEvaluateAndQuestion.handleGetProblemList()
  746. })
  747. } finally {
  748. uni.hideLoading()
  749. // this.loading = false
  750. }
  751. },
  752. /**
  753. * 绑定分销关系
  754. * @param salesId 分销员ID
  755. * @param storeId 店铺ID
  756. */
  757. bindSalesCustomer(salesId, storeId) {
  758. //如果已登录,静默绑定客户关系,否则跳转到登录页面
  759. if (!uni.getStorageSync('storage_key')) {
  760. uni.setStorageSync('salesId', salesId)
  761. uni.setStorageSync("shopId", storeId)
  762. uni.navigateTo({
  763. url: '../../pages_category_page2/userModule/login'
  764. })
  765. return
  766. }
  767. NET.request(API.BindSalesCustomer, {
  768. shopId: storeId,
  769. distributorId: salesId
  770. }, 'POST').then(res => {
  771. })
  772. }
  773. ,
  774. /**
  775. * 打开拼团列表
  776. */
  777. handleOpenGroupBookingList() {
  778. if (this.topThreeCollageOrders.length > 0) {
  779. this.showGroupBuyList = true
  780. } else {
  781. uni.showToast({
  782. title: "还没有人拼单,快去拼单吧!",
  783. icon: "none"
  784. })
  785. }
  786. }
  787. ,
  788. /**
  789. * 打开客服
  790. * @return {Promise<void>}
  791. */
  792. async flyToService() {
  793. (await Services(this.shopId)).flyToService()
  794. }
  795. ,
  796. }
  797. }
  798. </script>
  799. <style>
  800. .page {
  801. background-color: #F7F7F7;
  802. }
  803. </style>
  804. <style
  805. scoped
  806. lang="scss"
  807. >
  808. .page {
  809. background-color: #F7F7F7;
  810. }
  811. .news-box {
  812. position: fixed;
  813. left: 20rpx;
  814. top: 200rpx;
  815. z-index: 9999;
  816. .news-bg {
  817. width: 450rpx;
  818. height: 70rpx;
  819. overflow: hidden;
  820. .news-item {
  821. background: rgba(0, 0, 0, 0.75);
  822. border-radius: 16rpx;
  823. height: 70rpx;
  824. color: #FFFFFF;
  825. font-size: 24rpx;
  826. padding: 0 20rpx;
  827. width: 450rpx;
  828. .item-avatar {
  829. width: 50rpx;
  830. height: 50rpx;
  831. border-radius: 50%;
  832. margin-right: 20rpx;
  833. }
  834. }
  835. }
  836. }
  837. .tabsbox {
  838. width: 100%;
  839. margin-top: 20rpx;
  840. background-color: #FFFFFF;
  841. }
  842. .checkimg {
  843. width: 40rpx;
  844. height: 40rpx;
  845. margin-right: 30rpx;
  846. }
  847. .container {
  848. padding-bottom: 180upx;
  849. .arrow-icon {
  850. width: 16rpx;
  851. height: 28rpx;
  852. }
  853. .goodgDes-box {
  854. background-color: #FFFFFF;
  855. width: 100%;
  856. padding-bottom: 25rpx;
  857. .priceBuyNum-box {
  858. width: 677rpx;
  859. margin-top: 30rpx;
  860. }
  861. .nameContainer {
  862. display: flex;
  863. .goodsName-box {
  864. width: 677rpx;
  865. height: 85rpx;
  866. .img618-cion {
  867. width: 70rpx;
  868. height: 36rpx;
  869. }
  870. }
  871. .collectBox {
  872. width: 80rpx;
  873. margin: 0 30rpx 0 15rpx;
  874. display: flex;
  875. flex-direction: column;
  876. justify-content: center;
  877. align-items: center;
  878. }
  879. .store-icon {
  880. width: 48rpx;
  881. height: 48rpx;
  882. }
  883. }
  884. .discounts-box {
  885. margin-top: 20rpx;
  886. .discounts-text {
  887. margin-left: 10rpx;
  888. color: #FF7800;
  889. background-color: #FFE4CC;
  890. padding: 6rpx 12rpx;
  891. border-radius: 4rpx;
  892. }
  893. }
  894. .activity-box {
  895. display: flex;
  896. flex-direction: row;
  897. justify-content: center;
  898. align-items: flex-end;
  899. border-top: 1upx solid #EDEDED;
  900. .activity-content {
  901. width: 614rpx;
  902. padding-top: 20rpx;
  903. .activity-text {
  904. color: #FF7700;
  905. border: 1rpx solid #FF7700;
  906. padding: 6rpx 23rpx;
  907. }
  908. .coupon-arrow {
  909. width: 16rpx;
  910. height: 24rpx;
  911. margin-left: 15rpx;
  912. }
  913. }
  914. }
  915. }
  916. .express-box {
  917. height: 100rpx;
  918. padding-left: 30rpx;
  919. border-top: 12rpx solid #F8F8F8;
  920. border-bottom: 12rpx solid #F8F8F8;
  921. image {
  922. width: 21rpx;
  923. height: 27rpx;
  924. }
  925. .expressSite-icon {
  926. width: 30rpx;
  927. height: 30rpx;
  928. }
  929. .mapName {
  930. position: relative;
  931. &:before {
  932. content: '';
  933. width: 2rpx;
  934. height: 30rpx;
  935. background: #CCCCCC;
  936. display: block;
  937. position: absolute;
  938. right: -16rpx;
  939. top: 5rpx;
  940. }
  941. }
  942. }
  943. .chooseSize-box {
  944. height: 90rpx;
  945. margin: 10rpx 0;
  946. margin-right: 30rpx;
  947. .chooseSize-content {
  948. width: 100%;
  949. }
  950. }
  951. .questionTit {
  952. height: 90rpx;
  953. border-bottom: 1rpx solid #EEEEEE;
  954. margin-right: 35rpx;
  955. color: #333333;
  956. font-size: 30rpx;
  957. .allMoreBox {
  958. display: flex;
  959. align-items: center;
  960. color: #999999;
  961. font-size: 24rpx;
  962. .evaluateAllArrow-icon {
  963. width: 18rpx;
  964. height: 24rpx;
  965. }
  966. }
  967. }
  968. .shopEvaList {
  969. display: flex;
  970. padding: 30rpx;
  971. flex-wrap: wrap;
  972. border-bottom: 20rpx solid #EEEEEE;
  973. .shopEvaItem {
  974. padding: 0 14rpx;
  975. height: 60rpx;
  976. background: #ffe4cc;
  977. border-radius: 6rpx;
  978. line-height: 60rpx;
  979. text-align: center;
  980. font-size: 28rpx;
  981. color: #666666;
  982. margin: 0 20rpx 20rpx 0;
  983. }
  984. }
  985. .storeEvaluate-box {
  986. background-color: #FFFFFF;
  987. margin-top: 20rpx;
  988. .storeEvaluate {
  989. width: 690rpx;
  990. padding: 20rpx 0;
  991. border-bottom: 1rpx solid #EDEDED;
  992. }
  993. .storeEvaluateTag-box {
  994. margin-top: 10rpx;
  995. margin-left: 10rpx;
  996. padding-bottom: 30rpx;
  997. display: flex;
  998. flex-wrap: wrap;
  999. .storeEvaluateTag-text {
  1000. background-color: #FFE4CC;
  1001. border-radius: 6rpx;
  1002. padding: 16rpx 14rpx;
  1003. color: #656565;
  1004. margin-left: 20rpx;
  1005. margin-top: 20rpx;
  1006. }
  1007. }
  1008. }
  1009. .inStore-box {
  1010. background-color: #FFFFFF;
  1011. padding: 30rpx 30rpx;
  1012. .inStore-logo {
  1013. width: 74rpx;
  1014. height: 74rpx;
  1015. border-radius: 20rpx;
  1016. }
  1017. .inStore-but {
  1018. width: 155rpx;
  1019. height: 68rpx;
  1020. line-height: 68rpx;
  1021. text-align: center;
  1022. font-size: 24rpx;
  1023. color: #FAFAFA;
  1024. background: #333333;
  1025. border-radius: 35rpx;
  1026. /* &:before {
  1027. content: '';
  1028. width: 60rpx;
  1029. height: 60rpx;
  1030. background: url("https://ceres.zkthink.com/static/images/arrow.png") no-repeat center center;
  1031. background-size: contain;
  1032. display: block;
  1033. position: absolute;
  1034. right: 0;
  1035. }*/
  1036. }
  1037. }
  1038. .goodsDetails-box {
  1039. background-color: #FFFFFF;
  1040. //margin-top: 20rpx;
  1041. padding: 20rpx 30rpx;
  1042. .goodsDetails-title {
  1043. display: flex;
  1044. flex-direction: row;
  1045. align-items: center;
  1046. margin-bottom: 30rpx;
  1047. color: #252744;
  1048. font-weight: bold;
  1049. font-size: 32rpx;
  1050. .goodsDetails-Line {
  1051. width: 252rpx;
  1052. border-bottom: 1rpx solid #D3D4DE;
  1053. }
  1054. .goodsDetails-text {
  1055. padding: 0 22rpx;
  1056. }
  1057. }
  1058. .goodsDetailsimg-box {
  1059. }
  1060. }
  1061. .priceExplain-box {
  1062. background-color: #FFFFFF;
  1063. margin-top: 20rpx;
  1064. padding: 20rpx 30rpx;
  1065. .priceExplain-title {
  1066. display: flex;
  1067. flex-direction: row;
  1068. align-items: center;
  1069. .priceExplain-Line {
  1070. width: 265rpx;
  1071. border-bottom: 1rpx solid #EDEDED;
  1072. }
  1073. .priceExplain-text {
  1074. padding: 0 22rpx;
  1075. }
  1076. }
  1077. .priceExplain-dot {
  1078. width: 9rpx;
  1079. height: 9rpx;
  1080. border: 1rpx solid #FF7700;
  1081. border-radius: 50%;
  1082. background-color: #FF7700;
  1083. }
  1084. }
  1085. .buygoods-box {
  1086. position: fixed;
  1087. bottom: 0rpx;
  1088. box-sizing: border-box;
  1089. z-index: 999;
  1090. .groupByInfo {
  1091. background: #fffbe9;
  1092. padding: 0 30rpx;
  1093. height: 80rpx;
  1094. .groupByInfoBox {
  1095. height: 80rpx;
  1096. }
  1097. .groupByLeft {
  1098. .groupByAvatar {
  1099. margin-right: 15rpx;
  1100. }
  1101. img {
  1102. width: 50rpx;
  1103. height: 50rpx;
  1104. }
  1105. .name {
  1106. font-size: 24rpx;
  1107. }
  1108. .groupByNum {
  1109. margin-right: 10rpx;
  1110. }
  1111. .groupByTime {
  1112. color: #333333;
  1113. }
  1114. }
  1115. .groupByBtn {
  1116. height: 60rpx;
  1117. background: #333333;
  1118. color: #FFEBC4;
  1119. font-size: 14rpx;
  1120. line-height: 60rpx;
  1121. text-align: center;
  1122. padding: 0 20rpx;
  1123. }
  1124. }
  1125. .buygoodsBut-box {
  1126. width: 750rpx;
  1127. height: 180rpx;
  1128. padding: 20rpx 32rpx;
  1129. background-color: #FFFFFF;
  1130. border-top-right-radius: 60rpx;
  1131. border-top-left-radius: 60rpx;
  1132. //box-shadow: 0rpx 0rpx 10rpx 1rpx #EDEDED;
  1133. box-sizing: border-box;
  1134. display: flex;
  1135. justify-content: space-between;
  1136. .btns_container {
  1137. display: flex;
  1138. align-items: center;
  1139. }
  1140. .btns {
  1141. width: 80rpx;
  1142. }
  1143. .Cart {
  1144. position: relative;
  1145. .cartAllNum {
  1146. position: absolute;
  1147. width: 30rpx;
  1148. height: 30rpx;
  1149. line-height: 30rpx;
  1150. text-align: center;
  1151. font-size: 17rpx;
  1152. color: #FFFFFF;
  1153. background: #F54639;
  1154. border-radius: 50%;
  1155. opacity: 1;
  1156. z-index: 999;
  1157. }
  1158. // #ifdef APP-PLUS
  1159. .cartAllNum {
  1160. right: -6rpx;
  1161. top: -6rpx;
  1162. }
  1163. // #endif
  1164. /* #ifdef H5 */
  1165. .cartAllNum {
  1166. right: -10rpx;
  1167. top: -6rpx;
  1168. }
  1169. /* #endif */
  1170. /* #ifdef MP-WEIXIN */
  1171. .cartAllNum {
  1172. right: -3rpx;
  1173. top: 0;
  1174. }
  1175. /* #endif */
  1176. }
  1177. .store-icon {
  1178. width: 48rpx;
  1179. height: 48rpx;
  1180. }
  1181. .joinShopCartBut {
  1182. width: 235rpx;
  1183. height: 88rpx;
  1184. background-color: #FFFFFF;
  1185. color: #333333;
  1186. font-size: 32rpx;
  1187. line-height: 85rpx;
  1188. border: 1px solid #252744;
  1189. border-radius: 49rpx;
  1190. text-align: center;
  1191. margin-left: 40rpx;
  1192. box-sizing: border-box;
  1193. }
  1194. .buyNowBut {
  1195. width: 235rpx;
  1196. height: 88rpx;
  1197. //background: #333333;
  1198. background: linear-gradient(-10deg, #252744, #484A66);
  1199. border-radius: 49rpx;
  1200. color: #FFFFFF;
  1201. font-size: 32rpx;
  1202. line-height: 85rpx;
  1203. text-align: center;
  1204. margin-left: 16rpx;
  1205. }
  1206. .offShelf {
  1207. background: #b7b7b7;
  1208. border-radius: 50rpx;
  1209. width: 360rpx;
  1210. margin-left: 50rpx;
  1211. line-height: 80rpx;
  1212. height: 80rpx;
  1213. justify-content: center;
  1214. color: #333333;
  1215. }
  1216. }
  1217. }
  1218. .returnTopService-box {
  1219. position: fixed;
  1220. bottom: 200rpx;
  1221. right: 30rpx;
  1222. .fs16 {
  1223. font-size: 16rpx;
  1224. }
  1225. .returnTop-box {
  1226. width: 98rpx;
  1227. height: 98rpx;
  1228. //border-radius: 50%;
  1229. //background: #FFFFFF;
  1230. //opacity: 0.8;
  1231. .returnTopImg {
  1232. width: 98rpx;
  1233. height: 98rpx;
  1234. }
  1235. }
  1236. .serviceImg-box {
  1237. width: 90rpx;
  1238. height: 90rpx;
  1239. border-radius: 50%;
  1240. background-color: #FFFFFF;
  1241. box-shadow: 0rpx 0rpx 5rpx 3rpx #999999;
  1242. .serviceImg {
  1243. width: 36rpx;
  1244. height: 36rpx;
  1245. display: block;
  1246. background: url("https://ceres.zkthink.com/static/images/serviceImg.png") no-repeat center center;
  1247. background-size: contain;
  1248. }
  1249. }
  1250. }
  1251. .parameterShow-box {
  1252. .parameter-title {
  1253. width: 100%;
  1254. text-align: center;
  1255. padding-bottom: 36rpx;
  1256. }
  1257. .parameter-modle {
  1258. width: 690rpx;
  1259. padding-bottom: 36rpx;
  1260. font-size: 26rpx;
  1261. }
  1262. .parameterTruebut-box {
  1263. background-color: #FFFFFF;
  1264. padding: 20rpx 0;
  1265. .parameterTruebut {
  1266. width: 690rpx;
  1267. height: 80rpx;
  1268. background-image: linear-gradient(135deg, #FFA100 10%, #FF7911 100%);
  1269. color: #FFFFFF;
  1270. border-radius: 40rpx;
  1271. line-height: 80rpx;
  1272. text-align: center;
  1273. font-size: 26rpx;
  1274. }
  1275. }
  1276. }
  1277. .couponShow-box {
  1278. .couponShow {
  1279. z-index: 333;
  1280. height: 1000rpx;
  1281. .couponTitle-box {
  1282. width: 100%;
  1283. }
  1284. .coupon-title-active {
  1285. color: #FF7700;
  1286. border-bottom: 2rpx solid #FF7700;
  1287. padding-bottom: 30rpx;
  1288. }
  1289. .usableCoupon-content {
  1290. padding: 30rpx 0;
  1291. .usableCoupon-box {
  1292. width: 690rpx;
  1293. height: 140rpx;
  1294. border-radius: 10rpx;
  1295. background-color: #FFE9D8;
  1296. .immediateUse-but {
  1297. color: #FF7800;
  1298. border-radius: 30rpx;
  1299. padding: 0 40rpx;
  1300. border-left: 3rpx solid #EBD7C7;
  1301. height: 140rpx;
  1302. border-radius: 60rpx;
  1303. line-height: 140rpx;
  1304. font-weight: bold;
  1305. }
  1306. }
  1307. }
  1308. }
  1309. }
  1310. .succeedShow-box {
  1311. position: absolute;
  1312. top: 220rpx;
  1313. left: 185rpx;
  1314. .succeedShow {
  1315. background-color: #7F7F7F;
  1316. width: 380rpx;
  1317. height: 280rpx;
  1318. border-radius: 10rpx;
  1319. opacity: 0.8;
  1320. .couponSucceedImg {
  1321. width: 200rpx;
  1322. height: 130rpx;
  1323. }
  1324. }
  1325. }
  1326. }
  1327. .activity-box {
  1328. display: flex;
  1329. flex-direction: column;
  1330. width: 100%;
  1331. height: 100%;
  1332. .title-box {
  1333. width: 100%;
  1334. height: 100upx;
  1335. display: flex;
  1336. flex-direction: row;
  1337. align-items: center;
  1338. justify-content: center;
  1339. position: relative;
  1340. border-bottom: solid 1px #EEEEEE;
  1341. }
  1342. }
  1343. .activity-coupon-box {
  1344. display: flex;
  1345. flex-direction: column;
  1346. width: 100%;
  1347. overflow: auto;
  1348. flex: 1;
  1349. }
  1350. .content-box {
  1351. width: 100%;
  1352. box-sizing: border-box;
  1353. display: flex;
  1354. flex-direction: column;
  1355. padding: 30rpx;
  1356. }
  1357. .tag-box {
  1358. width: 100%;
  1359. box-sizing: border-box;
  1360. height: 80rpx;
  1361. line-height: 80rpx;
  1362. font-size: 28rpx;
  1363. font-weight: 500;
  1364. color: #FF7911;
  1365. }
  1366. .label-lingqu {
  1367. width: 100%;
  1368. font-weight: 500;
  1369. color: rgba(51, 51, 51, 1);
  1370. }
  1371. .coupon-item {
  1372. width: 690rpx;
  1373. height: 120rpx;
  1374. border-radius: 10rpx;
  1375. display: flex;
  1376. flex-direction: row;
  1377. justify-content: space-between;
  1378. align-items: center;
  1379. margin-top: 20rpx;
  1380. flex-shrink: 0;
  1381. background-color: #FFE9D8;
  1382. }
  1383. .money-box {
  1384. width: 160rpx;
  1385. box-sizing: border-box;
  1386. padding-left: 30rpx;
  1387. font-weight: 500;
  1388. color: #FF7911;
  1389. }
  1390. .info-box {
  1391. display: flex;
  1392. flex-direction: column;
  1393. align-items: flex-start;
  1394. color: rgba(255, 121, 17, 1);
  1395. }
  1396. .receive-btn {
  1397. width: 200rpx;
  1398. height: 120rpx;
  1399. background: rgba(255, 233, 216, 1);
  1400. box-shadow: 0px 0px 5rpx 0px rgba(102, 102, 102, 0.35);
  1401. line-height: 120rpx;
  1402. text-align: center;
  1403. font-size: 28rpx;
  1404. font-weight: bold;
  1405. color: rgba(255, 121, 17, 1);
  1406. border-bottom-right-radius: 10rpx;
  1407. border-top-right-radius: 10rpx;
  1408. border-top-left-radius: 120rpx;
  1409. border-bottom-left-radius: 120rpx;
  1410. }
  1411. .received {
  1412. background: #f1f1f1;
  1413. color: #999;
  1414. }
  1415. .canvas-box {
  1416. display: block;
  1417. position: absolute;
  1418. top: 100rpx;
  1419. }
  1420. .sceneMarketingBox {
  1421. width: 100%;
  1422. background: url("https://zk-cereshop.oss-cn-shenzhen.aliyuncs.com/zkthink/2022-02-15/5f85fe4782e34c10b15b04f76c571d12_sceneMarketingDetailsIcon.png"
  1423. ) no-repeat center;
  1424. padding: 20rpx 30rpx;
  1425. background-size: cover;
  1426. display: flex;
  1427. justify-content: space-between;
  1428. align-items: center;
  1429. .sceneNameBox {
  1430. width: 220rpx;
  1431. text-align: center;
  1432. color: #C83732;
  1433. font-size: 20rpx;
  1434. }
  1435. }
  1436. .goodsDiscount {
  1437. .groupBuy {
  1438. .groupBuyList {
  1439. .groupBuyItem {
  1440. padding: 0 30rpx;
  1441. height: 116rpx;
  1442. display: flex;
  1443. align-items: center;
  1444. justify-content: space-between;
  1445. border-bottom: 1rpx solid #EEEEEE;
  1446. .leftAvatar {
  1447. display: flex;
  1448. align-items: center;
  1449. width: 50%;
  1450. img {
  1451. width: 72rpx;
  1452. height: 72rpx;
  1453. margin-right: 10rpx;
  1454. border-radius: 50%;
  1455. }
  1456. }
  1457. .rightInfo {
  1458. display: flex;
  1459. align-items: center;
  1460. width: 50%;
  1461. .groupBuyTime {
  1462. .needPeople {
  1463. font-size: 28rpx;
  1464. color: #333333;
  1465. margin-bottom: 10rpx;
  1466. font-weight: 400;
  1467. b {
  1468. color: #C5AA7B;
  1469. font-weight: 400;
  1470. }
  1471. }
  1472. .endDate {
  1473. color: #666666;
  1474. }
  1475. }
  1476. .groupBuyBtn {
  1477. width: 140rpx;
  1478. height: 60rpx;
  1479. line-height: 60rpx;
  1480. background: #333333;
  1481. text-align: center;
  1482. color: #FFEBC4;
  1483. font-size: 24rpx;
  1484. }
  1485. }
  1486. }
  1487. }
  1488. }
  1489. }
  1490. .popupDiscount {
  1491. padding-bottom: 70rpx;
  1492. .popupDiscountTit {
  1493. font-size: 36rpx;
  1494. color: #333333;
  1495. height: 105rpx;
  1496. line-height: 105rpx;
  1497. text-align: center;
  1498. border-bottom: 1rpx solid #EEEEEE;
  1499. }
  1500. .groupBuy {
  1501. padding-bottom: 80rpx;
  1502. .groupBuyList {
  1503. .groupBuyItem1 {
  1504. padding: 0 30rpx;
  1505. height: 116rpx;
  1506. display: flex;
  1507. align-items: center;
  1508. justify-content: space-between;
  1509. border-bottom: 1rpx solid #EEEEEE;
  1510. .leftAvatar {
  1511. display: flex;
  1512. align-items: center;
  1513. img {
  1514. width: 72rpx;
  1515. height: 72rpx;
  1516. margin-right: 10rpx;
  1517. border-radius: 50%;
  1518. }
  1519. .groupBuyTime {
  1520. margin-right: 80rpx;
  1521. margin-bottom: 10rpx;
  1522. width: 320rpx;
  1523. .needPeople {
  1524. font-size: 26rpx;
  1525. color: #333333;
  1526. span {
  1527. color: #333333;
  1528. padding-right: 10rpx;
  1529. }
  1530. b {
  1531. color: #C5AA7B;
  1532. font-weight: 400;
  1533. }
  1534. }
  1535. .endDate {
  1536. color: #333333;
  1537. opacity: 0.7;
  1538. font-size: 24rpx;
  1539. }
  1540. }
  1541. }
  1542. .rightInfo {
  1543. display: flex;
  1544. align-items: center;
  1545. .groupBuyBtn {
  1546. width: 140rpx;
  1547. height: 70rpx;
  1548. line-height: 70rpx;
  1549. background: #333333;
  1550. text-align: center;
  1551. color: #FFEBC4;
  1552. font-weight: 400;
  1553. }
  1554. }
  1555. }
  1556. }
  1557. }
  1558. }
  1559. .combination {
  1560. padding: 0 20rpx;
  1561. .combinationList {
  1562. width: 100%;
  1563. height: 680rpx;
  1564. background: #333333;
  1565. box-shadow: 0 20rpx 30rpx rgba(0, 0, 0, 0.3);
  1566. border-radius: 20rpx;
  1567. .combinationTitle {
  1568. padding: 32rpx 20rpx 0 30rpx;
  1569. image {
  1570. width: 211rpx;
  1571. height: 33rpx;
  1572. }
  1573. .combinationPrice {
  1574. padding: 0 20px;
  1575. height: 50rpx;
  1576. background: linear-gradient(90deg, #C83732 0%, #E25C44 100%);
  1577. box-shadow: 0 6rpx 12rpx rgba(233, 0, 0, 0.3);
  1578. border-radius: 26rpx;
  1579. line-height: 50rpx;
  1580. text-align: center;
  1581. color: #FFFFFF;
  1582. opacity: 0.8;
  1583. }
  1584. }
  1585. .buyBtn {
  1586. width: 96%;
  1587. height: 84rpx;
  1588. line-height: 84rpx;
  1589. border: 2rpx solid rgba(0, 0, 0, 0);
  1590. background: linear-gradient(88deg, #C5AA7B 0%, #FFEBC4 100%);
  1591. text-align: center;
  1592. color: #333333;
  1593. margin: 0 auto;
  1594. }
  1595. }
  1596. }
  1597. .prod-descr-title{
  1598. font-size: 28rpx;
  1599. font-weight: bold;
  1600. color: #252744;;
  1601. margin-left: 30rpx;
  1602. margin-top: 50rpx;
  1603. }
  1604. .prod-descr-content{
  1605. font-size: 28rpx;
  1606. font-weight: 400;
  1607. color: #595B6B;
  1608. margin-left: 30rpx;
  1609. margin-right: 30rpx;
  1610. margin-top: 20rpx;
  1611. }
  1612. .border-line{
  1613. box-sizing: border-box;
  1614. margin-right: 30rpx;
  1615. margin-left: 30rpx;
  1616. margin-top: 40rpx;
  1617. border: 1rpx solid #D3D4DE;
  1618. }
  1619. .sku-image-box{
  1620. display: flex;
  1621. flex-direction: row;
  1622. justify-content: flex-end;
  1623. margin-left: 30rpx;
  1624. }
  1625. .sku-image{
  1626. width: 86rpx;
  1627. height: 86rpx;
  1628. border: 2px solid #D3D4DE;
  1629. border-radius: 20rpx;
  1630. margin-right: 30rpx;
  1631. }
  1632. .sku-image-select{
  1633. width: 86rpx;
  1634. height: 86rpx;
  1635. border: 2px solid #252744;
  1636. border-radius: 20rpx;
  1637. margin-right: 30rpx;
  1638. }
  1639. .sku-image-more{
  1640. width: 92rpx;
  1641. height: 92rpx;
  1642. margin-right: 30rpx;
  1643. }
  1644. .border-line-wide{
  1645. width: 100%;
  1646. border: 10rpx solid #D3D4DE;
  1647. }
  1648. </style>