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
liyubing
2024-04-23 18:20:31 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
6378b5d5a80f1839cf2f8caef197993459c9998d
6378b5d5
1 parent
ba1e83b6
feat(广告):左右挂角ui绘制
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
267 additions
and
50 deletions
sight_harmony/features/wdBean/src/main/ets/bean/adv/AdvsRuleBean.ets
sight_harmony/features/wdComponent/src/main/ets/components/page/PageComponent.ets
sight_harmony/features/wdComponent/src/main/ets/viewmodel/PageHelper.ets
sight_harmony/features/wdComponent/src/main/ets/viewmodel/PageModel.ets
sight_harmony/features/wdComponent/src/main/resources/base/element/color.json
sight_harmony/features/wdComponent/src/main/resources/base/element/float.json
sight_harmony/features/wdComponent/src/main/resources/base/element/string.json
sight_harmony/features/wdComponent/src/main/resources/base/media/icon_adv_horn_close.png
sight_harmony/features/wdBean/src/main/ets/bean/adv/AdvsRuleBean.ets
View file @
6378b5d
...
...
@@ -19,49 +19,80 @@ export interface AdvRuleBean {
/**
* 广告展示顺序,0:随机展示;1列表循环
*/
displayMode:number
displayMode: number
/**
* 每间隔刷新n次展示广告
*/
refreshFrequency:number
refreshFrequency: number
/**
* 广告信息集合
*/
advert:AdvertsBean;
advert:
AdvertsBean;
}
/**
* 广告组件数据
*/
export interface
CompAdvBean
{
export interface
CompAdvBean
{
/**
* 广告订单id
*/
id:string;
id:
string;
/**
* 投放开始时间
*/
startTime:number;
startTime:
number;
/**
* 投放结束时间
*/
endTime:number;
endTime:
number;
/**
* 信息流广告素材
*/
matInfo:CompAdvMatInfoBean
matInfo: CompAdvMatInfoBean
/**
* 信息流广告位
*/
slotInfo:CompAdvSlotInfoBean
slotInfo: CompAdvSlotInfoBean
/**
* 展示优先级
* 广告A,displayPriority=1
* 广告B,displayPriority=2
* 则打开页面时,挂角展示顺序 A->B (优先级升序排列)
*/
displayPriority: number;
/**
* 展示的次数
*/
showCount: number;
/**
* 页面id
*/
pageId: String ;
/**
* 开屏广告-显示时长
*/
displayDuration: String;
/**
* 开屏广告-展示轮数
* 2.launchAdInfo有多个时:
* 广告A,displayRound=10
* 广告B,displayRound=5,
* 每次开机屏展示广告概率
* 广告A=10/(10+5)
* 广告B=5/(10+5)
* 广告A展示10次后,不再展示,
* 广告B展示5此后,不再展示。
* 下一轮展示继续上面逻辑。
*/
displayRound: number;
}
...
...
sight_harmony/features/wdComponent/src/main/ets/components/page/PageComponent.ets
View file @
6378b5d
...
...
@@ -52,48 +52,56 @@ export struct PageComponent {
@Builder
ListLayout() {
List() {
// 下拉刷新
ListItem() {
RefreshLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage,
this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight)
})
}
LazyForEach(this.pageModel.compList, (compDTO: CompDTO, compIndex: number) => {
RelativeContainer() {
List() {
// 下拉刷新
ListItem() {
Column() {
CompParser({ compDTO: compDTO, compIndex: compIndex });
}
}
},
(compDTO: CompDTO, compIndex: number) => compDTO.id + compIndex.toString() + this.pageModel.timestamp
)
// 加载更多
ListItem() {
if (this.pageModel.hasMore) {
LoadMoreLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage,
this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight)
RefreshLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage,
this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight)
})
} else if (!this.pageModel.contentNeedScroll) {
NoMoreLayout()
}
LazyForEach(this.pageModel.compList, (compDTO: CompDTO, compIndex: number) => {
ListItem() {
Column() {
CompParser({ compDTO: compDTO, compIndex: compIndex });
}
}
},
(compDTO: CompDTO, compIndex: number) => compDTO.id + compIndex.toString() + this.pageModel.timestamp
)
// 加载更多
ListItem() {
if (this.pageModel.hasMore) {
LoadMoreLayout({
refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage,
this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight)
})
} else if (!this.pageModel.contentNeedScroll) {
NoMoreLayout()
}
}
}
// comp自己处理分页,这里设置EdgeEffect.None
.edgeEffect(this.pageModel.contentNeedScroll ? EdgeEffect.None : EdgeEffect.Spring)
.scrollBar(BarState.Off)
.cachedCount(8)
.height(CommonConstants.FULL_PARENT)
.onScrollIndex((start: number, end: number) => {
// Listen to the first index of the current list.
this.pageModel.startIndex = start;
// 包含了 头尾item,判断时需要考虑+2
this.pageModel.endIndex = end;
})
.id('page_list')
// 挂角广告
this.pageHornAd()
}
// comp自己处理分页,这里设置EdgeEffect.None
.edgeEffect(this.pageModel.contentNeedScroll ? EdgeEffect.None : EdgeEffect.Spring)
.scrollBar(BarState.Off)
.cachedCount(8)
.height(CommonConstants.FULL_PARENT)
.onScrollIndex((start: number, end: number) => {
// Listen to the first index of the current list.
this.pageModel.startIndex = start;
// 包含了 头尾item,判断时需要考虑+2
this.pageModel.endIndex = end;
})
}
@Builder
...
...
@@ -105,6 +113,111 @@ export struct PageComponent {
// })
}
/**
* 页面挂角广告
*/
@Builder
pageHornAd() {
if (this.pageModel.pageLeftCornerAdv.matInfo != null) {
// 页面左挂角
Image(this.pageModel.pageLeftCornerAdv.matInfo.matImageUrl[0])
.width($r('app.float.vp_80'))
.height($r('app.float.vp_80'))
.id("left_iv")
.alignRules({
bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
left: { anchor: '__container__', align: HorizontalAlign.Start },
})
.margin({ bottom: "65vp", left: $r('app.float.card_comp_pagePadding_lf') })
Image($r('app.media.icon_adv_horn_close')).id('left_close').width($r('app.float.vp_16')).alignRules({
top: { anchor: 'left_iv', align: VerticalAlign.Top },
left: { anchor: 'left_iv', align: HorizontalAlign.Start },
}).offset({
x: -10,
y: -10
})
Text($r('app.string.comp_advertisement'))
.width($r('app.float.vp_28'))
.height($r('app.float.vp_16'))
.fontSize($r('app.float.font_size_10'))
.fontColor(Color.White)
.id('left_tag')
.alignRules({
bottom: { anchor: 'left_iv', align: VerticalAlign.Bottom },
left: { anchor: 'left_iv', align: HorizontalAlign.Start },
})
.textAlign(TextAlign.Center)
.backgroundColor($r('app.color.res_color_general_000000_30'))
.borderRadius({
topLeft: $r('app.float.vp_2'),
topRight: $r('app.float.vp_2'),
bottomLeft: $r('app.float.vp_2'),
bottomRight: $r('app.float.vp_2')
})
}
if (this.pageModel.pageRightCornerAdv.matInfo != null && this.pageModel.isShowRightAds) {
// 页面右边挂角
Image(this.pageModel.pageRightCornerAdv.matInfo.matImageUrl[0])
.width($r('app.float.vp_80'))
.height($r('app.float.vp_80'))
.id("right_iv")
.alignRules({
bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
right: { anchor: '__container__', align: HorizontalAlign.End },
})
.margin({ bottom: "65vp", right: $r('app.float.card_comp_pagePadding_lf') })
.onClick(()=>{
// 关闭挂角广告
this.pageModel.isShowLeftAds = false;
})
Image($r('app.media.icon_adv_horn_close'))
.id('right_close')
.width($r('app.float.vp_16'))
.alignRules({
top: { anchor: 'right_iv', align: VerticalAlign.Top },
right: { anchor: 'right_iv', align: HorizontalAlign.End },
})
.offset({
x: 10,
y: -10
})
.onClick(() => {
// 关闭挂角广告
this.pageModel.isShowRightAds = false;
})
Text($r('app.string.comp_advertisement'))
.width($r('app.float.vp_28'))
.height($r('app.float.vp_16'))
.fontSize($r('app.float.font_size_10'))
.fontColor(Color.White)
.id('right_tag')
.alignRules({
bottom: { anchor: 'right_iv', align: VerticalAlign.Bottom },
right: { anchor: 'right_iv', align: HorizontalAlign.End },
})
.textAlign(TextAlign.Center)
.backgroundColor($r('app.color.res_color_general_000000_30'))
.borderRadius({
topLeft: $r('app.float.vp_2'),
topRight: $r('app.float.vp_2'),
bottomLeft: $r('app.float.vp_2'),
bottomRight: $r('app.float.vp_2')
})
}
}
async aboutToAppear() {
// 选中tab,才请求数据。拦截大量接口请求
if (this.navIndex === this.currentTopNavSelectedIndex) {
...
...
sight_harmony/features/wdComponent/src/main/ets/viewmodel/PageHelper.ets
View file @
6378b5d
...
...
@@ -5,6 +5,7 @@ import { closeRefresh } from '../utils/PullDownRefresh';
import PageModel from './PageModel';
import PageViewModel from './PageViewModel';
import { promptAction } from '@kit.ArkUI';
import { AdvRuleBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean';
const TAG = 'PageHelper';
...
...
@@ -45,9 +46,50 @@ export class PageHelper {
return;
}
pageModel.pageInfo = pageInfo;
//解析广告资源
this.analysisAdvSource(pageModel);
this.parseGroup(pageModel)
}
/**
* 解析广告资源
* @param pageInfo
*/
analysisAdvSource(pageModel: PageModel) {
let pageInfo = pageModel.pageInfo
if (pageInfo.hasAdInfo === 1 && pageInfo.cornersAdv != null) {
// 优先展示展现中心广告
let cornersAdv = pageInfo.cornersAdv
} else if (pageInfo.cornersAdv2 != null && pageInfo.cornersAdv2.length > 0) {
// 广告中心-挂角广告信息
let cornersAdv2 = pageInfo.cornersAdv2
// 获取
let showCompAdvBean = cornersAdv2[0]
//
let slotInfo = showCompAdvBean.slotInfo;
let postion = slotInfo.position
if (postion == 0) {
//左边挂角
pageModel.pageLeftCornerAdv = showCompAdvBean
pageModel.isShowLeftAds = true
} else {
// 右边挂角
pageModel.pageRightCornerAdv = showCompAdvBean
pageModel.isShowRightAds = true
}
Logger.error("XXX", JSON.stringify(pageInfo.cornersAdv2))
}
}
async parseGroup(pageModel: PageModel) {
let pageInfo: PageInfoDTO = pageModel.pageInfo
pageModel.groupList = []
...
...
sight_harmony/features/wdComponent/src/main/ets/viewmodel/PageModel.ets
View file @
6378b5d
...
...
@@ -4,6 +4,7 @@ import { ViewType } from 'wdConstant/src/main/ets/enum/ViewType';
import { RefreshConstants as Const } from '../utils/RefreshConstants';
import { PageUIReqBean } from '../components/page/bean/PageUIReqBean';
import { GroupInfoDTO, PageInfoDTO } from 'wdBean/src/main/ets/bean/navigation/PageInfoDTO';
import { CompAdvBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean';
/**
* 页面下拉刷新、上拉加载数据bean。
...
...
@@ -50,6 +51,15 @@ export default class PageModel {
// keyGenerator相关字符串,用于刷新list布局
timestamp: String = '1';
//左右挂角广告对象
pageLeftCornerAdv:CompAdvBean = {} as CompAdvBean
isShowLeftAds : boolean = true;
pageRightCornerAdv:CompAdvBean = {} as CompAdvBean
isShowRightAds : boolean = true;
/**
* 简单复制业务数据
*/
...
...
sight_harmony/features/wdComponent/src/main/resources/base/element/color.json
View file @
6378b5d
...
...
@@ -121,11 +121,11 @@
"value"
:
"#99636363"
},
{
"name"
:
"color_648DF2"
,
"name"
:
"color_648DF2"
,
"value"
:
"#648DF2"
},
{
"name"
:
"color_EEEEEE"
,
"name"
:
"color_EEEEEE"
,
"value"
:
"#EEEEEE"
},
{
...
...
@@ -151,6 +151,10 @@
{
"name"
:
"color_0D000000"
,
"value"
:
"#0D000000"
},
{
"name"
:
"res_color_general_000000_30"
,
"value"
:
"#4D000000"
}
]
}
\ No newline at end of file
...
...
sight_harmony/features/wdComponent/src/main/resources/base/element/float.json
View file @
6378b5d
...
...
@@ -209,6 +209,10 @@
"value"
:
"3vp"
},
{
"name"
:
"vp_2"
,
"value"
:
"2vp"
},
{
"name"
:
"vp_55"
,
"value"
:
"55vp"
},
...
...
@@ -225,6 +229,14 @@
"value"
:
"16vp"
},
{
"name"
:
"vp_28"
,
"value"
:
"28vp"
},
{
"name"
:
"vp_80"
,
"value"
:
"80vp"
},
{
"name"
:
"card_comp_pagePadding_lf"
,
"value"
:
"16fp"
},
...
...
sight_harmony/features/wdComponent/src/main/resources/base/element/string.json
View file @
6378b5d
...
...
@@ -48,5 +48,10 @@
"name"
:
"reason_read_write_media"
,
"value"
:
"user_grant"
}
,
{
"name"
:
"comp_advertisement"
,
"value"
:
"广告"
}
]
}
\ No newline at end of file
...
...
sight_harmony/features/wdComponent/src/main/resources/base/media/icon_adv_horn_close.png
0 → 100644
View file @
6378b5d
2.02 KB
Please
register
or
login
to post a comment