From b1fd37e9f5ba5d3d7e35300ee97dff90a4065619 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 27 十月 2025 17:30:07 +0800
Subject: [PATCH] 我的页面
---
pages/commodity-square/commoditySquare.vue | 257 ++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 201 insertions(+), 56 deletions(-)
diff --git a/pages/commodity-square/commoditySquare.vue b/pages/commodity-square/commoditySquare.vue
index 06ae8ae..a8dec07 100644
--- a/pages/commodity-square/commoditySquare.vue
+++ b/pages/commodity-square/commoditySquare.vue
@@ -6,8 +6,20 @@
<u-search class="nav-search" @change='searchGoods' v-model="searchInfo" placeholder="鎼滅储鍟嗗搧"
:show-action="false"></u-search>
</view>
- <view style="display: flex;padding: 32rpx;box-sizing: border-box;height: 100%;">
- <view class="navigatorMenue">
+ <view class="banner" style="margin-top: 14rpx;" v-if="bannerList.length>0">
+ <swiper :indicator-dots="false" :autoplay="true" :interval="3000" :duration="1000" :circular="true"
+ style="width: 100%;height: 160rpx;">
+ <swiper-item v-for="item in bannerList" :key="item.id"
+ @click="navigateGoodsInfo(item.skuId,item.goodsId)">
+ <view style="width: 100%; display: flex; align-items: center;justify-content: center;">
+ <image :src="item.showBannerUrl" mode="aspectFill"
+ style="width: 690rpx;height: 150rpx;border-radius: 24rpx;overflow: hidden;"></image>
+ </view>
+ </swiper-item>
+ </swiper>
+ </view>
+ <view style="display: flex;padding: 32rpx;box-sizing: border-box;">
+ <view class="navigatorMenue" style="height: 1050rpx;">
<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">
@@ -16,37 +28,39 @@
</scroll-view>
</view>
- <view class="goodsInfos" style="position: relative;">
- <scroll-view :scroll-y="true" :show-scrollbar="false" style="height: 100%;" @scrolltolower="loadMoreData()">
+ <view class="goodsInfos" style="position: relative;overflow: hidden;box-sizing: border-box;">
+ <scroll-view :scroll-y="true" :show-scrollbar="false" style="height: 1050rpx;"
+ @scrolltolower="loadMoreData()">
<view class="goodsItem" v-for="item in goodsList" :key="item.id"
- @click.prevent="goToGoodsInfo(item.id)"
- style="display: flex;align-items: flex-start;justify-content: flex-start;margin: 10rpx 0;
- box-sizing: border-box; ">
+ @click.prevent="goToGoodsInfo(item.id)" style="display: flex;align-items: flex-start;justify-content: flex-start;margin: 10rpx 0;
+ box-sizing: border-box; border-bottom: 1rpx solid lightgray;">
<view class="pic" style="position: relative;">
<image :src="item.thumbnail" mode="aspectFill"
- style="height: 150rpx;width: 150rpx;border-radius: 24rpx;">
+ style="height: 200rpx;width: 200rpx;border-radius: 24rpx;">
</image>
<text style="background-color: #f92e20;color: #fff;
font-weight: bold;border-radius: 12rpx;padding: 5rpx;
margin-right: 15rpx;position: absolute;top: 0;left: 0;" v-if="item.salesModel==='PRESALE'">棰勫敭</text>
</view>
- <view class="goodsContent" style="display: flex;align-items: flex-start;justify-content: space-between;
+ <view style="display: flex;align-items: flex-start;justify-content: space-between;
margin-left: 10rpx;flex-direction: column;width: 100%;">
<view class="goodsName">
<text>{{item.goodsName}}</text>
</view>
-
- <view
- style="display: flex; justify-content: space-between;align-items:center; 100%;margin-top: 32rpx;width: 100%;">
- <view class="goodsPrice">锟{item.price}}</view>
- <view class="addCard" style="display: flex; align-items: center;">
+ <view class="goodsContent" style="font-size: 24rpx;">
+ {{item.sellingPoint}}
+ </view>
+ <view
+ style="display: flex; justify-content: space-between;align-items:center;height: 100%;width: 100%;">
+ <view class="goodsPrice" style="padding: 20rpx 0;">锟{item.price}}</view>
+ <view class="addCard" style="display: flex; align-items: center;" v-if="item.goodsType !=='VIRTUAL_GOODS'&& item.customizeFlag!=='CUSTOMIZE'">
<view style="padding: 20rpx 0 20rpx 20rpx;" v-show="item.cardNum && item.cardNum>0"
@click.stop="miousCardNum($event,item.id)">
<uni-icons type="minus" size="30" color="#96a6bc"></uni-icons>
</view>
- <input v-show="item.cardNum&&item.cardNum>0" @click.stop="" :maxlength="2" type="number"
- confirm-type="numeric" style="width: 50rpx;text-align: center;"
+ <input v-show="item.cardNum&&item.cardNum>0" @click.stop="" :maxlength="2"
+ type="number" confirm-type="numeric" style="width: 50rpx;text-align: center;"
v-model="item.cardNum" :disabled="true" />
<view style="padding: 20rpx 20rpx 20rpx 0;"
@click.stop="addCardNum($event,item.id)">
@@ -58,21 +72,39 @@
</view>
</view>
</scroll-view>
- </view>
- <view @click="gotoCardList()" style="position: absolute;bottom: 120rpx; right: 32rpx;">
- <div class="settlement" >鍘昏喘鐗╄溅缁撶畻</div>
- </view>
</view>
+ <!-- <view @click="gotoCardList()" style="position: absolute;bottom: 120rpx; right: 32rpx;">
+ <view class="settlement">鍘昏喘鐗╄溅缁撶畻</view>
+ </view> -->
</view>
-
+ <view @click="gotoCardList()" class="squareFotter" style="width: 750rpx; display: flex;align-items: center;
+ justify-content: space-between;padding: 0 32rpx;box-sizing: border-box;">
+ <view style="display: flex;align-items: center;justify-content: center;">
+ <view class="icon" style="position: relative;">
+ <text class="iconfont"></text>
+ <view style=" height: 36rpx;width:36rpx;display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #f9583b;border-radius: 100%; position: absolute;
+ top: -25rpx; right: -20rpx;color: #fff;font-size: 24rpx;">
+ {{priceInfo.num > 99?'路路路':priceInfo.num}}
+ </view>
+ </view>
+ <view style="margin-left: 10rpx;color: #e06c75;font-size: 48rpx;font-weight: bold;">
+ 锟{priceInfo.price}}</view>
+ </view>
+ <view class="settlement">鍘荤粨绠�</view>
+ </view>
</view>
</template>
<script>
import TopBar from "@/components/TopBar.vue";
+ import { getSessionId, userAction } from "@/api/userAction.js";
import {
getCategoryList,
- getGoodsList
+ getGoodsList,
+ getBannerList
} from "@/api/goods.js";
import {
addCard,
@@ -91,8 +123,13 @@
},
data() {
return {
- canGoToCarList:false,
- nums:10,
+ priceInfo: {
+ price: 0,
+ num: 0
+ },
+ bannerList: [],
+ canGoToCarList: false,
+ nums: 10,
searchInfo: '',
//鍟嗗搧鍒楄〃
goodsList: [],
@@ -115,18 +152,54 @@
pageNumber: 1,
categoryId: null,
canFilter: true,
- needFilterPre:true
+ needFilterPre: true,
+ order: 'asc',
+ sort: 'goodsSort'
},
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"SHOPPING_SQUARE",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
}
},
methods: {
- gotoCardList(){
+ navigateGoodsInfo(skuId, goodsId) {
uni.navigateTo({
- url:'/pages/cusbar/cart/cartList'
+ url: `/pages/product/goods?id=${skuId}&goodsId=${goodsId}`
+ });
+ },
+ gotoCardList() {
+ uni.navigateTo({
+ url: '/pages/cusbar/cart/cartList'
})
},
- addCardNum(e, id) {
- this.goodsList.forEach(item => {
+ async addCardNum(e, id) {
+ // this.goodsList.forEach(item => {
+ // if (item.id === id) {
+ // if (item.cardNum) {
+ // item.cardNum++;
+ // } else {
+ // item.cardNum = 1;
+ // }
+ // this.flushDom = new Date().getMilliseconds();
+ // const data = {
+ // skuId: item.id,
+ // num: item.cardNum
+ // }
+ // await addCard(data)
+ // await this.getCartList();
+ // return;
+ // }
+ // })
+ for (let i = 0; i < this.goodsList.length; i++) {
+ const item = this.goodsList[i];
if (item.id === id) {
if (item.cardNum) {
item.cardNum++;
@@ -134,27 +207,27 @@
item.cardNum = 1;
}
this.flushDom = new Date().getMilliseconds();
- console.log("閫変腑鐨勫晢鍝佷负------------------->", JSON.stringify(item))
const data = {
skuId: item.id,
num: item.cardNum
}
- addCard(data)
+ await addCard(data)
+ await this.getCartList();
return;
}
- })
-
+ }
},
- miousCardNum(e, id) {
+ async miousCardNum(e, id) {
for (let i = 0; i < this.goodsList.length; i++) {
const item = this.goodsList[i];
if (item.id === id) {
if (item.cardNum && item.cardNum > 1) {
item.cardNum--;
} else {
- deleteSkuItem([id]);
+ await deleteSkuItem([id]);
item.cardNum = 0;
this.flushDom = new Date().getMilliseconds();
+ await this.getCartList();
break; // 閫�鍑烘暣涓惊鐜�
}
this.flushDom = new Date().getMilliseconds();
@@ -162,7 +235,8 @@
skuId: item.id,
num: item.cardNum
};
- addCard(data);
+ await addCard(data);
+ await this.getCartList();
break; // 閫�鍑烘暣涓惊鐜�
}
}
@@ -247,19 +321,19 @@
this.listHeight1 -= videoHeight;
}
}
- console.log(this[arrName][index].width, this[arrName][index].height)
+ // console.log(this[arrName][index].width, this[arrName][index].height)
this.flushDom = new Date();
},
goToGoodsInfo(id) {
const item = this.goodsList.find(item => id === item.id);
- console.log(item)
+ // console.log(item)
uni.navigateTo({
url: `/pages/product/goods?id=${item.id}&goodsId=${item.goodsId}`
});
},
//瑙﹀簳鑾峰彇鏁版嵁
async loadMoreData() {
- console.log("瑙﹀簳鍔犺浇------------銆�",this.maxPages)
+ // console.log("瑙﹀簳鍔犺浇------------銆�", this.maxPages)
if (this.getGoodsParam.pageNumber < this.maxPages) {
this.getGoodsParam.pageNumber++;
await this.getgoodsData()
@@ -277,11 +351,40 @@
})
this.categoryList = list.data.result
},
+ async getBannerList() {
+ const bannerList = await getBannerList();
+ this.bannerList = bannerList.data.data
+ // console.log(this.bannerList)
+ },
+ async getCartList() {
+ const cardInfos = await getCarts();
+ const cardList = cardInfos.data.result.cartList.flatMap(item => {
+ return item.skuList.map(sku => {
+ return (sku.goodsSku.id, {
+ skuId: sku.goodsSku.id,
+ num: sku.num,
+ price: sku.priceDetailDTO.flowPrice
+ })
+ })
+
+ })
+
+ this.priceInfo = cardList.reduce((newVal, current) => {
+ return {
+ num: newVal.num + current.num,
+ price: newVal.price + current.price
+ }
+ }, {
+ num: 0,
+ price: 0
+ })
+ },
async getgoodsData() {
const cardInfos = await getCarts();
+ // console.log('--------------------->', cardInfos)
// 澶勭悊璐墿杞︿俊鎭�
let cardMap = new Map();
- this.canGoToCarList = cardInfos.data.result.cartList.length>0
+ this.canGoToCarList = cardInfos.data.result.cartList.length > 0
cardInfos.data.result.cartList.forEach(item => {
item.skuList.forEach(sku => {
@@ -300,9 +403,9 @@
item.cardNum = cardItem.num;
}
})
- this.goodsList = [...this.goodsList,...goodsList.data.result.records];
+ this.goodsList = [...this.goodsList, ...goodsList.data.result.records];
this.maxPages = goodsList.data.result.pages
- console.log('this.goodsList----------------------->',JSON.stringify(goodsList.data.result))
+ // console.log('this.goodsList----------------------->', JSON.stringify(goodsList.data.result))
},
async chooseCategory(id) {
@@ -322,8 +425,33 @@
console.log(this.maxPages)
}
},
+ onUnload() {
+ let param = Object.assign({}, this.actionParam);
+ if (this.sendOnShow)return
+ param.pageStatus = "LEAVE"
+ userAction(param)
+ },
+ onHide() {
+ this.startHidenTime = Date.now()
+ let param = Object.assign({}, this.actionParam);
+ this.sendOnShow = true;
+ param.pageStatus = "LEAVE"
+ userAction(param)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
+ async onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
- async onLoad() {
+ await this.getCartList();
// 鑾峰彇鐘舵�佹爮楂樺害
const systemInfo = uni.getSystemInfoSync();
@@ -334,27 +462,30 @@
this.getGoodsParam.categoryId = ""
this.getGoodsParam.keyword = ""
await this.getgoodsData()
+ await this.getBannerList()
}
}
</script>
<style lang="scss" scoped>
.container {
+ box-sizing: border-box;
width: 750rpx;
padding-bottom: 64rpx;
height: 100vh;
overflow: hidden;
}
+
.settlement {
- width: 180rpx;
- height: 70rpx;
- line-height: 70rpx;
- background: linear-gradient(91deg, $light-color 1%, $aider-light-color 99%);
- border-radius: 900rpx;
- text-align: center;
- color: #fff;
- margin-right: 10rpx;
+ width: 180rpx;
+ height: 70rpx;
+ line-height: 70rpx;
+ background: linear-gradient(91deg, $light-color 1%, $aider-light-color 99%);
+ border-radius: 900rpx;
+ text-align: center;
+ color: #fff;
+ margin-right: 10rpx;
}
.navigatorMenue {
@@ -366,7 +497,9 @@
}
.goodsInfos {
+ box-sizing: border-box;
width: 500rpx;
+ height: 1050rpx;
margin-left: 10rpx;
}
@@ -399,17 +532,29 @@
}
.goodsName {
- padding: 10rpx;
+ // padding: 10rpx;
box-sizing: border-box;
+ // display: -webkit-box;
+ // -webkit-box-orient: vertical;
+ // -webkit-line-clamp: 1;
+ // height: 52rpx;
+ font-weight: bold;
+ // overflow: hidden;
+ // text-overflow: ellipsis;
+ // text-align: start;
+ // vertical-align: middle;
+ text-wrap: wrap;
+ }
+
+ .goodsContent {
+ text-indent: 2em;
display: -webkit-box;
-webkit-box-orient: vertical;
- -webkit-line-clamp: 1;
- height: 52rpx;
- font-weight: bold;
+ -webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
- text-align: start;
vertical-align: middle;
+ color: #e7c463;
}
.goodsPrice {
--
Gitblit v1.8.0