---
# System prepended metadata

title: B-6 販售產品詳細頁
tags: [CP頁]

---

# 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 來決定要顯示那些警語