product.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. <template>
  2. <view class="container">
  3. <view class="swiper-box">
  4. <view class="img" v-if="isSc == 2"><image :src="shopDetail.image" mode="widthFix"></image></view>
  5. <view class="img" v-if="isSc == 1"><image :src="shopDetail.class_info.uri" mode="widthFix"></image></view>
  6. </view>
  7. <view class="content-box">
  8. <view class="content-top">
  9. <view class="hd">{{ shopDetail.store_name }}</view>
  10. <!-- <view class="content-img">
  11. <image src="../../static/img/fx.png" mode=""></image>分享
  12. </view> -->
  13. </view>
  14. <view class="content-center" v-if="isSc == 2">
  15. <view class="title">发行数量: {{ shopDetail.ficti + shopDetail.stock }}份</view>
  16. <view class="title">已售数量: {{ shopDetail.ficti }}份</view>
  17. <view class="title">个人限购: {{ shopDetail.buy_limit }}</view>
  18. <view class="title">开售时间: {{ shopDetail.cmy_pay_time }}</view>
  19. </view>
  20. <view class="content-center" v-else>
  21. <view class="title" style="font-size: 38rpx;font-weight: bold;color: #FFFFFF;">{{ shopDetail.class_info.name }}</view>
  22. <view class="title">持有者: {{ shopDetail.user.nickname }}</view>
  23. </view>
  24. <view class="content-bottom">
  25. <view class="price">
  26. {{ shopDetail.price }}
  27. <span>RMB</span>
  28. </view>
  29. <view class="gobuy" @click="buy()">立即购买</view>
  30. </view>
  31. </view>
  32. <view class="rz" v-show="isSc == 2">
  33. <view class="rz-title">作品描述</view>
  34. <view class="rz-ms">{{ shopDetail.store_info }}</view>
  35. </view>
  36. <view class="rz">
  37. <view class="rz-title">链上信息</view>
  38. <view class="tc-item flex">
  39. <view class="tcitem-name">地址</view>
  40. <view class="ali-name clamp">{{ nft.id }}</view>
  41. <image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(nft.id)"></image>
  42. </view>
  43. <view class="tc-item flex">
  44. <view class="tcitem-name">Token Hash</view>
  45. <view class="ali-name clamp">{{ nft.tx_hash }}</view>
  46. <image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(nft.id)"></image>
  47. </view>
  48. </view>
  49. <view class="rz" v-show="isSc == 2">
  50. <view class="rz-title">作品详情</view>
  51. <rich-text class="rich" :nodes="shopDetail.description"></rich-text>
  52. </view>
  53. <uni-popup ref="popupkf" type="bottom">
  54. <view class="popup-box">
  55. <view class="pop-title">选择支付方式</view>
  56. <view class="pop-radio">
  57. <radio-group name="">
  58. <!-- #ifdef APP-PLUS -->
  59. <label class="pop-radio-box" @click="type = 'ali'">
  60. <view class="pop-radio-cont">
  61. <image src="../../static/img/ali.png" style="width: 40rpx;height: 40rpx;" mode="scaleToFill"></image>
  62. <text>支付宝支付</text>
  63. </view>
  64. <radio :checked="type == 'ali'" style="transform: scale(0.8);" />
  65. </label>
  66. <!-- <label class="pop-radio-box" @click="type='weixin'">
  67. <view class="pop-radio-cont">
  68. <image src="../../static/img/weixin.png" style="width: 40rpx;height: 40rpx;"
  69. mode="scaleToFill">
  70. </image>
  71. <text>微信支付</text>
  72. </view>
  73. <radio :checked="type=='weixin'" style="transform: scale(0.8);" />
  74. </label> -->
  75. <!-- #endif -->
  76. <label class="pop-radio-box" @click="type = 'yue'">
  77. <view class="pop-radio-cont">
  78. <image src="../../static/img/yue.png" style="width: 40rpx;height: 40rpx;" mode="scaleToFill"></image>
  79. <text>余额支付:{{ now_money }}</text>
  80. </view>
  81. <radio :checked="type == 'yue'" style="transform: scale(0.8);" />
  82. </label>
  83. </radio-group>
  84. <view class="pop-bottom">
  85. <view class="pirce">
  86. <view class="price-left">合计:</view>
  87. <view class="price-right">
  88. <span>{{ shopDetail.price }}</span>
  89. </view>
  90. </view>
  91. <!-- "!payLoding ? pay() : ''" -->
  92. <view class="buy" @click="pay()" :class="{ clickbg: payLoding }">立即支付</view>
  93. </view>
  94. </view>
  95. </view>
  96. </uni-popup>
  97. <!-- <uni-popup ref="popupZf" type="bottom" >
  98. </uni-popup> -->
  99. </view>
  100. </template>
  101. <script>
  102. // import uniPopup from '@/components/uni-popup/uni-popup.vue'
  103. import { balance } from '@/api/wallet.js';
  104. import { mapState } from 'vuex';
  105. import uniCopy from '@/components/js_sdk/xb-copy/uni-copy.js';
  106. import { goodsDetails, cartAdd } from '@/api/product.js';
  107. import { confirm, orderPay, createOrderkey, nftmall, nftDetail, nftBuy } from '@/api/order.js';
  108. export default {
  109. data() {
  110. return {
  111. orderId: '', //订单编号
  112. moneyAll: '', //购物车订单
  113. now_money: 0, //余额
  114. payLoding: true, //判断是否支付中
  115. orderKey: '', //订单的key值
  116. addressData: {}, //地址信息
  117. shopList: [], //商品列表
  118. cartId: '', //购物车id
  119. uniqueId: '',
  120. nft: '',
  121. type: 'yue', //支付状态
  122. shopDetail: {
  123. class_info: {},
  124. user: {}
  125. }, //商品详情
  126. weixin: '',
  127. yue: '',
  128. shopId: '', //商品id
  129. list: [
  130. // 'https://img.php.cn/upload/article/202104/15/2021041518005466284.jpg',
  131. // 'https://img.php.cn/upload/article/202104/15/2021041518005466284.jpg',
  132. // 'https://img.php.cn/upload/article/202104/15/2021041518005466284.jpg'
  133. ],
  134. froms: '', //保存h5中数据来源对象
  135. isSc: 0 //是否是是市场传递过来的参数
  136. };
  137. },
  138. onLoad(options) {
  139. // 保存当前获取数据的类型
  140. this.isSc = options.isSc;
  141. // 商品id
  142. this.shopId = options.id;
  143. // 判断是否是首页
  144. if (this.isSc == 2) {
  145. this.goodsDetail();
  146. }
  147. // 判断是否是市场
  148. if (this.isSc == 1) {
  149. this.getNftDetail();
  150. }
  151. // 载入余额
  152. balance({}).then(({ data }) => {
  153. // 获取余额
  154. this.now_money = data.now_money;
  155. });
  156. },
  157. computed: {
  158. ...mapState(['weichatObj', 'baseURL', 'urlFile']),
  159. ...mapState('user', ['userInfo', 'hasLogin'])
  160. },
  161. methods: {
  162. //选择支付方式
  163. changePayType(type) {
  164. this.type = type;
  165. },
  166. copy(value) {
  167. let obj = this;
  168. let content = value; //需要复制的内容
  169. console.log('复制的内容:', content);
  170. // content = typeof content === 'string' ? content : content.toString(); // 复制内容,必须字符串,数字需要转换为字符串
  171. const result = uniCopy(content);
  172. if (result === false) {
  173. uni.showToast({
  174. title: '不支持'
  175. });
  176. } else {
  177. uni.showToast({
  178. title: '复制成功',
  179. icon: 'none'
  180. });
  181. }
  182. },
  183. buy() {
  184. // 判断是否是首页
  185. if (this.isSc == 2) {
  186. this.indexPay();
  187. }
  188. // 判断是否是市场
  189. if (this.isSc == 1) {
  190. this.$refs.popupkf.open();
  191. }
  192. },
  193. // 判断是否是首页进入交易
  194. indexPay() {
  195. let obj = this;
  196. let lj = true;
  197. // 判断是否需要拦截
  198. if (obj.userInfo.is_company == 1 || obj.userInfo.is_partner == 1) {
  199. lj = false;
  200. }
  201. if (lj) {
  202. let time = new Date();
  203. if (time.getTime() < obj.shopDetail.sell_time * 1000) {
  204. uni.showModal({
  205. title: '错误',
  206. content: '未到开售时间,不能购买',
  207. showCancel: false,
  208. success: res => {},
  209. fail: () => {}
  210. });
  211. return;
  212. }
  213. }
  214. let data = {
  215. cartNum: 1,
  216. uniqueId: obj.uniqueId, //商品标签.默认无
  217. new: '1',
  218. // mer_id: '',//商店id暂未知晓
  219. productId: obj.shopId
  220. };
  221. //生成订单
  222. cartAdd(data)
  223. .then(res => {
  224. console.log(res, 'res');
  225. //需要获取购物车号
  226. obj.cartId = res.data.cartId;
  227. this.getKeys();
  228. })
  229. .catch(e => {
  230. console.log(e);
  231. });
  232. this.$refs.popupkf.open();
  233. },
  234. getKeys() {
  235. let obj = this;
  236. confirm({
  237. cartId: obj.cartId
  238. }).then(data => {
  239. console.log(data, '生平具体信息');
  240. obj.addressData = data.data.addressInfo || {};
  241. obj.shopList = data.data.cartInfo; //商品列表
  242. // obj.moneyAll = data.data.cartInfo.truePrice; //金额数据
  243. obj.orderKey = data.data.orderKey; //订单key
  244. // let url = `/pages/money/pay?key=${obj.orderKey}`
  245. // console.log(url);
  246. });
  247. },
  248. //支付
  249. async pay() {
  250. let obj = this;
  251. if (obj.type == 'yue' && obj.now_money * 1 < obj.shopDetail.price * 1) {
  252. uni.showModal({
  253. title: '提示',
  254. content: '账户余额不足!',
  255. showCancel: false
  256. });
  257. return;
  258. }
  259. // uni.hideLoading()
  260. uni.showLoading({
  261. title: '支付中',
  262. mask: true
  263. });
  264. // 判断是否支付中
  265. if (!obj.payLoding) {
  266. return;
  267. }
  268. obj.payLoding = false;
  269. if (obj.type == 'weixin') {
  270. obj.$api.msg('微信暂未开通!');
  271. uni.hideLoading();
  272. obj.payLoding = true;
  273. return;
  274. }
  275. // 判断是否是市场进入
  276. if (obj.isSc == 1) {
  277. console.log('sc');
  278. obj.marketPay();
  279. }
  280. // 判断是否是市场进入
  281. if (obj.isSc == 2) {
  282. obj.firstCreateOrder();
  283. }
  284. },
  285. // 市场支付
  286. marketPay() {
  287. const obj = this;
  288. nftBuy(
  289. {
  290. pay_type: obj.type
  291. },
  292. obj.shopId
  293. )
  294. .then(res => {
  295. console.log(res, '购入');
  296. uni.hideLoading();
  297. if (obj.type == 'yue') {
  298. obj.paySuccessTo();
  299. }
  300. if (obj.type == 'ali') {
  301. const url = res.data.payConfig;
  302. console.log(url, 'url');
  303. uni.requestPayment({
  304. provider: 'alipay',
  305. orderInfo: url,
  306. success: res => {
  307. obj.paySuccessTo();
  308. },
  309. fail: e => {
  310. uni.showModal({
  311. title: '错误',
  312. content: '未成功支付',
  313. showCancel: false
  314. });
  315. console.log(e);
  316. },
  317. complete: () => {}
  318. });
  319. }
  320. })
  321. .catch(() => {
  322. obj.payLoding = true;
  323. });
  324. return;
  325. },
  326. //普通商品支付
  327. firstCreateOrder() {
  328. let obj = this;
  329. // 获取下单页面数据
  330. // let prepage = obj.$api.prePage();
  331. // console.log(prepage,'prepage');
  332. let pages = getCurrentPages(); // 获取页面栈
  333. let current = pages[pages.length - 1]; // 当前页面
  334. console.log(current, 'current');
  335. let data = {
  336. real_name: '', //联系人名称
  337. phone: '', //联系人号码
  338. couponId: '', //优惠券编号
  339. addressId: '', //支付地址id
  340. useIntegral: 0, //是否积分抵扣1为是0为否
  341. payType: obj.type, //支付类型 weixin-微信 yue-余额
  342. mark: '', //备注
  343. from: 'app', //来源
  344. shipping_type: 1 //提货方式 1 快递 2自提
  345. };
  346. // 生成订单
  347. console.log(obj.orderKey, 'obj.orderKey');
  348. createOrderkey(data, obj.orderKey)
  349. .then(({ data, status, msg }) => {
  350. console.log(status);
  351. // 判断是否支付失败
  352. if (data.status == 'ORDER_EXIST') {
  353. uni.showModal({
  354. title: '提示',
  355. content: msg,
  356. showCancel: false
  357. });
  358. uni.hideLoading();
  359. obj.payLoding = true;
  360. return;
  361. }
  362. // 保存订单号
  363. obj.orderId = data.result.orderId;
  364. // 判断是否为余额支付
  365. if (obj.type == 'yue') {
  366. if (status == 200) {
  367. obj.paySuccessTo();
  368. } else {
  369. obj.$api.msg(msg);
  370. }
  371. } else {
  372. // 立即支付
  373. obj.orderMoneyPay();
  374. }
  375. })
  376. .catch(e => {
  377. uni.hideLoading();
  378. obj.payLoding = true;
  379. console.log(e, '123456789');
  380. });
  381. },
  382. //立即支付订单
  383. orderMoneyPay() {
  384. let obj = this;
  385. orderPay({
  386. uni: obj.orderKey,
  387. from: 'app', //来源
  388. paytype: obj.type //支付类型 weixin-微信 yue-余额
  389. }).then(res => {
  390. console.log(res, '订单支付信息');
  391. if (res.data.status == 'SUCCESS' && obj.type == 'yue') {
  392. if (res.status == 200) {
  393. obj.paySuccessTo();
  394. } else {
  395. obj.$api.msg(msg);
  396. console.log('失败');
  397. }
  398. }
  399. if (obj.type == 'ali') {
  400. const url = res.data.result.jsConfig;
  401. console.log(url, 'url');
  402. uni.requestPayment({
  403. provider: 'alipay',
  404. orderInfo: url,
  405. success: res => {
  406. console.log(res);
  407. uni.showToast({
  408. title: '支付成功',
  409. duration: 2000
  410. });
  411. obj.paySuccessTo();
  412. },
  413. fail: e => {
  414. console.log(e);
  415. },
  416. complete: () => {}
  417. });
  418. }
  419. uni.hideLoading();
  420. obj.payLoding = true;
  421. });
  422. },
  423. // 获取商品详情
  424. goodsDetail() {
  425. let obj = this;
  426. console.log(obj.isSc, 'issc');
  427. goodsDetails({}, obj.shopId).then(res => {
  428. console.log(res, '123456789');
  429. obj.uniqueId = res.data.productValue['默认'].unique;
  430. obj.nft = res.data.nft_class;
  431. obj.shopDetail = res.data.storeInfo;
  432. console.log(obj.shopDetail, obj.uniqueId, 'res1111');
  433. if (obj.shopDetail.description != null) {
  434. obj.shopDetail.description = obj.shopDetail.description.replace(/<img/g, '<img class="rich-img"').replace(/<p>\s*<img/g, '<p class="pHeight"><img');
  435. }
  436. if (obj.shopDetail.rule != null) {
  437. obj.shopDetail.rule = '<p>' + obj.shopDetail.rule.replace(/\n/g, '</p><p>').trim() + '</p>';
  438. }
  439. let time = new Date(obj.shopDetail.sell_time * 1000);
  440. obj.shopDetail.cmy_pay_time =
  441. time.getFullYear() + '年' + (time.getMonth() + 1) + '月' + time.getDate() + '日' + time.getHours() + '时' + time.getMinutes() + '分' + time.getSeconds() + '秒';
  442. return;
  443. });
  444. },
  445. // 获取交易市场进入时候的数据
  446. getNftDetail() {
  447. let obj = this;
  448. nftDetail({}, obj.shopId).then(res => {
  449. // obj.uniqueId = res.data.productValue['默认'].unique
  450. // obj.shopDetail = res.data.storeInfo
  451. obj.shopDetail = res.data.info;
  452. console.log(res, obj.isSc, 'res1111');
  453. });
  454. },
  455. // 支付成功跳转
  456. paySuccessTo() {
  457. uni.hideLoading();
  458. uni.redirectTo({
  459. url: '/pages/money/paySuccess?orderKey=' + this.orderKey
  460. });
  461. }
  462. }
  463. };
  464. </script>
  465. <style lang="scss">
  466. .container,
  467. page {
  468. background: #111111;
  469. min-height: 100%;
  470. }
  471. /deep/ .rich-img {
  472. width: 100% !important;
  473. height: auto;
  474. }
  475. /* #ifdef MP */
  476. .rich-img {
  477. width: 100% !important;
  478. height: auto;
  479. }
  480. // 处理图片间白色间距问题
  481. .pHeight {
  482. line-height: 0;
  483. }
  484. /* #endif */
  485. .swiper-box {
  486. background: #0c0a36;
  487. }
  488. .img {
  489. margin: 0 auto;
  490. width: 750rpx;
  491. image {
  492. width: 100%;
  493. }
  494. }
  495. .content-box {
  496. border-bottom: 2rpx solid #919295;
  497. padding: 30rpx;
  498. display: flex;
  499. flex-direction: column;
  500. .content-top {
  501. display: flex;
  502. justify-content: space-between;
  503. align-items: center;
  504. .hd {
  505. font-size: 38rpx;
  506. font-family: PingFang SC;
  507. font-weight: bold;
  508. color: #ffffff;
  509. line-height: 42rpx;
  510. }
  511. .content-img {
  512. display: flex;
  513. align-items: center;
  514. justify-content: space-around;
  515. font-size: 24rpx;
  516. font-family: PingFang SC;
  517. font-weight: 500;
  518. color: #585be7;
  519. line-height: 39rpx;
  520. padding: 10rpx;
  521. height: 41rpx;
  522. border: 2rpx solid #585be7;
  523. border-radius: 5rpx;
  524. image {
  525. width: 26rpx;
  526. height: 26rpx;
  527. }
  528. }
  529. }
  530. .content-center {
  531. margin: 20rpx 0;
  532. display: flex;
  533. flex-direction: column;
  534. .title {
  535. font-size: 24rpx;
  536. font-weight: 500;
  537. color: #ffffff;
  538. line-height: 42rpx;
  539. }
  540. }
  541. .content-bottom {
  542. display: flex;
  543. align-items: center;
  544. justify-content: space-between;
  545. .price {
  546. display: flex;
  547. justify-content: flex-end;
  548. font-size: 48rpx;
  549. font-weight: bold;
  550. color: #585be7;
  551. span {
  552. font-size: 24rpx;
  553. font-weight: bold;
  554. color: #666666;
  555. font-family: SourceHanSerifSC;
  556. line-height: 66rpx;
  557. }
  558. }
  559. .gobuy {
  560. width: 334rpx;
  561. height: 90rpx;
  562. background: linear-gradient(270deg, #6e8df7, #9977f6);
  563. border-radius: 10rpx;
  564. font-size: 36rpx;
  565. font-weight: 500;
  566. color: #ffffff;
  567. line-height: 90rpx;
  568. text-align: center;
  569. }
  570. }
  571. }
  572. .rz {
  573. display: flex;
  574. flex-direction: column;
  575. align-items: center;
  576. .rz-title {
  577. margin: 35rpx 0;
  578. font-size: 36rpx;
  579. font-family: PingFang SC;
  580. font-weight: bold;
  581. color: #ffffff;
  582. line-height: 42rpx;
  583. }
  584. .rich {
  585. display: block;
  586. justify-content: center;
  587. margin: 30rpx;
  588. width: 750rpx;
  589. overflow: hidden;
  590. }
  591. .rz-ms {
  592. padding: 0 20rpx;
  593. width: 690rpx;
  594. font-size: 24rpx;
  595. line-height: 36rpx;
  596. color: #ffffff;
  597. word-wrap: break-word;
  598. word-break: normal;
  599. }
  600. .rz-content {
  601. padding: 20rpx;
  602. display: flex;
  603. flex-direction: column;
  604. width: 690rpx;
  605. background: #222222;
  606. border-radius: 20rpx;
  607. .con-box {
  608. line-height: 60rpx;
  609. display: flex;
  610. justify-content: space-between;
  611. align-items: center;
  612. .left {
  613. font-size: 24rpx;
  614. color: #a5a5a5;
  615. }
  616. .right {
  617. display: flex;
  618. align-items: center;
  619. .address {
  620. color: #6363fe;
  621. font-size: 24rpx;
  622. width: 300rpx;
  623. text-align: right;
  624. overflow: hidden;
  625. text-overflow: ellipsis;
  626. white-space: nowrap;
  627. }
  628. .copy {
  629. margin-left: 15rpx;
  630. margin-bottom: 22rpx;
  631. width: 30rpx;
  632. height: 30rpx;
  633. image {
  634. width: 30rpx;
  635. height: 30rpx;
  636. }
  637. }
  638. }
  639. }
  640. }
  641. .tc-item {
  642. width: 100%;
  643. padding: 50rpx 40rpx 0;
  644. line-height: 1;
  645. .tcitem-name {
  646. flex-shrink: 0;
  647. font-size: 30rpx;
  648. font-family: PingFang SC;
  649. font-weight: 500;
  650. color: #fff;
  651. }
  652. .ali-name {
  653. font-size: 30rpx;
  654. font-family: PingFang SC;
  655. font-weight: 500;
  656. padding: 0 20rpx;
  657. color: #fff;
  658. }
  659. .tcitem-image {
  660. flex-shrink: 0;
  661. width: 26rpx;
  662. height: 28rpx;
  663. }
  664. }
  665. }
  666. .popup-box {
  667. width: 750rpx;
  668. background: #ffffff;
  669. border-radius: 10rpx 10rpx 0px 0px;
  670. padding-bottom: 130rpx;
  671. .pop-title {
  672. line-height: 1;
  673. padding-top: 30rpx;
  674. padding-left: 30rpx;
  675. padding-bottom: 10rpx;
  676. font-size: 34rpx;
  677. font-weight: bold;
  678. color: #333333;
  679. }
  680. .pop-radio {
  681. display: flex;
  682. .pop-radio-box {
  683. height: 100rpx;
  684. display: flex;
  685. align-items: center;
  686. padding: 25rpx;
  687. justify-content: space-between;
  688. width: 750rpx;
  689. .pop-radio-cont {
  690. display: flex;
  691. img {
  692. width: 40rpx;
  693. height: 40rpx;
  694. }
  695. text {
  696. margin-left: 10rpx;
  697. font-size: 28rpx;
  698. font-weight: 400;
  699. color: #3f454b;
  700. }
  701. }
  702. }
  703. .pop-bottom {
  704. position: fixed;
  705. bottom: 0;
  706. right: 0;
  707. height: 93rpx;
  708. width: 750rpx;
  709. display: flex;
  710. justify-content: space-between;
  711. .pirce {
  712. display: flex;
  713. align-items: center;
  714. margin-left: 25rpx;
  715. .price-left {
  716. font-size: 28rpx;
  717. font-family: PingFang SC;
  718. font-weight: 400;
  719. color: #3f454b;
  720. line-height: 100px;
  721. }
  722. display: flex;
  723. .price-right {
  724. font-size: 24rpx;
  725. font-weight: 500;
  726. color: #fd3b39;
  727. line-height: 55px;
  728. span {
  729. font-size: 36rpx;
  730. font-weight: 500;
  731. color: #fd3b39;
  732. line-height: 55px;
  733. }
  734. }
  735. }
  736. .buy {
  737. width: 360rpx;
  738. height: 93rpx;
  739. background: linear-gradient(270deg, #6e8df7, #9977f6);
  740. font-size: 32rpx;
  741. font-weight: bold;
  742. line-height: 93rpx;
  743. text-align: center;
  744. color: #ffffff;
  745. }
  746. }
  747. }
  748. }
  749. .clickbg {
  750. background-color: $color-gray !important;
  751. }
  752. </style>