PageSourceSearch

https://www.tkww.hk/static/tkwwtemplate/v5/js/utils/search.js?template=202608171733

js tkww.hk collected 2026-10-01 10:36:29 UTC 19,625 bytes, 492 lines download raw bytes

1import Route from "../../../js/utils/route.js"
2import CONFIG from "../../../js/utils/config.js"
3import Search from "../../../js/api/model/search/index.js?template=202410311433"
4import Util from "../../../js/utils/util.js"
5var searchColumnId = $(".searchColumnId").eq(0).attr("value")
6var searchColumnName = $(".searchColumnName").eq(0).attr("value")
7var searchColumnFileName = $(".searchColumnFileName").eq(0).attr("value")
8var searchColumnFilePath = $(".searchColumnFilePath").eq(0).attr("value")
9var {column} = globalData
10var isSelf = column!=null&&column.uuid==searchColumnId?true:false//判断是否在搜索页面
11var routeQuery = Route.getQueryObject()
12var previewId = routeQuery["previewId"]
13var matchingConditionOptions = routeQuery["matchingConditionOptions"]
14matchingConditionOptions=Number(matchingConditionOptions?matchingConditionOptions:1)
15var sortOrderOptions = routeQuery["sortOrderOptions"]//0 進行時間倒序搜索 2 進行相關度搜索
16sortOrderOptions=Number(sortOrderOptions?sortOrderOptions:0)
17var storyType = routeQuery["storyType"]
18storyType=Number(storyType?storyType:0)
19var preColumnIdG = routeQuery["preColumnId"]//上一栏目的columnId目前用来做今日大公点击日历搜索
20var searchKeyword = routeQuery["searchKeyword"]
21//searchKeyword = searchKeyword?decodeURI(searchKeyword):""//中文解码
22var keywordWay = routeQuery["keywordWay"]
23keywordWay = keywordWay?keywordWay:0
24var $searchMore = ""//显示更多按钮选择器
25var $loadMore = ""//加載中选择器
26var $noData = ""//缺省图选择器
27var page = 0//分页
28const size = 8
29var dateVal = routeQuery["dateVal"]//日期
30var includeSubColumn = routeQuery["includeSubColumn"]
31var $searchNumber = ""
32var $searchList = ""
33var $searchMenuBox = ""
34const noMoreText = "已經没有更多";
35//加载数据
36async function searchStory(){
37  if(searchKeyword == null || searchKeyword == "undefined" || searchKeyword == ""){
38    return null;
39  }
40  var channelId = "tkww,takungpao"
41  var staticUrl = CONFIG.BASE_STATIC_URL;// 用来显示默认图片的
42  $searchMore.css("display","none")
43  $loadMore.css("display","block")
44  var res = await Search.storyList({
45    channelId,
46    searchKeyword,
47    sortOrderOptions,
48    matchingConditionOptions,
49    storyType,
50    keywordWay,
51    page,
52    size
53  })
54  if(Util.isNull(res))return $noData.css("display","block")
55  $searchNumber.html(`找到全部<span class='result-sum-inner'>${res.data.totalElements}</span>条結果`).show()
56  $searchMenuBox.css("background-color","rgba(0,0,0,0)")
57  $(".search-menu-unit:first-of-type,.result-sum").css("margin-left","0")
58  let resData = res.data.content
59  for(var i=0;i<resData.length;i++){
60    var html = ""
61    var tubUrl = resData[i].thumbnails != undefined && resData[i].thumbnails.length > 0?resData[i].thumbnails[0].url + "?x-oss-process=image/resize,w_750":resData[i].properties.bookId != undefined? staticUrl+'column/searchResult/epaper/'+resData[i].properties.bookId+'.jpg':staticUrl + 'index-HKTKWW/story-img-default.png';
62    html += '<div class="story-list-unit">'
63    html += '  <div class="story-list-unit-inner">'
64    html += '    <div class="story-list-unit-top">'
65    html += '      <div class="img-box-box">'
66    html += '        <a class="img-box" rel="noopener norefferrer" title="'+ resData[i].title +'" href="'+ resData[i].url +'">'
67    html += '          <img class="img-box-filter" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">'
68    html += '          <img class="img-box-img" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">'
69    html += '        </a>'
70    html += '      </div>'
71    html += '    </div>'
72    html += '    <div class="story-list-unit-content">'
73    html += '      <a class="story-list-unit-title twoLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].title +'">'+ resData[i].title +'</a>'
74    html += '      <a class="story-list-unit-text threeLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].summary +'">'+ resData[i].summary +'</a>'
75    html += '      <div class="story-list-unit-bottom">'
76    /*let tagStr = resData[i].tags?resData[i].tags.join(","):""
77    if(tagStr!==""){
78      html += '        <div class="common-column-list-unit-bottom-tag" onclick="tagsClick(this)">'+tagStr+'</div>'
79    }*/
80    html += '       <span class="story-list-unit-bottom-time">'
81    html +='          <span class="story-list-unit-bottom-time1">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[0]+'</span>'+(Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime}).length>1?(' <span class="story-list-unit-bottom-time2">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[1]+'</span>'):'')
82    html +='        </span>'
83    html += '      </div>'
84    html += '    </div>'
85    html += '  </div>'
86    html += '</div>'
87    let $html = $(html)
88    var oldText ="";
89    var newText="";
90    //添加标题 26字符长度(英文56字符)
91    newText = oldText = resData[i].highlightTitle;
92    if (oldText.replace(/[^\x00-\xff]/g, "00").length > 52) {
93      newText = oldText;
94    }
95    newText = showKey(newText,searchKeyword);//红色高亮
96    $html.find(".story-list-unit-title").html(newText);
97    //添加摘要 50字符长度(英文100字符)
98    // 没有高亮content的时候显示摘要
99    newText = oldText = "..." + resData[i].highlightContent +"...";
100    if(resData[i].highlightContent===''){
101      newText = oldText = "..." + resData[i].summary +"...";
102    }
103    if (oldText.replace(/[^\x00-\xff]/g, "00").length > 110) {
104      // newText = oldText.substring(0,50)+"...";
105      newText = oldText;
106    }
107    newText = showKey(newText,searchKeyword);//高亮
108    $html.find(".story-list-unit-text").html(newText)
109    $searchList.append($html);
110  }
111  //写入分页
112  page++
113  $searchMore.css("display","flex")
114  $loadMore.css("display","none")
115  if(page >= res.data.totalPages ){
116    $loadMore.text(noMoreText);
117    $loadMore.css("display","block")
118    $searchMore.css("display","none")
119  }
120  if(resData.length){
121    $searchList.css("display","flex")
122  }
123  if(resData.length==0&&page==1){
124    $noData.css("display","block")
125    $searchMore.css("display","none")
126    $loadMore.css("display","none")
127  }
128}
129//红色高亮
130function showKey(allStr,keyStr){
131  if(keyStr == "" || keyStr == "undefined" || keyStr==null){
132    return allStr;
133  }
134  var reg=new RegExp("("+keyStr+")","g");
135  var newstr=allStr.replace(reg,"<font color=#C21010>$1</font>");
136  return newstr;
137}
138//加载更多
139window.searchStoryMore = function(){
140  if($searchMore.text()===noMoreText)return
141  if(!dateVal){
142    searchStory()
143  }else{
144    searchStroyByDate()
145  }
146}
147
148//搜索按钮触发的事件
149window.searchStoryBut = function({
150  inputStr="",
151  isBlank=true,
152  blankUseMatching=false,
153  isCi=true,
154  dateVal="",
155  includeSubColumn,
156  preColumnId
157}){
158  var openUrl = previewId?`${window.location.origin}/template/preview/channels/tkww/columns/${searchColumnId}?previewId=${previewId.replace(/^([^/]+\/[^/]+)(\/.*)?$/, `$1/${searchColumnFilePath}`)}&fileName=${searchColumnFileName}`:`${CONFIG.BASE_URL}${searchColumnName}`//判断本地环境还是线上环境,确定将跳转的路径
159  // 新CI埋点
160  var searchInput = inputStr?$(`${inputStr}`).val():searchKeyword
161  
162  if(searchInput.indexOf("</script>")!==-1){
163      return
164  }
165  
166  if(isCi&&searchInput)mini_paq.push(["eventSearch", "search_keyword", searchInput,{}])
167  //searchInput = encodeURI(searchInput)
168  openUrl += `${previewId?'&':'?'}searchKeyword=${searchInput}&keywordWay=${keywordWay}`
169  if(dateVal){
170    openUrl += `&dateVal=${dateVal}&includeSubColumn=${includeSubColumn}&preColumnId=${isBlank?preColumnId:preColumnIdG}`
171  }
172  if(isBlank){
173    if(blankUseMatching){
174      openUrl += `&matchingConditionOptions=${matchingConditionOptions}`
175      openUrl += `&sortOrderOptions=${sortOrderOptions}`
176    }
177    if(window.top.location.href.indexOf("/canyou")===-1){
178      window.open(openUrl,"_blank")
179    }else{
180      window.location.href=openUrl
181    }
182    return
183  }
184  openUrl += `&matchingConditionOptions=${matchingConditionOptions}`
185  if(sortOrderOptions)openUrl += `&sortOrderOptions=${sortOrderOptions}`
186  if(storyType)openUrl += `&storyType=${storyType}`
187  if(page)openUrl += `&page=${page}`
188  window.location.href = openUrl
189}
190
191//内容页点击标签触发的事件
192window.searchKeywords = function(e,incomingMatchingConditionOptions=2){
193  searchKeyword = $(e).text();
194  keywordWay = 1
195  matchingConditionOptions = incomingMatchingConditionOptions
196  searchStoryBut({isCi:false,blankUseMatching:true})
197  // 新CI埋点
198  mini_paq.push(["eventSearch", "search_tag", searchKeyword,{}])
199}
200
201//内容页点击标签触发的事件
202window.searchKeywords1 = function(e,incomingMatchingConditionOptions=2){
203  searchKeyword = e;
204  keywordWay = 1
205  matchingConditionOptions = incomingMatchingConditionOptions
206  searchStoryBut({isCi:false,blankUseMatching:true})
207  // 新CI埋点
208  mini_paq.push(["eventSearch", "search_tag", searchKeyword,{}])
209}
210
211//内容页点击标签触发的事件
212window.searchTags = function(e,i){
213  var aa = $(".key_word");
214  searchKeyword = $(aa[i]).text();
215  keywordWay = 1
216  searchStoryBut({isCi:false})
217  // 新CI埋点
218  mini_paq.push(["eventSearch", "search_tag", searchKeyword,{}]);
219}
220
221//毫秒转成 2018-09-20 20:00:00
222function getDate(str) {
223  var oDate = new Date(str),
224      oYear = oDate.getFullYear(),
225      oMonth = oDate.getMonth()+1,
226      oDay = oDate.getDate(),
227      oHour = oDate.getHours(),
228      oMin = oDate.getMinutes(),
229      oSen = oDate.getSeconds(),
230      oTime = addZero(oMonth) +'-'+ addZero(oDay) +' '+ addZero(oHour) +':'+ addZero(oMin) +':'+addZero(oSen);
231  return oTime;
232}
233function dateFormat(fmt, str) {
234  var date = new Date(str.replace(/-/g, '/').replace('T', ' ').replace('.000+0000', '') + ' GMT');
235  let ret;
236  const opt = {
237    "Y+": date.getFullYear().toString(),        // å¹´
238    "m+": (date.getMonth() + 1).toString(),     // 月
239    "d+": date.getDate().toString(),            // 日
240    "H+": date.getHours().toString(),           // 时
241    "M+": date.getMinutes().toString(),         // 分
242    "S+": date.getSeconds().toString()          // 秒
243    // 有其他格式化字符需求可以继续添加,必须转化成字符串
244  };
245  for (let k in opt) {
246    ret = new RegExp("(" + k + ")").exec(fmt);
247    if (ret) {
248      //fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")));
249      fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (pad(opt[k],ret[1].length)));
250    };
251  };
252  return fmt;
253}
254//补零操作
255function addZero(num){
256  if(parseInt(num) < 10){
257    num = '0'+num;
258  }
259  return num;
260}
261
262//初始化“匹配条件”浮动
263function initCondition({unitClass,options}){
264  //如果有传路由参数
265  var $unitClass = $(`.${unitClass}`)
266  if(options){
267    for(let i = 0;i < $unitClass.length;i++){
268      var $unitClassEq = $unitClass.eq(i)
269      if($unitClassEq.attr("value")==options){
270        $unitClassEq.addClass(`${unitClass}-active`)//选中样式
271        return
272      }
273    }
274  }
275  //如果没有传路由参数
276  $unitClass.eq(0).addClass(`${unitClass}-active`)//选中样式
277}
278//设置搜索条件
279window.searchConfigChange = function({target,changeName}){
280  var data = {isBlank:false,isCi:false,inputStr:"#search-body-input"}
281  switch(changeName){
282    case "matchingConditionOptions":{
283      matchingConditionOptions = Number($(target).attr("value"))
284      break;
285    }
286    case "storyType":{
287      storyType = Number($(target).attr("value"))
288      break;
289    }
290    case "sortOrderOptions":{
291      sortOrderOptions = Number($(target).attr("value"))
292      break;
293    }
294                   }
295  if(dateVal){
296    data.dateVal = dateVal
297    data.includeSubColumn = includeSubColumn
298  }
299  searchStoryBut(data)
300}
301//查询某个栏目下某天的稿件
302async function searchStroyByDate(){
303  var channelId = "takungpao"
304  var staticUrl = CONFIG.BASE_STATIC_URL;// 用来显示默认图片的
305  $searchMenuBox.css("background-color","rgba(0,0,0,0)")
306  $searchMore.css("display","none")
307  $loadMore.css("display","block")
308  var res = await Search.dateStoryList({channelId,columnId:preColumnIdG,dateVal,page,includeSubColumn,sortOrderOptions,size})
309  if(Util.isNull(res))return $noData.css("display","block")
310  let resData = res.data
311  // 写入数据
312  for(var i=0;i<resData.length;i++){
313    var html = ""
314    var tubUrl = resData[i].thumbnails != undefined && resData[i].thumbnails.length >
314 0?resData[i].thumbnails[0].url + "?x-oss-process=image/resize,w_750":resData[i].properties.bookId != undefined? staticUrl+'column/searchResult/epaper/'+resData[i].properties.bookId+'.jpg':staticUrl + 'index-HKTKWW/story-img-default.png';
315    html += '<div class="story-list-unit">'
316    html += '  <div class="story-list-unit-inner">'
317    html += '    <div class="story-list-unit-top">'
318    html += '      <div class="img-box-box">'
319    html += '        <a class="img-box" rel="noopener norefferrer" title="'+ resData[i].title +'" href="'+ resData[i].url +'">'
320    html += '          <img class="img-box-filter" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">'
321    html += '          <img class="img-box-img" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">'
322    html += '        </a>'
323    html += '      </div>'
324    html += '    </div>'
325    html += '    <div class="story-list-unit-content">'
326    html += '      <a class="story-list-unit-title twoLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].title +'">'+ resData[i].title +'</a>'
327    html += '      <a class="story-list-unit-text threeLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].summary +'">'+ resData[i].summary +'</a>'
328    html += '      <div class="story-list-unit-bottom">'
329    /*let tagStr = resData[i].tags?resData[i].tags.join(","):""
330    if(tagStr!==""){
331      html += '        <div class="common-column-list-unit-bottom-tag" onclick="tagsClick(this)">'+tagStr+'</div>'
332    }*/
333    html += '       <span class="story-list-unit-bottom-time">'
334    html +='          <span class="story-list-unit-bottom-time1">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[0]+'</span>'+(Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime}).length>1?(' <span class="story-list-unit-bottom-time2">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[1]+'</span>'):'')
335    html +='        </span>'
336    html += '      </div>'
337    html += '    </div>'
338    html += '  </div>'
339    html += '</div>'
340    
341    let $html = $(html)
342    var oldText ="";
343    var newText="";
344    //添加标题 26字符长度(英文56字符)
345    newText = oldText = resData[i].title;
346    if (oldText.replace(/[^\x00-\xff]/g, "00").length > 52) {
347      // newText = oldText.substring(0,26)+"...";
348      newText = oldText;
349    }
350    $html.find(".story-list-unit-title").html(newText);
351    //添加摘要 50字符长度(英文100字符)
352    newText = oldText = resData[i].summary;
353    if (oldText.replace(/[^\x00-\xff]/g, "00").length > 110) {
354      // newText = oldText.substring(0,50)+"...";
355      newText = oldText;
356    }
357    $html.find(".story-list-unit-text").html(newText);
358    $searchList.append($html);
359  }
360  page++
361  $searchMore.css("display","flex")
362  $loadMore.css("display","none")
363  if(resData.length == 0){
364    $loadMore.text(noMoreText);
365    $searchMore.css("display","none")
366    $loadMore.css("display","block")
367  }
368  if(resData.length){
369    $searchList.css("display","flex")
370  }
371  if(resData.length==0&&page==1){
372    $noData.css("display","block")
373    $searchMore.css("display","none")
374    $loadMore.css("display","none")
375  }
376}
377//初始化搜索
378function initSearchInput(){
379  $('#search-body-input').bind('keydown','#search-body-input', function (event) {
380    var event = window.event || arguments.callee.caller.arguments[0];
381    //console.log(".search-top-left",event.keyCode,$(this).attr("id"))
382    var inputId = $(this).attr("id")
383    if (event.keyCode == 13 && inputId == "search-body-input"){
384      searchStoryBut({inputStr:"#search-body-input",isBlank:false});
385      // $(".header-search .searchbutton").click();
386      return;
387    }
388  });
389  $('#search-body-input').focus(function(){
390    $('.search-input-box').css("border","solid 1px #e20413")
391  })
392  $('#search-body-input').blur(function(){
393    $('.search-input-box').css("border","0")
394  })
395}
396async function initSearch(){
397  $('#hot-words-input-2').css('display','block')
398  //$("input[name='keywordWay']").val(0);
399  //没有搜索词显示缺省页面
400  $searchMore = $(".add-more-v5").eq(0)
401  $loadMore = $(".add-more-loading-v5").eq(0)
402  $noData = $(".search-no-data").eq(0)
403  $searchNumber = $(".result-sum").eq(0)
404  $searchList = $("#search-list").eq(0)
405  $searchMenuBox = $(".search-menu-box").eq(0)
406  initSearchInput()
407  //没有日期参数时
408  if(!dateVal){
409    if(!searchKeyword){
410      $noData.css("display","block")
411      return
412    }
413    if(searchKeyword)$("input#search-body-input").val(searchKeyword)
414    await searchStory()
415  }else{
416    //有日期参数时
417    //去除不能使用的筛选项目
418    /*$(".search-order-tool").eq(0).css("display","none")
419            $("#selectedMatchingCondition").parents(".search-order-list-unit").css("display","none")
420            $(".date-choose").eq(0).css("display","block")
421            $(".search-order").eq(0).css("margin-bottom","20px")*/
422    $(".search-menu").eq(0).css("display","none")
423    $searchNumber.css("display","none")
424    $(".search-input-box").eq(0).css("display","none")
425    //加载数据
426    await searchStroyByDate()
427  }
428}
429//站点稿件标签点击事件
430window.tagsClick = function(e,tag=""){
431  searchKeyword = $(e).text();
432  //如果读取不到元素标签(可写入文字的标签)的文字,读取元素标签(不可写入文字的标签,如img)的title
433  if(searchKeyword===''){
434    searchKeyword = $(e).attr("title")
435  }
436  if(tag!==""){
437    searchKeyword = tag
438  }
439  // 新CI埋点
440  mini_paq.push(["eventSearch", "search_tag",searchKeyword,{}])
441  keywordWay = "tag"
442  /*inputId="",
443  isBlank=true,
444  blankUseMatching=false,
445  isCi=true,
446  dateVal="",
447  includeSubColumn,
448  preColumnId*/
449  //let openUrl = previewId?`${window.location.origin}/template/preview/channels/tkww/columns/658e459fe4b05c885816f716?previewId=${previewId}&fileName=column-tag`:`${CONFIG.BASE_URL}tagSearch`//判断本地环境还是线上环境,确定将跳转的路径
450  //searchInput = encodeURI(searchInput)
451  //openUrl += `${previewId?'&':'?'}tag=${searchKeyword}`
452  let openUrl = `${CONFIG.BASE_URL}tagSearch?tag=${searchKeyword}`
453  if(window.top.location.href.indexOf("/canyou")===-1){
454    window.open(openUrl,"_blank")
455  }else{
456    window.location.href=openUrl
457  }
458}
459//质朴长存法 by lifesinger
460function pad(num, n) {
461  var len = num.toString().length;
462  while(len < n) {
463    num = "0" + num;
464    len++;
465  }
466  return num;
467}
468//初始化搜索页面
469function initSearchResult(){
470  if(!isSelf)return
471  /*初始化搜全文*/
472  initCondition({
473    unitClass:"radio-menu-unit",
474    options:matchingConditionOptions
475  })
476  /*初始化类型*/
477  initCondition({
478    unitClass:"search-menu-unit",
479    options:storyType
480  })
481  initCondition({
482    unitClass:"radio-menu-unit1",
483    options:sortOrderOptions
484  })
485  /*searchStoryInitSortOrder()
486          typeSearchFn()
487          scrooFn()*/
488  initSearch()
489}
490$(function (){
491  initSearchResult()
492});

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.