diff --git a/commons/basic/Index.ets b/commons/basic/Index.ets index 4cfbd53..8c0722f 100644 --- a/commons/basic/Index.ets +++ b/commons/basic/Index.ets @@ -52,4 +52,6 @@ export { EditUserDataItem } from './src/main/ets/Views/EditUserDataItem' export { Huanzhelast444Model } from './src/main/ets/models/Huanzhelast444Model' -export { huanzheDb } from './src/main/ets/utils/HuanzhelasDbHelper' \ No newline at end of file +export { huanzheDb } from './src/main/ets/utils/HuanzhelasDbHelper' + +export { HdSearchNav } from './src/main/ets/components/HdSearchNav' \ No newline at end of file diff --git a/commons/basic/src/main/ets/components/HdSearchNav.ets b/commons/basic/src/main/ets/components/HdSearchNav.ets index ee20483..5a2f04c 100644 --- a/commons/basic/src/main/ets/components/HdSearchNav.ets +++ b/commons/basic/src/main/ets/components/HdSearchNav.ets @@ -14,7 +14,7 @@ export struct HdSearchNav { @Prop leftIcon: ResourceStr = $r('app.media.top_back') @Prop - showRightIcon: boolean = true + showRightIcon: boolean = false @Prop rightIcon: ResourceStr @Prop @@ -22,9 +22,11 @@ export struct HdSearchNav { @Prop rightText: string = '' @Prop - rightTextColor: ResourceStr + rightTextColor: Color @Prop rightbackColor: ResourceStr = $r('app.color.main_color') + @Prop + isFocus:boolean = false; @State textInputContent:string = '' @@ -35,20 +37,25 @@ export struct HdSearchNav { .size({ width: 24, height: 24 }) .onClick(() => router.back()) .fillColor($r('app.color.black')) - }.size({ width: 50, height: 50 }) + }.size({ width: 40, height: 50 }) - Row({space:10}){ + Row(){ Image($r('app.media.selected_hospital_ws')) - .width(25).height(25) - .margin({left:15}) - TextInput({placeholder:'搜索视频、过往会议'}) - .fontSize(15) + .width(20).height(20) .margin({left:10}) + TextInput({placeholder:'搜索视频、过往会议'}) + .defaultFocus(this.isFocus) + .fontSize(15) + .backgroundColor(this.bgColor) + .height('100%').width('calc(100% - 40vp)') + .padding({ left: 0 }) + .margin({left:5}) .onChange((value:string)=>{ this.textInputContent = value; }) } - .borderWidth(0.5).borderRadius(3).borderColor($r('app.color.main_color')).justifyContent(FlexAlign.Start) + .borderWidth(1).borderRadius(5).borderColor('#999999').justifyContent(FlexAlign.Start) + .width('calc(100% - 100vp)').height(40) if (this.showRightIcon) { Row() { @@ -65,7 +72,7 @@ export struct HdSearchNav { .backgroundColor(this.rightbackColor) .borderRadius(4) .onClick(()=>this.rightItemAction(this.textInputContent)) - .width(50) + .width(50).height(40).margin({left:10}) .textAlign(TextAlign.Center) } else { Blank() diff --git a/commons/basic/src/main/ets/constants/BasicConstant.ets b/commons/basic/src/main/ets/constants/BasicConstant.ets index 14c2419..9468341 100644 --- a/commons/basic/src/main/ets/constants/BasicConstant.ets +++ b/commons/basic/src/main/ets/constants/BasicConstant.ets @@ -38,6 +38,7 @@ export class BasicConstant { static readonly videoByKeyWordsNew = BasicConstant.urlExpertApp + "videoByKeyWordsNew"; static readonly tagList = BasicConstant.urlExpertApp + "tagList"; static readonly meetingListBySearch = BasicConstant.urlExpertAPI + "meetingListBySearch"; + static readonly videoBySearchNew = BasicConstant.urlExpertApp+'videoBySearchNew'//搜索肝胆视频列表 static readonly province=['全国','北京市','天津市','河北省','山西省' ,'内蒙古自治区','辽宁省','吉林省','黑龙江省','上海市','江苏省','浙江省' diff --git a/features/Home/Index.ets b/features/Home/Index.ets index ea33337..5d5013f 100644 --- a/features/Home/Index.ets +++ b/features/Home/Index.ets @@ -17,3 +17,11 @@ export { VideoGandan } from './src/main/ets/pages/VideoGandan'; export { PLVMockMediaResourceData } from './src/main/ets/polyv/PLVMockMediaResourceData' export { VideoDetailsComment } from './src/main/ets/components/VideoDetailsComment' + +export { VideoSearchComp } from './src/main/ets/pages/VideoSearchComp' + +export { VideoList,DataModel,VideoData } from './src/main/ets/model/SearchDataModel' + +export { ItemCompPast } from './src/main/ets/components/ItemCompPastk' + +export { MeetingItemModel,MeetingModel,MeetingModels,ItemModel } from './src/main/ets/model/ItemModel' \ No newline at end of file diff --git a/features/Home/src/main/ets/model/SearchDataModel.ets b/features/Home/src/main/ets/model/SearchDataModel.ets new file mode 100644 index 0000000..a76516d --- /dev/null +++ b/features/Home/src/main/ets/model/SearchDataModel.ets @@ -0,0 +1,25 @@ +export interface DataModel { + code:number, + data:VideoData, + message:string +} + +export interface VideoData { + pageSize:number, + list:VideoList[], + totalRow:number, + pageNumber:number, + totalPage:number +} + +export interface VideoList { + name:string, + public_name:string, + create_date:string, + readnum:string, + video_type_name:string, + path:string, + type_uuid:string, + imgpath:string, + uuid:string +} diff --git a/features/Home/src/main/ets/pages/PastVideo.ets b/features/Home/src/main/ets/pages/PastVideo.ets index c79370f..8f6c3c7 100644 --- a/features/Home/src/main/ets/pages/PastVideo.ets +++ b/features/Home/src/main/ets/pages/PastVideo.ets @@ -1,6 +1,6 @@ import { HdNav, BasicConstant } from '@itcast/basic' import { ListCompPast } from '../components/ListCompPast' -import { promptAction } from '@kit.ArkUI' +import { promptAction,router } from '@kit.ArkUI' @Entry @Component export struct PastVideo { @@ -30,8 +30,11 @@ export struct PastVideo { build() { Column() { - HdNav({ title: '过往会议', showRightIcon: false, showLeftIcon: true,showRightText:true,rightIcon:$r('app.media.selected_hospital_ws'),rightItemAction:()=>{ - + HdNav({ title: '过往会议', showRightIcon: true, showLeftIcon: true,showRightText:true,rightIcon:$r('app.media.selected_hospital_ws'),rightItemAction:()=>{ + router.pushUrl({ + url:'pages/SearchPage/VideoSearchPage', + params:{'pageName':'过往会议'} + }) }}) Row() { Row() { diff --git a/features/Home/src/main/ets/pages/VideoSearchComp.ets b/features/Home/src/main/ets/pages/VideoSearchComp.ets new file mode 100644 index 0000000..127388a --- /dev/null +++ b/features/Home/src/main/ets/pages/VideoSearchComp.ets @@ -0,0 +1,51 @@ +import { VideoList } from '../model/SearchDataModel' + +@Component +export struct VideoSearchComp { + @Prop model:VideoList; + + build() { + Column() { + Column() { + Text(this.model.name) + .fontSize(16).fontColor($r('app.color.main_color')) + .margin({left:10,top:10,right:10}) + Text(this.model.public_name) + .fontSize(14).fontColor('#666666') + .margin({left:10,top:10,right:10}) + Row(){ + Text(this.model.create_date.length>10?this.model.create_date.substring(0,10).replace('-','.'):this.model.create_date) + .fontSize(12).fontColor('#999999') + .textAlign(TextAlign.Center) + Blank() + Row(){ + Image($r('app.media.video_look')) + .objectFit(ImageFit.Cover) + .width(22).height(15) + Text(' '+this.model.readnum+'') + .fontSize(12).fontColor('#666666') + } + .justifyContent(FlexAlign.End) + .width(150) + .margin({right:10}) + } + .justifyContent(FlexAlign.SpaceBetween) + .margin({left:10,top:10,right:10}).width('98%') + Blank() + .backgroundColor('#999999').height(0.5).margin({left:10,top:10,right:5}) + Text(this.model.video_type_name) + .fontSize(12).fontColor('#666666') + .margin({left:10,top:10,right:10,bottom:10}) + } + .margin({left:10,right:10,top:10}) + .backgroundColor(Color.White) + .borderRadius(5) + .width('calc(100% - 20vp)') + .height('auto') + .justifyContent(FlexAlign.Start) + .alignItems(HorizontalAlign.Start) + } + .width('100%') + .height('auto') + } +} \ No newline at end of file diff --git a/products/expert/src/main/ets/pages/SearchPage/VideoSearchPage.ets b/products/expert/src/main/ets/pages/SearchPage/VideoSearchPage.ets index 7cb4a38..c9df48a 100644 --- a/products/expert/src/main/ets/pages/SearchPage/VideoSearchPage.ets +++ b/products/expert/src/main/ets/pages/SearchPage/VideoSearchPage.ets @@ -1,27 +1,229 @@ -import { HdNav } from '@itcast/basic' +import { HdSearchNav,EmptyViewComp,HdList,HdListController,HdLoadingDialog,hdHttp,HdResponse,BasicConstant } from '@itcast/basic' +import { router,promptAction } from '@kit.ArkUI'; +import { VideoSearchComp } from 'home' +import { VideoList,DataModel,MeetingItemModel,ItemModel,MeetingModels } from 'home' +import HashMap from '@ohos.util.HashMap'; +import { BusinessError } from '@kit.BasicServicesKit'; +import inputMethod from '@ohos.inputMethod'; +import { ItemCompPast } from 'home' @Entry @Component struct VideoSearchPage { - @State message: string = 'Hello World'; + @State params:Record = router.getParams() as Record; + @State isSearchData: boolean = true; + @State searchVideoList:VideoList[] = []; + @State meetinglist: ItemModel[] = [] + @State uploadTimeStatus:boolean = true; + @State clickStatus:boolean = false; + @State inputText:string = ''; + @State sort:string = '2'; + controller = new HdListController() + @State page: number = 1 + + dialog: CustomDialogController = new CustomDialogController({ + builder: HdLoadingDialog({ message: '加载中...' }), + customStyle: true, + alignment: DialogAlignment.Center + }) + + onRefresh(){ + this.page = 1 + this.initData(0) + } + + initData(type:number){ + if (this.params.pageName === '视频') { + this.uploadData(type); + } else { + this.uploadOldMeetingList(type) + } + } + + uploadData(type:number) { + inputMethod.getController().hideTextInput();//关闭键盘 + const hashMap: HashMap = new HashMap(); + hashMap.set('page',this.page.toString()); + hashMap.set('name',this.inputText); + hashMap.set('sort',this.sort); + hdHttp.httpReq(BasicConstant.videoBySearchNew,hashMap).then(async (res: HdResponse) => { + this.dialog.close() + let json:DataModel = JSON.parse(res+'') as DataModel; + if(type==0) { + this.controller.refreshed() + } else { + this.controller.loaded() + } + if(this.page == 1) { + this.searchVideoList = [] + if(json.data!=null&&json.data.list!) { + this.searchVideoList = json.data.list; + } + } else if(this.page>1&&json.data!=null&&json.data.list!=null&&json.data.list.length>0) { + this.searchVideoList.push(...json.data.list) + } + if (this.page >= json.data.pageNumber) { + this.controller.finished() + } else { + this.page++ + } + if (this.searchVideoList.length > 0) { + this.isSearchData = false; + } else { + this.isSearchData = true; + } + }).catch((err: BusinessError) => { + this.dialog.close() + this.controller.finished() + if (this.searchVideoList.length > 0) { + this.isSearchData = false; + } else { + this.isSearchData = true; + } + }) + } + + uploadOldMeetingList(type:number) { + inputMethod.getController().hideTextInput();//关闭键盘 + const hashMap: HashMap = new HashMap(); + hashMap.set('page',this.page.toString()); + hashMap.set('title',this.inputText); + hashMap.set('year',''); + hashMap.set('month',''); + hdHttp.httpReq(BasicConstant.meetingHistoryList,hashMap).then(async (res: HdResponse) => { + this.dialog.close() + let json:MeetingModels = JSON.parse(res+'') as MeetingModels; + if(type==0) { + this.controller.refreshed() + } else { + this.controller.loaded() + } + // if(this.page==1&&json.data.list!=null&&json.data.list.length>0) + if(this.page==1) { + this.meetinglist=[] + if(json.data!=null&&json.data.list!) { + this.meetinglist = json.data.list + } + } else if(this.page>1&&json.data!=null&&json.data.list!=null&&json.data.list.length>0) { + this.meetinglist.push(...json.data.list) + } + this.getPosition() + if (this.page >= json.data.pages) { + this.controller.finished() + } else { + this.page++ + } + if (this.meetinglist.length > 0) { + this.isSearchData = false; + } else { + this.isSearchData = true; + } + }).catch((err: BusinessError) => { + this.dialog.close() + this.controller.finished() + if (this.searchVideoList.length > 0) { + this.isSearchData = false; + } else { + this.isSearchData = true; + } + }) + } + + getPosition() { + let DatasList: string[] = []; + let count = 0; + for (let i = 0; i < this.meetinglist.length; i++) { + if (!DatasList.includes(this.meetinglist[i].begin_date + .substring(0, 7))) { + DatasList.push(this.meetinglist[i].begin_date.substring(0, 7)); + count = 0; + this.meetinglist[i].count = count; + } else { + count++; + this.meetinglist[i].count = count; + } + } + } build() { Column() { - // HdNav({showLeftIcon:true,showRightText:true,rightText:'搜索'}) - Text(this.message) - .id('VideoSearchPageHelloWorld') - .fontSize($r('app.float.page_text_font_size')) - .fontWeight(FontWeight.Bold) - .alignRules({ - center: { anchor: '__container__', align: VerticalAlign.Center }, - middle: { anchor: '__container__', align: HorizontalAlign.Center } - }) - .onClick(() => { - this.message = 'Welcome'; - }) + HdSearchNav({showRightText:true,rightText:'搜素',rightTextColor:Color.White,isFocus:true,rightItemAction:(value: string)=>{ + this.inputText = value; + this.onRefresh(); + }}) + if (this.isSearchData){ + EmptyViewComp({promptText:'暂无搜索数据',isVisibility:this.isSearchData}) + .width('100%') + .height('100%') + } else { + if (this.params.pageName === '视频') { + Column() { + Row(){ + Text('上传时间') + .fontSize(16) + .fontColor(this.uploadTimeStatus?$r('app.color.main_color'):'#666666') + .width('50%').textAlign(TextAlign.Center) + .onClick(()=>{ + this.sort = '2'; + this.uploadTimeStatus = true; + this.clickStatus = false; + this.uploadData(1) + }) + Blank() + .backgroundColor('#666666') + .width(1) + .height('60%') + Text('点播量') + .fontSize(16) + .fontColor(this.clickStatus?$r('app.color.main_color'):'#666666') + .width('50%').textAlign(TextAlign.Center) + .onClick(()=>{ + this.sort = '1'; + this.uploadTimeStatus = false; + this.clickStatus = true; + this.uploadData(1) + }) + }.width('100%').height(45).backgroundColor(Color.White) + HdList({ + lw: 1, + controller: this.controller, + onRefresh: () => { + this.onRefresh() + }, + onLoad:() => { + this.initData(1) + } + }) { + ForEach(this.searchVideoList, (item: VideoList) => { + ListItem() { + VideoSearchComp({ model: item }) + } + }) + } + } + .layoutWeight(1)//权重自定义 + } else {//过往会议的 + HdList({ + lw: 1, + controller: this.controller, + onRefresh: () => { + this.onRefresh() + }, + onLoad:() => { + this.initData(1) + } + }) { + ForEach(this.meetinglist, (item: MeetingItemModel) => { + ListItem() { + ItemCompPast({ item }) + } + }) + } + } + } } .height('100%') .width('100%') - .backgroundColor(Color.White) + .backgroundColor('#f4f4f4') } } \ No newline at end of file