tmp: 部分代码与UnishopV5结合,但是代码有严重缺陷
This commit is contained in:
@@ -2,20 +2,20 @@
|
||||
<view data-component-name="diy-category" :class="['category-page-wrap', 'category-template-' + value.template]"
|
||||
:style="{height: 'calc(100vh - '+ tabBarHeight +')' }">
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
<!-- <block v-if="value.template == 4">
|
||||
<block v-if="value.template == 4">
|
||||
<view class="search-box" v-if="value.search" @click="$util.redirectTo('/pages_tool/goods/search')" :style="navbarInnerStyle">
|
||||
<view class="search-content">
|
||||
<input type="text" class="uni-input font-size-tag" maxlength="50" :placeholder="$lang('search')" confirm-type="search" disabled="true" />
|
||||
<input type="text" class="uni-input font-size-tag" maxlength="50" :placeholder="$lang('search')" confirm-type="search" readonly="true" disabled="true" />
|
||||
<text class="iconfont icon-sousuo3"></text>
|
||||
</view>
|
||||
</view>
|
||||
<view :style="navbarInnerStyle" v-if="!value.search">商品分类</view>
|
||||
</block> -->
|
||||
</block>
|
||||
<block v-if="value.template != 4">
|
||||
<!-- <view :style="navbarInnerStyle">商品分类</view> -->
|
||||
<view :style="navbarInnerStyle">商品分类</view>
|
||||
<view class="search-box" v-if="value.search" @click="$util.redirectTo('/pages_tool/goods/search')" :style="wxSearchHeight">
|
||||
<view class="search-content">
|
||||
<input type="text" class="uni-input" maxlength="50" :placeholder="$lang('search')" confirm-type="search" disabled="true" />
|
||||
<input type="text" class="uni-input" maxlength="50" :placeholder="$lang('search')" confirm-type="search" readonly="true" disabled="true" />
|
||||
<text class="iconfont icon-sousuo3"></text>
|
||||
</view>
|
||||
</view>
|
||||
@@ -24,11 +24,12 @@
|
||||
<!-- #ifdef H5 -->
|
||||
<view class="search-box" v-if="value.search" @click="$util.redirectTo('/pages_tool/goods/search')">
|
||||
<view class="search-content">
|
||||
<input type="text" class="uni-input" maxlength="50" :placeholder="$lang('search')" confirm-type="search" disabled="true" />
|
||||
<input type="text" class="uni-input" maxlength="50" :placeholder="$lang('search')" confirm-type="search" readonly="true" disabled="true" />
|
||||
<text class="iconfont icon-sousuo3"></text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
|
||||
<view class="template-four wx" v-if="value.template == 4">
|
||||
<scroll-view scroll-x="true" class="template-four-wrap" :scroll-with-animation="true" :scroll-into-view="'category-one-' + oneCategorySelect" enable-flex="true">
|
||||
<view class="category-item" :id="'category-one-' + index" v-for="(item, index) in templateFourData" :key="index" :class="{ select: oneCategorySelect == index }" @click="templateFourOneFn(index)">
|
||||
@@ -71,12 +72,13 @@
|
||||
{ 'border-bottom': value.template == 4 && select + 1 === index },
|
||||
{ 'border-top': value.template == 4 && select - 1 === index }
|
||||
]" @click="switchOneCategory(index)">
|
||||
<view class="">{{ item.category_name }}</view>
|
||||
<view>{{ item.category_name }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<view class="right-flex-wrap">
|
||||
|
||||
<scroll-view scroll-y="true" class="content-wrap" v-if="value.template == 1 || loadType == 'all'"
|
||||
ref="contentWrap" :scroll-into-view="categoryId" :scroll-with-animation="true"
|
||||
@scroll="listenScroll" @touchstart="touchStart" :refresher-enabled="true"
|
||||
@@ -113,8 +115,8 @@
|
||||
<image :src="$util.img('public/uniapp/category/empty.png')" mode="widthFix"></image>
|
||||
<view class="tips">暂时没有分类哦!</view>
|
||||
</view>
|
||||
|
||||
<!-- <view class="cart-box" v-if="(value.template == 2 || value.template == 4) && value.quickBuy && storeToken && categoryTree && categoryTree.length">
|
||||
<view class="cart-bottom-block" v-if="(value.template == 2 || value.template == 4) && value.quickBuy && storeToken && categoryTree && categoryTree.length"></view>
|
||||
<view class="cart-box" v-if="(value.template == 2 || value.template == 4) && value.quickBuy && storeToken && categoryTree && categoryTree.length" :style="{ bottom: tabBarHeight }" :class="{ active: isIphoneX }">
|
||||
<view class="left-wrap">
|
||||
<view class="cart-icon" ref="cartIcon" :animation="cartAnimation" @click="$util.redirectTo('/pages/goods/cart')">
|
||||
<text class="iconfont icon-ziyuan1"></text>
|
||||
@@ -127,9 +129,10 @@
|
||||
<text class="unit font-size-tag price-font">.{{ cartTotalMoney[1] ? cartTotalMoney[1] : '00' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="right-wrap"><button type="primary" class="settlement-btn" @click="settlement">去结算</button>
|
||||
<view class="right-wrap">
|
||||
<button type="primary" class="settlement-btn" @click="settlement">去结算</button>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<view class="cart-point" :style="{ left: item.left + 'px', top: item.top + 'px' }" :key="index" v-for="(item, index) in carIconList"></view>
|
||||
|
||||
@@ -176,34 +179,27 @@
|
||||
cartAnimation: {},
|
||||
loadType: '',
|
||||
templateFourData: [],
|
||||
isIphoneX: false, //判断手机是否是iphoneX以上,
|
||||
lang:uni.getStorageSync("lang")//en-us 英文
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.isIphoneX = this.$util.uniappIsIPhoneX();
|
||||
this.getCategoryTree();
|
||||
this.loadType = this.value.goodsLevel == 1 && this.value.loadType == 'all' ? 'all' : 'part';
|
||||
},
|
||||
mounted() {
|
||||
query = uni.createSelectorQuery().in(this);
|
||||
query
|
||||
.select('.content-wrap')
|
||||
.boundingClientRect(data => {
|
||||
if (data) contentWrapHeight = data.height;
|
||||
})
|
||||
.exec();
|
||||
query.select('.content-wrap').boundingClientRect(data => {
|
||||
if (data) contentWrapHeight = data.height;
|
||||
}).exec();
|
||||
setTimeout(() => {
|
||||
query
|
||||
.select('.end-tips')
|
||||
.boundingClientRect(data => {
|
||||
if (data && data.top > contentWrapHeight) this.endTips = 1;
|
||||
})
|
||||
.exec();
|
||||
query
|
||||
.select('.cart-icon')
|
||||
.boundingClientRect(data => {
|
||||
if (data) cartPosition = data;
|
||||
})
|
||||
.exec();
|
||||
query.select('.end-tips').boundingClientRect(data => {
|
||||
if (data && data.top > contentWrapHeight) this.endTips = 1;
|
||||
}).exec();
|
||||
query.select('.cart-icon').boundingClientRect(data => {
|
||||
if (data) cartPosition = data;
|
||||
}).exec();
|
||||
if (this.value.template == 1) this.getHeightArea(-1);
|
||||
}, 500);
|
||||
},
|
||||
@@ -250,7 +246,7 @@
|
||||
style += 'padding-top:' + this.navbarHeight + 'px;';
|
||||
style += 'text-align: center;';
|
||||
style += 'line-height:' + menuButtonInfo.height * 2 + 'rpx;';
|
||||
style += 'font-size: 14px;';
|
||||
style += 'font-size: 16px;';
|
||||
style += 'padding-bottom: 10rpx;';
|
||||
}
|
||||
return style;
|
||||
@@ -282,27 +278,48 @@
|
||||
pageShow() {
|
||||
this.$store.dispatch('getCartNumber');
|
||||
if (!this.heightArea.length) this.getHeightArea(-1);
|
||||
this.dealCategoryData()
|
||||
},
|
||||
dealCategoryData() {
|
||||
if (uni.getStorageSync('tabBarParams')) {
|
||||
if (this.value.template != 4) {
|
||||
this.categoryTree.forEach((item,index) => {
|
||||
if(item.category_id == uni.getStorageSync('tabBarParams').split('=')[1]) {
|
||||
this.select = index;
|
||||
this.categoryId = 'category-' + index;
|
||||
// 阻止切换分类之后滚动事件也立即执行
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.templateFourData.forEach((item,index) => {
|
||||
if(item.category_id == uni.getStorageSync('tabBarParams').split('=')[1]) {
|
||||
this.oneCategorySelect = index;
|
||||
this.categoryId = 'category-' + index;
|
||||
// 阻止切换分类之后滚动事件也立即执行
|
||||
this.categoryTree = this.templateFourData[index].child_list || [];
|
||||
this.select = 0;
|
||||
}
|
||||
})
|
||||
}
|
||||
uni.removeStorageSync('tabBarParams')
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 获取高度区间
|
||||
*/
|
||||
getHeightArea(index) {
|
||||
let heightArea = [];
|
||||
query
|
||||
.selectAll('.content-wrap .child-category')
|
||||
.boundingClientRect(data => {
|
||||
if (data && data.length) {
|
||||
data.forEach((item, index) => {
|
||||
if (index == 0) heightArea.push([0, item.height]);
|
||||
else heightArea.push([heightArea[index - 1][1], heightArea[index - 1][1] +
|
||||
item.height
|
||||
]);
|
||||
});
|
||||
}
|
||||
})
|
||||
.exec();
|
||||
query.selectAll('.content-wrap .child-category').boundingClientRect(data => {
|
||||
if (data && data.length) {
|
||||
data.forEach((item, index) => {
|
||||
if (index == 0) heightArea.push([0, item.height]);
|
||||
else heightArea.push([heightArea[index - 1][1], heightArea[index - 1][1] + item.height]);
|
||||
});
|
||||
}
|
||||
}).exec();
|
||||
this.heightArea = heightArea;
|
||||
if (index != -1 && index < this.categoryTree.length - 1) this.$refs.categoryItem[index + 1].getGoodsList();
|
||||
this.refreshData();
|
||||
},
|
||||
/**
|
||||
* 获取全部分类
|
||||
@@ -332,6 +349,7 @@
|
||||
return item;
|
||||
});
|
||||
}
|
||||
this.dealCategoryData()
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -364,8 +382,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (this.value.template != 1 && this.value.loadType == 'all' && this.heightArea[this.select][1] -
|
||||
scrollTop - contentWrapHeight < 300) {
|
||||
if (this.value.template != 1 && this.value.loadType == 'all' && this.heightArea[this.select][1] - scrollTop - contentWrapHeight < 300) {
|
||||
this.$refs.categoryItem[this.select].getGoodsList();
|
||||
}
|
||||
}
|
||||
@@ -433,6 +450,37 @@
|
||||
});
|
||||
},
|
||||
settlement() {
|
||||
|
||||
// 是否有商品库存不足 不足最小购买数 超过最大购买数
|
||||
var no_buy = false;
|
||||
|
||||
for (let k in this.cartList) {
|
||||
let item = this.cartList[k];
|
||||
|
||||
for (let sku in item) {
|
||||
if (item.max_buy && item.num > item.max_buy){
|
||||
no_buy = true;
|
||||
this.$util.showToast({title: '商品' + item.goods_name+'商品最多可购买'+item.max_buy+'件'})
|
||||
break;
|
||||
}
|
||||
if (typeof item[sku] == 'object') {
|
||||
if (item[sku].num > item[sku].stock){
|
||||
no_buy = true;
|
||||
this.$util.showToast({title: '商品' + item.goods_name+'库存不足'})
|
||||
break;
|
||||
}
|
||||
if (item[sku].min_buy && item[sku].num < item[sku].min_buy){
|
||||
no_buy = true;
|
||||
this.$util.showToast({title: '商品' + item.goods_name+'商品最少要购买'+item[sku].min_buy+'件'})
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(no_buy) return;
|
||||
|
||||
if (!this.cartIds.length || this.isSub) return;
|
||||
this.isSub = true;
|
||||
|
||||
@@ -520,7 +568,7 @@
|
||||
},
|
||||
// 操作多规格商品弹框后,刷新商品数据
|
||||
refreshData() {
|
||||
this.$refs.categoryItem[this.select].loadGoodsCartNum(true);
|
||||
if(this.$refs.categoryItem) this.$refs.categoryItem[this.select].loadGoodsCartNum(true);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -529,7 +577,8 @@
|
||||
<style lang="scss">
|
||||
.category-page-wrap {
|
||||
width: 100vw;
|
||||
// height: calc(100vh - var(--tab-bar-height, 0));
|
||||
height: 100vh;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: #fff;
|
||||
@@ -584,10 +633,16 @@
|
||||
view {
|
||||
color: #222222;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
// white-space: nowrap;
|
||||
// text-overflow: ellipsis;
|
||||
line-height: 1.3;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
// display: -webkit-box;
|
||||
// -webkit-line-clamp: 2;
|
||||
// -webkit-box-orient: vertical;
|
||||
word-break: break-all;
|
||||
max-height: 100rpx;
|
||||
}
|
||||
|
||||
&.border-top {
|
||||
@@ -667,6 +722,11 @@
|
||||
.cart-box {
|
||||
height: 100rpx;
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: var(--tab-bar-height, 0);
|
||||
// bottom: calc( constant(safe-area-inset-bottom) + 110rpx );
|
||||
// bottom: calc( env(safe-area-inset-bottom) + 110rpx );
|
||||
background: #fff;
|
||||
border-top: 1px solid #f5f5f5;
|
||||
box-sizing: border-box;
|
||||
@@ -739,6 +799,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
.cart-box.active {
|
||||
bottom: calc(constant(safe-area-inset-bottom) + 110rpx) !important;
|
||||
bottom: calc(env(safe-area-inset-bottom) + 110rpx) !important;
|
||||
}
|
||||
|
||||
.cart-point {
|
||||
width: 26rpx;
|
||||
height: 26rpx;
|
||||
@@ -785,7 +850,7 @@
|
||||
}
|
||||
|
||||
.cart-box {
|
||||
position: relative;
|
||||
// position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
@@ -865,15 +930,30 @@
|
||||
}
|
||||
|
||||
.text {
|
||||
padding: 2rpx 16rpx;
|
||||
padding: 2rpx 0;
|
||||
border-radius: 40rpx;
|
||||
font-size: $font-size-tag;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
.ellipsis {
|
||||
// text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
.text {
|
||||
background-color: $base-color;
|
||||
color: var(--btn-text-color);
|
||||
line-height: 1.3;
|
||||
border: 4rpx solid transparent;
|
||||
border-color: $base-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1004,4 +1084,7 @@
|
||||
border-bottom-right-radius: 8rpx;
|
||||
}
|
||||
}
|
||||
.cart-bottom-block {
|
||||
height: 100rpx;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user