Toggle navigation
Toggle navigation
This project
Loading...
Sign in
developOne
/
harmonyPool
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
wangyujian_wd
2024-04-12 20:53:03 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
f82cf25341e016f63e9884cacb7268e42ad48797
f82cf253
1 parent
9db55a43
feat:1)直播详情-直播间和大家聊接口调试
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
299 additions
and
48 deletions
sight_harmony/commons/wdNetwork/src/main/ets/http/HttpUrlUtils.ets
sight_harmony/features/wdBean/Index.ets
sight_harmony/features/wdBean/src/main/ets/bean/live/LiveRoomBean.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/pages/DetailPlayLivePage.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/viewModel/LiveModel.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/viewModel/LiveViewModel.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabChatComponent.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabChatItemComponent.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabLiveComponent.ets
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabLiveItemComponent.ets
sight_harmony/features/wdDetailPlayLive/src/main/resources/base/element/string.json
sight_harmony/features/wdDetailPlayLive/src/main/resources/base/media/ic_pull_up_load.gif
sight_harmony/commons/wdNetwork/src/main/ets/http/HttpUrlUtils.ets
View file @
f82cf25
...
...
@@ -192,6 +192,15 @@ export class HttpUrlUtils {
static readonly LIVE_DETAILS_PATH: string = "/api/rmrb-bff-display-zh/content/zh/c/content/detail";
/**
* 直播详情-直播间列表
*/
static readonly LIVE_LIST_PATH: string = "/api/live-center-message/zh/a/live/message/video/list";
/**
* 直播详情-大家聊列表
*/
static readonly LIVE_CHAT_LIST_PATH: string = "/api/live-center-message/zh/a/live/message/chat/list";
/**
* 搜索结果 显示tab 数
*/
...
...
@@ -588,6 +597,16 @@ export class HttpUrlUtils {
return url
}
static getLiveListUrl() {
let url = HttpUrlUtils._hostUrl + HttpUrlUtils.LIVE_LIST_PATH
return url
}
static getLiveChatListUrl() {
let url = HttpUrlUtils._hostUrl + HttpUrlUtils.LIVE_CHAT_LIST_PATH
return url
}
static getSearchResultCountDataUrl() {
let url = HttpUrlUtils._hostUrl + HttpUrlUtils.SEARCH_RESULT_COUNT_DATA_PATH
return url
...
...
sight_harmony/features/wdBean/Index.ets
View file @
f82cf25
...
...
@@ -113,3 +113,6 @@ export { LiveDetailsBean } from './src/main/ets/bean/live/LiveDetailsBean';
export { ArticleListDTO } from './src/main/ets/bean/component/ArticleListDTO';
export { appStyleImagesDTO } from './src/main/ets/bean/content/appStyleImagesDTO';
export { LiveRoomBean,LiveRoomItemBean } from './src/main/ets/bean/live/LiveRoomBean';
...
...
sight_harmony/features/wdBean/src/main/ets/bean/live/LiveRoomBean.ets
0 → 100644
View file @
f82cf25
export interface LiveRoomBean {
pageNum: number
pageSize: number
totalCount: number
barrageResponses: Array<LiveRoomItemBean>
}
export interface LiveRoomItemBean {
text: string
senderUserAvatarUrl: string
senderUserName: string
pictureUrls: string[]
time: string
//1上墙0未上墙
isWall: number
//是否置顶 1置顶0不置顶
isTop: number
role: string
}
\ No newline at end of file
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/pages/DetailPlayLivePage.ets
View file @
f82cf25
...
...
@@ -2,6 +2,7 @@ import { LiveDetailsBean } from 'wdBean/Index';
import { LiveViewModel } from '../viewModel/LiveViewModel';
import { BottomComponent } from '../widgets/details/BottomComponent';
import { TabComponent } from '../widgets/details/TabComponent';
import { TopPlayComponent } from '../widgets/details/video/TopPlayComponet';
@Entry
@Component
...
...
@@ -16,7 +17,7 @@ export struct DetailPlayLivePage {
build() {
Column() {
// TopPlayComponent({playUrl:this.playUrl
})
TopPlayComponent({playUrl:'http://mlive3.video.weibocdn.com/record/alicdn/5018726527666338/index.m3u8'
})
TabComponent()
BottomComponent()
}
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/viewModel/LiveModel.ets
View file @
f82cf25
...
...
@@ -2,7 +2,7 @@ import HashMap from '@ohos.util.HashMap';
import { HttpUrlUtils, ResponseDTO } from 'wdNetwork';
import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest';
import { Logger } from 'wdKit';
import { LiveDetailsBean } from 'wdBean/Index';
import { LiveDetailsBean
, LiveRoomBean
} from 'wdBean/Index';
const TAG = 'LiveModel'
...
...
@@ -34,7 +34,78 @@ export class LiveModel {
Logger.debug(TAG + ":error ", error.toString())
})
})
}
/**
* 获取直播详情页面直播间数据列表
* @param pageNum
* @param mLiveId
* @param liveId
* @param pageSize
* @returns
*/
getLiveList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
let params: Record<string, string> = {};
params['pageNum'] = pageNum + ''
params['mLiveId'] = mLiveId
params['liveId'] = liveId
params['pageSize'] = pageSize + ''
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return new Promise<LiveRoomBean>((success, fail) => {
HttpRequest.post<ResponseDTO<LiveRoomBean>>(
HttpUrlUtils.getLiveListUrl(),
params,
headers).then((data: ResponseDTO<LiveRoomBean>) => {
if (!data || !data.data) {
fail("数据为空")
return
}
if (data.code != 0) {
fail(data.message)
return
}
success(data.data)
}, (error: Error) => {
fail(error.message)
Logger.debug(TAG + ":error ", error.toString())
})
})
}
/**
* 获取直播详情页面大家聊数据列表
* @param pageNum
* @param mLiveId
* @param liveId
* @param pageSize
* @returns
*/
getLiveChatList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
let params: Record<string, string> = {};
params['pageNum'] = pageNum + ''
params['mLiveId'] = mLiveId
params['liveId'] = liveId
params['pageSize'] = pageSize + ''
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return new Promise<LiveRoomBean>((success, fail) => {
HttpRequest.post<ResponseDTO<LiveRoomBean>>(
HttpUrlUtils.getLiveChatListUrl(),
params,
headers).then((data: ResponseDTO<LiveRoomBean>) => {
if (!data || !data.data) {
fail("数据为空")
return
}
if (data.code != 0) {
fail(data.message)
return
}
success(data.data)
}, (error: Error) => {
fail(error.message)
Logger.debug(TAG + ":error ", error.toString())
})
})
}
}
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/viewModel/LiveViewModel.ets
View file @
f82cf25
import { LiveDetailsBean } from 'wdBean/Index'
import { LiveDetailsBean
, LiveRoomBean
} from 'wdBean/Index'
import { LiveModel } from './LiveModel'
const TAG = "LiveViewModel"
...
...
@@ -19,6 +19,27 @@ export class LiveViewModel {
fail(message)
})
})
}
//直播详情直播间数据列表
getLiveList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
return new Promise<LiveRoomBean>((success, fail) => {
this.liveModel.getLiveList(pageNum, mLiveId, liveId, pageSize).then((data) => {
success(data)
}).catch((message: string) => {
fail(message)
})
})
}
//直播详情大家聊数据列表
getLiveChatList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
return new Promise<LiveRoomBean>((success, fail) => {
this.liveModel.getLiveChatList(pageNum, mLiveId, liveId, pageSize).then((data) => {
success(data)
}).catch((message: string) => {
fail(message)
})
})
}
}
\ No newline at end of file
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabChatComponent.ets
View file @
f82cf25
import { ListHasNoMoreDataUI } from 'wdComponent/Index'
import { LiveRoomItemBean } from 'wdBean/Index'
import { EmptyComponent, ErrorComponent, ListHasNoMoreDataUI } from 'wdComponent/Index'
import CustomRefreshLoadLayout from 'wdComponent/src/main/ets/components/page/CustomRefreshLoadLayout'
import LoadMoreLayout from 'wdComponent/src/main/ets/components/page/LoadMoreLayout'
import RefreshLayout from 'wdComponent/src/main/ets/components/page/RefreshLayout'
import { RefreshLayoutBean } from 'wdComponent/src/main/ets/components/page/RefreshLayoutBean'
import PageModel from 'wdComponent/src/main/ets/viewmodel/PageModel'
import { ViewType } from 'wdConstant/Index'
import { LiveViewModel } from '../../viewModel/LiveViewModel'
import { TabChatItemComponent } from './TabChatItemComponent'
@Component
export struct TabChatComponent {
arr: string[] = []
@State private pageModel: PageModel = new PageModel()
liveViewModel: LiveViewModel = new LiveViewModel()
@State liveChatList: Array<LiveRoomItemBean> = []
aboutToAppear(): void {
for (let index = 0; index < 12; index++) {
this.arr.push(index + '')
}
this.getLiveChatList()
}
build() {
Stack() {
if (this.arr.length == 0) {
ListHasNoMoreDataUI({ style: 2 })
if (this.pageModel.viewType == ViewType.LOADING) {
this.LoadingLayout()
} else if (this.pageModel.viewType == ViewType.ERROR) {
ErrorComponent()
} else if (this.pageModel.viewType == ViewType.EMPTY) {
EmptyComponent()
} else {
List() {
ForEach(this.arr, (item: string) => {
ListItem() {
TabChatItemComponent()
}
})
ListItem() {
ListHasNoMoreDataUI()
}
}
this.ListLayout()
}
}
.align(Alignment.Top)
...
...
@@ -34,6 +37,67 @@ export struct TabChatComponent {
.width('100%')
}
@Builder
ListLayout() {
List() {
ListItem() {
// 下拉刷新
RefreshLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage,
this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight)
})
}
ForEach(this.liveChatList, (item: LiveRoomItemBean) => {
ListItem() {
TabChatItemComponent({ item: item })
}
})
// 加载更多
ListItem() {
if (this.pageModel.hasMore) {
LoadMoreLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage,
this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight)
})
} else {
ListHasNoMoreDataUI()
}
}
}
}
@Builder
LoadingLayout() {
CustomRefreshLoadLayout({
refreshBean: new RefreshLayoutBean(true,
$r('app.media.ic_pull_up_load'), $r('app.string.pull_up_load_text'), this.pageModel.pullDownRefreshHeight)
})
}
getLiveChatList() {
this.pageModel.currentPage = 1
this.liveViewModel.getLiveChatList(1, '20000016257', '20000016229', 20,)
.then(
(data) => {
if (data.barrageResponses && data.barrageResponses.length > 0) {
this.pageModel.viewType = ViewType.LOADED;
this.liveChatList.push(...data.barrageResponses)
if (data.barrageResponses.length === this.pageModel.pageSize) {
this.pageModel.currentPage++;
this.pageModel.hasMore = true;
} else {
this.pageModel.hasMore = false;
}
} else {
this.pageModel.viewType = ViewType.EMPTY;
}
},
() => {
})
}
aboutToDisappear(): void {
}
}
\ No newline at end of file
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabChatItemComponent.ets
View file @
f82cf25
import { LiveRoomItemBean } from 'wdBean/Index'
@Component
export struct TabChatItemComponent {
item: LiveRoomItemBean = {} as LiveRoomItemBean
aboutToAppear(): void {
}
build() {
Row() {
Image(
'https://img0.baidu.com/it/u=4105778329,1297102594&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500'
)
Image(
this.item.senderUserAvatarUrl
)
.borderRadius(90)
.width(24)
.height(24)
Text() {
Span(
'10999@qq.com
: ')
Span(
this.item.senderUserName + '
: ')
.fontColor('#666666')
Span(
'少年强则国强:山中有精灵也不过如此了'
)
Span(
this.item.text
)
.fontColor('#222222')
}
.margin({ left: 8 })
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabLiveComponent.ets
View file @
f82cf25
import { LiveRoomItemBean } from 'wdBean/Index'
import { ListHasNoMoreDataUI } from 'wdComponent/Index'
import { LiveViewModel } from '../../viewModel/LiveViewModel'
import { TabLiveItemComponent } from './TabLiveItemComponent'
@Component
export struct TabLiveComponent {
arr: string[] = []
liveViewModel: LiveViewModel = new LiveViewModel()
@State liveList: Array<LiveRoomItemBean> = []
aboutToAppear(): void {
for (let index = 0; index < 2; index++) {
this.arr.push(index + '')
}
this.getLiveList()
}
build() {
Stack() {
if (this.
arr
.length == 0) {
if (this.
liveList
.length == 0) {
ListHasNoMoreDataUI({ style: 2 })
} else {
List() {
ForEach(this.
arr, (item: string
) => {
ForEach(this.
liveList, (item: LiveRoomItemBean
) => {
ListItem() {
TabLiveItemComponent({ item: item })
}
...
...
@@ -35,6 +36,17 @@ export struct TabLiveComponent {
}
getLiveList() {
this.liveViewModel.getLiveList(1, '20000016257', '20000016229', 20,)
.then(
(data) => {
this.liveList = data.barrageResponses
},
() => {
})
}
aboutToDisappear(): void {
}
}
\ No newline at end of file
...
...
sight_harmony/features/wdDetailPlayLive/src/main/ets/widgets/details/TabLiveItemComponent.ets
View file @
f82cf25
import { LiveRoomItemBean } from 'wdBean/Index'
import { DateTimeUtils } from 'wdKit/Index'
@Component
export struct TabLiveItemComponent {
item:
string = ''
item:
LiveRoomItemBean = {} as LiveRoomItemBean
aboutToAppear(): void {
...
...
@@ -9,18 +12,18 @@ export struct TabLiveItemComponent {
build() {
Column() {
Row() {
Image(
'https://img0.baidu.com/it/u=4105778329,1297102594&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500'
)
Image(
this.item.senderUserAvatarUrl
)
.borderRadius(90)
.width(24)
.height(24)
Text(
'人民日报直播频道'
)
Text(
this.item.senderUserName
)
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.fontSize('14fp')
.fontWeight(400)
.fontColor('#222222')
.margin({ left: 8 })
Text('
嘉宾
')
Text('
主持人
')
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.fontSize('11fp')
...
...
@@ -35,7 +38,8 @@ export struct TabLiveItemComponent {
})
.borderRadius(2)
.margin({ left: 8 })
Text('1小时前')
.visibility('host' == this.item.role ? Visibility.Visible : Visibility.None)
Text(DateTimeUtils.getCommentTime(new Date(this.item.time).getTime()))
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.fontSize('12fp')
...
...
@@ -58,10 +62,11 @@ export struct TabLiveItemComponent {
})
.borderRadius(2)
.margin({ left: 8 })
.visibility(1 == this.item.isTop ? Visibility.Visible : Visibility.None)
}
.width('100%')
Text(
'国务院新闻办公室将于7月25日上午10时举行国务院政策例行吹风会,请应急管理部副部长、水利部副部长王道席和自然资源部、水利部、应急管理部、中国气象局、国家消防救援局有关负责人介绍防汛抗旱工作情况,并答记者问。'
)
Text(
this.item.text
)
.fontSize('14fp')
.fontWeight(400)
.fontColor('#222222')
...
...
@@ -69,21 +74,25 @@ export struct TabLiveItemComponent {
left: 32,
top: 6
})
Image('https://t7.baidu.com/it/u=3690528415,706188365&fm=193&f=GIF')
.height(174)
.width(310)
.aspectRatio(310 / 174)
.objectFit(ImageFit.Auto)
.borderRadius(4)
.margin({
left: 32,
top: 8
List() {
ForEach(this.item.pictureUrls, (item: string, index: number) => {
ListItem() {
Image(item)
.height(174)
.width(310)
.aspectRatio(310 / 174)
.objectFit(ImageFit.Auto)
.borderRadius(4)
}
})
}.margin({
left: 32,
top: 8
})
}.margin({
left:15,
top:15,
right:15
left: 15,
top: 15,
right: 15
})
}
...
...
sight_harmony/features/wdDetailPlayLive/src/main/resources/base/element/string.json
View file @
f82cf25
...
...
@@ -3,6 +3,34 @@
{
"name"
:
"shared_desc"
,
"value"
:
"description"
},
{
"name"
:
"footer_text"
,
"value"
:
"已经到底了"
},
{
"name"
:
"pull_up_load_text"
,
"value"
:
"加载中..."
},
{
"name"
:
"pull_down_refresh_text"
,
"value"
:
"下拉刷新"
},
{
"name"
:
"release_refresh_text"
,
"value"
:
"松开刷新"
},
{
"name"
:
"refreshing_text"
,
"value"
:
"正在刷新"
},
{
"name"
:
"refresh_success_text"
,
"value"
:
"刷新成功"
},
{
"name"
:
"refresh_fail_text"
,
"value"
:
"刷新失败"
}
]
}
\ No newline at end of file
...
...
sight_harmony/features/wdDetailPlayLive/src/main/resources/base/media/ic_pull_up_load.gif
0 → 100644
View file @
f82cf25
1.75 KB
Please
register
or
login
to post a comment