main.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. // 載入共用 template
  2. $('#navbar').load('../../template/navbar.html');
  3. $('#footer').load('../../template/footer.html');
  4. $('#btn-box').load('../../template/button.html');
  5. $('#topCarousel').load('../../template/top_carousel.html');
  6. // window.onload = function () {
  7. // if (screen.width < 991) {
  8. // window.location.href = `https://m.hhh.com.tw/cases/lists/`;
  9. // }
  10. // }
  11. // window.onload = function () {
  12. // //hhh_user_api();
  13. // if (screen.width >= 991) {
  14. // window.location.href =`https://hhh.com.tw/cases/lists/`;
  15. // }
  16. // }
  17. let assignOrder = ""; // 當前排序
  18. // new, hot, recommend 排序 (預設推薦)
  19. $(".search-btn-filter button").click(function () {
  20. // 切換選取狀態
  21. $('.search-btn-filter').find('.active').removeClass('active');
  22. $(this).addClass('active');
  23. assignOrder = $(this).attr('id');
  24. dataSearch("order_by");
  25. });
  26. let page = 1; // 當前頁數
  27. let pageSize = 18; // 每頁數量
  28. let isFirstLoad = true; // 初始載入
  29. // 列表篩選
  30. async function dataSearch(type = "") {
  31. let url;
  32. $('#dataSpinner').show();
  33. $('#dataList').hide();
  34. if (isFirstLoad) {
  35. // 第一次載入使用本地 JSON 文件
  36. url = './json/cases_lists_data.json';
  37. //url = `https://m3.hhh.com.tw:18673/case_search?page=${page}&page_size=${pageSize}`;
  38. } else {
  39. // 後續使用 API
  40. url = `https://m3.hhh.com.tw:18673/case_search?page=${page}&page_size=${pageSize}`;
  41. // if (type === "order_by") {
  42. // url += `&${type}=${assignOrder}`;
  43. // }
  44. if (assignOrder === "") {
  45. url += "&order_by=new"; // 預設排序為 new
  46. } else {
  47. url += `&order_by=${assignOrder}`;
  48. }
  49. let input = $(".keywords").val();
  50. if (input !== "") {
  51. let isExist = filterList.some((item) => item.id === "keyword"); // 判斷是否已存在關鍵字
  52. const newItem = {
  53. id: "keyword",
  54. text: "關鍵字",
  55. value: input
  56. };
  57. if (!isExist) {
  58. filterList.push(newItem);
  59. createFilterHtml(newItem);
  60. } else {
  61. // 移除原本關鍵字
  62. $('.budget p.me-1').each(function () {
  63. if ($(this).text().includes('關鍵字')) {
  64. $(this).closest('.me-3').remove();
  65. }
  66. });
  67. if (filterList.length === 0) {
  68. $('#removeResultBtn').hide();
  69. }
  70. filterList = filterList.filter(item => item.text !== "關鍵字");
  71. filterList.push(newItem);
  72. createFilterHtml(newItem);
  73. }
  74. $(".keywords").val("")
  75. // url += `&keyword=${input}`;
  76. }
  77. if (filterList.length) {
  78. filterList.map(item => {
  79. if (item.id === "fee") {
  80. // 裝修預算
  81. switch (item.value) {
  82. case "100萬以下":
  83. url += `&${item.id}=1`;
  84. break;
  85. case "101~200萬":
  86. url += `&${item.id}=2`;
  87. break;
  88. case "201~300萬":
  89. url += `&${item.id}=3`;
  90. break;
  91. case "301萬以上":
  92. url += `&${item.id}=4`;
  93. break;
  94. default:
  95. break;
  96. }
  97. } else if (item.id === "area") {
  98. // 房屋坪數
  99. switch (item.value) {
  100. case "20坪以下":
  101. url += `&${item.id}=1`;
  102. break;
  103. case "21-30坪":
  104. url += `&${item.id}=2`;
  105. break;
  106. case "31-50坪":
  107. url += `&${item.id}=3`;
  108. break;
  109. case "51坪以上":
  110. url += `&${item.id}=4`;
  111. break;
  112. default:
  113. break;
  114. }
  115. } else {
  116. url += `&${item.id}=${item.value}`;
  117. }
  118. });
  119. }
  120. }
  121. try {
  122. const response = await axios.get(url);
  123. console.log('response.data.cases', response.data.cases);
  124. let totalCount = response.data.total_count.toLocaleString();
  125. let totalPages = Math.ceil(totalCount / pageSize);
  126. $("#totalCount").html(totalCount);
  127. if (totalPages) {
  128. $('.filter-list .pagination').show();
  129. setPagination(totalPages); // 分頁處理
  130. } else {
  131. $('.filter-list .pagination').hide();
  132. }
  133. let resultHtml = '';
  134. if (response.data.cases.length) {
  135. response.data.cases.forEach((item) => {
  136. let tagList = item.CaseTag.split(',');
  137. let tagsHtml = '';
  138. tagList.forEach((tag) => {
  139. if (tag !== "") {
  140. tagsHtml += `<span class="tag-item" data-tag="${tag}">${tag}</span>`;
  141. }
  142. });
  143. resultHtml += `
  144. <div class="col-md-4 mb-4">
  145. <a href="${item.DesignerLink}">
  146. <div class="card lists-card">
  147. <img src="${item.CaseCoverImg}" class="cover-img" alt="${item.DesignerName} ${item.DesignerTitle}">
  148. <div class="card-body d-flex flex-column">
  149. <div class="d-flex align-items-center">
  150. <div class="person-img me-3 me-md-2 me-lg-3" style="background-image: url('${item.DesignerCoverImg}');"></div>
  151. <section>
  152. <h5 class="text-muted mb-2">${item.DesignerTitle}</h5>
  153. <h6 class="mb-0 text-dark">
  154. <span class="font-weight-bold">
  155. ${item.DesignerName}
  156. </span>
  157. 設計師
  158. </h6>
  159. </section>
  160. </div>
  161. <p class="mt-3 text-dark title">${item.CaseTitle}</p>
  162. <div class="tags-container my-3 me-auto">${tagsHtml}</div>
  163. <small class="d-block ms-auto mt-auto date-item">上架日期 ${item.CaseSdate}</small>
  164. </div>
  165. </div>
  166. </a>
  167. </div>`;
  168. });
  169. } else {
  170. resultHtml += "<p class='text-center mt-5'>找不到符合的資料,請重新搜尋。</p>"
  171. }
  172. $('#dataList').html(resultHtml);
  173. setTimeout(() => {
  174. $('#dataList').show();
  175. $('#dataSpinner').hide();
  176. }, 100)
  177. // 更新初始載入狀態
  178. if (isFirstLoad) {
  179. isFirstLoad = false;
  180. }
  181. } catch (error) {
  182. console.log("error", error);
  183. }
  184. }
  185. dataSearch();
  186. // ga 設計師搜尋 (熱搜關鍵字)
  187. $(".search-bar-keyword li a").on("click", (e) => {
  188. dataLayer.push({
  189. 'event': 'Click_Promo_Keyword',
  190. 'promo_keyword': `${e.target.innerText}`,
  191. 'promo_category': 'Designer_Search'
  192. });
  193. });
  194. // 新的搜尋欄位處理
  195. function ga4_keywords() {
  196. let elements = document.querySelectorAll(".me-1");
  197. // 創建一個數組來存儲所有元素的文本內容
  198. let keywords = Array.from(elements).map(element => {
  199. let text = element.innerText;
  200. // 查找 "關鍵字:" 的起始位置
  201. let keywordIndex = text.indexOf("關鍵字:");
  202. if (keywordIndex !== -1) {
  203. // 提取 "關鍵字:" 後面的部分
  204. return text.substring(keywordIndex + "關鍵字:".length).trim();
  205. }
  206. return ""; // 如果沒有找到 "關鍵字:",返回空字符串
  207. });
  208. // 過濾掉空字符串,並將剩餘文本合併為一個字符串
  209. let keyword = keywords.filter(text => text !== "").join(", ");
  210. dataLayer.push({
  211. 'event': 'View_Search_Results',
  212. 'search_term': `${keyword}`,
  213. 'search_category': 'Designer_Search'
  214. });
  215. }
  216. document.getElementById("keywordInput").addEventListener("keydown", function (event) {
  217. if (event.key === "Enter") {
  218. ga4_keywords();
  219. }
  220. });