liujian1_wd

电子报

... ... @@ -16,8 +16,8 @@ export struct ENewspaperItemComponent {
Stack() {
Image(this.newspaperListItemBean.pagePic)
.width('100%')
.aspectRatio(0.68688)
.objectFit(ImageFit.Contain)
.aspectRatio(378 / 566)
.objectFit(ImageFit.Fill)
Canvas(this.context)
.width('100%')
... ... @@ -27,8 +27,10 @@ export struct ENewspaperItemComponent {
})
}
.padding({ top: 16, right: 16, bottom: 16, left: 16 })
.margin({ left: 10, right: 10 })
.backgroundColor(Color.White)
.width('100%')
.aspectRatio(0.68688)
.onTouch((event: TouchEvent) => {
if (event.type === TouchType.Down) {
let x = event.touches[0].x;
... ... @@ -36,10 +38,10 @@ export struct ENewspaperItemComponent {
this.startX = x;
this.startY = y;
let points: number[][] = this.getArea(x, y, this.newspaperListItemBean.items);
if (points && points.length > 2){
if (points && points.length > 2) {
let path = new Path2D();
path.moveTo(px2vp(points[0][0]), px2vp(points[0][1]));
for(let point of points.slice(1, points.length)){
for (let point of points.slice(1, points.length)) {
path.lineTo(px2vp(point[0]), px2vp(point[1]));
}
path.closePath();
... ... @@ -52,14 +54,13 @@ export struct ENewspaperItemComponent {
}
if (event.type === TouchType.Up) {
this.context.clearRect(0, 0, this.context.width, this.context.height)
if (this.itemBeanClicked && this.itemBeanClicked.newsId){
// todo 跳转事件
if (this.itemBeanClicked && this.itemBeanClicked.newsId) {
let taskAction: Action = {
type: 'JUMP_INNER_NEW_PAGE',
params: {
contentID:'30001758346',
contentID: '30001758346',
pageID: 'IMAGE_TEXT_DETAIL',
extra:{
extra: {
relType: '1',
relId: '500000001277',
sourcePage: '5'
... ... @@ -74,7 +75,7 @@ export struct ENewspaperItemComponent {
if (event.type === TouchType.Move) {
let mx = event.touches[0].x;
let my = event.touches[0].y;
if (this.startX - mx > 5 || mx - this.startX > 5 || this.startY - my > 5 || my - this.startY > 5){
if (this.startX - mx > 5 || mx - this.startX > 5 || this.startY - my > 5 || my - this.startY > 5) {
this.itemBeanClicked = {} as NewspaperPositionItemBean
this.context.clearRect(0, 0, this.context.width, this.context.height)
}
... ... @@ -97,8 +98,7 @@ export struct ENewspaperItemComponent {
for (let item of area) {
let pair: string[] = item.split(',');
if (pair && pair.length > 1) {
// todo 因为数据是根据安卓手机抓的,这里根据分辨率倍数做了数据放大处理,真实数据不用乘以放大倍数
let xy: number[] = [StringUtils.parseNumber(pair[0])*1.215, StringUtils.parseNumber(pair[1])*1.16]
let xy: number[] = [StringUtils.parseNumber(pair[0]), StringUtils.parseNumber(pair[1])]
if (minX < 0) {
minX = xy[0]
} else {
... ...
... ... @@ -4,12 +4,15 @@ import router from '@ohos.router';
import { Logger } from 'wdKit';
import { ENewspaperItemComponent } from './ENewspaperItemComponent';
import { ENewspaperListDialog } from '../dialog/ENewspaperListDialog';
import display from '@ohos.display';
@Component
export struct ENewspaperPageComponent {
@State newspaperListBean: NewspaperListBean = {} as NewspaperListBean
@State currentPageNum: string = '01'
@State pageNumPopup: boolean = false
@State date: string = '2024-01-26'
@State picHeight: number = 0
private swiperController: SwiperController = new SwiperController()
listDialogController: CustomDialogController = new CustomDialogController({
builder: ENewspaperListDialog({ newspaperListBean: this.newspaperListBean,
... ... @@ -61,7 +64,7 @@ export struct ENewspaperPageComponent {
})
Row() {
Text('2024.01.26')
Text(this.date)
.fontSize($r('app.float.font_size_20'))
.fontColor($r('app.color.white'))
... ... @@ -96,13 +99,13 @@ export struct ENewspaperPageComponent {
})
}
.width('100%')
.height(px2vp(this.picHeight) + 32)
.vertical(true)
.autoPlay(false)
.cachedCount(3)
.indicator(false)
.displayCount(1)
.aspectRatio(0.68688)
.margin({ top: $r('app.float.vp_55'), left: 10, right: 10 })
.margin({ top: 35, left: 10, right: 10 })
.id('e_newspaper_content')
.alignRules({ top: { anchor: "e_newspaper_top", align: VerticalAlign.Bottom },
middle: { anchor: "__container__", align: HorizontalAlign.Center } })
... ... @@ -112,7 +115,7 @@ export struct ENewspaperPageComponent {
Image($r('app.media.newspaper_shadow'))
.height($r('app.float.vp_12'))
.margin({ left: 12, right: 12, top: -5 })
.margin({ left: 12, right: 12, top: -1 })
.objectFit(ImageFit.Contain)
.alignRules({ top: { anchor: "e_newspaper_content", align: VerticalAlign.Bottom },
left: { anchor: 'e_newspaper_content', align: HorizontalAlign.Start },
... ... @@ -189,9 +192,22 @@ export struct ENewspaperPageComponent {
.id('e_newspaper_container')
}
aboutToAppear() {
let listBean = NewspaperViewModel.getNewspaperListFromLocal(getContext(this));
async aboutToAppear() {
let newspaperTimes = await NewspaperViewModel.getNewspaperTime()
if (newspaperTimes && newspaperTimes.length > 0) {
this.date = newspaperTimes[0].date
}
try {
let displayTool = display.getDefaultDisplaySync()
let screenWidth = displayTool.width
let picWidth = screenWidth - vp2px(52)
this.picHeight = picWidth * 566 / 378
let listBean = await NewspaperViewModel.getNewspaperList(this.date, picWidth + 'x' + this.picHeight)
this.newspaperListBean = listBean;
} catch (exception) {
}
}
... ...
import HashMap from '@ohos.util.HashMap';
import { HttpUrlUtils, ResponseDTO, WDHttp } from 'wdNetwork';
import { DateTimeUtils } from 'wdKit';
import { ContentDetailDTO, NavigationBodyDTO, PageDTO,InteractDataDTO, MorningEveningPaperDTO } from 'wdBean';
import { ContentDetailDTO, NavigationBodyDTO, PageDTO,InteractDataDTO, MorningEveningPaperDTO,
NewspaperTimeInfoBean,
NewspaperListBean
} from 'wdBean';
export class PageRepository {
static getBottomNavGroupUrl() {
... ... @@ -53,6 +56,18 @@ export class PageRepository {
return url;
}
static getNewspaperInfoUrl() {
let url = HttpUrlUtils.getHost() + HttpUrlUtils.E_NEWSPAPER_INFO_PATH;
return url;
}
static getNewspaperListUrl(date: string, pageSize: string) {
let url = HttpUrlUtils.getHost() + HttpUrlUtils.E_NEWSPAPER_LIST_PATH;
url = url + "?date=" + date
+ "&pagesSize=" + pageSize;
return url;
}
static fetchNavigationDataApi() {
let url = PageRepository.getBottomNavGroupUrl();
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
... ... @@ -91,4 +106,16 @@ export class PageRepository {
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return WDHttp.post<ResponseDTO<InteractDataDTO[]>>(url, param, headers)
};
static fetchNewspaperInfo() {
let url = PageRepository.getNewspaperInfoUrl()
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return WDHttp.get<ResponseDTO<NewspaperTimeInfoBean[]>>(url, headers)
};
static fetchNewspaperList(date: string, pageSize: string) {
let url = PageRepository.getNewspaperListUrl(date, pageSize)
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return WDHttp.get<ResponseDTO<NewspaperListBean>>(url, headers)
};
}
\ No newline at end of file
... ...
import { Logger, ResourcesUtils } from 'wdKit';
import { ResponseDTO } from 'wdNetwork';
import { NewspaperListBean, NewspaperTimeInfoBean } from 'wdBean';
import { PageRepository } from '../repository/PageRepository';
const TAG = 'NewspaperViewModel';
... ... @@ -15,6 +16,53 @@ export class NewspaperViewModel {
return newspaperTimeInfo.data
}
static async getNewspaperTime(): Promise<NewspaperTimeInfoBean[]> {
return new Promise<NewspaperTimeInfoBean[]>((success, error) => {
Logger.info(TAG, `getNavData start`);
PageRepository.fetchNewspaperInfo().then((resDTO: ResponseDTO<NewspaperTimeInfoBean[]>) => {
if (!resDTO || !resDTO.data) {
Logger.error(TAG, 'getNewspaperTime then navResDTO is empty');
error('resDTO is empty');
return
}
if (resDTO.code != 0) {
Logger.error(TAG, `getNewspaperTime then code:${resDTO.code}, message:${resDTO.message}`);
error('resDTO Response Code is failure');
return
}
Logger.info(TAG, "getNewspaperTime then,navResDTO.timestamp:" + resDTO.timestamp);
success(resDTO.data);
}).catch((err: Error) => {
Logger.error(TAG, `getNewspaperTime catch, error.name : ${err.name}, error.message:${err.message}`);
error(err);
})
})
}
static async getNewspaperList(date: string, pageSize: string): Promise<NewspaperListBean> {
return new Promise<NewspaperListBean>((success, error) => {
Logger.info(TAG, `getNavData start`);
PageRepository.fetchNewspaperList(date, pageSize).then((resDTO: ResponseDTO<NewspaperListBean>) => {
if (!resDTO || !resDTO.data) {
Logger.error(TAG, 'getNewspaperList then navResDTO is empty');
error('resDTO is empty');
return
}
if (resDTO.code != 0) {
Logger.error(TAG, `getNewspaperList then code:${resDTO.code}, message:${resDTO.message}`);
error('resDTO Response Code is failure');
return
}
// let navResStr = JSON.stringify(navResDTO);
Logger.info(TAG, "getNewspaperList then,navResDTO.timestamp:" + resDTO.timestamp);
success(resDTO.data);
}).catch((err: Error) => {
Logger.error(TAG, `getNewspaperList catch, error.name : ${err.name}, error.message:${err.message}`);
error(err);
})
})
}
static getNewspaperListFromLocal(context: Context): NewspaperListBean {
let newspaperListBean: ResponseDTO<NewspaperListBean> | null = ResourcesUtils.getResourcesJsonSync<ResponseDTO<NewspaperListBean>>(context, 'newspaper_datalist.json');
if (!newspaperListBean || !newspaperListBean.data) {
... ... @@ -23,4 +71,6 @@ export class NewspaperViewModel {
}
return newspaperListBean.data
}
}
... ...
... ... @@ -43,6 +43,17 @@ export class HttpUrlUtils {
* 批查接口,查询互动相关数据,如收藏数、评论数等
*/
static readonly INTERACT_DATA_PATH: string = "/api/rmrb-contact/contact/zh/c/content/interactData";
/**
* 电子报信息
*/
static readonly E_NEWSPAPER_INFO_PATH: string = "/api/rmrb-bff-display-zh/display/zh/c/paperApi/paperTime";
/**
* 电子报列表
*/
static readonly E_NEWSPAPER_LIST_PATH: string = "/api/rmrb-bff-display-zh/display/zh/c/paperApi/paperList";
private static hostUrl: string = HttpUrlUtils.HOST_PRODUCT;
static getCommonHeaders(): HashMap<string, string> {
... ...