# B-6 販售產品詳細頁 > [name=JasonWu] ###### tags: `CP頁` ------------------------------------------------------------------------ ## API 清單 No | API | Desc | 執行順序 | 執行條件 | 參考 ---|----------|---------------------|----------|--------------------|-------- 1 | URI-O-01 | 取得多語 label 名稱 | 1 | page init | URI-054 2 | URI-B-03 | 取得型錄相關資料 | 1 | page init | 主要 api 3 | URI-O-19 | 取得推薦相關型錄 | 2 | page init | 相關輸入條件會與 URI-B-03 有關 4 | URI-B-04 | 取得廠商相關資料 | 3 | 點選廠商 tab 時 | 呼叫廠商 api 5 | URI-O-18 | 取得販售相關資訊 | 3 | 切換販售運費國家時 | 無 ## 原頁面網址 - https://www.ttstaging.com.tw/product/1893926 ## 頁面輸入 URL 解析 - 進入頁面方式有兩種 - /product/{id} - 範例 : https://www.ttstaging.com.tw/product/1893926 - id : 型錄 id,為純數字 - /product/{safe-name}-{id}.html - 範例 : https://www.ttstaging.com.tw/product/tdk-blu-ray-dl-4x-50gb-809803.html - safe-name : 型錄名稱,為純文字,且型錄名稱會將英文轉為小寫,空白、特殊符號等字元替換為 - 號,例如 型錄名稱 為 **TDK Blu Ray DL 4X 50GB** 將會轉為 **tdk-blu-ray-dl-4x-50gb** - id : 型錄 id,為純數字 - id 為主要參數,會應用在後面的 api 中 ## 相關示意圖 ![](https://i.imgur.com/1meSpHR.jpg) ## 頁面顯示相關(呼叫 API,取得頁面樣式) - SeoMeta 資訊 - 透過 api 取得頁面所需的 meta 資訊 - 麵包屑 - 透過 api 取得麵包屑 - 型錄資訊 - 透過 api 取得產品名稱, 型號資訊等資訊 - 有販售時,需要額外顯示金額與販售相關資訊 - 型錄多媒體 - 透過 api 取得型錄大圖, 型錄小圖, 3D, 360, Video 等資訊 - tab 區塊,切換顯示 - 固定內容,販售顯示 "Product Detail", "Company Profile", "Shipping & Packaging", "Payment Terms", "Return Policy" 五個 tab - 前兩項是一定會出現,後三項依照 api 回傳的 json 判斷,如果回傳的是空內容,tab 就不要顯示 - 型錄 Detail 資訊 - 參考型錄資訊 - 廠商資訊 - 透過 api 取得廠商相關資料 - 運費計算 (Shipping & Packaging) - 透過 api 取得相關資訊 - 相關說明 (Payment Terms) - 透過 api 取得相關資訊 - 相關說明 (Return Policy) - 透過 api 取得相關資訊 - 聯繫廠商 - 推薦型錄 ## 頁面操作相關(頁面按鈕、點選相關邏輯) - SeoMeta 資訊 - 麵包屑 - 型錄資訊 - 連結到廠商的 ep 頁面或是 front 公司詳目頁 - 計算相關販售金額 - 採購規格下拉選單載入圖片 - 組合出 RFQ 連結 - Contact Supplier 跳轉 - 型錄 Add to favorite 連結 - 型錄多媒體 - 型錄大圖放大效果 - 型錄大圖 Zoom in 效果 - 型錄小圖捲動效果 - 3D, 360, Video 燈箱效果 - tab 區塊,切換顯示 - 點選切換顯示資料 - 型錄 Detail 資訊 - 切換 Tab 顯示資訊 - 型錄認證燈箱效果 - 廠商資訊 - 連結到廠商的 ep 頁面或是 front 公司詳目頁 - 廠商 Add to favorite - 廠商 Other Products 推薦 - 公司認證燈箱效果 - 公司工廠圖片燈箱效果 - 判斷是否有登入,來決定顯示那些廠商資訊 - Shipping & Packaging - 切換相對應國家、區域資訊時,會再次發 request 取得對應的結果 - 更新 Quantity 的時候,重新計算金額 - 沒有相關寄送日期資訊時的顯示 - Payment Terms - Return Policy - 聯繫廠商 - 推薦型錄 - 警語 - 檢查型錄相關資訊,決定是否要顯示警語 ## 頁面顯示相關邏輯(呼叫 API,取得頁面樣式) ### SeoMeta 資訊 - 之前相關資訊放在 xml 中傳遞 ![](https://i.imgur.com/nd2g6gV.jpg) - 後續 html meta tag 取用 ![](https://i.imgur.com/Wt1DmGK.jpg) - 新功能透過 api 取值 - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA#meta ### 麵包屑 - 參考現有顯示方式 ![](https://i.imgur.com/X9xlXz3.jpg) - 新功能透過 api 取值 - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA#%E9%BA%B5%E5%8C%85%E5%B1%91 ### 型錄資訊 - 參考現有顯示方式,主要分兩段顯示相關資料 - 主要資訊 ![](https://i.imgur.com/oeos0sp.jpg) - 詳目資訊 ![](https://i.imgur.com/E8NUr52.jpg) - 新功能透過 api 取值 - - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA#%E5%9E%8B%E9%8C%84%E8%B3%87%E8%A8%8A ### 型錄多媒體 - 參考現有顯示方式 ![](https://i.imgur.com/I5ZidhV.jpg) - 需要有一個 Enlarge 按鈕,點選後會顯示瀏覽效果 ![](https://i.imgur.com/DIAyWW3.jpg) - 新功能透過 api 取值 - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA#%E5%9E%8B%E9%8C%84%E5%A4%9A%E5%AA%92%E9%AB%94 ### tab 區塊,切換顯示 - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA?view#%E8%B2%A9%E5%94%AE%E7%9B%B8%E9%97%9C - 如果有 shippingInfo,顯示 Shipping & Packaging tab - 如果有 paymentTermInfo,顯示 Payment Terms tab - 如果有 returnPolicyInfo,顯示 Return Policy tab - 點選 Shipping & Packaging tab 時,需要呼叫 API - 一開始會取得預設的國家與區域代碼 - 呼叫 shipping & packaging API,取得對應的國家清單、區域清單、以及運費內容 - 參考文件 https://hackmd.io/03JtG4EZT8aAqqnddSgWTQ?view ### 廠商資訊 - 未登入 ![](https://i.imgur.com/5JhiZMQ.jpg) - 已登入 ![](https://i.imgur.com/zCuJJIt.jpg) - 解析 json 顯示資料 - 參考文件 https://hackmd.io/WTAzi5tXQBuakQV1tkgATw?view#%E5%85%AC%E5%8F%B8%E8%81%AF%E7%B5%A1%E8%B3%87%E8%A8%8A ### Shipping & Packaging - 參考現有顯示方式 ![](https://i.imgur.com/VlouGOm.jpg) - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA?view#%E9%81%8B%E8%B2%BB%E8%B3%87%E6%96%99 - 該 api 會取得預設的運送國家代碼與區域代碼 - 畫面中 Quantity 的單位,請使用 型錄資訊 中的 unitName ### Payment Terms ![](https://i.imgur.com/iTBTRCJ.jpg) - 參考現有顯示方式 - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA?view#%E4%BB%98%E6%AC%BE%E5%96%AE%E4%BD%8D #### 邏輯 - 解析 code,包含以下不同類型,依照類型顯示圖片 - idealez_paypal //Paypal - idealez_alipay //支付寶 - idealez_card //信用卡 - idealez_tenpay //財付通 - idealez_unionpay //銀聯卡 - idealez_hitrust //網際威信 - idealez_card_ae //信用卡(AE) - idealez_googlepay //google pay - idealez_applepay //apple pay ### Return Policy ![](https://i.imgur.com/nsEDJLe.jpg) - 參考現有顯示方式 - 參考 https://hackmd.io/nlZlemkdTRCC7ua4Uup8UA?view#%E4%BB%98%E6%AC%BE%E5%96%AE%E4%BD%8D ### 聯繫廠商 - 參考文件 https://hackmd.io/FDa_t2QwRxKoBimH6mW4qQ ### 推薦型錄 - 參考相關文件 https://hackmd.io/-912y5bWSBCAmzJKdTP-ZA?view#%E7%9B%B8%E9%97%9C%E7%A4%BA%E6%84%8F%E5%9C%96 ## 頁面操作相關邏輯(頁面按鈕、點選相關邏輯) ### 型錄資訊 - 顯示畫面 ![](https://i.imgur.com/WirtySS.jpg) - 解析 json,顯示對應的資料 - 連結到廠商的 ep 頁面或是 front 公司詳目頁 - 畫面的 More About This Product 的連結 - 如果 json 中有 ep url 才顯示,點選後另開新視窗,連結 ep url - 組合出 RFQ 連結 - 畫面中的 Request for Quotation - 點選後另開新視窗,連結到 rfq 功能,該連結是固定的,目前的連結是 https://www.ttstaging.com.tw/latest-price/step1?productId=1895999 - Contact Supplier 跳轉 - 畫面中 Contact Supplier 按鈕 - 點選後,畫面捲動到下方的 Contact Supplier 區塊 - 型錄 Add to favorite 連結 - 畫面中 Add to favorites - 如果該型錄尚未被收錄到 favorite 中,顯示 Add to favorites - 如果已經收錄,顯示 Go to favorites - Add to favorites 跟 Go to favorites 的部分參考條列頁的同一段邏輯 ### 型錄多媒體 - 顯示畫面 ![](https://i.imgur.com/I5ZidhV.jpg) - 解析 json,顯示對應的資料 - 型錄大圖放大效果 - 點選 enlarge,會顯示以下的燈箱 ![](https://i.imgur.com/DIAyWW3.jpg) - 目前顯示的效果是 jquery.smoothZoom,頁面需要載入 jquery.smoothZoom.css 與 jquery.smoothZoom.js - 相關寫法 ``` $('.zoom_thumbnails').find('li a').each(function () { $(this).bind('click', { src: $(this).attr('href')}, function (e) { $('.zoom_thumbnails').find('li a').removeClass(); $(this).addClass('current'); $('#zoom_container').off('smoothZoom'); $('#zoom_container').smoothZoom('destroy').smoothZoom({ image_url: e.data.src }); return false; }); }).eq(0).trigger('click'); ``` - 型錄大圖 Zoom in 效果 - 滑鼠移動到大圖上,會有 Zoom in 的效果 ![](https://i.imgur.com/UztA1uL.jpg) - 目前顯示的效果是 jquery.elevateZoom.cover,頁面需要載入 jquery.elevateZoom.cover.js - 相關寫法 ``` $('#product-slider-gallery-for').off('beforeChange'); $('#product-slider-gallery-for').on('beforeChange', function(event, slick, currentSlide, nextSlide) { $('.zoomContainer').remove(); $('#zoom' + currentSlide).removeData('elevateZoom'); $('#zoom' + currentSlide).removeData('zoomImage'); if ($(window).width() > 768) { var naturalWidth = $('#zoom' + nextSlide).prop('naturalWidth'); var naturalHeight = $('#zoom' + nextSlide).prop('naturalHeight'); if (naturalWidth <= 360 && naturalHeight <= 360) { } else { $('#zoom' + nextSlide).elevateZoom({ responsive: true, onShow: function() { $('#product-slider-gallery-for').slick('slickPause'); }, onDestroy : function() { $('#product-slider-gallery-for').slick('slickPlay'); } }); } } }); ``` - 型錄小圖捲動效果 - 小圖捲動的圖示,先顯示 3D,然後是 360,最後是 Video - 接下來顯示小圖圖片 - 點選小圖圖片,將上面的圖替換為對應的大圖 - 小圖捲動效果如下圖 ![](https://i.imgur.com/WNORrEW.jpg) - 目前型錄捲動的效果是 slick slide,頁面需要載入 slick-utils.js - 相關寫法 ``` $('.pdPhotoShow').slick({ autoplay: true, autoplaySpeed: 4000, speed: 600, fade: true, arrows: false, dots: false, mobileFirst:true, asNavFor:'.pdPhotoNav', rtl: false, onAfterChange:function(slickSlider,i){ $('.pdPhotoNav .slick-slide').removeClass('slick-active'); $('.pdPhotoNav .slick-slide').eq(i).addClass('slick-active'); } }); ``` - 3D, 360, Video 燈箱效果 - 點選 3D, 360, Video 的時候,透過燈箱顯示對應的 url,該 url 透過 iframe 顯示在燈箱區塊中 - 點選 3D 與 360 的效果如下圖 ![](https://i.imgur.com/2LrY7jx.jpg) - 點選 Video 的效果如下圖 ![](https://i.imgur.com/PTjjIOZ.jpg) - 當打開燈箱,後方會有 mask 效果,點選 mask 的時候,關閉燈箱 - 燈箱右上角提供 X 按鈕,點選後關閉燈箱 - Video 點選後,可以撥放影片 ### tab 區塊,切換顯示 - 效果如下圖 ![](https://i.imgur.com/acGBDsc.jpg) - 一開始設定為 Product Detail - 點選其中一個區塊時,隱藏其餘區塊 ### 型錄 Detail 資訊 - 型錄認證燈箱效果 - 參考相關認證燈箱效果 https://hackmd.io/OFJ68AIxTfePBEeKqlGa-w ### 廠商資訊 - 連結到廠商的 ep 頁面或是 front 公司詳目頁 ![](https://i.imgur.com/PTX5rdQ.jpg) - 如果該公司有 ep 相關頁面,點選連結會開啟新視窗,連結到 ep 首頁 - 如果該公司沒有 ep 相關頁面,會連結到 front company cp 頁 - 廠商 Add to favorite ![](https://i.imgur.com/PTX5rdQ.jpg) - 如果該公司沒有加入過 favorite,顯示 Add to favorite - 如果該公司有加入過 favorite,顯示 Go to favorite - 參考現有 favorite 相關邏輯 - 廠商 Other Products 推薦 ![](https://i.imgur.com/gzWJaEd.jpg) - 解析 json 產出 Other Products 相關資訊 - 如果點選 Product,會開啟新視窗連結到該型錄的詳目頁 - All Products 按鈕也是用相同的邏輯顯示,但 All Products 不會有圖片跟下面的販售資訊,只會有名稱跟 url 而已,點選後會連結到對應的查詢頁面 - 公司相關認證燈箱效果 ![](https://i.imgur.com/kamejTh.jpg) - 請參考 Product Detail 處的燈箱效果 - 由於認證分為第三方認證、公司認證,型錄認證,其中第三方認證沒有燈箱,只有公司認證與型錄認證有燈箱 - 公司認證與型錄認證都有 All Certifications,參考上面的 All Products 效果,All Certifications 在 json 中不會有圖片,只有名稱跟 url,點選後會連結到對應的查詢頁面 - 公司工廠圖片燈箱效果 ![](https://i.imgur.com/Jka1pg1.jpg) - 公司工廠,先顯示影片,再顯示圖片 - 解析 json 內容後,如果是影片,提供撥放按鈕,可以直接撥 - 如果是圖片,先顯示小圖,點選小圖後,開啟燈箱,顯示大圖 ![](https://i.imgur.com/F1U3JPF.jpg) - 需有燈箱共同效果 - 燈箱後方有 mask,點選 mask 會關閉燈箱 - 燈箱右上角有 x,點選後關閉燈箱 - 判斷是否有登入,來決定顯示那些廠商資訊 - 沒有登入的畫面 ![](https://i.imgur.com/yFZRpb9.jpg) - 有登入的畫面 ![](https://i.imgur.com/nSdQhJe.jpg) - 除了 Onwer, Contact Person, Business Phone Number 外,其他欄位的資訊都在 json 中 - 如果有登入,另外發一個新的 ajax request 呼叫 api,回傳對應的上面三個欄位並顯示 - 可參考現有 ep api - https://hyweb.en.ttstaging.com.tw/ajaxbox/findSecretContact/v2/42/147927 #### 規格 - path : ${TT-API網址}/product/lightbox/contact/{langId}/{cid} - method : GET #### Input Column | Type | Require | Desc -----------|----------|---------|--------- langId | number | Y | 語系id cid | number | Y | 公司id #### 邏輯 - 示意圖中的藍框是名片小圖 - 點選小圖,開啟燈箱,顯示名片大圖 - 示意圖中的紅框是聯絡人小圖 - 點選小圖,開啟燈箱,顯示聯絡人大圖 ![](https://i.imgur.com/xm5YKp8.jpg) - 開啟燈箱需有共同效果 - 燈箱後方有 mask,點選 mask 會關閉燈箱 - 燈箱右上角有 x,點選後關閉燈箱 #### Output ```=json { "owner" : {{ string }}, // owner 名稱 "contactFullName" : {{ string }}, // Contact Person "contactPhoneNumber" : {{ string }}, // Business Phone Number "pcContactImgUrl" : {{ string }}, // 聯絡人大圖 "mobileContactImgUrl" : {{ string }}, // 聯絡人小圖 "pcContactCardImgUrl" : {{ string }}, // 名片大圖 "mobileContactCardImgUrl" : {{ string }}, // 名片小圖 "contactImgTitle" : {{ string }}, // 圖片說明 "contactCardImgTitle" : {{ string }} // 名片圖片說明 } ``` ### Shipping & Packaging #### 切換相對應國家、區域資訊時,會再次發 request 取得對應的結果 - 一開始會取得預設的國家與區域代碼 - 呼叫 shipping & packaging API,取得對應的國家清單、區域清單、以及運費內容 - 參考文件 https://hackmd.io/03JtG4EZT8aAqqnddSgWTQ?view #### 更新 Quantity 的時候,重新計算金額 - 如果設定的是自訂運費,並且有相關的增加每件的金額等資訊時,金額需要依照 Quantity 更換來重新算運費 - customAmount + customOverAmount * quantity #### 沒有相關寄送日期資訊時的顯示 - 如果有 durationStart 跟 durationEnd - 顯示 {{ durationStart }} - {{ durationEnd }} days - 如果只有 durationStart - 顯示 {{ durationStart }} days - 如果兩者都沒有 - 顯示 Expected delivery time contact suppliers ### 聯繫廠商 - 參考文件 https://hackmd.io/FDa_t2QwRxKoBimH6mW4qQ ### 推薦型錄 - 參考相關文件 https://hackmd.io/-912y5bWSBCAmzJKdTP-ZA?view#%E9%A0%81%E9%9D%A2%E6%93%8D%E4%BD%9C%E7%9B%B8%E9%97%9C%E9%82%8F%E8%BC%AF%E9%A0%81%E9%9D%A2%E6%8C%89%E9%88%95%E3%80%81%E9%BB%9E%E9%81%B8%E7%9B%B8%E9%97%9C%E9%82%8F%E8%BC%AF ### 警語 #### 檢查型錄相關資訊,決定是否要顯示警語 - 目前頁面中有數個地方包含 catalogStandardCid 的 api,這些 catalogStandardCid 與是否顯示警語有關,目前條列頁已經有警語相關效果了,套用相同的邏輯,判斷本頁面中所有的 catalogStandardCid 來決定要顯示那些警語