Browse Source

feat(frontend): 适配 linked SKU - 选择时动态更新商品信息,下单/加购转发至关联商品

asus 1 month ago
parent
commit
ac136cd8dc
1 changed files with 37 additions and 5 deletions
  1. 37 5
      cfc-frontend/pages/discover-detail/product-detail/product-detail.vue

+ 37 - 5
cfc-frontend/pages/discover-detail/product-detail/product-detail.vue

@@ -458,10 +458,16 @@ export default {
           var opts = this.specGroups[p].options
           for (var q = 0; q < opts.length; q++) {
             if (opts[q].skuId === matchedSkuId) {
-              this.selectedSku = {
+              var sku = {
                 id: matchedSkuId,
                 price: opts[q].price,
-                stock: opts[q].stock
+                stock: opts[q].stock,
+                linkedProductId: opts[q].linkedProductId
+              }
+              this.selectedSku = sku
+              // Linked SKU: 更新页面显示的商品信息
+              if (sku.linkedProductId) {
+                this.updateProductToLinked(sku.linkedProductId)
               }
               return
             }
@@ -471,6 +477,22 @@ export default {
       this.selectedSku = null
     },
 
+    updateProductToLinked: function(linkedProductId) {
+      var that = this
+      productDetail({ id: linkedProductId }).then(function(res) {
+        if (res.code === 200 && res.data) {
+          // 仅更新显示信息,不覆盖 product.id 以免影响跳转/分享
+          var p = res.data
+          that.product.name = p.name
+          that.product.coverImage = p.coverImage
+          that.product.price = p.price
+          that.product.memberPrice = p.memberPrice
+          that.product.stock = p.stock
+          that.product.vendorName = p.vendorName
+        }
+      })
+    },
+
     buildSpecDesc: function() {
       if (!this.selectedSku) return ''
       var desc = ''
@@ -511,8 +533,13 @@ export default {
         return
       }
       var price = this.actualPrice
+      var productId = this.product.id
+      // Linked SKU: 使用关联商品 ID
+      if (this.selectedSku && this.selectedSku.linkedProductId) {
+        productId = this.selectedSku.linkedProductId
+      }
       var productData = {
-        productId: this.product.id,
+        productId: productId,
         productName: this.product.name,
         coverImage: this.product.coverImage,
         unitPrice: price,
@@ -530,7 +557,7 @@ export default {
       }
       uni.setStorageSync('checkoutItems', [productData])
       uni.navigateTo({
-        url: '/pages/shop/checkout/checkout?from=product&id=' + this.product.id
+        url: '/pages/shop/checkout/checkout?from=product&id=' + productId
       })
     },
     onAddToCart: function() {
@@ -540,9 +567,14 @@ export default {
         return
       }
       uni.showLoading({ title: '加入购物车...' })
+      var productId = this.product.id
+      // Linked SKU: 使用关联商品 ID
+      if (this.selectedSku && this.selectedSku.linkedProductId) {
+        productId = this.selectedSku.linkedProductId
+      }
       var params = {
         userId: userId,
-        productId: this.product.id,
+        productId: productId,
         quantity: 1
       }
       if (this.selectedSku) {