多租户商城-商户小程序端
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.

804 lines
22 KiB

2 years ago
2 years ago
11 months ago
2 years ago
11 months ago
2 years ago
2 years ago
  1. <template>
  2. <view class="inviteSpell-con">
  3. <global-loading />
  4. <view class="grouped">
  5. <view class="fs32 font-color-FFF">{{remainPerson !== 0?'等待成团':'已成团'}}</view>
  6. <view class="fs26 number">{{inviteSpell.person}}人团</view>
  7. </view>
  8. <view class="topBox">
  9. <view class="title-box flex-row-plus">
  10. <image class="pro-img" :src="inviteSpell.image"></image>
  11. <view class="flex-column-plus mar-left-30">
  12. <view class="title-lab fs28">{{inviteSpell.productName}}</view>
  13. <view class="flex-row-plus flex-sp-between">
  14. <view class="flex-column-plus">
  15. <!-- <view class="spellNum flex-items-plus font-color-C5AA7B mar-top-30 fs24">{{inviteSpell.person}}人团</view>-->
  16. <view class="flex-row-plus mar-top-30 flex-items">
  17. <label class="font-color-C83732 fs24">¥</label>
  18. <label class="font-color-C83732 fs36 mar-left-5">{{inviteSpell.price}}</label>
  19. <label class="font-color-CCC discountsPriceLine fs26 mar-left-20">¥{{inviteSpell.originalPrice}}</label>
  20. </view>
  21. </view>
  22. <!-- <view class="mar-top-20">-->
  23. <!-- <image class="issueregiment" src="http://36.138.125.206:8081/ceres-local-file/static/images/issueregiment.png"></image>-->
  24. <!-- </view>-->
  25. </view>
  26. </view>
  27. </view>
  28. </view>
  29. <view class="spellpersonnel-box">
  30. <view class="bgBox flex-items-plus flex-column">
  31. <view class="flex-items flex-sp-around flex-row-plus mar-right-20">
  32. <view class="flex-column flex-items-plus mar-left-20" v-for="(item,index) in inviteSpell.personList" :key="index">
  33. <image v-if="index == 0" class="head-icon border-FF7 z-index-0" :src="item.headImage"></image>
  34. <image v-else class="head-icon " :src="item.headImage"></image>
  35. <view v-if="index == 0" class="fs18 colonel-box">团长</view>
  36. </view>
  37. <view v-for="ritem in remainPerson">
  38. <view class="replenish-icon flex-items-plus mar-left-20">?</view>
  39. </view>
  40. </view>
  41. <view v-if="remainPerson !== 0">
  42. <view class="mar-top-50 font-color-333">还差<label class="font-color-C5AA7B">{{remainPerson}}</label>人成团距结束还剩{{hou}}:{{min}}:{{sec}}</view>
  43. <view v-if="type == 1" @click="shareClick" class="offered-but font-color-FFF flex-items-plus mar-top-60">邀请好友拼单</view>
  44. <view v-if="type == 0" @click="getOffered" class="offered-but font-color-FFF flex-items-plus mar-top-60">立即参团</view>
  45. <view v-if="type == 1" @click="goinvitePoster" class="poster-but flex-items-plus mar-top-40">生成邀请海报</view>
  46. </view>
  47. </view>
  48. </view>
  49. <view class="spellrule flex-items-plus flex-column mar-top-20">
  50. <view class="flex-row-plus">
  51. <view class="flex-row-plus flex-items-plus text-align">
  52. <view class="dot1"></view>
  53. <view class="dot2"></view>
  54. <view class="dot3"></view>
  55. </view>
  56. <label class="fs28 mar-left-20">拼团玩法</label>
  57. <view class="flex-row-plus flex-items-plus text-align mar-left-10">
  58. <view class="dot3"></view>
  59. <view class="dot2"></view>
  60. <view class="dot1"></view>
  61. </view>
  62. </view>
  63. <view class="mar-top-40">
  64. <u-steps :list="numList" mode="number" :current="-1"></u-steps>
  65. </view>
  66. </view>
  67. <!-- 商品详情 -->
  68. <u-popup class="goosDetailshow-box" v-model="goosDetailshowFlag" mode="bottom" border-radius="14">
  69. <view>
  70. <view class="detailImg-box flex-row-plus">
  71. <image class="detailImg" :src="skuImg"></image>
  72. <view class="flex-column-plus mar-left-40">
  73. <view class="font-color-C5AA7B">
  74. <label class="fs24">¥</label>
  75. <label class="fs36 mar-left-10">{{skuPrice}}</label>
  76. </view>
  77. <label class="fs24 font-color-999 mar-top-20">{{$t('common.stocknum', {number:stockNumber})}}</label>
  78. <label class="fs24 mar-top-20">已选</label>
  79. </view>
  80. </view>
  81. <view class="color-box flex-column-plus">
  82. <view v-for="(attritem,index) in skuProdList.names" :key="index">
  83. <label class="fs24 font-color-999">{{attritem.skuName}}</label>
  84. <view class="colorName-box">
  85. <view class="pad-bot-30" v-for="(attrRes, resIndex) in attritem.values" :key="resIndex">
  86. <label class="colorName" :class="{'colorName-on' :subIndex[index] == resIndex}" @click="colorActiveClick(attrRes,index,resIndex)">{{attrRes.skuValue}}</label>
  87. </view>
  88. </view>
  89. </view>
  90. </view>
  91. <view class="goodsNum-box flex-row-plus flex-sp-between">
  92. <label class="font-color-999 fs24">数量</label>
  93. <view class="goodsNum">
  94. <label class="subtract" @click="numSub">-</label>
  95. <label class="goodsNumber" v-model="buyNum">{{buyNum}}</label>
  96. <label class="add" @click="numAdd">+</label>
  97. </view>
  98. </view>
  99. <view class="goosDetailbut-box flex-items-plus" :style="{'padding-bottom':(isIphone===true? 50:20)+'rpx'}">
  100. <view class="joinbuyBut" @click="getGroupSettlement(2)">确定</view>
  101. </view>
  102. </view>
  103. </u-popup>
  104. <shareSpell ref="shareSpell" @shareCancel='shareCancel' :url="url" :urlParms="urlParms" :img="inviteSpell.image" title="好友邀请您来拼单啦">
  105. </shareSpell>
  106. </view>
  107. </template>
  108. <script>
  109. const NET = require('../../utils/request')
  110. const API = require('../../config/api')
  111. import shareSpell from '@/component/share.vue'
  112. import ClipboardJS from "clipboard"
  113. export default {
  114. data() {
  115. return {
  116. numList: [{
  117. name: '选择商品 完成下单'
  118. }, {
  119. name: '支付开团 或参团'
  120. }, {
  121. name: '邀请好友 参与拼团'
  122. }, {
  123. name: '人满成团 失败退款'
  124. }, ],
  125. collageId:0,
  126. orderId:0,
  127. type:0,
  128. inviteSpell:{},
  129. personLen:0,
  130. remainPerson:0,
  131. hou: "00",
  132. min: "00",
  133. sec: "00",
  134. timeOut:undefined,
  135. goosDetailshowFlag: false,
  136. productId:0,
  137. skuId:0,
  138. shopGroupWorkId:0,
  139. buyNum:1,
  140. skuProdId:0,
  141. skuImg:'',
  142. skuPrice:0,
  143. stockNumber:0,
  144. skuProdList:{},
  145. isIphone: "",
  146. selectArr: [], // 存放被选中的值
  147. subIndex: [], // 是否选中 因为不确定是多规格还是单规格,所以这里定义数组来判断
  148. attrItemIdArr: [], //存放被选中的id
  149. shopId:0,
  150. attrList: [],
  151. productDetail:{},
  152. userInfo: {},
  153. url: '',
  154. shareTitle: '',
  155. showJoinGroup: false,
  156. showGroupText: '立即参团',
  157. urlParms: ''
  158. };
  159. },
  160. components:{
  161. shareSpell
  162. },
  163. onShareAppMessage: function(res) {
  164. var that = this;
  165. //console.log('res=====',res);
  166. if (res.from === 'button') {
  167. //console.log('来自页面内转发按钮');
  168. } else if (res.from === 'menu'){
  169. //console.log('右上角菜单转发按钮');
  170. }
  171. this.url = '/pages_category_page1/goodsModule/inviteSpell?collageId='
  172. + this.collageId +'&orderId='+ this.orderId+'&type=0'+'&productId='+this.productId+'&skuId='+this.skuId+'&shopGroupWorkId='+this.shopGroupWorkId
  173. this.shareTitle = `【仅剩${this.remainPerson}个名额】我${this.inviteSpell.price}元拼了${this.inviteSpell.productName}`
  174. // 返回数据
  175. return {
  176. title: that.shareTitle,
  177. path: that.url,
  178. success: function(res) {
  179. // 转发成功,可以把当前页面的链接发送给后端,用于记录当前页面被转发了多少次或其他业务
  180. wx.request({
  181. url: app.buildUrl("/member/share"),
  182. data: {
  183. url: utils.getCurrentPageUrlWithArgs()
  184. },
  185. success: function(res) {
  186. //console.log('成功');
  187. }
  188. });
  189. },
  190. fail: function(res) {
  191. // 转发失败
  192. }
  193. }
  194. },
  195. onUnload() {
  196. if(this.timeOut){
  197. clearTimeout(this.timeOut)
  198. }
  199. },
  200. onShow(){
  201. //判断是否登录
  202. let item = {}
  203. if(uni.getStorageSync('storage_key')){
  204. item = uni.getStorageSync('storage_key');
  205. }
  206. if(JSON.stringify(item) == '{}'){
  207. let data = {
  208. collageId : this.collageId,
  209. orderId : this.orderId,
  210. productId : this.productId,
  211. skuId : this.skuId,
  212. type : this.type,
  213. }
  214. uni.setStorageSync("inviteSpell",data)
  215. // uni.navigateTo({
  216. // url:'../../pages_category_page2/userModule/accountLogin?inviteSpell=1'
  217. // })
  218. }else{
  219. this.userInfo = uni.getStorageSync('storage_userInfo')
  220. }
  221. this.getInviteSpell()
  222. },
  223. onLoad(options) {
  224. this.isIphone = getApp().globalData.isIphone;
  225. let item = getApp().globalData.inviteSpellShareIte
  226. if (item) {
  227. this.collageId = parseInt(item.collageId)
  228. this.orderId = parseInt(item.orderId)
  229. this.productId = parseInt(item.productId)
  230. this.skuId = parseInt(item.skuId)
  231. this.shopGroupWorkId = parseInt(item.shopGroupWorkId)
  232. getApp().globalData.inviteSpellShareItem = undefined
  233. } else {
  234. this.collageId = parseInt(options.collageId)
  235. this.orderId = parseInt(options.orderId)
  236. this.productId = parseInt(options.productId)
  237. this.skuId = parseInt(options.skuId)
  238. this.shopGroupWorkId = parseInt(options.shopGroupWorkId)
  239. }
  240. // #ifdef MP-WEIXIN
  241. this.url = '/pages_category_page1/goodsModule/inviteSpell?collageId=' +
  242. this.collageId + '&orderId=' + this.orderId + '&productId=' + this.productId + '&skuId=' + this.skuId +
  243. '&shopGroupWorkId=' + this.shopGroupWorkId
  244. this.urlParms = this.collageId + '&orderId=' + this.orderId + '&productId=' + this.productId + '&skuId=' + this.skuId +
  245. '&shopGroupWorkId=' + this.shopGroupWorkId
  246. // #endif
  247. // #ifndef MP-WEIXIN
  248. this.url = '/h5/#/pages_category_page1/goodsModule/inviteSpell?collageId=' +
  249. this.collageId + '&orderId=' + this.orderId + '&productId=' + this.productId + '&skuId=' + this.skuId +
  250. '&shopGroupWorkId=' + this.shopGroupWorkId
  251. // #endif
  252. },
  253. methods:{
  254. getOffered(){
  255. this.goosDetailshowFlag = true
  256. },
  257. //拼团下单
  258. getGroupSettlement(type){
  259. uni.removeStorageSync("skuItemDTOList")
  260. let data={}
  261. data= {
  262. collageId:this.collageId,
  263. number:this.buyNum,
  264. productId:this.productId,
  265. shopId:this.shopId,
  266. skuId:this.skuProdId,
  267. shopGroupWorkId:this.shopGroupWorkId,
  268. type:type
  269. }
  270. uni.setStorageSync('skuItemList',data)
  271. this.goosDetailshowFlag = false
  272. this.buyNum = 1
  273. uni.navigateTo({
  274. url: '../orderModule/orderConfirm?type=1',
  275. })
  276. },
  277. //获取商品详情
  278. queryProductDetail() {
  279. NET.request(API.QueryProductDetail,
  280. {
  281. shopId:this.shopId,
  282. productId:this.productId,
  283. skuId:this.skuId,
  284. terminal:1
  285. },
  286. "GET").then(res => {
  287. this.productDetail = res.data
  288. for (let i = 0; i < res.data.attrList.length; i++) {
  289. this.subIndex[i] = 0
  290. }
  291. this.attrItemIdArr[0] = res.data.attrList[0].attrValueList[0].id
  292. }).catch(res => {
  293. })
  294. },
  295. getProductSku(){
  296. NET.request(API.QueryProductSku, {
  297. skuId:this.skuId,
  298. productId:this.productId
  299. }, 'GET').then(res => {
  300. this.skuProdList = res.data
  301. this.attrList = res.data.names
  302. this.attrValueList = res.data.names[0].values
  303. //渲染商详之后,默认先选中第一个规格
  304. this.colorActiveClick(this.attrValueList[0],0,0)
  305. this.skuProdId = this.skuId
  306. this.skuImg = res.data.image
  307. this.skuPrice = res.data.price
  308. this.stockNumber = res.data.stockNumber
  309. this.shopId = res.data.shopId
  310. }).catch(res => {
  311. })
  312. },
  313. // 数量减
  314. numSub() {
  315. if (this.buyNum > 1) {
  316. this.buyNum = this.buyNum - 1
  317. } else {
  318. uni.showToast({
  319. title: '亲!至少一件哦!',
  320. icon: "none"
  321. })
  322. }
  323. },
  324. // 数量加
  325. numAdd() {
  326. if(this.buyNum < this.stockNumber){
  327. this.buyNum = this.buyNum + 1
  328. }else{
  329. uni.showToast({
  330. title: this.$t('common.understock'),
  331. icon: "none"
  332. })
  333. }
  334. },
  335. //颜色选中事件
  336. colorActiveClick(res, index, resIndex) {
  337. let t = this;
  338. t.selectArr[index] = res;
  339. t.subIndex[index] = resIndex;
  340. t.attrItemIdArr[index] = res.valueCode
  341. t.checkItem();
  342. t.checkItemDataClick(t.attrItemIdArr)
  343. },
  344. checkItem() {
  345. var self = this;
  346. var option = self.attrList;
  347. var result = []; // 定义数组存储被选中的值
  348. for (let i in option) {
  349. result[i] = self.selectArr[i] ? self.selectArr[i] : "";
  350. if (!self.subIndex[i]) {
  351. self.subIndex[i] = 0
  352. }
  353. if (!self.attrItemIdArr[i]) {
  354. self.attrItemIdArr[i] = option[i].values[0].valueCode
  355. }
  356. }
  357. for (let i in option) {
  358. var last = result[i]; // 把选中的值存放到字符串last去
  359. for (let k in option[i].item) {
  360. result[i] = option[i].item[k].name; // 赋值,存在直接覆盖,不存在往里面添加name值
  361. }
  362. result[i] = last; // 还原,目的是记录点下去那个值,避免下一次执行循环时避免被覆盖
  363. }
  364. self.$forceUpdate(); // 重绘
  365. },
  366. checkItemDataClick(attrItemIdArr) {
  367. let attrkey = ''
  368. for(let i =0;i<attrItemIdArr.length;i++){
  369. attrkey += attrItemIdArr[i]+','
  370. }
  371. attrkey = attrkey.substring(0,attrkey.length - 1)
  372. let mapinfo = this.skuProdList.map
  373. for (var key in mapinfo){
  374. if(attrkey == key){
  375. this.skuProdId = mapinfo[key].skuId
  376. this.skuImg = mapinfo[key].skuImg
  377. this.skuPrice = mapinfo[key].price
  378. this.stockNumber = mapinfo[key].stockNumber
  379. }
  380. }
  381. },
  382. shareClick(){
  383. this.$refs.shareSpell.shareShow = true
  384. },
  385. shareCancel(){
  386. this.$refs.shareSpell.shareShow = false
  387. },
  388. goinvitePoster(){
  389. let data = {
  390. image:this.inviteSpell.image,
  391. headImage:this.inviteSpell.headImage,
  392. productName:this.inviteSpell.productName,
  393. person:this.inviteSpell.person,
  394. originalPrice:this.inviteSpell.originalPrice,
  395. price:this.inviteSpell.price,
  396. collageId:this.collageId,
  397. productId:this.productId,
  398. skuId:this.skuId,
  399. orderId:this.orderId
  400. }
  401. uni.navigateTo({
  402. url:'invitePoster?data='+ JSON.stringify(data)
  403. })
  404. },
  405. getInviteSpell(){
  406. // uni.showLoading({
  407. // mask: true,
  408. // title: '加载中...',
  409. // })
  410. NET.request(API.getInviteSpell, {
  411. collageId:this.collageId,
  412. orderId: this.orderId
  413. }, 'POST').then(res => {
  414. this.inviteSpell = res.data
  415. this.type = 0
  416. this.inviteSpell.personList.forEach(item=>{
  417. if(item.buyerUserId === this.userInfo.buyerUserId){
  418. this.type = 1
  419. }
  420. })
  421. this.personLen = res.data.personList.length
  422. this.remainPerson = res.data.person - this.personLen
  423. this.dateformat(res.data.time)
  424. this.countDown()
  425. uni.hideLoading()
  426. }).catch(res => {
  427. uni.hideLoading()
  428. })
  429. },
  430. //时分秒换算
  431. dateformat(micro_second) {
  432. // 总秒数
  433. let second = Math.floor(micro_second / 1000);
  434. // 天数
  435. let day = Math.floor(second / 3600 / 24);
  436. // 小时
  437. let hr = Math.floor(second / 3600 % 24);
  438. // 分钟
  439. let min = Math.floor(second / 60 % 60);
  440. // 秒
  441. let sec = Math.floor(second % 60);
  442. this.hou = hr
  443. this.min = min
  444. this.sec = sec
  445. },
  446. countDown(){
  447. let timeOut = setTimeout(() => {
  448. let hou = parseInt(this.hou);
  449. let min = parseInt(this.min);
  450. let sec = parseInt(this.sec);
  451. let netxSec = sec - 1;
  452. let netxMin = min
  453. let netxHou = hou;
  454. if (netxHou == 0 && netxMin == 0 && netxSec == -1) {
  455. clearTimeout(timeOut)
  456. // uni.switchTab({
  457. // url:'../../pages/tabbar/index/index'
  458. // })
  459. } else {
  460. if (netxSec == -1) {
  461. netxSec = 59
  462. netxMin = netxMin - 1;
  463. }
  464. if (netxMin == -1) {
  465. netxMin = 59
  466. netxHou = netxHou - 1
  467. }
  468. if (netxHou == -1) {
  469. netxHou = 23
  470. }
  471. this.hou = this.timeFormat(netxHou),
  472. this.min = this.timeFormat(netxMin),
  473. this.sec = this.timeFormat(netxSec),
  474. this.timeOut = timeOut
  475. this.countDown();
  476. }
  477. }, 1000)
  478. },
  479. timeFormat(param) { //小于10的格式化函数
  480. return param < 10 ? '0' + param : param;
  481. },
  482. }
  483. }
  484. </script>
  485. <style lang="scss">
  486. page{background-color: #F7F7F7;}
  487. .copy-color{
  488. display: flex;
  489. justify-content: center;
  490. align-items:center;
  491. flex-direction: column;
  492. }
  493. .inviteSpell-con{
  494. background: url("http://36.138.125.206:8081/ceres-local-file/static/images/pintuanbg.png") no-repeat left top;
  495. background-size: contain;
  496. .grouped {
  497. text-align: center;
  498. padding-top: 40rpx;
  499. .number {
  500. display: inline-block;
  501. color: #FFEBC4;
  502. height: 48rpx;
  503. line-height: 48rpx;
  504. padding: 0 30rpx;
  505. background: #525252;
  506. margin-top: 10rpx;
  507. }
  508. }
  509. .z-index-0{
  510. z-index: 0;
  511. }
  512. .border-FF7{
  513. border: 2rpx solid #FFF;
  514. }
  515. .colonel-box{
  516. color: #FFEBC4;
  517. background-color: #333333;
  518. width: 86rpx;
  519. height: 32rpx;
  520. line-height: 32rpx;
  521. border-radius: 15rpx;
  522. text-align: center;
  523. margin-top: -20rpx;
  524. z-index: 2;
  525. }
  526. .font-color-C5AA7B{
  527. color: #C5AA7B;
  528. }
  529. .topBox {
  530. padding: 40rpx 20rpx 0 20rpx;
  531. }
  532. .title-box{
  533. padding: 30rpx;
  534. background: #FFFFFF;
  535. .title-lab{
  536. width: 400rpx;
  537. height: 130rpx;
  538. }
  539. .spellNum{
  540. background-color: #FFEDDF;
  541. border-radius: 22rpx;
  542. width: 144rpx;
  543. height: 44rpx;
  544. }
  545. .pro-img{
  546. width: 222rpx;
  547. height: 222rpx;
  548. }
  549. .issueregiment{
  550. width: 120rpx;
  551. height: 122rpx;
  552. }
  553. }
  554. .spellpersonnel-box{
  555. margin-top: 20rpx;
  556. padding: 0 20rpx;
  557. .bgBox {
  558. background-color: #FFFFFF;
  559. padding: 30rpx 0;
  560. }
  561. .head-icon{
  562. width: 102rpx;
  563. height: 102rpx;
  564. border-radius: 50%;
  565. }
  566. .replenish-icon{
  567. width: 102rpx;
  568. height: 102rpx;
  569. border-radius: 50%;
  570. border: 1rpx #E5E5E5 dashed;
  571. font-size: 60rpx;
  572. color: #DBDBDB;
  573. }
  574. .offered-but{
  575. background-color: #333333;
  576. border-radius: 5rpx;
  577. width: 420rpx;
  578. height: 66rpx;
  579. color: #FFEBC4;
  580. }
  581. .poster-but{
  582. border: #C5AA7B 1rpx solid;
  583. border-radius: 5rpx;
  584. width: 420rpx;
  585. height: 66rpx;
  586. color: #C5AA7B;
  587. }
  588. }
  589. .spellrule{
  590. background-color: #FFFFFF;
  591. padding: 50rpx 20rpx;
  592. .dot1{
  593. width: 4rpx;
  594. height: 4rpx;
  595. background-color: #B6B6C1;
  596. border-radius: 50%;
  597. margin-left: 10rpx;
  598. }
  599. .dot2{
  600. width: 6rpx;
  601. height: 6rpx;
  602. background-color: #B6B6C1;
  603. border-radius: 50%;
  604. margin-left: 10rpx;
  605. }
  606. .dot3{
  607. width: 8rpx;
  608. height: 8rpx;
  609. background-color: #B6B6C1;
  610. border-radius: 50%;
  611. margin-left: 10rpx;
  612. }
  613. }
  614. .inactive-box{
  615. padding: 40rpx 40rpx;
  616. .weixin-box{
  617. width: 100rpx;
  618. height: 100rpx;
  619. background-color: #F5F5F5;
  620. border-radius: 50%;
  621. image{
  622. width: 55rpx;
  623. height: 55rpx;
  624. }
  625. }
  626. }
  627. .goosDetailshow-box {
  628. .detailImg-box {
  629. margin-top: 30upx;
  630. margin-left: 30upx;
  631. border-radius: 10upx;
  632. border-bottom: 1upx solid #EDEDED;
  633. padding-bottom: 20upx;
  634. width: 690upx;
  635. .detailImg {
  636. width: 180upx;
  637. height: 180upx;
  638. }
  639. }
  640. .color-box {
  641. padding: 30upx 30upx;
  642. border-bottom: 1upx solid #EDEDED;
  643. width: 690upx;
  644. .colorName-box {
  645. display: flex;
  646. flex-wrap: wrap;
  647. flex-direction: row;
  648. justify-content: flex-start;
  649. align-items: center;
  650. margin-top: 30upx;
  651. margin-left: -30upx;
  652. .colorName-on {
  653. background-color: #FFE5D0;
  654. color: #C5AA7B;
  655. margin-left: 30upx;
  656. padding: 10upx 32upx;
  657. border-radius: 28upx;
  658. border: 1upx solid #C5AA7B;
  659. font-size: 26upx;
  660. text-align: center;
  661. z-index: 1;
  662. }
  663. .colorName {
  664. background-color: #F5F5F5;
  665. margin-left: 30upx;
  666. padding: 10upx 32upx;
  667. border-radius: 28upx;
  668. font-size: 26upx;
  669. z-index: 2;
  670. }
  671. }
  672. }
  673. .modelNum-box {
  674. padding: 30upx 30upx;
  675. border-bottom: 1upx solid #EDEDED;
  676. width: 690upx;
  677. .modelNumName-box {
  678. display: flex;
  679. flex-wrap: wrap;
  680. flex-direction: row;
  681. justify-content: flex-start;
  682. align-items: center;
  683. margin-top: 30upx;
  684. margin-left: -30upx;
  685. .modelNumName-on {
  686. background-color: #FFE4D0;
  687. color: #C5AA7B;
  688. margin-left: 30upx;
  689. padding: 10upx 32upx;
  690. border-radius: 28upx;
  691. border: 1upx solid #C5AA7B;
  692. font-size: 26upx;
  693. text-align: center;
  694. }
  695. .modelNumName {
  696. background-color: #F5F5F5;
  697. margin-left: 30upx;
  698. padding: 10upx 32upx;
  699. border-radius: 28upx;
  700. font-size: 26upx;
  701. }
  702. }
  703. }
  704. .joinbuyBut{
  705. width: 690upx;
  706. height: 80upx;
  707. border-radius: 40upx 40upx;
  708. background-color: #3D3C3D;
  709. color: #FFFEFE;
  710. font-size: 28upx;
  711. line-height: 80upx;
  712. text-align: center;
  713. }
  714. .goodsNum-box {
  715. padding: 30upx 30upx;
  716. width: 690upx;
  717. padding-bottom: 268upx;
  718. .goodsNumber {
  719. border: 1upx solid #999999;
  720. padding: 3upx 20upx;
  721. }
  722. .subtract {
  723. border: 1upx solid #999999;
  724. padding: 3upx 20upx;
  725. margin-right: -1upx;
  726. }
  727. .add {
  728. border: 1upx solid #999999;
  729. padding: 3upx 20upx;
  730. margin-left: -1upx;
  731. }
  732. }
  733. .goosDetailbut-box {
  734. .joinShopCartBut {
  735. width: 343upx;
  736. height: 80upx;
  737. border-radius: 40upx 0 0 40upx;
  738. background-color: #3D3C3D;
  739. color: #FFFEFE;
  740. font-size: 28upx;
  741. line-height: 80upx;
  742. text-align: center;
  743. margin-left: 30upx;
  744. }
  745. .buyNowBut {
  746. width: 343upx;
  747. height: 80upx;
  748. border-radius: 0 40upx 40upx 0;
  749. background-color: #3D3C3D;
  750. color: #FFFEFE;
  751. font-size: 28upx;
  752. line-height: 80upx;
  753. text-align: center;
  754. }
  755. }
  756. }
  757. }
  758. </style>
  759. <style scoped>
  760. .spellrule /deep/ .u-steps__item__num {
  761. background: #F3F4F5 !important;
  762. border: none !important;
  763. width: 60rpx;
  764. height: 60rpx;
  765. }
  766. .spellrule /deep/ .u-steps .u-steps__item--row .u-steps__item__line {
  767. left: 66%;
  768. width: 67%;
  769. }
  770. .spellrule /deep/ .u-steps .u-steps__item--row .u-line {
  771. height: 6rpx;
  772. border-bottom: none;
  773. background: #F3F4F5;
  774. border-bottom: none !important;
  775. }
  776. .spellrule /deep/ .u-steps .u-steps__item--row .u-steps__item__text--row {
  777. width: 180rpx;
  778. padding: 0 25rpx;
  779. }
  780. </style>