PageSourceSearch

https://www.ruhfu.com/

html ruhfu.com collected 2026-09-30 21:16:11 UTC 227,261 bytes, 4,634 lines download raw bytes

1<!DOCTYPE html>
2<html lang="zh-TW" style="height:100%;">
3  <head>
4      
4<script>
5        window.dataLayer = window.dataLayer || [];
6      </script>
6
7    
8      <!-- CYBERBIZ Google Tag Manager -->
9      
9<script>
vendor: 345 bytes, lines 9-13
9(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
10      new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
11      j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
12      'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
13      })(window,document,'script','cyb','
13GTM-TXD9LVJ
vendor: 3 bytes, line 13
13');
13</script>
13
14      <!-- End CYBERBIZ Google Tag Manager -->
15    
16    <meta charset="utf-8">
17<meta http-equiv="X-UA-Compatible" content="IE=edge">
18<meta name="viewport" content="width=device-width, initial-scale=1">
19<link rel="icon" href="https://cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?convert=false&sha=bc8e647cbd00b22f">
20<link rel="apple-touch-icon" href="https://cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?convert=false&sha=bc8e647cbd00b22f">
21
22<meta property="og:site_name" content="熱富安平伴手禮" />
23
24<!-- og tag -->
25
26  <meta name="keywords" content="台南府城十大伴手禮 非油炸鮮蝦餅專賣店 軟式牛舌餅 古早味香餅" />
27  <meta name="description" content="台南府城十大伴手禮 首選~非油炸鮮蝦餅專賣店、軟式牛舌餅十種口味、古早味香餅~本店產品皆每日新鮮現做 品質保證 安心食用~" />
28  <meta property="og:title" content="熱富安平伴手禮 " />
29  <meta property="og:description" content="台南府城十大伴手禮 首選~非油炸鮮蝦餅專賣店、軟式牛舌餅十種口味、古早味香餅~本店產品皆每日新鮮現做 品質保證 安心食用~" />
30  <meta property="og:url" content="https://www.ruhfu.com" />
31  <meta property="og:type" content="website" />
32
33
34<!-- og image -->
35
36  
37  <meta property="og:image" content="https://cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f" />
38  
39
40
41<title>
42  
43    熱富安平伴手禮 
44  
45</title>
46
47
48
49<script src='//cdn-general.cybassets.com/frontend/shop/useSettingsData-3a2e378145f8a165.js' type='text/javascript'></script>
49
50
51
52
53  
53<script>
54    window.setSettingsData({"draggable_sections":{"404":[],"index":["_main_slider_custom","1657176902481","_index_8_blocks","1657257065023","1657262410712"],"product":["product_info","product_description","board_comments","related_products"],"collection":[],"category":[],"blog":[],"article":[],"cart":[],"contact":[],"express_delivery":[],"search":[],"combo_product":["combo_product_info","combo_product_desc","board_comments"]},"sections":{"navbar":{"type":"navbar","visible":true,"settings":{"navbar_image_logo_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f","navbar_image_logo_tablet_url":"","navbar_image_logo_mobile_url":"","main_nav":"main-menu","slider_primary_linklist":"main-menu","slider_primary_linklist_set_open":true,"nav_show_three_dimension":true,"search_enabled":true,"display_only_index":false,"dict_header_banner_image_url":"","dict_header_banner_image_tablet_url":"","dict_header_banner_image_mobile_url":"","dict_header_banner_link":"","display_count_down":false,"navbar_display_style":"displayDefault","menu_display_style":"two_dimension_menu","header_banner_start":"","header_banner_end":"","timer_text_color":"#c39d6f","timer_bg_color":"#2b2b6e"},"custom_name":"導覽列"},"footer":{"type":"footer","visible":true,"settings":{"footer_link":"footer","display_facebook":true,"shop_facebook":"https://www.facebook.com/ruhfu/","display_instagram":false,"shop_instagram":"https://www.instagram.com/?hl=zh-tw","display_line":false,"shop_line":"https://line.me/zh-hant/","display_youtube":false,"shop_youtube":"https://www.youtube.com/","footer_link_arrangement":"display_y"},"block_order":["default_contact_info"],"blocks":{"default_link_list":{"type":"link_list_setting","custom_name":"選單","thumbnail":"list","draggable":true,"visible":true,"settings":{"footer_link":"footer","dict_link_list_block_title":"關於我們"}},"default_contact_info":{"type":"contact_info_setting","custom_name":"聯絡資訊","thumbnail":"contactInfo","draggable":true,"visible":true,"settings":{"display_phone":true,"display_fax_number":true,"shop_fax_number":"06-2287521","display_shop_email":true,"display_shop_address":true,"display_office_time":true,"shop_office_time":"上午8:00-下午11:00","dict_contact_info_block_title":"聯絡資訊","dict_phone_number":"06 224 3729","dict_shop_email":"[email protected]","dict_shop_address":"(總店) 台南市安平區安平路133號","dict_shop_office_time":"早上08:00 - 晚上10:00"}}},"custom_name":"頁腳"},"_main_slider_custom":{"type":"_main_slider_custom","visible":true,"blocks":{"display_main_slider_item_1":{"type":"image","visible":true,"settings":{"dict_link":"","dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4MDk5X-mdnuayueeCuOidpumkhS5wbmcucG5nIl1d.png?sha=9928c408fd5e1af5","dict_tablet_image_url":"","dict_mobile_image_url":""},"custom_name":"素材"},"display_main_slider_item_2":{"type":"image","visible":true,"settings":{"dict_link":"","dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4MTE4X-Wkj-WogeWkt-ixhuWhlC5wbmcucG5nIl1d.png?sha=0e78b67efa19a5ff","dict_tablet_image_url":"","dict_mobile_image_url":""},"custom_name":"素材"},"display_main_slider_item_3":{"type":"image","visible":true,"settings":{"dict_link":"","dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4MTM2X-akqumkhS5wbmcucG5nIl1d.png?sha=1c1d5e9d240de5c9","dict_tablet_image_url":"","dict_mobile_image_url":""},"custom_name":"素材"},"display_main_slider_item_4":{"type":"image","visible":false,"settings":{"dict_link":"","dict_image_url":"","dict_tablet_image_url":"","dict_mobile_image_url":""},"custom_name":"素材"},"display_main_slider_item_5":{"type":"image","visible":false,"settings":{"dict_link":"","dict_image_url":"","dict_tablet_image_url":"","dict_mobile_image_url":""},"custom_name":"素材"}},"block_order":["display_main_slider_item_1","display_main_slider_item_2","display_main_slider_item_3"],"settings":{"margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"26","swiper_delay":"3","image_number":"1","image_space":"12","mobile_image_number":"1","mobile_image_space":"8"},"custom_name":"輪播素材"},"_index_product_banner":{"type":"_index_product_banner","visible":false,"settings":{"dict_link":"","dict_image_url":"/theme_src/i18n_shoestore/default_img/index_product_banner_1_lg.jpg","dict_tablet_image_url":"","dict_mobile_image_url":"","cta_btn_display_style":"topPosition","cta_btn_text":"了解更多","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"24"},"custom_name":"橫幅廣告"},"_index_8_blocks":{"type":"_index_8_blocks","visible":true,"settings":{"dict_title":"熱門產品","collection_handle":"熱門產品","limit":"8","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"24","product_display":"displayDefault","old_container_setting":true},"custom_name":"商品分類"},"_index_4_blogs":{"type":"_index_4_blogs","visible":true,"blocks":{"index_4_blogs_1":{"type":"blog","visible":true,"settings":{"blog_handle":"news"},"custom_name":"部落格"},"index_4_blogs_2":{"type":"blog","visible":true,"settings":{"blog_handle":"news"},"custom_name":"部落格"},"index_4_blogs_3":{"type":"blog","visible":true,"settings":{"blog_handle":"news"},"custom_name":"部落格"},"index_4_blogs_4":{"type":"blog","visible":true,"settings":{"blog_handle":"news"},"custom_name":"部落格"}},"block_order":["index_4_blogs_1","index_4_blogs_2","index_4_blogs_3","index_4_blogs_4"],"settings":{"dict_title":"更多資訊","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50"},"custom_name":"分頁頁籤"},"_index_4_blocks":{"type":"_index_4_blocks","visible":true,"blocks":{"display_index_4_block_1":{"type":"image","visible":true,"settings":{"title":"","dict_link":"","dict_image_url":"/theme_src/i18n_shoestore/default_img/index_4_blocks_1.jpg","dict_tablet_image_url":"","dict_mobile_image_url":""},"custom_name":"圖片"}},"block_order":["display_index_4_block_1"],"custom_name":"自訂排版設計","settings":{"margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50","mobile_columns":1}},"express_delivery_index_4_blocks":{"type":"_index_4_blocks","visible":false,"blocks":{"express_delivery_display_index_4_block_1":{"type":"image","visible":true,"settings":{"title":"","dict_link":"","dict_image_url":"/theme_src/i18n_shoestore/default_img/index_4_blocks_1.jpg","dict_tablet_image_url":"","dict_mobile_image_url":""}}},"block_order":["express_delivery_display_index_4_block_1"]},"custom_text":{"type":"custom_text","visible":true,"settings":{}},"blog":{"type":"blog","visible":true,"settings":{"article_limit_in_blog_page":"6"}},"article":{"type":"article","visible":true,"settings":{"display_blog_menu":true,"dict_blog_tags_title":"文章分類","blog_latest_post_limit":"2"},"custom_name":"部落格文章設定"},"category":{"type":"category","visible":true,"settings":{"category_sidebar_set_open":false,"category_product_block_limit":"4","category_product_swiper_item_limit":"
546","category_product_item_limit":"18"}},"shop_setting":{"type":"shop_setting","visible":true,"settings":{"favicon_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f","og_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f","shop_title":"","shop_description":"台南府城十大伴手禮 首選~非油炸鮮蝦餅專賣店、軟式牛舌餅十種口味、古早味香餅~本店產品皆每日新鮮現做 品質保證 安心食用~","shop_keywords":"台南府城十大伴手禮 非油炸鮮蝦餅專賣店 軟式牛舌餅 古早味香餅"},"custom_name":"全站設定"},"color_settings":{"type":"color_settings","visible":true,"settings":{"button_color":"#f47373","button_text_color":"#FFFFFF","accent_color":"#2B2B6E","heading_color":"#565656","text_color":"#9A9EA2","price_color":"#e76f51","discount_price_color":"#e76f51","theme_bg_color":"#FFFFFF","product_border_color":"#E2E2E2","nav_logo_bg_color":"#FFFFFF","nav_menu_bg_color":"#FFFFFF","nav_menu_text_color":"#565656","nav_menu_icon_color":"#565656","footer_bg_color":"#555555","footer_text_color":"#FFFFFF","checkout_button_color":"#000000","checkout_accent_color":"#2b2b6e"},"custom_name":"顏色設定"},"popup":{"type":"popup","visible":true,"blocks":{"popup_block_1":{"type":"image","visible":false,"settings":{"dict_image_url":"/theme_src/i18n_shoestore/default_img/popup_default.jpg","icon_size":"small"},"custom_name":"圖片"}},"block_order":["popup_block_1"],"settings":{},"custom_name":"彈窗廣告"},"product_info":{"type":"product_info","visible":true,"settings":{"display_product_sku":false,"dict_vip_custom_price_text":"","dict_vip_custom_price_href":""},"custom_name":"基本設定"},"product_description":{"type":"product_description","visible":true,"custom_name":"商品介紹"},"board_comments":{"type":"board_comments","visible":true,"settings":{},"custom_name":"商品評論","thumbnail":"list","draggable":false},"related_products":{"type":"related_products","visible":true,"settings":{"display_related_cols":true,"use_custom_related_cols":true,"dict_group_related_cols_related_product":"相關商品","related_products_limit":"4"},"custom_name":"相關商品"},"contact":{"type":"contact","visible":true,"settings":{"show_google_map":true,"show_google_map_iframe":"\u003ciframe src=\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3613.6479170127777!2d121.56760821400371!3d25.07991984260527!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3442ac6fbd841bbd%3A0x64e16bcf25e3da31!2zMTE05Y-w5YyX5biC5YWn5rmW5Y2A55Ge5YWJ6LevNTEz5be3MzDomZ8!5e0!3m2!1szh-TW!2stw!4v1485156761267\" width=\"600\" height=\"450\" frameborder=\"0\" style=\"border:0\" allowfullscreen\u003e\u003c/iframe\u003e"}},"collection":{"type":"collection","visible":true,"settings":{"collection_sidebar":"main-menu","collection_sidebar_set_open":false,"collection_pagination_limit":"24"},"custom_name":"商品分類設定"},"404":{"type":"404","visible":true,"settings":{"image_url":"/theme_src/i18n_shoestore/default_img/404_img.png","dict_404_image_url":"/theme_src/i18n_shoestore/default_img/404_img.png","dict_title_text":"抱歉,此頁面不存在或者已經被移除","dict_btn_text":"返回首頁"}},"blogs_all":{"type":"blogs_all","visible":true,"settings":{}},"bundle_discounts":{"type":"bundle_discounts","visible":true,"settings":{}},"cart":{"type":"cart","visible":true,"settings":{}},"cart_empty":{"type":"cart_empty","visible":true,"settings":{}},"page":{"type":"page","visible":true,"settings":{}},"search":{"type":"search","visible":true,"settings":{"search_link_list":"main-menu"}},"customers/account":{"type":"customers/account","visible":true,"settings":{}},"customers/account_edit":{"type":"customers/account_edit","visible":true,"settings":{}},"customers/activate_account":{"type":"customers/activate_account","visible":true,"settings":{}},"customers/addresses":{"type":"customers/addresses","visible":true,"settings":{}},"customers/bonus_points":{"type":"customers/bonus_points","visible":true,"settings":{}},"customers/cancel":{"type":"customers/cancel","visible":true,"settings":{}},"customers/coupons":{"type":"customers/coupons","visible":true,"settings":{}},"customers/forgot_password":{"type":"customers/forgot_password","visible":true,"settings":{}},"customers/login":{"type":"customers/login","visible":true,"settings":{}},"customers/message":{"type":"customers/message","visible":true,"settings":{}},"customers/messages":{"type":"customers/messages","visible":true,"settings":{}},"customers/modify_password":{"type":"customers/modify_password","visible":true,"settings":{}},"customers/order":{"type":"customers/order","visible":true,"settings":{}},"customers/orders":{"type":"customers/orders","visible":true,"settings":{}},"customers/periodic_order":{"type":"customers/periodic_order","visible":true,"settings":{}},"customers/periodic_orders":{"type":"customers/periodic_orders","visible":true,"settings":{}},"customers/register":{"type":"customers/register","visible":true,"settings":{}},"customers/reset_password":{"type":"customers/reset_password","visible":true,"settings":{}},"customers/return":{"type":"customers/return","visible":true,"settings":{}},"customers/tracking_items":{"type":"customers/tracking_items","visible":true,"settings":{}},"express_delivery-navbar":{"type":"express_delivery-navbar","visible":true,"settings":{}},"express_delivery-content":{"type":"express_delivery-content","visible":true,"settings":{}},"1657176749962":{"type":"_index_4_blogs","custom_name":"分頁頁籤","visible":true,"settings":{"dict_title":"","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50"},"blocks":{"1657176749979":{"type":"blog","custom_name":"部落格","visible":true,"settings":{"blog_handle":"news"}},"1657176875523":{"type":"blog","custom_name":"部落格","visible":true,"settings":{"blog_handle":"news"}}},"block_order":["1657176749979","1657176875523"]},"1657176902481":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"250","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50","mobile_columns":2,"margin_block":"10","mobile_margin_block":"10"},"blocks":{"1657176902491":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NDk0X1NfXzI3MDA5MDM4LmpwZy5qcGVnIl1d.jpeg?sha=9c70d7e611d3621a","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"https://www.instagram.com/p/CQ8ff8Mhxcs/?utm_source=ig_web_copy_link"}},"1657176902493":{"type":"video","custom_name":"影片","visible":true,"settings":{"dict_video_link":""}},"1657177520234":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NTEzX1NfXzI3MDA5MDM2LmpwZy5qcGVnIl1d.jpeg?sha=cb19e34960275049","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}}},"block_order":["1657176902491","1657177520234"]},"1657177696279":{"type":"_index_4_blogs","custom_name":"分頁頁籤","visible":true,"settings":{"dict_title":"","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50"},"blocks":{"1657177696289":{"type":"blog","custom_name":"部落格","visible":true,"settings":{"blog_handle":"news"}}},"block_order":["1657177696289"]},"1657257065023":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"350","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50","mobile_columns":1,"margin_block":"10","mobile_margin_block":"10"},"blocks":{"1657257110077":{"type":"video","custom_name":"影片","visible":true,"settings":{"dict_video_link":"https://www.youtube.com/watch?v=StUAhG2unmA\u0026t=145s","block_propotion":"100"}}},"block_order":["1657257110077"]},"1657258958953":{"type":"_index_4_blogs","custom_name":"分頁頁籤","visible":true,"settings":{"dict_title":"新聞報導","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50"},"blocks":{},"block_order":[]},"1657262410712":{"type":"_index_4_blogs","custom_name":"分頁頁籤","visible":true,"settings":{"dict_title":"網路推薦","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"50"},"blocks":{"1657262410714":{"type":"blog","custom_name":"部落格","visible":true,"settings":{"blog_handle":"ig推薦"}},"1657262462931":{"type":"blog","custom_name":"部落格","visible":true,"settings":{"blog_handle":"新聞報導"}}},"block_order":["1657262410714","1657262462931"]},"1657265786721":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjY1OTkyXzIzOTI1MTQ1N18zNzMzMDc1ODgzNDYyNTcxXzc5Mzc1NTcwNjMxNTg2MzEyMzVfbi5qcGcuanBlZyJdXQ.jpeg?sha=4b0f96c9e3e09667","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","cta_btn_display_style":"topPosition","cta_btn_text":"了解更多","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"282","margin_bottom":"0","mobile_margin_x":"0","mobile_margin_bottom":"24"},"blocks":{},"block_order":[]},"1657265836666":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjY1ODQ2X1NfXzUxMDY5MDE4LmpwZy5qcGVnIl1d.jpeg?sha=f8be49077827b9c8","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","cta_btn_display_style":"topPosition","cta_btn_text":"了解更多","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"24"},"blocks":{},"block_order":[]},"combo_product_info":{"type":"combo_product_info","visible":true,"settings":{}},"combo_product_desc":{"type":"combo_product_desc","visible":true,"settings":{}},"customers/other_valid_orders":{"type":"customers/other_valid_orders","visible":true,"settings":{}},"announcement_bar":{"type":"announcement_bar","visible":true,"blocks":{"announcement_bar_block_1":{"type":"image","visible":false,"settings":{"display_only_index":false,"display_period":"always","dict_link":"","link_open_in_new_tab":false,"dict_image_url":"","dict_image_tablet_url":"","dict_image_mobile_url":"","image_alt":"","dict_content":"","text_size":"","text_color":"","bg_color":"","timer_text_color":"#c39d6f","timer_bg_color":"#2b2b6e","migrated_from_navbar":true}}},"block_order":["announcement_bar_block_1"],"settings":{"display_mode":"vertical","carousel_interval":"3"}}},"navbar_image_logo":true,"show_default_all_products":true,"one_dimension_limit":"
546","two_dimension_limit":"10","header_banner_display":true,"header_banner_link":"/","display_main_slider":true,"display_phone":true,"phone_number":"0912345678","display_fax_number":true,"shop_fax_number":"0222345678","display_shop_email":true,"shop_email":"[email protected]","display_shop_address":true,"shop_address":"測試地址","display_office_time":true,"shop_office_time":"10:00-17:00","index_event_slider_display":true,"index_event_slider_item_1_display":true,"dict_index_event_slider_item_1_link":"#","index_event_slider_item_2_display":true,"dict_index_event_slider_item_2_title":"2019秋季鞋款新品上市","dict_index_event_slider_item_2_link":"#","index_event_slider_item_3_display":true,"dict_index_event_slider_item_3_title":"全館任選三件結帳再享折扣!!8折!!","dict_index_event_slider_item_3_link":"#","index_event_slider_item_4_display":true,"dict_index_event_slider_item_4_title":"FINAL SALE/夏天熱銷百搭鞋款補貨到店","dict_index_event_slider_item_4_link":"#","index_event_slider_item_5_display":true,"dict_index_event_slider_item_5_title":"熱賣倒數","dict_index_event_slider_item_5_link":"#","index_event_slider_item_6_display":true,"dict_index_event_slider_item_6_title":"現在註冊會員即可享折扣金$50(現折)","dict_index_event_slider_item_6_link":"#","index_event_slider_item_7_display":false,"dict_index_event_slider_item_7_title":"","dict_index_event_slider_item_7_link":"","index_event_slider_item_8_display":false,"dict_index_event_slider_item_8_title":"","dict_index_event_slider_item_8_link":"#","index_event_slider_item_9_display":false,"dict_index_event_slider_item_9_title":"","dict_index_event_slider_item_9_link":"#","index_event_slider_item_10_display":false,"dict_index_event_slider_item_10_title":"","dict_index_event_slider_item_10_link":"#","index_4_slider_display":true,"dict_index_4_slider_title":"Instagram","index_4_slider_item_1_display":true,"dict_index_4_slider_item_1_link":"#","index_4_slider_item_2_display":true,"dict_index_4_slider_item_2_link":"#","index_4_slider_item_3_display":true,"dict_index_4_slider_item_3_link":"#","index_4_slider_item_4_display":true,"dict_index_4_slider_item_4_link":"#","index_4_slider_item_5_display":true,"dict_index_4_slider_item_5_link":"#","index_4_slider_item_6_display":false,"dict_index_4_slider_item_6_link":"#","index_4_slider_item_7_display":false,"dict_index_4_slider_item_7_link":"#","index_4_slider_item_8_display":false,"dict_index_4_slider_item_8_link":"#","index_video_blocks_display":true,"dict_index_video_blocks_title":"Youtube","dict_index_video_blocks_video_link":"https://www.youtube.com/watch?v=3bI4IUIVjCk","collection_sidebar":"main-menu","collection_sidebar_set_open":false,"collection_pagination_limit":"24","product_slogan_display":false,"display_product_total_sold":false,"display_periodic_order_label":false,"cart_quantity_limit":"0","is_empty_clickable":false,"is_first_selected":true,"display_product_images_color":false,"discount_product_images_color_expand":false,"display_product_discounts_list":true,"display_discount_price_name":false,"discount_price_slogan_url":"","dict_discount_price_name":"","display_discount_price_suggestion_name":false,"dict_discount_price_suggestion_name":"","display_product_section_description":true,"dict_product_section_description":"商品介紹","description_section_spec_setting":false,"dict_product_description_section_spec":"規格說明","description_section_shipping_setting":false,"dict_product_description_section_shipping":"運送方式","vip_custom_price_visible":false,"display_global_event_1":false,"dict_show_global_event_1_link":"#","display_global_event_2":false,"dict_show_global_event_2_link":"#","display_global_event_3":false,"dict_show_global_event_3_link":"#","display_contact_address":true,"dict_contact_address":"測試地址","show_google_map":true,"show_google_map_iframe":"\u003ciframe src=\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3613.6479170127777!2d121.56760821400371!3d25.07991984260527!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3442ac6fbd841bbd%3A0x64e16bcf25e3da31!2zMTE05Y-w5YyX5biC5YWn5rmW5Y2A55Ge5YWJ6LevNTEz5be3MzDomZ8!5e0!3m2!1szh-TW!2stw!4v1485156761267\" width=\"600\" height=\"450\" frameborder=\"0\" style=\"border:0\" allowfullscreen\u003e\u003c/iframe\u003e","display_selected_blog":true,"selected_blog":"news","product_scale":"default_scale","display_inventory_policy":true,"google_font":"{'ja':{'value':'Noto Sans JP'},'zh-TW':{'value':'Noto Sans TC'},'en':{'value':'Noto Sans TC'},'zh-CN':{'value':'Noto Sans TC'}}","styled_shop_menu":"buttonType","display_product_vendor":true,"product_text_align":"center","product_labels":{"items":[{"id":"sale_label","kind":"system","title":"特價標籤","display":false,"type":"text","dict_text":{},"image":"/theme_src/beta_theme/default_img/onsale_icon.png","image_size":"large"},{"id":"out_of_stock_label","kind":"system","title":"缺貨標籤","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"periodic_event_label","kind":"system","title":"定期定額標籤","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"eb390049-e089-4397-81e4-5864e8b168e2","kind":"custom","title":"自定義標籤 1","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"eed7d609-fd81-45f6-bce6-a28cd7d803c6","kind":"custom","title":"自定義標籤 2","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"f0423e1c-a319-43c2-901d-de9f6e80ab3d","kind":"custom","title":"自定義標籤 3","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"992cc30a-83c4-47d8-8654-cc77bdcbb26d","kind":"custom","title":"自定義標籤 4","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"cab8e23a-792f-4cba-8321-556ee793f7ed","kind":"custom","title":"自定義標籤 5","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"}]}});
55  </script>
55
56
57
58
59
60
61
62
63
64  
64<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","url":"https://www.ruhfu.com","logo":"https://cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f"}</script>
64<script type="application/ld+json">{"@context":"https://schema.org/","@type":"WebSite","name":"熱富安平伴手禮","url":"https://www.ruhfu.com","potentialAction":{"@type":"SearchAction","target":"www.ruhfu.com/search?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
64
65
66
67
68    <!-- for vendor -->
69    <!-- cyb_snippet _bootstrap start -->
70
71<!-- cyb_snippet _bootstrap end -->
72    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/vendor-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
73
74    <!-- common css rulesets -->
75    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/common-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
76
77    <!-- for navbar -->
78    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/navbar-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
79
80    <!-- for footer -->
81    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/footer-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
82
83    <!-- theme assets -->
84    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/main-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
85
86    <!-- for vendor -->
87    
87<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/vendor-3a2e378145f8a165.js' type='text/javascript'></script>
87
88
89            
89<script>
90          window.sci = "eyJzaG9wX2lkIjoyMjM0NSwic2hvcF9wbGFuIjoiYm9zc19wbHVzIiwiZGlt\nX2FmZmlsaWF0ZSI6bnVsbCwiY3VzdG9tZXJfaWQiOm51bGwsImN1c3RvbWVy\nX25hbWUiOm51bGwsInNob3BfbmFtZSI6IueGseWvjOWuieW5s+S8tOaJi+em\nriIsInNoYXJlX2F0dHJpYnV0aW9uX2VuYWJsZWQiOmZhbHNlfQ==\n";
91        </script>
91
92
93
94<meta name="csrf-param" content="authenticity_token" />
95<meta name="csrf-token" content="y7xgVvhAJYmH1OogPG-cWq5jH8nUocJuKNfOZbBi0-5sYxFvTGgG6qTcgiwRMowOMV9HKRrST8HWfI9kVAxBeQ" />
96<script>(function () {
97  window.gaConfigurations = {"useProductIdInProductEvents":false};
98})();
99</script>
vendor: 1 bytes, line 99
99
100<script>(function () {
101  window.CYBERBIZ_PageContext = {"page_type":"home"};
102})();
103</script>
103
104<link href="//cdn-general.cybassets.com/frontend/shop/quark-3a2e378145f8a165.css" rel="stylesheet" type="text/css" media="all" />
105        
105<script>
106          window.shopScriptHelper = {
107            i18nLocale: "zh-TW",
108            i18nLocaleDefault: "zh-TW",
109            availableCurrencies: [],
110            defaultCurrency: "TWD",
111            currenciesInfo: [{"name":"新台幣 (TWD)","html":"NT${{amount_no_decimals}}","money_format":"%u%n","unit":"","decimal_precision":0,"email_unit":"NT${{amount_no_decimals}}","html_unit":"NT${{amount_no_decimals}}","format":"NT${{amount_no_decimals}}","trailing_zeros":false,"code":"TWD","email":"NT${{amount_no_decimals}}","symbol":"NT$"}],
112            vueOverrideTranslations: {"zh-TW":{"vue":{}}},
113            hasI18nInContextEditing: false,
114            shopMultipleCurrenciesCheckout: false,
115            hasLocalizedShopPriceFormat: true,
116          }
117        </script>
117
118
119        
120        
120<script
121          src="//cdn-general.cybassets.com/frontend/shop/tolgeeIntegration-3a2e378145f8a165.js">
122        </script>
122
123        
123<script defer>
124          /*
125          * Enable in-context translation for Liquid part on the page.
126          * This must be executed last to prevent conflicts with other Vue apps.
127          * So put it to `onload`, which will be executed after DOM ready's app mount
128          */
129          window.onload = function() {
130            if (
131              window.shopScriptHelper &&
132              window.shopScriptHelper.hasI18nInContextEditing
133            ) {
134              window.initTolgeeForLiquid()
135            }
136          }
137        </script>
137
138
139<script> var google_con_event_labels = []</script>
vendor: 1 bytes, line 139
139
140<script src="//cdn-general.cybassets.com/frontend/shop/pageEventHandler-3a2e378145f8a165.js"></script>
vendor: 1 bytes, line 140
140
141<script src="//cdn-general.cybassets.com/frontend/shop/globalAnalysis-e4c650eb0b.js"></script>
141
142        
142<script>
143          window.c12t = {"customer_id":null};
144        </script>
144
145
146        <meta name="request-id" content="2BEBDB6FD3AF0498C091199B6D2ECAA3"/>
147
148<link rel="canonical" href="https://www.ruhfu.com/">
149<script src="//cdn-general.cybassets.com/frontend/shop/carousel-3a2e378145f8a165.js"></script>
149
150          
150<script>
151            window.parent.postMessage({ type: 'previewShopInit', currentUrl: window.location.href }, '*');
152          </script>
152
153
154<script src="//cdn-general.cybassets.com/frontend/appStoreSDK/main.2798231628aa7fab87a9.js"></script>
vendor: 1 bytes, line 154
154
155<script>window.CYBERBIZ_AppScriptSettings = {"shop_add_ons":"W3sidmVuZG9yX3R5cGUiOiJDWUJFUkJJWiBHb29nbGUgQW5hbHl0aWNzIDQi\nLCJhcHBfaWQiOiJRVWo1WnFvZUlPUjlaM2JaS2trMG44N3l5a0FpOWU0NURE\naDJ0YlFnaUJBIiwic2V0dGluZ3MiOnsiZ3RhZ19pZCI6IkctMzdFUTlHVExT\nQiwgRy00QjdSSzdGSFdIIn19LHsidmVuZG9yX3R5cGUiOiJDaGF0IEJveCIs\nImFwcF9pZCI6ImM5ZDgzZjA5OTYxNzRmYmJhODZlYmEwNDFhZTg5OGEyIiwi\nc2V0dGluZ3MiOnsid2lkZ2V0X2tleSI6ImJDX3ZUcU1BMGFyYXZoUlQifX0s\neyJ2ZW5kb3JfdHlwZSI6IkRpZ2l0YWwgSW50ZWxsaWdlbmNlIFRyYWNrZXIi\nLCJhcHBfaWQiOiIxYjUwYTg2ZGMyZDE0MTgzODhmZGVkZjdhMGQ0MzlhZSIs\nInNldHRpbmdzIjp7fX1d\n"}
156</script>
vendor: 1 bytes, line 156
156
157<script src="https://cdn.cybassets.com/appmarket/api/common/attachments/entrypoint/9d6f4550aad572e9f70abb70ae5a6552482cf617ea5e4d5a32ed4ebbb5d60d54.js"></script>
vendor: 1 bytes, line 157
157
158<script src="https://cdn.cybassets.com/appmarket/api/common/attachments/entrypoint/8766542902afa60f4adda3c555c06025d2c27771ea85a6fc657a91cddbe5c59f.js"></script>
vendor: 1 bytes, line 158
158
159<script src="https://cdn.cybassets.com/appmarket/api/common/attachments/entrypoint/35cd1f36a4a855bacbaa53900f8e17b376d4cab44c73812eef261aef6435163d.js"></script>
vendor: 1 bytes, line 159
159
160<script>window.CYBERBIZ.initializeSDK.initialize();</script>
vendor: 1 bytes, line 160
160
161<script src="//cdn-general.cybassets.com/frontend/shop/setAffliateCookie-3a2e378145f8a165.js"></script>
161
162
163
164
165
166
167
168
169
170    <style id="color_settings">
171  :root {
172    
173      --button: #f47373;
174    
175
176    
177      --button_text: #FFFFFF;
178    
179
180    
181      --accent: #2B2B6E;
182    
183
184    
185      --heading: #565656;
186    
187
188    
189      --text: #9A9EA2;
190    
191
192    
193      --price: #e76f51;
194    
195
196    
197      --discount_price: #e76f51;
198    
199
200    
201      --theme_bg: #FFFFFF;
202    
203
204    
205      --nav_logo_bg: #FFFFFF;
206    
207
208    
209      --nav_menu_bg: #FFFFFF;
210    
211
212    
213      --nav_menu_text: #565656;
214    
215
216    
217      --nav_menu_icon: #565656;
218    
219
220    
221      --footer_bg: #555555;
222    
223
224    
225      --footer_text: #FFFFFF;
226    
227
228    
229      --checkout_button: #000000;
230    
231
232    
233      --checkout_accent: #2b2b6e;
234    
235
236    
237      --product_border: #E2E2E2;
238    
239
240    
241      --tips_text: #0C5460;
242    
243
244    
245
246    
247  }
248</style>
249
250
251
252
253  
254        <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 74 bytes, lines 254-255
254
255          <script async src="https://www.googletagmanager.com/gtag/js?id=
255G-37EQ9GTLSB
vendor: 22 bytes, lines 255-256
255"></script>
256          
256<script>
257            window.dataLayer = window.dataLayer || [];
258            function gtag(){dataLayer.push(arguments);}
259            gtag('js', new Date());
260            
261            
262      </script>
262
263      
263<script>
264        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
265        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
266        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
267        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
268
269        ga('create', '', 'auto', {'name': 'cyberbiz'});
270        ga('cyberbiz.require', 'displayfeatures');
271        ga('cyberbiz.set', 'dimension1', '22345');
272        ga('cyberbiz.require', 'ec');
273        ga('cyberbiz.send', 'pageview');
274      </script>
274
275    </head>
276
277  <body style="display: flex; flex-direction: column;">
vendor: 74 bytes, lines 277-279
277
278      <noscript><iframe
279      src="//www.googletagmanager.com/ns.html?id=
279GTM-TXD9LVJ
vendor: 117 bytes, lines 279-285
279"
280      height="0"
281      width="0"
282      style="display:none;visibility:hidden">
283      </iframe></noscript>
284    
285    
285<!-- Navigation -->
286    <!-- cyb_snippet liquid_helper start -->
287<script>
288	function getDiscountPriceName() {
289		return "false" === "true" ? "" : "";
290	}
291
292	function getDiscountPriceSuggestionName() {
293		return "false" === "true" ? "" : "";
294	}
295
296  document.addEventListener('DOMContentLoaded', function() {
297    const languageHandle = Cookies.get("language");
298    const defaultLanguage = {"handle":"zh-TW","currency_code":"TWD","title":"繁體中文"};
299    const languages = [];
300    const currency = window.shopScriptHelper.defaultCurrency;
301    const currencies = window.shopScriptHelper.currenciesInfo;
302		window.liquidHelper = {
303			shopInternational: false,
304			defaultLanguage: defaultLanguage,
305			language: languages.find(function(l) {
306				return l.handle === languageHandle;
307			}) || defaultLanguage,
308      shopMultipleCurrenciesCheckout: false,
309			shopMultipleCurrencies: false,
310			defaultCurrencyFormat: "NT${{amount_no_decimals}}",
311			defaultCurrency: currency,
312			getCurrency: function() {
313        const currencyValue = Cookies.get("currencyValue") || currency;
314        return currencies.find(function(c) { return c.code === currencyValue; }
315      )},
316      getDefaultCurrency: function() { return currencies.find(function(c) {
317				return c.code === currency;
318			})},
319      getAvailableCurrencies: function() { return currencies.map(c => c.code) },
320      getCurrencyFormatInfo: function(currency) {
321        const currencyInfo = currencies.find(c => c.code === currency)
322        return _.pick(currencyInfo, [
323          'decimal_precision',
324          'symbol',
325          'money_format',
326          'unit',
327          'trailing_zeros',
328          'html_unit',
329          'code',
330        ]);
331      },
332			cartQuantityLimit: (function() {
333        const limit = Number("0" || undefined);
334        return limit <= 0 || isNaN(limit) ? Number.POSITIVE_INFINITY : limit;
335      })(),
336			isFirstVariantSelected:  true ,
337			isImageColorsUsed:  false ,
338			isEmptyClickable:  false ,
339			hasAddBuyProduct: '' !== "" ? true : false,
340			hasPriceWithDiscountPlugin: 'false' ? true : false,
341      conversionBonus: 1,
342      hasLocalizedShopPriceFormat: true,
343      hasCustomerCartPlugin: true,
344      isCartEnabled: true,
345      cdnHost: '//cdn-general.cybassets.com',
346      hasShopCustomPasswordRulePlugin: false,
347      hasDisableProductQuantityValidation: false,
348      hasBreadcrumbReferrerEnabled: false,
349		};
350	});
351</script>
351
352
353<!-- cyb_snippet liquid_helper end -->
354
355<script src='//cdn-general.cybassets.com/frontend/shop/navbarSection-3a2e378145f8a165.js' type='text/javascript'></script>
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372<style>
373  
374    #navbar {
375      --navbar-pc-title-scale: 0.9;
376      --navbar-pc-body-scale: 1.0;
377      --navbar-mobile-title-scale: 0.9;
378      --navbar-mobile-body-scale: 1.0;
379    }
380  
381
382  
383
384  
385</style>
386
387
388  <span id="navbar" class="drawer drawer--left font-size-setting-enabled">
389    <header id="header" class="qk-w--100vw qk-pos--fixed qk-t--0 qk-l--0">
390      
391
392      
393        <div id="announcement-bar"></div>
394      
395
396      
397      
398        <div class="computer_nav qk-hidden--mobile ">
399          <div class="header_logo qk-bg--nav_logo_bg">
400            <div class="qk-pos--rel">
401              <div class="qk-text--center">
402                <!-- logo start -->
403                
404                  <nav class="logo qk-display--il_bk">
405                    <a href="/" class="qk-w--100">
406                      <img
407                        src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f"
408                        class="qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--pc_logo qk-hidden--mobile"
409                        style="width: auto; height: 52px;"
410                        alt=""
411                        height="52"
412                        width="auto"
413                      >
414                    </a>
415                  </nav>
416                
417                <!-- logo end -->
418                <!-- tool-nav start -->
419                
420                  <!-- cyb_snippet tool_nav start -->
421
422
423
424
425
426
427<nav class="tool-nav qk-pos--rel qk-float--r qk-display--flex">
428  <ul class="link_shelf_top qk-display--flex qk-flex--row qk-justify--end qk-align--center qk-pos--abs qk-r--0">
429    
430    
431    <!-- member -->
432    
433      <li class="customer_account qk-pos--rel qk-pd--05">
434        <div class="dropdown qk-pos--static">
435          <div class="qk-cursor--pointer" data-toggle="dropdown">
436            <div data-icon-type="custom_icon_type_account"></div>
437            <span class="text"></span>
438          </div>
439          <div class="member qk-dropdown_menu dropdown-menu qk-pos--abs qk-r--0 qk-bd--default qk-bd--product_border qk-bg--theme_bg" role="menu">
440            <ul id="customer-logined-menu" style="display: none">
441              <li>
442                <div class="qk-fs--body qk-text--heading">
443                  <p class="customer-name qk-whitespace-break-spaces"></p>
444                  <p>您好!</p>
445                </div>
446              </li>
447            </ul>
448            <ul id="customer-not-login-menu">
449              <li class="button qk-text--center">
450                <a href="/account/login" class="btn-login qk-btn qk-btn--lg qk-btn--primary qk-w--100">會員登入</a>
451              </li>
452              <li class="button qk-text--center">
453                <a href="/account/signup" class="btn-orders qk-btn qk-btn--lg qk-btn--secondary qk-w--100 qk-bg--transparent">註冊新會員</a>
454              </li>
455            </ul>
456            <span class="menu-bd qk-bd_t--default qk-bd--product_border"></span>
457            <ul class="member-menu qk-bd_t--default qk-bd--product_border">
458              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
459                <a href="/account/index" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">我的帳戶</a>
460              </li>
461              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
462                <a href="/account/orders" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">訂單查詢</a>
463              </li>
464              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
465                <a href="/account/coupons" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">專屬優惠券</a>
466              </li>
467              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
468                <a href="/account/tracking_items" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">收藏清單</a>
469              </li>
470              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg customer-logout-li" style="display: none">
471                <a href="/account/logout" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">會員登出</a>
472              </li>
473            </ul>
474          </div>
475        </div>
476      </li>
477    
478    <!-- for money symbol -->
479    <div id="money-symbol" data-money-symbol="NT${{amount_no_decimals}}" hidden></div>
480    <!-- cart -->
481    
482      <li class="cart qk-pos--rel qk-pd--05">
483        <!--電腦版的購物車選單-->
484        <div class="dropdown qk-pos--static">
485          <div data-toggle="dropdown" class="shopcart qk-cursor--pointer" >
486            <div data-icon-type="custom_icon_type_cart"></div>
487            <span class="global-cart-count qk-circle qk-circle--sm qk-bg--accent qk-text--white qk-vert--mid qk-pos--abs qk-bd" style="display: none;">0</span>
488            <span class="global-cart-loading"></span>
489          </div>
490          <div class="qk-dropdown_menu dropdown-menu qk-pos--abs qk-r--0 qk-bd--default qk-bd--product_border qk-bg--theme_bg" role="menu">
491            <div class="cart_list global-cart-item-list custom-scrollbar qk-of_x--hidden qk-of_y--scroll qk-of_y--overlay qk-display--flex qk-flex--column qk-justify--between default_scale"></div>
492            <p class="cart_empty qk-fs--body qk-text--heading qk-text--center">目前的購物車是空的!</p>
493            <ul>
494              <li class="button qk-text--center">
495                <a class="btn-checkout qk-btn qk-btn--lg qk-btn--primary qk-w--100" href="/cart" style="display: none">立即購買</a>
496                <a class="btn-tracking qk-btn qk-btn--lg qk-btn--secondary qk-w--100 qk-bg--transparent" href="/account/tracking_items">前往收藏清單</a>
497              </li>
498            </ul>
499          </div>
500        </div>
501      </li>
502    
503    <!-- search -->
504    
505      <li class="search qk-pos--rel qk-pd--05" id="search-icon">
506        <div class="dropdown qk-pos--static">
507          <div class="qk-cursor--pointer" data-toggle="dropdown">
508            <div data-icon-type="custom_icon_type_search"></div>
509          </div>
510          <div class="qk-dropdown_menu dropdown-menu qk-pos--abs qk-r--0 qk-bd--default qk-bd--product_border qk-bg--theme_bg" role="menu">
511            <div class="search-area qk-display--flex qk-flex--row qk-justify--start qk-align--center qk-vert--mid">
512              <form action="/search" class="form-inline qk-search_form qk-display--flex qk-justfify--between qk-align--center qk-flex--1">
513                <input class="search-input form-control qk-inputbox qk-inputbox--lg qk-flex--1 qk-w--100 qk-bg--transparent qk-text--heading" type="search" placeholder="搜尋" aria-label="Search" name="q" value="" />
514                <button class="search-btn qk-btn qk-btn--lg qk-btn--primary qk-pd--0" type="submit">搜尋</button>
515              </form>
516            </div>
517          </div>
518        </div>
519      </li>
520    
521    <!-- express delivery -->
522    
523  </ul>
524</nav>
525
526<!-- cyb_snippet tool_nav end -->
527                
528                <!-- tool-nav end -->
529              </div>
530            </div>
531          </div>
532          
533            <div class="header_nav qk-bg--nav_menu_bg">
534              <div class="qk-pd_x--15">
535                <div class="qk-pos--relative center">
536                  <!-- main-nav start -->
537                  <nav class="main_nav qk-display--init"></nav>
538                  <!-- main-nav end -->
539                </div>
540              </div>
541            </div>
542          
543        </div>
544      
545      <div class="qk-hidden--pc  ">
546        <!-- mobile-nav start -->
547        <nav class="mobile-nav qk-bg--nav_logo_bg">
548          <ul class="qk-display--flex qk-flex--row qk-justify--between qk-align--center qk-pd_x--05 qk-pd_y--0">
549            <!-- menu -->
550            
551              <li class="sidebar-menu-icon drawer-toggle qk-text--center qk-pd_x--05 qk-pd_y--0 qk-display--flex qk-align--center">
552                <div data-icon-type="custom_icon_type_menu"></div>
553              </li>
554            
555            <!-- logo -->
556            
557              <li class="logo qk-mg_r--auto qk-pd_x--05 qk-pd_y--0">
558                
559                  <a href="/" class="qk-display--il_flex qk-align--center qk-h--100 qk-hidden--phone">
560                    <img
561                      src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f"
562                      height="25"
563                      width="auto"
564                      alt=""
565                    >
566                  </a>
567                
568                
569                  <a href="/" class="qk-display--il_flex qk-align--center qk-h--100 qk-hidden--tablet">
570                    <img
571                      src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f"
572                      height="25"
573                      width="auto"
574                      alt=""
575                    >
576                  </a>
577                
578              </li>
579            
580            
581              <!-- search -->
582              
583                <li class="search qk-text--center qk-pd_x--05 qk-pd_y--0 qk-display--flex qk-align--center ">
584                  <div class="dropdown qk-pos--static qk-text--center">
585                    <div class="qk-cursor--pointer" data-toggle="dropdown">
586                      <div data-icon-type="custom_icon_type_search"></div>
587                    </div>
588                    <div
589                      class="qk-dropdown_menu dropdown-menu qk-w--100vw qk-bg--theme_bg qk-bd--default qk-bd--product_border qk-mg--0"
590                      role="menu"
591                    >
592                      <div class="search-area qk-display--flex qk-flex--row qk-justify--start qk-align--center qk-sp_bt--5 qk-w--100">
593                        <form action="/search" class="form-inline qk-display--flex qk-justfify--center qk-flex--1">
594                          <div class="form-inline qk-search_form qk-display--flex qk-justfify--center qk-align--center qk-flex--1">
595                            <input
596                              class="form-control qk-flex--1 qk-inputbox qk-inputbox--lg qk-bg--trans
596parent qk-text--heading"
597                              type="search"
598                              placeholder="搜尋"
599                              aria-label="Search"
600                              name="q"
601                              value=""
602                            >
603                            <button class="search-btn qk-btn qk-btn--lg qk-btn--primary qk-pd--0" type="submit">
604                              搜尋
605                            </button>
606                          </div>
607                        </form>
608                      </div>
609                    </div>
610                  </div>
611                </li>
612              
613              <!-- express delivery -->
614              
615            
616          </ul>
617        </nav>
618        <!-- mobile-nav end -->
619      </div>
620      
621    </header>
622    
623      <!-- Sidebar -->
624      <nav class="drawer-nav drawer-nav_width qk-bg--nav_menu_bg " role="navigation">
625        <div class="drawer-menu">
626          <!-- cyb_snippet side_menu start -->
627
628
629<ul id="index_sidebar_shelf_top" class="sidebar qk-pd_b--1">
630  
631    <li class="logo qk-pos--rel qk-bg--nav_logo_bg qk-pd_x--1 qk-pd_y--05">
632      <a href="/" class="qk-pd--0">
633        <img src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f" height="32" width="auto" alt="logo">
634      </a>
635      <button class="drawer-toggle qk-pos--abs qk-bg--transparent qk-pd--0"></button>
636    </li>
637  
638  
639    
640
641    
642      <!-- cyb_snippet components/side_menu/menu start -->
643
644  <li class="category_title qk-fs--breadcrumb qk-bd--nav_menu_text qk-text--nav_menu_text qk-bd_b--default qk-fw--500">主選單</li>
645
646
647  
648  
649  
650    <li class="qk-pos--rel qk-pd--0">
651      
652        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/">首頁</a>
653      
654    </li>
655  
656
657  
658  
659  
660    <li class="qk-pos--rel qk-pd--0">
661      <button class="linklist bt-toggle qk-fw--bold  qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-text--nav_menu_text qk-bg--nav_menu_bg qk-pos--rel" data-toggle="collapse" data-target=".collapse_index_sidebar_2" aria-expanded=" true ">
662        
663          <span class="qk-cursor--pointer qk-text--nav_menu_text"> 商品專區 </span>
664        
665      </button>
666      <ul id="index_sidebar_shelf_second_2" class="collapse_index_sidebar_2 collapse shelf_second  show  qk-pd--0">
667        
668          
669          
670          
671            <li class="qk-pos--rel qk-pd--0">
672              
673                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/安平必買專區">
674                  安平必買專區
675                </a>
676              
677            </li>
678          
679        
680          
681          
682          
683            <li class="qk-pos--rel qk-pd--0">
684              
685                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/中秋禮盒">
686                  中秋禮盒
687                </a>
688              
689            </li>
690          
691        
692          
693          
694          
695            <li class="qk-pos--rel qk-pd--0">
696              
697                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/軟餡牛舌餅台南月子餅古早味大餅">
698                  軟餡牛舌餅、台南月子餅、古早味大餅
699                </a>
700              
701            </li>
702          
703        
704          
705          
706          
707            <li class="qk-pos--rel qk-pd--0">
708              
709                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/鳳梨酥老婆餅太陽餅">
710                  鳳梨酥、老婆餅、太陽餅
711                </a>
712              
713            </li>
714          
715        
716          
717          
718          
719            <li class="qk-pos--rel qk-pd--0">
720              
721                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/劍獅綠豆椪安平古堡餅平安餅">
722                  劍獅綠豆椪、安平古堡餅,平安餅
723                </a>
724              
725            </li>
726          
727        
728          
729          
730          
731            <li class="qk-pos--rel qk-pd--0">
732              
733                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/拜拜食品請電話訂購">
734                  拜拜食品(請電話訂購)
735                </a>
736              
737            </li>
738          
739        
740      </ul>
741    </li>
742  
743
744  
745  
746  
747    <li class="qk-pos--rel qk-pd--0">
748      <button class="linklist bt-toggle qk-fw--bold  qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-text--nav_menu_text qk-bg--nav_menu_bg qk-pos--rel" data-toggle="collapse" data-target=".collapse_index_sidebar_3" aria-expanded=" true ">
749        
750          <span class="qk-cursor--pointer qk-text--nav_menu_text"> 網路推薦 </span>
751        
752      </button>
753      <ul id="index_sidebar_shelf_second_3" class="collapse_index_sidebar_3 collapse shelf_second  show  qk-pd--0">
754        
755          
756          
757          
758            <li class="qk-pos--rel qk-pd--0">
759              
760                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/blogs/新聞報導">
761                  新聞報導
762                </a>
763              
764            </li>
765          
766        
767          
768          
769          
770            <li class="qk-pos--rel qk-pd--0">
771              
772                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/blogs/ig推薦">
773                  IG網紅推薦
774                </a>
775              
776            </li>
777          
778        
779      </ul>
780    </li>
781  
782
783  
784  
785  
786    <li class="qk-pos--rel qk-pd--0">
787      
788        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/about-us">關於我們</a>
789      
790    </li>
791  
792
793  
794  
795  
796    <li class="qk-pos--rel qk-pd--0">
797      
798        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/contact">聯絡我們</a>
799      
800    </li>
801  
802
803
804<script>
805  $('button a').on('click', function(e) {e.stopPropagation()});
806</script>
806
807
808<!-- cyb_snippet components/side_menu/menu end -->
809    
810  
811  
812    
813      <li class="category_account-title qk-bd--nav_menu_text qk-fs--breadcrumb qk-text--nav_menu_text qk-bd_y--default qk-fw--500">帳戶</li>
814      <li class="qk-pos--rel qk-pd--0">
815        <div class="customer-logined-menu qk-display--il_bk qk-w--100 qk-text--left" style="display: none">
816          <a href="/account/index" class="qk-text--nav_menu_text qk-fw--bold qk-fs--body">我的帳戶</a>
817        </div>
818      </li>
819      <li class="qk-pos--rel qk-pd--0">
820        <div class="customer-logined-menu qk-display--il_bk qk-w--100 qk-text--left" style="display: none">
821          <a href="/account/orders" class="qk-text--nav_menu_text qk-fw--bold qk-fs--body">訂單查詢</a>
822        </div>
823      </li>
824      <li class="qk-pos--rel qk-pd--0">
825        <div class="customer-logined-menu qk-display--il_bk qk-w--100 qk-text--left" style="display: none">
826          <a href="/account/logout" class="qk-text--nav_menu_text qk-fw--bold qk-fs--body">會員登出</a>
827        </div>
828      </li>
829      <li class="qk-pos--rel qk-pd--0">
830        <a href="/account/login">
831          <div class="customer-not-login-menu qk-bd--nav_menu_text qk-bg--nav_menu_text customer-not-login-menu_login qk-display--il_flex qk-justify--center qk-align--center qk-w--100 qk-text--center ">
832            <span class="qk-text--nav_menu_bg qk-fw--500 qk-fs--body">
833              會員登入
834            </span>
835          </div>
836        </a>
837      </li>
838      <li class="qk-pos--rel qk-pd--0">
839        <a href="/account/signup">
840          <div class="customer-not-login-menu qk-bd--nav_menu_text customer-not-login-menu_signup qk-display--il_flex qk-justify--center qk-align--center qk-w--100 qk-text--center qk-bd--nav_menu_text qk-bd--default">
841            <span class="qk-text--nav_menu_text qk-fs--body qk-fw--500">
842              註冊新會員
843            </span>
844          </div>
845        </a>
846      </li>
847    
848    
849    
850    
851  
852</ul>
853
854<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/sidebar-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
855
856<script>
857  $(document).ready(function(){
858    // 側邊選單
859    if ($('.drawer').length){
860      $('.drawer').drawer();
861      $('.bt-toggle').click(function(){
862        setTimeout(function(){
863          $('.drawer')[0].iScroll.refresh()
864        },500)
865      })
866    }
867  });
868</script>
868
869
870
871<!-- cyb_snippet side_menu end -->
872
873        </div>
874      </nav>
875      <!-- Bottombar -->
876      
877        <div
878          id="mobile-bottom-bar"
879          class="qk-display--flex qk-justify--around qk-bg--nav_logo_bg qk-w--100vw qk-pos--fixed qk-b--0 qk-hidden--pc"
880        >
881          <!-- home -->
882          <div class="qk-display--flex qk-justify--center qk-align--center qk-text--center qk-pd_x--05 qk-pd_y--0 qk-flex--1">
883            <a id="home-nav-icon" href="/">
884              <div data-icon-type="custom_icon_type_home"></div>
885            </a>
886          </div>
887          <!-- tracking items -->
888          <div class="qk-display--flex qk-justify--center qk-align--center qk-text--center qk-pd_x--05 qk-pd_y--0 qk-flex--1">
889            <a href="/account/tracking_items">
890              <div data-icon-type="custom_icon_type_tracking_items" c></div>
891            </a>
892          </div>
893          <!-- cart -->
894          
895            <div class="qk-display--flex qk-justify--center qk-align--center qk-text--center qk-pd_x--05 qk-pd_y--0 qk-flex--1">
896              <a
897                href="/cart"
898                class="qk-display--il_flex qk-flex--row qk-justify--center qk-align--center qk-vert--mid qk-pos--rel"
899              >
900                <div data-icon-type="custom_icon_type_cart"></div>
901                <span
902                  class="number global-cart-count qk-circle qk-circle--sm qk-bg--accent qk-text--white qk-text--center qk-vert--mid qk-pos--abs"
903                  style="display: none;"
904                  >0</span
905                >
906              </a>
907            </div>
908          
909          <!-- member -->
910          
911            <div class="qk-display--flex qk-justify--center qk-align--center qk-text--center qk-pd_x--05 qk-pd_y--0 qk-flex--1">
912              <a id="customer-phone-nav-icon" href="/account/login">
913                <div data-icon-type="custom_icon_type_account"></div>
914              </a>
915            </div>
916          
917        </div>
918      
919    
920  </span>
921
922<div id="index-popular-tags"></div>
923
924<style id="timer_color">
925  :root {
926    
927      --timer_text: #c39d6f;
928    
929
930    
931      --timer_bg: #2b2b6e;
932    
933  }
934</style>
935
936<script>
937  window.language = {"account_name":"戶名","add_cart_error_try_again":"加入購物車有誤,請重新嘗試","add_to_cart":"加入購物車","addcart_rate_limit_desc":"秒後可再試一次,建議您停留在此頁面。","address1":"詳細退貨地址:路/å··/弄/樓","all_filters":"所有篩選條件","apply_fail":"申請失敗","apply_return":"退貨申請","apply_return_success":"您的退貨申請已成立","apply_success":"申請成功","arrive_soon":"即將到貨","articles_total":"共 {{ totalArticleCounts }} 篇文章","bank_account":"銀行帳號","bank_branch_name":"分行名稱","bonus_redemption":"紅利換購","cancel":"取消","cart_price_total":"結帳金額約","check_order":"訂單查詢","choose_branch_bank":"請選擇分行","choose_return_reason":"請選擇退貨原因","city":"城市","common_price":"市價: ","comply_group_number":"符合 {{comply_group_number}} 組優惠,","confirm":"確認","confirm_return":"申請退貨","confirm_submit":"確定送出","congratulations_for_verify_mobile_success":"恭喜,您已成功驗證您的手機!","contact_form":"聯絡我們","continue_reading":"繼續閱讀","country_placeholder":"請選擇國家","coupon_free_shipping":"免運券折抵","coupon_items":"優惠券折扣項目","date_error":"日期錯誤","default_sort":"預設排序","deliver_error":"寄送商品錯誤","discount_detail":"折扣明細","email":"電子郵件","email_placeholder":"請輸入您的電子郵件,例:[email protected]","enter_account_name":"請輸入戶名","enter_bank_account":"請輸入銀行帳號","enter_return_reason":"請填寫退貨原因...","error_message":"驗證簡訊發生錯誤,請稍後再試。","fail_operation":"操作失敗!","filter_button":"篩選","filter_no_result":"很抱歉,無商品符合篩選條件","free":"免費","gift_price":"加購價","gift_purchase":"滿額/件贈","go_check_email":"請至信箱收取信件","group_percent_discount":"組合內商品打{{discount}}折","has_stock":"尚有庫存 ","include_discount_and_shipping_fee":"含優惠折扣與運費","invalid_email":"這不是有效的電子郵件","invalid_name":"姓名為必填","invalid_phone_number":"聯絡電話為必填","invalid_question_content":"問題內容為必填","keep_shopping":"繼續購物","keyin_address1":"請填寫詳細退貨地址:路/å··/弄/樓","keyin_city":"請輸入城市","keyin_zip":"請輸入郵遞區號","less_then_one":"數量不得少於1","line_item_quantity":"數量:{{ lineItemQuantity }}","literal_points":"點","login_btn":"會員登入","mail_send_fail":"信件寄送失敗","message_confirmation_token_error":"簡訊驗證碼有誤","messenger_error_please_try_again":"簡訊寄送發生錯誤,請稍後再試。","mobile_number_error":"手機號碼有誤","name":"姓名","name_placeholder":"請輸入您的姓名","new_password_is_sent":"已送出新密碼","new_product_defect":"新品瑕疵","nn_collection_save_more_money_title":"可享,買 {{quantity}} ä»¶ {{price}} 元優惠","no_stock":"庫存不足","notification_enabled":"已登記補貨通知","notify_me_when_stock_arrives":"已售完,貨到通知我","onsale":"特價","order_date":"訂購日期","order_number":"訂單編號","order_retrun_confirm":"您確認要申請退貨?","ori_price":"原價","others":"其他","over_cart_limit":"數量超過購買上限","over_product_quantity":"數量超過庫存","over_stock_count":"商品庫存剩餘 {{ count }} ä»¶","over_stock_quantity":"超過庫存數量","phone_number":"聯絡電話","phone_number_placeholder":"請輸入聯絡電話","piece":"{{quantity}} ä»¶","please_choose_bank":"請選擇銀行","please_choose_product":"請選擇商品款式","please_choose_variant":"請選擇商品款式","please_enter_number":"請輸入數字","please_reselect":"請重新輸入篩選","please_send_and_confirm_verify_code":"請先發送並確認簡訊驗證碼","pre_order":"預購商品","price_asc":"價格由低到高","price_desc":"價格由高到低","price_filter":"價格","price_includes_tax":"(內含消費稅:{{ tax }})","product_content_defect":"商品內容不全","product_defect":"商品有缺陷","product_limit_buy":"此商品限購 {{ count }} ä»¶","product_rate_limit_btn":"重新進入商品頁","product_rate_limit_desc":"秒後可重新進入商品頁,建議您停留在此頁面。","product_rate_limit_title":"目前搶購人潮眾多,請耐心等候","product_rate_limit_warn":"若離開此頁面,可能會延長等待時間。","product_sold":"已銷售:{{ productSold }}","products_total":"共 {{ totalProductCounts }} 件商品","quantity":"數量:","quantity_over_product_stock":"數量超過商品庫存","question_content":"問題å
937…§å®¹","question_content_placeholder":"請輸入問題內容","question_submit_fail":"發生問題,請稍後再試","question_submit_success":"問題已成功送出,我們將盡快與您聯繫","question_type":"問題類型","reached_favorable":"已達優惠","recent_days_sold_desc":"本週熱賣","reenter_password_still_error":"重複輸入密碼有誤","refund":"退款金額","refund_account":"退款帳戶","refund_info":"退款資訊","refund_invoice_check":"本人同意發票作廢或「營業人銷貨退回進貨退出貨或折讓證明單」將全權由{{ envoiceCompanyName }}處理,以利加速退款作業。如有退貨/折讓,將直接開立折讓單上傳至財政部電子發票整合服務平台存證。","resend_verify_code":"重發驗證碼","reset_all_filters":"清除所有篩選","reset_filter_button":"清除篩選","return":"返回","return_address":"退貨地址","return_email_notification":"退貨申請信已寄至您的信箱","return_info":"退貨資訊","return_instruction":"退貨說明","return_msg_Australia":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_Japan":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_Japan_to_Taiwan":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_SEA":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_Taiwan":"1. 收到商品後如有發現瑕疵或破損狀況,需要辦理或換貨,請於收到貨後7天內登入『我的帳戶』頁面點選『申請退貨』。\u003cbr\u003e 2. 收到商品後可享有7天免費鑑è³
937žæœŸï¼ˆå«ä¾‹å‡æ—¥ï¼‰ã€‚退換貨時請保持原包裝商品的完整(包含購買商品,附件,贈品等)。\u003cbr\u003e 3. 收到申請後,我們將與您聯繫取回商品。若有任何退貨問題,您可以在『訂單明細』中,點選『我要詢問』,請勿自行寄回商品。\u003cbr\u003e 4. 當你申請退貨後,請列印本申請單隨商品一起寄回。\u003cbr\u003e 5. 收到您的退貨商品並審查通過後,將於7個工作天內退款至你的退款帳戶。\u003cbr\u003e","return_msg_USA":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_product":"退貨商品","return_reason":"退貨原因","save_more_money_discount":"可享 {{discount}} 折優惠","save_more_money_dollar":"可省 {{dollar}}","search_article_label":"文章搜尋結果 ({{ totalArticleCounts }})","search_no_result":"很抱歉,找不到 {{ queryString }} 請重新輸入搜尋。","search_product_label":"商品搜尋結果 ({{ totalProductCounts }})","search_total":"搜尋 {{ queryString }} 結果共 {{ totalSearchCount }} 筆","select_sort_by":"選擇排序方式","sell_from_asc":"上市日期舊到新","sell_from_desc":"上市日期新到舊","send_too_many_times_try_again_later":"發送次數過多,請稍後再試","sending_msg_few_minutes_get":"簡訊發送中,幾分鐘後您將收到驗證碼","shipping_fee":"運費","sold_out":"已售完","state_placeholder":"請選擇州/省","submit":"送出","subtotal":"小計","success_operation":"操作成功!","successfully_copy_tracking_number":"已成功複製你的物流單號","system_busy_try_again":"系統忙碌,請稍後再試","tax":"稅額","thanks_for_advise":"謝謝您的å¯
937¶è²´æ„è¦‹","thanks_you_have_signed_up":"謝謝您已註冊","total_bonus_redemption":"總紅利換購點數","tw_city_placeholder":"請選擇縣市","tw_district_placeholder":"請選擇鄉鎮市區","unreach_favorable":"未達優惠","verification_error_please_correct":"驗證有誤請修正","verify_success":"驗證碼確認成功","view_product":"查看商品","vip_shipping_free":"VIP免運費","zip":"郵遞區號","suggested_range":"建議區間:","periodic_order_label":"定期定額"}
938  $(document).ready(function(){
939    if(window.location.pathname != '' && window.location.pathname != '/' ){
940      document.getElementById('index-popular-tags').style.display = 'none'
941    }
942    // 倒數計時
943    
944
945    function adjustContentTop() {
946      
947      const isNavbarTransparent = false;
948      let headerHeight = $("#header").outerHeight();
949      if (isNavbarTransparent && $('#template').width() >= 992) {
950        headerHeight -= $('.computer_nav').height();
951      }
952      const floatFilterHeight = $('#float-filter').innerHeight() || 0;
953      $("body").css({
954        "padding-top": (headerHeight - floatFilterHeight) + "px",
955      });
956    }
957
958    window.adjustContentTop = adjustContentTop;
959
960    // navbar設定透明
961    
962
963    // Call it first once DOM is ready to prevent CLS
964    adjustContentTop();
965
966    // 延遲初始化,等待 app banner 初始化完成
967    $(window).on("resize", adjustContentTop);
968
969    // 使用 setTimeout 確保 banner 狀態已經確定
970    $(window).on("load", function() {
971      setTimeout(function() {
972        adjustContentTop();
973      }, 200); // 給 banner 足夠時間初始化
974    });
975
976    $('img.header_banner').on('load', adjustContentTop);
977
978    window.renderNavbarSection('.main_nav', {
979        navbarCollections: null,
980        navbarItems: [{"id":652027,"title":"首頁","url":"/","item_type":"frontpage","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":660200,"title":"商品專區","url":"商品專區","item_type":"linklist","subtitle":null,"icon_image_url":null,"menuItems":[{"id":780076,"title":"安平必買專區","url":"/collections/安平必買專區","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":780077,"title":"中秋禮盒","url":"/collections/中秋禮盒","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":780078,"title":"軟餡牛舌餅、台南月子餅、古早味大餅","url":"/collections/軟餡牛舌餅台南月子餅古早味大餅","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":780079,"title":"鳳梨酥、老婆餅、太陽餅","url":"/collections/鳳梨酥老婆餅太陽餅","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":780080,"title":"劍獅綠豆椪、安平古堡餅,平安餅","url":"/collections/劍獅綠豆椪安平古堡餅平安餅","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":780081,"title":"拜拜食品(請電話訂購)","url":"/collections/拜拜食品請電話訂購","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null}]},{"id":659319,"title":"網路推薦","url":"網路推薦","item_type":"linklist","subtitle":null,"icon_image_url":null,"menuItems":[{"id":780074,"title":"新聞報導","url":"/blogs/新聞報導","item_type":"blog","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":780075,"title":"IG網紅推薦","url":"/blogs/ig推薦","item_type":"blog","subtitle":null,"icon_image_url":null,"menuItems":null}]},{"id":652030,"title":"關於我們","url":"/pages/about-us","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":652031,"title":"聯絡我們","url":"/contact","item_type":"contact","subtitle":null,"icon_image_url":null,"menuItems":null}],
981        settings: {
982          menuDisplayStyle: "two_dimension_menu",
983          pcLogoImgUrl: "//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f",
984          mobileLogoImgUrl: "//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3NjA3OTA4X2xvZ28ucG5nLnBuZyJdXQ.png?sha=bc8e647cbd00b22f",
985          navbarDisplayStyle: "displayDefault",
986        }
987      }
988    );
989
990
991    // for link menu
992    const linkMenuElement = document.querySelector('.link-nav');
993    const data = []
994    data.forEach((item) => {
995      const wrapper = document.createElement('a');
996      const link = document.createElement('ul');
997
998      wrapper.href = item.url;
999      link.textContent = item.title;
1000      link.classList.add('link-item');
1001
1002      wrapper.appendChild(link);
1003      linkMenuElement.appendChild(wrapper);
1004    });
1005
1006    // for safe-area space on iOS devices
1007    const userAgent = navigator.userAgent;
1008    const isIOS = /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
1009    const isLiff = /Line\/[\d.]+/i.test(userAgent);
1010    const $mobileBottomBar = $('#mobile-bottom-bar');
1011
1012    if ($mobileBottomBar.length && isIOS && isLiff) {
1013      $mobileBottomBar.addClass('is-ios-liff');
1014    }
1015  });
1016  document.addEventListener('DOMContentLoaded', function() {
1017    window.getCartAmount = function() {
1018      return parseInt($('.global-cart-count').html());
1019    };
1020  });
1021</script>
1021
1022
1023<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/navbar-3a2e378145f8a165.js' type='text/javascript'></script>
vendor: 1 bytes, line 1023
1023
1024<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/currencies-3a2e378145f8a165.js' type='text/javascript'></script>
1024
1025<!-- cyb_snippet i18n_modal start -->
1026
1027
1028<!-- cyb_snippet i18n_modal end -->
1029<!-- cyb_snippet _load_fonts start -->
1030<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/load_fonts-3a2e378145f8a165.js' type='text/javascript'></script>
vendor: 1 bytes, line 1030
1030
1031<script>
1032  document.addEventListener('DOMContentLoaded', function() {
1033    window.loadFontSetting("{'ja':{'value':'Noto Sans JP'},'zh-TW':{'value':'Noto Sans TC'},'en':{'value':'Noto Sans TC'},'zh-CN':{'value':'Noto Sans TC'}}")
1034  })
1035</script>
1035
1036
1037<!-- cyb_snippet _load_fonts end -->
1038<!-- cyb_snippet _custom_icon start -->
1039<script src='//cdn-general.cybassets.com/frontend/shop/navIcon-3a2e378145f8a165.js' type='text/javascript'></script>
1039
1040
1041<script>
1042  (function() {
1043    const iconUrlMap = new Map([
1044      ['custom_icon_type_home', null],
1045      ['custom_icon_type_tracking_items', null],
1046      ['custom_icon_type_account', null],
1047      ['custom_icon_type_cart', null],
1048      ['custom_icon_type_search', null],
1049      ['custom_icon_type_menu', null]
1050    ]);
1051    const elements = document.querySelectorAll('[data-icon-type]');
1052    elements.forEach((element, index) => {
1053      const iconAttributes = element.getAttribute('data-icon-type');
1054
1055      const uniqueId = `icon_${iconAttributes}_${index}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
1056      element.id = uniqueId;
1057      window.renderNavCustomIcon(`#${uniqueId}`, {
1058        navIconStyle: "icon_type_default",
1059        customIconUrl: iconUrlMap.get(iconAttributes) || '',
1060        iconAttributes: iconAttributes,
1061        currentTemplate: "index",
1062      });
1063    });
1064  })();
1065</script>
1065
1066
1067<!-- cyb_snippet _custom_icon end -->
1068
1069
1070
1071    
1072  
1073    
1073<script src='//cdn-general.cybassets.com/frontend/shop/announcementBar-3a2e378145f8a165.js' type='text/javascript'></script>
1073
1074
1075    
1076
1077    
1078
1079    
1079<script>
1080      $(document).ready(function() {
1081        window.renderAnnouncementBar('#announcement-bar', {
1082          sectionId: "announcement_bar",
1083          isIndex: true,
1084        });
1085      });
1086    </script>
1086
1087  
1088
1089
1090
1091
1092
1093    <!-- template -->
1094    <div id="template" style="flex:1 0 auto; background-color: var(--theme_bg);">
1095      <div class="index">
1096
1097  
1098
1099
1100
1101
1102
1103
1104
1105
1106<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/_main_slider_custom-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1107
1108<style>
1109  [id="_main_slider_custom"] {
1110    margin: 0 0px 50px !important;
1111  }
1112  @media (max-width: 576px) {
1113    .main-slider-placeholder {
1114      display: none !important;
1115    }
1116    .swiper-container {
1117      visibility: visible !important;
1118    }
1119  }
1120  @media (max-width: 991px) {
1121    [id="_main_slider_custom"] {
1122      margin: 0 0px 26px !important;
1123    }
1124  }
1125</style>
1126
1127<section id="_main_slider_custom" class="main-slider qk-pos--rel">
1128  
1129  
1130
1131  <div
1132    class="swiper swiper-container"
1133    
1134  >
1135    <div class="swiper-wrapper qk-align--center">
1136      
1137      
1138      
1139        <div class="swiper-slide">
1140          
1141            <span class="img-flex qk-align--stretch qk-display--contents">
1142          
1143          
1144          
1145          
1146          
1147          
1148            <picture>
1149              
1150              
1151              <img
1152                id="slider-image"
1153                data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4MDk5X-mdnuayueeCuOidpumkhS5wbmcucG5nIl1d.png?sha=9928c408fd5e1af5"
1154                height="auto"
1155                alt=""
1156                class="swiper-lazy"
1157              >
1158            </picture>
1159
1160            
1161            
1162            
1163            
1164            
1165            
1166            
1167            
1168            
1169            
1170          
1171          
1172            </span>
1173          
1174          
1175            <div class="swiper-lazy-preloader"></div>
1176          
1177        </div>
1178      
1179        <div class="swiper-slide">
1180          
1181            <span class="img-flex qk-align--stretch qk-display--contents">
1182          
1183          
1184          
1185          
1186          
1187          
1188            <picture>
1189              
1190              
1191              <img
1192                id="slider-image"
1193                data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4MTE4X-Wkj-WogeWkt-ixhuWhlC5wbmcucG5nIl1d.png?sha=0e78b67efa19a5ff"
1194                height="auto"
1195                alt=""
1196                class="swiper-lazy"
1197              >
1198            </picture>
1199
1200            
1201            
1202            
1203            
1204            
1205            
1206            
1207            
1208            
1209            
1210          
1211          
1212            </span>
1213          
1214          
1215            <div class="swiper-lazy-preloader"></div>
1216          
1217        </div>
1218      
1219        <div class="swiper-slide">
1220          
1221            <span class="img-flex qk-align--stretch qk-display--contents">
1222          
1223          
1224          
1225          
1226          
1227          
1228            <picture>
1229              
1230              
1231              <img
1232                id="slider-image"
1233                data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4MTM2X-akqumkhS5wbmcucG5nIl1d.png?sha=1c1d5e9d240de5c9"
1234                height="auto"
1235                alt=""
1236                class="swiper-lazy"
1237              >
1238            </picture>
1239
1240            
1241            
1242            
1243            
1244            
1245            
1246            
1247            
1248            
1249            
1250          
1251          
1252            </span>
1253          
1254          
1255            <div class="swiper-lazy-preloader"></div>
1256          
1257        </div>
1258      
1259    </div>
1260    
1261      <div
1262        class="qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v2 qk-swiper_btn--prev main_slider_custom_prev qk-hidden--mobile"
1263      ></div>
1264      <div
1265        class="qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v2 qk-swiper_btn--next main_slider_custom_next qk-hidden--mobile"
1266      ></div>
1267    
1268  </div>
1269  
1270    <div class="qk-swiper_pg qk-w--100 qk-mg_t--1 qk-text--center main_slider_pagination"></div>
1271  
1272</section>
1273
1274<script>
1275  $(document).ready(function(){
1276    let isDynamicLoading = false;
1277    let settingObj = {
1278      id: '_main_slider_custom',
1279      mobile_img_number: Number('1'),
1280      mobile_img_space: Number('8'),
1281      img_number: Number('1'),
1282      img_space: Number('12'),
1283      swiper_delay: '3',
1284    }
1285    window.mainSlider = function(obj){
1286    var id = themeHelper.escapeId(obj.id);
1287    var slideCount = $(`#${obj.id} .swiper-slide`).length
1288    var autoLoop = true
1289    if (slideCount <= 1){
1290      autoLoop = false
1291    }
1292    var mainSlider = new Swiper('#' + id + ' .swiper-container', {
1293      preloadImages: false,
1294      slidesPerView: Number(obj.mobile_img_number),
1295      spaceBetween: Number(obj.mobile_img_space),
1296      breakpoints: {
1297        0:{
1298          slidesPerView: Number(obj.mobile_img_number),
1299          spaceBetween: Number(obj.mobile_img_space),
1300        },
1301        991: {
1302          slidesPerView: Number(obj.img_number),
1303          spaceBetween: Number(obj.img_space),
1304        }
1305      },
1306      // Enable lazy loading
1307      observer: true,
1308      observeParents: true,
1309      autoheight: true,
1310      lazy: {
1311        loadPrevNext: true,
1312      },
1313      freeMode: {
1314        enabled: true,
1315        sticky: true,
1316        momentum: true,
1317        momentumRatio: 0.4,
1318        momentumVelocityRatio: 0.1,
1319      },
1320      loop: autoLoop,
1321      autoplay: { delay: obj.swiper_delay * 1000 },
1322      speed: Number('300.0'),
1323      pagination: {
1324        el: '#' + id + ' .main_slider_pagination',
1325        clickable: true,
1326      },
1327      navigation: {
1328        nextEl: '#' + id + ' .main_slider_custom_next',
1329        prevEl: '#' + id + ' .main_slider_custom_prev',
1330      },
1331      on: {
1332        init: function () {
1333          if (isDynamicLoading && !window.matchMedia("(max-width: 576px)").matches) {
1334            document.querySelector('#' + id + ' .main-slider-placeholder').style.display = 'none';
1335            document.querySelector('#' + id + ' .swiper-container').style.visibility = 'visible';
1336          }
1337        },
1338      }
1339    });
1340    }
1341    if (isDynamicLoading) {
1342        window.DynamicLoading.setupComponent({
1343        sectionId: "_main_slider_custom",
1344        sectionSettingData: settingObj,
1345        entryName:'mainSlider',
1346        source:'https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.4.5/js/swiper.js',
1347        componentType:'js',
1348        hiddenDom: true
1349      });
1350    }else{
1351      mainSlider(settingObj);
1352    }
1353  })
1354</script>
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/_index_4_blocks-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1369<script src='//cdn-general.cybassets.com/frontend/shop/productDisplay-3a2e378145f8a165.js' type='text/javascript'></script>
1369
1370
1371<style>
1372  [id="1657176902481"] {
1373    margin: 0 250px 50px !important;
1374  }
1375
1376  @media (min-width: 992px) {
1377    [id="1657176902481"] .block:not(.last-row) {
1378      margin-bottom: 10px !important;
1379    }
1380    [id="1657176902481"] .block-default-width-margin:not(:first-of-type),
1381    [id="1657176902481"] .block-not-first-margin {
1382      margin-left: 10px !important;
1383    }
1384  }
1385
1386  @media (max-width: 991px) {
1387    [id="1657176902481"] {
1388      margin: 0 0px 50px !important;
1389    }
1390    [id="1657176902481"] > .qk-display--flex.qk-flex--wrap {
1391      gap: 10px;
1392      justify-content: flex-start;
1393    }
1394    [id="1657176902481"] .block {
1395      flex: 0 0 calc((100% - (2 - 1) * 10px) / 2);
1396    }
1397  }
1398
1399  .video-block-loading {
1400    background-color: #eeee;
1401    position: absolute;
1402    top: 0;
1403    bottom: 0;
1404    left: 0;
1405    width: 100%;
1406    height: 100%;
1407  }
1408</style>
1409
1410<script>
1411
1412  $(document).ready(function() {
1413    let isDynamicLoading = false;
1414    if (isDynamicLoading) {
1415      window.DynamicLoading.setupComponent({
1416          sectionId:'1657176902481',
1417          componentType:'liquid',
1418        });
1419    }
1420    
1421      
1422    
1423      
1424    
1425  })
1426</script>
1426
1427
1428<script>
1429  function buildYoutubeEmbedUrl(url, options) {
1430    const YT_REGEX = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=|shorts\/)([^#&?]*).*/;
1431    const match = (url || '').match(YT_REGEX);
1432    const videoId = match && match[2].length === 11 ? match[2] : '';
1433
1434    if (!videoId) {
1435      return '';
1436    }
1437
1438    const autoPlay = options && options.autoPlay;
1439    const hideControls = options && options.hideControls;
1440    const loop = options && options.loop;
1441
1442    const searchParams = new URLSearchParams();
1443
1444    searchParams.set('autoplay', autoPlay ? '1' : '0');
1445    // 若自動播放,預設靜音以符合瀏覽器限制
1446    searchParams.set('mute', autoPlay ? '1' : '0');
1447    searchParams.set('playsinline', '1');
1448
1449    searchParams.set('controls', hideControls ? '0' : '1');
1450    searchParams.set('rel', '0');
1451
1452    if (loop) {
1453      searchParams.set('loop', '1');
1454      searchParams.set('playlist', videoId);
1455    }
1456
1457    return 'https://www.youtube.com/embed/' + videoId + '?' + searchParams.toString();
1458  }
1459
1460  function parseYtUrlOnLoad(target, url, autoPlay, hideControls, loop) {
1461    const finalUrl = buildYoutubeEmbedUrl(url, {
1462      autoPlay: autoPlay,
1463      hideControls: hideControls,
1464      loop: loop,
1465    });
1466
1467    if (!finalUrl || target.src === finalUrl) {
1468      return;
1469    }
1470
1471    const handleVideoLoad = function () {
1472      try {
1473        const wrapper = $(target).closest('.embed-responsive')[0];
1474        if (wrapper) {
1475          // 關閉 loading skeleton
1476          const loading = wrapper.querySelector('.video-block-loading');
1477          if (loading) {
1478            loading.style.display = 'none';
1479          }
1480        }
1481      } catch (e) {
1482        console.error('iframe onload 處理失敗', e);
1483      } finally {
1484        target.removeEventListener('load', handleVideoLoad);
1485      }
1486    };
1487
1488    target.addEventListener('load', handleVideoLoad);
1489
1490    target.src = finalUrl;
1491    if (hideControls && autoPlay) {
1492      target.style.pointerEvents = 'none';
1493    }
1494
1495    // 判斷是不是 YouTube shorts,決定要不要加上 .short-youtube class
1496    try {
1497      const isShort = (url || '').indexOf('/shorts/') !== -1;
1498      if (isShort) {
1499        const wrapper = $(target).closest('.embed-responsive')[0];
1500        if (wrapper) {
1501          wrapper.classList.add('short-youtube');
1502        }
1503      }
1504    } catch (e) {
1505      console.error('isShort 判斷失敗', e);
1506    }
1507  }
1508
1509
1510  window.addEventListener('load', function () {
1511    const sectionEl = document.getElementById('1657176902481');
1512    if (!sectionEl) return;
1513
1514    const options = {
1515      threshold: 0.25,
1516    };
1517
1518    
1519      
1520    
1521      
1522    
1523  });
1524</script>
1524
1525
1526<section id="1657176902481" class="index-4-blocks">
1527  <div class="qk-display--flex qk-flex--wrap">
1528    
1529    
1530      
1531      
1532      <div class="block image mobile-2-col block-default-width-margin last-row" style="width: calc(50.0% - 5.0px);">
1533        
1534            <div class="img-card" id="1657176902491">
1535              
1536              
1537                
1538                  <a href="https://www.instagram.com/p/CQ8ff8Mhxcs/?utm_source=ig_web_copy_link" class="banner qk-hidden--mobile" target="" rel="">
1539                    <img src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NDk0X1NfXzI3MDA5MDM4LmpwZy5qcGVnIl1d.jpeg?sha=9c70d7e611d3621a" class="qk-w--100" alt="">
1540                  </a>
1541                
1542              
1543              
1544                
1545                  <a
1546                    href="https://www.instagram.com/p/CQ8ff8Mhxcs/?utm_source=ig_web_copy_link"
1547                    class="banner qk-display--bk qk-hidden--phone qk-hidden--pc"
1548                    target=""
1549                    rel=""
1550                  >
1551                    <img
1552                      src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NDk0X1NfXzI3MDA5MDM4LmpwZy5qcGVnIl1d.jpeg?sha=9c70d7e611d3621a"
1553                      class="qk-w--100"
1554                      alt=""
1555                    >
1556                  </a>
1557                
1558              
1559              
1560                
1561                  <a
1562                    href="https://www.instagram.com/p/CQ8ff8Mhxcs/?utm_source=ig_web_copy_link"
1563                    class="banner qk-display--bk qk-hidden--pc qk-hidden--tablet"
1564                    target=""
1565                    rel=""
1566                  >
1567                    <img
1568                      src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NDk0X1NfXzI3MDA5MDM4LmpwZy5qcGVnIl1d.jpeg?sha=9c70d7e611d3621a"
1569                      class="qk-w--100"
1570                      alt=""
1571                    >
1572                  </a>
1573                
1574              
1575              
1576              <div class="advance-rich-text-content-container">
1577                
1578              </div>
1579            </div>
1580          
1581      </div>
1582    
1583      
1584      
1585      <div class="block image mobile-2-col block-default-width-margin last-row" style="width: calc(50.0% - 5.0px);">
1586        
1587            <div class="img-card" id="1657177520234">
1588              
1589              
1590                
1591                  <img
1592                    src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NTEzX1NfXzI3MDA5MDM2LmpwZy5qcGVnIl1d.jpeg?sha=cb19e34960275049"
1593                    class="qk-w--100 qk-hidden--mobile"
1594                    alt=""
1595                  >
1596                
1597              
1598              
1599                
1600                  <img
1601                    src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NTEzX1NfXzI3MDA5MDM2LmpwZy5qcGVnIl1d.jpeg?sha=cb19e34960275049"
1602                    class="qk-w--100 qk-display--bk qk-hidden--phone qk-hidden--pc"
1603                    alt=""
1604                  >
1605                
1606              
1607              
1608                
1609                  <img
1610                    src="//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2F0dGFjaGVkX3Bob3Rvcy8xNjU3MjU4NTEzX1NfXzI3MDA5MDM2LmpwZy5qcGVnIl1d.jpeg?sha=cb19e34960275049"
1611                    class="qk-w--100 qk-display--bk qk-hidden--pc qk-hidden--tablet"
1612                    alt=""
1613                  >
1614                
1615              
1616              
1617              <div class="advance-rich-text-content-container">
1618                
1619              </div>
1620            </div>
1621          
1622      </div>
1623    
1624  </div>
1625</section>
1626
1627
1628<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/_index_8_blocks-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1628<script src='//cdn-general.cybassets.com/frontend/shop/productCollection-3a2e378145f8a165.js' type='text/javascript'></script>
1628<!-- cyb_snippet _combo_product_related_items_modal start --><!-- cyb_snippet _combo_product_related_items_modal end -->
1629
1630
1631
1632<script>
1633  $(document).ready(function() {
1634    let isDynamicLoading = false;
1635
1636    function sendProductImpressions(products, collectionTitle) {
1637      if (products && products.length > 0) {
1638        var gtm_product = []
1639
1640        $.each(products, function(index, product) {
1641          productInfo = {
1642            'brand':    product.vendor,
1643            'category': product.product_type,
1644            'id':       product.id,
1645            'list':     'Index: ' + collectionTitle,
1646            'name':     product.title,
1647            'position': index + 1,
1648            'price':    product.price,
1649            'variant':  ''
1650          }
1651
1652          if (typeof google_tag_manager_id != 'undefined' || typeof cyb != 'undefined') {
1653            gtm_product.push(productInfo)
1654          }
1655        })
1656
1657        if (typeof google_tag_manager_id != 'undefined' && gtm_product.length > 0) {
1658          dataLayer.push({
1659            'event': 'productImpressions',
1660            'ecommerce': {
1661              'impressions': gtm_product
1662            }
1663          });
1664        }
1665
1666        if (typeof cyb != "undefined" && gtm_product.length > 0) {
1667          cyb.push({
1668            'event': 'productImpressions',
1669            'impressions': gtm_product
1670          });
1671        }
1672      }
1673    }
1674
1675    const props = {
1676      sectionId: "_index_8_blocks",
1677      collection: {
1678        id: 202293,
1679        title: "熱門產品",
1680      },
1681      allProductCount: 8,
1682      cartEnabled: true,
1683      discountPriceSloganUrl: "",
1684      showMultipleLabels: false,
1685      collectionHandleUrl: "/collections/熱門產品",
1686      blockProducts: 
1687{"products":[{"id":71976023,"title":"2026中秋禮盒","handle":"2026中秋禮盒-20260907101450","price":480.0,"vendor":null,"slogan":"","sell_from":null,"url":"/products/2026中秋禮盒-20260907101450","product_type":null,"total_sold":19,"sold_out":false,"price_range":{"min":{"id":88165183,"price":480.0,"compare_at_price":null},"max":{"id":88165188,"price":760.0,"compare_at_price":null}},"show_slogan":false,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjhfYzg5ODJlYjMxYjgyOTAzYjk2YzkucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=69803fc57fe54f89","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjhfYzg5ODJlYjMxYjgyOTAzYjk2YzkucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=69803fc57fe54f89","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjhfZWZiNTNkNDQyNDAxNDdkZDBlNWEucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=b20319a325a46045","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjlfOWUwY2Q1ZDhmOGUwMDNlMjM0YzIucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=6b3c8028e7bb7999","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjlfNWNiYjY1MWQyZjRjNzhiOWFkMWYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=f6db77da2cc828c9","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjlfZTc5MjkwZjU0MWJhNGIyMTg3Y2IucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=80b4135b07dac706","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMjlfZjUxZDk4NWVlNWQxYTBkOGY3YzAucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=eaf1549d90827dc5","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDczMzBfZTkzZGRjN2QwOGE0ZTk2MDlhMjcucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=bdef775ba6daed33","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDc4NzFfNzkxYmRlZWM2MGU0MDlkY2I2ZWEucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=f3c05250d5aa3fc1","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDc4NzJfN2Q2YTdjZmFkMDg2NWRiNjFkMDgucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=4eda6055a95ef314","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDc4NzJfNmZiZWFmM2UzMjZmMWEwOGZiMTIucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=62241427386205c9","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDc4NzJfZjc4ZDEwOTMwMTgzZGZiMzM0MGQucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=a7bad9a868f40a8e","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODg3NDc4NzJfMTg2MzM3ZThiNzU1Y2MxMWE5YTMucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=45c71107c9ea519b","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODk3MDQ3MDNfNjI0NDE2MjU1Y2FmMDllYjY2NzEucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=743c2707b9b5bed5","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzcxOTc2MDIzLzE3ODk3MDQ3NDJfOTQ4NjE1MzQ3YzgxOTMwMzQzZTAucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=e712592b90634aa8"]},{"id":37277359,"title":"傳統炸蝦餅(任選12包999元免運)","handle":"傳統炸蝦餅","price":120.0,"vendor":null,"slogan":"","sell_from":null,"url":"/products/傳統炸蝦餅","product_type":null,"total_sold":5877,"sold_out":false,"price_range":{"min":{"id":42686773,"price":120.0,"compare_at_price":null},"max":{"id":42686773,"price":120.0,"compare_at_price":null}},"show_slogan":false,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NTg0NzU3MzJfMTcyYTZlMTBkMzEzMzI5NThkNDYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=d2931640e9ab1b52","o
1687ptional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NTg0NzU3MzJfMTcyYTZlMTBkMzEzMzI5NThkNDYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=d2931640e9ab1b52","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NTY2NTMzNTVfMTQxMjU1NDMxMjA3NDg0MzMxNWQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=cd647d773ea17965","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NTY2NTMzNTVfOGQ3NDk3ZDI3OGViMWY2YTcyNDkuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=eedec3ff13443d32","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NjA0NDkxNzRfODYzZDJlNTcxYzA3NWJmMGVmMmYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=a37a8d74a94089c2","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NjA0NDkxNzRfN2Y4M2Q3MjI5MTI1ZDYxZWVlNzIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=de761e8d25496dd6","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzU5LzE2NjA0NDkxNzRfYTZmNGMzMTBiZTczMWIwODRlM2QuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=0d3e883fe069dc1d"]},{"id":37277340,"title":"非油炸蝦餅(任選12包999元免運)","handle":"非油炸蝦餅12包優惠999免運費","price":120.0,"vendor":null,"slogan":"嘴饞但想吃零食 吃出健康嗎? 那請參考我們《非油炸爆蝦餅》吧 採用高溫高壓的技術","sell_from":null,"url":"/products/非油炸蝦餅12包優惠999免運費","product_type":null,"total_sold":18443,"sold_out":false,"price_range":{"min":{"id":42483750,"price":120.0,"compare_at_price":null},"max":{"id":42483750,"price":120.0,"compare_at_price":null}},"show_slogan":false,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NTg0NzU3NzRfMzRhYmI0ZjJjNDQzNTgwYWNjYWQucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=d83115e3c755579e","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NTg0NzU3NzRfMzRhYmI0ZjJjNDQzNTgwYWNjYWQucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=d83115e3c755579e","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NTY2NTI2NTlfYjg1NTYxZWMwOGYxYjdlODIwNTQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=a861841cc82adb0f","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NTY2NTI2NTlfOGFmMDY1Yjc2MWQ4MWNkYjEyOTQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=691f38817ce07068","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NTY2NTI2NTlfOTI0YWRkMjBkNTRlOWYwNzBhNmQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=f0f49803cc8755f8","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NTY2NTI2NTlfOWEzZGY1NTJhM2I1ZDIzYWJmYjMuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=1e34446fef142d9d","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE2NjA0NDkwODVfZDRhOWU0MTAzNWZmMmQzYWRlMmUuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=dacd6c6a61e6351a","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3MzQwLzE3NjczMjQzMzNfMGEwYjRjZTVjZmRkOWM2OTMyMjguanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=fe1bf814bb142d2f"]},{"id":37616533,"title":"金牌獎軟餡牛舌餅(18包375元)","handle":"金牌獎軟餡牛舌餅-20220801150838","price":25.0,"vendor":null,"slogan":"這品嚐牛舌餅的精髓,體會老師傅們的用心,十種風味,任您挑選,絕對讓您滿意,出外伴手、饋贈親友不二上選,拜訪客戶、企業公關最佳選擇。只有這次機會讓您輕鬆擁有、快樂品嚐,不怕破壞行情努力推廣美食,期待您的參與喔!","sell_from":null,"url":"/products/金牌獎軟餡牛舌餅-20220801150838","product_type":null,"total_sold":5836,"sold_out":false,"price_range":{"min":{"id":42777493,"price":25.0,"compare_at_price":null},"max":{"id":42777493,"price":25.0,"compare_at_price":null}},"show_slogan":false,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3NDI3LzE2NTg0NzU1MzdfMTg1NDdlZjQ2Nzg5MzBjNTIzZDAucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=f1704cc6b6462bf5","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3NDI3LzE2NTg0NzU1MzdfMTg1NDdlZjQ2Nzg5MzBjNTIzZDAucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=f1704cc6b6462bf5","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3NDI3LzE2NTY2NTU1ODhfYmIyZTc4ZTAzOWQ1OWQxNjc5M2QuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=4d3e19a2a28f9513","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3NDI3LzE2NTY2NTU1ODhfMDJmY2JiYmRlYTBjMmEyNmJmMmYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=ab9363fcb73641da","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3NDI3LzE2NTY2NTU1ODhfMTk4OGUyYTZjNGE0OTExMDg4MzAuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=26fd97ca4851f8ed","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3NDI3LzE2NTY2NTU1ODhfY2VkM2JhM2UyZjdkNzg1YjQyNDQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=bd6122609d43a6ae"]},{"id":37278064,"title":"古早味大餅","handle":"古早味大餅","price":130.0,"vendor":null,"slogan":"一甲子的老
1687店 最拿手的古早味大餅 黃金比例熬煮的餅皮 香 濃 懷年小時候的味道  一定要來品嘗","sell_from":null,"url":"/products/古早味大餅","product_type":null,"total_sold":143,"sold_out":false,"price_range":{"min":{"id":42357511,"price":130.0,"compare_at_price":null},"max":{"id":42357512,"price":260.0,"compare_at_price":null}},"show_slogan":false,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NTg3MjkyMjBfNzM2ZDNmZGYzNGNkYTRlNzgxYmYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=984534a2bd098356","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NTg3MjkyMjBfNzM2ZDNmZGYzNGNkYTRlNzgxYmYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=984534a2bd098356","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NTY2NTc4MzRfNGVmZTNkZWE3NTRjZjU3OTRmMWQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=d9495b2cf4c3582a","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NTY2NTc4MzVfODJjZDcyNDI5ZjE1M2I5ZDY3YzAuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=783f5ac3205fb533","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NTY2NTc4MzVfNTNlNjc4ZTMyOGU1NTU3M2UxZDYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=c04c2c3e92235961","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NTY2NTc4MzVfZDdjOTcyYjhkNDQxMTJjZWIwYmIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=862e8fbf86456cd3","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDY0LzE2NjA1NzI4ODdfZGQ0MzY1NTg0NGE3MmI5YmIxZWUuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=d79c02a688eb1ffa"]},{"id":37278021,"title":"台南香餅椪餅(俗稱月子餅)","handle":"台南香餅椪餅俗稱月子餅","price":27.0,"vendor":null,"slogan":"平時當點心泡牛奶香氣十足 趕快帶一份回去給辛苦的媽媽、老婆、女朋友品嚐古早味","sell_from":null,"url":"/products/台南香餅椪餅俗稱月子餅","product_type":null,"total_sold":230,"sold_out":false,"price_range":{"min":{"id":48721458,"price":27.0,"compare_at_price":null},"max":{"id":42357348,"price":320.0,"compare_at_price":350.0}},"show_slogan":true,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDIxLzE2NTg0NzU0MDBfYjhlYTFiMjg0ZDk3YTk1YTc2OWQucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=4a62aac29e170b4a","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDIxLzE2NTg0NzU0MDBfYjhlYTFiMjg0ZDk3YTk1YTc2OWQucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=4a62aac29e170b4a","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDIxLzE2NTY2NTY3NjVfMTYwYWFkODliMzhlZGRmYzJiMzIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=a2987e0f29d76ff4","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc4MDIxLzE2NTY2NTY3NjVfYTVhMTZlNzc0ZGI1NWViZTM3NzIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=ecfb6c3b31967800"]},{"id":37277376,"title":"夏威夷火山豆塔","handle":"夏威夷果塔","price":50.0,"vendor":null,"slogan":"香甜酥脆口感多層次的夏威夷豆塔,是近幾年來網路超夯的一款團購美食,也是超熱門的伴手禮。咬一口讓你驚聲尖叫 ,用夏威夷豆塔征服你的味蕾。","sell_from":null,"url":"/products/夏威夷果塔","product_type":null,"total_sold":35,"sold_out":false,"price_range":{"min":{"id":42356531,"price":50.0,"compare_at_price":null},"max":{"id":48721554,"price":480.0,"compare_at_price":null}},"show_slogan":false,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3Mzc2LzE2NTg3Mjk2OTdfZDdkMGQ5NTVjY2E4YzYwNzc1YzYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=ff10b0a363efe081","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3Mzc2LzE2NTg3Mjk2OTdfZDdkMGQ5NTVjY2E4YzYwNzc1YzYucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=ff10b0a363efe081","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3Mzc2LzE2NTY2NTQyMjhfYjE2ZWRhYjNmZTRhMzg3MzlkN2YuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=daf4e3cf909fa7f4","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3Mzc2LzE2NTY2NTQyMjhfZGVhNTVhNjU3NWY4YzgyYTc4ZDAuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=8da456b05d516ad5","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3Mjc3Mzc2LzE2NTY2NTQyMjhfMjI4MjM5NWRkMWVmMzc5ZTk3YTQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=56cdcc52cd4a9824"]},{"id":37330815,"title":"五穀米香丸","handle":"五穀米香丸6入","price":70.0,"vendor":null,"slogan":"","sell_from":null,"url":"/products/五穀米香丸6入","product_type":null,"total_sold":14,"sold_out":false,"price_range":{"min":{"id":42423573,"price":70.0,"compare_at_price":null},"max":{"id":48721453,"price":400.0,"compare_at_price":420.0}},"show_slogan":true,"related_to_sales_page":false,"hide_price?":false,"sales_mode_purchasable?":true,"featured_image":"//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3MzMwODE1LzE2NTg5OTUzMzhfY2ZjNTFhYmRmOWMwZGUyNjdiZmEucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=425e72afba6127ae","optional_combo_product?":false,"combo_product_info":null,"purchase_eligibility":{"required":false,"eligible":true,"status":"eligible"},"product_labels":[],"images":["//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3MzMwODE1LzE2NTg5OTUzMzhfY2ZjNTFhYmRmOWMwZGUyNjdiZmEucG5nIl0sWyJwIiwidGh1bWIiLCI2MDB4NjAwIl1d.png?sha=425e72afba6127ae","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3MzMwODE1LzE2NTcxNzE2OTlfZjdmZjIyYjIwM2YwMGMxOTUyYjUuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=7d97df35b6c951c0","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3MzMwODE1LzE2NjcxOTYyMjhfMWY2MzM2ZmM4ZTMxODBmZjJkOTUuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=17065b19b9e04a7d","//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L3Byb2R1Y3RzLzM3MzMwODE1LzE2NjcxOTYyMjhfNjQxOWNjY2ZlOWYxNWJjYjc4NDMuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=053d305ddef5b467"]}]}
1688,
1689      sessionTitle: null,
1690      section: {"type":"_index_8_blocks","visible":true,"settings":{"dict_title":"熱門產品","collection_handle":"熱門產品","limit":"8","margin_x":"0","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"24","product_display":"displayDefault","old_container_setting":true},"custom_name":"商品分類"},
1691      productURLSearch: "",
1692      hasIntegratedProductLabelsPlugin: true,
1693      isDisplayPriceRange: null || false,
1694      pageType: "index",
1695    }
1696    if (isDynamicLoading) {
1697      window.DynamicLoading.setupComponent({
1698        sectionId: '#index_8_blocks-_index_8_blocks',
1699        callbackData: props,
1700        entryName: 'renderProductCollection',
1701        source: '//cdn-general.cybassets.com/frontend/shop/productCollection-3a2e378145f8a165.js',
1702      });
1703    } else {
1704      renderProductCollection('#index_8_blocks-_index_8_blocks', props);
1705    }
1706    var products = props.blockProducts && props.blockProducts.products;
1707    if (products) {
1708      sendProductImpressions(products, props.collection.title);
1709    }
1710  });
1711</script>
1711
1712
1713<style>
1714  [id="_index_8_blocks"] {
1715    margin: 0 0px 50px !important;
1716  }
1717  @media (max-width: 991px) {
1718    [id="_index_8_blocks"] {
1719      margin: 0 0px 24px !important;
1720    }
1721  }
1722</style>
1723
1724<section id="_index_8_blocks" class="index_8_blocks qk-text--center">
1725  <div id="index_8_blocks-_index_8_blocks"></div>
1726</section>
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/_index_4_blocks-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1742<script src='//cdn-general.cybassets.com/frontend/shop/productDisplay-3a2e378145f8a165.js' type='text/javascript'></script>
1742
1743
1744<style>
1745  [id="1657257065023"] {
1746    margin: 0 350px 50px !important;
1747  }
1748
1749  @media (min-width: 992px) {
1750    [id="1657257065023"] .block:not(.last-row) {
1751      margin-bottom: 10px !important;
1752    }
1753    [id="1657257065023"] .block-default-width-margin:not(:first-of-type),
1754    [id="1657257065023"] .block-not-first-margin {
1755      margin-left: 10px !important;
1756    }
1757  }
1758
1759  @media (max-width: 991px) {
1760    [id="1657257065023"] {
1761      margin: 0 0px 50px !important;
1762    }
1763    [id="1657257065023"] > .qk-display--flex.qk-flex--wrap {
1764      gap: 10px;
1765      justify-content: flex-start;
1766    }
1767    [id="1657257065023"] .block {
1768      flex: 0 0 calc((100% - (1 - 1) * 10px) / 1);
1769    }
1770  }
1771
1772  .video-block-loading {
1773    background-color: #eeee;
1774    position: absolute;
1775    top: 0;
1776    bottom: 0;
1777    left: 0;
1778    width: 100%;
1779    height: 100%;
1780  }
1781</style>
1782
1783<script>
1784
1785  $(document).ready(function() {
1786    let isDynamicLoading = false;
1787    if (isDynamicLoading) {
1788      window.DynamicLoading.setupComponent({
1789          sectionId:'1657257065023',
1790          componentType:'liquid',
1791        });
1792    }
1793    
1794      
1795    
1796  })
1797</script>
1797
1798
1799<script>
1800  function buildYoutubeEmbedUrl(url, options) {
1801    const YT_REGEX = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=|shorts\/)([^#&?]*).*/;
1802    const match = (url || '').match(YT_REGEX);
1803    const videoId = match && match[2].length === 11 ? match[2] : '';
1804
1805    if (!videoId) {
1806      return '';
1807    }
1808
1809    const autoPlay = options && options.autoPlay;
1810    const hideControls = options && options.hideControls;
1811    const loop = options && options.loop;
1812
1813    const searchParams = new URLSearchParams();
1814
1815    searchParams.set('autoplay', autoPlay ? '1' : '0');
1816    // 若自動播放,預設靜音以符合瀏覽器限制
1817    searchParams.set('mute', autoPlay ? '1' : '0');
1818    searchParams.set('playsinline', '1');
1819
1820    searchParams.set('controls', hideControls ? '0' : '1');
1821    searchParams.set('rel', '0');
1822
1823    if (loop) {
1824      searchParams.set('loop', '1');
1825      searchParams.set('playlist', videoId);
1826    }
1827
1828    return 'https://www.youtube.com/embed/' + videoId + '?' + searchParams.toString();
1829  }
1830
1831  function parseYtUrlOnLoad(target, url, autoPlay, hideControls, loop) {
1832    const finalUrl = buildYoutubeEmbedUrl(url, {
1833      autoPlay: autoPlay,
1834      hideControls: hideControls,
1835      loop: loop,
1836    });
1837
1838    if (!finalUrl || target.src === finalUrl) {
1839      return;
1840    }
1841
1842    const handleVideoLoad = function () {
1843      try {
1844        const wrapper = $(target).closest('.embed-responsive')[0];
1845        if (wrapper) {
1846          // 關閉 loading skeleton
1847          const loading = wrapper.querySelector('.video-block-loading');
1848          if (loading) {
1849            loading.style.display = 'none';
1850          }
1851        }
1852      } catch (e) {
1853        console.error('iframe onload 處理失敗', e);
1854      } finally {
1855        target.removeEventListener('load', handleVideoLoad);
1856      }
1857    };
1858
1859    target.addEventListener('load', handleVideoLoad);
1860
1861    target.src = finalUrl;
1862    if (hideControls && autoPlay) {
1863      target.style.pointerEvents = 'none';
1864    }
1865
1866    // 判斷是不是 YouTube shorts,決定要不要加上 .short-youtube class
1867    try {
1868      const isShort = (url || '').indexOf('/shorts/') !== -1;
1869      if (isShort) {
1870        const wrapper = $(target).closest('.embed-responsive')[0];
1871        if (wrapper) {
1872          wrapper.classList.add('short-youtube');
1873        }
1874      }
1875    } catch (e) {
1876      console.error('isShort 判斷失敗', e);
1877    }
1878  }
1879
1880
1881  window.addEventListener('load', function () {
1882    const sectionEl = document.getElementById('1657257065023');
1883    if (!sectionEl) return;
1884
1885    const options = {
1886      threshold: 0.25,
1887    };
1888
1889    
1890      
1891      {
1892        const target = sectionEl.querySelector('#video-block-1657257110077');
1893
1894        if (!target) {
1895          return;
1896        }
1897
1898        const callback = (entries, observer) => {
1899          entries.forEach(entry => {
1900            if (entry.isIntersecting) {
1901              const iframe = target.querySelector('iframe');
1902              parseYtUrlOnLoad(
1903                iframe,
1904                'https://www.youtube.com/watch?v=StUAhG2unmA&t=145s',
1905                false,
1906                false,
1907                true
1908              );
1909
1910              observer.unobserve(entry.target);
1911            }
1912          });
1913        };
1914
1915        const observer = new IntersectionObserver(callback, options);
1916        observer.observe(target);
1917      }
1918      
1919    
1920  });
1921</script>
1921
1922
1923<section id="1657257065023" class="index-4-blocks">
1924  <div class="qk-display--flex qk-flex--wrap">
1925    
1926    
1927      
1928      
1929      <div class="block video mobile-1-col last-row" style="width: calc(100% - 0.0px);">
1930        
1931            
1932            <div class="embed-responsive only-video" id="video-block-1657257110077">
1933              <iframe
1934                frameborder="0"
1935                allowfullscreen
1936                allow="autoplay; encrypted-media"
1937              ></iframe>
1938              
1939                <div class="video-block-loading" >
1940                </div>
1941              
1942            </div>
1943          
1944      </div>
1945    
1946  </div>
1947</section>
1948
1949
1950
1951
1952
1953
1954<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/_index_4_blogs-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1955
1956
1957<style>
1958  [id="1657262410712"] {
1959    margin: 0 0px 50px !important;
1960    --article-columns: 4;
1961  }
1962  [id="1657262410712"] .tab-pane.active .article:nth-child(n+5) {
1963    display: none;
1964  }
1965  @media (max-width: 991px) {
1966    [id="1657262410712"] {
1967      margin: 0 0px 50px !important;
1968    }
1969  }
1970</style>
1971
1972<section id="1657262410712" class="index_4_blogs">
1973  <div class="container qk-container">
1974    
1975    <div class="section-heading qk-pos--rel qk-text--center qk-bd--none qk-pd--0 ">
1976      <h2 class="qk-h2 qk-text--heading qk-display--il_bk qk-fs--hd1 qk-pos--rel qk-mg_b--0">網路推薦</h2>
1977    </div>
1978    <div class="form-group">
1979      <form>
1980        <select id="form-blogs-1657262410712" class="form-blogs form-control qk-display--none qk-bd--border">
1981          
1982            
1983            
1984              <option value="#block_1657262410714">IG網紅推薦</option>
1985            
1986          
1987            
1988            
1989              <option value="#block_1657262462931">新聞報導</option>
1990            
1991          
1992        </select>
1993      </form>
1994      <ul
1995        id="tab-blogs"
1996        class="nav nav-pills mb-3 tab-blogs qk-display--flex qk-justify--around qk-w--50"
1997        role="tablist"
1998      >
1999        
2000          
2001          
2002          
2003            <li class="nav-item">
2004              <a
2005                id="block_1657262410714_tab"
2006                class="blog-nav-link qk-text--heading qk-text--accent_hover qk-fs--body qk-cursor--pointer qk-pos--rel"
2007                data-toggle="pill"
2008                href="#block_1657262410714"
2009                role="tab"
2010                aria-controls="1657262410714"
2011                aria-selected="true"
2012              >
2013                IG網紅推薦
2014              </a>
2015            </li>
2016          
2017        
2018          
2019          
2020          
2021            <li class="nav-item">
2022              <a
2023                id="block_1657262462931_tab"
2024                class="blog-nav-link qk-text--heading qk-text--accent_hover qk-fs--body qk-cursor--pointer qk-pos--rel"
2025                data-toggle="pill"
2026                href="#block_1657262462931"
2027                role="tab"
2028                aria-controls="1657262462931"
2029                aria-selected=""
2030              >
2031                新聞報導
2032              </a>
2033            </li>
2034          
2035        
2036      </ul>
2037      <div class="tab-content">
2038        
2039          
2040          
2041          
2042            <div
2043              id="block_1657262410714"
2044              class="tab-pane fade qk-bd--default qk-bd--product_border"
2045              role="tabpanel"
2046              aria-labelledby="pills-ig推薦-tab"
2047              data-blog-url="/blogs/ig推薦"
2048            >
2049              
2050              
2051                <div class="article">
2052                  <div class="article-image qk-w--100">
2053                    <a
2054                      class="qk-display--il_bk qk-w--100 qk-pd_t--75"
2055                      href="/blogs/ig推薦/103968"
2056                      title="✨甯常的微小資食記✨IG推薦🥰😋"
2057                      style="background-image: url('//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2Jsb2dzLzM1NzUyL-ieouW5leaTt-WPlueVq-mdoiAyMDIyLTA3LTA4IDE0MzU1NF9hZWI3YzZmYjVlYjY1NDRlOGE0Zi5wbmciXSxbInAiLCJ0aHVtYiIsIjUwMHg1MDAiXV0.png?sha=fbbc41a1b5d193f7')"
2058                    ></a>
2059                  </div>
2060                  <div class="caption qk-flex--1">
2061                    <div class="article-title">
2062                      <a
2063                        href="/blogs/ig推薦/103968"
2064                        title="✨甯常的微小資食記✨IG推薦🥰😋"
2065                        class="qk-text--heading qk-fs--body qk-text--heading_hover"
2066                      >
2067                        ✨甯常的微小資食記✨IG推薦🥰😋
2068                      </a>
2069                    </div>
2070                    <div class="article_readmore qk-w--100">
2071                      <a href="/blogs/ig推薦/103968" class="qk-text--text qk-fs--body">
2072                        繼續閱讀
2073                      </a>
2074                    </div>
2075                  </div>
2076                </div>
2077              
2078                <div class="article">
2079                  <div class="article-image qk-w--100">
2080                    <a
2081                      class="qk-display--il_bk qk-w--100 qk-pd_t--75"
2082                      href="/blogs/ig推薦/103957"
2083                      title="✨蕾食記🍴台中台南✨IG推薦🥰😋"
2084                      style="background-image: url('//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2Jsb2dzLzM1NzUyL-ieouW5leaTt-WPlueVq-mdoiAyMDIyLTA3LTA4IDE0MjE1OF80ZmNhZWFiMjQ5MDEzZWRiYjYzMy5wbmciXSxbInAiLCJ0aHVtYiIsIjUwMHg1MDAiXV0.png?sha=30f2728bdb07ccfc')"
2085                    ></a>
2086                  </div>
2087                  <div class="caption qk-flex--1">
2088                    <div class="article-title">
2089                      <a
2090                        href="/blogs/ig推薦/103957"
2091                        title="✨蕾食記🍴台中台南✨IG推薦🥰😋"
2092                        class="qk-text--heading qk-fs--body qk-text--heading_hover"
2093                      >
2094                        ✨蕾食記🍴台中台南✨IG推薦🥰😋
2095                      </a>
2096                    </div>
2097                    <div class="article_readmore qk-w--100">
2098                      <a href="/blogs/ig推薦/103957" class="qk-text--text qk-fs--body">
2099                        繼續閱讀
2100                      </a>
2101                    </div>
2102                  </div>
2103                </div>
2104              
2105                <div class="article">
2106                  <div class="article-image qk-w--100">
2107                    <a
2108                      class="qk-display--il_bk qk-w--100 qk-pd_t--75"
2109                      href="/blogs/ig推薦/103952"
2110                      title="✨S怎麼那麼愛吃|高雄•台南•台中•台北•屏東美食✨IG推薦🥰😋"
2111                      style="background-image: url('//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2Jsb2dzLzM1NzUyL-ieouW5leaTt-WPlueVq-mdoiAyMDIyLTA3LTA4IDE0MTU1NF9hN2ZiNzEzZGQ3MTAxMmZiNmU5Zi5wbmciXSxbInAiLCJ0aHVtYiIsIjUwMHg1MDAiXV0.png?sha=81e88f26321ee404')"
2112                    ></a>
2113                  </div>
2114                  <div class="caption qk-flex--1">
2115                    <div class="article-title">
2116                      <a
2117                        href="/blogs/ig推薦/103952"
2118                        title="✨S怎麼那麼愛吃|高雄•台南•台中•台北•屏東美食✨IG推薦🥰😋"
2119                        class="qk-text--heading qk-fs--body qk-text--heading_hover"
2120                      >
2121                        ✨S怎麼那麼愛吃|高雄•台南•台中•台北•屏東美食✨IG推薦🥰😋
2122                      </a>
2123                    </div>
2124                    <div class="article_readmore qk-w--100">
2125                      <a href="/blogs/ig推薦/103952" class="qk-text--text qk-fs--body">
2126                        繼續閱讀
2127                      </a>
2128                    </div>
2129                  </div>
2130                </div>
2131              
2132                <div class="article">
2133                  <div class="article-image qk-w--100">
2134                    <a
2135                      class="qk-display--il_bk qk-w--100 qk-pd_t--75"
2136                      href="/blogs/ig推薦/103946"
2137                      title="✨美食界小仙女-草莓/台中美食 景點 食記 日常✨IG推薦🥰😋"
2138                      style="background-image: url('//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2Jsb2dzLzM1NzUyL-ieouW5leaTt-WPlueVq-mdoiAyMDIyLTA3LTA4IDE0MDQxM19jMTRkOWYwY2U4Y2YyMzgxOGQ2OS5wbmciXSxbInAiLCJ0aHVtYiIsIjUwMHg1MDAiXV0.png?sha=3e04ef7b8418a053')"
2139                    ></a>
2140                  </div>
2141                  <div class="caption qk-flex--1">
2142                    <div class="article-title">
2143                      <a
2144                        href="/blogs/ig推薦/103946"
2145                        title="✨美食界小仙女-草莓/台中美食 景點 食記 日常✨IG推薦🥰😋"
2146                        class="qk-text--heading qk-fs--body qk-text--heading_hover"
2147                      >
2148                        ✨美食界小仙女-草莓/台中美食 景點 食記 日常✨IG推薦🥰😋
2149                      </a>
2150                    </div>
2151                    <div class="article_readmore qk-w--100">
2152                      <a href="/blogs/ig推薦/103946" class="qk-text--text qk-fs--body">
2153                        繼續閱讀
2154                      </a>
2155                    </div>
2156                  </div>
2157                </div>
2158              
2159            </div>
2160          
2161        
2162          
2163          
2164          
2165            <div
2166              id="block_1657262462931"
2167              class="tab-pane fade qk-bd--default qk-bd--product_border"
2168              role="tabpanel"
2169              aria-labelledby="pills-新聞報導-tab"
2170              data-blog-url="/blogs/新聞報導"
2171            >
2172              
2173              
2174                <div class="article">
2175                  <div class="article-image qk-w--100">
2176                    <a
2177                      class="qk-display--il_bk qk-w--100 qk-pd_t--75"
2178                      href="/blogs/新聞報導/103970"
2179                      title="保「鮮」零嘴費時費工!TVBS新聞網報導 傳統蝦餅製作揭祕"
2180                      style="background-image: url('//cdn-general.cybassets.com/media/W1siZiIsIjIyMzQ1L2Jsb2dzLzM1NzU3LzIwMjIwMjAyMTUzMjUwLTRjMmFjYjI0X2YyMDMxM2YyZGNkOGVmYzRlZjhlLmpwZWciXSxbInAiLCJ0aHVtYiIsIjUwMHg1MDAiXV0.jpeg?sha=508f8232fc6caa4b')"
2181                    ></a>
2182                  </div>
2183                  <div class="caption qk-flex--1">
2184                    <div class="article-title">
2185                      <a
2186                        href="/blogs/新聞報導/103970"
2187                        title="保「鮮」零嘴費時費工!TVBS新聞網報導 傳統蝦餅製作揭祕"
2188                        class="qk-text--heading qk-fs--body qk-text--heading_hover"
2189                      >
2190                        保「鮮」零嘴費時費工!TVBS新聞網報導 傳統蝦餅製作揭祕
2191                      </a>
2192                    </div>
2193                    <div class="article_readmore qk-w--100">
2194                      <a href="/blogs/新聞報導/103970" class="qk-text--text qk-fs--body">
2195                        繼續閱讀
2196                      </a>
2197                    </div>
2198                  </div>
2199                </div>
2200              
2201            </div>
2202          
2203        
2204      </div>
2205      <div id="view-more-1657262410712">
2206        <a
2207          href="#"
2208          class="btn-seemore qk-text--center qk-text--heading qk-text--accent_hover qk-fw--500 qk-display--bk"
2209        >
2210          查看更多
2211        </a>
2212      </div>
2213    </div>
2214  </div>
2215</section>
2216<script>
2217  $(document).ready(function () {
2218    const sectionId = '1657262410712';
2219
2220    function updateViewMoreLink() {
2221      const blogUrl = $('#' + sectionId + ' .tab-pane.active').data('blog-url');
2222      $('#view-more-' + sectionId + ' a').attr('href', blogUrl || '#');
2223    }
2224
2225    $('#' + sectionId + ' a[data-toggle="pill"]').on('shown.bs.tab', updateViewMoreLink);
2226
2227    $('#form-blogs-' + sectionId).on('change', function (e) {
2228      $('#' + sectionId + ' a[href="' + $(this).val() + '"]').tab('show');
2229    });
2230
2231    var firstOption = $('#' + sectionId + ' .form-blogs').find('option')[0];
2232    if (!firstOption) {
2233      return;
2234    }
2235    $('#' + sectionId + ' ' + firstOption.value + '_tab').addClass('show active');
2236    $('#' + sectionId + ' ' + firstOption.value).addClass('show active');
2237
2238    updateViewMoreLink();
2239  });
2240</script>
2240
2241
2242
2243
2244  <!-- 加入購物車 -->
2245  
2246    <!-- cyb_snippet new_addcart_modal start -->
2247<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/vue_product_modal-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
2248
2249<div id="new-addcart-modal" class="container">
2250  <transition name="modal">
2251    <product-modal
2252      v-if="showProductModal"
2253      :only-description="onlyDescription"
2254      :product-url="popProductUrl"
2255      :color="color"
2256      :is-collection="isCollection"
2257      :is-show-description="isShowDescription"
2258      :is-quick-buy="isQuickBuy"
2259      :selected-variant-id="selectedVariantId"
2260      :categories="categories"
2261      :call-back="checkoutAddToCartCallback"
2262      ref="productModal"
2263    >
2264    </product-modal>
2265  </transition>
2266</div>
2267
2268<!-- cyb_snippet components/product_modal/product_modal start -->
2269<script type="text/x-template" id="product-modal">
2270  <div class="modal-mask qk-h--100 qk-w--100 qk-l--0 qk-t--0 qk-pos--fixed" @click="closeModal">
2271    <div class="modal-content qk-bd--none qk-center qk-bg--theme_bg" :class="{'only-description': onlyDescription}" @click.stop>
2272      <button class="btn-close qk-circle qk-circle--md qk-pos--abs qk-op--100 qk-bg--theme_bg qk-text--heading qk-bd--product_border qk-bd--default" @click="closeModal"></button>
2273      <div class="modal-body custom-scrollbar qk-w--100">
2274        <div v-if="!isLoading">
2275          <div id="checkout-product" class="row">
2276            <div class="col-sm-6 col-xs-4">
2277              <photo-swiper
2278                :mediaItems="swiperItems"
2279                :current-image-index="currentImageIndex"
2280                :current-variant="currentVariant"
2281                :video-after-image="videoAfterImage"
2282              ></photo-swiper>
2283            </div>
2284            <div class="col-sm-6 col-xs-8">
2285              <h4 class="qk-fs--hd2 qk-fw--bold qk-text--heading qk-mg--0" v-html="product.title"></h4>
2286              <p class="product_brief qk-text--text qk-fs--body" v-html="product.brief"></p>
2287              <p class="product_slogan qk-text--heading qk-fs--body" v-html="product.slogan"></p>
2288              <div class="swiper_thumbnails" style="margin-bottom: 10px;">
2289                <swiper-thumbnails
2290                  :mediaItems="swiperItems"
2291                  :current-image-index="currentImageIndex"
2292                  :title="product.title"
2293                  @update-current-image-index="(thumbnailIndex) => { currentImageIndex = thumbnailIndex }"
2294                ></swiper-thumbnails>
2295              </div>
2296              
2297              <div v-if="!hidePrice" style="margin-bottom: 10px;">
2298                
2299                <span class="price-title qk-fs--body qk-fw--500 qk-text--heading">${ priceTitleTag }</span>
2300                
2301                <div>
2302                  <span v-html="variantPrice" class="variant-price qk-fs--hd1 qk-fw--bold" :class="[isDiscountPrice ? 'qk-text--discount_price' : 'qk-text--price']"></span>
2303                  <del v-html="marketPrice" class="variant-del-price qk-fs--body qk-fw--500 qk-text--text"></del>
2304                </div>
2305              </div>
2306              <div v-if="!onlyDescription" class="controls">
2307                <div class="variant-quantity qk-display--flex qk-flex--column">
2308                  <div v-if="hasVariant" class="product-variant-options">
2309                    <div v-for="(option, index) in optionInfo" class="product-variant-option" :class="{'product-variant-option--hidden': shouldHideSingleVariantOptions}">
2310                      <div class="advance variant-select-option" v-if="styledShopMenu==='dropDownType'">
2311                      
2312                        <label>${option.name}</label>
2313                        <svg height="20" width="20" viewBox="0 0 20 20" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><path d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"> </path></svg>
2314                        <select class="qk-bg--theme_bg" :class="{'select_placeholder-color': currentOption[`option${index + 1}`] === null}" v-show="!isMobileSize" :value="String(currentOption[`option${index + 1}`])" @change="setOption(`option${index + 1}`, $event.target.value, option.types )" @click="onClickSelectModal(option,`option${index + 1}`)">
2315                          <option value="null" class="select_option-hidden">請選擇${option.name}</option>
2316                          <option :style="{ visibility : isMobileSize ? 'hidden' : 'visible' }" v-for="(types) in option.types" :disabled="!types.isValid" :value="types.name">${types.name}</option>
2317                        </select>
2318                        <span class="select_placeholder-color" v-if="currentOption[`option${index + 1}`] === null" v-show="isMobileSize" @click="onClickSelectModal(option,`option${index + 1}`)">請選擇${option.name}</span>
2319                        <span v-else :value="currentOption[`option${index + 1}`]" v-show="isMobileSize" @click="onClickSelectModal(option,`option${index + 1}`)" v-html="currentOption[`option${index + 1}`]"></span>
2320                      </div>
2321                      <advance-option v-else :option-key="'option' + (index + 1)" :option="option" :current-option="currentOption" :toggle-current-option="toggleCurrentOption"/>
2322                    </div>
2323                  </div>
2324                  <div class="product_discounts_list qk-bg--theme_bg qk-bd--default qk-bd--product_border qk-pd--1 qk-mg_b--1" v-show="displayProductDiscountsList && ((displayPeriodicSalesPages && product.showableSalesPages.length > 0) || !!discountsList)">
2325                    <div class="list_block custom-scrollbar qk-of_x--hidden">
2326                      <h4 class="qk-text--heading qk-fs--body">此商品參與的優惠活動
2327                      </h4>
2328                      <template v-if="displayPeriodicSalesPages">
2329                        <div v-for="salesPage in product.showableSalesPages" class="discount-list">
2330                          <span class="discount-label qk-fs--breadcrumb qk-bd--default qk-bd--accent qk-bg--white qk-display--il_bk qk-text--accent">定期定額
2331                          </span>
2332                          <a class="discount-title qk-text--accent qk-fs--body" :href="salesPage.path">${ salesPage.title }</a>
2333                        </div>
2334                      </template>
2335                      <template v-for="discounts in discountsList">
2336                        <div v-for="discount in discounts" class="discount-list">
2337                          <a v-if="discount.url" :href="discount.url" class="discount-title qk-text--accent qk-fs--body">
2338                            ${ discount.title }
2339                          </a>
2340                          <span v-else class="discount-title qk-text--accent qk-fs--body">${ discount.title }</span>
2341                        </div>
2342                      </template>
2343                    </div>
2344                  </div>
2345                  <div v-if="showPurchaseControls" class="product-quantity qk-bd--product_border" v-show="!isMobileSize">
2346                    <div class="btn-group qk-w--100" role="group" aria-label="First group">
2347                      <button class="btn add-down qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityDecrease">-</button>
2348                      <input class="btn item-quantity qk-bd--default qk-bd--border qk-w--100 qk-text--heading" type="text" name="quantity" :value="quantity" @change="quantityChange">
2349                      <button class="btn add-up qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityIncrease">+</button>
2350                    </div>
2351                  </div>
2352                </div>
2353                <div v-if="showPurchaseControls" class="add-button-wrapper">
2354                  <!-- cyb_snippet _product_modal_button start -->
2355<button
2356  class="btn btn-default add-button qk-cursor--pointer qk-w--100 qk-btn--primary"
2357  :class="{selected: isChoose, adding: adding || isHideAddCartBtn, secondary: isSecondaryBtn, 'qk-btn--disabled': isHideAddCartBtn && isNewNnCollection, 'qk-bd--none': isHideAddCartBtn && isNewNnCollection}"
2358  type="button"
2359  :disabled="isHideAddCartBtn"
2360  @click="addProduct"
2361>
2362  ${ addCartText }
2363</button>
2364
2365<!-- cyb_snippet _product_modal_button end -->
2366                </div>
2367                <div class="product-others qk-fs--body">
2368                  <span class="product-love">
2369                    <a class="btn-love qk-text--text qk-bg--theme_bg qk-bd--default qk-bd--product_border qk-display--il_bk qk-text--center qk-cursor--pointer qk-tst qk-tst_timing--ease_io qk-tst_dur--15" @click="addWishList">
2370                      <svg
2371                        width="15"
2372                        height="15"
2373                        viewBox="0 0 24 24"
2374                        fill="none"
2375                        xmlns="http://www.w3.org/2000/svg">
2376                        <path
2377                          d="M21.3899 4.54287C20.8146 4.01265 20.1366 3.60344 19.3969 3.34002C18.6572 3.0766 17.8711 2.96444 17.0863 3.01034C16.5593 3.01219 16.0362 3.09923 15.5375 3.26802C15.0194 3.44412 14.5265 3.68572 14.071 3.98682C13.6676 4.25092 13.2787 4.53613 12.906 4.84124C12.5762 5.09996 12.2648 5.38092 11.974 5.6821C11.6833 5.38092 11.3719 5.09996 11.042 4.84124C10.6516 4.53452 10.2443 4.24928 9.82221 3.98682C9.3967 3.69278 8.93642 3.45138 8.45163 3.26802C7.93995 3.0948 7.40254 3.0077 6.86175 3.01034C6.07688 2.96365 5.2906 3.07544 4.55076 3.3389C3.81091 3.60236 3.13296 4.01199 2.55813 4.54287C2.02401 5.11052 1.61146 5.77922 1.3453 6.50873C1.07914 7.23825 0.964875 8.01351 1.00937 8.78786C1.01359 9.36893 1.11073 9.94569 1.29719 10.4967C1.45989 11.0166 1.68054 11.517 1.95507 11.9886C2.20373 12.4073 2.47838 12.8104 2.77742 13.1956C3.09266 13.5889 3.32566 13.8601 3.46271 14.0093C3.56921 14.1255 3.6837 14.2343 3.80536 14.3348L11.4395 21.7669C11.5066 21.8412 11.5891 21.9002 11.6813 21.94C11.7736 21.9798 11.8734 21.9994 11.974 21.9975C12.0836 22.0067 12.1938 21.9906 12.296 21.9506C12.3983 21.9106 12.4898 21.8477 12.5634 21.7669L20.1838 14.3484C21.8272 12.9359 22.8376 10.9363 22.9935 8.78786C23.0307 8.0097 22.9078 7.23217 22.6321 6.50246C22.3565 5.77274 21.9339 5.10606 21.3899 4.54287V4.54287Z"
2378                          stroke="currentColor"
2379                          stroke-width="2"
2380                          stroke-linecap="round"
2381                          stroke-linejoin="round" />
2382                      </svg>
2383                      加入最愛
2384                    </a>
2385                  </span>
2386                  <span class="product_sold qk-text--text" v-if="false">
2387                    <span>已銷售:
2388                      ${ product.totalSold }
2389                      ä»¶
2390                    </span>
2391                  </span>
2392                  <span class="product_bonus qk-text--text" v-if="false">
2393                    此商品 「 最高 」可以折抵紅利
2394                    <span class="val qk-fw--600 qk-fs--hd2" v-if="currentVariant">${currentVariant.maxUsableBonus}</span>
2395                    <span class="val qk-fw--600 qk-fs--hd2" v-else>${maxUsableBonus}</span>
2396                    點
2397                    <span v-html="bonusToPrice"/>
2398                  </span>
2399                </div>
2400                <div class='product_limit_buy qk-fs--body' v-show="product.minBuy > 0 || product.limitBuy > 0">
2401                  ${limitBuyText}
2402                </div>
2403              </div>
2404            </div>
2405          </div>
2406          <div v-if="isShowDescription" class="row">
2407            <div class="col-sm-12">
2408              
2409                <div v-if="product.bodyHtml">
2410                  <h5 class="section-heading qk-bd--heading qk-fs--hd2 qk-text--heading">
2411                    商品介紹
2412                  </h5>
2413                  <div class="ckeditor">
2414                    <div v-html="product.bodyHtml"></div>
2415                  </div>
2416                </div>
2417              
2418              
2419              
2420            </div>
2421          </div>
2422        </div>
2423        <div v-show="isLoading" style="text-align: center; padding-bottom: 20px;">
2424          <i class="fas fa-spinner fa-spin fa-fw fa-2x"></i>
2425        </div>
2426      </div>
2427        <!-- cyb_snippet _product_modal_button_mobile start -->
2428 <div
2429  v-if="showPurchaseControls"
2430  v-show="isMobileSize"
2431  class="mobile_footer"
2432  :class="{'mobile_footer-z': variantSize > 1 }">
2433        <div class="product-quantity">
2434          <div class="btn-group qk-w--100" role="group" aria-label="First group">
2435            <button class="btn add-down qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityDecrease">-</button>
2436            <input class="btn item-quantity qk-bd--default qk-bd--border qk-w--100 qk-text--heading" type="text" name="quantity" :value="quantity" @change="quantityChange">
2437            <button class="btn add-up qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityIncrease">+</button>
2438          </div>
2439        </div>
2440        <button
2441          v-if="!isLoading && !onlyDescription"
2442          class="btn btn-mobile add-button qk-btn qk-btn--primary qk-btn--lg"
2443          :class="{selected: isChoose, adding: adding || isHideAddCartBtn, 'qk-btn--disabled': isHideAddCartBtn && isNewNnCollection, 'qk-bd--none': isHideAddCartBtn && isNewNnCollection}"
2444          type="button"
2445          :disabled="isHideAddCartBtn"
2446          @click="addProduct">
2447            ${ addCartText }
2448        </button>
2449</div>
2450<div
2451  class="mobile-modal"
2452  :class="{ 'modal-open': isModalSelectShow && isMobileSize }">
2453        <div class="mobile_modal-content">
2454          <div class="modal_close-button">
2455            <button class="btn-close qk-circle qk-circle--md qk-pos--abs qk-op--100  qk-text--heading qk-bd--product_border qk-bd--default" @click="onChangeModalSelect(false,true)"></button>
2456          </div>
2457          
2458          <p>請選擇${modalOption.name}</p>
2459          <div class="modal_select-templete qk-display--flex qk-of_y--auto qk-w--100">
2460            <div class="options-container">
2461              <label :class="{'seleced-option': currentOption && currentOption[selectOption] === data.name, 'avoid-clicks':!data.isValid}" v-for="data in modalOption.types" @click="setOption(selectOption, data.name, modalOption.types)">${data.name}</label>
2462            </div>
2463          </div>
2464          <div v-if="variantSize > 1" class="modal_select_footer qk-display--flex">
2465            <button type="button" class="modal_cancel qk-bd--default qk-btn--secondary qk-bd--button qk-text--button" @click="onChangeModalSelect(false,false)">取消</button>
2466            <button type="button" class="qk-btn qk-btn--primary qk-btn--lg qk-fs--body qk-bd--button qk-test--button_text" @click="onChangeModalSelect(false,true)">完成</button>
2467          </div>
2468        </div>
2469</div>
2470
2471<!-- cyb_snippet _product_modal_button_mobile end -->
2472    </div>
2473  </div>
2474</script>
2474
2475
2476<!-- cyb_snippet components/product_modal/color_image_option start -->
2477<script id="color-image-option" type="text/x-template">
2478  <div class="color-image qk-display--flex qk-flex--wrap qk-align--center">
2479    <div class="title">顏色</div>
2480    <div
2481      v-for="(imageColor, index) in imageColors"
2482      :class="{
2483        'focus': !currentOption[optionKey] === option.types[index].name && currentImageIndex === index,
2484        'selected': currentOption[optionKey] === option.types[index].name,
2485        'disabled': !option.types[index].isValid
2486      }"
2487      class="image-option img-flex qk-bd--default qk-bd--transparent qk-display--block qk-pos--rel"
2488      @mouseleave="setCurrentImageIndex(index)"
2489      @mouseover="getOptionImageIndex(index)"
2490      @click="setOption(optionKey, index)"
2491    >
2492      <img v-if="imageColor !== 'noColorImage'" :src="imageColor.large" alt="image">
2493      <img v-else src="/assets/no-image-large.png" alt="image">
2494    </div>
2495  </div>
2496</script>
2496
2497
2498<script type="text/javascript">
2499  $(document).ready(function() {
2500    window.themeHelper.productModalComponents['color-image-option'] = {
2501      template: '#color-image-option',
2502      delimiters: ['${', '}'],
2503      props: {
2504        optionKey: String,
2505        option: Object,
2506        product: Object,
2507        imageColors: Array,
2508        isChoose: Boolean,
2509        currentImageIndex: Number,
2510        setCurrentImageIndex: Function,
2511        getOptionImageIndex: Function,
2512        currentOption: Object,
2513        toggleCurrentOption: Function,
2514      },
2515      methods: {
2516        setOption: function(optionKey, index) {
2517          const type = this.option.types[index];
2518          if(type.isValid){
2519            this.toggleCurrentOption(optionKey, type.name);
2520          }
2521        }
2522      }
2523    };
2524  });
2525</script>
2525
2526
2527<!-- cyb_snippet components/product_modal/color_image_option end -->
2528<!-- cyb_snippet components/product_modal/advance_option start -->
2529<script id="advance-option" type="text/x-template">
2530  <div class="advance">
2531    <div class="title qk-text--heading qk-fs--body">${option.name}</div>
2532    <div
2533      v-for="type in option.types"
2534      :class="{
2535        'selected': currentOption[optionKey] === type.name,
2536        'disabled': !type.isValid
2537      }"
2538      @click="setOption(optionKey, type)"
2539      class="option qk-btn  qk-bd--button qk-text--button qk-pd_x--1"
2540    >
2541      ${type.name}
2542    </div>
2543  </div>
2544</script>
2544
2545
2546<script type="text/javascript">
2547  $(document).ready(function() {
2548    window.themeHelper.productModalComponents['advance-option'] = {
2549      template: '#advance-option',
2550      delimiters: ['${', '}'],
2551      props: {
2552        optionKey: String,
2553        option: Object,
2554        product: Object,
2555        currentOption: Object,
2556        toggleCurrentOption: Function,
2557      },
2558      methods: {
2559        setOption: function(optionKey, type) {
2560          if(type.isValid){
2561            this.toggleCurrentOption(optionKey, type.name);
2562          }
2563        }
2564      }
2565    };
2566  });
2567</script>
2567
2568
2569<!-- cyb_snippet components/product_modal/advance_option end -->
2570
2571<!-- cyb_snippet components/product_modal/photo_swiper start -->
2572
2573
2574<script id="photo-swiper" type="text/x-template">
2575  <div ref="photoSwiper" id="photo_swiper" class="photos swiper swiper-container">
2576    <div class="swiper-wrapper">
2577      <template v-if="hasImage">
2578        <div v-for="(item, index) in mediaItems" :key="index" class="photo swiper-slide qk-align--center qk-display--flex qk-justify--center qk-vert--text_top default_scale">
2579          <video-player v-if="item.url" :video="item"
2580            :video-poster=" !!mediaItems[firstImageIndex] ? mediaItems[firstImageIndex].large : '//cdn-general.cybassets.com/img_loading.svg' "
2581          >
2582          </video-player>
2583          <img v-else class="qk-center" :src="item.large" alt="image"/>
2584        </div>
2585      </template>
2586      <div v-else class="photo swiper-slide qk-align--center qk-display--flex qk-justify--center qk-vert--text_top default_scale">
2587        <img src="//cdn-general.cybassets.com/assets/no-image-large-2b95ea56c455be9ce081d81c14eded925df68bf8fa38809e46f6af8fcdd5f9bc.png" alt="image" />
2588      </div>
2589    </div>
2590    <div v-show="showBtn" class="photo-prev qk-swiper_btn--prev  qk-hidden--mobile qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v2 qk-mg_l--05"></div>
2591    <div v-show="showBtn" class="photo-next qk-swiper_btn--next  qk-hidden--mobile qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v2 qk-mg_l--05"></div>
2592
2593    <div class="photo-pagination qk-bd--default qk-bd--body qk-text--center qk-text--body qk-fs--breadcrumb qk-visible-sm">
2594        <span class="current-index qk-text--default_dark">${currentImageIndex +1 }</span><span class="pagination-slash">/</span>
2595        <span>${mediaItems.length}</span>
2596      </div>
2597  </div>
2598</script>
2598
2599
2600<script>
2601  $(document).ready(function () {
2602    window.themeHelper.productModalComponents['photo-swiper'] = {
2603      template: '#photo-swiper',
2604      delimiters: ['${', '}'],
2605      props: {
2606        mediaItems: Array,
2607        currentImageIndex: Number,
2608        currentVariant: Object,
2609        videoAfterImage: Boolean,
2610      },
2611      data: function () {
2612        return {
2613          swiper: {},
2614          swiperOption: {
2615            preventInteractionOnTransition: true,
2616            rewind: true,
2617            spaceBetween: 5,
2618            slidesPerView: 1,
2619            navigation: {
2620              nextEl: '.photo-next',
2621              prevEl: '.photo-prev'
2622            }
2623          },
2624          showBtn: true,
2625          isVariantReposition: false,
2626        }
2627      },
2628      mounted: function() {
2629        this.swiper = new Swiper('#photo_swiper', this.swiperOption);
2630        this.swiper.on('slideChange', this.slideOnChange);
2631      },
2632      watch: {
2633        currentImageIndex: function() {
2634          this.slideToIndex();
2635        },
2636        currentVariant: {
2637          immediate: true,
2638          handler: function() {
2639            this.showBtn = this.mediaItems.length > 1;
2640            this.isVariantReposition = true;
2641            this.$nextTick(() => {
2642              if (this.swiper) {
2643                this.swiper.update();
2644                this.swiper.slideToLoop(this.initialItemIndex)
2645                this.slideOnChange();
2646                this.isVariantReposition = false;
2647              }
2648            });
2649          },
2650        },
2651      },
2652      computed: {
2653        hasImage: function() {
2654          return this.mediaItems.length > 0;
2655        },
2656        hasVideo: function() {
2657          return this.mediaItems.findIndex(item => !!item.url) !== -1;
2658        },
2659        variantPhotos: function() {
2660          if (this.currentVariant?.photos?.length) {
2661            return this.currentVariant.photos;
2662          } else  {
2663            return null;
2664          }
2665        },
2666        initialItemIndex: function() {
2667          if (this.hasVideo && !this.videoAfterImage) {
2668            // Focus on photo if "variant with photos" selected, video otherwise
2669            return this.variantPhotos?.length ? 1 : 0;
2670          } else {
2671            // Focus on first photo
2672            return 0;
2673          }
2674        },
2675      },
2676      methods: {
2677        slideOnChange: function() {
2678          themeHelper.EventBus.$emit('photoOnChange', this.swiper.realIndex, this.isVariantReposition);
2679        },
2680        slideToIndex: function() {
2681          if(this.swiper.realIndex != this.currentImageIndex) {
2682            this.swiper.slideToLoop(this.currentImageIndex);
2683            this.swiper.update();
2684          }
2685        },
2686      }
2687    };
2688  });
2689</script>
2689
2690
2691
2692<!-- cyb_snippet components/product_modal/video_player start -->
2693<script id="video-player" type="text/x-template">
2694  <div class="videoPlayer__wrapper" @click="handleVideoClick">
2695    <video 
2696      id='modal-video'
2697      class="videoPlayer__video qk-cursor--pointer qk-center" 
2698      :poster="videoPoster"
2699      loop defaultMuted muted playsinline webkit-playsinline autoplay
2700    >
2701      <source :src="videoUrl" type="video/mp4">
2702      <p>你的瀏覽器不支援 HTML 5 video</p>
2703    </video>
2704    <button id="modal-video-button" class="videoPlayer__pauseButton"></button>
2705  </div>
2706</script>
2706
2707
2708<script>
2709  $(document).ready(function () {
2710    window.themeHelper.productModalComponents['video-player'] = {
2711      template: '#video-player',
2712      delimiters: ['${', '}'],
2713      props: {
2714        video: Object,
2715        videoPoster: String,
2716      },
2717      data: function() {
2718        return {
2719          videoElement: null,
2720          buttonElement: null,
2721        };
2722      },
2723      mounted: function() {
2724        this.videoElement = $('#modal-video')[0];
2725        this.buttonElement = $('#modal-video-button');
2726        this.setVideoVolumeZero();
2727        this.videoElement.addEventListener('canplay', (event) => {
2728          this.sendGtag('play');
2729        }, { once: true });
2730      },
2731      computed: {
2732        videoUrl: function() {
2733          return this.video.url;
2734        }
2735      },
2736      methods: {
2737        sendGtag: function(action) {
2738          window.productVideoView && productVideoView(action);
2739        },
2740        setVideoVolumeZero: function() {
2741          this.videoElement.volume = 0;
2742        },
2743        handleVideoClick: function() {
2744          if (this.videoElement.paused){
2745            this.videoElement.play();
2746            this.sendGtag('play');
2747          } else {
2748            this.videoElement.pause();
2749            this.sendGtag('paused');
2750          }
2751          this.handleVideoButtonDisplay(this.buttonElement, this.videoElement);
2752        },
2753        handleVideoButtonDisplay: function(button, video) {
2754          button.toggleClass('videoPlayer__playButton', video.paused);
2755          button.toggleClass('videoPlayer__pauseButton', !video.paused);
2756        },
2757      }
2758    };
2759  });
2760</script>
2760
2761
2762<!-- cyb_snippet components/product_modal/video_player end -->
2763
2764<!-- cyb_snippet components/product_modal/photo_swiper end -->
2765<!-- cyb_snippet components/product_modal/swiper_thumbnails start -->
2766<script id="swiper-thumbnails" type="text/x-template">
2767  <div
2768    v-for="(thumbnail, index) in allThumbnails"
2769    :key="index"
2770    class="product-thumbnail img-flex qk-of--hidden qk-display--il_bk qk-cursor--pointer qk-bd--default qk-bd--transparent default_scale"
2771    :class="{ focus: index === currentImageIndex }"
2772    @mouseover="updateCurrentImageIndex(index)"
2773  >
2774    <template v-if="thumbnail.isVideo">
2775      <video class="qk-w--100 qk-h--100" :src="thumbnail.url" defaultMuted playsinline></video>
2776      <button class="videoPlayer__playButton"></button>
2777    </template>
2778    <img v-else :src="thumbnail.url" :alt="title" class="qk-w--100 qk-h--100">
2779  </div>
2780</script>
2780
2781
2782<script type="text/javascript">
2783  $(document).ready(function () {
2784    window.themeHelper.productModalComponents['swiper-thumbnails'] = {
2785      template: '#swiper-thumbnails',
2786      delimiters: ['${', '}'],
2787      props: {
2788        title: String,
2789        mediaItems: Array,
2790        currentImageIndex: Number,
2791      },
2792      emits: ['updateCurrentImageIndex'],
2793      methods: {
2794        updateCurrentImageIndex: function(thumbnailIndex) {
2795          if (thumbnailIndex !== this.currentImageIndex ) {
2796            this.$emit('updateCurrentImageIndex', thumbnailIndex);
2797          }
2798        },
2799      },
2800      mounted() {
2801        // can be removed after replacing video thumbnail with img
2802        const thumbnailVideo = $('.product-thumbnail video')[0];
2803        if (!!thumbnailVideo) {
2804          thumbnailVideo.volume = 0;
2805          const promise = thumbnailVideo.play();
2806          promise.then(() => {
2807            thumbnailVideo.pause();
2808          })
2809        }
2810      },
2811      computed: {
2812        allThumbnails: function() {
2813          return this.mediaItems.map(item => ({
2814            isVideo: !!item.url,
2815            url: item.url || item.medium
2816          }));
2817        },
2818      },
2819      watch: {
2820        allThumbnails: {
2821          handler(){
2822            this.updateCurrentImageIndex(this.currentImageIndex);
2823          }
2824        }
2825      }
2826    };
2827  });
2828</script>
2828
2829
2830<!-- cyb_snippet components/product_modal/swiper_thumbnails end -->
2831
2832
2833<!-- cyb_snippet _product_modal_js start -->
2834<script type="text/javascript">
2835  $(document).ready(function() {
2836    var categoryLevels = [];
2837    var productCategoryLevels = null;
2838    var pageMainProductId = null;
2839    window.themeHelper.productModalComponents['product-modal'] = {
2840      template: '#product-modal',
2841      delimiters: [
2842        '${', '}'
2843      ],
2844      props: {
2845        onlyDescription: Boolean,
2846        cartItems: Array,
2847        groupId: Number,
2848        productUrl: String,
2849        color: String, // unused
2850        collectionId: Number,
2851        categories: Array,
2852        // 判斷是否有色票展開
2853        isCollection: {
2854          type: Boolean,
2855          required: false,
2856          default: false,
2857        },
2858        // 判斷加入購物車的方法
2859        isNnCollection: Boolean,
2860        isNewNnCollection: Boolean,
2861        isBundleDiscount: Boolean,
2862
2863        // 判斷是否顯示商品描述
2864        isShowDescription: {
2865          type: Boolean,
2866          default: true
2867        },
2868
2869        // 判斷是否為立即購買
2870        isQuickBuy: {
2871          type: Boolean,
2872          default: false
2873        },
2874        selectedVariantId: Number,
2875        callBack: Function
2876      },
2877      data: function() {
2878        return {
2879          styledShopMenu: "buttonType",
2880          selectOption: '',
2881          selectCurrentStr:'',
2882          isModalSelectShow: false,
2883          modalOption: {},
2884          adding: false,
2885          currentImageIndex: 0,
2886          _navState: { variantId: null, photoIndex: 0 },
2887          currentOption: {
2888            option1: null,
2889            option2: null,
2890            option3: null
2891          },
2892          currentVariant: null,
2893          variantNotifications: null,
2894          currentVariantIndex: null,
2895          product: {},
2896          isChoose: false,
2897          isLoading: true,
2898          isEmptyClickable: liquidHelper.isEmptyClickable,
2899          quantity: 1,
2900          maxUsableBonus: 0,
2901          isDiscountPrice: false,
2902          displayProductDiscountsList: true,
2903          displayPeriodicSalesPages:false,
2904          discountsList: null,
2905          hasVideoPlugin: true,
2906          videoDisplayLocation: null,
2907          hasStockNotificationPlugin: false,
2908          isDisplayPriceRange: null,
2909          hasVariantPriceRangePlugin: true,
2910          hasHideSingleVariantOptionsPlugin: false,
2911        }
2912      },
2913      mounted: function() {
2914        this.getProductDetail();
2915        $('.custom-scrollbar').addCustomScrollbar();
2916        themeHelper.EventBus.$on('photoOnChange', this.photoOnChange);
2917      },
2918      beforeUnmount: function() {
2919        themeHelper.EventBus.$off('photoOnChange', this.photoOnChange);
2920      },
2921      computed: {
2922        photoUrls: function() {
2923          return this.product.photoUrls.length > 0
2924            ? this.product.photoUrls
2925            : [this.featuredImage];
2926        },
2927        photoUrlsMap: function() {
2928          var map = {};
2929          var urls = this.product.photoUrls;
2930          this.product.photos.forEach(function(photo, index) {
2931            map[photo.photo.id] = urls[index];
2932          });
2933
2934          return map;
2935        },
2936        featuredImage: function() {
2937          return this.product.featuredImage;
2938        },
2939        swiperPhotos: function() {
2940          if (!this.photoUrls.length) {
2941            return [this.featuredImage];
2942          }
2943
2944          if (this.currentVariant && this.currentVariant.photos.length) {
2945            var map = this.photoUrlsMap;
2946            return this.currentVariant.photos.map(function(p) {
2947              return map[p.id];
2948            });
2949          }
2950
2951          return this.photoUrls;
2952        },
2953        productVideo: function() {
2954          return this.product.video;
2955        },
2956        videoAfterImage: function() {
2957          return this.videoDisplayLocation === 'after';
2958        },
2959        swiperItems: function() {
2960          const media = [...this.swiperPhotos];
2961          if (
2962            this.hasVideoPlugin && this.productVideo.url
2963          ) {
2964            this.videoAfterImage
2965              ? media.push(this.productVideo)
2966              : media.unshift(this.productVideo);
2967          }
2968          return media;
2969        },
2970        firstImageIndex: function() {
2971          return this.hasVideoPlugin && this.productVideo.url && !this.videoAfterImage
2972            ? 1
2973            : 0
2974        },
2975        otherDescriptions: function() {
2976          var descriptions = {};
2977          this.product.otherDescriptions.forEach(function(od) {
2978            descriptions[od.settingName] = od.bodyHtml;
2979          })
2980          return descriptions
2981        },
2982        variantOptions: function() {
2983          return themeHelper.variantOptions(this.product);
2984        },
2985        firstValidVariant: function() {
2986          var self = this;
2987          var result = this.product.variants.find(function(variant) {
2988            // 增加 product modal 聯絡店家 property
2989            variant.imgUrl = "";
2990            variant.productTitle = "";
2991
2992            return variant.available;
2993          });
2994
2995          return result
2996            ? result
2997            : null;
2998        },
2999        selectedValidVariant: function() {
3000          var self = this;
3001          var result = this.variantOptions.find(function(variant) {
3002            return variant.id === self.selectedVariantId;
3003          });
3004
3005          return result
3006            ? result
3007            : null;
3008        },
3009        totalInventoryQuantity: function(product) {
3010          return themeHelper.totalInventoryQuantity(this.product)
3011        },
3012        addCartText: function() {
3013          var variants = parseInt("");
3014          let isRegisteredNotification = this.currentVariant && this.variantNotifications && this.variantNotifications[this.currentVariant.id]
3015          if (this.isNnCollection || this.isBundleDiscount) {
3016            if (this.currentVariant && !themeHelper.variantIsAvailable(this.currentVariant)) {
3017              if (this.currentVariant.inventoryPolicy === 'continue') {
3018                if (this.isNnCollection) {
3019                  return this.isChoose && !this.isNewNnCollection
3020                    ? '已預購'
3021                    : '預購商品';
3022                }
3023              } else {
3024                return '已售完';
3025              }
3026            }
3027            if (this.totalInventoryQuantity === 0) {
3028              return '已售完';
3029            }
3030            return this.isChoose && !this.isNewNnCollection
3031              ? '已選購'
3032              : '選購';
3033          } else {
3034            if (this.isQuickBuy) {
3035              if (this.currentVariant && !themeHelper.variantIsAvailable(this.currentVariant)) {
3036                if (this.currentVariant.inventoryPolicy === 'continue'){
3037                  return '立即預購'
3038                }
3039                return this.hasStockNotificationPlugin
3040                  ? (isRegisteredNotification
3041                    ? '已登記補貨通知'
3042                    : '已售完,貨到通知我')
3043                  : '聯絡店家'
3044              }
3045              return '立即購買';
3046            } else {
3047              if (this.currentVariant) {
3048                if (!themeHelper.variantIsAvailable(this.currentVariant)) {
3049                  if (this.currentVariant.inventoryPolicy === 'continue'){
3050                    return '預購商品'
3051                  }
3052                  return this.hasStockNotificationPlugin
3053                    ? (isRegisteredNotification
3054                      ? '已登記補貨通知'
3055                      : '已售完,貨到通知我')
3056                    : '聯絡店家'
3057                }
3058              } else {
3059                if (this.totalInventoryQuantity === 0) {
3060                  return '已售完';
3061                }
3062              }
3063              return '加入購物車';
3064            }
3065          }
3066        },
3067        cartItem: function() {
3068          if (!this.currentVariant) {
3069            return null
3070          }
3071          return {
3072            id: this.currentVariant.id,
3073            groupId: this.groupId,
3074            productId: this.product.id,
3075            title: this.product.title,
3076            photo: this.currentVariant.imgUrl || this.featuredImage.large,
3077            quantity: this.quantity,
3078            price: this.currentVariant.price,
3079            variant: this.currentVariant,
3080            product: this.product
3081          }
3082        },
3083        options: function() {
3084          return this.product.options;
3085        },
3086        optionTypes: function() {
3087
3088          // 先根據設定的variants來排序
3089          var self = this;
3090
3091          var option1 = [];
3092          var option2 = [];
3093          var option3 = [];
3094          this.product.variants.forEach(function(item) {
3095            if (item.option1 !== null) {
3096              option1.push(item.option1);
3097            }
3098            if (item.option2 !== null) {
3099              option2.push(item.option2);
3100            }
3101            if (item.option3 !== null) {
3102              option3.push(item.option3);
3103            }
3104          })
3105          var filteredOptionTypes = [];
3106          this.product.optionTypes.forEach(function(item, index) {
3107            filteredOptionTypes.push(self.getUniqueVariant(eval('option' + (
3108              index + 1
3109            ))).join(','));
3110          });
3111          return filteredOptionTypes;
3112        },
3113        optionInfo: function() {
3114          var self = this;
3115
3116          return self.options.map(function(option, index) {
3117            return {
3118              name: option,
3119              types: self.getOptions('option' + (
3120                index + 1
3121              ), self.optionTypes[index].split(','))
3122            }
3123          });
3124        },
3125        hasVariant: function() {
3126          return this.product.options.length > 0;
3127        },
3128        shouldHideSingleVariantOptions: function() {
3129          return this.hasHideSingleVariantOptionsPlugin &&
3130                 this.product.variants &&
3131                 this.product.variants.length <= 1;
3132        },
3133        variantSize: function() {
3134          if(this.product.options){
3135          return this.product.options.length;
3136          }
3137        },
3138        firstVariant: function() {
3139          return this.product.variants[0];
3140        },
3141        firstCheapestVariant: function() {
3142          return this.product.variants.find((v)=> (v.price === this.priceStats.minPrice));
3143        },
3144        priceStats: function() {
3145          return this.product.variants.reduce(function(acc, variant) {
3146            return {
3147              minPrice: variant.price < acc.minPrice ? variant.price : acc.minPrice,
3148              maxPrice: variant.price > acc.maxPrice ? variant.price : acc.maxPrice,
3149            };
3150          }, {
3151            minPrice: this.firstVariant.price,
3152            maxPrice: this.firstVariant.price,
3153          });
3154        },
3155        hidePrice: function() {
3156          return this.product && this.product.hidePrice === true;
3157        },
3158        salesModePurchasable: function() {
3159          return !(this.product && this.product.salesModePurchasable === false);
3160        },
3161         // - 任選折扣/紅配綠:「選擇」只是加進試算清單,不會直接下單,故只擋藏價商品
3162        // - 其他情境(商品頁、群組頁、多層級分類、搜尋、首頁商品區塊):不可購買(含藏價)就整組收掉
3163        showPurchaseControls: function() {
3164          if (this.isNnCollection || this.isBundleDiscount) {
3165            return !this.hidePrice;
3166          }
3167          return this.salesModePurchasable;
3168        },
3169        variantPrice: function() {
3170          if (this.hidePrice) {
3171            return '';
3172          }
3173          var from = liquidHelper.defaultCurrency;
3174          if (this.currentVariant) {
3175            return moneySymbol(this.currentVariant.price, from);
3176          }
3177          if (this.product.variants.length === 1) {
3178            return moneySymbol(this.firstVariant.price, from);
3179          }
3180
3181          var minPrice = this.priceStats.minPrice;
3182          var maxPrice = this.priceStats.maxPrice;
3183
3184          if (minPrice !== maxPrice && (!this.hasVariantPriceRangePlugin || this.isDisplayPriceRange)) {
3185            this.isDiscountPrice = false;
3186            return moneySymbol(minPrice, from) + '~' + moneySymbol(maxPrice, from);
3187          } else {
3188            return moneySymbol(minPrice, from);
3189          }
3190        },
3191        marketPrice: function() {
3192          if (this.hidePrice) {
3193            this.isDiscountPrice = false;
3194            return;
3195          }
3196          var from = liquidHelper.defaultCurrency;
3197          if (this.currentVariant) {
3198            this.isDiscountPrice = false;
3199            if (this.currentVariant.compareAtPrice && this.currentVariant.compareAtPrice > this.currentVariant.price) {
3200              this.isDiscountPrice = true;
3201              return moneySymbol(this.currentVariant.compareAtPrice, from);
3202            }
3203          } else {
3204            if (!_.includes(this.variantPrice, '~')) {
3205              const price =  Number(this.variantPrice.replace(/[^0-9.
3205-]/g, ""))
3206              // 未選擇款式也不顯示區間時,顯示第一個最便宜的款式的定價
3207              if (this.firstCheapestVariant.compareAtPrice && this.firstCheapestVariant.compareAtPrice > price){
3208                this.isDiscountPrice = true;
3209                return moneySymbol(this.firstCheapestVariant.compareAtPrice, from);
3210              }
3211              // 未選擇款式時要改回一般價格顏色
3212              this.isDiscountPrice = false;
3213            }
3214          }
3215        },
3216        isShowDropdownList: function() {
3217          if (this.product.options.length > 0) {
3218            return true;
3219          }
3220          return this.product.variants.length > 1
3221        },
3222        priceTitleTag: function() {
3223          return this.marketPrice
3224            ? getDiscountPriceName()
3225            : getDiscountPriceSuggestionName();
3226        },
3227        isHideAddCartBtn: function() {
3228          if (this.addCartText === '已售完') {
3229            return true;
3230          }
3231          return false;
3232        },
3233        isSecondaryBtn: function() {
3234          if (this.addCartText === '聯絡店家') {
3235            return true;
3236          }
3237          return false;
3238        },
3239        variantsMaxUsableBonus: function() {
3240          var variants = this.product.variants;
3241          var maxUsableBonusArray = variants.map(function(item) {
3242            return item.maxUsableBonus
3243          });
3244          return Math.max.apply(null, maxUsableBonusArray);
3245        },
3246        bonusToPrice: function() {
3247          const bonus = this.currentVariant
3248            ? this.currentVariant.maxUsableBonus
3249            : this.maxUsableBonus;
3250          const price = Math.floor(bonus / window.liquidHelper.conversionBonus);
3251          const priceWithMoney = window.themeHelper.productDisplayCurrencyBlock(price);
3252          return "(約等於 value )".replace('value', priceWithMoney);
3253        },
3254        isMobileSize: function() {
3255          return window.innerWidth <= 580
3256        },
3257        limitBuyText: function () {
3258          const minCount = this.product.minBuy;
3259          const maxCount = this.product.limitBuy;
3260          if (minCount > 0 && maxCount > 0) {
3261            return '此商品每筆訂單最少需購買 minCount 件,最多可購買 maxCount 件'.replace('minCount', minCount).replace('maxCount', maxCount);
3262          }
3263          if (minCount > 0) {
3264            return '此商品每筆訂單最少需購買 minCount 件'.replace('minCount', minCount);
3265          }
3266          if (maxCount > 0) {
3267            return '此商品每筆訂單最多可購買 maxCount 件'.replace('maxCount', maxCount);
3268          }
3269          return '';
3270        }
3271      },
3272      methods: {
3273        onClickSelectModal: function(objData, selectOptionStr) {
3274          this.isModalSelectShow = true;
3275          this.modalOption = objData;
3276          this.selectOption = selectOptionStr
3277          this.selectCurrentStr = this.currentOption && (String(this.currentOption[selectOptionStr]) || null)
3278        },
3279        onChangeModalSelect: function(flag, isSelect) {
3280          if(!isSelect){
3281            this.setOption(this.selectOption,this.selectCurrentStr,this.modalOption.types)
3282          }
3283          this.isModalSelectShow = flag;
3284        },
3285        setOption: function(optionKey, type, dataArr) {
3286          let flag = true
3287          dataArr.forEach(item => {
3288            if (item.name === type) {
3289              flag = item.isValid
3290            }
3291          })
3292          if (flag) {
3293            this.toggleCurrentOption(optionKey, type)
3294          }
3295        },
3296        addToWishListEvent: function() {
3297          try {
3298            if (appMarketAddToWishListEvent) {
3299              var product = this.product;
3300              var currentVariant = this.currentVariant
3301              var element = $(`.btn[data-id=${product.id}]`);
3302              var index;
3303              var listName;
3304              if (element) {
3305                index = element.data('position')
3306                listName = element.data('list')
3307              }
3308              // sku_properties:選中款式的 option pairs(當前語系),類型名 zip 值
3309              var optionValues = [currentVariant.option1, currentVariant.option2, currentVariant.option3];
3310              var properties = [];
3311              (product.options || []).forEach(function(optionName, i) {
3312                if (optionName && optionValues[i]) {
3313                  properties.push({ name: optionName, value: optionValues[i] });
3314                }
3315              });
3316              var dataSet = {
3317                name: product.title,
3318                category: product.productType,
3319                categories: (this.categories && this.categories.length) ? this.categories : (categoryLevels.length ? categoryLevels : (product.id === pageMainProductId ? productCategoryLevels : undefined)),
3320                sku: currentVariant.sku,
3321                price: currentVariant.price,
3322                compare_at_price: currentVariant.compareAtPrice,
3323                properties: properties,
3324                quantity: currentVariant.inventoryQuantity,
3325                variant: currentVariant.title,
3326                listName: listName || null,
3327                productId: product.id,
3328                variantId: currentVariant.id,
3329                index: Number(index) || 0,
3330              }
3331              appMarketAddToWishListEvent(dataSet)
3332            }
3333          } catch (e) {
3334            console.error(e)
3335          }
3336        },
3337        addWishList: function() {
3338          if (this.currentVariant === null) {
3339            window.msg('請選擇商品款式', 'warning').show();
3340            return;
3341          }
3342          var productVariantId = this.currentVariant.id;
3343          var addToWishListEvent = this.addToWishListEvent
3344          $.ajax({
3345            method: 'POST',
3346            url: '/tracking_items',
3347            dataType: 'json',
3348            data: {
3349              product_variant_id: productVariantId
3350            },
3351            success: function(response) {
3352              if (response.message) {
3353                window.msg(response.message, 'success').show();
3354                addToWishListEvent()
3355              }
3356
3357              if (response.error) {
3358                window.msg(response.error, 'error').show();
3359
3360              }
3361              if (response.info) {
3362                window.msg(response.info, 'info').show();
3363              }
3364              if (response.success === false) {
3365                if (window.liquidHelper && window.liquidHelper.language && window.liquidHelper.language.handle) {
3366                  window.location = "/" + window.liquidHelper.language.handle + "/account/login";
3367                } else {
3368                  window.location = "/account/login";
3369                }
3370              }
3371            }
3372          });
3373        },
3374        setChoose: function(currentVariant) {
3375          this.maxUsableBonus = 0;
3376          var quantity = 1;
3377          var cartItem = null;
3378          if (!this.isNnCollection && this.cartItems) {
3379            cartItem = this.normalGetChoosenItem(currentVariant);
3380          }
3381          if (this.isNnCollection) {
3382            cartItem = this.nnCollectionGetChoosenItem(currentVariant);
3383          }
3384          this.isChoose = !! cartItem;
3385          if (this.isNewNnCollection) {
3386            return
3387          }
3388          this.quantity = cartItem
3389            ? cartItem.quantity
3390            : this.quantity;
3391
3392          // product modal 聯絡店家情境
3393          if (currentVariant) {
3394            var photoIndex = 0;
3395            if (! currentVariant.imgUrl) {
3396              currentVariant.imgUrl = this.swiperPhotos.length > 0
3397                ? (this.swiperPhotos[photoIndex] && this.swiperPhotos[photoIndex].large)
3398                : this.featuredImage.large;
3399            }
3400            currentVariant.productTitle = this.product.title + ' - ' + this.currentVariant.title;
3401          }
3402        },
3403        normalGetChoosenItem: function(currentVariant) {
3404          return this.cartItems.find(function(cartItem) {
3405            return currentVariant && cartItem.id === currentVariant.id;
3406          });
3407        },
3408        nnCollectionGetChoosenItem: function(currentVariant) {
3409          var isSelected = null;
3410          if (! currentVariant) {
3411            return isSelected;
3412          }
3413          if (this.isNewNnCollection) {
3414            var cart = store.get(`SpecialCollectionCart_${this.collectionId}`);
3415            isSelected = cart && cart.find((item) => item.variant_id == currentVariant.id) || null;
3416          } else {
3417            store.each(function(value, key) {
3418              var productId = _.includes(key, 'Pro' + currentVariant.productId);
3419              var variantID = _.includes(key, 'Var' + currentVariant.id);
3420              if (productId && variantID) {
3421                isSelected = store.get(key);
3422              }
3423            });
3424          }
3425
3426          return isSelected;
3427        },
3428        // get product detail
3429        getProductDetail: function() {
3430          var self = this;
3431
3432          $.ajax({
3433            url: self.productUrl + '.json',
3434            type: 'GET',
3435            timeout: 30000,
3436            beforeSend: function() {
3437              self.isLoading = true;
3438            },
3439            error: function(xhr) {
3440              self.closeModal();
3441              if (xhr.status === 429) {
3442                window.showAddCartRateLimitModal(5);
3443                return;
3444              }
3445              window.msg('網路連線異常,請重新整理', 'error').show();
3446            }
3447          }).done(function(data) {
3448            if (data.id) {
3449              var productData = [themeHelper.toCamelCase(data)];
3450              self.product = themeHelper.priceWithDiscount(productData, liquidHelper.hasPriceWithDiscountPlugin)[0];
3451              self.maxUsableBonus = self.variantsMaxUsableBonus;
3452              if (self.product.variants.length === 1 || liquidHelper.isFirstVariantSelected || self.selectedVariantId) {
3453                self.currentVariant = self.firstValidVariant;
3454                // 如果已經自選商品,則商品頁下滑加入購物車顯示自選商品
3455                if (self.selectedVariantId) {
3456                  self.currentVariant = self.selectedValidVariant;
3457                }
3458                if (self.currentVariant) {
3459                  self.setChoose(self.currentVariant);
3460                  self.setDefaultOption();
3461                }
3462              }
3463              if (self.displayProductDiscountsList) {
3464                self.setUpDiscountsTag(data);
3465              }
3466              self.isLoading = false;
3467              if (self.product && self.product.variants) {
3468                self.product.variants.forEach(function(discountedVariant) {
3469                  var rawVariant = data.variants.find(function(v) { return v.id === discountedVariant.id; });
3470                  if (rawVariant) { rawVariant.price = discountedVariant.price; }
3471                });
3472              }
3473              viewItem && viewItem(data, { collectionId: '', collectionName: null, categories: (self.categories && self.categories.length) ? self.categories : (categoryLevels.length ? categoryLevels : (data.id === pageMainProductId ? productCategoryLevels : undefined)) });
3474
3475              
3476            } else {
3477              window.msg('網路連線異常,請重新整理', 'error').show();
3478              self.closeModal()
3479            }
3480          })
3481        },
3482        // product image btn
3483        photoOnChange: function(photoIndex, isVariantReposition) {
3484          var visiblePhotos = (this.currentVariant && this.currentVariant.photos.length)
3485            ? this.currentVariant.photos
3486            : this.product.photos.map(function(p) { return p.photo; });
3487          var result = themeHelper.buildNavigateItemImagePayload(this._navState, {
3488            product: this.product,
3489            currentVariant: this.currentVariant,
3490            visiblePhotos: visiblePhotos,
3491            slideIndex: photoIndex,
3492            videoOffset: this.firstImageIndex,
3493          });
3494          this._navState = result.nextState;
3495          if (result.payload && !isVariantReposition) {
3496            window.navigateItemImage(result.payload);
3497          }
3498          this.currentImageIndex = photoIndex;
3499        },
3500        toggleCurrentOption: function(key, value) {
3501          this.currentOption[key] =
3502            (this.currentOption[key] === value || value === 'null') ? null : value;
3503          var variantIndex = this.getVariantIndex();
3504          if (variantIndex !== -1) {
3505            this.currentVariant = this.product.variants[variantIndex];
3506          } else {
3507            this.currentVariant = null;
3508          }
3509          this.setChoose(this.product.variants[variantIndex]);
3510          if (this.currentOption[key] !== null) {
3511            var optionIndex = parseInt(key.replace('option', '')) - 1;
3512            appStoreSelectItemEvent(this.product, this.product.options[optionIndex], this.currentOption[key], this.currentVariant);
3513          }
3514        },
3515        toggleNotification: function() {
3516          var self = this;
3517          var variantId = this.currentVariant.id;
3518
3519          $.ajax({
3520            url: '/toggle_pv_notification',
3521            method: 'POST',
3522            dataType: 'json',
3523            data: {
3524              product_variant_id: variantId
3525            },
3526            success: function(response) {
3527              self.variantNotifications[variantId] = response.notice;
3528              window.msg(response.message, "success").show();
3529            },
3530            error: function(xhr) {
3531              var response = xhr.responseJSON;
3532              var msg = response && response.error || "網路連線異常,請重新整理";
3533              window.msg(msg, "error").show();
3534            }
3535          })
3536        },
3537        getOptionImageIndex: function(index) {
3538          this.currentImageIndex = index;
3539        },
3540        quantityDecrease: function() {
3541          if (this.cartItem) {
3542            themeHelper.EventBus.$emit('quantityDecrease', this.cartItem, false);
3543            this.quantity = this.cartItem.quantity
3544          } else {
3545            window.msg("請選擇商品款式", 'warning').show();
3546          }
3547        },
3548        quantityIncrease: function() {
3549          if (this.cartItem) {
3550            themeHelper.EventBus.$emit('quantityIncrease', this.cartItem, false);
3551            this.quantity = this.cartItem.quantity
3552          } else {
3553            window.msg("請選擇商品款式", 'warning').show();
3554          }
3555        },
3556        quantityChange: function(el) {
3557          if (this.cartItem) {
3558            themeHelper.EventBus.$emit('quantityChange', parseInt(el.target.value), this.cartItem, false);
3559            this.quantity = this.cartItem.quantity;
3560            el.target.value = this.cartItem.quantity;
3561          } else {
3562            window.msg("請選擇商品款式", 'warning').show();
3563          }
3564        },
3565        addProduct: function() {
3566          if (this.addCartText === '聯絡店家') {
3567            $('#messagebuy-Modal').data('variant', this.currentVariant);
3568            $('#messagebuy-Modal').modal('show');
3569            $('#messagebuy-Modal').css("background-color", "rgba(0, 0, 0, .6)");
3570          } else if (
3571            this.addCartText === '已登記補貨通知' ||
3572            this.addCartText === '已售完,貨到通知我'
3573          ) {
3574              this.toggleNotification();
3575          } else {
3576            if (this.cartItem) {
3577              try {
3578                if (this.isChoose) {
3579                  themeHelper.EventBus.$emit('updateStore', 'update', this.cartItem, this.callBack)
3580                } else {
3581                  themeHelper.EventBus.$emit('updateStore', 'add', this.cartItem, this.callBack)
3582                }
3583
3584                this.adding = true;
3585                this.closeModal();
3586              } catch (e) {
3587                window.msg("商品款式異常", 'error').show();
3588              }
3589            } else {
3590              window.msg("請選擇商品款式", 'warning').show();
3591            }
3592          }
3593        },
3594        closeModal: function() {
3595          themeHelper.EventBus.$emit('closeProductModal');
3596        },
3597        setDefaultOption: function() {
3598          var self = this;
3599          Object.keys(self.currentOption).map(function(optionKey) {
3600            self.currentOption[optionKey] = self.currentVariant[optionKey];
3601          });
3602        },
3603        getVariantIndex: function() {
3604          var self = this;
3605          return self.product.variants.findIndex(function(variant, index) {
3606            var isVariant = true;
3607            Object.keys(self.currentOption).forEach(function(option) {
3608              if (variant[option] !== self.currentOption[option]) {
3609                isVariant = false;
3610              }
3611            });
3612            return isVariant;
3613          });
3614        },
3615
3616        // 篩選重複品項
3617        getUniqueVariant: function(variants) {
3618          return variants.filter(function(value, index, self) {
3619            return self.indexOf(value) === index;
3620          });
3621        },
3622        groupBy(xs, key) {
3623          return xs.reduce(function(rv, x) {
3624            (rv[x[key]] = rv[x[key]] || []).push(x);
3625            return rv;
3626          }, {});
3627        },
3628        setUpDiscountsTag(data) {
3629          var self = this;
3630          var languagePrefix = '/' + ((window.shopScriptHelper && window.shopScriptHelper.i18nLocale) || 'zh-TW');
3631          $.ajax({
3632            url: languagePrefix + self.productUrl + '/discounts_list',
3633            method: 'GET',
3634            success: function(result) {
3635              if (result.length > 0) {
3636                var discounts_list = self.groupBy(result, 'campaign_type');
3637                self.discountsList = discounts_list;
3638              } else {
3639                self.discountsList = null;
3640              }
3641            }
3642          });
3643        },
3644        getOptions: function(optionKey, optionTypes) {
3645          var self = this;
3646          return optionTypes.map(function(optionType, index) {
3647            var isValid = true;
3648
3649            // 選出包含目前type的variant
3650            var matchVariants = self.product.variants.filter(function(variant) {
3651              return variant[optionKey] === optionType;
3652            });
3653
3654            // 篩選已勾選type
3655            Object.keys(self.currentOption).forEach(function(currentOptionKey) {
3656              if (currentOptionKey !== optionKey) {
3657                matchVariants = matchVariants.filter(function(variant) {
3658                  if (self.currentOption[currentOptionKey]) {
3659                    return variant[currentOptionKey] === self.currentOption[currentOptionKey]
3660                  } else {
3661                    return true;
3662                  }
3663                });
3664              }
3665            });
3666            if (matchVariants.length === 0) {
3667              isValid = false;
3668            }
3669            if (! self.isEmptyClickable) {
3670              isValid = false;
3671              matchVariants.find(function(item) {
3672                if (item.inventoryQuantity === null || item.inventoryQuantity > 0 || item.inventoryPolicy === 'continue') {
3673                  isValid = true;
3674                }
3675              });
3676            }
3677            return {name: optionType, isValid: isValid}
3678          });
3679        }
3680      }
3681    };
3682  });
3683</script>
3683
3684
3685<!-- cyb_snippet _product_modal_js end -->
3686
3687<!-- cyb_snippet components/product_modal/product_modal end -->
3688
3689<!-- cyb_snippet messagebuy_modal start -->
3690
3691<div class="modal" id="messagebuy-Modal" tabindex="-1" role="dialog" aria-hidden="true">
3692  <div class="modal-dialog modal-dialog-centered" role="document">
3693    <div class="modal-content">
3694      <div class="modal-header">
3695        <p class="modal-title qk-fw--500" style="font-size: 1.25rem;">商品庫存不足留言</p>
3696        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
3697          <span aria-hidden="true">&times;</span>
3698        </button>
3699      </div>
3700      <div class="modal-body">
3701        <form class="form-horizontal" id="message-form">
3702          <input type="hidden" name="authenticity_token" id="authenticity_token" value="VL2sjQ8Q8ho4aNaIZUc2XJ0ns4Bv9vOCHCA0F0Y9jn3zYt20uzjReRtgvoRIGiYIAhvrYKGFfi3ii3UWolMc6g" autocomplete="off" />
3703          <div class="product_link img-flex">
3704            <img src="" alt="product img" class="product_img" width="300" height="300">
3705          </div>
3706          <p class="product_name qk-fw--500 qk-mg_t--05 qk-mg_b--05" style="font-size: 1.25rem;"></p>
3707          <div class="form-group">
3708            <input type="email" class="form-control" id="contact_us_email" name="contact[email]" placeholder="Email"  data-error="這不是有效的email" required>
3709            <input type="email" class="form-control" id="repeat-email" name="content[email]" placeholder="Email">
3710            <div class="help-block with-errors"></div>
3711          </div>
3712          <div class="form-group">
3713            <textarea type="text" class="form-control" id="message_body" name="contact[body]" placeholder="留言給店家" data-error="請留下想對我們說的話喔!" rows="4" required></textarea>
3714            <div class="help-block with-errors"></div>
3715          </div>
3716          
3717            <button type="submit" class="qk-btn qk-btn--primary qk-btn--lg qk-w--100 btn-submit-message">送出</button>
3718          
3719        </form>
3720      </div>
3721    </div>
3722  </div>
3723</div>
3724
3725<script>
3726  $(document).ready(function(){
3727    // setting modal
3728    var product_title, product_img, variant, variant_name, variant_sku, variant_price
3729
3730    $('#repeat-email').hide();
3731
3732    $('#messagebuy-Modal').on('show.bs.modal', function(){
3733      var currentVariant = $('#messagebuy-Modal').data('variant');
3734
3735      if (currentVariant) {
3736        // product modal 聯絡店家
3737        $('#messagebuy-Modal').find('.product_name').html(currentVariant.productTitle);
3738        $('#messagebuy-Modal').find('.product_img').attr('src', currentVariant.imgUrl);
3739        product_title = currentVariant.productTitle;
3740        variant_sku = currentVariant.sku;
3741        variant_name = currentVariant.title;
3742        variant_price = parseInt(currentVariant.price);
3743      } else {
3744        product_title = $('#product .product_info .product_title').text()
3745        // 是否顯示色票
3746        var isDisplayImagesColor = "false";
3747        if (isDisplayImagesColor === "true") {
3748          product_img = $('#photo_with_images_color').attr('src');
3749        } else {
3750          product_img   = $('#product .product_info .thumb .active img').attr('src')
3751        }
3752        variant       = $('#product .product_variant').find(':selected')
3753        variant_name  = $(variant).data('name');
3754        variant_sku   = variant.data('sku');
3755        variant_price = variant.data('price');
3756        $('#messagebuy-Modal').find('.product_name').text(product_title)
3757        $('#messagebuy-Modal').find('.product_img').attr('src', product_img)
3758      }
3759    })
3760
3761    $('#message-form').on('submit', function (e) {
3762      e.preventDefault()
3763
3764      var robot_check = $('#repeat-email').val();
3765      if(robot_check)
3766        return;
3767
3768      var csrf_token = $('meta[name=csrf-token]').attr('content');
3769      var message_email = $('#message-form input[name="contact[email]"]').val();
3770      var message_body  = $('#message-form textarea[name="contact[body]"]').val();
3771      var variant_info  = "\n (商品標題:" + product_title + " ,(商品sku:" + variant_sku + " ,商品樣式:" + variant_name + " ,商品價格:" + variant_price + ')';
3772      if(!variant_sku || !variant_name || !variant_price){
3773        variant_info = "\n (商品標題:" + product_title + ", 未選擇商品 )"
3774      }
3775      message_body += variant_info
3776
3777      var headers = {};
3778      if (csrf_token && csrf_token !== '') {
3779        headers['X-CSRF-TOKEN'] = csrf_token;
3780      }
3781
3782      $.ajax({
3783        method: 'POST',
3784        url: '/contact',
3785        headers: headers,
3786        data: {
3787          contact: { email: message_email, body: message_body },
3788          'g-recaptcha-response': $('.g-recaptcha').data('g-recaptcha-response'),
3789        },
3790        dataType: 'json'
3791      }).done(function(){
3792        $('#message-form input[name="contact[email]"]').val('');
3793        $('#message-form textarea[name="contact[body]"]').val('');
3794
3795        window.msg("送出成功", 'success').show()
3796        $('#messagebuy-Modal').modal('hide');
3797        themeHelper.EventBus.$emit('closeProductModal');
3798      }).fail(function(){
3799        window.msg("請稍後再試", 'error').show();
3800      });
3801    })
3802  })
3803</script>
3803
3804
3805
3806<!-- cyb_snippet messagebuy_modal end -->
3807<!-- cyb_snippet components/rate_limit_modal start -->
3808<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/rate_limit_modal-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
3809
3810<div class="modal fade" id="rate-limit-modal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="false">
3811  <div class="modal-dialog modal-dialog-centered" role="document">
3812    <div class="modal-content">
3813      <div class="modal-body">
3814        <div class="qk-text--default_dark rate-limit-text">
3815          <p id="rate-limit-title">目前搶購人潮眾多,請耐心等候</p>
3816          <p class="qk-fs--body qk-fw--500 rate-limit-message">
3817            <span class="qk-text--error" id="rate-limit-countdown"></span>
3818            <span id="rate-limit-desc"></span>
3819          </p>
3820          <p class="qk-fs--body qk-fw--500 rate-limit-message" id="rate-limit-warn">若離開此頁面,可能會延長等待時間。</p>
3821        </div>
3822        <button id="rate-limit-btn" class="btn qk-btn qk-btn--primary" disabled>重新進入商品頁</button>
3823      </div>
3824    </div>
3825  </div>
3826</div>
3827
3828<script>
3829  window.showRateLimitModal = function(countdownSec) {
3830    var countdown = countdownSec || 5;
3831    var $modal = $('#rate-limit-modal');
3832    var $btn = $modal.find('#rate-limit-btn');
3833    var $countdownEl = $modal.find('#rate-limit-countdown');
3834
3835    $btn.show();
3836    $modal.find('#rate-limit-desc').text(language["product_rate_limit_desc"]);
3837    $countdownEl.text(countdown);
3838    $btn.prop('disabled', true);
3839    $modal.modal('show');
3840
3841    var timer = setInterval(function() {
3842      countdown--;
3843      $countdownEl.text(countdown);
3844      if (countdown <= 0) {
3845        clearInterval(timer);
3846        $btn.prop('disabled', false);
3847      }
3848    }, 1000);
3849
3850    $btn.off('click').on('click', function() {
3851      location.reload();
3852    });
3853  }
3854
3855  window.showAddCartRateLimitModal = function(countdownSec) {
3856    var countdown = countdownSec || 5;
3857    var $modal = $('#rate-limit-modal');
3858    var $countdownEl = $modal.find('#rate-limit-countdown');
3859
3860    $modal.find('#rate-limit-btn').hide();
3861    $modal.find('#rate-limit-desc').text(language["addcart_rate_limit_desc"]);
3862    $countdownEl.text(countdown);
3863    $modal.modal('show');
3864
3865    var timer = setInterval(function() {
3866      countdown--;
3867      $countdownEl.text(countdown);
3868      if (countdown <= 0) {
3869        clearInterval(timer);
3870        $modal.modal('hide');
3871      }
3872    }, 1000);
3873  }
3874</script>
3874
3875
3876<!-- cyb_snippet components/rate_limit_modal end -->
3877
3878<script>
3879  $(document).ready(function() {
3880    const shouldSkipQuantityCheck = false;
3881    const newAddCartModalApp = new window.themeHelper.LiquidVueHandler({
3882      componentNames: Object.keys(window.themeHelper.productModalComponents),
3883      mountSelector: '#new-addcart-modal',
3884      autoMount: false,
3885    });
3886
3887    newAddCartModalApp.createApp({
3888      el: '#new-addcart-modal',
3889      delimiters: ['${', '}'],
3890      data() {
3891        return {
3892          collectionId: 0,
3893          categories: [],
3894          color: '', // unused
3895          isCollection: true,
3896          productQuantity: 0,
3897          onlyDescription: false,
3898          showProductModal: false,
3899          popProductUrl: '',
3900          loading: false,
3901        };
3902      },
3903      mounted: function() {
3904        themeHelper.EventBus.$on('closeProductModal',this.closeProductModal);
3905        themeHelper.EventBus.$on('updateStore', this.addProduct);
3906        themeHelper.EventBus.$on('quantityDecrease', this.quantityDecrease);
3907        themeHelper.EventBus.$on('quantityIncrease', this.quantityIncrease);
3908        themeHelper.EventBus.$on('quantityChange', this.quantityChange);
3909      },
3910      methods: {
3911        addProduct: function(actionType, productData, checkoutAddToCartCallback){
3912          var self = this;
3913          var pageViewId = window.CYBERBIZ && window.CYBERBIZ.dis && window.CYBERBIZ.dis.pageViewId;
3914          $.ajax({
3915            method: 'POST',
3916            url: '/cart/add',
3917            headers: pageViewId ? { 'X-Cyb-Page-View-Id': pageViewId } : {},
3918            data: {
3919              id: productData.id,
3920              quantity: productData.quantity,
3921            },
3922            dataType: 'json',
3923            beforeSend: function() {
3924              self.loading = true;
3925              themeHelper.ajaxLoadingMsg('loading');
3926              $('.shopcart').dropdown('hide')
3927              $('.global-cart-count').hide();
3928              $('.global-cart-loading').show();
3929              $('.global-cart-loading').html('<i class="fa fa-spinner fa-pulse" style="vertical-align: middle;"></i>');
3930            },
3931            error: function(xhr) {
3932              $('.global-cart-loading').hide();
3933              $('.global-cart-count').show();
3934              self.loading = false;
3935              if (xhr.status === 429) {
3936                themeHelper.ajaxLoadingMsg('hide', 0);
3937                self.closeProductModal();
3938                window.showAddCartRateLimitModal(5);
3939                return;
3940              }
3941              themeHelper.ajaxLoadingMsg('fail', 2000);
3942            }
3943          }).done(function(data, status, request){
3944            // product modal 立即購買按鈕
3945            window.sendAddToCartEvent && sendAddToCartEvent({
3946              price: productData.price,
3947              quantity: productData.quantity,
3948              id: productData.product.id,
3949              name: productData.product.title,
3950              category: productData.product.productType,
3951              brand: productData.product.vendor,
3952              qc: productData.variant.qc,
3953              variant: {
3954                id: productData.variant.id,
3955                title: productData.variant.title,
3956                sku: productData.variant.sku,
3957                price: productData.variant.price,
3958                qc: productData.variant.qc,
3959              },
3960              position: "商品彈出視窗",
3961              request,
3962            })
3963            if (self.isQuickBuy) {
3964              if (window.liquidHelper && window.liquidHelper.language && window.liquidHelper.language.handle) {
3965                window.location = "/" + window.liquidHelper.language.handle + "/cart";
3966              } else {
3967                window.location = "/cart";
3968              }
3969            } else {
3970              themeHelper.ajaxLoadingMsg('success');
3971              pullNavCart();
3972              $('.shopcart').dropdown('show')
3973              $('.global-cart-loading').hide();
3974              self.loading = false;
3975            }
3976            if(typeof checkoutAddToCartCallback === 'function'){
3977              var callbackData = {
3978                id: productData.id,
3979                quantity: productData.quantity,
3980                title: productData.product ? productData.product.title : productData.title || ''
3981              };
3982              checkoutAddToCartCallback(callbackData)
3983            }
3984            peh.emit('product:add_to_cart', [{
3985              variantId: productData.id,
3986              quantity: productData.quantity
3987            }], self.collectionId);
3988          }).fail(function(e){
3989            if (e.status === 429) {
3990              return;
3991            }
3992            let err_msg = e.responseJSON.err_msg;
3993            err_msg && err_msg.length > 0 ?
3994              window.msg(e.responseJSON.err_msg, 'warning').show():
3995              window.msg("加入購物車有誤,請重新嘗試", 'warning').show();
3996          })
3997        },
3998        quantityDecrease: function(cartItem, isAdded){
3999          if (cartItem.quantity > 1) {
4000            cartItem.quantity -= 1;
4001          } else {
4002            window.msg("數量不得為低於 1", 'warning').show();
4003          }
4004        },
4005        quantityIncrease: function(cartItem, isAdded){
4006          const limitQuantity = cartItem.variant.inventoryQuantity;
4007          const limitBuy = cartItem.product.limitBuy
4008          if (limitBuy && cartItem.quantity >= limitBuy) {
4009            product_limit_buy = "此商品限購 limitBuy 件".replace('limitBuy', limitBuy)
4010            window.msg(product_limit_buy, 'warning').show();
4011            return;
4012          } else if (cartItem.quantity >= liquidHelper.cartQuantityLimit) {
4013            window.msg("數量超過購買上限", 'warning').show();
4014          } else if ( cartItem.quantity < limitQuantity || limitQuantity === null ||
4015            cartItem.variant.inventoryPolicy == "continue" || shouldSkipQuantityCheck) {
4016            cartItem.quantity += 1;
4017          } else {
4018            this.showInventoryMessage(limitQuantity);
4019          }
4020        },
4021        quantityChange: function(quantity, cartItem, isAdded){
4022          const limitBuy = cartItem.product.limitBuy
4023          var limitQuantity = cartItem.variant.inventoryQuantity;
4024          var inventoryPolicy = cartItem.variant.inventoryPolicy;
4025          if (Number.isInteger(quantity)) {
4026            if (quantity >= 1) {
4027              if (limitBuy && quantity >= limitBuy) {
4028                product_limit_buy = "此商品限購 limitBuy 件".replace('limitBuy', limitBuy)
4029                window.msg(product_limit_buy, 'warning').show();
4030              } else if (quantity > liquidHelper.cartQuantityLimit) {
4031                window.msg("數量超過購買上限", 'warning').show();
4032              } else if (quantity <= limitQuantity || limitQuantity === null || inventoryPolicy == "continue" || shouldSkipQuantityCheck) {
4033                cartItem.quantity = quantity;
4034              } else {
4035                cartItem.quantity = limitQuantity;
4036                this.showInventoryMessage(limitQuantity);
4037              }
4038            } else {
4039              window.msg("數量不得為低於 1", 'warning').show();
4040            }
4041          } else {
4042            window.msg("數量輸入錯誤", 'warning').show();
4043          }
4044        },
4045        popModal: function(productUrl, collectionId, color, isCollection, isShowDescription, isQuickBuy, variantId, checkoutAddToCartCallback, categories){
4046          this.showProductModal = true;
4047          this.collectionId = collectionId;
4048          this.categories = categories || [];
4049          this.popProductUrl = productUrl;
4050          this.color = color || ''; // unused
4051          this.isCollection = isCollection || false;
4052          this.isShowDescription = isShowDescription != false;
4053          this.isQuickBuy = isQuickBuy || false;
4054          this.selectedVariantId = parseInt(variantId) || undefined;
4055          this.checkoutAddToCartCallback = checkoutAddToCartCallback;
4056          document.body.style.overflow = "hidden";
4057        },
4058        closeProductModal: function() {
4059          this.showProductModal = false;
4060          document.body.style.overflow = "";
4061        },
4062        showInventoryMessage: function(inventoryQuantity) {
4063          const stockMessage = "商品庫存剩餘 count 件".replace('count', inventoryQuantity || 0);
4064          window.msg(stockMessage, 'warning').show();
4065        },
4066      }
4067    });
4068
4069    for (const componentName in window.themeHelper.productModalComponents) {
4070      newAddCartModalApp.component(
4071        componentName,
4072        window.themeHelper.productModalComponents[componentName],
4073      );
4074    }
4075
4076    window.new_addcart_modal = newAddCartModalApp.mount();
4077  });
4078</script>
4078
4079
4080<!-- cyb_snippet new_addcart_modal end -->
4081    
4081<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/new_cart-3a2e378145f8a165.js' type='text/javascript'></script>
4081
4082  
4083</div>
4084
4085    </div>
4086
4087    <!-- Footer -->
4088    
4089
4090
4091
4092
4093
4094
4095<style>
4096  
4097  
4098  @media(min-width: 991px) {
4099    .display_x .left-content > div {
4100      max-width: calc(100% / 1);
4101    }
4102  }
4103</style>
4104
4105<div id="index-recommendation"></div>
4106
4107<footer id="footer" class="qk-fs--body qk-bg--footer_bg">
4108  
4109    
4110    <div class="qk-container display_y">
4111      <div class="footer_content qk-mg--0 qk-display--flex qk-justify--between">
4112        <div class="left-content qk-flex--1">
4113          
4114            
4115              <div class="item contact qk-text--left">
4116                
4117                  <p class="footer_title qk-fs--title qk-text--footer_text">聯絡資訊</p>
4118                
4119                <ul>
4120                  
4121                    <li class="phone qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
4122                      <span class="qk-text--footer_text">客服專線:06 224 3729</span>
4123                    </li>
4124                  
4125                  
4126                    <li class="fax qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
4127                      <span class="qk-text--footer_text">客服傳真:06-2287521</span>
4128                    </li>
4129                  
4130                  
4131                    <li class="time qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
4132                      <span class="qk-text--footer_text">客服時間:早上08:00 - 晚上10:00</span>
4133                    </li>
4134                  
4135                  
4136                    <br>
4137                    <li class="mail qk-bd_r--default qk-bd--footer_text qk-cursor--pointer qk-display--il_bk">
4138                      <a class="qk-text--footer_text" href="mailto:[email protected]">信箱:[email protected]</a>
4139                    </li>
4140                  
4141                  
4142                    <li class="address qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
4143                      <span class="qk-text--footer_text">地址:(總店) 台南市安平區安平路133號</span>
4144                    </li>
4145                  
4146                  
4147                </ul>
4148              </div>
4149              
4150          
4151        </div>
4152        <div class="right-content qk-display--flex qk-flex--column">
4153          
4154          <div class="media qk-display--il">
4155            <div class="item social_media qk-h--auto qk-float--l">
4156              <ul>
4157                
4158                  <li class="qk-display--il_bk">
4159                    <a target="_blank" rel="noopener noreferrer" href="https://www.facebook.com/ruhfu/">
4160                      <svg
4161                        class="facebook-svg"
4162                        xmlns="http://www.w3.org/2000/svg"
4163                        width="40"
4164                        height="40"
4165                        viewBox="0 0 40 40">
4166                        <path class="qk-svg--footer_text" d="M40 20.1208C40 30.1027 32.6767 38.3778 23.1167 39.8795V25.9409H27.765L28.65 20.1742H23.1167V16.4324C23.1167 14.8541 23.89 13.3174 26.3667 13.3174H28.8817V8.4073C28.8817 8.4073 26.5983 8.01729 24.4167 8.01729C19.86 8.01729 16.8833 10.779 16.8833 15.7774V20.1725H11.8183V25.9393H16.8833V39.8779C7.325 38.3745 0 30.101 0 20.1208C0 9.07564 8.955 0.120483 20 0.120483C31.045 0.120483 40 9.07398 40 20.1208Z" />
4167                      </svg>
4168                    </a>
4169                  </li>
4170                
4171                
4172                
4173                
4174              </ul>
4175            </div>
4176          </div>
4177        </div>
4178      </div>
4179    </div>
4180    
4181  <div class="copyright qk-text--footer_text qk-bd--footer_text qk-text--left qk-bd_t--default">
4182    <div class="qk-container container qk-fw--500">
4183      <span>Copyright ©</span>
4184      <a class="qk-text--link" href="/">
4185        <span>熱富安平伴手禮</span>
4186      </a>
4187      <span>All Rights Reserved.</span>
4188      <span>Designed by
4189      </span>
4190      <a
4191        class="qk-text--link"
4192        href="https://www.cyberbiz.io?utm_source=poweredbycyberbiz"
4193        target="_blank"
4194        rel="noopener noreferrer"
4195        title="Designed by CYBERBIZ">CYBERBIZ</a>.
4196    </div>
4197  </div>
4198  
4199</footer>
4200<script>
4201  $(document).ready(function() {
4202    let isDynamicLoading = false;
4203
4204    let menusData = {
4205      
4206        
4207      
4208    };
4209
4210    if (isDynamicLoading) {
4211      window.DynamicLoading.setupComponent({
4212          sectionId: '#footer',
4213          callbackData:{
4214            section: {"type":"footer","visible":true,"settings":{"footer_link":"footer","display_facebook":true,"shop_facebook":"https://www.facebook.com/ruhfu/","display_instagram":false,"shop_instagram":"https://www.instagram.com/?hl=zh-tw","display_line":false,"shop_line":"https://line.me/zh-hant/","display_youtube":false,"shop_youtube":"https://www.youtube.com/","footer_link_arrangement":"display_y"},"block_order":["default_contact_info"],"blocks":{"default_link_list":{"type":"link_list_setting","custom_name":"選單","thumbnail":"list","draggable":true,"visible":true,"settings":{"footer_link":"footer","dict_link_list_block_title":"關於我們"}},"default_contact_info":{"type":"contact_info_setting","custom_name":"聯絡資訊","thumbnail":"contactInfo","draggable":true,"visible":true,"settings":{"display_phone":"true","display_fax_number":true,"shop_fax_number":"06-2287521","display_shop_email":"true","display_shop_address":true,"display_office_time":true,"shop_office_time":"上午8:00-下午11:00","dict_contact_info_block_title":"聯絡資訊","dict_phone_number":"06 224 3729","dict_shop_email":"[email protected]","dict_shop_address":"(總店) 台南市安平區安平路133號","dict_shop_office_time":"早上08:00 - 晚上10:00"}}},"custom_name":"頁腳"},
4215            shop: {
4216              name: '熱富安平伴手禮',
4217              cyberbiz_link: 'https://www.cyberbiz.io?utm_source=poweredbycyberbiz',
4218              facebook_fan_page: '',
4219            },
4220            menus: menusData,
4221            is_display_facebook_fan_block: false
4222            },
4223          entryName:'renderFooterSection',
4224          source:'//cdn-general.cybassets.com/frontend/shop/footerSection-3a2e378145f8a165.js',
4225        });
4226    }
4227  });
4228</script>
4228
4229
4230<!-- cyb_snippet _tracking_code start -->
4231      
4231<script>
4232        window.fbAsyncInit = function() {
4233          FB.init({
4234          appId : '',
4235          xfbml : true,
4236          version : 'v24.0',
4237          });
4238        };
4239        (function(d, s, id){
4240          var js, fjs = d.getElementsByTagName(s)[0];
4241          if (d.getElementById(id)) {return;}
4242          js = d.createElement(s);
4243          js.id = id;
4244          js.src = 'https://connect.facebook.net/zh_TW/sdk.js';
4245          fjs.parentNode.insertBefore(js, fjs);
4246        }(document, 'script', 'facebook-jssdk'));
4247      </script>
4247
4248
4249
4250<script>
4251  // for scupio
4252  if (document.querySelector("meta[name=\"scupio_mid\"]")) {
4253    mid = document.querySelector("meta[name=\"scupio_mid\"]").content;
4254  } else {
4255    mid = "";
4256  }
4257  if (!window.is_scupio_sent && mid) {
4258    window._bwtm = window._bwtm || []
4259    window._bwtm.push({
4260      "mid": mid,
4261      "uid": ""
4262    });
4263  }
4264</script>
4264
4265
4266<!-- cyb_snippet _tracking_code end -->
4267
4268<script>
4269  $(document).ready(function(){
4270    if(window.location.pathname != '' && window.location.pathname != '/' ){
4271      document.getElementById('index-recommendation').style.display = 'none'
4272    }
4273  });
4274</script>
4274
4275
4276
4277
4278    <!-- Fast-Events -->
4279    <!-- cyb_snippet fast_events start -->
4280
4281
4282<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/fast_events-3a2e378145f8a165.js' type='text/javascript'></script>
4282
4283<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/fast_events-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
4284
4285<!-- cyb_snippet fast_events end -->
4286
4287    <div class="bottom-right qk-pos--fixed">
4288      <!-- gototop -->
4289      <div id="gototop" class="qk-display--none qk-text--center">
4290        <a href="javascript:void(0)" class="qk-circle qk-circle--lg qk-pos--relative qk-text--center">
4291          <i class="fas fa-chevron-up"></i>
4292        </a>
4293      </div>
4294
4295      <!-- popup -->
4296      
4297
4298
4299
4300<div id="popup-wrapper" class="qk-display--none"></div>
4301
4302<template id="popup-template">
4303  <div
4304    :class="status"
4305    v-if="hasContent"
4306    id="popup-section"
4307  >
4308    <transition name="backdrop">
4309      <div
4310        v-if="shouldShowPopup"
4311        @click.capture="minifyPopup"
4312        id="popup-backdrop"
4313        class="qk-w--100vw qk-h--100vh qk-pos--fixed qk-t--0 qk-l--0 qk-tst"
4314      >
4315      </div>
4316    </transition>
4317    <transition name="onShow">
4318      <div
4319        @click.self="showPopup"
4320        @transitionstart="updateGameStatus('start', this)"
4321        @transitionend="updateGameStatus('end', this)"
4322        class="popup-content qk-display--flex qk-align--center qk-tst qk-tst_dur--30 qk-tst_timing--ease_o"
4323      >
4324        <div
4325          v-for="block in blocks"
4326          :key="block.id"
4327          :class="[block.type, minifiedBlockClasses, block.settings.icon_size]"
4328          class="block qk-tst qk-tst_dur--30 qk-tst_timing--ease_o qk-of--auto"
4329        >
4330          <div v-if="block.type === 'image'" class="qk-pos--rel">
4331            <img
4332              v-show="!shouldShowPopup"
4333              :src="block.settings.dict_icon_image_url"
4334              class="qk-tst qk-tst_dur--30 qk-tst_timing--ease_o"
4335              alt="popup button"
4336            >
4337            <a
4338              v-show="shouldShowPopup"
4339              :href="block.settings.dict_link"
4340              :target="block.settings.target"
4341              :rel="block.settings.rel"
4342              class="qk-display--flex qk-align--center"
4343              @click="linkClicked"
4344            >
4345              <picture>
4346                <source :srcset="block.settings.dict_mobile_image_url" media="(max-width: 576px)">
4347                <source :srcset="block.settings.dict_tablet_image_url" media="(max-width: 992px)">
4348                <img
4349                  :src="block.settings.dict_image_url"
4350                  class="qk-tst qk-tst_dur--30 qk-tst_timing--ease_o"
4351                  alt="popup picture"
4352                />
4353              </picture>
4354            </a>
4355          </div>
4356          <div v-if="block.type === 'video'">
4357            <iframe
4358              :src="block.settings.dict_video_link"
4359              frameborder="0"
4360              class="qk-center--y qk-w--100 qk-h--100"
4361            ></iframe>
4362          </div>
4363          <div v-if="block.type === 'game'">
4364            <div v-show="gameStatus === 'show'" :class="{ 'show-game': gameStatus === 'show' }">
4365              <iframe
4366                class="cb-game-iframe iframe-loading"
4367                :src="getGameIframeSrc(block)"
4368                style="border: none;"
4369              >
4370                Loading
4371              </iframe>
4372            </div>
4373            <div v-show="gameStatus === 'minified'">
4374              <img
4375                src="//cdn-general.cybassets.com/game_assets/game_minified_new.png"
4376                class="qk-h--100 qk-w--100"
4377                alt="game minified icon"
4378              />
4379            </div>
4380          </div>
4381          <div
4382            v-if="block.type === 'carousel'"
4383            :id="`popup-carousel-${block.id}`"
4384          >
4385          </div>
4386        </div>
4387      </div>
4388    </transition>
4389    <transition name="backdrop">
4390      <div
4391        v-if="shouldShowPopup"
4392        @click.capture="minifyPopup"
4393        class="minify-popup qk-circle qk-circle--md qk-text--black qk-bg--white qk-bd--default qk-bd--border qk-text--center qk-cursor--pointer qk-pos--fixed"
4394      >
4395      </div>
4396    </transition>
4397  </div>
4398</template>
4399
4400<script>
4401  $(document).ready(function() {
4402    const CDN_HOST = '//cdn-general.cybassets.com';
4403    const section = {"type":"popup","visible":true,"blocks":{"popup_block_1":{"type":"image","visible":false,"settings":{"dict_image_url":"/theme_src/i18n_shoestore/default_img/popup_default.jpg","icon_size":"small"},"custom_name":"圖片"}},"block_order":["popup_block_1"],"settings":{},"custom_name":"彈窗廣告"};
4404    var popupSection = Vue.createApp({
4405      template: '#popup-template',
4406      delimiters: ['${', '}'],
4407      data() {
4408        const isOmniauthPage = ['omniauth_terms_agreement', 'omniauth_mobile/']
4409          .some(path => location.pathname.includes(path));
4410        return {
4411          status: 'minified',
4412          gameStatus: 'show',
4413          blocks: isOmniauthPage
4414            ? []
4415            : section.block_order && section.block_order.reduce(
4416                function(acc, blockId) {
4417                  const block = section.blocks[blockId];
4418                  if (block && block.visible) {
4419                    acc.push({
4420                      ...block,
4421                      id: blockId,
4422                    });
4423                  }
4424                  return acc;
4425                },
4426                [],
4427              ),
4428          hasAddedGameScript: false,
4429        };
4430      },
4431      computed: {
4432        hasContent: function() {
4433          return !!(this.blocks && this.blocks.length > 0);
4434        },
4435        minifiedBlockClasses: function() {
4436          return this.status === 'minified' ? 'qk-pointer--none qk-unselectable' : '';
4437        },
4438        shouldShowPopup: function() {
4439          return this.status === 'show';
4440        }
4441      },
4442      methods: {
4443        unhidePopup: function(storedStatus) {
4444          this.status = storedStatus;
4445          $('#popup-wrapper').removeClass('qk-display--none');
4446        },
4447        showPopup: function() {
4448          if (this.status !== 'show') {
4449            this.status = 'show';
4450            this.saveStatus(this.status);
4451          }
4452        },
4453        minifyPopup: function() {
4454          this.status = 'minified';
4455          this.saveStatus('minified');
4456        },
4457        loadStatus: function() {
4458          return JSON.parse(localStorage.getItem('popupStatus'));
4459        },
4460        saveStatus: function(status) {
4461          if (status) {
4462            localStorage.setItem('popupStatus', JSON.stringify({
4463              status: status,
4464              setTime: new Date().getTime(),
4465            }));
4466          }
4467        },
4468        linkClicked: function() {
4469          this.saveStatus('minified');
4470        },
4471        parseVideoLink: function(settings) {
4472          settings.dict_video_link = themeHelper.parseYtUrl(settings.dict_video_link);
4473        },
4474        setupImageSrc: function (settings) {
4475          settings.dict_image_url = this.addCdnHost(settings.dict_image_url);
4476          if (settings.dict_tablet_image_url) {
4477            settings.dict_tablet_image_url = this.addCdnHost(settings.dict_tablet_image_url);
4478          }
4479          if (settings.dict_mobile_image_url) {
4480            settings.dict_mobile_image_url = this.addCdnHost(settings.dict_mobile_image_url);
4481          }
4482          settings.dict_icon_image_url = this.addCdnHost(settings.dict_icon_image_url) || settings.dict_image_url;
4483        },
4484        addCdnHost: function(url) {
4485          if (!url) {
4486            return url; // only add cdn host if url is not empty
4487          }
4488
4489          try {
4490            new URL(url);
4491            return url; // already a valid url, cdn host not needed
4492          } catch {
4493            return `${CDN_HOST}${url}`;
4494          }
4495        },
4496        initStatus: function() {
4497          let newStatus = 'show';
4498          const popupStatus = this.loadStatus();
4499          const currentTime = new Date().getTime();
4500          const oneDay = 1000 * 60 * 60 * 24;
4501          const hasStoredStatus = popupStatus && currentTime - popupStatus.setTime < oneDay;
4502          const redirectedByGameLogin = !this.hasRedirectUrl() && this.redirectedByGameLogin();
4503          const isLoggingIn = this.isLoggingIn();
4504          const isCartPage = window.location.pathname.split('/').includes('carts');
4505
4506          if (hasStoredStatus && !redirectedByGameLogin) {
4507            newStatus = popupStatus.status;
4508          }
4509
4510          if (isLoggingIn) {
4511            newStatus = 'minified';
4512          } else {
4513            localStorage.removeItem('redirectedByPopup');
4514          }
4515
4516          setTimeout(() => {
4517            this.status = newStatus;
4518            this.gameStatus = newStatus;
4519            this.saveStatus(newStatus);
4520            if(!isCartPage){
4521              this.unhidePopup(newStatus);
4522            }
4523          }, 1000);
4524        },
4525        initBlocks: function() {
4526          if (this.hasContent) {
4527            this.blocks.forEach(block => {
4528              switch(block.type) {
4529                case 'image':
4530                  this.setupImageSrc(block.settings);
4531
4532                  const isOpenInNewTab = block.settings.link_open_in_new_tab;
4533                  if (isOpenInNewTab) {
4534                    block.settings.target = '_blank';
4535                    block.settings.rel = 'noopener noreferrer';
4536                  }
4537
4538                  break;
4539                case 'video':
4540                  this.parseVideoLink(block.settings);
4541                  break;
4542              }
4543            })
4544          }
4545        },
4546        getGameIframeSrc: function (block) {
4547          return `/games/${block.settings.dict_game_handle}`
4548        },
4549        updateGameStatus: function(type, element) {
4550          if (
4551            (type === 'start' && this.status === 'minified')
4552            || (type === 'end' && this.status === 'show')
4553          ) {
4554            this.gameStatus = this.status;
4555          }
4556        },
4557        setupGameRedirects: function() {
4558          window.addEventListener('pagehide', () => {
4559            const isGameActive = document.body.getElementsByClassName('show-game').length;
4560            if (isGameActive) {
4561              localStorage.setItem('redirectedByPopup', 'true');
4562              this.saveStatus('minified');
4563            }
4564          });
4565        },
4566        hasRedirectUrl: function() {
4567          return (new URLSearchParams(location.search)).has('redirect_url');
4568        },
4569        redirectedByGameLogin: function() {
4570          return localStorage.getItem('redirectedByPopup');
4571        },
4572        isLoggingIn: function() {
4573          const loginRelatedPathnames = [
4574            'account/signup',
4575            'account/login',
4576            'account/customer/password/new',
4577            'pages/terms'
4578          ];
4579          return loginRelatedPathnames.some(path => location.pathname.includes(path));
4580        }
4581      },
4582      created: function() {
4583        this.initStatus();
4584        this.initBlocks();
4585        this.setupGameRedirects();
4586      },
4587      mounted: function() {
4588        this.blocks.forEach((block) => {
4589          if (block.type === 'carousel' && block.settings.dict_c
4589arousel) {
4590            renderCarousel(`#popup-carousel-${block.id}`, {
4591              title: block.settings.dict_carousel,
4592              CDN_HOST,
4593              onLinkClick: () => this.linkClicked(),
4594            });
4595          }
4596        });
4597      },
4598    });
4599    popupSection.mount('#popup-wrapper');
4600  });
4601</script>
4601
4602
4603
4604
4605    </div>
4606
4607    <!-- ajaxloading -->
4608    <div id="ajaxloading" class="qk-display--none qk-h--100vh qk-w--100vw qk-l--0 qk-t--0 qk-pos--fixed">
4609      <div class="ajaxbody qk-pos--abs qk-l--50 qk-t--50 qk-text--center">
4610        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="73.4" height="73.4" viewBox="0 0 73.4 73.4">
4611          <circle class="circle" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="36.7" cy="36.7" r="35.2"/>
4612          <polyline class="success_path" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="23.7,36.8 32.4,45.4 49.7,28 "/>
4613          <path class="success_icon" fill="#898989" d="M32.5,46.9c-0.4,0-0.8-0.2-1.1-0.4l-8.6-8.6c-0.6-0.6-0.6-1.5,0-2.1s1.5-0.6,2.1,0l7.5,7.5L48.6,27c0.6-0.6,1.5-0.6,2.1,0s0.6,1.5,0,2.1L33.5,46.5C33.2,46.7,32.9,46.9,32.5,46.9L32.5,46.9z"/>
4614          <line class="fail_path" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="26.6" y1="26.6" x2="46.8" y2="46.8"/>
4615          <line class="fail_path" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="46.8" y1="26.6" x2="26.6" y2="46.8"/>
4616          <path class="fail_icon" fill="#898989" d="M38.7,36.7l9.1-9.1c0.6-0.6,0.6-1.5,0-2.1s-1.5-0.6-2.1,0l-9.1,9.1l-9.1-9.1c-0.6-0.6-1.5-0.6-2.1,0s-0.6,1.5,0,2.1l9.1,9.1l-9.1,9.1c-0.6,0.6-0.6,1.5,0,2.1c0.3,0.3,0.7,0.4,1.1,0.4s0.8-0.1,1.1-0.4l9.1-9.1l9.1,9.1c0.3,0.3,0.7,0.4,1.1,0.4s0.8-0.1,1.1-0.4c0.6-0.6,0.6-1.5,0-2.1L38.7,36.7z"/>
4617        </svg>
4618        <div class="success_msg title qk-display--none qk-pos--abs qk-l--0 qk-w--100 qk-text--center">已加入購物車</div>
4619        <div class="success_update_msg title qk-display--none qk-pos--abs qk-l--0 qk-w--100 qk-text--center">已更新購物車</div>
4620        <div class="fail_msg title qk-display--none qk-pos--abs qk-l--0 qk-w--100 qk-text--center">網路異常,請重新整理</div>
4621      </div>
4622    </div>
4623  </body>
4624
4625  
4625<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/sub_vendor-3a2e378145f8a165.js' type='text/javascript'></script>
4625
4626  
4626<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/theme_helper-3a2e378145f8a165.js' type='text/javascript'></script>
4626
4627
4628  <!-- theme assets -->
4629  
4629<script src='//cdn-general.cybassets.com/s/files/22345/theme/81844/assets/js/1666254759_ba945f71_main.js?1666254759' type='text/javascript'></script>
4629
4630  
4630<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/theme-3a2e378145f8a165.js' type='text/javascript'></script>
4630
4631
4632  <!-- for cache -->
4633  
4633<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/cacheable-3a2e378145f8a165.js' type='text/javascript'></script>
4633
4634</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.