时空网前端
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.

814 lines
20 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <template>
  2. <view>
  3. <skeleton :loading="skeletonLoading" :row="12" :showAvatar="false" :showTitle="true">
  4. <block v-if="isRight(goods_detail)">
  5. <!-- 商品图片轮播 -->
  6. <swiper :current="current" :indicator-dots="goods_detail.banners.length > 1 ? true : false"
  7. :circular="true" class="swiper-box" indicator-active-color="#FE9903">
  8. <swiper-item v-for="(item, index) in goods_detail.banners" :key="item.id">
  9. <image mode="aspectFill" :src="item.cover" style="width: 100%; height: 100%;"
  10. @click="lookImg(index)"></image>
  11. </swiper-item>
  12. </swiper>
  13. <view class="bill-position" @tap='formSubmit()'>
  14. <button class="cu-btn1 margin-left-sm lf-font-28 lf-m-20">
  15. 分享海报
  16. </button>
  17. </view>
  18. <!-- 商品主要信息 -->
  19. <view class="head-info">
  20. <view class="lf-font-40">{{ goods_detail.name }}</view>
  21. <view class="lf-row-between lf-font-24 lf-m-t-30 lf-p-b-20">
  22. <view class="lf-flex price">
  23. <lf-price :price="goods_detail.specs[0].selling_price"></lf-price>
  24. <view class="lf-m-l-20">¥{{ goods_detail.specs[0].original_price }}</view>
  25. <view v-if="goods_detail.specs[0].cost">{{ goods_detail.specs[0].cost }}</view>
  26. </view>
  27. <view class="lf-font-24 lf-text-right">
  28. <view class="lf-color-gray">{{ goods_detail.specs[0].sold_stock_text }}</view>
  29. <view class="lf-color-primary" v-if="goods_detail.specs[0].stock && goods_detail.specs[0].stock < 100">{{ goods_detail.specs[0].stock_text }}</view>
  30. </view>
  31. </view>
  32. <view class="label-box" v-if="goods_detail.tags && goods_detail.tags.length">
  33. <view class="label-item" v-for="(item, index) in goods_detail.tags" :key="index">{{ item }}
  34. </view>
  35. </view>
  36. </view>
  37. <!-- 地址信息 -->
  38. <view class="address-box">
  39. <view class="lf-font-32 lf-font-bold">适用门店</view>
  40. <view class="lf-m-t-20 lf-row-between">
  41. <view class="lf-flex">
  42. <image mode="aspectFill" class="lf-fle shop-img" :src="goods_detail.store.cover"
  43. v-if="goods_detail.store.cover"></image>
  44. <image mode="aspectFill" class="lf-fle shop-img" src="../../static/center/shop-logo.png"
  45. v-else></image>
  46. <view class="lf-font-32 lf-m-l-20 lf-line-1" style="max-width: 512rpx;">
  47. {{ goods_detail.store.name }}</view>
  48. </view>
  49. <view @click="makePhoneCall(goods_detail.store.tel)">
  50. <text class="lf-iconfont lf-icon-dianhua lf-font-40" style="color: #3A62FF;"></text>
  51. </view>
  52. </view>
  53. <view class="lf-flex lf-m-t-20" @click="openMap">
  54. <view style="width: 60rpx; height: 60rpx;" class="lf-row-center">
  55. <text class="lf-iconfont lf-icon-dizhi lf-font-40" style="color: #555555;"></text>
  56. </view>
  57. <view class="lf-m-l-20 lf-font-28" style="color: #555555;">{{ goods_detail.store.address }}
  58. </view>
  59. </view>
  60. </view>
  61. <!-- 商品详情 -->
  62. <view class="goods-detail">
  63. <view class="lf-font-32 lf-font-bold lf-m-b-20">商品详情</view>
  64. <rich-text :nodes="afterDone"
  65. v-if="goods_detail.content_type == 'rich_text'"></rich-text>
  66. <image class="goods-img" :src="item" v-for="(item, index) in goods_detail.content" :key="index"
  67. v-if="goods_detail.content_type == 'img'"></image>
  68. </view>
  69. <!-- 修饰专用 -->
  70. <view class="extra"></view>
  71. <!-- 吸底操作按钮 -->
  72. <view class="lf-row-between fixed-bottom">
  73. <view class="lf-flex lf-p-t-10 lf-p-b-10">
  74. <view class="lf-flex-column lf-row-center icon-item"
  75. @click="$url('/pages/index/index', {type: 'switch'})">
  76. <image class="icon-img" src="../../static/center/home.png"></image>
  77. <view class="lf-m-t-1">首页</view>
  78. </view>
  79. <view class="lf-flex-column lf-row-center icon-item"
  80. @click="$url('/pages/contactService/index')">
  81. <image class="icon-img" src="../../static/center/service.png"></image>
  82. <view class="lf-m-t-1">客服</view>
  83. </view>
  84. <view class="lf-flex-column lf-row-center icon-item" @click="switchCollect">
  85. <image class="icon-img" src="../../static/center/collect-active.png" v-if="is_collect">
  86. </image>
  87. <image class="icon-img" src="../../static/center/collect.png" v-else></image>
  88. <view class="lf-m-t-1">{{ is_collect ? '已收藏' : '收藏' }}</view>
  89. </view>
  90. <button class="lf-flex-column lf-row-center icon-item" open-type="share">
  91. <image class="icon-img" src="../../static/center/share.png"></image>
  92. <view class="lf-m-t-1">分享</view>
  93. </button>
  94. </view>
  95. <button class="btn" @click="toAddOrder">立即抢购</button>
  96. </view>
  97. <!-- 回到顶部 -->
  98. <!-- <u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}" :icon-style="{color: '#ffffff'}"></u-back-top> -->
  99. <u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}">
  100. </u-back-top>
  101. </block>
  102. </skeleton>
  103. <view class="canvas-box">
  104. <canvas style="width: 375px;height: 667px;position:fixed;top:9999px" canvas-id="mycanvas" />
  105. </view>
  106. <view class='imagePathBox' v-if="maskHidden == true && imagePath" @click="maskHidden = false ">
  107. <image :src="imagePath" class='shengcheng' mode="widthFix"></image>
  108. <button class='baocun' @click.stop="saveBill()">保存相册分享到朋友圈</button>
  109. </view>
  110. </view>
  111. </template>
  112. <script>
  113. let SparkMD5 = require("@/common/SparkMD5.js"); // 签名加密js文件
  114. export default {
  115. data() {
  116. return {
  117. current: 0, // 轮播下标
  118. goods_id: 0,
  119. goods_detail: {},
  120. is_collect: 0, // 1为当前收藏商品了,0为否
  121. skeletonLoading: true,
  122. base64Img: '',
  123. checkArea: 'Cannot find module',
  124. maskHidden: false,
  125. info: {
  126. avatar: '',
  127. nickname: '',
  128. id: '',
  129. tel: '',
  130. tags: []
  131. },
  132. showLogin: true,
  133. imagePath: '',
  134. userToken: '',
  135. wxCode: '',
  136. onceCode: '',
  137. pt: 1,
  138. afterDone: '',
  139. backgroundImg: '',
  140. goodShare: '',
  141. s_id: ''
  142. }
  143. },
  144. computed: {
  145. isRight() {
  146. return function(val) {
  147. return this.$shared.isRight(val);
  148. }
  149. }
  150. },
  151. onLoad(options) {
  152. this.goods_id = options.id;
  153. this.pt = options.pt || 1;
  154. this.s_id = options.share_id || ''
  155. this.getGoodsDetail();
  156. this.getWxCode()
  157. // this.getBackground()
  158. },
  159. methods: {
  160. getBackground() {
  161. let _this = this
  162. _this.$http(_this.API.API_BILLBACKGROUND, {
  163. type: 'goods'
  164. }).then(res => {
  165. let img = res.data.img_url
  166. if (img) {
  167. wx.getImageInfo({
  168. src: img,
  169. success: function(sres) {
  170. _this.backgroundImg = sres.path
  171. }
  172. })
  173. }
  174. })
  175. },
  176. //获取商品分享图
  177. getGoodsBackground() {
  178. let _this = this
  179. let goods = _this.goods_detail;
  180. let imageUrl = goods.share_cover || goods.cover;
  181. wx.getImageInfo({
  182. src: imageUrl,
  183. success: function(sres) {
  184. _this.goodShare = sres.path
  185. console.log('商品分享图',_this.goodShare)
  186. }
  187. })
  188. console.log('商品分享图',_this.goodShare)
  189. },
  190. //商品绑定
  191. bindGoods() {
  192. var _this = this;
  193. let yy = new Date().getFullYear();
  194. let mm = new Date().getMonth()+1;
  195. let dd = new Date().getDate();
  196. let hh = new Date().getHours();
  197. let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
  198. let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
  199. let gettime = yy+'-'+mm+'-'+dd+' '+hh+':'+mf+':'+ss;
  200. let userInfo = uni.getStorageSync('userinfo') || {};
  201. let timeDate = Math.round(new Date().getTime() / 1000).toString();
  202. console.log(SparkMD5)
  203. let md5TimeDate = SparkMD5.hash(timeDate)
  204. let nowTime = new Date().toLocaleString();
  205. _this.$http(_this.API.API_BINDGOODS, {
  206. deed: md5TimeDate,
  207. sid: _this.s_id,
  208. gid: _this.goods_id,
  209. gn: _this.goods_detail.name,
  210. t: gettime
  211. }).then(res => {
  212. console.log(res)
  213. }).catch(err => {
  214. console.log(err)
  215. })
  216. },
  217. getWxCode() {
  218. let userInfo = uni.getStorageSync('userinfo') || {};
  219. this.$http(this.API.API_WXBILL, {
  220. scene: 'route=goods&pt=2&id='+this.goods_id+'&share_id='+userInfo.id,
  221. page: 'pages/route/index',
  222. width: '2800'
  223. }).then(res => {
  224. this.wxCode = res.data.base_url
  225. if (this.wxCode) {
  226. this.getwxCodeImg()
  227. }
  228. })
  229. },
  230. //海报开始
  231. //保存头像
  232. getwxCodeImg() {
  233. var imgSrc = this.wxCode; //base64编码
  234. var save = wx.getFileSystemManager();
  235. var number = Math.random();
  236. save.writeFile({
  237. filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.jpg',
  238. data: imgSrc,
  239. encoding: 'base64',
  240. success: res => {
  241. this.onceCode = wx.env.USER_DATA_PATH + '/pic' + number + '.jpg'
  242. console.log('二维码临时路径',this.onceCode)
  243. },
  244. fail: err => {
  245. console.log(err)
  246. }
  247. })
  248. },
  249. createNewImg() {
  250. var that = this;
  251. var context = wx.createCanvasContext('mycanvas');
  252. let goods = that.goods_detail;
  253. let title = goods.name;
  254. let price = '¥'+goods.specs[0].selling_price;
  255. //背景图
  256. // var path = that.backgroundImg;
  257. context.setFillStyle("#fff")
  258. context.fillRect(0, 0, 375, 600)
  259. let goodsBackground = that.goodShare
  260. // context.drawImage(path, 0, 0, 375, 667);
  261. context.drawImage(goodsBackground, 10, 10, 355, 300);
  262. //绘制二维码
  263. let wxcode = that.onceCode
  264. context.drawImage(wxcode, 238, 440, 120, 120);
  265. let message = '长按识别小程序码'
  266. context.setFontSize(16);
  267. context.setFillStyle('#999');
  268. context.setTextAlign('center');
  269. context.fillText(message,300,580);
  270. //绘制价格
  271. context.setFontSize(30);
  272. context.setFillStyle('#FF0000');
  273. context.setTextAlign('center');
  274. context.fillText(price,50, 450);
  275. console.log('长度',title.length)
  276. if(title.length < 18 ) {
  277. context.fillText(title, 10, 350);
  278. }else if(18<title.length && title.length<36) {
  279. console.log('1111')
  280. let before = title.substr(0,18)
  281. let last = title.substr(18,title.length)
  282. //绘制标题
  283. context.setFontSize(20);
  284. context.setFillStyle('#222');
  285. context.setTextAlign('left');
  286. context.fillText(before, 10, 350);
  287. context.fillText(last, 10, 374);
  288. }else if(title.length > 36) {
  289. console.log('22222')
  290. console.log(title.substr(18,41))
  291. let before = title.substr(0,18)
  292. let last = title.substr(18,28)
  293. let last1 = title.substr(36,title.length)
  294. //绘制标题
  295. context.setFontSize(20);
  296. context.setFillStyle('#222');
  297. context.setTextAlign('left');
  298. context.fillText(before, 10, 350);
  299. context.fillText(last, 10, 374);
  300. context.fillText(last1, 10, 398);
  301. }
  302. context.stroke();
  303. context.draw();
  304. //将生成好的图片保存到本地,需要延迟一会,绘制期间耗时
  305. setTimeout(function() {
  306. wx.canvasToTempFilePath({
  307. canvasId: 'mycanvas',
  308. success: function(res) {
  309. that.imagePath = res.tempFilePath;
  310. if (that.imagePath) {
  311. that.canvasHidden = true
  312. that.maskHidden = true
  313. }
  314. console.log('海报生成成功')
  315. console.log(res)
  316. console.log('图片链接', that.imagePath)
  317. },
  318. fail: function(res) {
  319. console.log(res);
  320. }
  321. });
  322. }, 200);
  323. },
  324. saveBill() {
  325. var that = this
  326. wx.saveImageToPhotosAlbum({
  327. filePath: that.imagePath,
  328. success(res) {
  329. wx.showModal({
  330. content: '图片已保存到相册,赶紧晒一下吧~',
  331. showCancel: false,
  332. confirmText: '好的',
  333. confirmColor: '#333',
  334. success: function(res) {
  335. if (res.confirm) {
  336. console.log('用户点击确定');
  337. that.maskHidden = false
  338. }
  339. },
  340. fail: function(res) {
  341. that.maskHidden = false
  342. }
  343. })
  344. }
  345. })
  346. },
  347. formSubmit() {
  348. var that = this;
  349. wx.showToast({
  350. title: '生成海报中...',
  351. icon: 'loading',
  352. duration: 1000
  353. });
  354. wx.hideToast()
  355. console.log(that.onceCode)
  356. console.log(that.backgroundImg)
  357. if(that.onceCode) {
  358. that.createNewImg()
  359. }else if(!that.onceCode){
  360. this.$msg('小程序码生成失败!')
  361. }
  362. // else if(!that.backgroundImg){
  363. // this.$msg('海报背景图生成失败!')
  364. // }
  365. },
  366. //海报结束
  367. getGoodsDetail() {
  368. let that = this;
  369. this.$http(this.API.API_GOODS_DETAIL, {
  370. goods_id: this.goods_id
  371. }).then(res => {
  372. this.skeletonLoading = false;
  373. this.goods_detail = res.data;
  374. if(this.goods_detail) {
  375. this.getGoodsBackground()
  376. if(this.pt == 2) {
  377. this.bindGoods()
  378. }
  379. }
  380. this.afterDone = this.formatRichText(this.goods_detail.content)
  381. this.is_collect = Boolean(res.data.user.is_collect);
  382. }).catch(err => {
  383. this.skeletonLoading = false;
  384. setTimeout(() => {
  385. that.$toBack();
  386. }, 1000);
  387. })
  388. },
  389. // 切换商品收藏
  390. switchCollect() {
  391. let userInfo = uni.getStorageSync('userinfo') || {};
  392. if (!userInfo.id || !userInfo.nickname || !userInfo.avatar) {
  393. this.$url('/pages/login/index?type=userinfo');
  394. return;
  395. }
  396. this.$http(this.API.API_COLLECT_DEAL, {
  397. goods_id: this.goods_id
  398. }).then(res => {
  399. this.$msg(res.msg);
  400. this.is_collect = Boolean(res.data.user.is_collect);
  401. })
  402. },
  403. // 拨打电话
  404. makePhoneCall(phoneStr) {
  405. uni.makePhoneCall({
  406. phoneNumber: String(phoneStr)
  407. })
  408. },
  409. // 打开地图
  410. openMap(){
  411. let { address, lat, lng } = this.goods_detail?.store || {};
  412. uni.openLocation({
  413. longitude: Number(lat),
  414. latitude: Number(lng),
  415. scale: 20,
  416. name: address
  417. });
  418. },
  419. // 跳转到确认下单页面
  420. toAddOrder() {
  421. let goods_id = this.goods_detail.id;
  422. let goods_specs_id = this.goods_detail.specs[0].id
  423. this.$url('/pages/order/confirm-order?goods_id=' + goods_id + '&goods_specs_id=' + goods_specs_id +'&pt='+ this.pt);
  424. },
  425. // 预览图片
  426. lookImg(index) {
  427. this.$u.throttle(() => {
  428. let goods_banner = this.goods_detail.banners || [];
  429. let banners = goods_banner.map(item => item.cover);
  430. uni.previewImage({
  431. urls: banners,
  432. current: index
  433. })
  434. }, 200);
  435. },
  436. // 富文本处理
  437. formatRichText(richText) {
  438. if (richText != null) {
  439. let newRichText = richText.replace(/<img[^>]*>/gi, function(match, capture) {
  440. match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
  441. match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
  442. match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
  443. return match;
  444. });
  445. newRichText = newRichText.replace(/style="[^"]+"/gi, function(match, capture) {
  446. match = match.replace(/width:[^;]+;/gi, 'width:100%;').replace(/width:[^;]+;/gi,
  447. 'width:100%;');
  448. return match;
  449. });
  450. newRichText = newRichText.replace(/<br[^>]*\/>/gi, '');
  451. newRichText = newRichText.replace(/\<img/gi,
  452. '<img style="width:100%;height:auto;display:block;margin:10px 0;"');
  453. return newRichText;
  454. } else {
  455. return null;
  456. }
  457. }
  458. },
  459. onShareAppMessage() {
  460. let goods = this.goods_detail;
  461. let title = goods.name;
  462. let imageUrl = goods.share_cover || goods.cover;
  463. let path = '/pages/route/index?route=goods_detail&id=' + goods.id;
  464. return {
  465. title,
  466. path,
  467. imageUrl
  468. }
  469. }
  470. }
  471. </script>
  472. <style>
  473. page {
  474. background-color: #f5f5f5;
  475. overflow-x: hidden;
  476. }
  477. </style>
  478. <style lang="scss" scoped="scoped">
  479. .bill-position {
  480. position: absolute;
  481. top: 0;
  482. right: 0;
  483. }
  484. .cu-btn1 {
  485. position: relative;
  486. display: inline-flex;
  487. align-items: center;
  488. justify-content: center;
  489. box-sizing: border-box;
  490. padding: 0 30rpx;
  491. font-size: 28rpx;
  492. height: 64rpx;
  493. line-height: 1;
  494. text-align: center;
  495. text-decoration: none;
  496. overflow: visible;
  497. margin-left: initial;
  498. transform: translate(0upx, 0upx);
  499. margin-right: initial;
  500. background-color: rgba(0, 0, 0, 0.5);
  501. color: #FFFFFF;
  502. border-radius: 33rpx;
  503. }
  504. .swiper-box {
  505. width: 750rpx;
  506. height: 520rpx;
  507. background-color: #FFFFFF;
  508. }
  509. .head-info {
  510. width: 750rpx;
  511. height: auto;
  512. box-sizing: border-box;
  513. padding: 0 32rpx;
  514. padding-top: 20rpx;
  515. background-color: #FFFFFF;
  516. // .price>view:nth-of-type(1){
  517. // color: #FF0000;
  518. // margin-right: 22rpx;
  519. // font-weight: bold;
  520. // }
  521. .price>view:nth-of-type(1) {
  522. text-decoration: line-through;
  523. color: #777777;
  524. margin-right: 22rpx;
  525. }
  526. .price>view:nth-of-type(2) {
  527. width: max-content;
  528. padding: 0 18rpx;
  529. height: 46rpx;
  530. background-color: #FE9903;
  531. border-radius: 10rpx;
  532. display: flex;
  533. justify-content: center;
  534. align-items: center;
  535. color: #FFFFFF;
  536. }
  537. .label-box {
  538. min-height: 130rpx;
  539. width: 100%;
  540. border-top: 1rpx solid #E5E5E5;
  541. display: flex;
  542. flex-wrap: wrap;
  543. padding: 30rpx 0 10rpx 0;
  544. .label-item {
  545. width: 156rpx;
  546. height: 70rpx;
  547. border-radius: 10rpx;
  548. border: 2rpx solid #FE9903;
  549. display: flex;
  550. justify-content: center;
  551. align-items: center;
  552. font-size: 28rpx;
  553. color: #FE9903;
  554. margin-right: 20rpx;
  555. margin-bottom: 20rpx;
  556. }
  557. }
  558. }
  559. .address-box {
  560. width: 750rpx;
  561. height: auto;
  562. box-sizing: border-box;
  563. background-color: #FFFFFF;
  564. padding: 32rpx;
  565. margin-top: 20rpx;
  566. .shop-img {
  567. width: 60rpx;
  568. height: 60rpx;
  569. border-radius: 50%;
  570. }
  571. }
  572. .goods-detail {
  573. width: 750rpx;
  574. height: auto;
  575. background-color: #FFFFFF;
  576. padding: 32rpx;
  577. box-sizing: border-box;
  578. margin-top: 20rpx;
  579. .goods-img {
  580. width: 100%;
  581. }
  582. }
  583. .extra {
  584. width: 100%;
  585. height: 120rpx;
  586. padding-bottom: constant(safe-area-inset-bottom);
  587. padding-bottom: env(safe-area-inset-bottom);
  588. box-sizing: content-box;
  589. }
  590. .fixed-bottom {
  591. position: fixed;
  592. bottom: 0;
  593. left: 0;
  594. background-color: #FFFFFF;
  595. width: 100%;
  596. height: auto;
  597. padding: 0 32rpx;
  598. border-top: 1rpx solid #e5e5e5;
  599. padding-bottom: constant(safe-area-inset-bottom);
  600. padding-bottom: env(safe-area-inset-bottom);
  601. .icon-item {
  602. margin-right: 16rpx;
  603. background-color: transparent;
  604. margin: 0;
  605. line-height: initial;
  606. font-size: 28rpx;
  607. font-weight: inherit;
  608. margin-right: 10rpx;
  609. padding: 0;
  610. width: 88rpx;
  611. &:first-child {
  612. padding-left: 0;
  613. }
  614. .icon-img {
  615. height: 50rpx;
  616. width: 50rpx;
  617. }
  618. }
  619. .btn {
  620. margin: 0;
  621. padding: 0;
  622. width: 208rpx;
  623. height: 80rpx;
  624. background-color: #FE9903;
  625. color: #FFFFFF;
  626. line-height: 80rpx;
  627. font-size: 32rpx;
  628. border-radius: 42rpx;
  629. }
  630. }
  631. //海报
  632. .bgImg {
  633. display: block;
  634. width: 100%;
  635. height: 366rpx;
  636. }
  637. .mine {
  638. display: block;
  639. text-align: center;
  640. color: #333;
  641. margin-top: 44rpx;
  642. }
  643. .code {
  644. display: block;
  645. text-align: center;
  646. color: #333;
  647. font-size: 76rpx;
  648. font-weight: bold;
  649. margin-top: 30rpx;
  650. }
  651. .who {
  652. display: block;
  653. margin-top: 80rpx;
  654. font-size: 32rpx;
  655. color: #333;
  656. text-align: center;
  657. }
  658. .inputBox {
  659. text-align: center;
  660. margin-top: 44rpx;
  661. }
  662. .input {
  663. text-align: center;
  664. width: 440rpx;
  665. height: 88rpx;
  666. border-radius: 44rpx;
  667. background: #f5f5f5;
  668. font-size: 32rpx;
  669. display: inline-block;
  670. }
  671. .btn {
  672. width: 160rpx;
  673. height: 88rpx;
  674. border-radius: 44rpx;
  675. background: rgba(254, 153, 3, 1);
  676. color: #333;
  677. font-size: 32rpx;
  678. display: inline-block;
  679. line-height: 88rpx;
  680. margin-left: 40rpx;
  681. }
  682. button[class="btn"]::after {
  683. border: 0;
  684. }
  685. .tishi {
  686. display: block;
  687. text-align: center;
  688. color: #999;
  689. margin-top: 30rpx;
  690. }
  691. .shareText {
  692. display: block;
  693. text-align: center;
  694. color: #333;
  695. font-size: 28rpx;
  696. margin-top: 100rpx;
  697. }
  698. .imgBox {
  699. text-align: center;
  700. width: 100%;
  701. margin-top: 60rpx;
  702. padding-bottom: 120rpx;
  703. }
  704. .img {
  705. display: inline-block;
  706. width: 100%;
  707. height: 100%;
  708. }
  709. .m_l {
  710. margin-left: 180rpx;
  711. }
  712. .zfbtn {
  713. display: inline-block;
  714. width: 120rpx;
  715. height: 120rpx;
  716. border-radius: 50%;
  717. background: transparent;
  718. outline: none;
  719. border: 0;
  720. padding: 0;
  721. }
  722. button[class="zfbtn"]::after {
  723. border: 0;
  724. }
  725. button[class="zfbtn m_l"]::after {
  726. border: 0;
  727. }
  728. .imagePathBox {
  729. width: 100%;
  730. height: 100%;
  731. background: rgba(0, 0, 0, 0.7);
  732. position: fixed;
  733. top: 0;
  734. left: 0;
  735. right: 0;
  736. bottom: 0;
  737. z-index: 10;
  738. }
  739. .shengcheng {
  740. width: 80%;
  741. height: 80%;
  742. position: fixed;
  743. top: 50rpx;
  744. left: 50%;
  745. margin-left: -40%;
  746. z-index: 10;
  747. }
  748. .baocun {
  749. display: block;
  750. width: 80%;
  751. height: 80rpx;
  752. padding: 0;
  753. line-height: 80rpx;
  754. text-align: center;
  755. position: fixed;
  756. bottom: 50rpx;
  757. left: 10%;
  758. background: rgba(254, 153, 3, 1);
  759. color: #fff;
  760. font-size: 32rpx;
  761. border-radius: 44rpx;
  762. }
  763. button[class="baocun"]::after {
  764. border: 0;
  765. }
  766. </style>