客製化購物車如何測試贈品多規格

若商店有客製化購物車,則開啟贈品多規格之前,可先按下步驟確認贈品多規格在購物車是否正常運作

  1. 首先打開console,可參考chrome的教學:

    可以使用快捷鍵 Control + Shift + J 鍵或 Command + Option + J 鍵 (Mac)打開介面

    https://developer.chrome.com/docs/devtools/console/reference?hl=zh-tw#open

  2. 測試方式:當購物車第一個商品是有規格的情況可以用下面這段程式碼,複製貼到 console 上即可看到彈窗確認是否跑版。

    fetch('/packs/manifest.json')
      .then(r => r.json())
      .then(function(manifest) {
        var templateValue = manifest[Object.keys(manifest).find(k => k.includes('quick_cart'))]
        var templateUrl = typeof templateValue === 'string' ? templateValue : templateValue.src
    
        var el = document.querySelector('[checkout-cart-items]')
        var scope = angular.element(el).scope()
        var injector = angular.element(document.body).injector()
        var $http = injector.get('$http')
        var $uibModal = injector.get('$uibModal')
        var $rootScope = injector.get('$rootScope')
        var $q = injector.get('$q')
        var cartService = injector.get('cartService')
        var productService = injector.get('productService')
        var merchantId = window.mainConfig.merchantId
        var productId = document.querySelector('.cart-items-wrapper .table-row.cart-item').getAttribute('product-id')
    
        var MOCK_PROMOTION_ID = 'mock-promotion-id'
        var GIFT_QUANTITY = 3  // 想要幾個 gift 改這裡
    
        var mockCart = {
          items: [{
            _id: 'mock-placeholder-id',
            id: 'mock-placeholder-id',
            product_id: productId,
            variation_id: null,
            quantity: GIFT_QUANTITY,
            applied_promotion: { id: MOCK_PROMOTION_ID }
          }]
        }
    
        cartService.prepareCart = function() { return $q.resolve() }
        cartService.getCartItemsByFetch = function() { return $q.resolve({ data: { data: mockCart } }) }
    
        cartService.updateCartItem = function(payload) {
          var addedVariationId = payload.item.variation_id
          var addedQuantity = payload.item.quantity
    
          var placeholder = mockCart.items.find(i => !i.variation_id)
          if (placeholder) {
            placeholder.quantity = placeholder.quantity - addedQuantity
            if (placeholder.quantity <= 0) {
              mockCart.items = mockCart.items.filter(i => i.variation_id)
            }
          }
    
          var existingItem = mockCart.items.find(i => i.variation_id === addedVariationId)
          if (existingItem) {
            existingItem.quantity = addedQuantity
          } else {
            mockCart.items.push({
              _id: 'mock-item-' + addedVariationId,
              id: 'mock-item-' + addedVariationId,
              product_id: productId,
              variation_id: addedVariationId,
              quantity: addedQuantity,
              applied_promotion: { id: MOCK_PROMOTION_ID }
            })
          }
    
          return $q.resolve({ data: { data: mockCart } })
        }
    
        cartService.deleteItems = function(payload) {
          var removedItem = mockCart.items.find(i => i.id === payload.id)
          if (removedItem && removedItem.variation_id) {
            var placeholder = mockCart.items.find(i => !i.variation_id)
            if (placeholder) {
              placeholder.quantity += removedItem.quantity
            } else {
              mockCart.items.push({
                _id: 'mock-placeholder-id',
                id: 'mock-placeholder-id',
                product_id: productId,
                variation_id: null,
                quantity: removedItem.quantity,
                applied_promotion: { id: MOCK_PROMOTION_ID }
              })
            }
            mockCart.items = mockCart.items.filter(i => i.id !== payload.id)
          }
          return $q.resolve()
        }
    
        productService.checkStocks = function() {
          return $q.resolve({ data: [{ quantity: 99, cart_quantity: 0, max_order_quantity: null }] })
        }
    
        $http.get(`${window.location.origin}/api/merchants/${merchantId}/products/${productId}`)
          .then(function(res) {
            var newScope = scope.$new()
            newScope.product = res.data.data
            newScope.product.hide_price = false
            newScope.cart = mockCart
            newScope.promotionId = MOCK_PROMOTION_ID
    
            var modal = $uibModal.open({
              templateUrl: templateUrl,
              controller: 'productVariationPickerController',
              scope: newScope,
              windowClass: 'QuickCart-modal product-set-quick-cart-modal product-variation-picker'
            })
    
            modal.opened.then(function() {
              $rootScope.$emit('modal.open', { modalType: 'QUICK_CART_PRODUCT_SET' })
            })
          })
      })