inviteSpell.vue 21 KB

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