index.nvue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092
  1. <template>
  2. <view class="app">
  3. <view class="app-top">
  4. <view class="atop1">
  5. <view class="top2-bg">
  6. <view class="top3-bg">
  7. </view>
  8. </view>
  9. </view>
  10. <view class="atop2"></view>
  11. </view>
  12. <view class=" mtop">
  13. <view class="top-body">
  14. <view class="statusBar" :style="'height:' + statusBarHeight + 'px'"></view>
  15. <view class="panel">
  16. <view class="inputIndex">
  17. <navigator url="../goods/list">
  18. <view class="inputText">
  19. <text class="text">请输入关键词搜索</text>
  20. </view>
  21. </navigator>
  22. </view>
  23. <image src="/static/img/ic_information.png" class="information"></image>
  24. </view>
  25. </view>
  26. </view>
  27. <view class="app-body">
  28. <uv-swiper height='300rpx' class="swiper-img" :list="topData.banner" radius='20rpx' keyName="img" indicatorActiveColor="#DB292B" indicatorInactiveColor="#B7B7B7" img-mode="scaleToFill"></uv-swiper>
  29. <view class="grid-bg">
  30. <!--九宫格-->
  31. <view class="grid gridItem" v-if="sysData.is_audit == 0">
  32. <view class="item" @tap="tapOpen2" data-url="/pages/user/order/index">
  33. <image class="icon" mode="aspectFill" src="/static/ad/1.png"></image>
  34. <text class="label">提货订单</text>
  35. </view>
  36. <view class="item" @tap="$refs.customer.open()">
  37. <image class="icon" mode="aspectFill" src="/static/ad/2.png"></image>
  38. <text class="label">联系客服</text>
  39. </view>
  40. <view class="item" @tap="tapOpen" data-url="/pages/merchant/list">
  41. <image class="icon" mode="aspectFill" src="/static/ad/3.png"></image>
  42. <text class="label">附近门店</text>
  43. </view>
  44. <view class="item" @tap="tapOpen2" data-url="/pages/guild/order/order">
  45. <image class="icon" mode="aspectFill" src="/static/ad/4.png"></image>
  46. <text class="label">抢购订单</text>
  47. </view>
  48. <view v-if="showData" class="item" @tap="tapOpen" data-url="/pages/news/about">
  49. <image class="icon" mode="aspectFill" src="/static/ad/5.png"></image>
  50. <text class="label">关于我们</text>
  51. </view>
  52. </view>
  53. <!--消息通知-->
  54. <view class="news-panel" v-if="showData">
  55. <image src="/static/img/news-icon.png" class="icon"></image>
  56. <text class="label">消息通知</text>
  57. <maoScroll class="box-panel" :data="topData.notice" :showNum="1" :lineHeight="15"
  58. :animationScroll="800" :animation="4000">
  59. <template v-slot="{line}">
  60. <text @tap="tapOpen" :data-url="'../news/index?id=' + line.id" class="line">{{ line.title }}
  61. </text>
  62. </template>
  63. </maoScroll>
  64. <image @tap="tapNews" src="/static/img/news-right.png" class="icon-right"></image>
  65. </view>
  66. </view>
  67. <view v-if="sysData.is_audit == 0">
  68. <!--CBB潮贝抢货通道-->
  69. <view class="team-buy" @tap="tapOpen" data-url="/pages/guild/itemIndex" v-if="guData!= null">
  70. <image class="teamBg" src="@/static/img/indexChatBg1.png" mode="widthFix"></image>
  71. <view class="team-show">
  72. <view class="labelBox">
  73. <text class="label">{{ guData.name }}</text>
  74. </view>
  75. <view class="guNicknameBox">
  76. <text class="guNickname">
  77. 总监:{{ guData.nickname }}
  78. </text>
  79. </view>
  80. </view>
  81. </view>
  82. </view>
  83. <!--提货好物-->
  84. <view class="goods">
  85. <view class="top">
  86. <image class="topBgImg" src="@/static/img/index_item_bg.png" mode="widthFix"></image>
  87. <image class="icon" src="/static/img/img01.png"></image>
  88. <view class="topTitle">
  89. <text class="label">货款提货</text>
  90. <view class="more" @tap="tapOpen" data-url="../goods/list">
  91. <text class="text">查看更多></text>
  92. </view>
  93. </view>
  94. </view>
  95. <view class="goods-items">
  96. <view @tap="tapOpen" :data-url="'../goods/index?id=' + item.id" class="item"
  97. v-for="(item,index) in topData.product">
  98. <image :src="item.img" mode="aspectFill" class="nimg"></image>
  99. <text class="title">
  100. {{ item.title }}
  101. </text>
  102. <view class="iview">
  103. <view class="score">
  104. <text class='goods-name'>
  105. {{ item.commission }}
  106. </text>
  107. <text class="tag" v-if="sysData.is_audit == 0">积分</text>
  108. <text class="tag" v-else>参考价</text>
  109. </view>
  110. <view class="fx-g1"></view>
  111. <text class="btn" v-if="sysData.is_audit == 0">提货</text>
  112. </view>
  113. </view>
  114. </view>
  115. </view>
  116. <!--最新门店-->
  117. <view class="shop" v-if="sysData.is_audit == 0">
  118. <view class="top">
  119. <image class="topBgImg" src="@/static/img/index_item_bg.png" mode="widthFix"></image>
  120. <image class="icon" src="/static/img/img02.png"></image>
  121. <view class="topTitle">
  122. <text class="label">易趣C果园({{300+merchantCount}}家)</text>
  123. <view class="more" @tap="tapOpen" data-url="../merchant/list">
  124. <text class="text">查看更多></text>
  125. </view>
  126. </view>
  127. </view>
  128. <view class="shop-items">
  129. <view class="item" @tap="tapOpen" :data-url="'../merchant/index?id=' + item.id"
  130. v-for="item in merchantData">
  131. <image :src="item.logo" class="img" mode="aspectFill"></image>
  132. <view class="info">
  133. <view class="iview-top">
  134. <text class="title">{{ item.name }}</text>
  135. <view class="ii">
  136. <image class="shopTipIcon" src="/static/img/shop-small-location.png"></image>
  137. <text class="iiText">
  138. 距离{{ item.dis_km }}
  139. </text>
  140. </view>
  141. </view>
  142. <view class="address">
  143. <image src="/static/img/address-shop.png" class="icon"></image>
  144. <text class="value">{{ item.address }}</text>
  145. </view>
  146. <view class="tel">
  147. <image src="/static/img/tel-shop.png" class="icon"></image>
  148. <text class="value">{{ item.tel }}</text>
  149. </view>
  150. <view class="business">
  151. <text class='businessText'>
  152. 营业时间: {{ item.business }}
  153. </text>
  154. </view>
  155. <view class="wiget">
  156. <view class="witem" @tap.stop="tapTel(item)">
  157. <image class="witeIcon" src="/static/img/shop-tel.png"></image>
  158. <text class="text">电话</text>
  159. </view>
  160. <view class="witem" @tap.stop="tapLbs(item)">
  161. <image class="witeIcon" src="/static/img/shop-location.png"></image>
  162. <text class="text">导航</text>
  163. </view>
  164. </view>
  165. </view>
  166. </view>
  167. </view>
  168. </view>
  169. </view>
  170. <customer-wiget ref="customer"></customer-wiget>
  171. <view class="popwin" v-if="isGg && showData">
  172. <view class="bg"></view>
  173. <view class="body">
  174. <image src="/static/img/index_bg.png" class="bgimg"></image>
  175. <view class="inner-top"></view>
  176. <view class="inner">
  177. <text class="inner-title">
  178. {{title}}
  179. </text>
  180. <scroll-view scroll-y class="max-he">
  181. <uv-parse :content="content"></uv-parse>
  182. </scroll-view>
  183. <view class="foot">
  184. <view class="btnBox">
  185. <text class="btn" @tap="tapYGdBtn">未阅读,去查看></text>
  186. </view>
  187. </view>
  188. </view>
  189. <view class="m-close">
  190. <image src="/static/img/btn-close.png" @tap="isGg = false" class="icon"></image>
  191. </view>
  192. </view>
  193. </view>
  194. </view>
  195. </template>
  196. <script>
  197. import maoScroll from '@/components/mao-scroll/mao-scroll.nvue';
  198. import customerWiget from '@/components/ui-public/customer-wiget.nvue';
  199. import upApp from "@/library/upapp.js"
  200. import {
  201. mapState,
  202. mapMutations
  203. } from 'vuex';
  204. import request from '@/library/Request.js'
  205. import utils from "@/library/utils/Comm.js"
  206. export default {
  207. computed: {
  208. ...mapState(['user', 'lbs', 'sysData', 'showData']),
  209. },
  210. components: {
  211. maoScroll,
  212. customerWiget
  213. },
  214. watch: {
  215. showData(newValue, oldValue) {
  216. this.isShowInit(newValue);
  217. }
  218. },
  219. data() {
  220. return {
  221. statusBarHeight: 20,
  222. windowHeight: 0,
  223. topData: {
  224. banner: [],
  225. notice: [],
  226. product: []
  227. },
  228. content: "",
  229. title: '',
  230. isGg: false,
  231. gGid: 0,
  232. merchantData: [],
  233. guData: null,
  234. merchantCount: 0,
  235. page: {
  236. page: 1,
  237. isLoad: false,
  238. isFoot: false
  239. },
  240. wenAr: {},
  241. isLoad: false,
  242. maxheight: 0, //滚轮页面高度
  243. }
  244. },
  245. onLoad() {
  246. this.initView();
  247. this.isShowInit(false);
  248. upApp();
  249. },
  250. onReady() {
  251. const that = this;
  252. uni.getSystemInfo({
  253. success: (resu) => {
  254. try {
  255. // console.log(resu,'resu')
  256. that.statusBarHeight = resu.statusBarHeight;
  257. // that.windowHeight = resu.windowHeight
  258. } catch (err) {
  259. console.log(err)
  260. }
  261. }
  262. });
  263. },
  264. onReachBottom() {
  265. if (this.page.isFoot || this.page.isLoad) {
  266. return;
  267. }
  268. this.page.page++;
  269. this.getData();
  270. },
  271. methods: {
  272. isShowInit(type) {
  273. // console.log(type,'type11111111111111')
  274. uni.setTabBarItem({
  275. index: 1,
  276. visible: type,
  277. });
  278. uni.setTabBarItem({
  279. index: 2,
  280. visible: type,
  281. })
  282. },
  283. initView: function() {
  284. const that = this
  285. request
  286. .post("indexInit")
  287. .then(res => {
  288. // console.log(res,'resssss')
  289. uni.hideLoading();
  290. if (res.code == 200) {
  291. this.isLoad = true;
  292. this.topData = res.data;
  293. this.getData(true);
  294. //获取文票系统
  295. this.wenpiao();
  296. if (this.user != null) {
  297. //获取自己场馆
  298. this.getGu();
  299. }
  300. let gongId = uni.getStorageSync('gonggao') || '';
  301. if (this.topData.notice.length > 0 && gongId != this.topData.notice[0].id) {
  302. this.gGid = this.topData.notice[0].id;
  303. this.getNoticPop(this.topData.notice[0].id);
  304. }
  305. }
  306. })
  307. .catch(error => {
  308. utils.Tip("加载失败,重新点击尝试!" + JSON.stringify(error));
  309. uni.hideLoading();
  310. });
  311. this.initSys();
  312. },
  313. /**
  314. * 基本逻辑
  315. */
  316. initSys: function() {
  317. const that = this;
  318. if (plus != null) {
  319. plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
  320. let versionCode = wgtinfo.versionCode;
  321. request.post("sysInit", {
  322. code: versionCode
  323. })
  324. .then(res => {
  325. if (res.code == 200) {
  326. that.$store.commit('setSys', res.data)
  327. if (res.data.is_audit == 0) {
  328. that.$store.commit('getGps', {
  329. page: that,
  330. fn: (res) => {
  331. console.log(res);
  332. that.getData(true);
  333. },
  334. err: (err) => {
  335. that.getData(true);
  336. }
  337. })
  338. }
  339. }
  340. });
  341. });
  342. }
  343. },
  344. /**
  345. * 重要提示
  346. * @param {Object} id
  347. */
  348. getNoticPop: function(id) {
  349. request
  350. .post("getContent", {
  351. id: id
  352. })
  353. .then(res => {
  354. // console.log(res);
  355. if (res.code == 200) {
  356. this.title = res.data.title;
  357. this.content = res.data.content;
  358. // console.log(this.content, 'this.content')
  359. this.isGg = true;
  360. }
  361. })
  362. .catch(err => {
  363. utils.Tip("网络错误,请稍后尝试");
  364. });
  365. },
  366. /**
  367. * 确认阅读公告
  368. */
  369. tapYGdBtn: function() {
  370. this.isGg = false;
  371. uni.setStorageSync('gonggao', this.gGid);
  372. uni.navigateTo({
  373. url: '../news/index?id=' + this.gGid
  374. });
  375. },
  376. wenpiao: function() {
  377. request
  378. .get("tradeweb")
  379. .then(res => {
  380. uni.hideLoading();
  381. if (res.code == 200) {
  382. this.wenAr = res.data;
  383. }
  384. });
  385. },
  386. /**
  387. * 最新门店
  388. */
  389. getData: function(isPull = false) {
  390. if (this.page.isLoad) return;
  391. this.page.isLoad = true;
  392. var post = {};
  393. post.page = this.page.page;
  394. //gps位置
  395. if (this.lbs != null) {
  396. post.lat = utils.isDefine(this.lbs.latitude) ? this.lbs.latitude : 0;
  397. post.lng = utils.isDefine(this.lbs.longitude) ? this.lbs.longitude : 0;
  398. }
  399. request
  400. .post("merchants", post)
  401. .then(res => {
  402. uni.hideLoading();
  403. if (res.code == 200) {
  404. this.merchantData = res.data.result;
  405. this.merchantCount = res.data.count;
  406. this.page.isFoot = true;
  407. this.isLoad = true;
  408. }
  409. })
  410. .catch(error => {
  411. console.log(error);
  412. uni.hideLoading();
  413. utils.Tip("加载失败,重新点击尝试!");
  414. });
  415. },
  416. getGu: function() {
  417. request
  418. .get("indexGu")
  419. .then(res => {
  420. uni.hideLoading();
  421. if (res.code == 200) {
  422. this.guData = res.data.guData;
  423. }
  424. });
  425. },
  426. /**
  427. * 更多
  428. */
  429. tapNews: function() {
  430. uni.navigateTo({
  431. url: "../news/list"
  432. });
  433. },
  434. /**
  435. * 打开
  436. * @param {Object} ev
  437. */
  438. tapOpen: function(ev) {
  439. let url = ev.currentTarget.dataset.url;
  440. console.log(url,'url')
  441. utils.navigateTo(url);
  442. },
  443. /**
  444. * 打开
  445. * @param {Object} ev
  446. */
  447. tapOpen2: function(ev) {
  448. let url = ev.currentTarget.dataset.url;
  449. if (!utils.isDefine(this.user)) {
  450. uni.navigateTo({
  451. url: "/pages/login/index"
  452. });
  453. return;
  454. }
  455. utils.navigateTo(url);
  456. },
  457. /**
  458. * 拨打电话
  459. */
  460. tapTel: function(item) {
  461. if (item.tel == null) {
  462. utils.showAlert({
  463. title: "系统提示",
  464. content: "暂无联系方式"
  465. });
  466. return;
  467. }
  468. const info = uni.getSystemInfoSync();
  469. if (info.platform == 'android') {
  470. uni.showModal({
  471. content: "确认拨打" + item.tel,
  472. confirmText: "确定",
  473. cancelText: "取消",
  474. success: (res) => {
  475. if (res.confirm) {
  476. this.$store.dispatch('permission/requestPermissions', 'CALL_PHONE').then(
  477. res => {
  478. if (res !== 1) return;
  479. uni.makePhoneCall({
  480. phoneNumber: item.tel,
  481. fail: (res) => {
  482. console.log("aaaaa");
  483. uni.showModal({
  484. content: JSON.stringify(res)
  485. });
  486. },
  487. complete: (xx) => {
  488. console.log(xx);
  489. console.log("ad");
  490. }
  491. });
  492. });
  493. }
  494. }
  495. });
  496. } else {
  497. uni.makePhoneCall({
  498. phoneNumber: item.tel,
  499. });
  500. }
  501. },
  502. tapLbs: function(item) {
  503. uni.openLocation({
  504. latitude: Number(item.lat),
  505. longitude: Number(item.lng),
  506. name: item.name,
  507. address: item.address,
  508. scale: 12,
  509. success: function() {
  510. console.log('success');
  511. },
  512. fail: function(res) {
  513. },
  514. })
  515. },
  516. }
  517. }
  518. </script>
  519. <style lang="scss">
  520. .swiper-box {}
  521. .app {
  522. background-color: #FEF7F5;
  523. }
  524. .mtop {
  525. margin-top: -500rpx;
  526. width: 750rpx;
  527. .top-body {
  528. .panel {
  529. flex: 1;
  530. flex-direction: row;
  531. align-items: center;
  532. padding: 20rpx 30rpx;
  533. .inputIndex {
  534. flex: 1;
  535. z-index: 2;
  536. padding-right: 20rpx;
  537. .inputText {
  538. background-color: #FFF;
  539. border-radius: 100px;
  540. line-height: 1;
  541. padding: 20rpx;
  542. }
  543. .text {
  544. font-size: 24rpx;
  545. color: rgba(170, 170, 170, 1);
  546. }
  547. }
  548. .index-img {
  549. width: 80rpx;
  550. height: 48rpx;
  551. }
  552. .information {
  553. width: 38rpx;
  554. height: 38rpx;
  555. }
  556. }
  557. }
  558. }
  559. .app-top {
  560. height: 500rpx;
  561. width: 750rpx;
  562. .atop1 {
  563. height: 500rpx;
  564. .top2-bg {
  565. height: 500rpx;
  566. width: 750rpx;
  567. background-image: linear-gradient(to right, #FEA9C8, #FFA18E);
  568. .top3-bg {
  569. height: 500rpx;
  570. width: 750rpx;
  571. background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), #FEF7F5);
  572. }
  573. }
  574. }
  575. .atop2 {
  576. background: #fff;
  577. }
  578. }
  579. //消息信息
  580. .grid-bg {
  581. padding: 0 32rpx;
  582. margin-top: 20rpx;
  583. .gridItem {
  584. background-color: #FFF;
  585. padding: 20rpx 0;
  586. border-radius: 20rpx;
  587. flex-direction: row;
  588. justify-content: space-between;
  589. align-items: center;
  590. }
  591. //9宫格
  592. .grid {
  593. .item {
  594. width: 140rpx;
  595. flex: 1;
  596. align-items: center;
  597. .icon {
  598. width: 90rpx;
  599. height: 90rpx;
  600. }
  601. .label {
  602. font-size: 12px;
  603. color: #0C1732;
  604. margin-top: 16rpx;
  605. }
  606. }
  607. }
  608. //消息通知
  609. .news-panel {
  610. padding: 15rpx 20rpx;
  611. background-color: #FFF;
  612. margin-top: 20rpx;
  613. border-radius: 20rpx;
  614. flex-direction: row;
  615. justify-content: center;
  616. align-items: center;
  617. .box-panel {
  618. flex: 1;
  619. }
  620. .titleBorder {
  621. border: 1px solid #000;
  622. }
  623. .icon {
  624. width: 28rpx;
  625. height: 28rpx;
  626. }
  627. .label {
  628. margin: 0px 10rpx;
  629. font-weight: bold;
  630. font-size: 26rpx;
  631. color: #FF4C4C;
  632. }
  633. .icon-right {
  634. width: 30rpx;
  635. height: 6rpx;
  636. }
  637. .line {
  638. height: 15px;
  639. line-height: 15px;
  640. color: #575656;
  641. font-size: 26rpx;
  642. text-overflow: ellipsis;
  643. lines: 1;
  644. }
  645. }
  646. }
  647. //抢货通道
  648. .team-buy {
  649. margin: 15rpx 10rpx 0rpx 30rpx;
  650. height: 240rpx;
  651. width: 690rpx;
  652. .teamBg {
  653. width: 690rpx;
  654. height: 240rpx;
  655. }
  656. .team-show {
  657. color: #fff;
  658. padding-top: 40rpx;
  659. margin-top: -200rpx;
  660. align-items: center;
  661. justify-content: center;
  662. .labelBox {
  663. padding-top: 20rpx;
  664. .label {
  665. line-height: 45rpx;
  666. font-weight: bold;
  667. font-size: 45rpx;
  668. color: #FFF;
  669. }
  670. }
  671. .guNicknameBox {
  672. margin-top: 20rpx;
  673. padding: 8rpx 30rpx;
  674. background-color: #fffdf1;
  675. border: 1px solid #EDC299;
  676. border-radius: 100rpx;
  677. box-shadow: 4rpx 4rpx 10rpx 2rpx #FCD3BF inset;
  678. }
  679. .guNickname {
  680. font-weight: bold;
  681. font-size: 28rpx;
  682. color: #EA3616;
  683. }
  684. }
  685. }
  686. .top {
  687. padding-top: 30rpx;
  688. position: relative;
  689. height: 123rpx;
  690. .topBgImg {
  691. width: 690rpx;
  692. height: 74rpx;
  693. }
  694. .icon {
  695. width: 96rpx;
  696. height: 110rpx;
  697. position: absolute;
  698. top: 0rpx;
  699. left: 0;
  700. z-index: 999;
  701. }
  702. .topTitle {
  703. margin-top: -60rpx;
  704. flex: 1;
  705. position: relative;
  706. flex-direction: row;
  707. padding-left: 86rpx;
  708. padding-right: 50rpx;
  709. justify-content: space-between;
  710. .label {
  711. color: #fff;
  712. font-weight: bold;
  713. font-size: 34rpx;
  714. margin-left: 12rpx;
  715. padding-top: 10rpx;
  716. }
  717. .more {
  718. padding-top: 20rpx;
  719. .text {
  720. color: #FFF;
  721. font-size: 24rpx;
  722. }
  723. }
  724. }
  725. }
  726. //产品中心
  727. .goods {
  728. padding: 0rpx 30rpx 30rpx;
  729. .goods-items {
  730. border: 2px solid rgba(255, 51, 44, 1);
  731. border-bottom-left-radius: 20rpx;
  732. border-bottom-right-radius: 20rpx;
  733. padding: 20rpx;
  734. margin-top: -24rpx;
  735. flex-direction: row;
  736. flex-wrap: wrap;
  737. justify-content: space-between;
  738. .item {
  739. width: 310rpx;
  740. margin-bottom: 20rpx;
  741. box-shadow: 0px 0px 20px 0px rgba(50, 50, 52, 0.1);
  742. border-radius: 20rpx;
  743. background-color: #FFF;
  744. .nimg {
  745. flex: 1;
  746. height: 310rpx;
  747. border-radius: 20rpx 20rpx 0 0;
  748. }
  749. .title {
  750. padding: 20rpx 20rpx 0;
  751. text-overflow: ellipsis;
  752. lines: 2;
  753. color: #333333;
  754. font-weight: bold;
  755. font-size: 30rpx;
  756. }
  757. .iview {
  758. padding: 20rpx 20rpx;
  759. flex-direction: row;
  760. justify-content: space-between;
  761. .score {
  762. flex-direction: row;
  763. align-items: flex-end;
  764. .goods-name {
  765. color: #FF4C4C;
  766. font-weight: bold;
  767. font-size: 36rpx;
  768. }
  769. .tag {
  770. font-weight: bold;
  771. font-size: 18rpx;
  772. color: #FF4C4C;
  773. }
  774. }
  775. .btn {
  776. background-image: linear-gradient(143.2747deg, #FF6A00, #EE0979);
  777. border-radius: 40rpx;
  778. padding: 10rpx 28rpx;
  779. font-size: 22rpx;
  780. color: #FFFFFF;
  781. }
  782. }
  783. }
  784. }
  785. }
  786. //最新门店
  787. .shop {
  788. padding: 20rpx 30rpx;
  789. .shop-items {
  790. border: 2px solid rgba(255, 51, 44, 1);
  791. border-bottom-left-radius: 20rpx;
  792. border-bottom-right-radius: 20rpx;
  793. padding: 20rpx;
  794. .item {
  795. margin-top: 30rpx;
  796. flex-direction: row;
  797. .img {
  798. width: 180rpx;
  799. height: 180rpx;
  800. border-radius: 10rpx;
  801. }
  802. .info {
  803. position: relative;
  804. margin-left: 20rpx;
  805. width: 440rpx;
  806. border-bottom: 1px solid #F8F8F8;
  807. align-items: flex-start;
  808. .iview-top {
  809. flex-direction: row;
  810. justify-content: space-between;
  811. align-items: center;
  812. .title {
  813. font-weight: bold;
  814. font-size: 34rpx;
  815. color: #333333;
  816. width: 300rpx;
  817. text-overflow: ellipsis;
  818. lines: 1;
  819. }
  820. .ii {
  821. flex-direction: row;
  822. .shopTipIcon {
  823. width: 20rpx;
  824. height: 28rpx;
  825. margin-right: 8rpx
  826. }
  827. .iiText {
  828. font-weight: 400;
  829. font-size: 22rpx;
  830. color: #666666;
  831. }
  832. }
  833. }
  834. .address {
  835. flex-direction: row;
  836. margin-top: 20rpx;
  837. .icon {
  838. width: 28rpx;
  839. height: 28rpx;
  840. }
  841. .value {
  842. width: 400rpx;
  843. text-overflow: ellipsis;
  844. lines: 1;
  845. font-size: 22rpx;
  846. color: #666666;
  847. opacity: 0.5;
  848. padding-left: 10rpx;
  849. }
  850. }
  851. .tel {
  852. flex-direction: row;
  853. margin-top: 16rpx;
  854. .icon {
  855. width: 28rpx;
  856. height: 28rpx;
  857. }
  858. .value {
  859. font-size: 22rpx;
  860. color: #666666;
  861. opacity: 0.5;
  862. margin-left: 10rpx;
  863. }
  864. }
  865. .business {
  866. background: rgba(252, 243, 240, 0.8);
  867. border-radius: 16rpx 16rpx 16rpx 0px;
  868. padding: 10rpx 10rpx;
  869. margin-bottom: 20rpx;
  870. .businessText {
  871. font-weight: bold;
  872. font-size: 24rpx;
  873. color: #FF6F0F;
  874. }
  875. }
  876. .wiget {
  877. position: absolute;
  878. flex-direction: row;
  879. justify-content: space-between;
  880. right: 0;
  881. bottom: 20rpx;
  882. width: 120rpx;
  883. .wline {
  884. margin: 0px 24rpx;
  885. height: 40rpx;
  886. width: 1px;
  887. background: #eee;
  888. }
  889. .witem {
  890. align-items: center;
  891. .witeIcon {
  892. width: 46rpx;
  893. height: 46rpx;
  894. }
  895. .text {
  896. font-size: 28rpx;
  897. color: #666666;
  898. margin-top: 8rpx;
  899. }
  900. }
  901. }
  902. }
  903. }
  904. }
  905. }
  906. /**弹出框 **/
  907. .popwin {
  908. position: fixed;
  909. width: 750rpx;
  910. top: 0;
  911. left: 0;
  912. bottom: 0;
  913. z-index: 88;
  914. justify-content: center;
  915. align-items: center;
  916. }
  917. .popwin .bg {
  918. background: rgba(0, 0, 0, 0.5);
  919. width: 750rpx;
  920. position: absolute;
  921. left: 0;
  922. top: 0;
  923. bottom: 0;
  924. }
  925. .popwin .body {
  926. position: relative;
  927. border-radius: 8px;
  928. width: 600rpx;
  929. align-items: center;
  930. }
  931. .popwin .body .bgimg {
  932. width: 600rpx;
  933. height: 900rpx;
  934. position: absolute;
  935. top: 0;
  936. bottom: 0;
  937. }
  938. .popwin .body .inner {
  939. position: relative;
  940. z-index: 99;
  941. width: 670rpx;
  942. padding: 0px 40rpx;
  943. align-items: center;
  944. }
  945. .inner-title {
  946. color: #FC2D47;
  947. padding: 25rpx 0rpx;
  948. font-size: 36rpx;
  949. font-weight: bold;
  950. }
  951. .inner-top {
  952. height: 225rpx
  953. }
  954. .max-he {
  955. height: 322rpx;
  956. margin: 0 20rpx;
  957. width: 500rpx;
  958. }
  959. .foot {
  960. height: 195rpx;
  961. width: 337rpx;
  962. margin-top: 60rpx;
  963. }
  964. .popwin .btnBox {
  965. height: 66rpx;
  966. align-items: center;
  967. justify-content: center;
  968. background-image: linear-gradient(0deg, #FAC37B, #FFF5B0);
  969. box-shadow: 2px 7px 7px 0px rgba(161, 23, 36, 0.4);
  970. border-radius: 15rpx;
  971. .btn {
  972. font-size: 38rpx;
  973. color: #97000E;
  974. }
  975. }
  976. .popwin .m-close {
  977. margin-top: 10px;
  978. }
  979. .popwin .m-close .icon {
  980. width: 120rpx;
  981. height: 120rpx;
  982. }
  983. .app-body {
  984. .swiper-img {
  985. margin: 0 30rpx;
  986. }
  987. }
  988. </style>