You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

782 lines
33 KiB

<template>
<view :style="[boxStyle]">
<view>
<!-- 单列 -->
<view v-if="goodStyleConfig == 0">
<view class="w-full flex justify-between item bg--w111-fff p-20 rd-16rpx"
v-for="(item,index) in tempArr" :key="index"
@tap="goDetail(item)">
<easy-loadimage
:image-src="item.image"
:borderSrc="item.activity_frame.image"
width="224rpx"
height="224rpx"
:borderRadius="imgStyle"></easy-loadimage>
<view class="flex-1 flex-col justify-between pl-20">
<view class="w-full fs-28 h-80 lh-40rpx line2"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<view class="flex items-end flex-wrap mt-8 w-full" v-if="checkboxInfo.includes(1)">
<BaseTag
:text="label.label_name"
:color="label.color"
:background="label.bg_color"
:borderColor="label.border_color"
:circle="label.border_color ? true : false"
:imgSrc="label.icon"
v-for="(label, idx) in item.store_label" :key="idx"></BaseTag>
</view>
<view class="flex-between-center" v-if="onlyShowPrice">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor"></baseMoney>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="w-96 h-56 rd-28rpx flex-center fs-24 text--w111-fff"
v-if="btnStyle == 0" :style="[btnBgColor]">购买</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else-if="btnStyle == 1">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
<view v-else>
<view class="flex-y-center mt-4">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
<view class="inline-block h-26 lh-28rpx rd-14rpx bg--w111-F7E9CD fs-22 ml-8"
v-if="Number(item.vip_price) > 0 && item.is_vip && checkboxInfo.includes(5)">
<text class="inline-block h-26 lh-28rpx svip_rd fs-18 bg--w111-484643 text--w111-FDDAA4 px-8">SVIP</text>
<text class="px-8 fs-22">¥{{item.vip_price}}</text>
</view>
</view>
<view class="flex justify-between items-end">
<view class="flex-y-center">
<text class="fs-22 text--w111-999" v-if="checkboxInfo.includes(3)">已售{{item.sales}}{{item.unit_name}}</text>
<text class="fs-22 text--w111-999 pl-16" v-if="checkboxInfo.includes(4)">评分{{item.star}}</text>
</view>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="w-96 h-56 rd-28rpx flex-center fs-24 text--w111-fff"
v-if="btnStyle == 0" :style="[btnBgColor]">购买</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else-if="btnStyle == 1">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 两列瀑布流 -->
<view class="wf-page" v-if="goodStyleConfig == 1">
<!-- left -->
<view>
<view id="left" v-if="leftList.length">
<view v-for="(item,index) in leftList" :key="index" class="wf-item" @tap="goDetail(item)">
<view class='pictrue'>
<easy-loadimage
mode="widthFix"
:image-src="item.image"
:borderSrc="item.activity_frame.image"
width="100%"
height="346rpx"
:borderRadius="imgStyle"></easy-loadimage>
</view>
<view class="info_box" style="background: #1B1A1D;">
<view class="w-full line1 fs-28 text--w111-333 lh-40rpx"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<view class="flex items-end flex-wrap mt-8 w-full" v-if="checkboxInfo.includes(1)">
<BaseTag
:text="label.label_name"
:color="label.color"
:background="label.bg_color"
:borderColor="label.border_color"
:circle="label.border_color ? true : false"
:imgSrc="label.icon"
v-for="(label, idx) in item.store_label" :key="idx"></BaseTag>
</view>
<view class="flex-between-center mt-20" v-if="onlyShowPrice">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor"></baseMoney>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-if="btnStyle == 0">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
<view v-else>
<view class="flex-y-center mt-8">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
<view v-if="Number(item.vip_price) > 0 && item.is_vip && checkboxInfo.includes(5)">
<!-- <text class="inline-block h-26 lh-28rpx svip_rd fs-18 bg--w111-484643 text--w111-FDDAA4 px-8">SVIP</text> -->
<text style="text-decoration-line: line-through;margin-left: 15rpx;font-size: 24rpx;color: #7B7A7F;">¥{{item.vip_price}}</text>
</view>
</view>
<view class="flex-between-center mt-20">
<text class="fs-22 text--w111-999" v-if="checkboxInfo.includes(3)">已售{{item.sales}}{{item.unit_name}}</text>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-if="btnStyle == 0">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- right -->
<view>
<view id="right" v-if="rightList.length">
<view v-for="(item,index) in rightList" :key="index"
class="wf-item" @tap="goDetail(item)">
<view class='pictrue'>
<easy-loadimage
mode="widthFix"
:image-src="item.image"
:borderSrc="item.activity_frame.image"
width="100%"
height="346rpx"
:borderRadius="imgStyle"></easy-loadimage>
</view>
<view class="info_box" style="background: #1B1A1D;">
<view class="w-full line1 fs-28 text--w111-333 lh-40rpx"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<view class="flex items-end flex-wrap mt-8 w-full" v-if="checkboxInfo.includes(1)">
<BaseTag
:text="label.label_name"
:color="label.color"
:background="label.bg_color"
:borderColor="label.border_color"
:circle="label.border_color ? true : false"
:imgSrc="label.icon"
v-for="(label, idx) in item.store_label" :key="idx"></BaseTag>
</view>
<view class="flex-between-center mt-20" v-if="onlyShowPrice">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor"></baseMoney>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-if="btnStyle == 0">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
<view v-else>
<view class="flex-y-center mt-8">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
<view class="inline-block h-26 lh-28rpx rd-14rpx bg--w111-F7E9CD fs-22 ml-8" v-if="Number(item.vip_price) > 0 && item.is_vip && checkboxInfo.includes(5)">
<text class="inline-block h-26 lh-28rpx svip_rd fs-18 bg--w111-484643 text--w111-FDDAA4 px-8">SVIP</text>
<text class="px-8 fs-22">¥{{item.vip_price}}</text>
</view>
</view>
<view class="flex-between-center mt-20">
<text class="fs-22 text--w111-999" v-if="checkboxInfo.includes(3)">已售{{item.sales}}{{item.unit_name}}</text>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-if="btnStyle == 0">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 两列展示(横向) -->
<view class="pt-32 pr-24 pb-32 pl-24 bg--w111-fff rd-16rpx" v-if="goodStyleConfig == 3">
<view class="grid-column-2 grid-gap-20rpx">
<view class="flex" v-for="(item,index) in tempArr" :key="index" @tap="goDetail(item)">
<easy-loadimage
mode="widthFix"
:image-src="item.image"
:borderSrc="item.activity_frame.image"
width="144rpx"
height="144rpx"
:borderRadius="imgStyle"></easy-loadimage>
<view class="flex-1 pl-20">
<view class="w-full fs-26 h-72 lh-36rpx line2 mb-20"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
</view>
</view>
</view>
</view>
<!-- 三列 -->
<view class="pt-32 pr-24 pb-32 pl-24 bg--w111-fff rd-16rpx" v-if="goodStyleConfig == 2">
<view class="grid-column-3 grid-gap-20rpx">
<view v-for="(item,index) in tempArr" :key="index" @tap="goDetail(item)">
<easy-loadimage
mode="widthFix"
:image-src="item.image"
:borderSrc="item.activity_frame.image"
width="100%"
height="210rpx"
:borderRadius="imgStyle"></easy-loadimage>
<view class="w-full fs-28 h-80 lh-40rpx line2 mt-20"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<view class="flex-between-center mt-14">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-if="btnStyle == 0">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 大图展示 -->
<view v-if="goodStyleConfig ==4">
<view class="w-full item" v-for="(item,index) in tempArr" :key="index" @tap="goDetail(item)">
<easy-loadimage
mode="widthFix"
:image-src="item.image"
width="100%"
height="360rpx"
:borderRadius="imgStyle"></easy-loadimage>
<view class="rd-b-24rpx p-24 bg--w111-fff">
<view class="w-full line1 fs-28 text--w111-333 lh-40rpx mt-22"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<view class="flex items-end flex-wrap mt-8 w-full" v-if="checkboxInfo.includes(1)">
<BaseTag
:text="label.label_name"
:color="label.color"
:background="label.bg_color"
:borderColor="label.border_color"
:circle="label.border_color ? true : false"
:imgSrc="label.icon"
v-for="(label, idx) in item.store_label" :key="idx"></BaseTag>
</view>
<view class="flex-between-center" v-if="onlyShowPrice">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor"></baseMoney>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="w-96 h-56 rd-28rpx flex-center fs-24 text--w111-fff"
v-if="btnStyle == 0" :style="[btnBgColor]">购买</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else-if="btnStyle == 1">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
<view v-else>
<view class="flex-y-center mt-8">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
<view class="inline-block h-26 lh-28rpx rd-14rpx bg--w111-F7E9CD fs-22 ml-8"
v-if="Number(item.vip_price) > 0 && item.is_vip && checkboxInfo.includes(5)">
<text class="inline-block h-26 lh-28rpx svip_rd fs-18 bg--w111-484643 text--w111-FDDAA4 px-8">SVIP</text>
<text class="px-8 fs-22">¥{{item.vip_price}}</text>
</view>
</view>
<view class="flex justify-between items-end">
<view class="flex-y-center">
<text class="fs-22 text--w111-999" v-if="checkboxInfo.includes(3)">已售{{item.sales}}{{item.unit_name}}</text>
<text class="fs-22 text--w111-999 pl-16" v-if="checkboxInfo.includes(4)">评分{{item.star}}</text>
</view>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="w-96 h-56 rd-28rpx flex-center fs-24 text--w111-fff"
v-if="btnStyle == 0" :style="[btnBgColor]">购买</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else-if="btnStyle == 1">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 横向滑动 -->
<view class="pt-32 pb-32 pl-24 bg--w111-fff rd-16rpx" v-if="goodStyleConfig == 5">
<scroll-view scroll-x="true" show-scrollbar="false"
class="white-nowrap vertical-middle w-full">
<view class="inline-block mr-20" v-for="(item,index) in tempArr" :key="index" @tap="goDetail(item)">
<easy-loadimage
mode="widthFix"
:image-src="item.image"
:borderSrc="item.activity_frame.image"
width="200rpx"
height="200rpx"
:borderRadius="imgStyle"></easy-loadimage>
<view class="w-200 fs-28 h-80 lh-40rpx line2 break_word mt-20"
v-if="checkboxInfo.includes(0)" :style="[productStyle]">{{item.store_name}}</view>
<view class="flex-between-center mt-8">
<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" weight
:color="priceColor" v-if="checkboxInfo.includes(2)"></baseMoney>
<view @tap.stop="addCartChange(item, index)" v-if="!showBtn">
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-if="btnStyle == 0">
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_increase fs-26"></text>
</view>
</view>
<view class="rd-24rpx w-44 h-44" :style="[btnTextColor]" v-else>
<view class="flex-center cart-btn">
<text class="iconfont icon-ic_ShoppingCart1 fs-26"></text>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
<productWindow
:attr="attr"
:isShow='1'
:iSplus='1'
:iScart='1'
:fangda="false"
type="2"
@myevent="onMyEvent"
@ChangeAttr="ChangeAttr" @ChangeCartNum="ChangeCartNumDuo" @attrVal="attrVal"
@iptCartNum="iptCartNum" @goCat="goCatNum" id='product-window' :is_vip="is_vip"></productWindow>
</view>
</template>
<script>
import { getProductslist, getAttr } from '@/api/store.js';
import skuSelect from '@/mixins/skuSelect.js'
import { toLogin } from '@/libs/login.js';
import { mapGetters, mapState } from 'vuex';
import { getCartCounts } from '@/api/order.js';
import { goShopDetail } from '@/libs/order.js';
import productWindow from '@/components/productWindow';
export default {
name: 'goodList',
props: {
dataConfig: {
type: Object,
default: () => {}
},
isSortType: {
type: String | Number,
default: 0
}
},
components: {
productWindow
},
mixins: [skuSelect],
data() {
return {
tempArr: [],
type:0,
attr: {
cartAttr: false,
productAttr: [],
productSelect: {}
},
id: 0,
productValue: [],
attrValue: '', //已选属性
storeName: '', //多属性产品名称
is_vip: 0, //是否是会员
storeInfo: {},
allList: [], // 全部列表
leftList: [], // 左边列表
rightList: [], // 右边列表
mark: 0, // 列表标记
boxHeight: [], // 下标0和1分别为左列和右列高度
};
},
watch: {
// 监听列表数据变化
tempArr: {
handler(nVal,oVal){
// 如果数据为空或新的列表数据少于旧的列表数据(通常为下拉刷新或切换排序或使用筛选器),初始化变量
if (!this.tempArr.length ||
(this.tempArr.length === this.updateNum && this.tempArr.length <= this.allList.length)) {
this.allList = [];
this.leftList = [];
this.rightList = [];
this.boxHeight = [];
this.mark = 0;
}
// 如果列表有值,调用waterfall方法
if (this.tempArr.length) {
this.allList = this.tempArr;
this.leftList = [];
this.rightList = [];
this.boxHeight = [];
this.allList.forEach((v, i) => {
if(this.allList.length < 3 || (this.allList.length <= 7 && this.allList.length - i > 1) || (this.allList.length > 7 && this.allList.length - i > 2)) {
if(i % 2){
this.rightList.push(v);
}else{
this.leftList.push(v);
}
}
});
if(this.allList.length < 3){
this.mark = this.allList.length+1;
}else if(this.allList.length <= 7){
this.mark = this.allList.length - 1;
}else{
this.mark = this.allList.length - 2;
}
if(this.mark < this.allList.length){
this.waterFall()
}
}
},
immediate: true,
deep:true
},
// 监听标记,当标记发生变化,则执行下一个item排序
mark() {
const len = this.allList.length;
if (this.mark < len && this.mark !== 0 && this.boxHeight.length) {
this.waterFall();
}
},
dataConfig() {
this.productslist();
}
},
computed:{
...mapState({
cartNum: state => state.indexData.cartNum
}),
...mapGetters(['isLogin', 'uid', 'cartNum']),
/*外层盒子样式*/
boxStyle(){
let borderRadius = `${this.dataConfig.fillet.val * 2}rpx`;
if (this.dataConfig.fillet.type) {
borderRadius =
`${this.dataConfig.fillet.valList[0].val * 2}rpx ${this.dataConfig.fillet.valList[1].val * 2}rpx ${this.dataConfig.fillet.valList[2].val * 2}rpx ${this.dataConfig.fillet.valList[3].val * 2}rpx`;
}
return {
borderRadius,
padding: `${this.dataConfig.topConfig.val * 2}rpx ${this.dataConfig.prConfig.val * 2}rpx ${this.dataConfig.bottomConfig.val * 2}rpx`,
marginTop: `${this.dataConfig.mbConfig.val * 2}rpx`,
background: this.dataConfig.bottomBgColor.color[0].item,
}
},
/*内层盒子样式*/
// boxContentStyle() {
// let borderRadius = `${this.dataConfig.fillet.val * 2}rpx`;
// if (this.dataConfig.fillet.type) {
// borderRadius =
// `${this.dataConfig.fillet.valList[0].val * 2}rpx ${this.dataConfig.fillet.valList[1].val * 2}rpx ${this.dataConfig.fillet.valList[2].val * 2}rpx ${this.dataConfig.fillet.valList[3].val * 2}rpx`;
// }
// return {
// borderRadius,
// background: this.dataConfig.bottomBgColor.color[0].item
// };
// },
styleConfig(){
return this.dataConfig.styleConfig.tabVal
},
/*商品图片圆角样式*/
imgStyle(){
let borderRadius = `${this.dataConfig.filletImg.val * 2}rpx`;
if (this.dataConfig.styleConfig.tabVal == 1) {
borderRadius = `${this.dataConfig.filletImg.val * 2}rpx ${this.dataConfig.filletImg.val * 2}rpx 0 0`;
}
if (this.dataConfig.filletImg.type) {
borderRadius =
`${this.dataConfig.filletImg.valList[0].val * 2}rpx ${this.dataConfig.filletImg.valList[1].val * 2}rpx ${this.dataConfig.filletImg.valList[2].val * 2}rpx ${this.dataConfig.filletImg.valList[3].val * 2}rpx`;
if (this.dataConfig.styleConfig.tabVal == 1) {
borderRadius = `${this.dataConfig.filletImg.valList[0].val * 2}rpx ${this.dataConfig.filletImg.valList[1].val * 2}rpx 0 0`;
}
}
return borderRadius
},
/*商品名称样式*/
productStyle(){
return {
color: this.dataConfig.goodsNameColor.color[0].item,
fontWeight: this.dataConfig.goodsName.tabVal ? 'normal' : '500'
}
},
/* 展示信息 */
checkboxInfo(){
return this.dataConfig.checkboxInfo.type
},
/* 价格颜色 */
priceColor(){
return this.dataConfig.toneConfig.tabVal ? this.dataConfig.goodsPriceColor.color[0].item : 'var(--view-theme)'
},
/* 原价颜色 */
otPriceColor(){
return this.dataConfig.goodsPriceColor.color[0].item
},
btnStyle(){
return this.dataConfig.bntStyleConfig.tabVal
},
showBtn(){
return this.dataConfig.cartConfig.tabVal
},
/* 按钮颜色 */
btnBgColor(){
return {
background: this.dataConfig.toneConfig.tabVal ? `linear-gradient(90deg,${this.dataConfig.bntBgColor.color[0].item} 0%,${this.dataConfig.bntBgColor.color[1].item} 100%)`: 'linear-gradient(90deg, var(--view-theme) 0%, var(--view-gradient) 100%)'
}
},
btnTextColor(){
return {
color: this.dataConfig.toneConfig.tabVal ? this.dataConfig.bntBgColor.color[0].item: '#FFFFFF',
background: this.dataConfig.toneCartConfig.tabVal ? `linear-gradient(90deg, ${this.dataConfig.bntBgColor.color[0].item} 0%, ${this.dataConfig.bntBgColor.color[1].item} 100%)` : 'linear-gradient(90deg, var(--view-theme) 0%, var(--view-gradient) 100%)',
}
},
/*商品数量*/
numberConfig(){
return this.dataConfig.numberConfig.val
},
/*商品模板*/
goodStyleConfig(){
return this.dataConfig.styleConfig.tabVal
},
/*检索条件 0综合 1销量 2价格*/
goodsSort(){
return this.dataConfig.goodsSort.tabVal
},
/*按照什么方式选择商品 0 指定商品 1 指定品牌 2指定分类 3 商品标签 */
typeConfig(){
return this.dataConfig.typeConfig.activeValue
},
bntConfig(){
return this.dataConfig.bntConfig.tabVal
},
onlyShowPrice(){
if(this.checkboxInfo.toString() == '0,2' || this.checkboxInfo.toString() == '2,0' || this.checkboxInfo.toString() == '2'){
return true
}else{
return false
}
}
},
created() {
// #ifndef APP-PLUS
// this.$eventHub.$on('product_video_observe', () => {
// this.observeVideo();
// });
// #endif
},
mounted() {
this.productslist();
},
methods: {
observeVideo() {
let observer = uni.createIntersectionObserver(this, { observeAll: true });
observer.relativeToViewport().observe('.video', res => {
if (res.intersectionRatio) {
uni.createVideoContext(res.id, this).play();
} else{
uni.createVideoContext(res.id, this).pause();
}
});
},
productslist() {
let limit = this.$config.LIMIT;
let data = {};
if (this.typeConfig == 1) {
data = {
ids: this.dataConfig.goodsList.ids.join(','),
};
} else {
data = {
priceOrder: this.goodsSort == 2 ? 'desc' : '',
salesOrder: this.goodsSort == 1 ? 'desc' : '',
brand_id: this.typeConfig == 2 ? this.dataConfig.brandList.brandVal.join(',') : '',
store_label_id: this.typeConfig == 4 ? this.dataConfig.goodsLabel.activeValue.join(',') : '',
cate_id: this.typeConfig == 3 ? this.dataConfig.classList.classVal.join(',') : '',
limit: this.numberConfig
};
}
getProductslist(data).then(res => {
this.tempArr = res.data;
});
},
goDetail(item) {
goShopDetail(item, this.$store.state.app.uid).catch(res => {
uni.navigateTo({
url: `/pages/goods_details/index?id=${item.id}`
});
});
},
// 商品详情接口;
getAttrs(id) {
let that = this;
getAttr(id, 0).then(res => {
that.$set(that.attr, 'productAttr', res.data.productAttr);
that.$set(that, 'productValue', res.data.productValue);
that.$set(that, 'is_vip', res.data.storeInfo.is_vip);
that.$set(that, 'storeInfo', res.data.storeInfo);
that.DefaultSelect();
})
},
addCartChange(item, index){
if(this.bntConfig == 1){
if(item.spec_type){
this.goCartDuo(item);
}else{
this.goCartDan(item,index);
}
}else{
this.goDetail(item);
}
},
getCartNum() {
let that = this;
getCartCounts().then(res => {
this.$store.commit('indexData/setCartNum', res.data.count)
});
},
// 瀑布流排序
waterFall() {
const i = this.mark;
if (i == 0) {
// 初始化,从左边开始插入
this.leftList.push(this.allList[i]);
// 更新左边列表高度
this.getViewHeight(0);
} else if (i == 1) {
// 第二个item插入,默认为右边插入
this.rightList.push(this.allList[i]);
// 更新右边列表高度
this.getViewHeight(1);
} else {
// 根据左右列表高度判断下一个item应该插入哪边
if(!this.boxHeight.length){
this.rightList.length < this.leftList.length
? this.rightList.push(this.allList[i])
: this.leftList.push(this.allList[i]);
} else {
const leftOrRight = this.boxHeight[0] > this.boxHeight[1] ? 1 : 0;
if (leftOrRight) {
this.rightList.push(this.allList[i])
} else {
this.leftList.push(this.allList[i])
}
}
// 更新插入列表高度
this.getViewHeight();
}
},
// 获取列表高度
getViewHeight() {
// 使用nextTick,确保页面更新结束后,再请求高度
this.$nextTick(() => {
setTimeout(()=>{
uni.createSelectorQuery().in(this).select('#right').boundingClientRect(res => {
res ? this.boxHeight[1] = res.height : '';
uni.createSelectorQuery().in(this).select('#left').boundingClientRect(res => {
res ? this.boxHeight[0] = res.height : '';
this.mark = this.mark + 1;
}).exec();
}).exec();
},100)
})
},
}
};
</script>
<style lang="scss">
$page-padding: 10px;
$grid-gap: 10px;
.wf-page {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 20rpx;
}
.wf-item {
width: calc((100vw - 2 * #{$page-padding} - #{$grid-gap}) / 2);
padding-bottom: 20rpx;
}
.wf-page1 .wf-item{
margin-top: 20rpx;
background-color: #fff;
border-radius: 20rpx;
padding-bottom: 0;
}
.item ~ .item{
margin-top: 32rpx;
}
.info_box{
padding: 16rpx 20rpx;
border-radius: 0 0 20rpx 20rpx;
background-color: #fff;
}
.bg--w111-484643{
background: linear-gradient(90deg, #484643 0%, #1F1B17 100%);
}
.text--w111-FDDAA4{
color: #FDDAA4;
}
.svip_rd{
border-radius: 14rpx 0 8rpx 14rpx;
}
.cart-btn{
// background:rgba(255,255,255,0.9);
width: 100%;
height: 100%;
}
</style>