shopDetail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955
  1. <template>
  2. <view class="center">
  3. <view class="store-info flex">
  4. <view class="store-top flex">
  5. <image class="simage" :src="info.image" mode=""></image>
  6. <view class="stop-main">
  7. <view class="stop-title">{{ info.name }}</view>
  8. <view class="stop-address">
  9. <image class="mrt-image" src="https://hy.liuniu946.com/app/index/index10.png" mode=""></image>
  10. <view class="mrt-font">距离您{{ info.jl }}KM</view>
  11. </view>
  12. </view>
  13. </view>
  14. </view>
  15. <view class="store-item">
  16. <image class="store-image1" src="https://hy.liuniu946.com/app/img/store2.png" mode=""></image>
  17. <view class="store-font">营业时间:{{ info.day_time }}</view>
  18. </view>
  19. <view class="store-item" v-if="info.phone">
  20. <image class="store-image2" src="https://hy.liuniu946.com/app/img/store3.png" mode=""></image>
  21. <view class="store-font">预约电话:{{ info.phone }}</view>
  22. </view>
  23. <view class="store-item">
  24. <image class="store-image3" src="https://hy.liuniu946.com/app/index/index10.png" mode=""></image>
  25. <view class="store-font">门店地址:{{ info.detailed_address }}</view>
  26. </view>
  27. <view class="store-item">
  28. <image class="store-image1" src="https://hy.liuniu946.com/app/img/store2.png" mode=""></image>
  29. <view class="store-font">商家介绍:{{ info.introduction }}</view>
  30. </view>
  31. <view class="store-main" v-if="info.slider_image != null">
  32. <view class="smain-title">店内照片</view>
  33. <scroll-view class="scroll-box flex" @scroll="scroll" scroll-x="true" :scroll-with-animation="true"
  34. scroll-left="10px">
  35. <view class="scroll-item" v-for="(item, index) in info.slider_image" :key="index">
  36. <image class="scroll-image" :src="item" mode="heightFix" @click="openImg(info.slider_image, item)">
  37. </image>
  38. </view>
  39. </scroll-view>
  40. </view>
  41. <view class="main" v-if="art != ''" v-for="(ls, index) in art.content" :key="index">
  42. <view v-if="ls.type == 'rich-text'" v-html="ls.value" class="main-item"></view>
  43. <view style="width:100%;height: 300px;" v-if="ls.type == 'video' && ls.value">
  44. <view v-if="ls.jd == 1" style="width:100%;height: 300px; background: black;" @click="djbf(ls)">
  45. <image style="width:100%;height: 300px;" src="../../static/img/spfm.png" mode=""></image>
  46. </view>
  47. <video :src="ls.value" autoplay v-if="ls.jd ==2" style="width:100%;height: 300px;">
  48. </video>
  49. </view>
  50. </view>
  51. <!-- <jyf-parser class="main" :html="art.content"></jyf-parser> -->
  52. <view class="" style="height: 100rpx;"></view>
  53. <view class="btn-box flex" v-if="info.phone">
  54. <view class="btn-left" @click="tocall()">拨打电话</view>
  55. <!-- #ifdef H5 -->
  56. <view class="btn-right" @click="toGaodeMap()">导航到店</view>
  57. <!-- #endif -->
  58. <!-- #ifdef MP -->
  59. <view class="btn-right" @click="dh()">导航到店</view>
  60. <!-- #endif -->
  61. <!-- #ifdef APP-PLUS -->
  62. <view class="btn-right" @click="gomapApp(info.latitude, info.longitude, info.name)">导航到店</view>
  63. <!-- #endif -->
  64. </view>
  65. <view class="btn-box dhdd flex" v-if="!info.phone">
  66. <!-- #ifdef H5 -->
  67. <view class="btn-right" @click="toGaodeMap()">导航到店</view>
  68. <!-- #endif -->
  69. <!-- #ifdef MP -->
  70. <view class="btn-right" @click="dh()">导航到店</view>
  71. <!-- #endif -->
  72. <!-- #ifdef APP-PLUS -->
  73. <view class="btn-right" @click="gomapApp(info.latitude, info.longitude, info.name)">导航到店</view>
  74. <!-- #endif -->
  75. </view>
  76. </view>
  77. </template>
  78. <script>
  79. import jyfParser from "@/components/jyf-parser/jyf-parser.vue";
  80. import {
  81. getVip
  82. } from '@/api/index.js';
  83. // #ifdef H5
  84. import {
  85. weixindata,
  86. shareLoad
  87. } from '@/utils/wxAuthorized';
  88. // #endif
  89. import {
  90. saveUrl,
  91. interceptor
  92. } from '@/utils/loginUtils.js';
  93. import {
  94. mapState,
  95. mapMutations
  96. } from 'vuex';
  97. import {
  98. spread,
  99. orderData,
  100. getUserInfo,
  101. details
  102. } from '@/api/user.js';
  103. import {
  104. getStoreDetail
  105. } from '@/api/shop.js';
  106. import {
  107. calculation
  108. } from '@/api/order.js';
  109. import {
  110. setCoupons
  111. } from '@/api/functionalUnit.js';
  112. import {
  113. store_details
  114. } from '@/api/index.js';
  115. import uniPopup from '@/components/uni-popup/uni-popup.vue';
  116. export default {
  117. components: {
  118. jyfParser
  119. },
  120. data() {
  121. return {
  122. money: '',
  123. vipList: [], //商品列表
  124. page: 1,
  125. limit: 10,
  126. loadingType: 'more',
  127. id: '',
  128. info: {},
  129. art: '',
  130. address: '',
  131. userInfo: ''
  132. };
  133. },
  134. computed: {
  135. ...mapState(['loginInterceptor', 'baseURL', 'latitude', 'longitude']),
  136. ...mapMutations('user', ['setUserInfo', 'setOrderInfo'])
  137. },
  138. onLoad(option) {
  139. let obj = this;
  140. getUserInfo({}).then(({
  141. data
  142. }) => {
  143. obj.userInfo = data;
  144. console.log(data, '123456');
  145. });
  146. if (option.spread) {
  147. // 存储邀请人
  148. uni.setStorageSync('puid', option.spread);
  149. }
  150. console.log(option.spread, '邀请人');
  151. this.id = option.id;
  152. this.getStoreDetail();
  153. },
  154. onShow() {
  155. // #ifdef MP-WEIXIN
  156. wx.showShareMenu({
  157. withShareTicket: true,
  158. menus: ['shareAppMessage', 'shareTimeline']
  159. });
  160. //#endif
  161. },
  162. // #ifdef MP-WEIXIN
  163. onShareAppMessage(res) {
  164. let obj = this;
  165. // 保存分享人id链接
  166. let url = 'pages/store/shopDetail' + '?spread=' + this.userInfo.uid + '&id=' + obj.info.id;
  167. if (res.from === 'button') {
  168. // 来自页面内分享按钮
  169. console.log(res.target);
  170. }
  171. return {
  172. path: url, // 分享链接
  173. imageUrl: obj.info.images, // 分享图标
  174. desc: '我在这家店领取了超多消费券哦!',
  175. title: this.userInfo.nickname + '给您推荐了' + obj.info.name
  176. };
  177. },
  178. //分享到朋友圈
  179. onShareTimeline(res) {
  180. console.log(this.userInfo);
  181. let obj = this;
  182. let url = 'pages/store/shopDetail' + '?spread=' + this.userInfo.uid + '&id=' + obj.info.id;
  183. return {
  184. path: url, // 分享链接
  185. imageUrl: obj.info.images, // 分享图标
  186. desc: '我在这家店领取了超多消费券哦!',
  187. title: this.userInfo.nickname + '给您推荐了' + obj.info.name
  188. };
  189. },
  190. //#endif
  191. methods: {
  192. navToDetailPage(item) {
  193. let id = item.id;
  194. uni.navigateTo({
  195. url: '/pages/product/product?id=' + id + '&isVip=' + 8 + '&store_id=' + item.store_id
  196. });
  197. },
  198. navTo(url) {
  199. if (this.money <= 0) {
  200. return this.$api.msg('请输入金额');
  201. }
  202. calculation({
  203. price: this.money,
  204. store_id: this.id,
  205. integral: 1
  206. })
  207. .then(({
  208. data
  209. }) => {
  210. uni.navigateTo({
  211. url
  212. });
  213. })
  214. .then(e => {
  215. this.cancel();
  216. });
  217. },
  218. cancel() {
  219. this.money = '';
  220. this.$refs.popup.close();
  221. },
  222. // 获取门店详情
  223. getStoreDetail() {
  224. let obj = this;
  225. console.log('进入');
  226. getStoreDetail({}, obj.id).then(res => {
  227. obj.info = res.data;
  228. obj.info.jl = obj.getFlatternDistance(obj.latitude, obj.longitude, obj.info.latitude, obj.info
  229. .longitude);
  230. if (obj.info.link_articel != '') {
  231. obj.getarticel(obj.info.link_articel);
  232. }
  233. });
  234. },
  235. getarticel(id) {
  236. details({}, id).then(({
  237. data
  238. }) => {
  239. data.content = data.content.replace(/<img/g, '<img class="rich-img"').replace(/<p>\s*<img/g,
  240. '<p class="pHeight"><img');
  241. data.content = this.getVideo(data.content);
  242. this.art = data;
  243. console.log(this.art, 'nierong');
  244. });
  245. },
  246. djbf(opt) {
  247. console.log(opt, '2222');
  248. opt.jd = 2
  249. },
  250. getVideo(data) {
  251. console.log(data, '源数据')
  252. let videoList = [];
  253. let videoReg = /<video.*?(?:>|\/>)/gi; //匹配到字符串中的 video 标签
  254. let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; //匹配到字符串中的 video 标签 的路径
  255. let arr = data.match(videoReg) || []; // arr 为包含所有video标签的数组
  256. let articleList = data.split('</video>'); // 把字符串 从视频标签分成数组
  257. arr.forEach((item, index) => {
  258. var src = item.match(srcReg);
  259. videoList.push(src[1]); //所要显示的字符串中 所有的video 标签 的路径
  260. });
  261. let needArticleList = [];
  262. articleList.forEach((item, index) => {
  263. if (item != '' && item != undefined) {
  264. let wuvideo = item.split('<video')
  265. let js = wuvideo[0].replace('<video', '')
  266. // 常见的标签渲染
  267. needArticleList.push({
  268. type: 'rich-text',
  269. value: js
  270. });
  271. }
  272. let articleListLength = articleList.length; // 插入到原有video 标签位置
  273. if (index < articleListLength && videoList[index] != undefined) {
  274. needArticleList.push({
  275. type: 'video',
  276. jd: 1,
  277. value: videoList[index]
  278. });
  279. }
  280. });
  281. console.log(needArticleList, '完成');
  282. return needArticleList;
  283. },
  284. markertap(e) {
  285. let obj = this;
  286. // #ifdef H5
  287. weixindata().then(wxOjb => {
  288. console.log(wxOjb, '获取微信');
  289. wxOjb.openLocation({
  290. latitude: obj.info.latitude, // 纬度,浮点数,范围为90 ~ -90
  291. longitude: obj.info.longitude, // 经度,浮点数,范围为180 ~ -180。
  292. name: obj.info.name, // 位置名
  293. address: obj.info.detailed_address, // 地址详情说明
  294. scale: 28, // 地图缩放级别,整型值,范围从1~28。默认为最大
  295. infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
  296. });
  297. });
  298. // #endif
  299. },
  300. //根据经纬度计算距离
  301. getFlatternDistance(lat1, lng1, lat2, lng2) {
  302. console.log(lat1, lng1, lat2, lng2);
  303. let radLat1 = (lat1 * Math.PI) / 180.0;
  304. let radLat2 = (lat2 * Math.PI) / 180.0;
  305. let a = radLat1 - radLat2;
  306. let b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
  307. let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math
  308. .pow(Math.sin(b / 2), 2)));
  309. s = s * 6378.137;
  310. s = Math.round(s * 10000) / 10000;
  311. s = s.toFixed(2) * 1;
  312. return s;
  313. },
  314. scroll(e) {
  315. console.log(e, '123456');
  316. },
  317. tocall() {
  318. let num = this.info.phone;
  319. console.log(num);
  320. uni.makePhoneCall({
  321. phoneNumber: num //仅为示例
  322. });
  323. },
  324. // tocall() {
  325. // this.$refs.popup.open();
  326. // },
  327. // 点击触发领取优惠券
  328. setCoupons(item) {
  329. // 判断是否已经领取了优惠券
  330. let obj = this;
  331. uni.showModal({
  332. title: '领取提示',
  333. content: '是否领取优惠券',
  334. success(e) {
  335. if (e.confirm) {
  336. setCoupons({
  337. couponId: item.id
  338. }).then(e => {
  339. item.is_use = true;
  340. uni.showToast({
  341. title: '领取成功',
  342. type: 'top',
  343. duration: 2000
  344. });
  345. });
  346. }
  347. }
  348. });
  349. },
  350. getaddress() {
  351. console.log('dizhi+++++++++++');
  352. let obj = this;
  353. // #ifndef H5
  354. // uni.getLocation({
  355. // type: 'gcj02',
  356. // success: res => {
  357. // console.log(res, 123456);
  358. // obj.setLat(res.latitude);
  359. // obj.setLon(res.longitude);
  360. // obj.getStoreDetail();
  361. // },
  362. // fail: err => {
  363. // console.log(err, 'shi+++++++++++++++');
  364. // openMap().then(e => {
  365. // this.getaddress();
  366. // });
  367. // }
  368. // });
  369. // #endif
  370. // #ifdef H5
  371. uni.getLocation({
  372. type: 'wgs84',
  373. success: res => {
  374. console.log(res, 123456);
  375. let wz = obj.wgs84Togcj02(res.longitude, res.latitude);
  376. obj.setLat(wz[1]);
  377. obj.setLon(wz[0]);
  378. obj.getStoreDetail();
  379. },
  380. fail: err => {
  381. console.log(err, 'shi+++++++++++++++');
  382. openMap().then(e => {
  383. this.getaddress();
  384. });
  385. }
  386. });
  387. // weixindata().then(wxOjb => {
  388. // console.log(wxOjb, '获取微信');
  389. // wxOjb.getLocation({
  390. // type: 'gcj02',
  391. // success: res => {
  392. // console.log(res, 123456);
  393. // obj.setLat(res.latitude);
  394. // obj.setLon(res.longitude);
  395. // obj.getStoreDetail();
  396. // },
  397. // fail: err => {
  398. // console.log(err, 'shi+++++++++++++++');
  399. // openMap().then(e => {
  400. // obj.getaddress();
  401. // });
  402. // }
  403. // });
  404. // });
  405. // #endif
  406. },
  407. wgs84Togcj02(lng, lat) {
  408. if (this.out_of_china(lng, lat)) {
  409. return [lng, lat];
  410. }
  411. //定义一些常量
  412. //GCJ02 转换为 WGS84
  413. var that = this;
  414. const x_PI = (3.14159265358979324 * 3000.0) / 180.0;
  415. const PI = 3.1415926535897932384626;
  416. const a = 6378245.0;
  417. const ee = 0.00669342162296594323;
  418. let dlat = that.transformlat(lng - 105.0, lat - 35.0);
  419. let dlng = that.transformlng(lng - 105.0, lat - 35.0);
  420. let radlat = (lat / 180.0) * PI;
  421. let magic = Math.sin(radlat);
  422. magic = 1 - ee * magic * magic;
  423. let sqrtmagic = Math.sqrt(magic);
  424. dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);
  425. dlng = (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI);
  426. var mglat = lat + dlat;
  427. var mglng = lng + dlng;
  428. return [mglng, mglat];
  429. },
  430. out_of_china(lng, lat) {
  431. return lng < 72.004 || lng > 137.8347 || (lat < 0.8293 || lat > 55.8271 || false);
  432. },
  433. transformlat(lng, lat) {
  434. const x_PI = (3.14159265358979324 * 3000.0) / 180.0;
  435. const PI = 3.1415926535897932384626;
  436. const a = 6378245.0;
  437. const ee = 0.00669342162296594323;
  438. let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(
  439. lng));
  440. ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0;
  441. ret += ((20.0 * Math.sin(lat * PI) + 40.0 * Math.sin((lat / 3.0) * PI)) * 2.0) / 3.0;
  442. ret += ((160.0 * Math.sin((lat / 12.0) * PI) + 320 * Math.sin((lat * PI) / 30.0)) * 2.0) / 3.0;
  443. return ret;
  444. },
  445. transformlng(lng, lat) {
  446. const x_PI = (3.14159265358979324 * 3000.0) / 180.0;
  447. const PI = 3.1415926535897932384626;
  448. const a = 6378245.0;
  449. const ee = 0.00669342162296594323;
  450. let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
  451. ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0;
  452. ret += ((20.0 * Math.sin(lng * PI) + 40.0 * Math.sin((lng / 3.0) * PI)) * 2.0) / 3.0;
  453. ret += ((150.0 * Math.sin((lng / 12.0) * PI) + 300.0 * Math.sin((lng / 30.0) * PI)) * 2.0) / 3.0;
  454. return ret;
  455. },
  456. //
  457. openImg(list, item) {
  458. uni.previewImage({
  459. current: item,
  460. urls: list
  461. });
  462. },
  463. // 调用高德
  464. toGaodeMap() {
  465. let obj = this;
  466. window.location.href =
  467. `https://uri.amap.com/marker?position=${obj.info.longitude},${obj.info.latitude}&name=${obj.info.name}`;
  468. },
  469. // 导航
  470. dh() {
  471. let obj = this;
  472. wx.openLocation({
  473. latitude: obj.info.latitude * 1,
  474. longitude: obj.info.longitude * 1,
  475. name: obj.info.name,
  476. address: obj.info.detailed_address
  477. });
  478. },
  479. gomapApp(latitude, longitude, name) {
  480. let url = '';
  481. if (plus.os.name == 'Android') {
  482. //判断是安卓端
  483. plus.nativeUI.actionSheet({
  484. //选择菜单
  485. title: '选择地图应用',
  486. cancel: '取消',
  487. buttons: [{
  488. title: '腾讯地图'
  489. }, {
  490. title: '百度地图'
  491. }, {
  492. title: '高德地图'
  493. }]
  494. },
  495. function(e) {
  496. switch (e.index) {
  497. //下面是拼接url,不同系统以及不同地图都有不同的拼接字段
  498. case 1:
  499. //注意referer=xxx的xxx替换成你在腾讯地图开发平台申请的key
  500. url = `qqmap://map/geocoder?coord=${latitude},${longitude}&referer=xxx`;
  501. break;
  502. case 2:
  503. url =
  504. `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo`;
  505. break;
  506. case 3:
  507. url =
  508. `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
  509. break;
  510. default:
  511. break;
  512. }
  513. if (url != '') {
  514. url = encodeURI(url);
  515. //plus.runtime.openURL(url,function(e){})调起手机APP应用
  516. plus.runtime.openURL(url, function(e) {
  517. plus.nativeUI.alert('本机未安装指定的地图应用');
  518. });
  519. }
  520. }
  521. );
  522. } else {
  523. // iOS上获取本机是否安装了百度高德地图,需要在manifest里配置
  524. // 在manifest.json文件app-plus->distribute->apple->urlschemewhitelist节点下添加
  525. //(如urlschemewhitelist:["iosamap","baidumap"])
  526. plus.nativeUI.actionSheet({
  527. title: '选择地图应用',
  528. cancel: '取消',
  529. buttons: [{
  530. title: '腾讯地图'
  531. }, {
  532. title: '百度地图'
  533. }, {
  534. title: '高德地图'
  535. }]
  536. },
  537. function(e) {
  538. switch (e.index) {
  539. case 1:
  540. url = `qqmap://map/geocoder?coord=${latitude},${longitude}&referer=xxx`;
  541. break;
  542. case 2:
  543. url =
  544. `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
  545. break;
  546. case 3:
  547. url =
  548. `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
  549. break;
  550. default:
  551. break;
  552. }
  553. if (url != '') {
  554. url = encodeURI(url);
  555. plus.runtime.openURL(url, function(e) {
  556. plus.nativeUI.alert('本机未安装指定的地图应用');
  557. });
  558. }
  559. }
  560. );
  561. }
  562. }
  563. }
  564. };
  565. </script>
  566. <style lang="less">
  567. .center,
  568. page {
  569. background: #f8f8f8;
  570. height: 100%;
  571. }
  572. .dhdd {
  573. view {
  574. margin: 0 auto;
  575. }
  576. }
  577. .store-info {
  578. background: #ffffff;
  579. .store-top {
  580. padding: 40rpx 20rpx;
  581. justify-content: flex-start;
  582. .simage {
  583. width: 130rpx;
  584. height: 130rpx;
  585. background: #f44939;
  586. }
  587. .stop-main {
  588. height: 130rpx;
  589. padding: 6rpx 0;
  590. margin-left: 20rpx;
  591. display: flex;
  592. flex-direction: column;
  593. justify-content: space-between;
  594. align-items: flex-start;
  595. .stop-title {
  596. font-size: 36rpx;
  597. font-family: PingFang SC;
  598. font-weight: 500;
  599. color: #000000;
  600. }
  601. .stop-address {
  602. display: flex;
  603. justify-content: flex-end;
  604. align-items: center;
  605. .mrt-image {
  606. width: 20rpx;
  607. height: 28rpx;
  608. }
  609. .mrt-font {
  610. margin-left: 8rpx;
  611. font-size: 22rpx;
  612. font-family: PingFang SC;
  613. font-weight: 500;
  614. color: #666666;
  615. }
  616. }
  617. }
  618. }
  619. }
  620. .store-item {
  621. background: #ffffff;
  622. display: flex;
  623. justify-content: flex-start;
  624. align-items: center;
  625. padding: 30rpx 30rpx 30rpx 44rpx;
  626. .store-image1 {
  627. width: 36rpx;
  628. height: 36rpx;
  629. }
  630. .store-image2 {
  631. margin: 0 1rpx;
  632. width: 34rpx;
  633. height: 34rpx;
  634. }
  635. .store-image3 {
  636. margin: 0 7rpx;
  637. width: 22rpx;
  638. height: 28rpx;
  639. }
  640. .store-font {
  641. margin-left: 22rpx;
  642. font-size: 26rpx;
  643. font-family: PingFang SC;
  644. font-weight: 500;
  645. color: #2d2d2d;
  646. }
  647. }
  648. .store-main {
  649. margin-top: 16rpx;
  650. background: #ffffff;
  651. padding: 30rpx 42rpx 40rpx;
  652. .smain-title {
  653. font-size: 30rpx;
  654. font-family: PingFang SC;
  655. font-weight: 500;
  656. color: #464646;
  657. }
  658. }
  659. .scroll-box {
  660. white-space: nowrap;
  661. margin-top: 30rpx;
  662. height: 240rpx;
  663. .scroll-item:first-child {
  664. margin-left: 0;
  665. }
  666. .scroll-item {
  667. margin-left: 20rpx;
  668. display: inline-block;
  669. height: 240rpx;
  670. // width: 240rpx;
  671. }
  672. .scroll-image {
  673. height: 240rpx;
  674. // width: 240rpx;
  675. }
  676. }
  677. .btn-box {
  678. position: fixed;
  679. bottom: 0rpx;
  680. left: 0;
  681. right: 0;
  682. width: 750rpx;
  683. background: rgba(255, 255, 255, 0.6);
  684. box-shadow: 0rpx 0rpx 20rpx 0px rgba(50, 50, 52, 0.06);
  685. padding: 22rpx 68rpx;
  686. .btn-left {
  687. width: 280rpx;
  688. height: 80rpx;
  689. background: linear-gradient(180deg, #ffa30b, #ffd158);
  690. box-shadow: 0px 3rpx 13rpx 3rpx rgba(255, 164, 13, 0.48);
  691. border-radius: 40rpx;
  692. text-align: center;
  693. line-height: 80rpx;
  694. font-size: 32rpx;
  695. font-family: PingFang SC;
  696. font-weight: 500;
  697. color: #ffffff;
  698. }
  699. .btn-right {
  700. width: 280rpx;
  701. height: 80rpx;
  702. background: linear-gradient(180deg, #ff6223, #ffab60);
  703. box-shadow: 0px 3rpx 13rpx 3rpx rgba(255, 164, 13, 0.48);
  704. border-radius: 40rpx;
  705. text-align: center;
  706. line-height: 80rpx;
  707. font-size: 32rpx;
  708. font-family: PingFang SC;
  709. font-weight: 500;
  710. color: #ffffff;
  711. }
  712. }
  713. .popup_row {
  714. width: 100%;
  715. height: 500rpx;
  716. background-color: #ffffff;
  717. border-radius: 20rpx;
  718. display: flex;
  719. justify-content: center;
  720. align-items: center;
  721. .rows {
  722. width: 100%;
  723. padding: 0 24rpx;
  724. .rows-item {
  725. height: 80rpx;
  726. line-height: 80rpx;
  727. text-align: center;
  728. width: 100%;
  729. font-size: 32rpx;
  730. color: #303133;
  731. // border-bottom: 1rpx solid #f0f0f0;
  732. }
  733. // .row-1 {
  734. // margin: auto;
  735. // .first_aid {
  736. // width: 300rpx;
  737. // height: 300rpx;
  738. // }
  739. // }
  740. // .row-2 {
  741. // font-size: 38rpx;
  742. // margin-top: 20rpx;
  743. // }
  744. }
  745. }
  746. .shop-dhq {
  747. width: 702rpx;
  748. height: 171rpx;
  749. box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.15);
  750. margin: auto;
  751. border-radius: 20rpx;
  752. background-color: #fff;
  753. padding: 0 48rpx 0 26rpx;
  754. margin-bottom: 20rpx;
  755. .dhq-left {
  756. .dhq-name {
  757. overflow: hidden;
  758. width: 28%;
  759. font-size: 28rpx;
  760. font-weight: bold;
  761. color: #333333;
  762. }
  763. .dhq-price {
  764. padding-top: 20rpx;
  765. .j-price {
  766. font-size: 38rpx;
  767. font-weight: bold;
  768. color: #ff4c4c;
  769. &::before {
  770. content: '¥';
  771. font-size: 24rpx;
  772. color: #ff4c4c;
  773. }
  774. }
  775. .j-zk {
  776. margin: 10rpx;
  777. display: inline-block;
  778. margin-left: 10rpx;
  779. line-height: 32rpx;
  780. height: 32rpx;
  781. border: 1px solid #ff4c4c;
  782. border-radius: 5rpx;
  783. font-size: 22rpx;
  784. font-weight: 500;
  785. color: #ff4c4c;
  786. padding: 0 8rpx;
  787. }
  788. }
  789. }
  790. .dhq-right {
  791. .right-btn {
  792. width: 105rpx;
  793. line-height: 56rpx;
  794. background: linear-gradient(143.2747deg, #ff6a00, #ee0979);
  795. border: 1rpx solid #ff4c4c;
  796. border-radius: 27rpx;
  797. text-align: center;
  798. color: #fff;
  799. font-size: 28rpx;
  800. font-weight: bold;
  801. }
  802. }
  803. }
  804. .jx-box-content {
  805. display: flex;
  806. .content-left {
  807. margin: 20rpx 15rpx;
  808. width: 236rpx;
  809. height: 236rpx;
  810. background: #e2e2e2;
  811. border-radius: 10rpx;
  812. image {
  813. width: 100%;
  814. height: 100%;
  815. }
  816. }
  817. .content-right {
  818. display: flex;
  819. flex-direction: column;
  820. justify-content: space-around;
  821. .shop-name {
  822. width: 382rpx;
  823. font-size: 32rpx;
  824. font-weight: bold;
  825. color: #333333;
  826. overflow: hidden;
  827. text-overflow: ellipsis;
  828. display: -webkit-box;
  829. -webkit-box-orient: vertical;
  830. -webkit-line-clamp: 2;
  831. }
  832. .shop-content {
  833. width: 455rpx;
  834. display: flex;
  835. justify-content: space-between;
  836. .shop-content-left {
  837. display: flex;
  838. flex-direction: column;
  839. .price-box {
  840. display: flex;
  841. align-items: center;
  842. .yuan-price {
  843. font-size: 26rpx;
  844. font-weight: 500;
  845. text-decoration: line-through;
  846. color: #999999;
  847. }
  848. image {
  849. margin: 0 10rpx;
  850. width: 16rpx;
  851. height: 18rpx;
  852. }
  853. .j-price {
  854. font-size: 24rpx;
  855. font-weight: bold;
  856. color: #b59467;
  857. }
  858. }
  859. .price-x {
  860. font-size: 36rpx;
  861. font-weight: bold;
  862. color: #ff4c4c;
  863. }
  864. }
  865. .shop-content-right {
  866. margin-top: 20rpx;
  867. align-items: center;
  868. text-align: center;
  869. width: 137rpx;
  870. height: 52rpx;
  871. font-size: 26rpx;
  872. font-weight: 500;
  873. color: #fff;
  874. background: #f75022;
  875. border-radius: 26rpx;
  876. line-height: 52rpx;
  877. }
  878. }
  879. }
  880. }
  881. .main {
  882. padding: 10rpx;
  883. display: flex;
  884. flex-direction: column;
  885. }
  886. /deep/ .main {
  887. .rich-img {
  888. width: 100% !important;
  889. height: auto;
  890. }
  891. }
  892. </style>