From 41c7557b6ba2db6c48a9ebbad232b4fb6407f6d6 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 27 六月 2025 16:13:11 +0800
Subject: [PATCH] 神厨页面同步视频推荐
---
pages/commodity-square/commoditySquare.vue | 256 ++++++++++++++++++++++++++++++++++++--------------
1 files changed, 183 insertions(+), 73 deletions(-)
diff --git a/pages/commodity-square/commoditySquare.vue b/pages/commodity-square/commoditySquare.vue
index 2fdf32b..2512eaa 100644
--- a/pages/commodity-square/commoditySquare.vue
+++ b/pages/commodity-square/commoditySquare.vue
@@ -1,24 +1,26 @@
<template>
<view class="container">
+ <top-bar selectedTitleIndex="shop" textColor="black" @changeTab="topBarChange" class="topBar"></top-bar>
<input type="text" v-show="false" v-model="flushDom" />
- <view class="search">
+ <view class="search" :style="{marginTop: buttonHeight+'px',}">
<u-search class="nav-search" @blur='searchGoods' placeholder="鎼滅储鍟嗗搧" :show-action="false"></u-search>
</view>
- <view class="commoditySquare">
+ <scroll-view class="scrollContainer" :scroll-y="true" @scrolltolower="loadMoreData" >
+ <view class="commoditySquare">
<view class="left" style="width: 310rpx;">
<view class="commoditySquareItem" v-for="(item,index) in goodsList1"
@click="goToGoodsInfo('goodsList1',item.id)">
- <video :src="item.goodsVideo" v-if="item.goodsVideo " v-show="item.show" :initial-time="0"
+ <!-- <video :src="item.goodsVideo" v-if="item.goodsVideo " v-show="item.show" :initial-time="0"
:controls="false" object-fit="contain" :show-play-btn="false" :show-center-play-btn="false"
@loadedmetadata="getvideoInfo($event,'goodsList1',index)" :ref="'video'+item.id"
- :style="{width:item.width,height:item.height}"></video>
- <image :src="item.thumbnail" v-if="item.goodsVideo ==null || item.goodsVideo == ''"
+ :style="{width:item.width,height:item.height}"></video> -->
+ <image :src="item.thumbnail"
mode="aspectFill" class="goodsImg">
</image>
<view class="goodsInfo">
- <view class="">{{item.goodsName}}</view>
+ <view class="goodsName">{{item.goodsName}}</view>
<view class="priceInfo">
- <view class="">锟{item.price}}</view>
+ <view class="goodsPrice">锟{item.price}}</view>
<view class="">宸插敭: {{item.buyCount}}</view>
</view>
</view>
@@ -27,44 +29,44 @@
<view class="right" style="width: 310rpx;">
<view class="commoditySquareItem" v-for="(item,index) in goodsList2"
@click="goToGoodsInfo('goodsList2',item.id)">
- <video :src="item.goodsVideo" v-if="item.goodsVideo " v-show="item.show" :initial-time="0"
+<!-- <video :src="item.goodsVideo" v-if="item.goodsVideo " v-show="item.show" :initial-time="0"
:controls="false" object-fit="contain" :show-play-btn="false" :show-center-play-btn="false"
@loadedmetadata="getvideoInfo($event,'goodsList2',index)" :ref="'video'+item.id"
- :style="{width:item.width,height:item.height}"></video>
- <image :src="item.thumbnail" v-if="item.goodsVideo ==null || item.goodsVideo == ''"
+ :style="{width:item.width,height:item.height}"></video> -->
+ <image :src="item.thumbnail"
mode="aspectFill" class="goodsImg">
</image>
<view class="goodsInfo">
- <view class="">{{item.goodsName}}</view>
+ <view class="goodsName">{{item.goodsName}}</view>
<view class="priceInfo">
- <view class="">锟{item.price}}</view>
+ <view class="goodsPrice">锟{item.price}}</view>
<view class="">宸插敭: {{item.buyCount}}</view>
</view>
</view>
</view>
</view>
-
<view class="openShowLeft" @click="showDrawer('showLeft')" v-if="!showLeft">
<uni-icons type="right" size="30"></uni-icons>
</view>
- <uni-drawer ref="showLeft" mode="left" width="120" height="94vh" @change="change($event,'showLeft')"
- :cus-style="true" class="navigationLeft">
- <scroll-view class="typeNavigation" :scroll-y="true" show-scrollbar="false">
+ </view>
+ <view style="display: flex;align-items: center;justify-content: center;margin-top: 20rpx;" v-if="canLoadMore">
+ 娌℃湁鏇村鏁版嵁浜�.................</view>
+ </scroll-view>
+ <uni-drawer ref="showLeft" mode="left" width="120" height="80vh" :drawerTop="buttonHeight" @change="change($event,'showLeft')"
+ :cus-style="true" class="navigationLeft" :mask="false">
+ <scroll-view class="typeNavigation" :scroll-y="true" :show-scrollbar="false" >
<view class="typeNavigationItem" :class="{typeNavigationItemCheck:currentCategort ==item.id}"
@click="chooseCategory(item.id)" v-for="item in categoryList" :key="item.id">
{{item.name}}
</view>
</scroll-view>
</uni-drawer>
- </view>
- <view style="display: flex;align-items: center;justify-content: center;margin-top: 20rpx;" v-if="canLoadMore">
- 娌℃湁鏇村鏁版嵁浜�.................</view>
- <custom-tabbar bgColor="#ffffff" selected="shop"></custom-tabbar>
</view>
</template>
<script>
+ import TopBar from "@/components/TopBar.vue";
import {
getCategoryList,
getGoodsList
@@ -73,8 +75,13 @@
getSTSToken
} from '@/api/common.js'
export default {
+ components: {TopBar},
data() {
return {
+ buttonHeight:0,
+ //璁板綍涓ゅ垪楂樺害
+ listHeight1: 0,
+ listHeight2: 0,
//鏄惁鏄剧ず鎵撳紑宸︿晶寮圭獥
showLeft: false,
//鍟嗗搧瀵艰埅鍒嗙被
@@ -93,6 +100,7 @@
pageSize: 12,
pageNumber: 1,
categoryId: null,
+ canFilter:true
},
//鍟嗗搧鍙屽垪鏄剧ず
goodsList1: [],
@@ -100,12 +108,25 @@
}
},
methods: {
+ topBarChange(titleObj) {
+ if (titleObj.index === 'home') {
+ uni.switchTab({
+ url: titleObj.pagePath
+ });
+ } else {
+ uni.redirectTo({
+ url: titleObj.pagePath
+ });
+ }
+ },
async searchGoods(keyWard) {
this.getGoodsParam.keyword = keyWard
this.getGoodsParam.pageNumber = 1
this.getGoodsParam.categoryId = ''
this.goodsList1 = []
this.goodsList2 = []
+ this.listHeight1 = 0;
+ this.listHeight2 = 0;
await this.getgoodsData();
},
confirm() {},
@@ -126,9 +147,24 @@
const height = e.detail.height;
this[arrName][index].width = 310 + 'rpx';
//璁$畻瀹介珮姣�
- const videoHeight = 310 / (wight / height)
- this[arrName][index].height = Math.floor(videoHeight) + 'rpx';
+ const videoHeight = Math.floor(310 / (wight / height))
+ this[arrName][index].height = videoHeight + 'rpx';
this[arrName][index].show = true;
+ //璁$畻闆嗗悎楂樺害
+ if (arrName === 'goodsList2') {
+ if (videoHeight > 300) {
+ this.listHeight2 += videoHeight;
+ } else if (videoHeight < 300) {
+ this.listHeight2 -= videoHeight;
+ }
+ }
+ if (arrName === 'goodsList1') {
+ if (videoHeight > 300) {
+ this.listHeight1 += videoHeight;
+ } else if (videoHeight < 300) {
+ this.listHeight1 -= videoHeight;
+ }
+ }
console.log(this[arrName][index].width, this[arrName][index].height)
this.flushDom = new Date();
},
@@ -138,6 +174,16 @@
url: `/pages/product/goods?id=${item.id}&goodsId=${item.goodsId}`
});
},
+ //瑙﹀簳鑾峰彇鏁版嵁
+ async loadMoreData() {
+ if (this.getGoodsParam.pageNumber < this.maxPages) {
+ this.getGoodsParam.pageNumber++;
+ await this.getgoodsData()
+ } else {
+ this.canLoadMore = true;
+ }
+
+ },
//鑾峰彇鍒嗙被瀵艰埅鏍�
async loadCategoryList() {
let list = await getCategoryList(0);
@@ -145,24 +191,48 @@
},
async getgoodsData() {
const goodsList = await getGoodsList(this.getGoodsParam);
- const sts = await getSTSToken();
- const stsUrl = sts.data.data.endpoint
- // 澶勭悊鏁版嵁
- goodsList.data.result.records.forEach(item => {
- if (item.thumbnail !== '' && item.thumbnail !== null && item.thumbnail.indexOf('http') ===
- -1) {
- item.thumbnail = stsUrl + '/' + item.thumbnail
- }
- if (item.goodsVideo !== '' && item.goodsVideo !== null && item.goodsVideo.indexOf(
- 'http') === -1) {
- item.goodsVideo = stsUrl + '/' + item.goodsVideo
- }
- })
+ // const sts = await getSTSToken();
+ // const stsUrl = sts.data.data.endpoint
+ // // 澶勭悊鏁版嵁
+ // goodsList.data.result.records.forEach(item => {
+ // if (item.thumbnail !== '' && item.thumbnail !== null && item.thumbnail.indexOf('http') ===
+ // -1) {
+ // item.thumbnail = stsUrl + '/' + item.thumbnail
+ // }
+ // if (item.goodsVideo !== '' && item.goodsVideo !== null && item.goodsVideo.indexOf(
+ // 'http') === -1) {
+ // item.goodsVideo = stsUrl + '/' + item.goodsVideo
+ // }
+ // })
+ //璁$畻涓や釜鏁扮粍鐨勯暱搴� 鐢ㄤ簬瑙e喅鐎戝竷娴佷袱杈归珮搴︿笉涓�鑷撮棶棰�
//骞冲垎缁欎袱涓暟缁�
- const middle = Math.ceil(goodsList.data.result.records.length / 2);
+ const goodsSize = goodsList.data.result.records.length;
+ let middle = Math.ceil(goodsSize / 2);
+ //鍒ゆ柇閭d釜闆嗗悎闀垮害楂� 閲嶆柊鍒嗛厤闆嗗悎鏁版嵁
+ const diffHeight = this.listHeight1 - this.listHeight2;
+ //list1闀垮害澶т簬list2
+ if (diffHeight > 0) {
+ const needCount = Math.floor(diffHeight / 300)
+ if (needCount > 6) {
+ middle = 0;
+ } else {
+ middle -= needCount;
+ }
+ } else if(diffHeight < 0) {
+ const needCount = Math.abs(Math.floor(diffHeight / 300))
+ if (needCount > 6) {
+ middle += 6
+ } else {
+ middle = needCount;
+ }
+ }
this.goodsList1 = [...this.goodsList1, ...goodsList.data.result.records.slice(0, middle)];
this.goodsList2 = [...this.goodsList2, ...goodsList.data.result.records.slice(middle)];
this.maxPages = goodsList.data.result.pages
+
+ // if(this.listHeight1===0||this.listHeight2===0)}
+ this.listHeight1 += middle * 300;
+ this.listHeight2 += (goodsSize - middle) * 300
},
async chooseCategory(id) {
this.canLoadMore = false;
@@ -172,6 +242,8 @@
this.getGoodsParam.pageNumber = 1
this.goodsList1 = [];
this.goodsList2 = [];
+ this.listHeight1 = 0;
+ this.listHeight2 = 0;
await this.getgoodsData();
console.log(this.maxPages)
}
@@ -180,20 +252,15 @@
this.showDrawer('showLeft')
},
async onLoad() {
+ // 鑾峰彇鐘舵�佹爮楂樺害
+ const systemInfo = uni.getSystemInfoSync();
+ this.buttonHeight = systemInfo.statusBarHeight +40;
+ console.log('-------------------------------->',this.buttonHeight)
await this.loadCategoryList();
this.getGoodsParam.pageNumber = 1
this.getGoodsParam.categoryId = ""
this.getGoodsParam.keyword = ""
await this.getgoodsData()
- },
- async onReachBottom() {
- if (this.getGoodsParam.pageNumber < this.maxPages) {
- this.getGoodsParam.pageNumber++;
- await this.getgoodsData()
- } else {
- this.canLoadMore = true;
- }
-
}
}
</script>
@@ -202,16 +269,27 @@
.container {
width: 750rpx;
padding-bottom: 64rpx;
+ height: 100vh;
+ overflow: hidden;
}
.commoditySquare {
width: 750rpx;
- position: relative;
box-sizing: border-box;
display: flex;
justify-content: space-around;
+ height: 100%;
}
-
+ .scrollContainer{
+ overflow: hidden;
+ height: 1224rpx;
+ -webkit-overflow-scrolling: touch;
+ }
+ .scrollContainer::-webkit-scrollbar {
+ display: none; /* Chrome/Safari绛� */
+ width: 0 !important; /* 鍏煎iOS */
+ height: 0 !important;
+ }
.left {
box-sizing: border-box;
}
@@ -243,7 +321,7 @@
.openShowLeft {
position: fixed;
- top: 120rpx;
+ top: 200rpx;
left: 0;
align-items: center;
justify-content: flex-start;
@@ -263,29 +341,29 @@
}
- .scroll-view {
- /* #ifndef APP-NVUE */
- width: 100%;
- height: 100%;
- /* #endif */
- flex: 1
- }
+ // .scroll-view {
+ // /* #ifndef APP-NVUE */
+ // width: 100%;
+ // height: 100%;
+ // /* #endif */
+ // flex: 1
+ // }
- .priceInfo {
- margin-top: 10rpx;
- display: flex;
- justify-content: space-around;
- }
+ // .priceInfo {
+ // margin-top: 10rpx;
+ // display: flex;
+ // justify-content: space-around;
+ // }
// 澶勭悊鎶藉眽鍐呭婊氬姩
- .scroll-view-box {
- flex: 1;
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- }
+ // .scroll-view-box {
+ // flex: 1;
+ // position: absolute;
+ // top: 0;
+ // right: 0;
+ // bottom: 0;
+ // left: 0;
+ // }
.typeNavigation {
@@ -300,13 +378,12 @@
font-size: 28rpx;
color: black;
margin-top: 10rpx;
- border-radius: 12rpx;
- border: 1rpx solid gray;
}
.typeNavigationItemCheck {
- background-color: #42b993;
- color: #fff;
+ color: #ef321e;
+ font-size: 32rpx;
+ font-weight: bold;
border: 0;
}
@@ -324,4 +401,37 @@
// width: 500rpx;
// z-index: 9999;
}
-</style>
\ No newline at end of file
+ .goodsInfo{
+ margin-top: 10rpx;
+ box-sizing: border-box;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ }
+ .goodsName{
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 1;
+ height: 32rpx;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ text-align: center;
+ vertical-align: middle;
+ }
+ .priceInfo{
+ margin-top: 10rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ .goodsPrice{
+ color: red;
+ font-weight: bold;
+ }
+ .topBar {
+ position: fixed;
+ top: 20rpx;
+ left: 20rpx;
+ z-index: 1000
+ }
+</style>
--
Gitblit v1.8.0