浏览代码

新增專欄列表頁

SyuanYu 10 月之前
父节点
当前提交
7b49f0e0fe

+ 1 - 8
builder/lists/index.html

@@ -450,14 +450,7 @@
           <div class="col-md-9">
             <div class="d-flex flex-wrap align-items-center">
               <div class="text-primary d-flex flex-wrap align-items-center search-tab-result">
-                <!-- <span class="me-3">
-                <span class="budget">
-                  接案地區:不拘
-                  <img src="https://hhh.com.tw/assets/images/section/icon/close-btn-search.svg" alt="close-btn-search">
-                </span>
-              </span> -->
-
-                <!-- <button type="button" class="btn btn-light btn-sm text-muted px-3">全部清除</button> -->
+                <!-- 動態載入 -->
               </div>
 
               <button type="button" id="removeResultBtn" class="btn btn-light btn-sm text-muted px-3">全部清除</button>

+ 1 - 1
builder/lists/js/main.js

@@ -9,7 +9,7 @@ let pageSize = 18; // 每頁數量
 let isFirstLoad = true; // 初始載入
 
 // 列表篩選
-async function dataSearch() {
+async function dataSearch(type = "") {
   let url;
   $('#builderSpinner').show();
   $('#builderList').hide();

+ 1 - 8
cases/lists/index.html

@@ -696,14 +696,7 @@
           <div class="col-md-9">
             <div class="d-flex flex-wrap align-items-center">
               <div class="text-primary d-flex flex-wrap align-items-center search-tab-result">
-                <!-- <span class="me-3">
-                <span class="budget">
-                  接案地區:不拘
-                  <img src="https://hhh.com.tw/assets/images/section/icon/close-btn-search.svg" alt="close-btn-search">
-                </span>
-              </span> -->
-
-                <!-- <button type="button" class="btn btn-light btn-sm text-muted px-3">全部清除</button> -->
+                <!-- 動態載入 -->
               </div>
 
               <button type="button" id="removeResultBtn" class="btn btn-light btn-sm text-muted px-3">全部清除</button>

+ 1 - 1
cases/lists/js/main.js

@@ -20,7 +20,7 @@ let pageSize = 18; // 每頁數量
 let isFirstLoad = true; // 初始載入
 
 // 列表篩選
-async function dataSearch() {
+async function dataSearch(type = "") {
   let url;
   $('#dataSpinner').show();
   $('#dataList').hide();

+ 14 - 0
columns/detail/index.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+
+<body>
+
+</body>
+
+</html>

+ 1 - 0
columns/lists/img/loading.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="40" height="41.965" viewBox="0 0 40 41.965"><defs><style>.a{fill:#ee751b;}</style></defs><circle class="a" cx="4.89" cy="4.89" r="4.89" transform="translate(16.094)"/><ellipse class="a" cx="2.933" cy="2.933" rx="2.933" ry="2.933" transform="translate(18.05 36.099)"/><ellipse class="a" cx="4.401" cy="4.401" rx="4.401" ry="4.401" transform="translate(4.487 5.464)"/><circle class="a" cx="2.445" cy="2.445" r="2.445" transform="translate(30.626 31.609)"/><ellipse class="a" cx="3.911" cy="3.911" rx="3.911" ry="3.911" transform="translate(0 18.056)"/><circle class="a" cx="1.955" cy="1.955" r="1.955" transform="translate(36.091 20.01)"/><path class="a" d="M5.065,20.213a3.422,3.422,0,1,0,4.839,0A3.419,3.419,0,0,0,5.065,20.213Z" transform="translate(1.403 11.424)"/><ellipse class="a" cx="1.466" cy="1.466" rx="1.466" ry="1.466" transform="translate(31.603 8.434)"/></svg>

+ 342 - 0
columns/lists/index.html

@@ -0,0 +1,342 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <!-- Google Tag Manager -->
+  <script>(function (w, d, s, l, i) {
+      w[l] = w[l] || []; w[l].push({
+        'gtm.start':
+          new Date().getTime(), event: 'gtm.js'
+      }); var f = d.getElementsByTagName(s)[0],
+        j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
+          'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
+    })(window, document, 'script', 'dataLayer', 'GTM-W3RJHTZ');</script>
+  <!-- End Google Tag Manager -->
+
+  <script async="" src="https://www.googletagmanager.com/gtm.js?id=GTM-W3RJHTZ"></script>
+  <!-- <script src="https://connect.facebook.net/signals/config/585285442299590?v=2.9.100&amp;r=stable" async=""></script> -->
+
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <meta http-equiv="X-UA-Compatible" content="ie=edge, Chrome=1" />
+  <meta http-equiv="Cache-Control" content="no-cache" />
+  <meta name="copyright" content="2021 © 幸福空間 │ All Rights Reserved." />
+  <meta name="creation-date" content="2021-08-05 12:00:04 GTM+8" />
+  <meta name="description" content="讓幸福室內設計,走進您的生活,解決您的裝潢問
+    題!幸福空間是台灣最大的室內設計、設計師與設計個案影音平台之一,找尋室內設計點子與案例我
+    們一定能幫助你!" />
+  <meta name="distribution" content="Taiwan" />
+  <meta name="keywords" content="" />
+  <meta name="revisit-after" content="1 days" />
+  <meta name="robots" content="all" />
+  <meta name="format-detection" content="telephone=no" />
+
+  <meta property="og:description" content="讓幸福室內設計,走進您的生活,解決您的裝潢問題!
+    幸福空間是台灣最大的室內設計、設計師與設計個案影音平台之一,找尋室內設計點子與案例我們一定能幫助
+    你!" />
+  <meta property="og:site_name" content="幸福空間" />
+  <meta property="og:title" content="幸福空間 - 台灣最大的室內設計、設計師與設計個案影音平台" />
+  <meta property="og:type" content="website" />
+  <meta property="og:locale" content="zh_TW" />
+
+  <title>幸福空間 - 室內設計、裝潢、居家生活、影音平台</title>
+
+  <link rel="icon" href="../../img/favicon.ico" />
+
+  <!-- Fontawesome -->
+  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
+    integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous" />
+  <!-- Bootstrap -->
+  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet"
+    integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous" />
+  <!-- axios -->
+  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
+  <!-- Google Font -->
+  <link rel="preconnect" href="https://fonts.googleapis.com" />
+  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
+  <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;600&display=swap" rel="stylesheet" />
+  <!-- Slick -->
+  <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" />
+  <!-- CSS -->
+  <link rel="stylesheet" href="../../css/reset.css" />
+  <link rel="stylesheet" href="../../css/lists.css" />
+  <link rel="stylesheet" href="../../css/all.css" />
+  <!-- 結構化資料 -->
+  <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "LocalBusiness",
+        "@id": "https://hhh.com.tw/",
+        "image": ["https://hhh.com.tw/_nuxt/img/def1b0a.svg"],
+        "name": "幸福空間股份有限公司",
+        "address": "110台北市信義區菸廠路88號五樓之6",
+        "url": "https://hhh.com.tw/",
+        "telephone": "+886-2-6617-0123"
+      }
+    </script>
+
+  <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "Organization",
+        "url": "https://hhh.com.tw/",
+        "logo": "https://hhh.com.tw/_nuxt/img/def1b0a.svg",
+        "name": "幸福空間",
+        "sameAs": [
+          "https://www.facebook.com/hhhfb/",
+          "https://page.line.me/ovs4341s",
+          "https://www.youtube.com/user/gorgeousspace",
+          "https://www.instagram.com/gorgeous_space/"
+        ],
+        "contactPoint": [
+          {
+            "@type": "ContactPoint",
+            "areaServed": "TW",
+            "telephone": "+886-2-6617-0123",
+            "contactType": "customer service",
+            "availableLanguage": "Chinese"
+          }
+        ]
+      }
+    </script>
+
+  <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "WebSite",
+        "name": "幸福空間-室內設計、裝潢、居家生活、影音平台",
+        "author": "幸福空間",
+        "url": "https://hhh.com.tw/",
+        "potentialAction": {
+          "@type": "SearchAction",
+          "target": "https://hhh.com.tw/search/lists/case/{search_term_string}-keyword/",
+          "query-input": "required name=search_term_string"
+        }
+      }
+    </script>
+
+  <script type="application/ld+json">
+    {
+      "@context": "https://schema.org",
+        "@type": "BreadcrumbList",
+          "itemListElement": [
+            {
+              "@type": "ListItem",
+              "position": 1,
+              "name": "幸福空間",
+              "item": "https://hhh.com.tw/"
+            },
+            {
+              "@type": "ListItem",
+              "position": 2,
+              "name": "設計師列表頁",
+              "item": "https://hhh.com.tw/designers/lists/"
+            }
+          ]
+    }
+	</script>
+</head>
+
+<body>
+  <!-- 動態載入 -->
+  <div id="topCarousel"></div>
+  <div id="navbar"></div>
+
+  <!-- searchModal -->
+  <div class="modal fade search-modal" id="searchModal" tabindex="-1" aria-labelledby="searchModalLabel"
+    aria-hidden="true">
+    <div class="modal-dialog modal-dialog-centered modal-lg">
+      <div class="modal-content">
+        <div class="modal-body">
+          <div class="input-group">
+            <input type="text" class="form-control keyword" placeholder="請輸入關鍵字" aria-label="Please enter keywords"
+              aria-describedby="search-input" />
+            <span class="input-group-text" id="search-input">全站搜尋</span>
+          </div>
+        </div>
+        <section class="keyword-list">
+          <span>熱搜關鍵字:</span>
+          <ul>
+            <li>客變</li>
+            <li>小坪數</li>
+            <li>老屋翻新</li>
+            <li>收納</li>
+            <li>軟裝佈置</li>
+            <li>新手裝修</li>
+            <li>風水</li>
+            <li>北歐風</li>
+          </ul>
+        </section>
+      </div>
+    </div>
+  </div>
+
+  <div class="container d-flex flex-column align-items-center justify-content-center list-content">
+    <!-- <h2 class="list-headline"></h2> -->
+
+    <!-- 搜尋 -->
+    <div class="row w-100 justify-content-center mt-5">
+      <div class="col-md-10">
+        <div class="card search-card">
+          <div class="card-body p-4">
+            <div class="input-group input-group-lg mb-2">
+              <input type="text" id="keywordInput" placeholder="請輸入關鍵字" aria-label="請輸入關鍵字" aria-describedby="searchbar"
+                class="form-control border-primary keywords" autocomplete="off">
+              <div class="input-group-append">
+                <button onclick="page = 1; dataSearch('keyword');" type="button" data-ga="View_Search_Results"
+                  class="input-group-text">搜尋</button>
+              </div>
+
+              <!-- 自動補全 -->
+              <div id="autocomplete-list" class="autocomplete-items"></div>
+            </div>
+
+            <div class="search-bar-keyword d-flex mt-3 pl-4">
+              <p class="ms-3 text-muted">熱搜關鍵字</p>
+              <ul class="d-flex flex-wrap ps-3">
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">客變</a>
+                </li>
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">小坪數</a>
+                </li>
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">老屋翻新</a>
+                </li>
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">收納</a>
+                </li>
+                <!-- <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">軟裝佈置</a>
+                </li>
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">新手裝修</a>
+                </li>
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">風水</a>
+                </li> -->
+                <li>
+                  <a href="javascript:void(0)" data-ga="Click_Promo_Keyword">北歐風</a>
+                </li>
+              </ul>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- 篩選 -->
+    <div class="row w-100 mt-5 filter-list">
+      <div class="col-12">
+        <p class="mb-3 text-muted">
+          總共 <span id="totalCount" class="text-primary font-weight-bold fs-4"></span> 筆符合條件
+        </p>
+
+        <div class="category-btn">
+          <div class="d-flex flex-wrap main">
+            <button>所有文章</button>
+            <button>編輯精選</button>
+            <button>居家設計</button>
+            <button>裝修前線</button>
+            <button>生活PLUS</button>
+            <button>品牌好物</button>
+            <button>房市焦點</button>
+            <button>主題企劃</button>
+          </div>
+
+          <div class="sub">
+            <!-- 動態載入 -->
+          </div>
+        </div>
+
+        <div class="row">
+          <div class="col-md-9">
+            <!-- <div class="d-flex flex-wrap align-items-center">
+              <div class="text-primary d-flex flex-wrap align-items-center search-tab-result">
+              </div>
+
+              <button type="button" id="removeResultBtn" class="btn btn-light btn-sm text-muted px-3">全部清除</button>
+            </div> -->
+          </div>
+
+          <div class="col-md-3">
+            <div class="d-flex justify-content-end search-btn-filter">
+              <button id="hot">
+                人氣
+              </button>
+
+              <span class="mx-1">|</span>
+
+              <button id="new" class="active">
+                最新
+              </button>
+            </div>
+          </div>
+        </div>
+
+        <!-- 讀取圖示 -->
+        <div class="text-center my-5" id="dataSpinner">
+          <div class="spinner-border text-primary" role="status">
+            <span class="visually-hidden">Loading...</span>
+          </div>
+        </div>
+
+        <!-- 設計師列表 -->
+        <div class="row mt-5" id="dataList">
+          <!-- 動態載入 -->
+        </div>
+
+        <div id="columnLoading" class="my-5 text-center">
+          <img src="./img/loading.svg" alt="">
+        </div>
+
+        <!-- 分頁 -->
+        <!-- <div class="d-flex justify-content-center my-5">
+          <nav aria-label="Page navigation example">
+            <ul class="pagination border list-pagination">
+              <li class="page-item">
+                <a class="page-link" href="#" aria-label="Previous">
+                  <span aria-hidden="true"><</span>
+                </a>
+              </li>
+              <li class="page-item">
+                <a class="page-link" href="#">1</a>
+              </li>
+              <li class="page-item">
+                <a class="page-link" href="#">2</a>
+              </li>
+              <li class="page-item">
+                <a class="page-link" href="#">3</a>
+              </li>
+              <li class="page-item">
+                <a class="page-link" href="#" aria-label="Next">
+                  <span aria-hidden="true">></span>
+                </a>
+              </li>
+            </ul>
+          </nav>
+        </div> -->
+      </div>
+    </div>
+  </div>
+
+  <!-- 動態載入 -->
+  <div id="btn-box"></div>
+  <div id="footer" class="d-none d-lg-block"></div>
+
+  <!-- jQuery -->
+  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
+  <!-- Slick -->
+  <script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
+  <!-- Bootstrap -->
+  <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.1/dist/umd/popper.min.js"
+    integrity="sha384-W8fXfP3gkOKtndU4JGtKDvXbO53Wy8SZCQHczT5FMiiqmQfUpWbYdTil/SxwZgAN"
+    crossorigin="anonymous"></script>
+  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.min.js"
+    integrity="sha384-skAcpIdS7UcVUC05LJ9Dxay8AXcDYfBJqt1CJ85S/CFujBsIzCIv+l9liuYLaMQ/"
+    crossorigin="anonymous"></script>
+  <script src="../../js/lists.js"></script>
+  <script src="./js/main.js"></script>
+</body>
+
+</html>

+ 288 - 0
columns/lists/js/main.js

@@ -0,0 +1,288 @@
+// 載入共用 template
+$('#navbar').load('../../template/navbar.html');
+$('#footer').load('../../template/footer.html');
+$('#btn-box').load('../../template/button.html');
+$('#topCarousel').load('../../template/top_carousel.html');
+
+// $("#columnLoading").hide(); // 隱藏讀取動畫
+
+let assignOrder = ""; // 當前排序
+
+// new, hot, recommend 排序 (預設推薦)
+$(".search-btn-filter button").click(function () {
+  // 切換選取狀態
+  $('.search-btn-filter').find('.active').removeClass('active');
+  $(this).addClass('active');
+  assignOrder = $(this).attr('id');
+  dataSearch("order_by");
+});
+
+
+let columnType = ""; // 主要類別
+let columnSubType = ""; // 次要類別
+
+// 次要類別選單
+let subCategory = [
+  {
+    title: "編輯精選",
+    list: ["居家趨勢", "人氣排行", "建築設計", "風格選店", "公益活動", "展演資訊"]
+  },
+  {
+    title: "居家設計",
+    list: ["小宅規劃", "老屋翻新", "風格營造", "配色佈置", "好宅特輯", "設計提案"]
+  },
+  {
+    title: "裝修前線",
+    list: ["新聞最前線", "預算分配", "施工流程", "建材知識", "裝潢撇步"]
+  },
+  {
+    title: "生活PLUS",
+    list: ["居家風水", "家事清潔", "收納技巧", "改造修繕", "退休好幸福"]
+  },
+  {
+    title: "品牌好物",
+    list: ["家具家飾", "美型家電", "推薦廚衛", "居家好物", "優質建材", "品牌新訊"]
+  },
+  {
+    title: "房市焦點",
+    list: ["房市新聞", "建案特搜", "買屋賣屋", "房貸稅務", "租房須知"]
+  }
+];
+
+// 主要篩選按鈕
+$('.category-btn .main button').on('click', function () {
+  let btnText = $(this)[0].innerText;
+
+  if (btnText === "所有文章") {
+    columnType = "";
+  } else if (btnText === "主題企劃") {
+    window.open("https://hhh.com.tw/topic/lists/1-page/new-sort/", "_blank"); // 另開頁面
+    return;
+  } else {
+    columnType = btnText;
+  }
+
+  page = 1;
+  columnSubType = "";
+
+  $('.category-btn .main button').removeClass('active');
+  $(this).toggleClass('active');
+
+  $('#dataList').html("");
+  dataSearch();
+
+  let subBtnHtml = [];
+
+  subCategory.map(item => {
+    if (btnText !== "所有文章" && btnText !== "主題企劃") {
+      if (item.title === btnText) {
+        $('.category-btn .sub').show();
+
+        item.list.forEach(item => {
+          let dom = `<button onclick="clickSubBtn(event, '${item}')">${item}</button>`;
+          subBtnHtml.push(dom);
+        })
+
+        $('.category-btn .sub').html(subBtnHtml);
+      }
+    } else {
+      $('.category-btn .sub').hide();
+    }
+  })
+});
+
+// 次要篩選按鈕
+function clickSubBtn(event, val) {
+  page = 1;
+  columnSubType = val;
+
+  $('.category-btn .sub button').removeClass('active');
+  $(event.currentTarget).toggleClass('active');
+
+  $('#dataList').html("");
+  dataSearch();
+}
+
+let page = 1; // 當前頁數
+let pageSize = 18; // 每頁數量
+let isFirstLoad = true; // 初始載入
+let noData = false; // 無資料
+
+// 列表篩選
+async function dataSearch(type = "") {
+  let url;
+
+  if (isFirstLoad) {
+    $('#dataSpinner').show();
+    // 第一次載入使用本地 JSON 文件
+    // url = './json/designers_lists_data.json';
+    url = `https://m3.hhh.com.tw:18673/column_search?page=${page}&page_size=${pageSize}`;
+  } else {
+    // 後續使用 API
+    url = `https://m3.hhh.com.tw:18673/column_search?page=${page}&page_size=${pageSize}`;
+
+    if (assignOrder === "") {
+      url += "&order_by=new"; // 預設排序為 new
+    } else {
+      url += `&order_by=${assignOrder}`;
+    }
+
+    let input = $(".keywords").val();
+
+    if (input !== "") {
+      url += `&keyword=${input}`;
+      // $('#dataList').html("");
+      if (type === "keyword") {
+        $('#dataList').html("");
+      }
+    }
+
+    // 篩選按鈕
+    if (columnType !== "") {
+      url += `&ctype=${columnType}`;
+    }
+
+    if (columnSubType !== "") {
+      url += `&ctype_sub=${columnSubType}`;
+    }
+  }
+
+  try {
+    const response = await axios.get(url);
+    console.log('response.data.columns', response.data.columns);
+
+    let totalCount = response.data.total_count;
+    $("#totalCount").html(totalCount);
+
+    let resultHtml = '';
+
+    if (response.data.columns.length) {
+      if (response.data.columns.length === 18) {
+        noData = false;
+      } else {
+        noData = true;
+      }
+
+      response.data.columns.forEach((item, index) => {
+        let tagList = item.ColumnTag.split(',');
+        let tagsHtml = '';
+
+        tagList.forEach((tag) => {
+          if (tag !== "") {
+            tagsHtml += `<span class="tag-item" data-tag="${tag}">${tag}</span>`;
+          }
+        });
+
+        resultHtml += `
+          <div class="col-md-4 mb-4 ${index === 1 ? 'mt-4' : ''}" style="${index > 2 && index % 3 !== 1 ? 'margin-top: -2rem;' : ''}">
+            <a href="${item.ColumnLink}">
+              <div class="card lists-card h-auto">
+                <img src="${item.ColumnCoverImg}" class="cover-img" alt="${item.ColumnTitle}">
+                  <div class="card-body d-flex flex-column">
+                    <h5 class="text-dark title">${item.ColumnTitle}</h5>
+                    <div class="tags-container columns-tag mt-3 me-auto">${tagsHtml}</div>
+                  </div>
+              </div>
+            </a>
+          </div>`;
+      });
+
+      $('#dataList').append(resultHtml);
+    } else {
+      resultHtml += "<p class='text-center mt-5'>找不到符合的資料,請重新搜尋。</p>"
+      $('#dataList').append(resultHtml);
+      $("#columnLoading").hide();
+      noData = true;
+    }
+
+    setTimeout(() => {
+      // $('#dataList').show();
+      $('#dataSpinner').hide();
+      $("#columnLoading").hide();
+    }, 100)
+
+    setTimeout(() => {
+      isLoading = false;
+      if (response.data.columns.length === 18) {
+        $("#columnLoading").show(); // 顯示讀取動畫
+      } else {
+        $("#columnLoading").hide(); // 隱藏讀取動畫
+      }
+    }, 2000)
+
+    // 更新初始載入狀態
+    if (isFirstLoad) {
+      isFirstLoad = false;
+    }
+  } catch (error) {
+    console.log("error", error);
+  }
+}
+
+dataSearch();
+
+let isLoading = false;
+
+// 判斷是否捲動到底部
+$(window).on('scroll', function () {
+  // 資料 < 18 筆取消判斷
+  if (noData) {
+    return;
+  }
+
+  let scrollTop = $(window).scrollTop(); // 捲軸頂部位置
+  let windowHeight = $(window).height(); // 視窗高度
+  let footerOffset = $('#footer').offset().top; // 取得 footer 位置
+
+  if (!isLoading && scrollTop + windowHeight >= footerOffset - 150) {
+    isLoading = true;
+    // page++;
+
+    setTimeout(() => {
+      page++;
+      dataSearch();
+    }, 300)
+  }
+});
+
+// ga 設計師搜尋 (熱搜關鍵字)
+$(".search-bar-keyword li a").on("click", (e) => {
+  dataLayer.push({
+    'event': 'Click_Promo_Keyword',
+    'promo_keyword': `${e.target.innerText}`,
+    'promo_category': 'Designer_Search'
+  });
+});
+
+// 新的搜尋欄位處理
+function ga4_keywords() {
+  let elements = document.querySelectorAll(".me-1");
+  // 創建一個數組來存儲所有元素的文本內容
+  let keywords = Array.from(elements).map(element => {
+    let text = element.innerText;
+    // 查找 "關鍵字:" 的起始位置
+    let keywordIndex = text.indexOf("關鍵字:");
+    if (keywordIndex !== -1) {
+      // 提取 "關鍵字:" 後面的部分
+      return text.substring(keywordIndex + "關鍵字:".length).trim();
+    }
+    return ""; // 如果沒有找到 "關鍵字:",返回空字符串
+  });
+
+  // 過濾掉空字符串,並將剩餘文本合併為一個字符串
+  let keyword = keywords.filter(text => text !== "").join(", ");
+
+  dataLayer.push({
+    'event': 'View_Search_Results',
+    'search_term': `${keyword}`,
+    'search_category': 'Designer_Search'
+  });
+}
+
+document.getElementById("keywordInput").addEventListener("keydown", function (event) {
+  if (event.key === "Enter") {
+    ga4_keywords();
+  }
+});
+
+

+ 46 - 0
css/lists.css

@@ -221,6 +221,41 @@
   font-weight: 500;
   transition: all 0.3s;
 }
+.filter-list .category-btn button {
+  color: #212529;
+  transition: all 0.3s;
+}
+.filter-list .category-btn .main button {
+  width: 18%;
+  margin: 0.6em;
+  padding: 1.25rem 0.5rem;
+  font-weight: 400;
+  border: 1px solid transparent;
+  border-radius: 5px;
+  background-color: #fff;
+  box-shadow: 2px 3px 5px 2px #eee;
+}
+.filter-list .category-btn .sub {
+  display: none;
+  margin: 2rem auto;
+  padding: 1.5rem 1rem;
+  border-radius: 5px;
+  background-color: #F4F4F4;
+}
+.filter-list .category-btn .sub button {
+  padding: 0.5rem 1rem;
+  margin: 0 0.7rem;
+  color: #727679;
+  font-weight: 400;
+  border-radius: 5px;
+  border: 1px solid #E0E0E0;
+}
+.filter-list .category-btn .main button:hover, .filter-list .category-btn .main button.active,
+.filter-list .category-btn .sub button:hover,
+.filter-list .category-btn .sub button.active {
+  color: #EE751B;
+  border: 1px solid #EE751B;
+}
 
 #builderList .card h5 {
   font-size: 1.125rem;
@@ -271,4 +306,15 @@
 
 #columnLoading {
   display: none;
+}
+@keyframes rotate {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+#columnLoading img {
+  animation: rotate 2s linear infinite;
 }/*# sourceMappingURL=lists.css.map */

文件差异内容过多而无法显示
+ 0 - 0
css/lists.css.map


+ 63 - 0
css/lists.scss

@@ -255,6 +255,55 @@
       }
     }
   }
+
+  .category-btn {
+    button {
+      color: #212529;
+      transition: all .3s;
+    }
+
+    .main {
+      button {
+        width: 18%;
+        margin: .6em;
+        padding: 1.25rem 0.5rem;
+        font-weight: 400;
+        border: 1px solid transparent;
+        border-radius: 5px;
+        background-color: #fff;
+        box-shadow: 2px 3px 5px 2px #eee;
+      }
+    }
+
+    .sub {
+      display: none;
+      margin: 2rem auto;
+      padding: 1.5rem 1rem;
+      border-radius: 5px;
+      background-color: #F4F4F4;
+
+      button {
+        padding: .5rem 1rem;
+        margin: 0 .7rem;
+        color: #727679;
+        font-weight: 400;
+        border-radius: 5px;
+        border: 1px solid #E0E0E0;
+      }
+    }
+
+    .main,
+    .sub {
+      button {
+
+        &:hover,
+        &.active {
+          color: #EE751B;
+          border: 1px solid #EE751B;
+        }
+      }
+    }
+  }
 }
 
 #builderList {
@@ -316,4 +365,18 @@
 
 #columnLoading {
   display: none;
+
+  @keyframes rotate {
+    from {
+      transform: rotate(0deg);
+    }
+
+    to {
+      transform: rotate(360deg);
+    }
+  }
+
+  img {
+    animation: rotate 2s linear infinite;
+  }
 }

+ 1 - 8
designers/lists/index.html

@@ -897,14 +897,7 @@
           <div class="col-md-9">
             <div class="d-flex flex-wrap align-items-center">
               <div class="text-primary d-flex flex-wrap align-items-center search-tab-result">
-                <!-- <span class="me-3">
-                <span class="budget">
-                  接案地區:不拘
-                  <img src="https://hhh.com.tw/assets/images/section/icon/close-btn-search.svg" alt="close-btn-search">
-                </span>
-              </span> -->
-
-                <!-- <button type="button" class="btn btn-light btn-sm text-muted px-3">全部清除</button> -->
+                <!-- 動態載入 -->
               </div>
 
               <button type="button" id="removeResultBtn" class="btn btn-light btn-sm text-muted px-3">全部清除</button>

+ 1 - 1
js/lists.js

@@ -112,7 +112,7 @@ function removeBtn(element, id, val) {
 $('.keywords').on('keydown', function (event) {
   if (event.key === 'Enter') {
     page = 1;
-    dataSearch();
+    dataSearch("keyword");
   }
 });
 

+ 3 - 10
videos/lists/index.html

@@ -61,7 +61,7 @@
   <link rel="stylesheet" href="../../css/reset.css" />
   <link rel="stylesheet" href="../../css/lists.css" />
   <link rel="stylesheet" href="../../css/all.css" />
-    <!-- 結構化資料 -->
+  <!-- 結構化資料 -->
   <script type="application/ld+json">
       {
         "@context": "https://schema.org",
@@ -184,7 +184,7 @@
                 <button onclick="page = 1; dataSearch();" type="button" data-ga="View_Search_Results"
                   class="input-group-text">搜尋</button>
               </div>
-              
+
               <!-- 自動補全 -->
               <div id="autocomplete-list" class="autocomplete-items"></div>
             </div>
@@ -548,14 +548,7 @@
           <div class="col-md-9">
             <div class="d-flex flex-wrap align-items-center">
               <div class="text-primary d-flex flex-wrap align-items-center search-tab-result">
-                <!-- <span class="me-3">
-                <span class="budget">
-                  接案地區:不拘
-                  <img src="https://hhh.com.tw/assets/images/section/icon/close-btn-search.svg" alt="close-btn-search">
-                </span>
-              </span> -->
-
-                <!-- <button type="button" class="btn btn-light btn-sm text-muted px-3">全部清除</button> -->
+                <!-- 動態載入 -->
               </div>
 
               <button type="button" id="removeResultBtn" class="btn btn-light btn-sm text-muted px-3">全部清除</button>

部分文件因为文件数量过多而无法显示