index.vue 22 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087
  1. <template>
  2. <view class="container">
  3. <view class="carousel-section">
  4. <!-- 背景色区域 -->
  5. <view class="bg"></view>
  6. <!-- 标题栏和状态栏占位符 -->
  7. <view class="titleNview-placing"></view>
  8. <!-- 搜素栏 -->
  9. <view class="search flex">
  10. <view class="input-box flex" @click.stop="clickSearch">
  11. <view class=" input-content flex">
  12. <view class="iconfont iconsearch"></view>
  13. <view class="input"><input type="text" disabled value="输入关键字搜索" /></view>
  14. </view>
  15. </view>
  16. </view>
  17. <swiper class="carousel" autoplay="true" duration="400" interval="5000" @change="swiperChange"
  18. :indicator-dots="true" indicator-active-color="#FFFFFF">
  19. <!-- <swiper class="carousel" autoplay="true" duration="400" interval="5000"> -->
  20. <swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item">
  21. <image :src="item.pic" mode="aspectFill" @click="bannerNavToUrl(item)"></image>
  22. </swiper-item>
  23. </swiper>
  24. </view>
  25. <view class="navbar">
  26. <view class="navbar-box flex">
  27. <view class="navbar-item" @click="navTo('/pages/product/list')">
  28. <image class="nitem-image" src="../../static/sy/sy12.png" mode=""></image>
  29. <view class="nitem-font">全部分类</view>
  30. </view>
  31. <view class="navbar-item" @click="navTo('/pages/index/vipShop')">
  32. <image class="nitem-image" src="../../static/sy/sy14.png" mode=""></image>
  33. <view class="nitem-font">超值拼团</view>
  34. </view>
  35. <view class="navbar-item" @click="navTo('')">
  36. <image class="nitem-image" src="../../static/sy/sy15.png" mode=""></image>
  37. <view class="nitem-font">公司介绍</view>
  38. </view>
  39. <view class="navbar-item" @click="navTo('/pages/user/shareQrCode')">
  40. <image class="nitem-image" src="../../static/sy/sy13.png" mode=""></image>
  41. <view class="nitem-font">邀请有礼</view>
  42. </view>
  43. </view>
  44. </view>
  45. <seckill></seckill>
  46. <view class=" jx">
  47. <view class="jx-box">
  48. <view class="jx-box-title">
  49. <image src="../../static/sy/sy03.png" mode=""></image>
  50. </view>
  51. <view class="jx-box-img">
  52. <image src="../../static/sy/sy09.png" mode=""></image>
  53. </view>
  54. </view>
  55. <view class="jx-box-content" v-for="item in vipList" @click="navToDetailPage(item)">
  56. <view class="content-left">
  57. <image :src=item.image mode=""></image>
  58. </view>
  59. <view class="content-right">
  60. <view class="shop-name">
  61. {{item.store_name}}
  62. </view>
  63. <view class="shop-content">
  64. <view class="shop-content-left">
  65. <view class="price-box">
  66. <view class="yuan-price">
  67. ¥{{item.ot_price}}
  68. </view>
  69. <image src="../../static/sy/sy06.png" mode=""></image>
  70. <view class="j-price">
  71. 直降{{item.ot_price*1-item.price*1}}元
  72. </view>
  73. </view>
  74. <view class="price-x">
  75. ¥{{item.price}}
  76. </view>
  77. </view>
  78. <view class="shop-content-right">
  79. 立即购买
  80. </view>
  81. </view>
  82. </view>
  83. </view>
  84. <view class="cai" @click="navTo('/pages/index/vipShop')">
  85. 查看更多<span style ="margin-left: 5rpx;">></span>
  86. </view>
  87. </view>
  88. <view class="product-box">
  89. <view class="product-title">
  90. <view class="bb">
  91. </view>
  92. <view class="pt-title">猜你喜欢</view>
  93. <view class="bb">
  94. </view>
  95. </view>
  96. <view class="hotgoods">
  97. <view class="hotgoods-item" v-for="item in firstList" :key="item.id" @click="navToDetailPage(item)">
  98. <view class="image-wrapper">
  99. <image class="image" :src="item.image" mode="scaleToFill"></image>
  100. </view>
  101. <view class="hotgoods-box">
  102. <view class="title clamp2">{{ item.store_name }}</view>
  103. <view class="titlee">{{ item.store_name }}</view>
  104. </view>
  105. <view class="hot-price">
  106. <!-- <view class="hotPrice-box">会员价</view> -->
  107. <view class="price">
  108. <text class="font-size-sm">¥</text>
  109. {{ item.price * 1 }}
  110. </view>
  111. <view class="yuanPrice">¥{{ item.price }}</view>
  112. </view>
  113. </view>
  114. </view>
  115. </view>
  116. <!-- <u-tabbar activeColor="#434A54" v-model="current" :list="tabbar" :mid-button="true"></u-tabbar> -->
  117. </view>
  118. </template>
  119. <script>
  120. import {
  121. lookSubpoints,
  122. lookOneself
  123. } from '../../api/user.js';
  124. import seckill from '../../components/seckill/seckill.vue';
  125. import {
  126. loadIndexs,
  127. getVip
  128. } from '@/api/index.js';
  129. import {
  130. getUserInfo,
  131. spread
  132. } from '@/api/user.js';
  133. import {
  134. setCoupons
  135. } from '@/api/functionalUnit.js';
  136. import {
  137. getBargainList
  138. } from '@/api/product.js';
  139. import {
  140. interceptor
  141. } from '@/utils/loginUtils';
  142. import {
  143. mapState,
  144. mapMutations
  145. } from 'vuex';
  146. import {
  147. tabbar
  148. } from '@/utils/tabbar.js';
  149. // #ifdef H5
  150. import {
  151. weixindata,
  152. shareLoad
  153. } from '@/utils/wxAuthorized';
  154. // #endif
  155. export default {
  156. components: {
  157. seckill
  158. },
  159. data() {
  160. return {
  161. tabbar: tabbar,
  162. current: 0,
  163. shareShow: false, //分享海报
  164. pageProportion: 0, //保存页面基于750宽度的比例
  165. swiperHeight: 0,
  166. checkid: 0,
  167. titleNViewBackground: '',
  168. longitude: 0, //经度
  169. latitude: 0, //纬度
  170. swiperCurrent: 0,
  171. swiperLength: 0,
  172. carouselList: [], //轮播列表
  173. bastList: [], //会员礼包
  174. shoplist: [], //商店列表
  175. page: 1,
  176. limit: 5,
  177. vipList: [], //vip商品
  178. firstList: [],
  179. };
  180. },
  181. computed: {
  182. ...mapState(['loginInterceptor', 'baseURL']),
  183. ...mapState('user', ['hasLogin', 'userInfo'])
  184. },
  185. onLoad: function(option) {
  186. this.getaddress();
  187. // #ifdef MP
  188. if (option.scene) {
  189. // 存储小程序邀请人
  190. uni.setStorage({
  191. key: 'spread_code',
  192. data: option.scene
  193. });
  194. }
  195. // #endif
  196. // #ifdef H5
  197. this.IndexShare();
  198. //#endif
  199. },
  200. onShow: function() {
  201. getVip({
  202. page: 1,
  203. limit: 3,
  204. is_vip: 3
  205. }).then(res => {
  206. this.vipList = res.data
  207. res.data.forEach(e => {
  208. e.isVip = e.store_type ? "3" : "0"
  209. })
  210. console.log(res.data, 'vip商品');
  211. })
  212. // 判断是否强制登录
  213. if (!this.hasLogin) {
  214. // 登录拦截
  215. interceptor();
  216. }
  217. this.loadData();
  218. this.getBargainList();
  219. },
  220. //下拉刷新
  221. onPullDownRefresh() {
  222. this.loadData();
  223. },
  224. // #ifndef MP
  225. // 监听导航栏输入框点击事件
  226. onNavigationBarSearchInputClicked(e) {
  227. //跳转到搜索页面
  228. this.clickSearch();
  229. },
  230. //点击导航栏 buttons 时触发
  231. onNavigationBarButtonTap(e) {
  232. const index = e.index;
  233. if (index === 0) {
  234. this.$api.msg('点击了扫描');
  235. } else if (index === 1) {
  236. // #ifdef APP-PLUS
  237. const pages = getCurrentPages();
  238. const page = pages[pages.length - 1];
  239. const currentWebview = page.$getAppWebview();
  240. currentWebview.hideTitleNViewButtonRedDot({
  241. index
  242. });
  243. // #endif
  244. uni.navigateTo({
  245. url: '/pages/user/notice'
  246. });
  247. }
  248. },
  249. // #endif
  250. methods: {
  251. ...mapMutations(['setLat', 'setLon']),
  252. // #ifdef H5
  253. IndexShare() {
  254. let obj = this;
  255. let pages = getCurrentPages();
  256. // 获取当前页面
  257. let page = pages[pages.length - 1];
  258. let path = '#/' + page.route + '?';
  259. // 保存传值
  260. for (let i in page.options) {
  261. path += i + '=' + page.options[i] + '&';
  262. }
  263. console.log(obj.Path);
  264. // 保存邀请人
  265. path += 'spread=' + this.userInfo.uid;
  266. let data = {
  267. link: this.baseURL + '/index/' + path,
  268. title: this.userInfo.nickname + '邀请您进入玲卿+',
  269. desc: '欢迎加入玲卿+',
  270. imgUrl: 'https://xl.liuniu946.com/index/static/img/logo.jpg'
  271. };
  272. console.log(data, '分享数据');
  273. shareLoad(data);
  274. },
  275. // #endif
  276. getaddress() {
  277. console.log('dizhi+++++++++++');
  278. let obj = this;
  279. // uni.getLocation({
  280. // type: 'gcj02',
  281. // success: res => {
  282. // console.log(res, 123456);
  283. // obj.setLat(res.latitude);
  284. // obj.setLon(res.longitude);
  285. // },
  286. // fail: err => {
  287. // console.log(err, 'shi+++++++++++++++');
  288. // openMap().then(e => {
  289. // this.getaddress();
  290. // });
  291. // }
  292. // });
  293. weixindata().then(wxOjb => {
  294. console.log(wxOjb, '获取微信');
  295. wxOjb.getLocation({
  296. type: 'gcj02',
  297. success: res => {
  298. console.log(res, 123456);
  299. obj.setLat(res.latitude);
  300. obj.setLon(res.longitude);
  301. },
  302. fail: err => {
  303. console.log(err, 'shi+++++++++++++++');
  304. openMap().then(e => {
  305. this.getaddress();
  306. });
  307. }
  308. });
  309. });
  310. },
  311. //砍价商品推荐详情页
  312. navToDetailPages(item) {
  313. let id = item.product_id;
  314. //let type = 2;
  315. uni.navigateTo({
  316. url: '/pages/product/product?id=' + id
  317. });
  318. },
  319. navTo(url) {
  320. if (url == '') {
  321. this.$api.msg('暂未开通,敬请期待');
  322. } else {
  323. uni.navigateTo({
  324. url
  325. });
  326. }
  327. },
  328. openSubscribe: function(e) {
  329. let page = e;
  330. // #ifndef MP
  331. uni.navigateTo({
  332. url: page
  333. });
  334. // #endif
  335. // #ifdef MP
  336. uni.showLoading({
  337. title: '正在加载'
  338. });
  339. openBargainSubscribe()
  340. .then(res => {
  341. uni.hideLoading();
  342. uni.navigateTo({
  343. url: page
  344. });
  345. })
  346. .catch(err => {
  347. uni.hideLoading();
  348. });
  349. // #endif
  350. },
  351. getBargainList() {
  352. let that = this;
  353. getBargainList({
  354. page: that.page,
  355. limit: that.limit
  356. })
  357. .then(function(res) {
  358. // that.$set(that, 'bargainlist', res.data.slice(0, 2));
  359. })
  360. .catch(res => {
  361. console.log(res, 'getBargainList');
  362. });
  363. },
  364. Mask() {
  365. this.MaskShow = false;
  366. this.shareShow = true;
  367. uni.setStorage({
  368. key: 'FirstEntry',
  369. data: true,
  370. success: function() {
  371. console.log(uni.getStorageSync('FirstEntry'), 'Mask');
  372. }
  373. });
  374. },
  375. Toshare() {
  376. if (this.userInfo == '') {
  377. getUserInfo({})
  378. .then(({
  379. data
  380. }) => {
  381. this.setUserInfo(data);
  382. this.userInfo = data;
  383. })
  384. .catch(e => {});
  385. } else {
  386. this.shareShow = false;
  387. uni.navigateTo({
  388. url: '/pages/user/shareQrCode?spread=' + this.userInfo.uid
  389. });
  390. }
  391. },
  392. Tocancel() {
  393. this.shareShow = false;
  394. },
  395. // 监听切换事件
  396. listChange(e) {
  397. this.checkid = e.detail.current;
  398. },
  399. // 點擊搜索框
  400. clickSearch() {
  401. uni.navigateTo({
  402. url: '/pages/product/search'
  403. });
  404. },
  405. // 点击触发领取优惠券
  406. setCoupons(item) {
  407. // 判断是否已经领取了优惠券
  408. let obj = this;
  409. uni.showModal({
  410. title: '领取提示',
  411. content: '是否领取优惠券',
  412. success(e) {
  413. if (e.confirm) {
  414. setCoupons({
  415. couponId: item.id
  416. }).then(e => {
  417. item.is_use = true;
  418. uni.showToast({
  419. title: '领取成功',
  420. type: 'top',
  421. duration: 2000
  422. });
  423. });
  424. }
  425. }
  426. });
  427. },
  428. //商品种类切换
  429. change(item) {
  430. let id = item;
  431. this.checkid = id;
  432. if (this.checkid == 1) {
  433. // console.log(1);
  434. this.detail = this.selected_detail;
  435. } else if (this.checkid == 2) {
  436. // console.log(2);
  437. this.detail = this.new_product;
  438. } else {
  439. this.detail = this.cheap_good;
  440. }
  441. },
  442. // 监听图片加载完成
  443. onImageError(key, index) {
  444. this[key][index].image = '/static/error/errorImage.jpg';
  445. },
  446. // 请求载入数据
  447. async loadData() {
  448. loadIndexs({})
  449. .then(({
  450. data
  451. }) => {
  452. let goods = data.info;
  453. console.log(goods, '商品信息');
  454. this.carouselList = data.banner;
  455. this.swiperLength = this.carouselList.length;
  456. this.bastList = data.giftInfo; //会员礼包
  457. data.info.firstList.forEach(e => {
  458. e.isVip = e.store_type ? "3" : "0"
  459. })
  460. this.firstList = data.info.firstList //首页商品
  461. uni.stopPullDownRefresh();
  462. })
  463. .catch(e => {
  464. uni.stopPullDownRefresh();
  465. });
  466. },
  467. //轮播图切换修改背景色
  468. swiperChange(e) {
  469. const index = e.detail.current;
  470. this.swiperCurrent = index;
  471. this.titleNViewBackground = this.carouselList[index].background;
  472. },
  473. //详情页
  474. navToDetailPage(item) {
  475. let id = item.id;
  476. uni.navigateTo({
  477. url: '/pages/product/product?id=' + id + '&isVip=' + item.isVip
  478. });
  479. },
  480. // 轮播图跳转
  481. bannerNavToUrl(item) {
  482. // #ifdef H5
  483. console.log(item.wap_url.indexOf('http'), 'banner');
  484. if (item.wap_url.indexOf('http') >= 0) {
  485. window.location.href = item.wap_url;
  486. }
  487. // #endif
  488. //测试数据没有写id,用title代替
  489. uni.navigateTo({
  490. url: item.wap_url
  491. });
  492. }
  493. }
  494. };
  495. </script>
  496. <style lang="scss">
  497. page {
  498. background: #EEEFEE;
  499. }
  500. .carousel-section {
  501. position: relative;
  502. padding-top: 10px;
  503. .bg {
  504. position: absolute;
  505. top: 0;
  506. left: 0;
  507. width: 750rpx;
  508. height: 378rpx;
  509. image {
  510. width: 100%;
  511. height: 100%;
  512. }
  513. }
  514. .titleNview-placing {
  515. height: var(--status-bar-height);
  516. box-sizing: content-box;
  517. }
  518. .search {
  519. justify-content: flex-start;
  520. padding: 10rpx 32rpx 20rpx;
  521. align-items: center;
  522. .address {
  523. width: 32rpx;
  524. height: 38rpx;
  525. }
  526. .shop-name {
  527. height: 38rpx;
  528. position: relative;
  529. top: -4rpx;
  530. z-index: 100;
  531. font-size: 30rpx;
  532. font-family: PingFang SC;
  533. font-weight: 500;
  534. padding-left: 10rpx;
  535. }
  536. .shop-jt {
  537. margin-left: 8rpx;
  538. width: 16rpx;
  539. height: 10rpx;
  540. }
  541. .input-box {
  542. margin-left: 10rpx;
  543. position: relative;
  544. z-index: 99;
  545. width: 710rpx;
  546. height: 60rpx;
  547. background: #EEEEEE;
  548. border-radius: 30rpx;
  549. .input-content {
  550. position: relative;
  551. z-index: 11;
  552. border-radius: 99rpx;
  553. flex-grow: 1;
  554. padding: 5rpx 30rpx;
  555. background: #EEEEEE;
  556. .iconsearch {
  557. font-size: 50rpx;
  558. color: #CBCBCB;
  559. }
  560. .input {
  561. margin-left: 19rpx;
  562. flex-grow: 1;
  563. color: #CBCBCB;
  564. input {
  565. font-size: 28rpx;
  566. color: #CBCBCB;
  567. }
  568. }
  569. }
  570. .input-button {
  571. padding-left: 20rpx;
  572. font-size: $font-base;
  573. height: 100%;
  574. }
  575. }
  576. }
  577. }
  578. .carousel {
  579. position: relative;
  580. z-index: 3;
  581. width: 100%;
  582. height: 360rpx;
  583. .carousel-item {
  584. width: 100%;
  585. height: 100%;
  586. padding: 0 28rpx;
  587. overflow: hidden;
  588. }
  589. image {
  590. width: 100%;
  591. height: 100%;
  592. border-radius: $border-radius-sm;
  593. }
  594. }
  595. .navbar {
  596. position: relative;
  597. z-index: 2;
  598. padding: 0 50rpx;
  599. margin-top: -200rpx;
  600. width: 750rpx;
  601. height: 420rpx;
  602. background: #ffffff;
  603. border-radius: 40rpx;
  604. .navbar-box {
  605. padding-top: 250rpx;
  606. .navbar-item {
  607. display: flex;
  608. flex-direction: column;
  609. align-items: center;
  610. width: 20%;
  611. .nitem-image {
  612. width: 90rpx;
  613. height: 90rpx;
  614. }
  615. .nitem-font {
  616. margin-top: 22rpx;
  617. font-size: 26rpx;
  618. font-family: PingFang SC;
  619. font-weight: 500;
  620. color: #000000;
  621. }
  622. }
  623. }
  624. }
  625. .jx {
  626. background: #fff;
  627. width: 750rpx;
  628. }
  629. .jx-box {
  630. background: #fff;
  631. display: flex;
  632. flex-direction: column;
  633. align-items: center;
  634. width: 750rpx;
  635. .jx-box-title {
  636. margin: 50rpx 0;
  637. width: 610rpx;
  638. height: 30rpx;
  639. image {
  640. width: 100%;
  641. height: 100%;
  642. }
  643. }
  644. .jx-box-img {
  645. width: 750rpx;
  646. height: 220rpx;
  647. image {
  648. width: 100%;
  649. height: 100%;
  650. }
  651. }
  652. }
  653. .cai {
  654. display: flex;
  655. justify-content: center;
  656. align-items: center;
  657. padding-bottom: 20rpx;
  658. font-size: 28rpx;
  659. font-weight: 500;
  660. color: #999999;
  661. }
  662. .jx-box-content {
  663. display: flex;
  664. .content-left {
  665. margin: 20rpx 15rpx;
  666. width: 236rpx;
  667. height: 236rpx;
  668. background: #E2E2E2;
  669. border-radius: 10rpx;
  670. image {
  671. width: 100%;
  672. height: 100%;
  673. }
  674. }
  675. .content-right {
  676. display: flex;
  677. flex-direction: column;
  678. justify-content: space-around;
  679. .shop-name {
  680. width: 382rpx;
  681. font-size: 32rpx;
  682. font-weight: bold;
  683. color: #333333;
  684. overflow: hidden;
  685. text-overflow: ellipsis;
  686. display: -webkit-box;
  687. -webkit-box-orient: vertical;
  688. -webkit-line-clamp: 2;
  689. }
  690. .shop-content {
  691. width: 455rpx;
  692. display: flex;
  693. justify-content: space-between;
  694. .shop-content-left {
  695. display: flex;
  696. flex-direction: column;
  697. .price-box {
  698. display: flex;
  699. align-items: center;
  700. .yuan-price {
  701. font-size: 26rpx;
  702. font-weight: 500;
  703. text-decoration: line-through;
  704. color: #999999;
  705. }
  706. image {
  707. margin: 0 10rpx;
  708. width: 16rpx;
  709. height: 18rpx;
  710. }
  711. .j-price {
  712. font-size: 24rpx;
  713. font-weight: bold;
  714. color: #B59467;
  715. }
  716. }
  717. .price-x {
  718. font-size: 36rpx;
  719. font-weight: bold;
  720. color: #FF4C4C;
  721. }
  722. }
  723. .shop-content-right {
  724. margin-top: 20rpx;
  725. align-items: center;
  726. text-align: center;
  727. width: 137rpx;
  728. height: 52rpx;
  729. font-size: 26rpx;
  730. font-weight: 500;
  731. color: #F8DABA;
  732. background: #303030;
  733. border-radius: 26rpx;
  734. line-height: 52rpx;
  735. }
  736. }
  737. }
  738. }
  739. .product-box {
  740. margin-top: 20rpx;
  741. background: #ffffff;
  742. padding: 26rpx 30rpx 20rpx;
  743. .product-title {
  744. display: flex;
  745. align-items: center;
  746. justify-content: center;
  747. .pt-image {
  748. width: 36rpx;
  749. height: 36rpx;
  750. }
  751. .bb {
  752. width: 120rpx;
  753. height: 1rpx;
  754. background: #989898;
  755. }
  756. .pt-title {
  757. margin: 0 28rpx;
  758. font-size: 30rpx;
  759. font-weight: 500;
  760. color: #363636;
  761. }
  762. .pt-tip {
  763. margin-left: 16rpx;
  764. font-size: 20rpx;
  765. font-family: PingFang SC;
  766. font-weight: bold;
  767. color: #95a0b1;
  768. }
  769. }
  770. .hotgoods {
  771. margin-top: 38rpx;
  772. width: 100%;
  773. display: flex;
  774. flex-wrap: wrap;
  775. padding: 0 0 30rpx;
  776. .hotgoods-item {
  777. width: 44%;
  778. background: #FFFFFF;
  779. margin: 20rpx;
  780. box-shadow: 0px 0px 20px 0px rgba(50, 50, 52, 0.06);
  781. border-radius: 10px;
  782. .image-wrapper {
  783. width: 100%;
  784. height: 330rpx;
  785. border-radius: 3px;
  786. overflow: hidden;
  787. position: relative;
  788. .image-bg {
  789. position: absolute;
  790. top: 0;
  791. left: 0;
  792. right: 0;
  793. bottom: 0;
  794. width: 100%;
  795. height: 100%;
  796. opacity: 1;
  797. border-radius: 12rpx 12rpx 0 0;
  798. z-index: 2;
  799. }
  800. .image {
  801. width: 100%;
  802. height: 100%;
  803. opacity: 1;
  804. border-radius: 12rpx 12rpx 0 0;
  805. }
  806. }
  807. .title {
  808. margin-top: 20rpx;
  809. font-size: 28rpx;
  810. font-family: PingFang SC;
  811. font-weight: 500;
  812. color: #333333;
  813. }
  814. .hotgoods-box {
  815. height: 100rpx;
  816. }
  817. .titlee {
  818. margin-left: 15rpx;
  819. font-size: 26rpx;
  820. font-weight: 500;
  821. color: #666666;
  822. white-space: nowrap;
  823. overflow: hidden;
  824. text-overflow: ellipsis;
  825. }
  826. .hot-price {
  827. display: flex;
  828. justify-content: flex-start;
  829. align-items: center;
  830. padding: 14rpx 0 30rpx;
  831. .hotPrice-box {
  832. width: 70rpx;
  833. height: 28rpx;
  834. background: linear-gradient(90deg, #c79a4c, #f9df7f);
  835. border-radius: 5rpx;
  836. text-align: center;
  837. line-height: 28rpx;
  838. font-size: 20rpx;
  839. font-weight: 400;
  840. color: #ffffff;
  841. }
  842. .price {
  843. margin-left: 10rpx;
  844. font-size: 36rpx;
  845. color: #ff0000;
  846. font-weight: 500;
  847. }
  848. .yuanPrice {
  849. margin-left: 10rpx;
  850. font-size: 20rpx;
  851. font-family: PingFang SC;
  852. font-weight: 500;
  853. text-decoration: line-through;
  854. color: #999999;
  855. }
  856. .cart-icon {
  857. image {
  858. width: 44rpx;
  859. height: 44rpx;
  860. }
  861. }
  862. }
  863. }
  864. }
  865. }
  866. .shop {
  867. margin-top: 20rpx;
  868. background: #ffffff;
  869. padding: 0 12rpx;
  870. .shop-title {
  871. padding: 30rpx 0 20rpx;
  872. display: flex;
  873. align-items: center;
  874. border-bottom: 1px solid #e3e6e7;
  875. .shop-item {
  876. width: 25%;
  877. display: flex;
  878. align-items: center;
  879. justify-content: center;
  880. .sitem-font {
  881. font-size: 26rpx;
  882. font-family: PingFang SC;
  883. font-weight: bold;
  884. color: #333333;
  885. }
  886. .jt-down {
  887. width: 10rpx;
  888. height: 8rpx;
  889. margin-left: 12rpx;
  890. }
  891. }
  892. }
  893. }
  894. .shop-main {
  895. padding: 32rpx 18rpx 0 12rpx;
  896. align-items: flex-start;
  897. justify-content: flex-start;
  898. .main-left {
  899. width: 180rpx;
  900. height: 180rpx;
  901. border-radius: 10rpx;
  902. }
  903. .main-right {
  904. width: 500rpx;
  905. justify-content: space-between;
  906. align-items: flex-start;
  907. margin-left: 20rpx;
  908. padding: 13rpx 0 35rpx;
  909. border-bottom: 1px solid #eaeced;
  910. .shopm-info {
  911. max-width: 60%;
  912. line-height: 1;
  913. .shopm-title {
  914. display: flex;
  915. justify-content: flex-start;
  916. .shopmt-font {
  917. font-size: 34rpx;
  918. font-family: PingFang SC;
  919. font-weight: bold;
  920. color: #333333;
  921. }
  922. .shopmt-good {
  923. margin-left: 6rpx;
  924. width: 30rpx;
  925. height: 30rpx;
  926. border: 1px solid #ff4c4c;
  927. border-radius: 5rpx;
  928. font-size: 20rpx;
  929. font-family: PingFang SC;
  930. font-weight: 500;
  931. color: #ff4c4c;
  932. text-align: center;
  933. line-height: 30rpx;
  934. }
  935. }
  936. .address {
  937. margin-top: 16rpx;
  938. font-size: 24rpx;
  939. font-family: PingFang SC;
  940. font-weight: 500;
  941. color: #666666;
  942. }
  943. .shopmt-tip {
  944. position: relative;
  945. display: inline-block;
  946. flex-grow: 0;
  947. margin-top: 52rpx;
  948. padding: 8rpx;
  949. background: #fcf3f0;
  950. border-radius: 16rpx 16rpx 16rpx 0px;
  951. font-size: 20rpx;
  952. font-family: PingFang SC;
  953. font-weight: 500;
  954. color: #ff440d;
  955. }
  956. }
  957. .right {
  958. height: 100%;
  959. margin-top: 5rpx;
  960. display: flex;
  961. flex-direction: column;
  962. .mright-top {
  963. display: flex;
  964. justify-content: flex-end;
  965. align-items: center;
  966. .mrt-image {
  967. width: 20rpx;
  968. height: 28rpx;
  969. }
  970. .mrt-font {
  971. margin-left: 8rpx;
  972. font-size: 22rpx;
  973. font-family: PingFang SC;
  974. font-weight: 500;
  975. color: #666666;
  976. }
  977. }
  978. .mright-bottom {
  979. margin-top: 80rpx;
  980. display: flex;
  981. justify-content: flex-end;
  982. .mrb-item {
  983. width: 46rpx;
  984. height: 46rpx;
  985. margin-left: 14rpx;
  986. }
  987. }
  988. }
  989. }
  990. }
  991. </style>