From 948da1610a8b2a41b98ebfcd8643029c3bd7f469 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 16 六月 2025 15:30:42 +0800
Subject: [PATCH] 视频商品点击跳转页面

---
 pages/tabbar/video/video.vue       |    2 
 pages.json                         |   10 +++
 pages/video/video-goods-detail.vue |  101 +++++++++++++++++++++++++++++++++
 api/video.js                       |   13 ++++
 pages/tabbar/index/home.vue        |    8 ++
 5 files changed, 132 insertions(+), 2 deletions(-)

diff --git a/api/video.js b/api/video.js
index 4d5e90d..6c830ed 100644
--- a/api/video.js
+++ b/api/video.js
@@ -36,6 +36,19 @@
 }
 
 /**
+ * 鑾峰彇瑙嗛鎮寕鍟嗗搧
+ * 
+ * @param videoId
+ */
+ export function getGoodsDetail(videoId) {
+  return http.request({
+    url: "/lmk/video/goods/detail/" + videoId,
+    method: Method.GET,
+    needToken: true
+  });
+}
+
+/**
  * 淇濆瓨瑙嗛鎾斁璁板綍
  * 
  * @param params
diff --git a/pages.json b/pages.json
index 5931aad..a1d9881 100644
--- a/pages.json
+++ b/pages.json
@@ -964,6 +964,16 @@
 					"style": {
 						"navigationBarTitleText": "瑙嗛缂栬緫"
 					}
+				},
+				{
+					"path" : "video-goods-detail",
+					"style" : 
+					{
+						"navigationBarTitleText" : "瑙嗛鎺ㄨ崘鍟嗗搧",
+						"componentPlaceholder": {
+							"u-button": "view"
+						}
+					}
 				}
 			]
 		},
diff --git a/pages/tabbar/index/home.vue b/pages/tabbar/index/home.vue
index d665256..57c31bb 100644
--- a/pages/tabbar/index/home.vue
+++ b/pages/tabbar/index/home.vue
@@ -86,7 +86,7 @@
 			<view class="goods-link">
 			  <swiper @change="goodsChange" :autoplay="true" :interval="4000" style="height: 120rpx;">
 				<swiper-item v-for="goods in item.goodsList" :key="goods.goodsId">
-				  <view class="goods-container">
+				  <view class="goods-container" @click="jumpToPay(item.id)">
 					<!-- 鍟嗗搧鍥剧墖 -->
 					<image class="goods-image" :src="goods.thumbnail" mode="aspectFill"></image>
 					
@@ -319,6 +319,12 @@
     this.initVideoContexts();
   },
   methods: {
+	  // 鐐瑰嚮鍟嗗搧璺宠浆
+	  jumpToPay(videoId) {
+		uni.navigateTo({
+			url: '/pages/video/video-goods-detail?videoId=' + videoId
+		});
+	  },
 	  // 杞挱鍥惧彉鍖�
 	  imgChange(e) {
 		  this.currentImgIndex = e.detail.current;
diff --git a/pages/tabbar/video/video.vue b/pages/tabbar/video/video.vue
index 4a7c780..ffeb496 100644
--- a/pages/tabbar/video/video.vue
+++ b/pages/tabbar/video/video.vue
@@ -132,7 +132,7 @@
 					<view class="goods-price" style="flex: 1;">楼{{ goods.price }}</view>
 					<view @click.stop="() => {}" style="flex: 1;display: flex;justify-content: center;align-items: center;">
 						<view style="width: 90rpx">鏁伴噺锛�</view>
-						<uni-number-box v-model="goods.selectNum"/>
+						<uni-number-box v-model="goods.selectNum" :min="0"/>
 					</view>
 				</view>
               </view>
diff --git a/pages/video/video-goods-detail.vue b/pages/video/video-goods-detail.vue
new file mode 100644
index 0000000..d12c0d1
--- /dev/null
+++ b/pages/video/video-goods-detail.vue
@@ -0,0 +1,101 @@
+<template>
+	<view style="padding: 0 20rpx;">
+		<view
+			class="goods-item"
+			v-for="(goods, index) in goodsList"
+			:key="goods.goodsId"
+			@click="selectGoods(goods, index)"
+		>
+			<image :src="goods.thumbnail" class="goods-image"></image>
+			<view class="goods-info">
+			  <text class="goods-name">{{ goods.goodsName }}</text>
+			  <view style="display: flex;">
+			  	<view class="goods-price" style="flex: 1;">楼{{ goods.price }}</view>
+			  	<view @click.stop="() => {}" style="flex: 1;display: flex;justify-content: center;align-items: center;">
+			  		<view style="width: 90rpx">鏁伴噺锛�</view>
+			  		<uni-number-box v-model="goods.goodsNum" :min="0"/>
+			  	</view>
+			  </view>
+			</view>
+		</view>
+		<view style="position: fixed;bottom: 80rpx;display: flex;align-items: center;padding: 0 20rpx;width: calc(100% - 40rpx);">
+			<view style="flex:7">宸查�墈{totalNum}}涓晢鍝�,鍚堣锛�<text class="goods-price">锟{totalMoney}}</text></view>
+			<view style="flex:3;display: flex;align-items: flex-end">
+				<u-button @click="toPay" type="success" size="medium" :disabled="totalNum < 1">鍘绘敮浠�</u-button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getGoodsDetail} from "@/api/video.js"
+	
+	import UButton from '@/uview-components/uview-ui/components/u-button/u-button.vue';
+	export default {
+		components: {UButton},
+		computed: {
+			totalMoney() {
+				return this.goodsList.reduce((total, goods) => {
+				        return total + (goods.price * goods.goodsNum)
+				      }, 0)
+			},
+			totalNum() {
+				return this.goodsList.filter(goods => goods.goodsNum !== 0).length;
+			}
+		},
+		data() {
+			return {
+				videoId: '',
+				goodsList: []
+			}
+		},
+		onLoad(option) {
+			this.videoId = option.videoId;
+			this.getGoodsList();
+		},
+		methods: {
+			// 鑾峰彇鍟嗗搧鍒楄〃
+			async getGoodsList() {
+				getGoodsDetail(this.videoId).then(res => {
+					this.goodsList = res.data.data
+				})
+			},
+			// 鐢熸垚璁㈠崟-鏀粯
+			toPay() {
+				
+			}
+		}
+	}
+</script>
+
+<style>
+.goods-item {
+	display: flex;
+	align-items: center;
+	padding: 20rpx 0;
+	border-bottom: 1rpx solid #f5f5f5;
+}
+.goods-image {
+  width: 100rpx;
+  height: 100rpx;
+  border-radius: 8rpx;
+  margin-right: 20rpx;
+}
+.goods-info {
+  flex: 1;
+}
+.goods-name {
+  font-size: 28rpx;
+  color: #333;
+  margin-bottom: 10rpx;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+}
+.goods-price {
+  font-size: 28rpx;
+  color: #f44;
+  font-weight: bold;
+}
+</style>

--
Gitblit v1.8.0