index.vue 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441
  1. <template>
  2. <view :style="{ 'background-image': `linear-gradient(0deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.8) 40%),url(${store.mer_banner})` }"
  3. class="store-home">
  4. <!-- 搜索 -->
  5. <!-- #ifdef MP -->
  6. <view :style="{ height: `${systemInfo.statusBarHeight}px` }"></view>
  7. <view :style="{ height: `${(menuButtonInfo.top - systemInfo.statusBarHeight) * 2 + menuButtonInfo.height}px`, 'padding-right': `${(systemInfo.windowWidth - menuButtonInfo.left) * 2 + 34}rpx`}"
  8. class="header">
  9. <view class="iconfont icon-xiangzuo" @click="goback" style="color: #fff;"></view>
  10. <navigator :url="'/pages/store/list/index?mer_id='+id" hover-class="none" class="search"><text class="iconfont icon-xiazai5"></text>搜索商品</navigator>
  11. </view>
  12. <!-- #endif -->
  13. <!-- #ifdef H5 -->
  14. <view class="header">
  15. <view class="head-menu">
  16. <view class="iconfont icon-xiangzuo" @click="goback"></view>
  17. <view class="iconfont icon-shouye4" @click="goHome"></view>
  18. </view>
  19. <navigator :url="'/pages/store/list/index?mer_id='+id" hover-class="none" class="search"><text class="iconfont icon-xiazai5"></text>搜索商品</navigator>
  20. </view>
  21. <!-- #endif -->
  22. <view v-show="navShow && tabActive === 0" class="nav">
  23. <view class="nav-cont">
  24. <view :class="{ active: navActive === 0 }" class="item" @click="navActive = 0;select.show = !select.show">
  25. <view class="cont">
  26. {{ select.selected ? '评分' : '默认' }}
  27. <text :class="['arrow-icon', 'iconfont', select.show ? 'icon-xiangshang' : 'icon-xiangxia']"></text>
  28. </view>
  29. </view>
  30. <view :class="{ active: navActive === 1 }" class="item" @click="set_where(2)">
  31. <view class="cont">
  32. 销量
  33. </view>
  34. </view>
  35. <view :class="{ active: navActive === 2 }" class="item" @click="set_where(3)">
  36. <view class="cont">
  37. 价格
  38. <image :src="sortPrice ? '/static/images/up.png' : '/static/images/down.png'"></image>
  39. </view>
  40. </view>
  41. <view :class="{ active: navActive === 3 }" class="item" @click="set_where(4)">
  42. <view class="cont">
  43. 新品
  44. </view>
  45. </view>
  46. <view :class="{ active: navActive === 5 }" class="item" @click="set_where(5)">
  47. <view class="cont">
  48. 活动
  49. </view>
  50. </view>
  51. <view :class="{ active: navActive === 4 }" class="item" @click="select.show = false;navActive = 4;isColumn = !isColumn">
  52. <view class="cont">
  53. <text :class="['layout-icon', 'iconfont', isColumn ? 'icon-pailie' : 'icon-tupianpailie']"></text>
  54. </view>
  55. </view>
  56. </view>
  57. <view v-show="select.show && navShow" class="select">
  58. <view v-for="item in select.options" :key="item.id" :class="{ active: item.id === select.selected }" class="item"
  59. @click="set_where(item.id)">{{ item.name }}</view>
  60. </view>
  61. </view>
  62. <scroll-view class="main" scroll-y="true" @scroll="scrollHome">
  63. <!-- 店铺信息 -->
  64. <view id="store" class="store">
  65. <image :src="store.mer_avatar"></image>
  66. <view class="text">
  67. <navigator :url="`/pages/store/detail/index?id=${id}`" hover-class="none">
  68. <text v-if="store.is_trader" class="font-bg-red">自营</text>
  69. <text class="name">{{ store.mer_name }}</text>
  70. <text class="iconfont icon-xiangyou"></text>
  71. </navigator>
  72. <view class="score">
  73. <view class="star">
  74. <view :style="{ width: `${score.star.toFixed(2)}%` }"></view>
  75. </view>
  76. <view>{{ score.number.toFixed(1) }}</view>
  77. </view>
  78. </view>
  79. <button hover-class="none" :class="store.care ? 'care' : ''" v-if="!isLogin" @click="authOpen">
  80. <text v-show="!store.care" class="iconfont icon-guanzhu"></text>
  81. {{ store.care ? '已关注' : '关注' }}
  82. </button>
  83. <button v-else hover-class="none" :class="store.care ? 'care' : ''" @click="followToggle">
  84. <text v-show="!store.care" class="iconfont icon-guanzhu"></text>
  85. {{ store.care ? '已关注' : '关注' }}
  86. </button>
  87. </view>
  88. <view v-show="!navShow && tabActive === 0" class="nav">
  89. <view class="nav-cont">
  90. <view :class="{ active: navActive === 0 }" class="item" @click="navActive = 0;select.show = !select.show">
  91. <view class="cont">
  92. {{ select.selected ? '评分' : '默认' }}
  93. <text :class="['arrow-icon', 'iconfont', select.show ? 'icon-xiangshang' : 'icon-xiangxia']"></text>
  94. </view>
  95. </view>
  96. <view :class="{ active: navActive === 1 }" class="item" @click="set_where(2)">
  97. <view class="cont">
  98. 销量
  99. </view>
  100. </view>
  101. <view :class="{ active: navActive === 2 }" class="item" @click="set_where(3)">
  102. <view class="cont">
  103. 价格
  104. <image v-if="navActive === 2 && where.order == 'price_asc'" src="/static/images/up.png"></image>
  105. <image v-if="navActive === 2 && where.order == 'price_desc'" src="/static/images/down.png"></image>
  106. </view>
  107. </view>
  108. <view :class="{ active: navActive === 3 }" class="item" @click="set_where(4)">
  109. <view class="cont">
  110. 新品
  111. </view>
  112. </view>
  113. <view :class="{ active: navActive === 5 }" class="item" @click="set_where(5)">
  114. <view class="cont">
  115. 活动
  116. </view>
  117. </view>
  118. <view :class="{ active: navActive === 4 }" class="item" @click="select.show = false;navActive = 4;isColumn = !isColumn">
  119. <view class="cont">
  120. <text :class="['layout-icon', 'iconfont', isColumn ? 'icon-pailie' : 'icon-tupianpailie']"></text>
  121. </view>
  122. </view>
  123. </view>
  124. <view v-show="select.show && !navShow" class="select">
  125. <view v-for="item in select.options" :key="item.id" :class="{ active: item.id === select.selected }" class="item"
  126. @click="set_where(item.id)">{{ item.name }}</view>
  127. </view>
  128. </view>
  129. <view class="tab-cont">
  130. <!-- 首页 -->
  131. <view v-show="tabActive === 0">
  132. <!-- 商品 -->
  133. <view class="goods-wrap">
  134. <view v-if="goods.length" :class="{ column: isColumn }" class="goods">
  135. <view v-for="item in goods" :key="item.product_id" class="item" @click="goGoodsDetail(item)">
  136. <view class="image">
  137. <image :src="item.image"></image>
  138. </view>
  139. <view class="text">
  140. <view class="name">
  141. <span v-if="item.product_type != 0" :class="'font_bg-red type'+item.product_type">{{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}</span>
  142. {{ item.store_name }}
  143. </view>
  144. <view class="money-wrap">
  145. <view class="money">
  146. ¥
  147. <text>{{ item.price }}</text>
  148. </view>
  149. <view class="ticket" v-if="item.issetCoupon">领券</view>
  150. </view>
  151. <view class="score">{{ item.rate }}评分 {{ item.reply_count }}条评论</view>
  152. </view>
  153. <view v-if="item.max_extension && (item.product_type == 0 || item.product_type == 2)" class="foot">
  154. <text v-show="!isColumn" class="iconfont"></text>
  155. 最高赚 ¥{{ item.max_extension }}
  156. </view>
  157. </view>
  158. </view>
  159. <view :hidden="!goodsLoading" class="acea-row row-center-wrapper loadingicon">
  160. <text class="iconfont icon-jiazai loading"></text>
  161. </view>
  162. <emptyPage v-if="goods.length == 0 && !goodsLoading" title="暂无商品~"></emptyPage>
  163. </view>
  164. </view>
  165. <!-- 分类 -->
  166. <view v-show="tabActive === 1">
  167. <view class="category">
  168. <view class="section">
  169. <view class="head" @click="goCategoryGoods('')">
  170. <view class="title">全部</view>
  171. <view class="iconfont icon-xiangyou"></view>
  172. </view>
  173. </view>
  174. <view v-for="item in category" :key="item.store_category_id" class="section">
  175. <view class="head" @click="goCategoryGoods(item.store_category_id)">
  176. <view class="title">{{ item.cate_name }}</view>
  177. <view class="iconfont icon-xiangyou"></view>
  178. </view>
  179. <view v-if="item.children" class="body">
  180. <view v-for="value in item.children" :key="value.store_category_id" class="item" @click="goCategoryGoods(value.store_category_id)">{{ value.cate_name }}</view>
  181. </view>
  182. </view>
  183. </view>
  184. <view :hidden="!categoryLoading" class="acea-row row-center-wrapper loadingicon">
  185. <text class="iconfont icon-jiazai loading"></text>{{loadTitle}}
  186. </view>
  187. </view>
  188. <!-- 优惠券 -->
  189. <view v-show="tabActive === 2">
  190. <view v-if="coupon.length" class="coupon">
  191. <view v-for="item in coupon" :key="item.coupon_id" class="item">
  192. <view class="left" :class="{gary:item.issue}">
  193. <view class="money">
  194. ¥
  195. <text>{{ item.coupon_price }}</text>
  196. </view>
  197. <view>满{{ item.use_min_price }}元可用</view>
  198. </view>
  199. <view class="right">
  200. <view class="name">
  201. <text :class="{gary:item.issue}">{{item.type===0?'店铺券':'商品券'}}</text>
  202. <!--购物满{{ item.use_min_price }}元可用-->
  203. {{ item.title }}
  204. </view>
  205. <view class="time-wrap" style="justify-content: space-between;">
  206. <block v-if="item.coupon_type == 1">
  207. <view class="time">{{ item.use_start_time | dateFormat }}-{{ item.use_end_time | dateFormat }}</view>
  208. </block>
  209. <block v-if="item.coupon_type == 0">
  210. <view>领取后{{ item.coupon_time}}天内可用</view>
  211. </block>
  212. <block v-if="item.issue">
  213. <view class="button gary">已领取</view>
  214. </block>
  215. <block v-else>
  216. <view class="button" @click="receiveCoupon(item)">立即领取</view>
  217. </block>
  218. </view>
  219. </view>
  220. </view>
  221. </view>
  222. <emptyPage v-if="coupon.length == 0" title="暂无优惠券~"></emptyPage>
  223. </view>
  224. </view>
  225. </scroll-view>
  226. <view class="footer">
  227. <view v-for="(item, index) in tabs" :key="index" :class="{ active: tabActive === index }" class="item" @click="tab(index)">
  228. <view :class="['iconfont', item.icon]"></view>
  229. <view>{{ item.name }}</view>
  230. </view>
  231. </view>
  232. <!-- #ifdef MP -->
  233. <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize>
  234. <!-- #endif -->
  235. </view>
  236. </template>
  237. <script>
  238. import request from "@/utils/request.js";
  239. import {
  240. getStoreDetail,
  241. getStoreGoods,
  242. getStoreCategory,
  243. followStore,
  244. unfollowStore
  245. } from '@/api/store.js';
  246. import {openBargainSubscribe} from '@/utils/SubscribeMessage.js';
  247. import {initiateAssistApi} from '@/api/activity.js';
  248. import {
  249. getShopCoupons,
  250. setCouponReceive,
  251. } from '@/api/api.js';
  252. import {
  253. getUserInfo
  254. } from '@/api/user.js';
  255. import {
  256. mapGetters
  257. } from "vuex";
  258. import {
  259. goShopDetail
  260. } from '@/libs/order.js';
  261. import {
  262. toLogin
  263. } from '@/libs/login.js';
  264. // #ifdef MP
  265. import authorize from '@/components/Authorize';
  266. // #endif
  267. import history from "@/mixins/history";
  268. import emptyPage from '@/components/emptyPage.vue'
  269. import shareScence from "@/libs/spread";
  270. const app = getApp();
  271. export default {
  272. components: {
  273. // #ifdef MP
  274. authorize,
  275. // #endif
  276. emptyPage
  277. },
  278. mixins: [history],
  279. filters: {
  280. dateFormat: function(value) {
  281. if (!value) {
  282. return '';
  283. }
  284. return value.split(' ')[0].replace('-', '.');
  285. }
  286. },
  287. data() {
  288. return {
  289. systemInfo: uni.getSystemInfoSync(),
  290. // #ifdef MP
  291. menuButtonInfo: uni.getMenuButtonBoundingClientRect(),
  292. // #endif
  293. id: 0, // 商铺id
  294. store: {}, // 商铺详情
  295. goods: [], // 商铺商品
  296. category: [], // 商铺分类
  297. coupon: [], // 优惠券
  298. isColumn: true, // 商品列表排列方式
  299. navShow: false,
  300. navActive: 0,
  301. tabActive: 0, // 底部切换
  302. keyword: '',
  303. order: '',
  304. sortPrice: true, // 价格排序
  305. goodsLoading: false,
  306. categoryLoading: false,
  307. loadTitle: '加载更多',
  308. isShowAuth: false, //是否隐藏授权
  309. isAuto: false, //没有授权的不会自动授权
  310. where: {
  311. order: '',
  312. keyword: '',
  313. page: 1,
  314. limit: 100
  315. },
  316. // 下拉菜单
  317. select: {
  318. show: false,
  319. selected: 0,
  320. options: [{
  321. id: 0,
  322. name: '默认'
  323. },
  324. {
  325. id: 1,
  326. name: '评分'
  327. }
  328. ]
  329. },
  330. // 底部菜单
  331. tabs: [{
  332. icon: 'icon-yizhan_o',
  333. name: '首页'
  334. },
  335. {
  336. icon: 'icon-yingyongAPP_o',
  337. name: '分类'
  338. },
  339. {
  340. icon: 'icon-huobiliu_o',
  341. name: '领券'
  342. },
  343. {
  344. icon: 'icon-kefu_o',
  345. name: '联系客服'
  346. }
  347. ],
  348. storeScroll: true,
  349. storeTop: 0,
  350. navHeight: 0,
  351. currSpid: ""
  352. }
  353. },
  354. computed: {
  355. score: function() {
  356. let store = this.store,
  357. score = {
  358. star: 0,
  359. number: 0
  360. };
  361. if ('postage_score' in store) {
  362. score.number = (parseFloat(store.postage_score) + parseFloat(store.product_score) + parseFloat(store.service_score)) /
  363. 3;
  364. score.star = score.number / 5 * 100;
  365. }
  366. return score;
  367. },
  368. ...mapGetters(['isLogin', 'uid']),
  369. },
  370. watch: {
  371. tabActive: function(value, old) {
  372. switch (value) {
  373. case 1:
  374. this.getCategory();
  375. break;
  376. case 2:
  377. this.getCoupon();
  378. break;
  379. case 3:
  380. this.tabActive = old
  381. let that = this;
  382. if (that.isLogin === false) {
  383. // #ifdef H5 || APP-PLUS
  384. toLogin();
  385. // #endif
  386. // #ifdef MP
  387. that.$set(that, 'isAuto', true);
  388. that.$set(that, 'isShowAuth', true);
  389. // #endif
  390. } else {
  391. uni.navigateTo({
  392. url: `/pages/chat/customer_list/chat?mer_id=${this.store.mer_id}&uid=${this.uid}`,
  393. });
  394. }
  395. break;
  396. }
  397. },
  398. order: function() {
  399. this.getGoods();
  400. }
  401. },
  402. onLoad: function(options) {
  403. console.log(this.isLogin)
  404. this.id = options.id;
  405. if (options.spid) {
  406. this.currSpid = options.spid
  407. app.globalData.spid = options.spid;
  408. }
  409. // #ifdef MP
  410. if (options.scene) {
  411. let value = this.$util.getUrlParams(decodeURIComponent(options.scene));
  412. if (value.id) this.id = value.id;
  413. //记录推广人uid
  414. if (value.spid) {
  415. this.currSpid = value.spid
  416. app.globalData.spid = value.spid;
  417. }
  418. }
  419. // #endif
  420. shareScence(this.currSpid, this.isLogin)
  421. if (this.isLogin) {
  422. // #ifdef MP
  423. this.getHistory()
  424. // #endif
  425. }
  426. },
  427. onShow() {
  428. this.getStore();
  429. this.getGoods();
  430. },
  431. /**
  432. * 用户点击右上角分享
  433. */
  434. // #ifdef MP
  435. onShareAppMessage: function() {
  436. wx.showShareMenu({
  437. withShareTicket: true,
  438. menus: ['shareAppMessage', 'shareTimeline']
  439. })
  440. let that = this;
  441. return {
  442. title: that.store.mer_name || '',
  443. imageUrl: that.store.mer_avatar || '',
  444. path: '/pages/store/home/index?id=' + that.id + '&spid=' + that.uid,
  445. }
  446. },
  447. onShareTimeline: function() {
  448. let that = this;
  449. return {
  450. title: that.store.mer_name || '',
  451. query: {
  452. id: that.id,
  453. spid: that.uid
  454. },
  455. imageUrl: that.store.mer_avatar || ''
  456. }
  457. },
  458. // #endif
  459. mounted: function() {
  460. const query = uni.createSelectorQuery().in(this);
  461. query.select('#store').boundingClientRect(data => {
  462. this.storeHeight = data.height;
  463. this.storeTop = data.top;
  464. }).exec();
  465. },
  466. methods: {
  467. // 授权回调
  468. onLoadFun() {
  469. this.isShowAuth = false
  470. },
  471. // 授权关闭
  472. authColse: function(e) {
  473. this.isShowAuth = e
  474. },
  475. // 打开授权
  476. authOpen: function() {
  477. let that = this;
  478. if (that.isLogin === false) {
  479. // #ifdef H5 || APP-PLUS
  480. toLogin();
  481. // #endif
  482. // #ifdef MP
  483. that.$set(that, 'isAuto', true);
  484. that.$set(that, 'isShowAuth', true);
  485. // #endif
  486. }
  487. },
  488. // 领取优惠券
  489. receiveCoupon(item) {
  490. let that = this;
  491. if (that.isLogin === false) {
  492. // #ifdef H5 || APP-PLUS
  493. toLogin();
  494. // #endif
  495. // #ifdef MP
  496. that.$set(that, 'isAuto', true);
  497. that.$set(that, 'isShowAuth', true);
  498. // #endif
  499. } else {
  500. setCouponReceive(item.coupon_id).then(res => {
  501. item.issue = 1
  502. uni.showToast({
  503. title: res.message,
  504. icon: 'none'
  505. })
  506. }).catch(err => {
  507. uni.showToast({
  508. title: err,
  509. icon: 'none'
  510. })
  511. })
  512. }
  513. },
  514. // 获取商品详情
  515. getStore: function() {
  516. console.log(this.id)
  517. getStoreDetail(this.id).then(res => {
  518. this.store = res.data;
  519. // #ifdef H5
  520. this.ShareInfo();
  521. // #endif
  522. }).catch(err => {
  523. this.loading = false;
  524. uni.showToast({
  525. title: err,
  526. icon: 'none'
  527. })
  528. setTimeout(function() {
  529. uni.navigateBack()
  530. }, 1000);
  531. })
  532. },
  533. // 获取商铺商品
  534. getGoods: function() {
  535. let that = this;
  536. if (that.loadend) return;
  537. if (that.loading) return;
  538. that.goodsLoading = true;
  539. that.loadTitle = '';
  540. getStoreGoods(that.id, that.where).then(res => {
  541. that.goodsLoading = false;
  542. let list = res.data.list;
  543. let goodsList = that.$util.SplitArray(list, that.goods);
  544. let loadend = list.length < that.where.limit;
  545. that.loadend = loadend;
  546. that.loading = false;
  547. that.loadTitle = loadend ? '已全部加载' : '加载更多';
  548. that.$set(that, 'goods', goodsList);
  549. that.$set(that.where, 'page', that.where.page + 1);
  550. }).catch(err => {
  551. that.loading = false;
  552. that.goodsLoading = false;
  553. uni.showToast({
  554. title: err,
  555. icon: 'none'
  556. })
  557. setTimeout(function() {
  558. uni.navigateBack()
  559. }, 1000);
  560. });
  561. },
  562. // 获取商铺分类
  563. getCategory: function() {
  564. if (this.category.length) {
  565. return;
  566. }
  567. this.categoryLoading = true;
  568. getStoreCategory(this.id).then(res => {
  569. this.categoryLoading = false;
  570. this.category = res.data;
  571. });
  572. },
  573. // 获取商铺优惠券
  574. getCoupon: function() {
  575. if (this.coupon.length) {
  576. return;
  577. }
  578. getShopCoupons(this.id).then(res => {
  579. this.coupon = res.data;
  580. });
  581. },
  582. // 关注商铺
  583. follow: function() {
  584. followStore(this.id).then(res => {
  585. if (res.status === 200) {
  586. this.store.care = true;
  587. }
  588. this.$util.Tips({
  589. title: res.message
  590. });
  591. });
  592. },
  593. // 取消关注
  594. unfollow: function() {
  595. unfollowStore(this.id).then(res => {
  596. if (res.status === 200) {
  597. this.store.care = false;
  598. }
  599. this.$util.Tips({
  600. title: res.message
  601. });
  602. });
  603. },
  604. // 设置是否关注
  605. followToggle: function() {
  606. this.store.care ? this.unfollow() : this.follow();
  607. },
  608. // 选择条件展示商品
  609. set_where: function(param) {
  610. this.select.show = false;
  611. this.loading = false;
  612. this.loadend = false;
  613. this.where.page = 1;
  614. this.goods = [];
  615. this.where.action = ""
  616. switch (param) {
  617. case 0:
  618. this.select.selected = 0;
  619. this.where.order = '';
  620. this.getGoods();
  621. break;
  622. case 1:
  623. this.select.selected = 1;
  624. this.where.order = 'rate';
  625. this.getGoods();
  626. break;
  627. case 2:
  628. this.navActive = 1;
  629. this.where.order = 'sales';
  630. this.getGoods();
  631. break;
  632. case 3:
  633. this.navActive = 2;
  634. this.sortPrice = !this.sortPrice;
  635. this.where.order = this.sortPrice ? 'price_asc' : 'price_desc';
  636. this.getGoods();
  637. break;
  638. case 4:
  639. this.navActive = 3;
  640. this.where.order = 'is_new';
  641. this.getGoods();
  642. break;
  643. case 5:
  644. this.navActive = 5;
  645. this.where.action = 1;
  646. this.where.order = ""
  647. this.getGoods();
  648. break;
  649. }
  650. },
  651. // 去分类商品页
  652. goCategoryGoods: function(id) {
  653. uni.navigateTo({
  654. url: `/pages/store/list/index?id=${id}&mer_id=${this.id}`
  655. })
  656. },
  657. // 去商品详情页
  658. goGoodsDetail(item) {
  659. goShopDetail(item, this.uid).then(res => {
  660. if (this.isLogin) {
  661. initiateAssistApi(item.activity_id).then(res => {
  662. let id = res.data.product_assist_set_id;
  663. uni.hideLoading();
  664. // #ifndef MP
  665. uni.navigateTo({
  666. url: '/pages/activity/assist_detail/index?id=' + id
  667. });
  668. // #endif
  669. // #ifdef MP
  670. openBargainSubscribe().then(res => {
  671. uni.hideLoading();
  672. uni.navigateTo({
  673. url: '/pages/activity/assist_detail/index?id=' + id
  674. });
  675. }).catch((err) => {
  676. uni.hideLoading();
  677. });
  678. // #endif
  679. }).catch((err) => {
  680. uni.showToast({
  681. title: err,
  682. icon: 'none'
  683. })
  684. });
  685. } else {
  686. // #ifdef H5 || APP-PLUS
  687. toLogin();
  688. // #endif
  689. // #ifdef MP
  690. this.isAuto = true;
  691. this.$set(this, 'isShowAuth', true);
  692. // #endif
  693. }
  694. })
  695. },
  696. // 商铺首页滚动 navbar 吸顶
  697. scrollHome: function(e) {
  698. this.navShow = e.detail.scrollTop >= this.storeHeight - 50;
  699. },
  700. goback: function() {
  701. uni.navigateBack();
  702. },
  703. // 首页
  704. goHome() {
  705. uni.switchTab({
  706. url: '/pages/index/index'
  707. });
  708. },
  709. // 商铺底部切换
  710. tab: function(param) {
  711. this.tabActive = param;
  712. },
  713. //#ifdef H5
  714. ShareInfo() {
  715. let data = this.store;
  716. let href = location.href;
  717. if (this.$wechat.isWeixin()) {
  718. getUserInfo().then(res => {
  719. href =
  720. href.indexOf("?") === -1 ?
  721. href + "?spid=" + res.data.uid :
  722. href + "&spid=" + res.data.uid;
  723. let configAppMessage = {
  724. desc: data.mer_info,
  725. title: data.mer_name,
  726. link: href,
  727. imgUrl: data.mer_avatar
  728. };
  729. this.$wechat.wechatEvevt([
  730. "updateAppMessageShareData",
  731. "updateTimelineShareData",
  732. "onMenuShareAppMessage",
  733. "onMenuShareTimeline"
  734. ], configAppMessage).then(res => {
  735. console.log(res, '=============================>>WXAPI');
  736. }).catch(err => {
  737. console.log(err);
  738. })
  739. });
  740. }
  741. },
  742. //#endif
  743. }
  744. }
  745. </script>
  746. <style lang="scss">
  747. /deep/ .care {
  748. background-image: none !important;
  749. border: 1px solid #fff;
  750. background-color: transparent;
  751. }
  752. .store-home {
  753. position: fixed;
  754. top: 0;
  755. right: 0;
  756. bottom: 0;
  757. left: 0;
  758. display: flex;
  759. flex-direction: column;
  760. padding-bottom: 100rpx;
  761. background: left top/750rpx 360rpx no-repeat fixed;
  762. overflow: hidden;
  763. }
  764. .header {
  765. position: relative;
  766. z-index: 6;
  767. display: flex;
  768. align-items: center;
  769. padding-right: 34rpx;
  770. height: 86rpx;
  771. padding-left: 33rpx;
  772. .head-menu {
  773. display: -webkit-box;
  774. display: -webkit-flex;
  775. display: flex;
  776. -webkit-box-align: center;
  777. -webkit-align-items: center;
  778. align-items: center;
  779. height: 27px;
  780. width: 70px;
  781. background: rgba(0, 0, 0, 0.25);
  782. border-radius: 13px;
  783. .icon-xiangzuo {
  784. font-size: 32rpx;
  785. color: #FFFFFF;
  786. }
  787. .iconfont {
  788. -webkit-box-flex: 1;
  789. -webkit-flex: 1;
  790. flex: 1;
  791. text-align: center;
  792. color: #fff;
  793. box-sizing: border-box;
  794. &.icon-xiangzuo {
  795. border-right: 1px solid #fff;
  796. }
  797. }
  798. }
  799. .search {
  800. flex: 1;
  801. display: flex;
  802. align-items: center;
  803. min-width: 0;
  804. height: 58rpx;
  805. border-radius: 29rpx;
  806. margin-left: 32rpx;
  807. background-color: #FFFFFF;
  808. font-weight: 500;
  809. font-size: 26rpx;
  810. color: #999999;
  811. .iconfont {
  812. margin-right: 13rpx;
  813. margin-left: 30rpx;
  814. font-size: 24rpx;
  815. }
  816. }
  817. }
  818. .main {
  819. flex: 1;
  820. min-height: 0rpx;
  821. }
  822. .store {
  823. position: relative;
  824. z-index: 6;
  825. display: flex;
  826. align-items: center;
  827. padding-right: 20rpx;
  828. padding-left: 20rpx;
  829. padding-top: 20rpx;
  830. padding-bottom: 22rpx;
  831. image {
  832. width: 74rpx;
  833. height: 74rpx;
  834. border-radius: 6rpx;
  835. }
  836. .text {
  837. flex: 1;
  838. min-width: 0;
  839. margin-right: 20rpx;
  840. margin-left: 20rpx;
  841. navigator {
  842. display: inline-flex;
  843. align-items: center;
  844. max-width: 100%;
  845. .name {
  846. flex: 1;
  847. min-width: 0;
  848. overflow: hidden;
  849. white-space: nowrap;
  850. text-overflow: ellipsis;
  851. font-weight: bold;
  852. font-size: 30rpx;
  853. line-height: 1;
  854. color: #FFFFFF;
  855. }
  856. .iconfont {
  857. margin-left: 10rpx;
  858. font-size: 17rpx;
  859. color: #FFFFFF;
  860. }
  861. }
  862. .score {
  863. display: flex;
  864. align-items: center;
  865. margin-top: 17rpx;
  866. font-weight: 500;
  867. font-size: 24rpx;
  868. line-height: 1;
  869. color: #FFFFFF;
  870. .star {
  871. position: relative;
  872. width: 111rpx;
  873. height: 19rpx;
  874. margin-right: 10rpx;
  875. background: url(../../columnGoods/images/star.png) left top/100% 100% no-repeat;
  876. overflow: hidden;
  877. view {
  878. position: absolute;
  879. top: 0;
  880. left: 0;
  881. width: 100%;
  882. height: 100%;
  883. background: url(../../columnGoods/images/star_active.png) left top/111rpx 19rpx no-repeat;
  884. }
  885. }
  886. }
  887. }
  888. button {
  889. display: flex;
  890. justify-content: center;
  891. align-items: center;
  892. width: 113rpx;
  893. height: 48rpx;
  894. border-radius: 24rpx;
  895. background-image: linear-gradient(-90deg, rgba(246, 122, 56, 1) 0%, rgba(241, 27, 9, 1) 100%);
  896. font-weight: 500;
  897. font-size: 22rpx;
  898. color: #FFFFFF;
  899. .iconfont {
  900. margin-right: 6rpx;
  901. font-size: 22rpx;
  902. }
  903. &.gary {
  904. background-color: #999;
  905. }
  906. }
  907. }
  908. .nav.fixed {
  909. position: fixed;
  910. left: 0;
  911. width: 100%;
  912. .nav-cont {
  913. position: absolute;
  914. width: 100%;
  915. }
  916. }
  917. .nav {
  918. position: relative;
  919. .nav-cont {
  920. display: flex;
  921. align-items: center;
  922. height: 84rpx;
  923. .item {
  924. flex: 1;
  925. display: flex;
  926. justify-content: center;
  927. align-items: center;
  928. min-width: 0;
  929. .cont {
  930. display: flex;
  931. justify-content: center;
  932. align-items: center;
  933. width: 116rpx;
  934. height: 44rpx;
  935. border-radius: 22rpx;
  936. font-weight: 500;
  937. font-size: 24rpx;
  938. color: #FFFFFF;
  939. .arrow-icon {
  940. margin-left: 10rpx;
  941. font-size: 18rpx;
  942. }
  943. .layout-icon {
  944. font-size: 32rpx;
  945. }
  946. .icon-pailie {
  947. font-size: 32rpx;
  948. }
  949. image {
  950. width: 15rpx;
  951. height: 21rpx;
  952. margin-left: 7rpx;
  953. }
  954. }
  955. }
  956. .active {
  957. .cont {
  958. background-color: #FFFFFF;
  959. font-weight: bold;
  960. color: $theme-color;
  961. }
  962. }
  963. }
  964. .select {
  965. position: absolute;
  966. top: 100%;
  967. left: 0;
  968. z-index: 2;
  969. width: 100%;
  970. padding-right: 40rpx;
  971. padding-bottom: 28rpx;
  972. padding-left: 74rpx;
  973. border-bottom-right-radius: 24rpx;
  974. border-bottom-left-radius: 24rpx;
  975. background-color: #FFFFFF;
  976. .item {
  977. margin-top: 28rpx;
  978. font-size: 24rpx;
  979. color: #454545;
  980. }
  981. .active {
  982. background: url(../../../static/images/active.png) right center/20rpx no-repeat;
  983. color: #E93323;
  984. }
  985. }
  986. }
  987. .goods {
  988. display: flex;
  989. flex-wrap: wrap;
  990. justify-content: space-between;
  991. padding-top: 20rpx;
  992. padding-right: 20rpx;
  993. padding-left: 20rpx;
  994. background-color: #F5F5F5;
  995. width: 750rpx;
  996. .item {
  997. width: 345rpx;
  998. border-radius: 16rpx;
  999. margin-bottom: 20rpx;
  1000. background-color: #FFFFFF;
  1001. overflow: hidden;
  1002. .image {
  1003. width: 345rpx;
  1004. height: 345rpx;
  1005. image {
  1006. display: block;
  1007. width: 100%;
  1008. height: 100%;
  1009. }
  1010. }
  1011. .text {
  1012. padding: 20rpx 20rpx 25rpx;
  1013. .name {
  1014. overflow: hidden;
  1015. white-space: nowrap;
  1016. text-overflow: ellipsis;
  1017. font-weight: 500;
  1018. font-size: 30rpx;
  1019. line-height: 1;
  1020. color: #222222;
  1021. }
  1022. .money-wrap {
  1023. display: flex;
  1024. align-items: center;
  1025. margin-top: 43rpx;
  1026. .money {
  1027. font-weight: bold;
  1028. font-size: 26rpx;
  1029. color: $theme-color;
  1030. text {
  1031. font-size: 34rpx;
  1032. line-height: 1;
  1033. }
  1034. }
  1035. .ticket {
  1036. height: 26rpx;
  1037. padding-right: 9rpx;
  1038. padding-left: 9rpx;
  1039. border: 1rpx solid $theme-color;
  1040. border-radius: 4rpx;
  1041. margin-left: 10rpx;
  1042. font-weight: 500;
  1043. font-size: 20rpx;
  1044. line-height: 24rpx;
  1045. color: $theme-color;
  1046. }
  1047. }
  1048. .score {
  1049. margin-top: 20rpx;
  1050. font-weight: 500;
  1051. font-size: 20rpx;
  1052. line-height: 1;
  1053. color: #737373;
  1054. }
  1055. }
  1056. .foot {
  1057. display: flex;
  1058. justify-content: center;
  1059. align-items: center;
  1060. height: 52rpx;
  1061. background: linear-gradient(to right, #F11B09, #F67A38);
  1062. font-weight: 500;
  1063. font-size: 24rpx;
  1064. color: #FFFFFF;
  1065. .iconfont {
  1066. margin-right: 10rpx;
  1067. font-size: 22rpx;
  1068. line-height: 1;
  1069. }
  1070. }
  1071. }
  1072. }
  1073. .column {
  1074. padding: 0;
  1075. background-color: #FFFFFF;
  1076. .item {
  1077. position: relative;
  1078. display: flex;
  1079. align-items: center;
  1080. width: 100%;
  1081. padding: 30rpx 20rpx;
  1082. border-radius: 0;
  1083. margin-bottom: 0;
  1084. &::before {
  1085. content: " ";
  1086. position: absolute;
  1087. top: 0;
  1088. right: 20rpx;
  1089. left: 250rpx;
  1090. border-top: 1rpx solid #F5F5F5;
  1091. }
  1092. .image {
  1093. width: 200rpx;
  1094. height: 200rpx;
  1095. border-radius: 16rpx;
  1096. overflow: hidden;
  1097. }
  1098. .text {
  1099. position: relative;
  1100. flex: 1;
  1101. min-width: 0;
  1102. padding-top: 0;
  1103. padding-right: 0;
  1104. padding-bottom: 0;
  1105. .name {
  1106. color: #282828;
  1107. }
  1108. .money-wrap {
  1109. display: flex;
  1110. flex-direction: column;
  1111. align-items: flex-start;
  1112. margin-top: 52rpx;
  1113. .ticket {
  1114. height: 28rpx;
  1115. padding-right: 12rpx;
  1116. padding-left: 12rpx;
  1117. border: none;
  1118. border-radius: 0;
  1119. margin-top: 17rpx;
  1120. margin-left: 0;
  1121. background: url(../../../static/images/yh.png) top left/100% 100% no-repeat;
  1122. line-height: 28rpx;
  1123. }
  1124. }
  1125. }
  1126. .foot {
  1127. position: absolute;
  1128. right: 20rpx;
  1129. bottom: 30rpx;
  1130. height: 44rpx;
  1131. padding-right: 17rpx;
  1132. padding-left: 17rpx;
  1133. border-radius: 22rpx;
  1134. font-size: 22rpx;
  1135. color: #F5F5F5;
  1136. }
  1137. }
  1138. }
  1139. .category {
  1140. padding-top: 34rpx;
  1141. padding-right: 20rpx;
  1142. padding-left: 20rpx;
  1143. .section {
  1144. border-radius: 10rpx;
  1145. margin-bottom: 20rpx;
  1146. background-color: #FFFFFF;
  1147. .head {
  1148. position: relative;
  1149. display: flex;
  1150. align-items: center;
  1151. height: 90rpx;
  1152. padding-right: 20rpx;
  1153. padding-left: 36rpx;
  1154. font-weight: bold;
  1155. color: #282828;
  1156. &::before {
  1157. content: " ";
  1158. position: absolute;
  1159. top: 50%;
  1160. left: 20rpx;
  1161. width: 6rpx;
  1162. height: 24rpx;
  1163. background-color: $theme-color;
  1164. transform: translateY(-50%);
  1165. }
  1166. .title {
  1167. flex: 1;
  1168. min-width: 0;
  1169. overflow: hidden;
  1170. white-space: nowrap;
  1171. text-overflow: ellipsis;
  1172. font-size: 30rpx;
  1173. }
  1174. .iconfont {
  1175. font-size: 22rpx;
  1176. line-height: 1;
  1177. }
  1178. }
  1179. .body {
  1180. display: flex;
  1181. flex-wrap: wrap;
  1182. justify-content: space-between;
  1183. align-items: center;
  1184. padding: 9rpx 36rpx 14rpx;
  1185. .item {
  1186. width: 314rpx;
  1187. height: 84rpx;
  1188. padding-right: 30rpx;
  1189. padding-left: 30rpx;
  1190. border-radius: 10rpx;
  1191. background-color: #F5F5F5;
  1192. margin-bottom: 10rpx;
  1193. overflow: hidden;
  1194. white-space: nowrap;
  1195. text-overflow: ellipsis;
  1196. font-weight: 500;
  1197. font-size: 26rpx;
  1198. line-height: 84rpx;
  1199. color: #282828;
  1200. }
  1201. }
  1202. }
  1203. }
  1204. .coupon {
  1205. padding: 30rpx;
  1206. margin-top: 34rpx;
  1207. background-color: #F5F5F5;
  1208. .item {
  1209. display: flex;
  1210. margin-bottom: 16rpx;
  1211. .left {
  1212. display: flex;
  1213. flex-direction: column;
  1214. justify-content: center;
  1215. align-items: center;
  1216. width: 240rpx;
  1217. background: url(../static/images/coupon1.png) left top/100% 100% no-repeat;
  1218. font-weight: 500;
  1219. font-size: 24rpx;
  1220. line-height: 1;
  1221. color: #FFFFFF;
  1222. &.gary {
  1223. background-image: url('data:image/png;base64,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');
  1224. }
  1225. .money {
  1226. margin-bottom: 25rpx;
  1227. font-weight: 800;
  1228. font-size: 36rpx;
  1229. text {
  1230. margin-left: 10rpx;
  1231. font-size: 60rpx;
  1232. }
  1233. }
  1234. }
  1235. .right {
  1236. flex: 1;
  1237. min-width: 0;
  1238. padding-right: 18rpx;
  1239. padding-left: 27rpx;
  1240. background-color: #FFFFFF;
  1241. .name {
  1242. padding-top: 32rpx;
  1243. padding-bottom: 32rpx;
  1244. border-bottom: 1rpx solid #F0F0F0;
  1245. font-weight: 500;
  1246. font-size: 30;
  1247. line-height: 1;
  1248. color: #282828;
  1249. text {
  1250. display: inline-block;
  1251. width: 84rpx;
  1252. height: 28rpx;
  1253. border: 1rpx solid $theme-color;
  1254. border-radius: 14rpx;
  1255. margin-right: 15rpx;
  1256. background-color: #FFF4F3;
  1257. font-weight: 500;
  1258. font-size: 20rpx;
  1259. line-height: 26rpx;
  1260. text-align: center;
  1261. color: $theme-color;
  1262. &.gary {
  1263. border-color: #BBB;
  1264. color: #bbb;
  1265. background-color: #F5F5F5;
  1266. }
  1267. }
  1268. }
  1269. .time-wrap {
  1270. display: flex;
  1271. align-items: center;
  1272. padding-top: 16rpx;
  1273. padding-bottom: 16rpx;
  1274. font-weight: 500;
  1275. font-size: 20rpx;
  1276. color: #999999;
  1277. .time {
  1278. flex: 1;
  1279. min-width: 0;
  1280. }
  1281. .button {
  1282. width: 136rpx;
  1283. height: 44rpx;
  1284. border-radius: 22rpx;
  1285. background-color: $theme-color;
  1286. font-weight: 500;
  1287. font-size: 22rpx;
  1288. line-height: 44rpx;
  1289. text-align: center;
  1290. color: #FFFFFF;
  1291. &.gary {
  1292. background-color: #999;
  1293. }
  1294. }
  1295. }
  1296. }
  1297. }
  1298. .disabled {
  1299. .left {
  1300. background-image: url(../static/images/coupon2.png);
  1301. }
  1302. .right {
  1303. .name {
  1304. text {
  1305. border-color: #C1C1C1;
  1306. color: #C1C1C1;
  1307. }
  1308. }
  1309. .time-wrap {
  1310. .button {
  1311. background-color: #CCCCCC;
  1312. color: #FFFFFF;
  1313. }
  1314. }
  1315. }
  1316. }
  1317. }
  1318. .footer {
  1319. position: fixed;
  1320. bottom: 0;
  1321. left: 0;
  1322. z-index: 5;
  1323. display: flex;
  1324. width: 100%;
  1325. height: 100rpx;
  1326. background-color: #FFFFFF;
  1327. opacity: 0.96;
  1328. .item {
  1329. flex: 1;
  1330. display: flex;
  1331. flex-direction: column;
  1332. justify-content: center;
  1333. align-items: center;
  1334. font-weight: 500;
  1335. font-size: 20rpx;
  1336. color: #282828;
  1337. .iconfont {
  1338. font-size: 43rpx;
  1339. }
  1340. }
  1341. .active {
  1342. color: $theme-color;
  1343. }
  1344. }
  1345. </style>