1286 lines
29 KiB
Vue
Raw Normal View History

2024-02-19 10:44:33 +08:00
<template>
2024-04-07 17:16:33 +08:00
<view
:style="{ 'background-image': `linear-gradient(0deg, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0.5) 100%),url(${store.mer_banner})` }"
class="store-home">
2024-02-19 10:44:33 +08:00
<!-- 搜索 -->
<!-- #ifdef MP || APP-PLUS -->
<view :style="{ height: statusBarHeight }"></view>
<view class="header">
<view class="head-menu">
<view class="iconfont icon-xiangzuo" style="color: #fff;"></view>
<view class="iconfont icon-shouye4" @click="goHome" style="color: #fff;"></view>
</view>
<view class="search"><text class="iconfont icon-xiazai5"></text>搜索商品</view>
</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="header">
<view class="head-menu">
<view class="iconfont icon-xiangzuo"></view>
<view class="iconfont icon-shouye4" @click="goHome"></view>
</view>
<view class="search"><text class="iconfont icon-xiazai5"></text>搜索商品</view>
</view>
<!-- #endif -->
<view v-show="navShow && tabActive === 3" class="nav" :style="viewColor">
<view class="nav-cont">
<view :class="{ active: navActive === 0 }" class="item">
<view class="cont">
{{ select.selected ? '评分' : '默认' }}
2024-04-07 17:16:33 +08:00
<text
:class="['arrow-icon', 'iconfont', select.show ? 'icon-xiangshang' : 'icon-xiangxia']"></text>
2024-02-19 10:44:33 +08:00
</view>
</view>
<view :class="{ active: navActive === 1 }" class="item">
<view class="cont">销量</view>
</view>
<view :class="{ active: navActive === 2 }" class="item">
<view class="cont">
价格
2024-04-07 17:16:33 +08:00
<image
:src="sortPrice ? domain+'/static/diy/up'+keyColor+'.png' : domain+'/static/diy/down'+keyColor+'.png'">
</image>
2024-02-19 10:44:33 +08:00
</view>
</view>
<view class="item">
<view class="cont">
2024-04-07 17:16:33 +08:00
<text
:class="['layout-icon', 'iconfont', isColumn ? 'icon-pailie' : 'icon-tupianpailie']"></text>
2024-02-19 10:44:33 +08:00
</view>
</view>
</view>
<view v-show="select.show && navShow" class="select">
2024-04-07 17:16:33 +08:00
<view v-for="item in select.options" :key="item.id" :class="{ active: item.id === select.selected }"
class="item">
{{ item.name }}
<text v-if="item.id === select.selected" class="iconfont icon-gou"></text>
</view>
2024-02-19 10:44:33 +08:00
</view>
</view>
<!--diy页面的导航-->
<view v-show="navShow && tabActive == 1" class="nav" :style="viewColor">
<view class="nav-cont">
<view class="item active">
<view class="cont">精选</view>
</view>
<view class="item">
<view class="cont">新品</view>
</view>
<view class="item">
<view class="cont">活动</view>
</view>
<view class="item">
<view class="cont">领券</view>
</view>
</view>
</view>
<scroll-view class="main" scroll-y="true" @scroll="scrollHome" catchtouchmove :style="viewColor">
<!-- 店铺信息 -->
<view id="store" class="store">
<image :src="store.mer_avatar"></image>
<view class="text">
<view class="text-view">
<text v-if="store.type_name" class="font-bg-red">{{store.type_name}}</text>
<text v-else-if="store.is_trader" class="font-bg-red">自营</text>
<text class="name">{{ store.mer_name }}</text>
<text class="iconfont icon-xiangyou"></text>
</view>
<view class="score">
<view class="star">
<view
2024-04-07 17:16:33 +08:00
:style="{width: `${score.star.toFixed(2)}%`, backgroundImage: `url(${domain}/static/diy/score1${keyColor}.png)`}">
</view>
2024-02-19 10:44:33 +08:00
</view>
<view>{{ score.number.toFixed(1) }}</view>
</view>
</view>
<view v-if="store.services_type == 0" class="kefu">
<text class="iconfont icon-kefu3"></text>
</view>
<view v-else-if="store.services_type == 1" class="kefu">
<text class="iconfont icon-kefu3"></text>
</view>
<view v-else class="kefu">
<text class="iconfont icon-kefu3"></text>
</view>
<button hover-class="none" :class="store.care ? 'care' : ''" v-if="!isLogin">
<text v-show="!store.care" class="iconfont icon-guanzhu"></text>
{{ store.care ? '已关注' : '关注' }}
</button>
<button v-else hover-class="none" :class="store.care ? 'care' : ''">
<text v-show="!store.care" class="iconfont icon-guanzhu"></text>
{{ store.care ? '已关注' : '关注' }}
</button>
</view>
<view v-show="!navShow && tabActive === 3" class="nav">
<view class="nav-cont">
<view class="item active">
<view class="cont">
{{ select.selected ? '评分' : '默认' }}
2024-04-07 17:16:33 +08:00
<text
:class="['arrow-icon', 'iconfont', select.show ? 'icon-xiangshang' : 'icon-xiangxia']"></text>
2024-02-19 10:44:33 +08:00
</view>
</view>
<view class="item">
<view class="cont">
销量
</view>
</view>
<view class="item">
<view class="cont">
价格
2024-04-07 17:16:33 +08:00
<image v-if="navActive === 2 && where.order == 'price_asc'"
:src="domain+'/static/diy/up'+keyColor+'.png'"></image>
<image v-if="navActive === 2 && where.order == 'price_desc'"
:src="domain+'/static/diy/down'+keyColor+'.png'"></image>
2024-02-19 10:44:33 +08:00
</view>
</view>
<view class="item">
<view class="cont">
2024-04-07 17:16:33 +08:00
<text
:class="['layout-icon', 'iconfont', isColumn ? 'icon-pailie' : 'icon-tupianpailie']"></text>
2024-02-19 10:44:33 +08:00
</view>
</view>
</view>
<view v-show="select.show && !navShow" class="select">
2024-04-07 17:16:33 +08:00
<view v-for="item in select.options" :key="item.id" :class="{ active: item.id === select.selected }"
class="item">{{ item.name }}
<text v-if="item.id === select.selected" class="iconfont icon-gou"></text>
</view>
2024-02-19 10:44:33 +08:00
</view>
</view>
<!--diy导航-->
<view v-show="!navShow && tabActive === 1" class="nav">
<view class="nav-cont">
<view class="item active">
<view class="cont">精选</view>
</view>
<view class="item">
<view class="cont">新品</view>
</view>
<view class="item">
<view class="cont">活动</view>
</view>
<view class="item">
<view class="cont">领券</view>
</view>
</view>
<view v-show="select.show && !navShow" class="select">
2024-04-07 17:16:33 +08:00
<view v-for="item in select.options" :key="item.id" :class="{ active: item.id === select.selected }"
class="item">
2024-02-19 10:44:33 +08:00
{{ item.name }}
2024-04-07 17:16:33 +08:00
<text v-if="item.id === select.selected" class="iconfont icon-gou"></text>
2024-02-19 10:44:33 +08:00
</view>
</view>
</view>
<view class="tab-cont" :style="viewColor">
<!-- diy组件 -->
<view>
<!-- #ifdef H5 -->
<view v-for="(item, index) in styleConfig" :key="index">
<block v-if="item.name != 'headerSerch' && item.name != 'tabNav' && item.name != 'pageFoot'">
2024-04-07 17:16:33 +08:00
<component :is="item.name" :index="index" :dataConfig="item" :merId="id"
@detail="goGoodsDetail"></component>
2024-02-19 10:44:33 +08:00
</block>
</block>
</view>
<!-- #endif -->
<!-- #ifdef MP || APP-PLUS-->
2024-04-07 17:16:33 +08:00
<block v-for="(item, index) in styleConfig" :key="index">
2024-02-19 10:44:33 +08:00
<view>
<activeParty v-if="item.name == 'activeParty'" :merId="id" :dataConfig="item"></activeParty>
<articleList v-if="item.name == 'articleList'" :merId="id" :dataConfig="item"></articleList>
<bargain v-if="item.name == 'bargain'" :merId="id" :dataConfig="item"></bargain>
<blankPage v-if="item.name == 'blankPage'" :merId="id" :dataConfig="item"></blankPage>
<combination v-if="item.name == 'combination'" :merId="id" :dataConfig="item"></combination>
<topic v-if="item.name == 'topic'" :merId="id" :dataConfig="item"></topic>
2024-04-07 17:16:33 +08:00
<coupon v-if="item.name == 'coupon'" :merId="id" :dataConfig="item"></coupon>
<goodList v-if="item.name == 'goodList'" :merId="id" :dataConfig="item"
@detail="goGoodsDetail"></goodList>
2024-02-19 10:44:33 +08:00
<guide v-if="item.name == 'guide'" :merId="id" :dataConfig="item"></guide>
2024-04-07 17:16:33 +08:00
<liveBroadcast v-if="item.name == 'liveBroadcast'" :merId="id" :dataConfig="item">
</liveBroadcast>
2024-02-19 10:44:33 +08:00
<menus v-if="item.name == 'menus'" :merId="id" :dataConfig="item"></menus>
<presellList v-if="item.name == 'presellList'" :merId="id" :dataConfig="item"></presellList>
<richText v-if="item.name == 'richText'" :merId="id" :dataConfig="item"></richText>
<seckill v-if="item.name == 'seckill'" :merId="id" :dataConfig="item"></seckill>
<swiperBg v-if="item.name == 'swiperBg'" :merId="id" :dataConfig="item"></swiperBg>
<pictureCube v-if="item.name == 'pictureCube'" :merId="id" :dataConfig="item"></pictureCube>
<swipers v-if="item.name == 'swipers'" :merId="id" :dataConfig="item"></swipers>
<titles v-if="item.name == 'titles'" :merId="id" :dataConfig="item"></titles>
</view>
</block>
<!-- #endif -->
</view>
</view>
</scroll-view>
<view class="footer" :style="viewColor">
<view v-for="(item, index) in tabs" :key="index" :class="{ active: tabActive === item.value }" class="item">
<view :class="['iconfont', item.icon]"></view>
<view>{{ item.name }}</view>
</view>
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import request from "@/utils/request.js";
import WaterfallsFlow from '@/components/WaterfallsFlow/WaterfallsFlow.vue'
import easyLoadimage from '@/components/easy-loadimage/easy-loadimage.vue'
2024-04-07 17:16:33 +08:00
import {
getStoreDetail,
getStoreGoods,
getStoreCategory,
storeServiceList,
hasServiceApi
} from '@/api/store.js';
import {
getDiy
} from '@/api/api.js';
import {
getUserInfo
} from '@/api/user.js';
import {
configMap
} from "@/utils";
import {
mapGetters
} from "vuex";
import {
goShopDetail
} from '@/libs/order.js';
2024-02-19 10:44:33 +08:00
import emptyPage from '@/components/emptyPage.vue'
2024-04-07 17:16:33 +08:00
import {
HTTP_REQUEST_URL
} from '@/config/app';
2024-02-19 10:44:33 +08:00
import mConfig from '../../store/component/index.js';
// #ifdef MP || APP-PLUS
import activeParty from '../../index/component/activeParty';
import coupon from '../../index/component/coupon';
import bargain from '../../index/component/bargain';
import blankPage from '../../index/component/blankPage';
import combination from '../../index/component/combination';
import goodList from '../../index/component/goodList';
import guide from '../../index/component/guide';
import liveBroadcast from '../../index/component/liveBroadcast';
import menus from '../../index/component/menus';
import topic from '../../index/component/topic';
import presellList from '../../index/component/presellList';
import richText from '../../index/component/richText';
import seckill from '../../index/component/seckill';
import swiperBg from '../../index/component/swiperBg';
import pictureCube from '../../index/component/pictureCube'
import titles from '../../index/component/titles';
// #endif
2024-04-07 17:16:33 +08:00
const app = getApp();
2024-02-19 10:44:33 +08:00
export default {
components: {
...mConfig,
emptyPage,
WaterfallsFlow,
easyLoadimage,
// #ifdef MP || APP-PLUS
activeParty,
bargain,
coupon,
blankPage,
combination,
goodList,
liveBroadcast,
menus,
topic,
presellList,
richText,
seckill,
swiperBg,
pictureCube,
titles
// #endif
},
data() {
return {
domain: HTTP_REQUEST_URL,
// #ifdef MP
menuButtonInfo: uni.getMenuButtonBoundingClientRect(),
// #endif
id: 0, // 商铺id
did: 0, //diy模板id
store: {}, // 商铺详情
goods: [], // 商铺商品
category: [], // 商铺分类
coupon: [], // 优惠券
styleConfig: [],
isColumn: true, // 商品列表排列方式
navShow: false,
navActive: 0,
diyActive: 0,
tabActive: 1, // 底部切换
keyword: '',
order: '',
sortPrice: true, // 价格排序
goodsLoading: false,
categoryLoading: false,
loadTitle: '加载更多',
loadend: false,
where: {
order: '',
keyword: '',
page: 1,
limit: 30
},
// 下拉菜单
select: {
show: false,
selected: 0,
options: [{
id: 0,
name: '默认'
},
{
id: 1,
name: '评分'
}
]
},
// 底部菜单
tabs1: [{
icon: 'icon-yizhan_o',
name: '首页',
value: 1,
},
{
icon: 'icon-gouwu_o',
name: '商品',
value: 3,
},
{
icon: 'icon-baoguo_huanbaohe_o',
name: '生活服务',
value: 5,
},
{
icon: 'icon-yingyongAPP_o',
name: '分类',
value: 2,
},
{
icon: 'icon-liwu_o',
name: '专场',
value: 4,
}
],
// 底部菜单
tabs2: [{
icon: 'icon-yizhan_o',
name: '首页',
value: 1,
},
{
icon: 'icon-gouwu_o',
name: '商品',
value: 3,
},
{
icon: 'icon-yingyongAPP_o',
name: '分类',
value: 2,
},
{
icon: 'icon-zhuanti',
name: '专场',
value: 4,
}
],
tabs: [],
storeTop: 0,
navHeight: 0,
service_open: false,
type: 0,
statusBarHeight: 0,
}
},
computed: {
score: function() {
let store = this.store,
score = {
star: 0,
number: 0
};
if ('postage_score' in store) {
2024-04-07 17:16:33 +08:00
score.number = (parseFloat(store.postage_score) + parseFloat(store.product_score) + parseFloat(
store.service_score)) /
2024-02-19 10:44:33 +08:00
3;
score.star = score.number / 5 * 100;
}
return score;
},
...configMap({
margin_ico_switch: 0,
margin_ico: '',
2024-04-07 17:16:33 +08:00
}, mapGetters(['isLogin', 'uid', 'viewColor', 'keyColor'])),
2024-02-19 10:44:33 +08:00
},
watch: {
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
},
onLoad: function(options) {
this.type = parseInt(options.type) || 1
this.id = options.mer_id || options.id || 0
this.did = options.diy_id || 0
this.order = options.order
this.getStore();
this.diyData();
this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
},
onShow() {
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
},
onReady: function() {
},
mounted: function() {
const query = uni.createSelectorQuery().in(this);
query.select('#store').boundingClientRect(data => {
this.storeHeight = data.height;
this.storeTop = data.top;
}).exec();
},
methods: {
// 首页
goHome() {
uni.switchTab({
url: '/pages/index/index'
});
},
// 获取diy模板数据
diyData() {
let that = this;
2024-04-07 17:16:33 +08:00
getDiy({
id: that.id,
did: that.did,
version: '221'
}).then(res => {
2024-02-19 10:44:33 +08:00
let data = res.data;
that.styleConfig = that.objToArr(data.value);
uni.setNavigationBarTitle({
title: data.title
});
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
2024-04-07 17:16:33 +08:00
});
2024-02-19 10:44:33 +08:00
});
},
// 对象转数组
objToArr(data) {
let obj = Object.keys(data).sort();
let m = obj.map(key => data[key]);
return m;
},
// 获取商品详情
getStore: function() {
getStoreDetail(this.id).then(res => {
this.store = res.data;
2024-04-07 17:16:33 +08:00
if (this.id == 0) {
2024-02-19 10:44:33 +08:00
this.tabs = this.tabs1
2024-04-07 17:16:33 +08:00
} else {
if ((res.data.delivery_way.length == 1 && res.data.delivery_way[0] == '1') || res.data
.delivery_way.length == 2) {
2024-02-19 10:44:33 +08:00
this.tabs = this.tabs1
this.service_open = true
2024-04-07 17:16:33 +08:00
} else {
2024-02-19 10:44:33 +08:00
this.tabs = this.tabs2
this.service_open = false
2024-04-07 17:16:33 +08:00
}
}
2024-02-19 10:44:33 +08:00
}).catch(err => {
this.loading = false;
uni.showToast({
title: err,
icon: 'none'
})
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
})
},
// 获取商铺商品
getGoods: function() {
let that = this;
if (that.loadend) return;
if (that.loading) return;
if (that.goodsLoading) return;
that.goodsLoading = true;
that.loadTitle = '';
getStoreGoods(that.id, that.where).then(res => {
that.goodsLoading = false;
let list = res.data.list;
let goodsList = that.$util.SplitArray(list, that.goods);
let loadend = list.length < that.where.limit;
that.loadend = loadend;
that.loading = false;
that.loadTitle = loadend ? '已全部加载' : '加载更多';
that.$set(that, 'goods', goodsList);
that.$set(that.where, 'page', that.where.page + 1);
}).catch(err => {
that.loading = false;
that.goodsLoading = false;
uni.showToast({
title: err,
icon: 'none'
})
setTimeout(function() {
uni.navigateBack()
}, 1000);
});
},
// 去商品详情页
goGoodsDetail(item) {
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
},
// 商铺首页滚动 navbar 吸顶
scrollHome: function(e) {
uni.$emit('scroll');
this.navShow = e.detail.scrollTop >= 50;
},
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
},
}
</script>
<style lang="scss" scoped>
2024-04-07 17:16:33 +08:00
.tab-cont {
2024-02-19 10:44:33 +08:00
background: #f5f5f5;
min-height: 500rpx;
pointer-events: none;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
/deep/.care {
background-image: none !important;
border: 1px solid #fff;
background-color: transparent;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.store-home {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: flex;
flex-direction: column;
padding-bottom: 100rpx;
padding-bottom: calc(100rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
padding-bottom: calc(100rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
background: left top/750rpx 390rpx no-repeat fixed;
2024-04-07 17:16:33 +08:00
overflow: hidden;
2024-02-19 10:44:33 +08:00
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.header {
position: relative;
z-index: 6;
display: flex;
align-items: center;
padding-right: 34rpx;
height: 43px;
padding-left: 33rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.head-menu {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
height: 27px;
width: 70px;
background: rgba(0, 0, 0, 0.25);
border-radius: 13px;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.icon-xiangzuo {
font-size: 32rpx;
color: #FFFFFF;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.iconfont {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
text-align: center;
color: #fff;
box-sizing: border-box;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
&.icon-xiangzuo {
2024-04-07 17:16:33 +08:00
border-right: 1px solid rgba(255, 255, 255, .3);
2024-02-19 10:44:33 +08:00
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.search {
flex: 1;
display: flex;
align-items: center;
min-width: 0;
height: 58rpx;
border-radius: 29rpx;
margin-left: 32rpx;
background-color: #FFFFFF;
font-weight: 500;
font-size: 26rpx;
color: #999999;
/* #ifdef MP */
margin-right: 200rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
/* #endif */
.iconfont {
margin-right: 13rpx;
margin-left: 30rpx;
font-size: 24rpx;
}
}
}
2024-04-07 17:16:33 +08:00
.main_count {
2024-02-19 10:44:33 +08:00
background-color: #ffffff;
padding: 30rpx 20rpx;
2024-04-07 17:16:33 +08:00
.list {
2024-02-19 10:44:33 +08:00
width: 710rpx;
height: 280rpx;
margin-bottom: 30rpx;
position: relative;
2024-04-07 17:16:33 +08:00
.picture {
2024-02-19 10:44:33 +08:00
width: 710rpx;
height: 280rpx;
border-radius: 16rpx;
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.main {
flex: 1;
min-height: 0rpx;
box-sizing: border-box;
padding: 0;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.store {
position: relative;
z-index: 6;
display: flex;
align-items: center;
padding-right: 20rpx;
padding-left: 20rpx;
padding-top: 20rpx;
padding-bottom: 22rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
image {
width: 74rpx;
height: 74rpx;
border-radius: 6rpx;
}
2024-04-07 17:16:33 +08:00
.store-margin {
2024-02-19 10:44:33 +08:00
width: 26rpx;
height: 26rpx;
margin-left: 10rpx;
}
2024-04-07 17:16:33 +08:00
.kefu {
2024-02-19 10:44:33 +08:00
color: #ffffff;
margin-right: 26rpx;
cursor: pointer;
2024-04-07 17:16:33 +08:00
.icon-kefu3 {
2024-02-19 10:44:33 +08:00
font-size: 34rpx;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.text {
flex: 1;
min-width: 0;
margin-right: 20rpx;
margin-left: 20rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.text-view {
display: inline-flex;
align-items: center;
max-width: 100%;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.name {
flex: 1;
min-width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-weight: bold;
font-size: 30rpx;
line-height: 1;
color: #FFFFFF;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.iconfont {
margin-left: 10rpx;
font-size: 17rpx;
color: #FFFFFF;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.score {
display: flex;
align-items: center;
margin-top: 17rpx;
font-weight: 500;
font-size: 24rpx;
line-height: 1;
color: #FFFFFF;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.star {
position: relative;
width: 111rpx;
height: 19rpx;
margin-right: 10rpx;
background: url(../../columnGoods/images/star.png) left top/100% 100% no-repeat;
overflow: hidden;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
view {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url(../../columnGoods/images/star_active.png) left top/111rpx 19rpx no-repeat;
2024-04-07 17:16:33 +08:00
&.star_purple {
2024-02-19 10:44:33 +08:00
background: url(../../columnGoods/images/star_active_purple.png) left top/111rpx 19rpx no-repeat;
}
}
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
button {
display: flex;
justify-content: center;
align-items: center;
width: 113rpx;
height: 48rpx;
border-radius: 24rpx;
background-image: linear-gradient(-90deg, var(--view-bntColor21) 0%, var(--view-bntColor22) 100%);
font-weight: 500;
font-size: 22rpx;
color: #FFFFFF;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.iconfont {
margin-right: 6rpx;
font-size: 22rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
&.gary {
background-color: #999;
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.font-bg-red {
background-color: var(--view-theme);
border: 1px solid var(--view-theme);
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.nav.fixed {
position: fixed;
left: 0;
width: 100%;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.nav-cont {
position: absolute;
width: 100%;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.nav {
position: relative;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.nav-cont {
display: flex;
align-items: center;
height: 84rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
min-width: 0;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.cont {
display: flex;
justify-content: center;
align-items: center;
width: 116rpx;
height: 44rpx;
border-radius: 22rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.arrow-icon {
margin-left: 10rpx;
font-size: 18rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.layout-icon {
font-size: 32rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.icon-pailie {
font-size: 32rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
image {
width: 15rpx;
height: 21rpx;
margin-left: 7rpx;
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.active {
.cont {
background-color: #FFFFFF;
font-weight: bold;
color: var(--view-theme);
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.select {
position: absolute;
top: 100%;
left: 0;
z-index: 2;
width: 100%;
padding-right: 40rpx;
padding-bottom: 28rpx;
padding-left: 74rpx;
border-bottom-right-radius: 24rpx;
border-bottom-left-radius: 24rpx;
background-color: #FFFFFF;
box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.06);
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item {
margin-top: 28rpx;
font-size: 24rpx;
color: #454545;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.active {
color: var(--view-theme);
2024-04-07 17:16:33 +08:00
.iconfont {
2024-02-19 10:44:33 +08:00
color: var(--view-theme);
float: right;
font-size: 20rpx;
}
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.goods {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding-top: 20rpx;
padding-right: 20rpx;
padding-left: 20rpx;
background-color: #F5F5F5;
width: 750rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item {
width: 345rpx;
border-radius: 16rpx;
margin-bottom: 20rpx;
background-color: #FFFFFF;
overflow: hidden;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.sell_out {
display: flex;
width: 110rpx;
height: 110rpx;
align-items: center;
justify-content: center;
border-radius: 100%;
2024-04-07 17:16:33 +08:00
background: rgba(0, 0, 0, .6);
2024-02-19 10:44:33 +08:00
color: #fff;
font-size: 24rpx;
position: absolute;
top: 50%;
left: 50%;
margin: -55rpx 0 0 -55rpx;
2024-04-07 17:16:33 +08:00
&::before {
2024-02-19 10:44:33 +08:00
content: "";
display: block;
width: 100rpx;
height: 100rpx;
border-radius: 100%;
border: 1px dashed #fff;
position: absolute;
top: 5rpx;
left: 5rpx;
}
}
2024-04-07 17:16:33 +08:00
.image,
.easy-loadimage,
image,
uni-image {
2024-02-19 10:44:33 +08:00
width: 345rpx;
height: 345rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
image {
display: block;
width: 100%;
height: 100%;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.text {
padding: 20rpx 20rpx 25rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.name {
font-weight: 500;
font-size: 30rpx;
line-height: 1;
color: #222222;
display: flex;
align-items: center;
2024-04-07 17:16:33 +08:00
.name_text {
2024-02-19 10:44:33 +08:00
display: inline-block;
max-width: 400rpx;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.money-wrap {
display: flex;
align-items: center;
margin-top: 43rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.money {
font-weight: bold;
font-size: 26rpx;
color: var(--view-priceColor);
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
text {
font-size: 34rpx;
line-height: 1;
}
2024-04-07 17:16:33 +08:00
}
2024-02-19 10:44:33 +08:00
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.score {
margin-top: 20rpx;
font-weight: 500;
font-size: 20rpx;
line-height: 1;
color: #737373;
}
}
2024-04-07 17:16:33 +08:00
.item_tags {
2024-02-19 10:44:33 +08:00
margin-top: 8rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item_tags .tags_item {
display: inline-block;
font-size: 20rpx;
text-align: center;
border-radius: 5rpx;
padding: 0 4rpx;
line-height: 28rpx;
margin-right: 8rpx;
}
2024-04-07 17:16:33 +08:00
.item_tags .tags_item.ticket {
2024-02-19 10:44:33 +08:00
border: 1px solid var(--view-theme);
color: var(--view-theme);
}
2024-04-07 17:16:33 +08:00
.item_tags .tags_item.delivery {
2024-02-19 10:44:33 +08:00
color: #FF9000;
border: 1px solid #FF9000;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.foot {
display: flex;
justify-content: center;
align-items: center;
height: 52rpx;
background-image: linear-gradient(-90deg, var(--view-bntColor21) 0%, var(--view-bntColor22) 100%);
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.iconfont {
margin-right: 10rpx;
font-size: 22rpx;
line-height: 1;
}
}
}
}
.column {
padding: 0;
background-color: #FFFFFF;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item {
position: relative;
display: flex;
width: 100%;
padding: 30rpx 20rpx;
border-radius: 0;
margin-bottom: 0;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
&::before {
content: " ";
position: absolute;
top: 0;
right: 20rpx;
left: 250rpx;
border-top: 1px solid #F5F5F5;
}
2024-04-07 17:16:33 +08:00
/deep/.image,
/deep/.easy-loadimage,
/deep/image,
/deep/uni-image {
2024-02-19 10:44:33 +08:00
width: 260rpx;
height: 260rpx;
border-radius: 16rpx;
overflow: hidden;
position: relative;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.border-picture {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: center/cover no-repeat;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.text {
position: relative;
width: 450rpx;
min-width: 0;
padding-top: 0;
padding-right: 0;
padding-bottom: 0;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.name {
color: #282828;
width: 100%;
display: flex;
}
2024-04-07 17:16:33 +08:00
.item_bot {
2024-02-19 10:44:33 +08:00
width: 100%;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.money-wrap {
display: flex;
align-items: center;
margin-top: 52rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.ticket {
height: 28rpx;
padding-right: 12rpx;
padding-left: 12rpx;
border: none;
border-radius: 0;
margin-top: 17rpx;
margin-left: 0;
background: url(../../../static/images/yh.png) top left/100% 100% no-repeat;
line-height: 28rpx;
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.foot {
position: absolute;
right: 20rpx;
bottom: 30rpx;
height: 44rpx;
padding-right: 17rpx;
padding-left: 17rpx;
border-radius: 22rpx;
font-size: 22rpx;
color: #F5F5F5;
}
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.category {
padding-top: 34rpx;
padding-right: 20rpx;
padding-left: 20rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.section {
border-radius: 10rpx;
margin-bottom: 20rpx;
background-color: #FFFFFF;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.head {
position: relative;
display: flex;
align-items: center;
height: 90rpx;
padding-right: 20rpx;
padding-left: 36rpx;
font-weight: bold;
color: #282828;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
&::before {
content: " ";
position: absolute;
top: 50%;
left: 20rpx;
width: 6rpx;
height: 24rpx;
background-color: var(--view-theme);
transform: translateY(-50%);
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.title {
flex: 1;
min-width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: 30rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.iconfont {
font-size: 22rpx;
line-height: 1;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.body {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
padding: 9rpx 36rpx 14rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item {
width: 314rpx;
height: 84rpx;
padding-right: 30rpx;
padding-left: 30rpx;
border-radius: 10rpx;
background-color: #F5F5F5;
margin-bottom: 10rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-weight: 500;
font-size: 26rpx;
line-height: 84rpx;
color: #282828;
}
}
}
}
2024-04-07 17:16:33 +08:00
.empty-box {
2024-02-19 10:44:33 +08:00
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 0;
padding-top: 200rpx;
2024-04-07 17:16:33 +08:00
image {
2024-02-19 10:44:33 +08:00
width: 414rpx;
height: 240rpx;
}
2024-04-07 17:16:33 +08:00
.txt {
2024-02-19 10:44:33 +08:00
font-size: 26rpx;
color: #999;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.footer {
position: fixed;
bottom: 0;
left: 0;
z-index: 5;
display: flex;
width: 100%;
height: 100rpx;
height: calc(100rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
height: calc(100rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
background-color: #FFFFFF;
opacity: 0.96;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.item {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-weight: 500;
font-size: 20rpx;
color: #282828;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.iconfont {
font-size: 43rpx;
}
2024-04-07 17:16:33 +08:00
.icon-zhuanti {
2024-02-19 10:44:33 +08:00
font-size: 38rpx;
}
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.active {
color: var(--view-theme);
}
}
2024-04-07 17:16:33 +08:00
.p-b-75 {
2024-02-19 10:44:33 +08:00
padding-bottom: 150rpx;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.vip-money {
color: #282828;
font-size: 22rpx;
margin-left: 6rpx;
font-weight: bold;
}
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
.vipImg {
width: 65rpx;
height: 28rpx;
margin-left: 4rpx;
2024-04-07 17:16:33 +08:00
2024-02-19 10:44:33 +08:00
image {
2024-04-07 17:16:33 +08:00
width: 100% !important;
height: 100% !important;
2024-02-19 10:44:33 +08:00
display: block;
}
}
2024-04-07 17:16:33 +08:00
</style>