多租户商城-商户小程序端

840 lines
23 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
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. <!--
  2. * @FileDescription: sku选择器花呗拼团下单
  3. * @Author: kahu
  4. * @Date: 2022/11/7
  5. * @LastEditors: kahu
  6. * @LastEditTime: 2022/11/7
  7. -->
  8. <template>
  9. <div class="content">
  10. <u-popup
  11. v-model="goodsDetailShowFlag"
  12. mode="bottom"
  13. border-radius="60"
  14. >
  15. <view class="goosDetailshow-box">
  16. <view class="detailImg-box flex-row-plus">
  17. <image
  18. class="detailImg"
  19. :src="selectedSku.image"
  20. ></image>
  21. <view class="flex-column-plus mar-left-40">
  22. <view class="font-color-F54639">
  23. <label class="fs30 fs-bold">¥</label>
  24. <label
  25. class="fs30 fs-bold mar-left-5"
  26. v-text="selectedSku.activityType === 1 && btnType === 4 ? selectedSku['salePrice'] : selectedSku.price"
  27. ></label>
  28. </view>
  29. <label class="fs24 font-color-595B6B mar-top-10">{{$t('common.stocknum', {number:selectedSku.stockNumber})}}</label>
  30. <label class="fs24 font-color-595B6B mar-top-10">已选</label>
  31. </view>
  32. </view>
  33. <view class="color-box flex-column-plus">
  34. <view
  35. v-for="(skuRowItem,skuRowIndex) in productData['names']"
  36. :key="skuRowIndex"
  37. >
  38. <label
  39. class="fs26 font-color-333"
  40. v-if="skuRowItem['nameCode']"
  41. >{{ skuRowItem.skuName }}</label>
  42. <!-- <view class="colorName-box">
  43. <view
  44. class="pad-bot-30"
  45. v-for="(skuColItem, skuColIndex) in skuRowItem.values"
  46. :key="skuColIndex"
  47. >
  48. <view
  49. class="colorName"
  50. :class="{'colorName-on' : selectedAttr[skuRowItem['nameCode']] === skuColItem.valueCode}"
  51. @click="handleClickSkuItem(skuRowItem['nameCode'], skuColItem.valueCode)"
  52. >
  53. {{ skuColItem.skuValue }}
  54. </view>
  55. </view>
  56. </view>-->
  57. <scroll-view class="scroll-view_H" scroll-x="true">
  58. <view class="sku-box" v-for="(skuColItem, skuColIndex) in skuRowItem.values"
  59. :key="skuColIndex">
  60. <view class="sku-image-item" @click="handleClickSkuItem(skuRowItem['nameCode'], skuColItem.valueCode)">
  61. <image class="sku-image" :class="{'sku-image-select' : selectedAttr[skuRowItem['nameCode']] === skuColItem.valueCode}"
  62. :src="skuColItem.image ? skuColItem.image : defaultImageUrl" @error="onImageError"/>
  63. <label class="sku-name" :class="{'sku-name-select' : selectedAttr[skuRowItem['nameCode']] === skuColItem.valueCode}"> {{ skuColItem.skuValue }}</label>
  64. </view>
  65. </view>
  66. </scroll-view>
  67. </view>
  68. </view>
  69. <view class="goodsNumCent">
  70. <view
  71. class="goodsNum-box flex-row-plus flex-sp-between"
  72. :class="{'bottom-line' :aliAgingObj.supportHanaUta}"
  73. >
  74. <label class="font-color-252744 fs28 fs-bold">数量</label>
  75. <view class="goodsNum">
  76. <image v-if="buyNum === 1" class="image-count-operate" @click="handleNumSub"
  77. src="http://36.138.125.206:8081/ceres-local-file/image/icon_cart_nosub.png"/>
  78. <image v-else @click="handleNumSub" class="image-count-operate" src="http://36.138.125.206:8081/ceres-local-file/image/icon_cart_sub.png"/>
  79. <view
  80. class="text-count-operate"
  81. v-model="buyNum"
  82. >{{ buyNum }}
  83. </view>
  84. <image class="image-count-operate" @click="handleNumAdd"
  85. src="http://36.138.125.206:8081/ceres-local-file/image/icon_cart_add.png"/>
  86. </view>
  87. </view>
  88. </view>
  89. <!-- 花呗分期 -->
  90. <view
  91. class="huabei-box flex-column-plus"
  92. v-if="aliAgingObj.supportHanaUta"
  93. >
  94. <label class="font-color-999 fs24">花呗分期</label>
  95. <scroll-view
  96. class="fenqi-box"
  97. scroll-x="true"
  98. >
  99. <view
  100. class="huabei-item"
  101. :class="[{'fenqi-on' :aliAgingObj.selectIndex === 0},{'disabled' :aliAgingObj.disableSelectList[0]}]"
  102. @click="handleSelectAliAging(0)"
  103. >
  104. <label class="huabei-period">分3期(含手续费)</label>
  105. <label class="huabei-money">{{ aliAgingObj.agingMoneyList[0] }}/</label>
  106. </view>
  107. <view
  108. class="huabei-item"
  109. :class="[{'fenqi-on' :aliAgingObj.selectIndex === 1},{'disabled' :aliAgingObj.disableSelectList[1]}]"
  110. @click="handleSelectAliAging(1)"
  111. >
  112. <label class="huabei-period">分6期(含手续费)</label>
  113. <label class="huabei-money">{{ aliAgingObj.agingMoneyList[1] }}/</label>
  114. </view>
  115. <view
  116. class="huabei-item"
  117. :class="[{'fenqi-on' :aliAgingObj.selectIndex === 2},{'disabled' :aliAgingObj.disableSelectList[2]}]"
  118. @click="handleSelectAliAging(2)"
  119. >
  120. <label class="huabei-period">分12期(含手续费)</label>
  121. <label class="huabei-money">{{ aliAgingObj.agingMoneyList[2] }}/</label>
  122. </view>
  123. </scroll-view>
  124. </view>
  125. <view
  126. v-if="btnType===6"
  127. class="skuSelectBtn"
  128. >
  129. <view
  130. class="flex-row-plus offShelf"
  131. v-if="productData.shelveState === 0"
  132. >
  133. 商品已下架
  134. </view>
  135. <view
  136. class="flex-row-plus flex-items flex-sp-around"
  137. v-else-if="selectedSku.activityType === 1"
  138. >
  139. <view
  140. class="selectJoinShop selectBtn font-color-333"
  141. @click="handleBuyNow"
  142. >单独购买
  143. </view>
  144. <view
  145. class="selectBuyNow selectBtn font-color-FFEBC4"
  146. @click="handleBuyWithGroup(1)"
  147. >我要开团
  148. </view>
  149. </view>
  150. <view
  151. class="flex-row-plus flex-items flex-sp-around"
  152. v-else
  153. >
  154. <view
  155. class="selectJoinShop selectBtn font-color-333"
  156. @click="handleAddCart"
  157. >{{$t('common.addtocart')}}
  158. </view>
  159. <view
  160. class="selectBuyNow selectBtn font-color-FFEBC4"
  161. @click="handleBuyNow"
  162. >{{$t('common.buynow')}}
  163. </view>
  164. </view>
  165. </view>
  166. <view v-else>
  167. <view
  168. v-if="selectedSku.activityType === 1 && collageId !== 0"
  169. class="goosDetailbut-box flex-items-plus"
  170. :style="{'padding-bottom':(isIphone === true? 60:20)+'rpx'}"
  171. >
  172. <view
  173. class="joinbuyBut"
  174. @click="handleBuyWithGroup(2)"
  175. >{{$t('common.sure')}}
  176. </view>
  177. </view>
  178. <view
  179. v-else-if="selectedSku.activityType === 1 && btnType === 3"
  180. class="goosDetailbut-box flex-row-plus"
  181. :style="{'padding-bottom':(isIphone === true? 60:20)+'rpx'}"
  182. >
  183. <view
  184. class="buyNowBut"
  185. @click="handleBuyWithGroup(1)"
  186. >去拼团
  187. </view>
  188. </view>
  189. <view
  190. v-else
  191. class="goosDetailbut-box flex-row-plus"
  192. :style="{'padding-bottom':(isIphone === true? 60:20)+'rpx'}"
  193. >
  194. <view
  195. v-if="btnType === 1"
  196. class="buyNowBut"
  197. @click="handleAddCart"
  198. >{{$t('common.sure')}}
  199. </view>
  200. <view
  201. v-else
  202. class="buyNowBut"
  203. @click="handleBuyNow(2)"
  204. >{{$t('common.sure')}}
  205. </view>
  206. </view>
  207. </view>
  208. </view>
  209. </u-popup>
  210. </div>
  211. </template>
  212. <script>
  213. import NET from "../../../utils/request";
  214. import API from "../../../config/api";
  215. export default {
  216. name: "GoodSkuSelect",
  217. data() {
  218. return {
  219. // 是否展示SKU弹窗
  220. goodsDetailShowFlag: false,
  221. // 已经选中的valueCode key => value names.nameCode=>values.valueCode 处理选中渲染
  222. selectedAttr: {},
  223. // 当前选中的skuMap对象(服务端数据)
  224. selectedSku: {},
  225. // 1加入购物车 2立即购买 3开团 4单独购买 6SKU选择
  226. btnType: 0,
  227. buyNum: 1,
  228. // 花呗对象
  229. aliAgingObj: {
  230. supportHanaUta: false,
  231. selectIndex: -1,
  232. disableSelectList: [true, true, true],
  233. agingMoneyList: ["0.00", "0.00", "0.00"]
  234. },
  235. defaultImageUrl: 'http://36.138.125.206:8081/ceres-local-file/image/sku_default.png'
  236. }
  237. },
  238. props: {
  239. productData: {
  240. type: Object,
  241. default: () => ({})
  242. },
  243. isIphone: {
  244. type: Boolean,
  245. default: () => false
  246. },
  247. collageId: {
  248. type: Number,
  249. default: () => 0
  250. }
  251. },
  252. methods: {
  253. /**
  254. * 当前SKU数量减少
  255. */
  256. handleNumSub() {
  257. if (this.buyNum > 1) {
  258. this.buyNum = this.buyNum - 1
  259. } else {
  260. uni.showToast({
  261. title: '亲!至少一件哦!',
  262. icon: "none"
  263. })
  264. }
  265. },
  266. /**
  267. * 当前SKU数量加
  268. */
  269. handleNumAdd() {
  270. if (this.buyNum < this.selectedSku.stockNumber) {
  271. this.buyNum = this.buyNum + 1
  272. } else {
  273. uni.showToast({
  274. title: this.$t('common.understock'),
  275. icon: "none"
  276. })
  277. }
  278. },
  279. /**
  280. * 根据skuId选择SKU
  281. * @param skuId SkuId
  282. */
  283. handleSelectBySkuId(skuId) {
  284. if (!skuId) return
  285. // 当前商品后端返回的所有sku的排列组合
  286. const allSkuValueGroupMap = this.productData.map
  287. for (const allSkuValueGroupMapKey in allSkuValueGroupMap) {
  288. if (parseInt(allSkuValueGroupMap[allSkuValueGroupMapKey].skuId) !== parseInt(skuId)) continue;
  289. this.selectedSku = allSkuValueGroupMap[allSkuValueGroupMapKey]
  290. this.echoFatherRowText(this.productData, this.selectedSku, this.buyNum)
  291. // 控制组件选中渲染
  292. const selectValueCodes = this.selectedSku['valueCodes'].split(',')
  293. for (const skuRow of this.productData.names) {
  294. for (const skuCol of skuRow.values) {
  295. if (!selectValueCodes.includes(skuCol['valueCode'])) continue;
  296. this.$set(this.selectedAttr, skuRow['nameCode'], skuCol['valueCode'])
  297. break; // 一行的sku只会有一个value
  298. }
  299. }
  300. }
  301. },
  302. /**
  303. * 点击sku的一项
  304. * @param nameCode SKU行的nameCode
  305. * @param valueCode SKU列的valueCode
  306. * nameCodeValueCodeClick
  307. */
  308. handleClickSkuItem(nameCode, valueCode) {
  309. // 当前选中
  310. this.$set(this.selectedAttr, nameCode, valueCode)
  311. // 获取到所有的sku的values.valueCode
  312. let values = []
  313. for (const key in this.selectedAttr) {
  314. values.push(this.selectedAttr[key])
  315. }
  316. // 当前选中的sku的key组合
  317. // 后端返回的productData.map中,排列组合了所有values[].valueCode的情况,使用逗号分隔
  318. const nowSelectSkuValueGroupKey = values.join(',') // 相较于allSkuValueGroupMap的key
  319. // 后端返回的所有sku组合(values.valueCode)
  320. const allSkuValueGroupMap = this.productData.map
  321. // 遍历后端数据
  322. for (const allSkuValueGroupMapKey in allSkuValueGroupMap) {
  323. // 当和当前选中的sku一致
  324. if (nowSelectSkuValueGroupKey === allSkuValueGroupMapKey) {
  325. this.selectedSku = allSkuValueGroupMap[allSkuValueGroupMapKey]
  326. this.echoFatherRowText(this.productData, this.selectedSku, this.buyNum)
  327. }
  328. }
  329. },
  330. /**
  331. * 回显父组件通讯
  332. * @param productData 当前商品对象
  333. * @param skuItem 当前选中的sku的后端数据
  334. * @param buyNum 当前sku购买数量
  335. */
  336. echoFatherRowText(productData, skuItem, buyNum) {
  337. // 获取到当前选中的sku的valueCode
  338. const currentSku = []
  339. // 取出所有的valueCode
  340. const nowSelectValueCodeList = skuItem['valueCodes'].split(',')
  341. const skuRows = productData.names
  342. for (const skuRow of skuRows) {
  343. const skuValues = skuRow.values
  344. for (const skuValue of skuValues) {
  345. if (!nowSelectValueCodeList.includes(skuValue.valueCode)) continue;
  346. const currentSkuItem = {skuText: ''}
  347. if (skuValue.valueCode === '单款项') {
  348. currentSkuItem['skuText'] = skuValue['skuValue']
  349. } else {
  350. currentSkuItem['skuText'] = `${ skuValue.skuName }:${ skuValue.skuValue }`
  351. }
  352. currentSku.push(currentSkuItem)
  353. break; // 只会对应一个value数据,找到就break减少循环
  354. }
  355. }
  356. this.$emit('getCurrentSku', {
  357. skuItem,
  358. currentSku,
  359. buyNum
  360. })
  361. // 选中sku之后,做一些相应的操作
  362. // postSelectSku依赖于getCurrentSku的数据
  363. this.$emit('postSelectSku')
  364. },
  365. //加入购物车
  366. async handleAddCart() {
  367. this.handleCheckIsLogin()
  368. if (this.selectedSku.stockNumber < 1) {
  369. return uni.showToast({
  370. title: this.$t('common.understock'),
  371. icon: "none"
  372. })
  373. }
  374. // uni.showLoading({
  375. // mask: true,
  376. // title: '添加中...',
  377. // })
  378. try {
  379. const postData = {
  380. skuId: this.selectedSku.skuId,
  381. number: this.buyNum,
  382. }
  383. await NET.request(API.ShoppingaddCart, postData, 'POST')
  384. // 埋点
  385. this.$store.dispatch('doPointer', {
  386. eventType: 2,
  387. productIds: this.productId
  388. })
  389. // 给购物车小图标赋值数量
  390. let newAllCartNum = uni.getStorageSync('allCartNum') + this.buyNum
  391. uni.setStorageSync('allCartNum', newAllCartNum)
  392. this.$emit('changeCartNum',newAllCartNum)
  393. uni.showToast({
  394. title: '添加成功',
  395. icon: 'none'
  396. })
  397. setTimeout(()=>{
  398. this.buyNum = 1
  399. this.goodsDetailShowFlag = false
  400. },2000)
  401. }finally {
  402. uni.hideLoading()
  403. }
  404. },
  405. /**
  406. * 立即购买下单
  407. */
  408. handleBuyNow() {
  409. this.handleCheckIsLogin()
  410. if (this.selectedSku.stockNumber < 1) {
  411. return uni.showToast({
  412. title: this.$t('common.understock'),
  413. icon: "none"
  414. })
  415. }
  416. if (this.buyNum > this.selectedSku.stockNumber && this.selectedSku.stockNumber !== 0) {
  417. return uni.showToast({
  418. title: '已超出最大数量限制',
  419. icon: "none"
  420. })
  421. }
  422. //组装后端数据
  423. let list = [{
  424. ifWork: 0,
  425. shopId: this.productData.shopId,
  426. shopName: this.productData.shopName,
  427. shopDiscountId: this.shopDiscountId > 0 ? this.shopDiscountId : null,
  428. shopSeckillId: this.shopSeckillId > 0 ? this.shopSeckillId : null,
  429. skus: [{
  430. productId: this.productData.productId,
  431. skuId: this.selectedSku.skuId,
  432. productName: this.productData.productName,
  433. image: this.selectedSku.image,
  434. price: this.selectedSku.price,
  435. weight: 0,
  436. number: this.buyNum,
  437. SKU: "",
  438. total: this.selectedSku.price * this.buyNum,
  439. ifLogistics: 1
  440. }]
  441. }]
  442. uni.setStorageSync('skuItemDTOList', list)
  443. this.buyNum = 1
  444. this.goodsDetailShowFlag = false
  445. uni.navigateTo({
  446. url: '../orderModule/orderConfirm?type=1',
  447. })
  448. },
  449. /**
  450. * 拼团下单
  451. * @param type 1单独开团2拼团
  452. */
  453. handleBuyWithGroup(type) {
  454. this.handleCheckIsLogin()
  455. if (this.selectedSku.stockNumber < 1) {
  456. return uni.showToast({
  457. title: this.$t('common.understock'),
  458. icon: "none"
  459. })
  460. }
  461. const data = {
  462. number: this.buyNum,
  463. productId: this.productId,
  464. shopId: this.shopId,
  465. skuId: this.selectedSku.skuId,
  466. shopGroupWorkId: this.selectedSku.shopGroupWorkId,
  467. type: type
  468. }
  469. if (type !== 1) {
  470. data.collageId = this.collageId
  471. }
  472. uni.removeStorageSync("skuItemDTOList")
  473. uni.setStorageSync('skuItemList', data)
  474. this.goodsDetailShowFlag = false
  475. this.buyNum = 1
  476. uni.navigateTo({
  477. url: '../orderModule/orderConfirm?type=1',
  478. })
  479. },
  480. /**
  481. * 是否登录
  482. * @return {boolean|void}
  483. */
  484. handleCheckIsLogin() {
  485. const userInfo = uni.getStorageSync('storage_key')
  486. if (!userInfo || (userInfo && JSON.stringify(userInfo) === '{}')) {
  487. return uni.navigateTo({
  488. url: '../../pages_category_page2/userModule/login'
  489. })
  490. }
  491. return true
  492. },
  493. /**
  494. * 选择分期
  495. * @param index 0:3 1:6 2:12
  496. */
  497. handleSelectAliAging(index) {
  498. const aliAgingObj = this.aliAgingObj
  499. if (aliAgingObj.selectIndex !== index && !aliAgingObj.disableSelectList[index]) {
  500. aliAgingObj.selectIndex = index;
  501. } else {
  502. aliAgingObj.selectIndex = -1;
  503. }
  504. },
  505. /**
  506. * 渲染是否支持花呗
  507. * @param productData 当前商品
  508. * @param skuPrice:number 选中SKU的价格
  509. */
  510. handleRenderAliAging(productData, skuPrice) {
  511. if (productData.ifHuabei !== 1) return
  512. const aliAgingObj = this.aliAgingObj
  513. if (skuPrice && skuPrice >= 0.03) {
  514. aliAgingObj.supportHanaUta = true
  515. aliAgingObj.disableSelectList[0] = false;
  516. aliAgingObj.agingMoneyList[0] = (parseInt((skuPrice / 3 * 100) / 100 + '')).toFixed(2) + ""
  517. }
  518. if (skuPrice && skuPrice >= 0.06) {
  519. aliAgingObj.supportHanaUta = false;
  520. aliAgingObj.disableSelectList[1] = false;
  521. aliAgingObj.agingMoneyList[1] = (parseInt((skuPrice / 6 * 100) / 100 + '')).toFixed(2) + ""
  522. }
  523. if (skuPrice && skuPrice >= 0.12) {
  524. aliAgingObj.supportHanaUta = true;
  525. aliAgingObj.disableSelectList[2] = false;
  526. aliAgingObj.agingMoneyList[2] = (parseInt((skuPrice / 12 * 100) / 100 + '')).toFixed(2) + ""
  527. }
  528. },
  529. onImageError(e) {
  530. e.target.src = 'http://36.138.125.206:8081/ceres-local-file/image/sku_default.png';
  531. }
  532. }
  533. }
  534. </script>
  535. <style
  536. lang="scss"
  537. scoped
  538. >
  539. .goosDetailshow-box {
  540. margin-bottom: -5upx;
  541. .detailImg-box {
  542. margin-top: 30upx;
  543. margin-left: 30upx;
  544. border-bottom: 1upx solid #EDEDED;
  545. padding-bottom: 20upx;
  546. width: 690upx;
  547. .detailImg {
  548. width: 140upx;
  549. height: 140upx;
  550. border-radius: 20rpx;
  551. }
  552. }
  553. .color-box {
  554. padding: 30rpx 30rpx;
  555. width: 100%;
  556. .colorName-box {
  557. display: flex;
  558. flex-wrap: wrap;
  559. flex-direction: row;
  560. justify-content: flex-start;
  561. align-items: center;
  562. margin-top: 30upx;
  563. margin-left: -30upx;
  564. .colorName {
  565. background-color: #FFFFFF;
  566. margin-left: 30upx;
  567. padding: 10upx 32upx;
  568. font-size: 26upx;
  569. border: 2rpx solid #E4E5E6;
  570. z-index: 2;
  571. color: #333333;
  572. }
  573. .colorName-on {
  574. box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
  575. color: #C5AA7B;
  576. margin-left: 30upx;
  577. padding: 10upx 32upx;
  578. font-size: 26upx;
  579. text-align: center;
  580. z-index: 1;
  581. border: none;
  582. }
  583. }
  584. }
  585. .modelNum-box {
  586. padding: 30upx 30upx;
  587. border-bottom: 1upx solid #EDEDED;
  588. width: 690upx;
  589. .modelNumName-box {
  590. display: flex;
  591. flex-wrap: wrap;
  592. flex-direction: row;
  593. justify-content: flex-start;
  594. align-items: center;
  595. margin-top: 30upx;
  596. margin-left: -30upx;
  597. .modelNumName-on {
  598. background-color: #FFE4D0;
  599. color: #FF7800;
  600. margin-left: 30upx;
  601. padding: 10upx 32upx;
  602. border-radius: 28upx;
  603. border: 1upx solid #FF7800;
  604. font-size: 26upx;
  605. text-align: center;
  606. }
  607. .modelNumName {
  608. background-color: #F5F5F5;
  609. margin-left: 30upx;
  610. padding: 10upx 32upx;
  611. border-radius: 28upx;
  612. font-size: 26upx;
  613. }
  614. }
  615. }
  616. .goodsNumCent {
  617. padding: 0 30upx;
  618. .goodsNum-box {
  619. width: 100%;
  620. padding: 30rpx 0 180rpx 0;
  621. //border-top: 2rpx solid #EDEDED;
  622. .goodsNum {
  623. height: 50upx;
  624. display: flex;
  625. align-items: center;
  626. .item {
  627. width: 50upx;
  628. height: 50upx;
  629. line-height: 48rpx;
  630. border: 1upx solid #999999;
  631. text-align: center;
  632. }
  633. .subtract {
  634. border-right: 0upx;
  635. }
  636. .goodsNumber {
  637. line-height: 50rpx;
  638. }
  639. .add {
  640. border-left: 0upx;
  641. }
  642. }
  643. }
  644. }
  645. .image-count-operate{
  646. width: 40rpx;
  647. height: 40rpx;
  648. }
  649. .text-count-operate{
  650. width: 60rpx;
  651. text-align: center;
  652. font-size: 28rpx;
  653. color: #252744;
  654. font-weight: 400;
  655. }
  656. .bottom-line {
  657. border-bottom: 1upx solid #EDEDED;
  658. }
  659. .huabei-box {
  660. padding: 30upx 30upx;
  661. width: 690upx;
  662. .fenqi-box {
  663. margin-top: 15upx;
  664. width: 120%;
  665. .huabei-item {
  666. display: inline-block;
  667. background: #f3f3f3;
  668. padding: 16upx 24upx;
  669. margin: 5upx 10upx;
  670. border-radius: 15upx;
  671. text-align: center;
  672. font-size: 7upx;
  673. .huabei-period {
  674. display: block;
  675. }
  676. }
  677. .fenqi-on {
  678. border: 1px solid #EF7F93;
  679. color: #EF7F93;
  680. }
  681. .disabled {
  682. color: #cacaca;
  683. }
  684. }
  685. }
  686. .goosDetailbut-box {
  687. justify-content: center;
  688. .joinShopCartBut {
  689. width: 343upx;
  690. height: 80upx;
  691. border-radius: 40upx 0 0 40upx;
  692. background-color: #FFC300;
  693. color: #FFFEFE;
  694. font-size: 28upx;
  695. line-height: 80upx;
  696. text-align: center;
  697. margin-left: 30upx;
  698. }
  699. .buyNowBut {
  700. width: 90%;
  701. height: 90upx;
  702. background: linear-gradient(-10deg, #252744, #484A66);
  703. font-size: 32rpx;
  704. line-height: 90upx;
  705. text-align: center;
  706. color: #FFFFFF;
  707. border-radius: 50rpx;
  708. }
  709. }
  710. }
  711. .skuSelectBtn {
  712. padding-bottom: 30rpx;
  713. .selectBtn {
  714. width: 342rpx;
  715. height: 88rpx;
  716. line-height: 88rpx;
  717. color: #252744;
  718. text-align: center;
  719. border: 1px solid #252744;
  720. font-size: 32rpx;
  721. border-radius: 50rpx;
  722. }
  723. .selectBuyNow {
  724. color: #FFFFFF;
  725. background: linear-gradient(-10deg, #252744, #484A66);
  726. }
  727. }
  728. .couponItemimg {
  729. width: 150upx;
  730. height: 60upx;
  731. }
  732. .joinbuyBut {
  733. width: 190upx;
  734. height: 80upx;
  735. background: #333333;
  736. color: #FFEBC4;
  737. font-size: 28upx;
  738. line-height: 80upx;
  739. text-align: center;
  740. margin-left: 30upx;
  741. }
  742. .sku-box{
  743. display: inline-block;
  744. }
  745. .sku-image-item{
  746. display: flex;
  747. flex-direction: column;
  748. align-items: center;
  749. margin-right: 30rpx;
  750. .sku-image{
  751. width: 86rpx;
  752. height: 86rpx;
  753. border: 2px solid #D3D4DE;
  754. border-radius: 20rpx;
  755. }
  756. .sku-image-select{
  757. width: 86rpx;
  758. height: 86rpx;
  759. border: 2px solid #252744;
  760. border-radius: 20rpx;
  761. //margin-right: 30rpx;
  762. }
  763. .sku-name{
  764. font-size: 24rpx;
  765. color: #595B6B;
  766. margin-top: 8rpx;
  767. }
  768. .sku-name-select{
  769. font-size: 24rpx;
  770. color: #252744;
  771. margin-top: 8rpx;
  772. }
  773. }
  774. .scroll-view_H {
  775. white-space: nowrap;
  776. width: 100%;
  777. margin-top: 12rpx;
  778. }
  779. </style>