index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915
  1. <template>
  2. <view :style="viewColor">
  3. <view class='productList'>
  4. <view class='search acea-row row-between-wrapper'>
  5. <!--#ifdef H5-->
  6. <view v-if='!$wechat.isWeixin()' class="back" @click='set_where(1)'>
  7. <view class="iconfont icon-xiangzuo"></view>
  8. </view>
  9. <!--#endif-->
  10. <view class='input acea-row row-between-wrapper'><text class='iconfont icon-sousuo'></text>
  11. <input placeholder='搜索商品名称' placeholder-class='placeholder' confirm-type='search' name="search" :value='where.keyword'
  12. @confirm="searchSubmit"></input>
  13. </view>
  14. <view style="text-align: right;" class='iconfont' :class='is_switch==true?"icon-pailie":"icon-tupianpailie"' @click='Changswitch'></view>
  15. </view>
  16. <view class="nav-wrapper">
  17. <view class='nav acea-row row-middle'>
  18. <view class='item' @click="downStatus = !downStatus" :class="{'t-color':downKey>0 && firstKey == 0}">
  19. {{downMenu[downKey].title}}
  20. <text v-if="!downStatus" class="iconfont icon-xiala1 spin"></text>
  21. <text v-else class="iconfont icon-xiala1"></text>
  22. </view>
  23. <view class='item' :class="{'t-color':firstKey == 3}" @click='set_where(3)'>
  24. 销量
  25. </view>
  26. <view class='item' :class="{'t-color':firstKey == 2}" @click='set_where(2)'>
  27. 价格
  28. <image v-if="price==1" :src="domain+'/static/diy/up'+keyColor+'.png'"></image>
  29. <image v-else-if="price==2" :src="domain+'/static/diy/down'+keyColor+'.png'"></image>
  30. <image v-else :src='`${domain}/static/images/horn.png`'></image>
  31. </view>
  32. <!-- down -->
  33. <view class='item' :class="{'t-color':firstKey == 4}" @click='bindRight'>
  34. 筛选
  35. <text class="iconfont icon-shaixuan"></text>
  36. </view>
  37. </view>
  38. </view>
  39. <!-- 商品 -->
  40. <block>
  41. <view v-if="!is_switch" class='list acea-row row-between-wrapper on'>
  42. <view class='item on' hover-class='none' v-for="(item,index) in productList" :key="index"
  43. @click="godDetail(item)">
  44. <view class='pictrue on'>
  45. <image :src='item.image' class="on"></image>
  46. <view v-if="item.border_pic" :style="{ backgroundImage: `url(${item.border_pic})` }" class="border-picture"></view>
  47. </view>
  48. <view class='text on'>
  49. <view class='name line1'>
  50. <text class="text_name line2">{{item.store_name}}</text>
  51. </view>
  52. <view class='money on'>¥<text class='num'>{{item.price}}</text></view>
  53. <view class="item_tags">
  54. <text v-if="item.merchant&&item.merchant.type_name && item.product_type == 0" class="font-bg-red bt-color">{{item.merchant.type_name}}</text>
  55. <text v-else-if="item.merchant.is_trader && item.product_type == 0" class="font-bg-red bt-color">自营</text>
  56. <text v-if="item.product_type != 0" :class="'font_bg-red bt-color type'+item.product_type">{{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}</text>
  57. <text class="tags_item ticket" v-if="item.issetCoupon">领券</text>
  58. <text class="tags_item delivery" v-if="item.delivery_free == 1">包邮</text>
  59. </view>
  60. <view class="score">{{item.rate}}评分 {{item.reply_count}}条评论</view>
  61. <view class="company" v-if="item.merchant" @click.stop="goShop(item.mer_id)">
  62. <text class="line1">{{item.merchant.mer_name}}</text>
  63. <view class="flex">
  64. 进店
  65. <text class="iconfont icon-xiangyou"></text>
  66. </view>
  67. </view>
  68. </view>
  69. <!-- 返佣 -->
  70. <block v-if="item.max_extension>0 && (item.product_type == 0 || item.product_type == 2)">
  71. <view class="foot-bar on">
  72. 最高赚 ¥{{item.max_extension}}
  73. </view>
  74. </block>
  75. </view>
  76. </view>
  77. <view v-else class='list'>
  78. <WaterfallsFlow :wfList='productList' @itemTap="godDetail" :type="1" @goShop="goShop"/>
  79. </view>
  80. <view class='noCommodity' v-if="productList.length==0 && where.page > 1">
  81. <view class='pictrue' style="margin: 60rpx auto;">
  82. <image :src="`${domain}/static/images/noCart.png`"></image>
  83. <view>暂无商品,去看点什么吧</view>
  84. </view>
  85. <recommend v-if="recommend_switch == 1" :hostProduct="hostProduct" :isLogin="isLogin"></recommend>
  86. </view>
  87. </block>
  88. <rightSlider v-if="rightBox&&brandStataus&&parmasStatus" :status="rightBox&&brandStataus&&parmasStatus" :brandList="brandList" :storeTypeArr="storeTypeArr" :parmasList="parmasList" @confirm="confirm" @close="close" :price_on="where.price_on" :price_off="where.price_off" :activeIndex="activeIndex"></rightSlider>
  89. </view>
  90. <view class="down-wrapper" v-if="downStatus">
  91. <view class="bg" @click="downStatus=false"></view>
  92. <view class="down-box">
  93. <view class="down-item" v-for="(item,index) in downMenu" :key="item.key" :class="{'on':index == downKey}" @click="bindDown(item,index)">
  94. {{item.title}}
  95. <text v-if="index == downKey" class="iconfont icon-gou"></text>
  96. </view>
  97. </view>
  98. </view>
  99. <!-- #ifndef H5 -->
  100. <passwordPopup></passwordPopup>
  101. <!-- #endif -->
  102. </view>
  103. </template>
  104. <script>
  105. // +----------------------------------------------------------------------
  106. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  107. // +----------------------------------------------------------------------
  108. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  109. // +----------------------------------------------------------------------
  110. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  111. // +----------------------------------------------------------------------
  112. // | Author: CRMEB Team <admin@crmeb.com>
  113. // +----------------------------------------------------------------------
  114. import {
  115. getProductslist,
  116. getProductHot,
  117. getBrandlist,
  118. getStoreTypeApi,
  119. getParmasList
  120. } from '@/api/store.js';
  121. import recommend from '@/components/recommend';
  122. import rightSlider from '@/components/rightSlider.vue'
  123. import WaterfallsFlow from '@/components/WaterfallsFlow/WaterfallsFlow.vue'
  124. import {initiateAssistApi} from '@/api/activity.js';
  125. import { configMap } from "@/utils";
  126. import { mapGetters } from "vuex";
  127. // #ifndef H5
  128. import passwordPopup from '@/components/passwordPopup';
  129. // #endif
  130. import { goShopDetail } from '@/libs/order.js'
  131. import { HTTP_REQUEST_URL } from '@/config/app';
  132. import { toLogin } from '@/libs/login.js';
  133. const app = getApp();
  134. export default {
  135. computed: configMap({hide_mer_status: 1,recommend_switch: 0}, mapGetters(['uid','isLogin','scrollTop','viewColor','keyColor'])),
  136. components: {
  137. // #ifndef H5
  138. passwordPopup,
  139. // #endif
  140. recommend,
  141. rightSlider,
  142. WaterfallsFlow,
  143. },
  144. watch:{
  145. },
  146. data() {
  147. return {
  148. domain: HTTP_REQUEST_URL,
  149. productList: [],
  150. list: [],
  151. storeTypeArr: [], //店铺类型
  152. parmasList: [],
  153. is_switch: true,
  154. where: {
  155. cate_pid: '',
  156. order: '',
  157. price_on: '',
  158. price_off: '',
  159. brand_id: '',
  160. mer_type_id: '',
  161. keyword:'',
  162. is_trader: '',
  163. filter_params: '',
  164. page:1,
  165. limit:30
  166. },
  167. price: 0,
  168. stock: 0,
  169. nows: false,
  170. loadend: false,
  171. loading: false,
  172. loadTitle: '加载更多',
  173. title: '',
  174. hostProduct: [],
  175. hotPage: 1,
  176. hotLimit: 10,
  177. hotScroll: false,
  178. // 筛选框
  179. rightBox: false,
  180. brandStataus: false,
  181. parmasStatus: false,
  182. //品牌列表
  183. brandList: [],
  184. downKey: 0,
  185. downStatus: false,
  186. // 下拉菜单
  187. downMenu: [{
  188. title: '综合',
  189. key: 1,
  190. },
  191. {
  192. title: '评分',
  193. key: 2,
  194. },
  195. {
  196. title: '新品',
  197. key: 3,
  198. }
  199. ],
  200. // 是否第一个
  201. firstKey:0,
  202. sotreParam:{
  203. keyword:'',
  204. page:1,
  205. limit:30,
  206. order:'',
  207. },
  208. storeKey:0,
  209. storeScroll:true,
  210. activeIndex: 0,
  211. };
  212. },
  213. // 滚动监听
  214. onPageScroll() {
  215. uni.$emit('scroll');
  216. },
  217. onLoad: function(options) {
  218. this.$set(this.where, 'cate_pid', options.id || '');
  219. this.title = options.title || '';
  220. this.$set(this.where, 'keyword', options.searchValue || '');
  221. this.get_product_list(true);
  222. this.get_host_product();
  223. },
  224. onReady(){
  225. },
  226. mounted: function() {
  227. },
  228. methods: {
  229. // 去店铺
  230. goShop(id){
  231. if(this.hide_mer_status != 1){
  232. uni.navigateTo({
  233. url:`/pages/store/home/index?id=${id}`
  234. })
  235. }
  236. },
  237. // 获取店铺类型
  238. async getStoreType() {
  239. let temp = []
  240. getStoreTypeApi()
  241. .then(res => {
  242. temp = res.data.map(item => {
  243. return {
  244. ...item,
  245. check: false
  246. }
  247. })
  248. this.storeTypeArr = temp
  249. })
  250. .catch(res => {
  251. this.$util.Tips({
  252. title: res
  253. });
  254. });
  255. },
  256. // 获取参数列表
  257. async getParmasList(){
  258. let temp = []
  259. getParmasList({
  260. cate_pid:this.where.cate_pid,
  261. keyword:this.where.keyword
  262. })
  263. .then(res => {
  264. this.parmasStatus = true
  265. temp = res.data.map(item => {
  266. return {
  267. ...item,
  268. check: false,
  269. showValue: false,
  270. parmasValue: []
  271. }
  272. })
  273. this.parmasList = temp
  274. })
  275. .catch(res => {
  276. this.$util.Tips({
  277. title: res
  278. });
  279. });
  280. },
  281. // 右侧切换
  282. bindRight(){
  283. this.price = 0;
  284. this.firstKey = 4;
  285. if(!this.brandList.length)this.getBrandlist()
  286. if(!this.storeTypeArr.length)this.getStoreType()
  287. if(!this.parmasList.length)this.getParmasList()
  288. this.rightBox = true
  289. },
  290. // 品牌列表
  291. async getBrandlist(){
  292. let temp = []
  293. getBrandlist({
  294. cate_pid:this.where.cate_pid,
  295. keyword:this.where.keyword
  296. }).then(res=>{
  297. this.brandStataus = true
  298. temp = res.data.list.map(item=>{
  299. return {
  300. ...item,
  301. check:false
  302. }
  303. })
  304. this.brandList = temp
  305. })
  306. },
  307. // 去详情页
  308. godDetail(item) {
  309. goShopDetail(item, this.uid).then(res => {
  310. if (this.isLogin) {
  311. initiateAssistApi(item.activity_id).then(res => {
  312. let id = res.data.product_assist_set_id;
  313. uni.hideLoading();
  314. uni.navigateTo({
  315. url: '/pages/activity/assist_detail/index?id=' + id
  316. });
  317. }).catch((err) => {
  318. uni.showToast({
  319. title: err,
  320. icon: 'none'
  321. })
  322. });
  323. } else {
  324. toLogin()
  325. }
  326. })
  327. },
  328. // 组件确定
  329. confirm(data,index) {
  330. let arr1 = [],arr2 = []
  331. if(data.brandList.length == 0){
  332. this.where.brand_id = ''
  333. }else{
  334. data.brandList.forEach(item =>{
  335. arr1.push(item.brand_id)
  336. })
  337. this.where.brand_id = arr1.toString()
  338. }
  339. if(data.typeList.length == 0){
  340. this.where.mer_type_id = ''
  341. }else{
  342. data.typeList.forEach(item =>{
  343. arr2.push(item.mer_type_id)
  344. })
  345. this.where.mer_type_id = arr2.toString()
  346. }
  347. this.activeIndex = index
  348. this.where.filter_params = JSON.stringify(data.parmasList)
  349. this.rightBox = data.status
  350. this.where.price_on = data.price_on
  351. this.where.price_off = data.price_off
  352. this.where.is_trader = data.is_trader
  353. this.loadend = false;
  354. this.$set(this.where, 'page', 1)
  355. this.get_product_list(true);
  356. },
  357. // 组件关闭
  358. close() {
  359. this.rightBox = false
  360. },
  361. // 下拉选项
  362. bindDown(item, index) {
  363. this.firstKey = 0
  364. if(index == 0){
  365. this.where.order = ''
  366. }else if(index == 1){
  367. this.where.order = 'rate'
  368. }else if(index == 2){
  369. this.where.order = 'is_new'
  370. }
  371. this.downKey = index
  372. this.downStatus = false
  373. this.loadend = false;
  374. this.$set(this.where, 'page', 1)
  375. this.get_product_list(true);
  376. },
  377. Changswitch: function() {
  378. let that = this;
  379. that.is_switch = !that.is_switch
  380. },
  381. searchSubmit: function(e) {
  382. let that = this;
  383. that.$set(that.where, 'keyword', e.detail.value);
  384. that.loadend = false;
  385. that.$set(that.where, 'page', 1)
  386. this.get_product_list(true);
  387. },
  388. /**
  389. * 获取我的推荐
  390. */
  391. get_host_product: function() {
  392. let that = this;
  393. if (that.hotScroll) return
  394. getProductHot(
  395. that.hotPage,
  396. that.hotLimit,
  397. ).then(res => {
  398. that.hotPage++
  399. that.hotScroll = res.data.length < that.hotLimit
  400. that.hostProduct = that.hostProduct.concat(res.data.list)
  401. });
  402. },
  403. //点击事件处理
  404. set_where: function(e) {
  405. switch (e) {
  406. case 1:
  407. uni.setStorageSync('storeIndex', this.where.cate_pid);
  408. uni.navigateBack()
  409. break
  410. case 2:
  411. this.firstKey = e
  412. if (this.price == 0){
  413. this.price = 1;
  414. this.where.order = 'price_asc'
  415. }else if (this.price == 1){
  416. this.price = 2;
  417. this.where.order = 'price_desc'
  418. }else if (this.price == 2){
  419. this.price = 0;
  420. this.where.order = ''
  421. }
  422. this.$set(this.where, 'page', 1)
  423. this.get_product_list(true);
  424. break;
  425. case 3:
  426. this.price = 0;
  427. this.loadend = false;
  428. this.$set(this.where, 'order', 'sales')
  429. this.$set(this.where, 'page', 1)
  430. this.get_product_list(true);
  431. this.firstKey = e
  432. break;
  433. }
  434. this.loadend = false;
  435. this.$set(this.where, 'page', 1);
  436. this.get_product_list(true);
  437. },
  438. //查找产品
  439. get_product_list: function(isPage) {
  440. let that = this;
  441. if (that.loadend) return;
  442. if (that.loading) return;
  443. if (isPage === true) that.$set(that, 'productList', []);
  444. that.loading = true;
  445. that.loadTitle = '';
  446. getProductslist(that.where).then(res => {
  447. let list = res.data.list;
  448. let productList = that.$util.SplitArray(list, that.productList);
  449. let loadend = list.length < that.where.limit;
  450. that.loadend = loadend;
  451. that.loading = false;
  452. that.loadTitle = loadend ? '已全部加载' : '加载更多';
  453. that.$set(that, 'productList', productList);
  454. that.$set(that.where, 'page', that.where.page + 1);
  455. }).catch(err => {
  456. that.loading = false;
  457. that.loadTitle = '加载更多';
  458. });
  459. },
  460. },
  461. onPullDownRefresh() {
  462. },
  463. onReachBottom() {
  464. if (this.productList.length > 0) {
  465. this.get_product_list('');
  466. } else {
  467. this.get_host_product();
  468. }
  469. },
  470. onPullDownRefresh(){
  471. // 模拟上拉刷新
  472. setTimeout(()=>{
  473. const newList = this.productList.reverse();
  474. this.productList = newList;
  475. uni.stopPullDownRefresh();
  476. },500)
  477. }
  478. }
  479. </script>
  480. <style lang="scss" scoped>
  481. .productList .search {
  482. width: 100%;
  483. height: 86rpx;
  484. padding: 0 20rpx;
  485. box-sizing: border-box;
  486. position: fixed;
  487. left: 0;
  488. top: 0;
  489. z-index: 9;
  490. background-color: var(--view-theme);
  491. }
  492. .bt-color{
  493. background-color: var(--view-theme);
  494. border:1px solid var(--view-theme);
  495. &.type2{
  496. background-color: #FD6523;
  497. border: 1px solid #FD6523;
  498. }
  499. }
  500. .productList .search .back {
  501. display: flex;
  502. align-items: center;
  503. width: 40rpx;
  504. height: 60rpx;
  505. .iconfont {
  506. color: #fff;
  507. font-size: 36rpx;
  508. }
  509. }
  510. .productList .search .input {
  511. width: 570rpx;
  512. height: 60rpx;
  513. background-color: #fff;
  514. border-radius: 50rpx;
  515. padding: 0 20rpx;
  516. box-sizing: border-box;
  517. }
  518. .productList .search .input input {
  519. flex: 1;
  520. height: 100%;
  521. font-size: 26rpx;
  522. margin-left: 10rpx;
  523. }
  524. .productList .search .input .placeholder {
  525. color: #999;
  526. }
  527. .productList .search .input .iconfont {
  528. font-size: 35rpx;
  529. color: #555;
  530. }
  531. .productList .search .icon-pailie,
  532. .productList .search .icon-tupianpailie {
  533. color: #fff;
  534. width: 62rpx;
  535. font-size: 40rpx;
  536. height: 86rpx;
  537. line-height: 86rpx;
  538. }
  539. .productList .nav-wrapper {
  540. z-index: 9;
  541. position: fixed;
  542. left: 0;
  543. top: 0;
  544. width: 100%;
  545. margin-top: 86rpx;
  546. background-color: $theme-color;
  547. .tab-bar {
  548. display: flex;
  549. align-items: center;
  550. .tab-item {
  551. position: relative;
  552. flex: 1;
  553. display: flex;
  554. justify-content: center;
  555. align-items: center;
  556. padding: 8rpx 0 20rpx;
  557. color: #fff;
  558. font-size: 28rpx;
  559. font-weight: bold;
  560. &::after {
  561. content: ' ';
  562. position: absolute;
  563. left: 50%;
  564. bottom: 18rpx;
  565. width: 30rpx;
  566. height: 3rpx;
  567. background: transparent;
  568. transform: translateX(-50%);
  569. }
  570. &.on {
  571. &::after {
  572. background: #fff;
  573. }
  574. }
  575. }
  576. }
  577. }
  578. .productList .nav {
  579. height: 86rpx;
  580. color: #454545;
  581. font-size: 28rpx;
  582. background-color: #fff;
  583. display: flex;
  584. justify-content: space-between;
  585. padding: 0 28rpx;
  586. }
  587. .productList .nav .item {
  588. display: flex;
  589. align-items: center;
  590. justify-content: center;
  591. flex: 1;
  592. &.t-color{
  593. font-weight: bold;
  594. }
  595. }
  596. .productList .nav .item image {
  597. width: 15rpx;
  598. height: 19rpx;
  599. margin-left: 10rpx;
  600. }
  601. .productList{
  602. padding-bottom: calc(0rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  603. padding-bottom: calc(0rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  604. }
  605. .productList .list {
  606. padding: 0 20rpx;
  607. margin-top: 168rpx;
  608. }
  609. .productList .list.on {
  610. background-color: #fff;
  611. border-top: 1px solid #f6f6f6;
  612. }
  613. .noCommodity {
  614. background-color: #fff;
  615. padding-bottom: 30rpx;
  616. }
  617. .spin {
  618. display: block;
  619. transform: rotate(180deg);
  620. font-size: 36rpx;
  621. }
  622. .icon-xiala1 {
  623. margin-top: 6rpx;
  624. }
  625. .icon-shaixuan {
  626. font-size: 30rpx;
  627. margin-left: 10rpx;
  628. }
  629. .down-wrapper {
  630. .bg {
  631. z-index: 8;
  632. position: fixed;
  633. left: 0;
  634. top: 0;
  635. width: 100%;
  636. height: 100%;
  637. background: rgba(0, 0, 0, .5);
  638. }
  639. .down-box {
  640. z-index: 8;
  641. position: fixed;
  642. left: 0;
  643. top: 170rpx;
  644. width: 100%;
  645. padding: 0 40rpx 28rpx 74rpx;
  646. background-color: #F8F8F8;
  647. border-radius: 0 0 24rpx 24rpx;
  648. .down-item {
  649. margin-top: 28rpx;
  650. font-size: 24rpx;
  651. color: #454545;
  652. &.on {
  653. color: var(--view-theme);
  654. }
  655. .iconfont{
  656. float: right;
  657. }
  658. }
  659. }
  660. }
  661. .store-wrapper {
  662. margin-top: 240rpx;
  663. border-top: 1px solid #F6F6F6;
  664. .star-box {
  665. display: flex;
  666. align-items: center;
  667. .star {
  668. position: relative;
  669. width: 111rpx;
  670. height: 19rpx;
  671. background: url(~pages/columnGoods/images/star.png);
  672. background-size: 111rpx 19rpx;
  673. }
  674. .star-active {
  675. position: absolute;
  676. left: 0;
  677. top: 0;
  678. width: 111rpx;
  679. height: 19rpx;
  680. overflow: hidden;
  681. background: url(~pages/columnGoods/images/star_active.png);
  682. background-size: 111rpx 19rpx;
  683. }
  684. .num {
  685. color: $theme-color;
  686. font-size: 24rpx;
  687. margin-left: 10rpx;
  688. }
  689. }
  690. .store-item {
  691. margin-bottom: 12rpx;
  692. padding: 40rpx 20rpx;
  693. background-color: #fff;
  694. .head {
  695. display: flex;
  696. align-items: center;
  697. justify-content: space-between;
  698. .left-wrapper {
  699. display: flex;
  700. align-items: center;
  701. .logo {
  702. width: 80rpx;
  703. height: 80rpx;
  704. image {
  705. width: 80rpx;
  706. height: 80rpx;
  707. border-radius: 6rpx;
  708. }
  709. }
  710. .con-box {
  711. margin-left: 20rpx;
  712. .name {
  713. font-size: 30rpx;
  714. color: #333;
  715. font-weight: bold;
  716. }
  717. }
  718. }
  719. .link {
  720. width: 114rpx;
  721. height: 50rpx;
  722. line-height: 50rpx;
  723. background: linear-gradient(-90deg, rgba(246, 122, 56, 1) 0%, rgba(241, 27, 9, 1) 100%);
  724. border-radius: 25rpx;
  725. text-align: center;
  726. color: #fff;
  727. font-size: 24rpx;
  728. }
  729. }
  730. .pic-wrapper {
  731. display: flex;
  732. margin-top: 30rpx;
  733. .pic-item {
  734. position: relative;
  735. width: 226rpx;
  736. height: 226rpx;
  737. margin-right: 16rpx;
  738. image {
  739. width: 226rpx;
  740. height: 226rpx;
  741. border-radius: 16rpx;
  742. }
  743. .price {
  744. position: absolute;
  745. right: 0;
  746. bottom: 0;
  747. height: 36rpx;
  748. padding: 0 10rpx;
  749. line-height: 36rpx;
  750. text-align: center;
  751. background: rgba(0, 0, 0, .5);
  752. border-radius: 16rpx 2rpx 16rpx 2rpx;
  753. color: #fff;
  754. font-size: 24rpx;
  755. text {
  756. font-size: 18rpx;
  757. }
  758. }
  759. &:nth-child(3n) {
  760. margin-right: 0;
  761. }
  762. }
  763. }
  764. }
  765. }
  766. .productList .list .item.on {
  767. width: 100%;
  768. display: flex;
  769. border-bottom: 1px solid #f6f6f6;
  770. padding: 30rpx 0;
  771. margin: 0;
  772. position: relative;
  773. }
  774. .productList .list .item .pictrue.on {
  775. position: relative;
  776. width: 260rpx;
  777. height: 260rpx;
  778. .border-picture {
  779. position: absolute;
  780. top: 0;
  781. left: 0;
  782. width: 100%;
  783. height: 100%;
  784. background: center/cover no-repeat;
  785. }
  786. }
  787. .productList .list .item .pictrue image {
  788. width: 260rpx;
  789. height: 260rpx;
  790. border-radius: 20rpx 20rpx 0 0;
  791. }
  792. .productList .list .item .pictrue image.on {
  793. border-radius: 6rpx;
  794. }
  795. .productList .list .item .text {
  796. font-size: 30rpx;
  797. color: #222;
  798. width: 460rpx;
  799. padding: 0 0 0 22rpx;
  800. .name{
  801. height: 80rpx;
  802. }
  803. }
  804. .item_tags{
  805. margin-top: 8rpx;
  806. }
  807. .item_tags .tags_item {
  808. display: inline-block;
  809. font-size: 20rpx;
  810. text-align: center;
  811. border-radius: 5rpx;
  812. padding: 0 4rpx;
  813. line-height: 28rpx;
  814. margin-right: 8rpx;
  815. }
  816. .item_tags .tags_item.ticket{
  817. color: #E93323;
  818. border: 1px solid #E93323;
  819. }
  820. .item_tags .tags_item.delivery{
  821. color: #FF9000;
  822. border: 1px solid #FF9000;
  823. }
  824. .productList .list .item .text .money {
  825. display: flex;
  826. align-items: center;
  827. font-size: 26rpx;
  828. font-weight: bold;
  829. margin-top: 10rpx;
  830. color: var(--view-priceColor);
  831. }
  832. .productList .list .item .text .money .num {
  833. font-size: 34rpx;
  834. }
  835. .productList .distance {
  836. display: flex;
  837. align-items: center;
  838. font-size: 24rpx;
  839. color: #999999;
  840. .icon-xiangyou {
  841. font-size: 24rpx;
  842. line-height: 24rpx;
  843. }
  844. }
  845. .productList .list .item .text .money .ticket-big {
  846. display: flex;
  847. align-items: center;
  848. justify-content: center;
  849. min-width: 163rpx;
  850. height: 28rpx;
  851. margin-left: 10rpx;
  852. background-image: url(~static/images/yh.png);
  853. background-size: 100% 100%;
  854. font-size: 20rpx;
  855. font-weight: normal;
  856. padding: 0 10rpx;
  857. }
  858. .productList .list .item .text .score {
  859. margin-top: 10rpx;
  860. color: #737373;
  861. font-size: 20rpx;
  862. }
  863. .productList .list .item .text .company {
  864. display: flex;
  865. align-items: center;
  866. color: #737373;
  867. font-size: 20rpx;
  868. margin-top: 10rpx;
  869. .name {
  870. display: inline-block;
  871. width: 200rpx;
  872. overflow: hidden;
  873. white-space: nowrap;
  874. text-overflow: ellipsis;
  875. }
  876. .flex {
  877. display: flex;
  878. align-items: center;
  879. margin-left: 10rpx;
  880. color: #282828;
  881. .iconfont {
  882. font-size: 16rpx;
  883. margin-top: 4rpx;
  884. }
  885. }
  886. }
  887. .productList .list .item .foot-bar {
  888. width: 100%;
  889. height: 52rpx;
  890. display: flex;
  891. align-items: center;
  892. justify-content: center;
  893. background-image: linear-gradient(-90deg, var(--view-bntColor21) 0%, var(--view-bntColor22) 100%);
  894. border-radius: 0px 0px 16rpx 16rpx;
  895. color: #fff;
  896. font-size: 24rpx;
  897. .icon-fenxiang {
  898. font-size: 24rpx;
  899. margin-right: 10rpx;
  900. }
  901. &.on {
  902. position: absolute;
  903. right: 0;
  904. bottom: 30rpx;
  905. width: 180rpx;
  906. height: 44rpx;
  907. border-radius: 22rpx;
  908. }
  909. }
  910. </style>