yangchenggong1_wd

desc:同步 搜索主页(4.0)

Showing 21 changed files with 554 additions and 2 deletions
@@ -177,6 +177,10 @@ export class HttpUrlUtils { @@ -177,6 +177,10 @@ export class HttpUrlUtils {
177 */ 177 */
178 static readonly SEARCH_HINT_DATA_PATH: string = "/api/rmrb-search-api/zh/c/hints"; 178 static readonly SEARCH_HINT_DATA_PATH: string = "/api/rmrb-search-api/zh/c/hints";
179 /** 179 /**
  180 + * 搜索主页 热词
  181 + */
  182 + static readonly SEARCH_HOTS_DATA_PATH: string = "/api/rmrb-search-api/zh/c/hots";
  183 + /**
180 * 早晚报列表 184 * 早晚报列表
181 * 根据页面id获取页面楼层列表 185 * 根据页面id获取页面楼层列表
182 * https://pdapis.pdnews.cn/api/rmrb-bff-display-zh/display/zh/c/pageInfo?pageId=28927 186 * https://pdapis.pdnews.cn/api/rmrb-bff-display-zh/display/zh/c/pageInfo?pageId=28927
@@ -527,6 +531,11 @@ export class HttpUrlUtils { @@ -527,6 +531,11 @@ export class HttpUrlUtils {
527 return url 531 return url
528 } 532 }
529 533
  534 + static getSearchHotsDataUrl() {
  535 + let url = HttpUrlUtils.HOST_SIT + HttpUrlUtils.SEARCH_HOTS_DATA_PATH
  536 + return url
  537 + }
  538 +
530 539
531 540
532 // static getYcgCommonHeaders(): HashMap<string, string> { 541 // static getYcgCommonHeaders(): HashMap<string, string> {
@@ -86,4 +86,6 @@ export class WDRouterPage { @@ -86,4 +86,6 @@ export class WDRouterPage {
86 86
87 //播报页面 87 //播报页面
88 static broadcastPage = new WDRouterPage("phone", "ets/pages/broadcast/BroadcastPage"); 88 static broadcastPage = new WDRouterPage("phone", "ets/pages/broadcast/BroadcastPage");
  89 + //搜索主页
  90 + static searchPage = new WDRouterPage("wdComponent", "ets/pages/SearchPage");
89 } 91 }
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 * 方案一 使用动画 + 定时器 4 * 方案一 使用动画 + 定时器
5 * 方案二 使用容器组件Swiper(当前) 5 * 方案二 使用容器组件Swiper(当前)
6 */ 6 */
  7 +import { WDRouterPage, WDRouterRule } from 'wdRouter'
7 import SearcherAboutDataModel from '../../model/SearcherAboutDataModel' 8 import SearcherAboutDataModel from '../../model/SearcherAboutDataModel'
8 9
9 const TAG = "FirstTabTopSearchComponent" 10 const TAG = "FirstTabTopSearchComponent"
@@ -56,6 +57,9 @@ export struct FirstTabTopSearchComponent{ @@ -56,6 +57,9 @@ export struct FirstTabTopSearchComponent{
56 .padding({left:15}) 57 .padding({left:15})
57 .backgroundImage($r('app.media.background_search')) 58 .backgroundImage($r('app.media.background_search'))
58 .backgroundImageSize(ImageSize.Cover) 59 .backgroundImageSize(ImageSize.Cover)
  60 + .onClick(()=>{
  61 + WDRouterRule.jumpWithPage(WDRouterPage.searchPage)
  62 + })
59 } 63 }
60 64
61 } 65 }
  1 +import router from '@ohos.router'
  2 +import SearcherAboutDataModel from '../../model/SearcherAboutDataModel'
  3 +import { SearchHistoryItem } from '../../viewmodel/SearchHistoryItem'
  4 +import { SearchHistoryComponent } from './SearchHistoryComponent'
  5 +import { SearchHotsComponent } from './SearchHotsComponent'
  6 +
  7 +const TAG = "SearchComponent"
  8 +
  9 +@Component
  10 +export struct SearchComponent {
  11 + @State searchTextData: string[] = []
  12 + @State hasInputContent: boolean = false
  13 + @State hasChooseSearch: boolean = false
  14 + private swiperController: SwiperController = new SwiperController()
  15 + @State searchText: string = ''
  16 + controller: TextInputController = new TextInputController()
  17 + @State searchHistoryData: SearchHistoryItem[] = []
  18 + scroller: Scroller = new Scroller()
  19 +
  20 + aboutToAppear() {
  21 + //获取提示滚动
  22 + this.getSearchHint()
  23 + //获取搜索历史
  24 + this.getSearchHistoryData()
  25 + }
  26 +
  27 + getSearchHint() {
  28 + SearcherAboutDataModel.getSearchHintData(getContext(this)).then((value) => {
  29 + if (value != null) {
  30 + this.searchTextData = value
  31 + }
  32 + }).catch((err: Error) => {
  33 + console.log(TAG, JSON.stringify(err))
  34 + })
  35 + }
  36 +
  37 + getSearchHistoryData() {
  38 + this.searchHistoryData = SearcherAboutDataModel.getSearchHistoryData()
  39 + }
  40 +
  41 + build() {
  42 + Column() {
  43 + this.searchInputComponent()
  44 + if (!this.hasInputContent) {
  45 + Scroll(this.scroller) {
  46 + Column() {
  47 + SearchHistoryComponent({ searchHistoryData: $searchHistoryData })
  48 +
  49 + //分隔符
  50 + Divider()
  51 + .width('100%')
  52 + .height('1lpx')
  53 + .color($r('app.color.color_EDEDED'))
  54 + .strokeWidth('1lpx')
  55 +
  56 + SearchHotsComponent()
  57 + }
  58 + }
  59 + .scrollable(ScrollDirection.Vertical)
  60 + .scrollBar(BarState.Off)
  61 + .width('100%')
  62 + .height('100%')
  63 + .padding({ left: '31lpx', right: '31lpx' })
  64 + } else {
  65 + if (this.hasChooseSearch) {
  66 + //搜索结果
  67 +
  68 + //搜索结果为null(空布局 + 为你推荐)
  69 + } else {
  70 + //联想搜索
  71 + }
  72 + }
  73 + }.height('100%')
  74 + .width('100%')
  75 + }
  76 +
  77 + //搜索框
  78 + @Builder searchInputComponent() {
  79 + Row() {
  80 + //左
  81 + Stack({ alignContent: Alignment.Start }) {
  82 + if (this.searchTextData != null && this.searchTextData.length > 0 && !this.hasInputContent) {
  83 + Swiper(this.swiperController) {
  84 + ForEach(this.searchTextData, (item: string, index: number) => {
  85 + Text(item)
  86 + .fontWeight('400lpx')
  87 + .fontSize('25lpx')
  88 + .fontColor($r('app.color.color_666666'))
  89 + .lineHeight('35lpx')
  90 + .textAlign(TextAlign.Start)
  91 + .maxLines(1)
  92 + .textOverflow({ overflow: TextOverflow.Clip })
  93 + .margin({ left: '40lpx' })
  94 + })
  95 + }
  96 + .loop(true)
  97 + .autoPlay(true)
  98 + .interval(3000)
  99 + .indicator(false)
  100 + .vertical(true)
  101 + .enabled(false)
  102 + .focusable(false)
  103 + }
  104 + TextInput({ text: this.searchText, placeholder: '', controller: this.controller })
  105 + .caretColor(Color.Pink)
  106 + .fontSize('27lpx')
  107 + .fontColor(Color.Black)
  108 + .onChange((value: string) => {
  109 + this.searchText = value
  110 + if (this.searchText.length > 0) {
  111 + this.hasInputContent = true
  112 + } else {
  113 + this.hasInputContent = false
  114 + }
  115 + })
  116 + .backgroundColor($r('app.color.color_transparent'))
  117 + }
  118 + .backgroundImage($r('app.media.search_page_input_bg'))
  119 + .backgroundImageSize(ImageSize.Cover)
  120 + .layoutWeight(1)
  121 + .height('69lpx')
  122 +
  123 + //右
  124 + Text("取消")
  125 + .textAlign(TextAlign.Center)
  126 + .fontWeight('400lpx')
  127 + .fontSize('31lpx')
  128 + .lineHeight('58lpx')
  129 + .fontColor($r('app.color.color_222222'))
  130 + .width('125lpx')
  131 + .height('58lpx')
  132 + .onClick(() => {
  133 + router.back()
  134 + // SearcherAboutDataModel.putSearchHistoryData(this.searchText)
  135 + // if(StringUtils.isNotEmpty(this.searchText)){
  136 + // if(this.searchHistoryData.length===10){
  137 + // this.searchHistoryData.pop()
  138 + // }
  139 + // this.searchHistoryData.push(new SearchHistoryItem(this.searchText))
  140 + // }
  141 + })
  142 + }
  143 + .height('85lpx')
  144 + .padding({ left: '31lpx' })
  145 + .alignItems(VerticalAlign.Center)
  146 + .margin({ bottom: '36lpx' })
  147 + }
  148 +}
  1 +import { SearchHistoryItem } from '../../viewmodel/SearchHistoryItem'
  2 +
  3 +/**
  4 + * 搜索历史
  5 + */
  6 +@Component
  7 +export struct SearchHistoryComponent{
  8 + @Link searchHistoryData:SearchHistoryItem[]
  9 +
  10 + build(){
  11 + Column(){
  12 + Row(){
  13 + Text("搜索历史")
  14 + .textAlign(TextAlign.Center)
  15 + .fontWeight('400lpx')
  16 + .fontSize('27lpx')
  17 + .lineHeight('38lpx')
  18 + .fontColor($r('app.color.color_999999'))
  19 + .height('38lpx')
  20 +
  21 + Image($r('app.media.search_delete_icon'))
  22 + .height('31lpx')
  23 + .width('31lpx')
  24 + .interpolation(ImageInterpolation.High)
  25 + .objectFit(ImageFit.Cover)
  26 + .onClick(()=>{
  27 + //清空记录
  28 + })
  29 + }.justifyContent(FlexAlign.SpaceBetween)
  30 + .margin({bottom:'17lpx'})
  31 + .width('100%')
  32 +
  33 + Grid(){
  34 + ForEach(this.searchHistoryData,(item:SearchHistoryItem,index:number)=>{
  35 + GridItem(){
  36 + Row(){
  37 + Text(`${item.searchContent}`)
  38 + .height('23lpx')
  39 + .fontColor($r('app.color.color_222222'))
  40 + .fontSize('23lpx')
  41 + .maxLines(1)
  42 + .constraintSize({maxWidth:index%2 === 0?'270lpx':'250lpx'})
  43 + .textOverflow({ overflow: TextOverflow.Ellipsis })
  44 + .textAlign(TextAlign.Start)
  45 +
  46 + Image($r('app.media.search_item_delete_icon'))
  47 + .width('46lpx')
  48 + .height('46lpx')
  49 + .margin({right:'31lpx',left:'4lpx'})
  50 + .interpolation(ImageInterpolation.High)
  51 + .objectFit(ImageFit.Cover)
  52 +
  53 + Blank()
  54 +
  55 + if(index%2 === 0 && index != this.searchHistoryData.length-1 ){
  56 + Divider()
  57 + .width('2lpx')
  58 + .height('23lpx')
  59 + .color($r('app.color.color_CCCCCC'))
  60 + .strokeWidth('2lpx')
  61 + .vertical(true)
  62 + }
  63 + }.height('100%')
  64 + .alignItems(VerticalAlign.Center)
  65 + .width('100%')
  66 + .margin({left:index%2 === 1?'23lpx':'0lpx'})
  67 + }.onClick(()=>{
  68 + })
  69 + .height('46lpx')
  70 + })
  71 + }
  72 + .height(this.getCategoryViewHeight())
  73 + .rowsTemplate(this.getCategoryRowTmpl())
  74 + .columnsTemplate('1fr 1fr')
  75 + .rowsGap('23lpx')
  76 + }
  77 + .margin({bottom:'46lpx'})
  78 + }
  79 +
  80 + getCategoryRowCount() {
  81 + return Math.ceil(this.searchHistoryData.length / 2);
  82 + }
  83 +
  84 + getCategoryRowTmpl() {
  85 + const count = this.getCategoryRowCount();
  86 + const arr: string[] = new Array(count || 1).fill('1fr');
  87 + console.log('tmpl ', arr.join(' '))
  88 + return arr.join(' ');
  89 + }
  90 +
  91 + getCategoryViewHeight() {
  92 + return `${46 * this.getCategoryRowCount()}lpx`;
  93 + }
  94 +}
  1 +import SearcherAboutDataModel from '../../model/SearcherAboutDataModel'
  2 +import { SearchHotContentItem } from '../../viewmodel/SearchHotContentItem'
  3 +
  4 +const TAG = "SearchHotsComponent"
  5 +
  6 +/**
  7 + * 热门搜索
  8 + */
  9 +@Component
  10 +export struct SearchHotsComponent{
  11 + @State searchHotsData:SearchHotContentItem[] = []
  12 +
  13 + aboutToAppear(){
  14 + //获取搜索热词
  15 + this.getSearchHotsData()
  16 + }
  17 +
  18 + getSearchHotsData(){
  19 + SearcherAboutDataModel.getSearchHotsData(getContext(this)).then((value)=>{
  20 + if(value!=null){
  21 + this.searchHotsData = value
  22 + }
  23 + }).catch((err:Error)=>{
  24 + console.log(TAG,JSON.stringify(err))
  25 + })
  26 + }
  27 +
  28 + build(){
  29 + Column(){
  30 + Row() {
  31 + Image($r('app.media.search_hot_icon'))
  32 + .width('46lpx')
  33 + .height('46lpx')
  34 + .objectFit(ImageFit.Auto)
  35 + .margin({right:'8lpx'})
  36 + .interpolation(ImageInterpolation.Medium)
  37 +
  38 + Text("热门搜索")
  39 + .textAlign(TextAlign.Center)
  40 + .fontWeight('600lpx')
  41 + .fontSize('33lpx')
  42 + .lineHeight('46lpx')
  43 + .fontColor($r('app.color.color_222222'))
  44 + .height('38lpx')
  45 + }
  46 + .width('100%')
  47 +
  48 + List(){
  49 + ForEach(this.searchHotsData,(item:SearchHotContentItem,index:number)=>{
  50 + ListItem(){
  51 + Column(){
  52 + Column(){
  53 + Row(){
  54 + Row(){
  55 + if(item.sequence <=3){
  56 + Image(item.sequence===1?$r('app.media.search_hot_num1'):item.sequence===2?$r('app.media.search_hot_num2'):$r('app.media.search_hot_num3'))
  57 + .width('27lpx')
  58 + .height('35lpx')
  59 + .objectFit(ImageFit.Auto)
  60 + .margin({right:'12lpx'})
  61 + .interpolation(ImageInterpolation.High)
  62 + }else {
  63 + Text(`${item.sequence}`)
  64 + .height('31lpx')
  65 + .fontColor($r('app.color.color_666666'))
  66 + .fontSize('27lpx')
  67 + .fontWeight('400lpx')
  68 + .lineHeight('31lpx')
  69 + .margin({right:'12lpx'})
  70 + }
  71 + Text(`${item.hotEntry}`)
  72 + .textOverflow({ overflow: TextOverflow.Ellipsis })
  73 + .fontColor($r('app.color.color_222222'))
  74 + .fontSize('31lpx')
  75 + .maxLines(1)
  76 + .fontWeight('400lpx')
  77 + .lineHeight('42lpx')
  78 + }.layoutWeight(1)
  79 + if(item.mark!=0){
  80 + Image(item.mark===1?$r('app.media.search_hots_mark1'):$r('app.media.search_hots_mark2'))
  81 + .width('42lpx')
  82 + .height('31lpx')
  83 + .objectFit(ImageFit.Auto)
  84 + .interpolation(ImageInterpolation.High)
  85 + }
  86 + }.alignItems(VerticalAlign.Center)
  87 + .height('84lpx')
  88 + .justifyContent(FlexAlign.SpaceBetween)
  89 +
  90 + if(index != this.searchHotsData.length-1 ){
  91 + Divider()
  92 + .width('100%')
  93 + .height('1lpx')
  94 + .color($r('app.color.color_F5F5F5'))
  95 + .strokeWidth('1lpx')
  96 + }
  97 + }.height('108lpx')
  98 + .justifyContent(FlexAlign.Center)
  99 + .alignItems(HorizontalAlign.Start)
  100 + .padding({left:'27lpx'})
  101 + }
  102 + }
  103 + .onClick(()=>{
  104 + })
  105 + .height('117lpx')
  106 + })
  107 + }.onScrollFrameBegin((offset, state) => {
  108 + return { offsetRemain: 0 }
  109 + }).layoutWeight(1)
  110 + }.width('100%')
  111 + .height('100%')
  112 + .margin({top:'46lpx'})
  113 + }
  114 +}
1 1
2 -import { Logger, ResourcesUtils } from 'wdKit'; 2 +import { Logger, ResourcesUtils, UserDataLocal } from 'wdKit';
3 import { HttpUrlUtils, ResponseDTO, WDHttp } from 'wdNetwork'; 3 import { HttpUrlUtils, ResponseDTO, WDHttp } from 'wdNetwork';
4 import HashMap from '@ohos.util.HashMap'; 4 import HashMap from '@ohos.util.HashMap';
  5 +import { SearchHistoryItem } from '../viewmodel/SearchHistoryItem';
  6 +import { SearchHotContentItem } from '../viewmodel/SearchHotContentItem';
  7 +
5 const TAG = "SearcherAboutDataModel" 8 const TAG = "SearcherAboutDataModel"
6 9
7 /** 10 /**
@@ -9,6 +12,7 @@ const TAG = "SearcherAboutDataModel" @@ -9,6 +12,7 @@ const TAG = "SearcherAboutDataModel"
9 */ 12 */
10 class SearcherAboutDataModel{ 13 class SearcherAboutDataModel{
11 private static instance: SearcherAboutDataModel; 14 private static instance: SearcherAboutDataModel;
  15 + searchHistoryData:SearchHistoryItem[] = []
12 16
13 private constructor() { } 17 private constructor() { }
14 18
@@ -24,6 +28,53 @@ class SearcherAboutDataModel{ @@ -24,6 +28,53 @@ class SearcherAboutDataModel{
24 } 28 }
25 29
26 /** 30 /**
  31 + * 静态搜索历史记录
  32 + */
  33 + getSearchHistoryData():SearchHistoryItem[]{
  34 + if(this.searchHistoryData.length > 0){
  35 + return this.searchHistoryData
  36 + }
  37 + this.searchHistoryData.push(new SearchHistoryItem("评论",UserDataLocal.userId,""))
  38 + this.searchHistoryData.push(new SearchHistoryItem("关注关注",UserDataLocal.userId,""))
  39 + this.searchHistoryData.push(new SearchHistoryItem("收藏收藏收藏",UserDataLocal.userId,""))
  40 + this.searchHistoryData.push(new SearchHistoryItem("历史",UserDataLocal.userId,""))
  41 + this.searchHistoryData.push(new SearchHistoryItem("消息消息消息消息消息",UserDataLocal.userId,""))
  42 + this.searchHistoryData.push(new SearchHistoryItem("留言板留言板留言板留言板留言板",UserDataLocal.userId,""))
  43 + this.searchHistoryData.push(new SearchHistoryItem("预约",UserDataLocal.userId,""))
  44 + return this.searchHistoryData
  45 + }
  46 +
  47 + // async putSearchHistoryData(content:string){
  48 + // let history = await SPHelper.default.get(SearcherAboutDataModel.SEARCH_HISTORY_KEY, '[]') as string;
  49 + // this.searchHistoryData = JSON.parse(history)
  50 + // this.searchHistoryData.push(new SearchHistoryItem(content))
  51 + // await SPHelper.default.save(SearcherAboutDataModel.SEARCH_HISTORY_KEY, JSON.stringify(this.searchHistoryData));
  52 + // }
  53 +
  54 + // getSearchHistoryData():Promise<SearchHistoryItem[]>{
  55 + // return new Promise<SearchHistoryItem[]>(async (success, error) => {
  56 + // if(this.searchHistoryData!=null && this.searchHistoryData.length>0){
  57 + // success(this.searchHistoryData)
  58 + // return
  59 + // }
  60 + // try {
  61 + // let history = await SPHelper.default.get(SearcherAboutDataModel.SEARCH_HISTORY_KEY, '') as string;
  62 + // console.log('ycg',history);
  63 + // }catch (error){
  64 + // console.log('ycg',"1111");
  65 + // }
  66 + //
  67 + // this.searchHistoryData = JSON.parse(history)
  68 + // this.searchHistoryData.push(new SearchHistoryItem("评论"))
  69 + // this.searchHistoryData.push(new SearchHistoryItem("关注关注"))
  70 + // this.searchHistoryData.push(new SearchHistoryItem("收藏收藏收藏"))
  71 + //
  72 + // success(this.searchHistoryData)
  73 + // })
  74 + // }
  75 +
  76 +
  77 + /**
27 * 首页 搜索提示滚动内容 78 * 首页 搜索提示滚动内容
28 */ 79 */
29 getSearchHintData(context: Context): Promise<string[]> { 80 getSearchHintData(context: Context): Promise<string[]> {
@@ -62,6 +113,43 @@ class SearcherAboutDataModel{ @@ -62,6 +113,43 @@ class SearcherAboutDataModel{
62 } 113 }
63 114
64 115
  116 + /**
  117 + * 搜索主页 热词
  118 + */
  119 + getSearchHotsData(context: Context): Promise<SearchHotContentItem[]> {
  120 + return new Promise<SearchHotContentItem[]>((success, error) => {
  121 + Logger.info(TAG, `getSearchHintData start`);
  122 + this.fetchSearchHotsData().then((navResDTO: ResponseDTO<SearchHotContentItem[]>) => {
  123 + if (!navResDTO || navResDTO.code != 0) {
  124 + success(this.getSearchHotsDataLocal(context))
  125 + return
  126 + }
  127 + Logger.info(TAG, "getSearchHotsData then,getSearchHotsData.timeStamp:" + navResDTO.timestamp);
  128 + let navigationBean = navResDTO.data as SearchHotContentItem[]
  129 + success(navigationBean);
  130 + }).catch((err: Error) => {
  131 + Logger.error(TAG, `getSearchHotsData catch, error.name : ${err.name}, error.message:${err.message}`);
  132 + success(this.getSearchHotsDataLocal(context))
  133 + })
  134 + })
  135 + }
  136 +
  137 + fetchSearchHotsData() {
  138 + let url = HttpUrlUtils.getSearchHotsDataUrl()
  139 + let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
  140 + return WDHttp.get<ResponseDTO<SearchHotContentItem[]>>(url, headers)
  141 + };
  142 +
  143 + async getSearchHotsDataLocal(context: Context): Promise<SearchHotContentItem[]> {
  144 + Logger.info(TAG, `getSearchHotsDataLocal start`);
  145 + let compRes: ResponseDTO<SearchHotContentItem[]> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<SearchHotContentItem[]>>(context,'search_hots_data.json' ,);
  146 + if (!compRes || !compRes.data) {
  147 + Logger.info(TAG, `getSearchHotsDataLocal compRes is empty`);
  148 + return []
  149 + }
  150 + Logger.info(TAG, `getSearchHotsDataLocal compRes : ${JSON.stringify(compRes)}`);
  151 + return compRes.data
  152 + }
65 153
66 } 154 }
67 155
  1 +import { SearchComponent } from '../components/search/SearchComponent'
  2 +
  3 +@Entry
  4 +@Component
  5 +struct SearchPage {
  6 + build() {
  7 + Column(){
  8 + SearchComponent()
  9 + }.height('100%')
  10 + .width('100%')
  11 + }
  12 +}
  1 +export class SearchHistoryItem{
  2 + searchContent:string = ""
  3 + searchUserId:string = ""
  4 + searchTime:string = ""
  5 +
  6 + constructor(searchContent: string,searchUserId:string,searchTime:string) {
  7 + this.searchContent = searchContent
  8 + this.searchUserId = searchUserId
  9 + this.searchTime = searchTime
  10 + }
  11 +}
  1 +export class SearchHotContentItem{
  2 + hotEntry:string = ""
  3 + mark:number = 0 //1 热 2 新
  4 + sequence:number = 0//序号
  5 +
  6 + constructor(hotEntry: string , mark: number , sequence: number ) {
  7 + this.hotEntry = hotEntry
  8 + this.mark = mark
  9 + this.sequence = sequence
  10 + }
  11 +}
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 "components/page/EditUserIntroductionPage", 12 "components/page/EditUserIntroductionPage",
13 "components/page/BrowsingHistoryPage", 13 "components/page/BrowsingHistoryPage",
14 "components/page/MyCollectionListPage", 14 "components/page/MyCollectionListPage",
15 - "pages/OtherNormalUserHomePage" 15 + "pages/OtherNormalUserHomePage",
  16 + "pages/SearchPage"
16 ] 17 ]
17 } 18 }
  1 +{
  2 + "code": "0",
  3 + "data": [
  4 + {
  5 + "hotEntry": "习语",
  6 + "mark": 1,
  7 + "sequence": 1
  8 + },
  9 + {
  10 + "hotEntry": "党史学习教育工作",
  11 + "mark": 1,
  12 + "sequence": 2
  13 + },
  14 + {
  15 + "hotEntry": "2024年全国两会新闻中心启用",
  16 + "mark": 1,
  17 + "sequence": 3
  18 + },
  19 + {
  20 + "hotEntry": "第二艘国产大型邮轮后年底交付",
  21 + "mark": 0,
  22 + "sequence": 4
  23 + },
  24 + {
  25 + "hotEntry": "268名跨境电诈犯罪嫌疑人移交",
  26 + "mark": 0,
  27 + "sequence": 5
  28 + },
  29 + {
  30 + "hotEntry": "高考倒计时100天",
  31 + "mark": 2,
  32 + "sequence": 6
  33 + },
  34 + {
  35 + "hotEntry": "日本开始第四轮核污染水排放",
  36 + "mark": 0,
  37 + "sequence": 7
  38 + },
  39 + {
  40 + "hotEntry": "国台办点名管碧玲",
  41 + "mark": 0,
  42 + "sequence": 8
  43 + },
  44 + {
  45 + "hotEntry": "美方称不会向乌克兰派兵",
  46 + "mark": 2,
  47 + "sequence": 9
  48 + },
  49 + {
  50 + "hotEntry": "电动车乱停乱充电",
  51 + "mark": 2,
  52 + "sequence": 10
  53 + }
  54 + ],
  55 + "message": "Success",
  56 + "success": true,
  57 + "timestamp": 1712631086296
  58 +}