yangchenggong1_wd

desc:搜索结果 comp 展现

@@ -217,6 +217,11 @@ export class HttpUrlUtils { @@ -217,6 +217,11 @@ export class HttpUrlUtils {
217 static readonly SEARCH_RESULT_COUNT_DATA_PATH: string = "/api/rmrb-search-api/zh/c/count?keyword="; 217 static readonly SEARCH_RESULT_COUNT_DATA_PATH: string = "/api/rmrb-search-api/zh/c/count?keyword=";
218 218
219 /** 219 /**
  220 + * 搜索结果 显示list 详情
  221 + */
  222 + static readonly SEARCH_RESULT_LIST_DATA_PATH: string = "/api/rmrb-search-api/zh/c/search";
  223 +
  224 + /**
220 * 早晚报列表 225 * 早晚报列表
221 * 根据页面id获取页面楼层列表 226 * 根据页面id获取页面楼层列表
222 * https://pdapis.pdnews.cn/api/rmrb-bff-display-zh/display/zh/c/pageInfo?pageId=28927 227 * https://pdapis.pdnews.cn/api/rmrb-bff-display-zh/display/zh/c/pageInfo?pageId=28927
@@ -645,6 +650,11 @@ export class HttpUrlUtils { @@ -645,6 +650,11 @@ export class HttpUrlUtils {
645 return url 650 return url
646 } 651 }
647 652
  653 + static getSearchResultListDataUrl() {
  654 + let url = HttpUrlUtils._hostUrl + HttpUrlUtils.SEARCH_RESULT_LIST_DATA_PATH
  655 + return url
  656 + }
  657 +
648 // static getYcgCommonHeaders(): HashMap<string, string> { 658 // static getYcgCommonHeaders(): HashMap<string, string> {
649 // let headers: HashMap<string, string> = new HashMap<string, string>() 659 // let headers: HashMap<string, string> = new HashMap<string, string>()
650 // 660 //
@@ -64,7 +64,7 @@ export struct Card6Component { @@ -64,7 +64,7 @@ export struct Card6Component {
64 .borderRadius(5) 64 .borderRadius(5)
65 .aspectRatio(this.contentDTO.appStyle === CompStyle.Card_13 ? 3 / 2 : 3 / 4) 65 .aspectRatio(this.contentDTO.appStyle === CompStyle.Card_13 ? 3 / 2 : 3 / 4)
66 .height(this.contentDTO.appStyle === CompStyle.Card_13 ? 90 : 180) 66 .height(this.contentDTO.appStyle === CompStyle.Card_13 ? 90 : 180)
67 - if (this.contentDTO.videoInfo) { 67 + if (this.contentDTO.videoInfo && this.contentDTO.videoInfo.videoDuration != undefined) {
68 Row() { 68 Row() {
69 Image($r('app.media.iv_card_play_yellow_flag')) 69 Image($r('app.media.iv_card_play_yellow_flag'))
70 .width(22) 70 .width(22)
@@ -82,7 +82,7 @@ export struct Card6Component { @@ -82,7 +82,7 @@ export struct Card6Component {
82 bottom: 4 82 bottom: 4
83 }) 83 })
84 .backgroundColor($r('app.color.color_4d000000')) 84 .backgroundColor($r('app.color.color_4d000000'))
85 - } else if (this.contentDTO.voiceInfo) { 85 + } else if (this.contentDTO.voiceInfo && this.contentDTO.voiceInfo.voiceDuration != undefined) {
86 Row() { 86 Row() {
87 Image($r('app.media.icon_listen')) 87 Image($r('app.media.icon_listen'))
88 .width(22) 88 .width(22)
@@ -128,7 +128,7 @@ export struct SearchComponent { @@ -128,7 +128,7 @@ export struct SearchComponent {
128 * @param content 128 * @param content
129 */ 129 */
130 getSearchHistoryResData(content:string,index:number){ 130 getSearchHistoryResData(content:string,index:number){
131 - //删除单记录 131 + //删除单记录
132 SearcherAboutDataModel.delSearchSingleHistoryData(index) 132 SearcherAboutDataModel.delSearchSingleHistoryData(index)
133 this.isClickedHistory = true 133 this.isClickedHistory = true
134 this.searchResData(content) 134 this.searchResData(content)
@@ -149,33 +149,6 @@ export struct SearchComponent { @@ -149,33 +149,6 @@ export struct SearchComponent {
149 this.getSearchResultCountData() 149 this.getSearchResultCountData()
150 } 150 }
151 151
152 - getSearchResultCountData() {  
153 - SearcherAboutDataModel.getSearchResultCountData(encodeURI(this.searchText),getContext(this)).then((value) => {  
154 - if (value != null) {  
155 - this.count = []  
156 - if(value.allTotal!=0){  
157 - this.count.push("全部")  
158 - }  
159 - if(value.cmsTotal!=0){  
160 - this.count.push("精选")  
161 - }  
162 - if(value.rmhTotal!=0){  
163 - this.count.push("人民号")  
164 - }  
165 - if(value.videoTotal!=0){  
166 - this.count.push("视频")  
167 - }  
168 - if(value.activityTotal!=0){  
169 - this.count.push("活动")  
170 - }  
171 - }  
172 - }).catch((err: Error) => {  
173 - console.log(TAG, JSON.stringify(err))  
174 - })  
175 - }  
176 -  
177 -  
178 -  
179 /** 152 /**
180 * 点击联想搜索列表回调 153 * 点击联想搜索列表回调
181 * @param content 154 * @param content
@@ -291,4 +264,30 @@ export struct SearchComponent { @@ -291,4 +264,30 @@ export struct SearchComponent {
291 .padding({ left: '31lpx' }) 264 .padding({ left: '31lpx' })
292 .alignItems(VerticalAlign.Center) 265 .alignItems(VerticalAlign.Center)
293 } 266 }
  267 +
  268 +
  269 + getSearchResultCountData() {
  270 + SearcherAboutDataModel.getSearchResultCountData(encodeURI(this.searchText),getContext(this)).then((value) => {
  271 + if (value != null) {
  272 + this.count = []
  273 + if(value.allTotal!=0){
  274 + this.count.push("全部")
  275 + }
  276 + if(value.cmsTotal!=0){
  277 + this.count.push("精选")
  278 + }
  279 + if(value.rmhTotal!=0){
  280 + this.count.push("人民号")
  281 + }
  282 + if(value.videoTotal!=0){
  283 + this.count.push("视频")
  284 + }
  285 + if(value.activityTotal!=0){
  286 + this.count.push("活动")
  287 + }
  288 + }
  289 + }).catch((err: Error) => {
  290 + console.log(TAG, JSON.stringify(err))
  291 + })
  292 + }
294 } 293 }
@@ -20,7 +20,7 @@ export struct SearchResultComponent{ @@ -20,7 +20,7 @@ export struct SearchResultComponent{
20 Tabs({ barPosition: BarPosition.Start, controller: this.controller }) { 20 Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
21 ForEach(this.count, (item: string, index: number ) => { 21 ForEach(this.count, (item: string, index: number ) => {
22 TabContent(){ 22 TabContent(){
23 - SearchResultContentComponent() 23 + SearchResultContentComponent({keywords:this.searchText,searchType:item})
24 }.tabBar(this.TabBuilder(index,item)) 24 }.tabBar(this.TabBuilder(index,item))
25 }, (item: string, index: number) => index.toString()) 25 }, (item: string, index: number) => index.toString())
26 } 26 }
  1 +import { ContentDTO, FullColumnImgUrlDTO, InteractDataDTO, RmhInfoDTO, VideoInfoDTO } from 'wdBean/Index'
  2 +import { LiveInfoDTO } from 'wdBean/src/main/ets/bean/detail/LiveInfoDTO'
  3 +import { VoiceInfoDTO } from 'wdBean/src/main/ets/bean/detail/VoiceInfoDTO'
  4 +import { LazyDataSource, StringUtils } from 'wdKit/Index'
  5 +import SearcherAboutDataModel from '../../model/SearcherAboutDataModel'
  6 +import { CardParser } from '../CardParser'
  7 +import { ListHasNoMoreDataUI } from '../reusable/ListHasNoMoreDataUI'
  8 +
1 const TAG = "SearchResultContentComponent" 9 const TAG = "SearchResultContentComponent"
2 10
3 @Component 11 @Component
4 export struct SearchResultContentComponent{ 12 export struct SearchResultContentComponent{
  13 + @State keywords:string = ""
  14 + @State searchType:string = ""
  15 + @State data: LazyDataSource<ContentDTO> = new LazyDataSource();
  16 + @State count:number = 0;
  17 + @State isLoading:boolean = false
  18 + @State hasMore:boolean = true
  19 + curPageNum:number = 1;
  20 +
5 21
6 aboutToAppear(): void { 22 aboutToAppear(): void {
  23 + if(this.searchType == "全部"){
  24 + this.searchType = "all"
  25 + }else if(this.searchType == "精选"){
  26 + this.searchType = "cms"
  27 + }else if(this.searchType == "人民号"){
  28 + this.searchType = "rmh"
  29 + }else if(this.searchType == "视频"){
  30 + this.searchType = "video"
  31 + }else if(this.searchType == "活动"){
  32 + this.searchType = "activity"
  33 + }
7 34
  35 + this.keywords = encodeURI(this.keywords)
  36 + this.getNewSearchResultData()
8 } 37 }
9 38
  39 + getNewSearchResultData(){
  40 + this.isLoading = true
  41 + if(this.hasMore){
  42 + SearcherAboutDataModel.getSearchResultListData("20",`${this.curPageNum}`,this.searchType,this.keywords,getContext(this)).then((value)=>{
  43 + if (!this.data || value.list.length == 0){
  44 + this.hasMore = false
  45 + }else{
  46 + value.list.forEach((value)=>{
  47 +
  48 + let photos:FullColumnImgUrlDTO[] = []
  49 + if(value.data.appStyle === 4){
  50 + value.data.appStyleImages.split("&&").forEach((value)=>{
  51 + photos.push({url:value} as FullColumnImgUrlDTO)
  52 + })
  53 + }
  54 +
  55 + //TODO 48 个赋值
  56 + let contentDTO:ContentDTO = {
  57 + appStyle:value.data.appStyle+"",
  58 + cityCode:value.data.cityCode,
  59 + coverSize:"",
  60 + coverType:-1,
  61 + coverUrl:value.data.appStyleImages.split("&&")[0],
  62 + description:value.data.description,
  63 + districtCode:value.data.districtCode,
  64 + endTime:value.data.endTime,
  65 + hImageUrl:"",
  66 + heatValue:"",
  67 + innerUrl:"",
  68 + landscape:Number.parseInt(value.data.landscape),
  69 + // lengthTime:null,
  70 + linkUrl:value.data.linkUrl,
  71 + openLikes:Number.parseInt(value.data.openLikes),
  72 + openUrl:"",
  73 + pageId:value.data.pageId,
  74 + programAuth:"",
  75 + programId:"",
  76 + programName:"",
  77 + programSource:-1,
  78 + programType:-1,
  79 + provinceCode:value.data.provinceCode,
  80 + showTitleEd:value.data.showTitleEd,
  81 + showTitleIng:value.data.showTitleIng,
  82 + showTitleNo:value.data.showTitleNo,
  83 + startTime:value.data.startTime,
  84 + subType:"",
  85 + subtitle:"",
  86 + title:value.data.title,
  87 + vImageUrl:"",
  88 + screenType:"",
  89 + source:StringUtils.isEmpty(value.data.creatorName)?value.data.sourceName:value.data.creatorName,
  90 + objectId:"",
  91 + objectType:value.data.type,
  92 + channelId:value.data.channelId,
  93 + relId:value.data.relId,
  94 + relType:value.data.relType,
  95 + newsTitle:value.data.titleLiteral,// 有颜色,目前没做
  96 + publishTime:value.data.publishTime,
  97 + visitorComment:-1,
  98 + fullColumnImgUrls:photos,
  99 + newsSummary:"",
  100 + hasMore:-1,
  101 + slideShows:[],
  102 + voiceInfo:{} as VoiceInfoDTO,
  103 + tagWord:-1,
  104 + isSelect:true,
  105 + rmhInfo:{} as RmhInfoDTO,
  106 + photoNum:-1,
  107 + liveInfo:{} as LiveInfoDTO,
  108 + videoInfo:{
  109 + videoDuration:Number.parseInt(value.data.duration)
  110 + } as VideoInfoDTO,
  111 + interactData:{} as InteractDataDTO
  112 + }
  113 +
  114 + this.data.push(contentDTO)
  115 + })
  116 + this.data.notifyDataReload()
  117 + this.count = this.data.totalCount()
  118 + if (this.data.totalCount() < value.totalCount) {
  119 + this.curPageNum++
  120 + }else {
  121 + this.hasMore = false
  122 + }
  123 + }
  124 + }).catch((err:Error)=>{
  125 + console.log(TAG,JSON.stringify(err))
  126 + })
  127 + }
  128 + this.isLoading = false
  129 + }
10 130
11 131
12 build() { 132 build() {
  133 + Column() {
  134 + if(this.count == 0){
  135 + ListHasNoMoreDataUI({style:2})
  136 + }else{
  137 + //List
  138 + List({ space: '6lpx' }) {
  139 + LazyForEach(this.data, (item: ContentDTO, index: number) => {
  140 + ListItem() {
  141 + CardParser({contentDTO:item})
  142 + }
  143 + .onClick(()=>{
  144 + //TODO 跳转
  145 + })
  146 + }, (item: ContentDTO, index: number) => index.toString())
13 147
  148 + //没有更多数据 显示提示
  149 + if(!this.hasMore){
  150 + ListItem(){
  151 + ListHasNoMoreDataUI()
  152 + }
  153 + }
  154 + }.cachedCount(4)
  155 + .scrollBar(BarState.Off)
  156 + .margin({top:'23lpx',left:'23lpx',right:'23lpx'})
  157 + .layoutWeight(1)
  158 + .onReachEnd(()=>{
  159 + console.log(TAG,"触底了");
  160 + if(!this.isLoading){
  161 + //加载分页数据
  162 + this.getNewSearchResultData()
  163 + }
  164 + })
  165 + }
  166 + }
  167 + .backgroundColor($r('app.color.white'))
  168 + .height('100%')
  169 + .width('100%')
14 } 170 }
15 } 171 }
@@ -5,6 +5,7 @@ import HashMap from '@ohos.util.HashMap'; @@ -5,6 +5,7 @@ import HashMap from '@ohos.util.HashMap';
5 import { SearchHistoryItem } from '../viewmodel/SearchHistoryItem'; 5 import { SearchHistoryItem } from '../viewmodel/SearchHistoryItem';
6 import { SearchHotContentItem } from '../viewmodel/SearchHotContentItem'; 6 import { SearchHotContentItem } from '../viewmodel/SearchHotContentItem';
7 import { SearchResultCountItem } from '../viewmodel/SearchResultCountItem'; 7 import { SearchResultCountItem } from '../viewmodel/SearchResultCountItem';
  8 +import { SearchResultContentData } from '../viewmodel/SearchResultContentData';
8 9
9 const TAG = "SearcherAboutDataModel" 10 const TAG = "SearcherAboutDataModel"
10 11
@@ -35,6 +36,11 @@ class SearcherAboutDataModel{ @@ -35,6 +36,11 @@ class SearcherAboutDataModel{
35 public async putSearchHistoryData(content:string){ 36 public async putSearchHistoryData(content:string){
36 let history = SPHelper.default.getSync(this.SEARCH_HISTORY_KEY,"[]") as string 37 let history = SPHelper.default.getSync(this.SEARCH_HISTORY_KEY,"[]") as string
37 this.searchHistoryData = JSON.parse(history) 38 this.searchHistoryData = JSON.parse(history)
  39 + this.searchHistoryData.forEach((element,index) => {
  40 + if (element.searchContent == content) {
  41 + this.searchHistoryData.splice(index,1)
  42 + }
  43 + });
38 this.searchHistoryData.splice(0,0,new SearchHistoryItem(content)) 44 this.searchHistoryData.splice(0,0,new SearchHistoryItem(content))
39 await SPHelper.default.saveSync(this.SEARCH_HISTORY_KEY, JSON.stringify(this.searchHistoryData)); 45 await SPHelper.default.saveSync(this.SEARCH_HISTORY_KEY, JSON.stringify(this.searchHistoryData));
40 } 46 }
@@ -234,6 +240,45 @@ class SearcherAboutDataModel{ @@ -234,6 +240,45 @@ class SearcherAboutDataModel{
234 return compRes.data 240 return compRes.data
235 } 241 }
236 242
  243 + /**
  244 + * 搜索结果 展示列表
  245 + */
  246 + getSearchResultListData(pageSize:string,pageNum:string,searchType:string,keyword:string,context: Context): Promise<SearchResultContentData> {
  247 + return new Promise<SearchResultContentData>((success, error) => {
  248 + Logger.info(TAG, `getSearchResultListData start`);
  249 + this.fetchSearchResultListData(pageSize,pageNum,searchType,keyword).then((navResDTO: ResponseDTO<SearchResultContentData>) => {
  250 + if (!navResDTO || navResDTO.code != 0) {
  251 + success(this.getSearchResultListDataLocal(context))
  252 + return
  253 + }
  254 + Logger.info(TAG, "getSearchResultListData then,SearchResultListResDTO.timeStamp:" + navResDTO.timestamp);
  255 + let navigationBean = navResDTO.data as SearchResultContentData
  256 + success(navigationBean);
  257 + }).catch((err: Error) => {
  258 + Logger.error(TAG, `getSearchResultListData catch, error.name : ${err.name}, error.message:${err.message}`);
  259 + success(this.getSearchResultListDataLocal(context))
  260 + })
  261 + })
  262 + }
  263 +
  264 + fetchSearchResultListData(pageSize:string,pageNum:string,searchType:string,keyword:string) {
  265 + let url = HttpUrlUtils.getSearchResultListDataUrl() + `?pageSize=${pageSize}&pageNum=${pageNum}&searchType=${searchType}&keyword=${keyword}`
  266 + let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
  267 + return WDHttp.get<ResponseDTO<SearchResultContentData>>(url, headers)
  268 + };
  269 +
  270 + async getSearchResultListDataLocal(context: Context): Promise<SearchResultContentData> {
  271 + Logger.info(TAG, `getSearchResultListDataLocal start`);
  272 + let compRes: ResponseDTO<SearchResultContentData> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<SearchResultContentData>>(context,'search_result_list_data.json' );
  273 + if (!compRes || !compRes.data) {
  274 + Logger.info(TAG, `getSearchResultListDataLocal compRes is empty`);
  275 + return new SearchResultContentData()
  276 + }
  277 + Logger.info(TAG, `getSearchResultListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`);
  278 + return compRes.data
  279 + }
  280 +
  281 +
237 } 282 }
238 283
239 const searcherAboutDataModel = SearcherAboutDataModel.getInstance() 284 const searcherAboutDataModel = SearcherAboutDataModel.getInstance()
1 -import { ContentDTO } from 'wdBean/Index'  
2 1
3 -export interface SearchResultContentItem{  
4 - data:ContentDTO  
5 - resultType:string 2 +export class SearchResultContentItem{
  3 + data:SearchDescription = new SearchDescription()
  4 + resultType:string = ""
  5 +}
  6 +
  7 +class SearchDescription{
  8 + likeEnable: string = ""
  9 + previewUri: string = ""
  10 + firstFrameImageBucket: string = ""
  11 + appImg: string = ""
  12 + onlineStatus: string = ""
  13 + createUserName: string = ""
  14 + contentCheck: string = ""
  15 + type: string = ""
  16 + titleOsst: string = ""
  17 + coverHImageBucket: string = ""
  18 + shareImageUri: string = ""
  19 + searchTypeInt: string = ""
  20 + authIcon: string = ""
  21 + id: string = ""
  22 + newOld: string = ""
  23 + seoTags: string = ""
  24 + publishTime: string = ""
  25 + feedControl: string = ""
  26 + saveType: string = ""
  27 + userTypeInt: string = ""
  28 + userOrigin: string = ""
  29 + creatorType: string = ""
  30 + planStartTime: string = ""
  31 + waresSwitch: string = ""
  32 + introductionLiteral: string = ""
  33 + topicType: string = ""
  34 + hotFlag: string = ""
  35 + coverUrl: string = ""
  36 + itemId: string = ""
  37 + titleEn: string = ""
  38 + matrixId: string = ""
  39 + tplId: string = ""
  40 + joinActivity: string = ""
  41 + status: string = ""
  42 + headerPhotoUrl: string = ""
  43 + zhSearch: string = ""
  44 + activityControl: string = ""
  45 + city: string = ""
  46 + showTitleIng: string = ""
  47 + shareFlag: string = ""
  48 + creatorName: string = ""
  49 + className: string = ""
  50 + showTitleNo: string = ""
  51 + liveSwitch: string = ""
  52 + likesStyle: string = ""
  53 + dataKey: string = ""
  54 + search: string = ""
  55 + puserId: string = ""
  56 + top: string = ""
  57 + titleLiteral: string = ""
  58 + countryCode: string = ""
  59 + startTime: string = ""
  60 + shareDescription: string = ""
  61 + channelId: string = ""
  62 + openComment: string = ""
  63 + creatorClassify: string = ""
  64 + previewBucket: string = ""
  65 + picCount: string = ""
  66 + recommendControl: string = ""
  67 + creatorNameLiteral: string = ""
  68 + subjects: string = ""
  69 + updateUser: string = ""
  70 + i: string = ""
  71 + updateTime: string = ""
  72 + userId: string = ""
  73 + showTitleEd: string = ""
  74 + authTo: string = ""
  75 + rmhPlatformInt: string = ""
  76 + giftEnable: string = ""
  77 + titleEnosst: string = ""
  78 + shareCoverUrl: string = ""
  79 + deleted: string = ""
  80 + zhOperateFlag: string = ""
  81 + shareTitle: string = ""
  82 + scrollUpdated: string = ""
  83 + createTime: string = ""
  84 + creatorBan: string = ""
  85 + publishTimeInt: string = ""
  86 + organization: string = ""
  87 + channelName: string = ""
  88 + createUser: string = ""
  89 + currentPoliticsFlag: string = ""
  90 + endTime: string = ""
  91 + sourceId: string = ""
  92 + country: string = ""
  93 + secondClassify: string = ""
  94 + createUserId: string = ""
  95 + firstFrameImageUri: string = ""
  96 + pubTime: string = ""
  97 + openLikes: string = ""
  98 + contentText: string = ""
  99 + relType: string = ""
  100 + authImg: string = ""
  101 + roomId: string = ""
  102 + nameLiteral: string = ""
  103 + mainControl: string = ""
  104 + coverVImageBucket: string = ""
  105 + linkUrl: string = ""
  106 + openDownload: string = ""
  107 + zhChannelPageImg: string = ""
  108 + appStandImg: string = ""
  109 + shareSummary: string = ""
  110 + firstPublishTimeInt: string = ""
  111 + rmhPlatform: string = ""
  112 + creatorNameOsst: string = ""
  113 + searchType: string = ""
  114 + author: string = ""
  115 + askAnswerFlag: string = ""
  116 + seoTagName: string = ""
  117 + weight: string = ""
  118 + pageId: string = ""
  119 + firstPublishTime: string = ""
  120 + coverVImageUri: string = ""
  121 + publishType: string = ""
  122 + isVr: string = ""
  123 + name: string = ""
  124 + shareUrl: string = ""
  125 + userType: string = ""
  126 + firstProcessTime: string = ""
  127 + hasRecord: string = ""
  128 + shareTitleOsst: string = ""
  129 + classify: string = ""
  130 + itemType: string = ""
  131 + nameOsst: string = ""
  132 + districtCode: string = ""
  133 + hidden: string = ""
  134 + cityCode: string = ""
  135 + liveType: string = ""
  136 + appStyleImages: string = ""
  137 + titleShow: string = ""
  138 + cornerMark: string = ""
  139 + creatorId: string = ""
  140 + levelScore: string = ""
  141 + description: string = ""
  142 + liveStartTime: string = ""
  143 + likeStyle: string = ""
  144 + title: string = ""
  145 + content: string = ""
  146 + platform: string = ""
  147 + duration: string = "0"
  148 + shareDescriptionLiteral: string = ""
  149 + createTimeInt: string = ""
  150 + liveEndTime: string = ""
  151 + topicTemplate: string = ""
  152 + barrageEnable: string = ""
  153 + introduction: string = ""
  154 + notice: string = ""
  155 + shareTitleLiteral: string = ""
  156 + coverHImageUri: string = ""
  157 + relId: string = ""
  158 + classCode: string = ""
  159 + grayScale: string = ""
  160 + appStyle: number = -1
  161 + authTitle: string = ""
  162 + provinceCode: string = ""
  163 + tenancy: string = ""
  164 + platformId: string = ""
  165 + classSubName: string = ""
  166 + recommended: string = ""
  167 + descriptionLiteral: string = ""
  168 + banControl: string = ""
  169 + auditingStatus: string = ""
  170 + planEndTime: string = ""
  171 + speakControl: string = ""
  172 + sourceName: string = ""
  173 + shareImageBucket: string = ""
  174 + landscape: string = ""
  175 +
6 176
7 } 177 }
This diff could not be displayed because it is too large.