张善主

Merge remote-tracking branch 'origin/main'

# Conflicts:
#	sight_harmony/commons/wdNetwork/src/main/ets/http/HttpUrlUtils.ets
#	sight_harmony/features/wdBean/Index.ets
Showing 85 changed files with 1695 additions and 943 deletions

Too many changes to show.

To preserve performance only 85 of 85+ files are displayed.

@mpaas:registry=https://mpaas-ohpm.oss-cn-hangzhou.aliyuncs.com/meta
\ No newline at end of file
... ...
... ... @@ -2,4 +2,5 @@ export default class BuildProfile {
static readonly HAR_VERSION = '1.0.0';
static readonly BUILD_MODE_NAME = 'debug';
static readonly DEBUG = true;
static readonly TARGET_NAME = 'default';
}
\ No newline at end of file
... ...
import { expect } from '@ohos/hypium';
export { Logger } from './src/main/ets/utils/Logger'
export { ResourcesUtils } from './src/main/ets/utils/ResourcesUtils'
... ... @@ -53,3 +55,9 @@ export { NetworkType } from './src/main/ets/network/NetworkType'
export { CustomToast } from './src/main/ets/reusable/CustomToast'
export { UmengStats } from "./src/main/ets/umeng/UmengStats"
export { MpaasUtils } from './src/main/ets/mpaas/MpaasUtils'
export { MpaasUpgradeCheck, UpgradeTipContent } from './src/main/ets/mpaas/MpaasUpgradeCheck'
export { TingyunAPM } from './src/main/ets/tingyunAPM/TingyunAPM'
\ No newline at end of file
... ...
... ... @@ -7,6 +7,7 @@
"main": "Index.ets",
"version": "1.0.0",
"dependencies": {
"@tingyun/harmonyos": "file:./src/main/ets/tingyunAPM/tingyun_0.0.6.har",
"@umeng/common": "^1.0.21",
"@umeng/analytics": "^1.0.19"
}
... ...
import { MPUpgradeService } from '@mpaas/upgrade'
import { upgradeRes } from '@mpaas/upgrade/src/main/ets/t4/a'
import { AppUtils } from '../utils/AppUtils'
import { SPHelper } from '../utils/SPHelper'
export interface UpgradeTipContent {
content: string
newVersion: string
downloadUrl: string
forceUpgrade: boolean
}
export class MpaasUpgradeCheck {
/// 默认提示框
checkNewVersionAndShow() {
try {
MPUpgradeService.checkNewVersionAndShow()
} catch (error) {
console.log("mpaas upgrade fail", JSON.stringify(error))
}
}
checkNewVersion(): Promise<UpgradeTipContent | null> {
return new Promise((resolve, fail) => {
MPUpgradeService.checkNewVersion().then((response)=>{
let str = JSON.stringify(response)
console.log("mpaas upgrade check", str)
/*
{
"android64FileSize": 0,
"downloadURL": "https://appgallery.huawei.com/#/app",
"fileSize": 0,
"fullMd5": "no md5",
"guideMemo": "欢迎使用新版本",
"isWifi": 0,
"netType": "ALL",
"newestVersion": "1.0.1",
"resultStatus": 204,
"silentType": 0,
"upgradeVersion": "1.0.1"
}*/
let res = response as upgradeRes
// AliUpgradeNewVersion = 201, /*当前使用的已是最新版本*/
// AliUpgradeOneTime = 202, /*客户端已有新版本,单次提醒*/
// AliUpgradeForceUpdate = 203, /*客户端已有新版本,强制升级(已废弃)*/
// AliUpgradeEveryTime = 204, /*客户端已有新版本,多次提醒*/
// AliUpgradeRejectLogin = 205, /*限制登录(已废弃)*/
// AliUpgradeForceUpdateWithLogin = 206 /*客户端已有新版本,强制升级*/
const currentAppVersoin = AppUtils.getAppVersionName()
if (res.resultStatus == 201) {
resolve(null)
return
}
// 单次升级控制
if (res.resultStatus == 202) {
const oldOnceValue = SPHelper.default.getSync("upgradeOnceKey", false) as boolean
if (true == oldOnceValue) {
resolve(null)
return
}
SPHelper.default.save("upgradeOnceKey", true)
} else {
SPHelper.default.save("upgradeOnceKey", false)
}
if (res.resultStatus == 202 || res.resultStatus == 204 || res.resultStatus == 206) {
let content: UpgradeTipContent = {
content: res.guideMemo,
newVersion: res.upgradeVersion,
downloadUrl: res.downloadURL,
forceUpgrade: res.resultStatus == 206
}
resolve(content)
return
}
resolve(null)
}).catch((error: Error) => {
console.log("mpaas upgrade fail", `name: ${error.name}, message: ${error.message}, \nstack: ${error.stack}`)
fail("检测升级失败")
})
})
}
}
\ No newline at end of file
... ...
import { MPFramework } from '@mpaas/framework'
import { common } from '@kit.AbilityKit';
/*
对接mpaas注意:
* 1、后台创建mpaas.config,需要包名。放到rawfile目录
* 2、网关加密hs_1222.png图片,放到rawfile目录
* 3. 配置和加密图片,需要包名和签名对应,否则无法使用
* */
export class MpaasUtils {
// 启动时onCreate()方法调用
static initApp(context: common.UIAbilityContext) {
MPFramework.create(context);
}
// 获取mPaaS utdid
static async mpaasUtdid() {
let utdid = await MPFramework.instance.udid
return utdid
}
// 登录和退出登录调用,用来管理白名单用
static setupUserId(userId?: string) {
MPFramework.instance.userId = userId
}
}
\ No newline at end of file
... ...
@CustomDialog
export struct CustomToast {
public static LENGTH_LONG = 5000;
public static LENGTH_SHORT = 3000;
public static LENGTH_LONG = 4000;
public static LENGTH_SHORT = 2000;
@State msg: string = ""
@State duration: number = CustomToast.LENGTH_SHORT
... ... @@ -29,7 +29,9 @@ export struct CustomToast {
.fontColor($r('app.color.white'))
.fontSize("27lpx")
.lineHeight("38lpx")
.textAlign(TextAlign.Center)
}.borderRadius(`${this.bgBorderRadius}lpx`)
.constraintSize({maxWidth:"86%"})
.padding({top:"23lpx",bottom:'23lpx',left:"35lpx",right:"35lpx"})
.backgroundColor($r("app.color.black"))
.opacity(0.7)
... ...
import { common } from '@kit.AbilityKit';
import tingyun, { LogLevel } from '@tingyun/harmonyos';
export class TingyunAPM {
private static TINGYUN_APP_KEY = "" //TODO:
private static TINGYUN_REDIRECT_HOST = "wkrt.tingyun.com"
private static logEnable() {
return true
}
//
static initApp(context: common.UIAbilityContext, deviceId?: string) {
tingyun.init({
redirectHost: TingyunAPM.TINGYUN_REDIRECT_HOST,
appKey: TingyunAPM.TINGYUN_APP_KEY,
context: context,
httpEnabled: true,
logLevel: TingyunAPM.logEnable() ? LogLevel.DEBUG : LogLevel.NONE,
// TODO: axios实例对象
// axios:axiosInstance,
network: {
enabled: true,
},
crash: {
enabled: true,
jsCrashEnabled: true,
cppCrashEnabled: true,
},
freeze: {
enabled: true
}
});
if (deviceId) {
tingyun.setUserId(deviceId)
}
tingyun.startNextSession()
}
}
\ No newline at end of file
... ...
... ... @@ -63,5 +63,16 @@ export class AppUtils {
// TODO: 待确认,暂时写死Android
return "Harmony"
}
static getFingerprint(): string {
try {
let bundleInfo =
bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO);
let finger = bundleInfo.signatureInfo.fingerprint;
} catch (e) {
Logger.warn(TAG, 'get app signatureinfo error:' + e?.message);
}
return '';
}
}
... ...
... ... @@ -26,6 +26,9 @@ export enum EmitterEventId {
// 换绑成功
PHONE_CHANGE_SUCCESS = 9,
// 直播间-取消-预约成功
LIVE_ROOM_SUBSCRIBE = 10,
// App回到前台
APP_ENTER_FOREGROUD = 100,
// App进入后台
... ...
... ... @@ -213,7 +213,7 @@ export class HttpUrlUtils {
/**
* 预约状态
*/
static readonly LIVE_APPOINTMENT_BATCH_PATH: string = "api/live-center-message/zh/c/live/subscribe/user/batch";
static readonly LIVE_APPOINTMENT_BATCH_PATH: string = "/api/live-center-message/zh/c/live/subscribe/user/batch";
/**
* 搜索结果 显示tab 数
... ... @@ -298,6 +298,10 @@ export class HttpUrlUtils {
static readonly ATTENTION_BATCH_DATA_PATH: string = "/api/rmrb-interact/interact/zh/c/attention/batch";
/**
* 查询是否设置过密码checkSetPassword
*/
static readonly CHECK_SET_PASSWORD_PATH: string = "/api/rmrb-user-center/user/zh/c/ifSetPassword";
/**
* 获取oss 配置
*/
static readonly OSS_PARAMS_PATH: string = "/api/rmrb-bff-display-zh/content/zh/c/oss/configs";
... ... @@ -704,4 +708,10 @@ export class HttpUrlUtils {
return url;
}
//查询是否设置过密码
static checkSetPassword() {
let url = HttpUrlUtils.getHost() + HttpUrlUtils.CHECK_SET_PASSWORD_PATH;
return url;
}
}
\ No newline at end of file
... ...
... ... @@ -68,6 +68,7 @@ export class WDRouterPage {
static loginPage = new WDRouterPage("wdLogin", "ets/pages/login/LoginPage");
static oneKeyLoginPage = new WDRouterPage("wdLogin", "ets/pages/login/OneKeyLoginPage");
static forgetPasswordPage = new WDRouterPage("wdLogin", "ets/pages/login/ForgetPasswordPage");
static modifyPasswordPage = new WDRouterPage("wdLogin", "ets/pages/login/ModifyPasswordPage");
//我的 预约
static appointmentListPage = new WDRouterPage("wdComponent", "ets/components/page/AppointmentListPage");
//我的 关注
... ... @@ -82,6 +83,9 @@ export class WDRouterPage {
static browsingHistoryPage = new WDRouterPage("wdComponent", "ets/components/page/BrowsingHistoryPage");
//我的收藏
static myCollectionListPagePage = new WDRouterPage("wdComponent", "ets/components/page/MyCollectionListPage");
//互动消息
static interactMessagePage = new WDRouterPage("wdComponent", "ets/components/page/InteractMessagePage");
static loginProtocolPage = new WDRouterPage("wdLogin", "ets/pages/login/LoginProtocolWebview");
//我的主页
static mineHomePage = new WDRouterPage("wdComponent", "ets/pages/MineHomePage");
... ... @@ -113,6 +117,8 @@ export class WDRouterPage {
static broadcastPage = new WDRouterPage("phone", "ets/pages/broadcast/BroadcastPage");
//搜索主页
static searchPage = new WDRouterPage("wdComponent", "ets/pages/SearchPage");
//消息主页
static mineMessagePage = new WDRouterPage("wdComponent", "ets/pages/MineMessagePage");
//搜索人民号主页
static searchCreatorPage = new WDRouterPage("wdComponent", "ets/pages/SearchCreatorPage");
//人民号主页
... ... @@ -120,7 +126,7 @@ export class WDRouterPage {
//直播更多页
static liveMorePage = new WDRouterPage("wdComponent", "ets/components/page/LiveMorePage");
//预约更多页
static reserveMorePage = new WDRouterPage("wdComponent", "ets/components/page/ReserveMorePage");
static reserveMorePage = new WDRouterPage("wdComponent", "ets/components/reserveMore/ReserveMorePage");
//金刚位聚合页
static themeListPage = new WDRouterPage("wdComponent", "ets/components/page/ThemeListPage");
// 栏目页面、频道详情
... ...
... ... @@ -46,7 +46,7 @@ export class ProcessUtils {
if ('1' == type) {
// 内链
let content: ContentDTO = {} as ContentDTO;
let content: ContentDTO = new ContentDTO();
content.linkUrl = linkUrl;
ProcessUtils.gotoWeb(content);
} else if ('2' == type) {
... ... @@ -62,16 +62,13 @@ export class ProcessUtils {
* @param advert 展现中心的展现广告
*/
static advJumpMainPage(advert: AdvertsBean) {
let content: ContentDTO = {
linkUrl: advert.linkUrl,
pageId: advert.pageId,
objectId: advert.objectId,
objectType: advert.objectType.toString(),
relId: advert.relId,
bottomNavId: advert.bottomNavId
} as ContentDTO;
let content: ContentDTO = new ContentDTO()
content.linkUrl = advert.linkUrl;
content.pageId = advert.pageId;
content.objectId = advert.objectId;
content.objectType = advert.objectType.toString();
content.relId = advert.relId;
content.bottomNavId = advert.bottomNavId;
ProcessUtils.processPage(content);
}
... ...
... ... @@ -21,7 +21,7 @@ class AppInfo {
screenTabbarSafeHeight: number = 42 // TODO 这里需要动态获取
imei: string = HttpUtils.getImei()
device_id: string = HttpUtils.getDeviceId()
fontSizes: string = 'small'
// fontSizes: string = 'small'
// TODO 完善
}
... ... @@ -103,7 +103,7 @@ function getAppPublicInfo(): string {
let info = new AppInfo()
info.plat = 'Phone'
// 直接用Android,后续适配再新增鸿蒙
info.system = 'Android'
// info.system = 'Android'
info.networkStatus = 1
let result = JSON.stringify(info)
Logger.debug(TAG, 'getAppPublicInfo: ' + JSON.stringify(info))
... ... @@ -134,12 +134,12 @@ function handleJsCallReceiveH5Data(data: Message) {
break;
case '6':
let contentJson: IDataJson = JSON.parse(data?.data?.dataJson || '{}')
let content: ContentDTO = {
objectId: contentJson?.newsId,
relId: contentJson?.newsRelId,
pageId: contentJson?.pageId,
objectType: String(contentJson?.newsObjectType)
} as ContentDTO
let content: ContentDTO = new ContentDTO();
content.objectId = contentJson?.newsId;
content.relId = contentJson?.newsRelId;
content.pageId = contentJson?.pageId;
content.objectType = String(contentJson?.newsObjectType);
ProcessUtils.processPage(content)
break;
default:
... ... @@ -150,16 +150,14 @@ function handleJsCallReceiveH5Data(data: Message) {
function handleJsCallAppInnerLinkMethod(data: Message) {
let urlObject = Url.URL.parseURL(data?.data?.appInnerLink);
let urlParams = new Url.URLParams(urlObject.search);
let content: ContentDTO = {
objectId: urlParams.get('contentId') || '',
relId: urlParams.get('relId') || '',
relType: urlParams.get('relType') || '',
pageId: urlParams.get('pageId') || '',
objectType: '',
linkUrl: urlParams.get('url') || ''
} as ContentDTO
if (urlParams.get('skipType') === '1') {
let content: ContentDTO = new ContentDTO()
content.objectId = urlParams.get('contentId') || '';
content.relId = urlParams.get('relId') || '';
content.relType = urlParams.get('relType') || '';
content.pageId = urlParams.get('pageId') || '';
content.objectType = '';
content.linkUrl = encodeURI(urlParams.get('url') || '');
switch (urlParams.get('type')) {
case 'video':
content.objectType = ContentConstants.TYPE_VOD
... ... @@ -182,8 +180,14 @@ function handleJsCallAppInnerLinkMethod(data: Message) {
ProcessUtils.processPage(content)
break;
case 'h5':
if (urlParams.get('skipType') === '1') {
content.objectType = ContentConstants.TYPE_LINK
ProcessUtils.processPage(content)
}
if (urlParams.get('skipType') === '4') {
content.objectType = ContentConstants.TYPE_LINK
ProcessUtils.jumpExternalWebPage(content.linkUrl)
}
break;
case 'topic':
if (urlParams.get('subType') === 'h5') {
... ... @@ -208,7 +212,7 @@ function handleJsCallAppInnerLinkMethod(data: Message) {
default:
break;
}
}
}
function handleJsCallGetAppLoginAuthInfo() {
... ...
... ... @@ -5,14 +5,12 @@ import { performJSCallNative } from './JsBridgeBiz';
import { H5CallNativeType } from './H5CallNativeType';
import { Message } from 'wdJsBridge/src/main/ets/bean/Message';
import { DateTimeUtils } from 'wdKit'
const TAG = 'WdWebLocalComponent';
@Component
export struct WdWebLocalComponent {
webviewControl: BridgeWebViewControl = new BridgeWebViewControl()
onWebPrepared: () => void = () => {
}
onWebPrepared: () => void = () => {}
@Prop backVisibility: boolean = false
@Prop webResource: Resource = {} as Resource
@State webHeight: string | number = '100%'
... ...
... ... @@ -170,4 +170,8 @@ export { CreatorsBean } from './src/main/ets/bean/content/CreatorsBean';
export { MasterDetailRes } from './src/main/ets/bean/user/MasterDetailRes';
export { ReserveItemBean } from './src/main/ets/bean/live/ReserveItemBean';
export { FeedbackTypeBean } from './src/main/ets/bean/detail/FeedbackTypeBean';
\ No newline at end of file
... ...
... ... @@ -3,47 +3,48 @@ import { AudioDTO } from '../content/AudioDTO';
import { ContentDTO } from '../content/ContentDTO';
import { BaseDTO } from './BaseDTO';
export interface CompDTO extends BaseDTO{
backgroundColor: string;
backgroundImgUrl: string;
cityCode: string;
compStyle: string;
compType: string;
@Observed
export class CompDTO implements BaseDTO{
backgroundColor: string='';
backgroundImgUrl: string='';
cityCode: string='';
compStyle: string='';
compType: string='';
// dataSourceRequest: any[];
districtCode: string;
districtCode: string='';
extraData?: string;
hasAdInfo: number;
id: number;
imgSize: string;
innerUrl: string;
linkUrl: string;
hasAdInfo: number=-1;
id: number=0;
imgSize: string='';
innerUrl: string='';
linkUrl: string='';
// meddleDataList: any[];
name: string;
objectId: string; // 跳转页面id?
objectTitle: string; // comp标题
name: string='';
objectId: string=''; // 跳转页面id?
objectTitle: string=''; // comp标题
// objectType?: string; // 跳转类型,枚举:
operDataList: ContentDTO[]; // 运营数据列表【正常运营配置的强运营数据,部分推荐场景的配置(自动源兜底数据)】
operDataList: ContentDTO[]=[]; // 运营数据列表【正常运营配置的强运营数据,部分推荐场景的配置(自动源兜底数据)】
// pageId?: any;
posterSize: string;
posterUrl: string;
provinceCode: string;
sortValue: number;
subType: string;
imageScale: number; // 封面图比例 1-4:3, 2-16:9, 3-3:2
audioDataList: AudioDTO[];
titleShowPolicy: string | number;
posterSize: string='';
posterUrl: string='';
provinceCode: string='';
sortValue: number=-1;
subType: string='';
imageScale: number=-1; // 封面图比例 1-4:3, 2-16:9, 3-3:2
audioDataList: AudioDTO[]=[];
titleShowPolicy: string | number='';
/**
* 组件内容源类型 (LIVE_HORIZONTAL_CARD\LIVE_RESERVATION\LIVE_LARGE_CARD\LIVE_END\LIVE_MONTHLY_RANKING )
*/
dataSourceType: string;
dataSourceType: string='';
/**
* 信息流广告素材
*/
matInfo: CompAdvMatInfoBean
matInfo: CompAdvMatInfoBean = {} as CompAdvMatInfoBean
pageId?: string;
objectType?: string;
... ...
... ... @@ -8,81 +8,148 @@ import { RmhInfoDTO } from '../detail/RmhInfoDTO';
import { commentInfo } from './commentInfo';
import { BaseDTO } from '../component/BaseDTO';
export interface ContentDTO extends BaseDTO {
appStyle: string;
cityCode: string;
coverSize: string;
coverType: number;
coverUrl: string;
description: string;
districtCode: string;
endTime: string;
hImageUrl: string;
heatValue: string;
innerUrl: string;
landscape: number;
@Observed
export class ContentDTO implements BaseDTO {
appStyle: string = '';
cityCode: string = '';
coverSize: string = '';
coverType: number = -1;
coverUrl: string = '';
description: string = '';
districtCode: string = '';
endTime: string = '';
hImageUrl: string = '';
heatValue: string = '';
innerUrl: string = '';
landscape: number = -1;
lengthTime?: object;
linkUrl: string;
openLikes: number;
linkUrl: string = '';
openLikes: number = 0;
openComment?: number;
openUrl: string;
pageId: string;
openUrl: string = '';
pageId: string = '';
// playUrls: any[];
programAuth: string;
programId: string;
programName: string;
programSource: number;
programType: number;
provinceCode: string;
programAuth: string = '';
programId: string = '';
programName: string = '';
programSource: number = -1;
programType: number = -1;
provinceCode: string = '';
// rankingList: any[];
showTitleEd: string;
showTitleIng: string;
showTitleNo: string;
showTitleEd: string = '';
showTitleIng: string = '';
showTitleNo: string = '';
// sortValue?: any;
startTime: string;
subType: string;
subtitle: string;
title: string;
vImageUrl: string;
screenType: string;
source: string;
objectId: string;
objectType: string;
channelId: string;
relId: string;
relType: string;
newsTitle: string; //单图卡/2行标题/3行标题
publishTime: string;
publishTimestamp: string;
visitorComment: number;
fullColumnImgUrls: FullColumnImgUrlDTO[];
liveInfo: LiveInfoDTO; // 直播新闻信息【BFF聚合】
videoInfo: VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的
startTime: string = '';
subType: string = '';
subtitle: string = '';
title: string = '';
vImageUrl: string = '';
screenType: string = '';
source: string = '';
objectId: string = '';
objectType: string = '';
channelId: string = '';
relId: string = '';
relType: string = '';
newsTitle: string = ''; //单图卡/2行标题/3行标题
publishTime: string = '';
publishTimestamp: string = '';
visitorComment: number = 0;
fullColumnImgUrls: FullColumnImgUrlDTO[] = [];
liveInfo: LiveInfoDTO = {} as LiveInfoDTO; // 直播新闻信息【BFF聚合】
videoInfo: VideoInfoDTO = {} as VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的
newsSummary: string; //appstyle:2 ,新闻详情
newsSummary: string = ''; //appstyle:2 ,新闻详情
// 二次请求接口,返回的数据,这里组装到content里;
interactData: InteractDataDTO;
hasMore: number,
slideShows: slideShows[],
voiceInfo: VoiceInfoDTO,
tagWord: number,
isSelect: boolean;
rmhInfo: RmhInfoDTO; // 人民号信息
photoNum: number;
corner: string;
rmhPlatform: number;
newTags: string;
interactData?: InteractDataDTO;
hasMore: number = -1;
slideShows: slideShows[] = [];
voiceInfo: VoiceInfoDTO = {} as VoiceInfoDTO;
tagWord: number = -1;
isSelect: boolean = false;
rmhInfo: RmhInfoDTO = {} as RmhInfoDTO; // 人民号信息
photoNum: number = 0;
corner: string = '';
rmhPlatform: number = 0;
newTags: string = '';
titleShow?: number;
isSearch?: boolean; // 是否是搜索的结果,区分搜索和主页的数据
isCollection?: boolean; // 是否是收藏的结果,区分搜索和主页的数据
commentInfo?: commentInfo
//底部导航栏 id(用于频道跳转)
bottomNavId:string;
bottomNavId: string = '';
// 链接类型: 0:无链接;1:内链(文章);2:外链
openType:string
extra:string
openType: string = '';
extra: string = ''
static clone(old:ContentDTO): ContentDTO {
let content = new ContentDTO();
content.appStyle = old.appStyle;
content.cityCode = old.cityCode;
content.coverSize = old.coverSize;
content.coverType = old.coverType;
content.coverUrl = old.coverUrl;
content.description = old.description;
content.districtCode = old.districtCode;
content.endTime = old.endTime;
content.hImageUrl = old.hImageUrl;
content.heatValue = old.heatValue;
content.innerUrl = old.innerUrl;
content.landscape = old.landscape;
content.lengthTime = old.lengthTime;
content.linkUrl = old.linkUrl;
content.openLikes = old.openLikes;
content.openComment = old.openComment;
content.openUrl = old.openUrl;
content.pageId = old.pageId;
content.programAuth = old.programAuth;
content.programId = old.programId;
content.programName = old.programName;
content.programSource = old.programSource;
content.programType = old.programType;
content.provinceCode = old.provinceCode;
content.showTitleEd = old.showTitleEd;
content.showTitleIng = old.showTitleIng;
content.showTitleNo = old.showTitleNo;
content.startTime = old.startTime;
content.subType = old.subType;
content.subtitle = old.subtitle;
content.title = old.title;
content.vImageUrl = old.vImageUrl;
content.source = old.source;
content.objectId = old.objectId;
content.objectType = old.objectType;
content.channelId = old.channelId;
content.relId = old.relId;
content.relType = old.relType;
content.newsTitle = old.newsTitle;
content.publishTime = old.publishTime;
content.publishTimestamp = old.publishTimestamp;
content.visitorComment = old.visitorComment;
content.fullColumnImgUrls = old.fullColumnImgUrls;
content.liveInfo = old.liveInfo;
content.videoInfo = old.videoInfo;
content.newsSummary = old.newsSummary;
content.interactData = old.interactData;
content.hasMore = old.hasMore;
content.slideShows = old.slideShows;
content.voiceInfo = old.voiceInfo;
content.tagWord = old.tagWord;
content.isSelect = old.isSelect;
content.rmhInfo = old.rmhInfo;
content.photoNum = old.photoNum;
content.corner = old.corner;
content.rmhPlatform = old.rmhPlatform;
content.newTags = old.newTags;
content.titleShow = old.titleShow;
content.isSearch = old.isSearch;
content.isCollection = old.isCollection;
content.commentInfo = old.commentInfo;
content.bottomNavId = old.bottomNavId;
content.openType = old.openType;
content.extra = old.extra;
return content;
}
}
\ No newline at end of file
... ...
/**
* 批查接口查询互动相关数据,返回数据bean
*/
export interface InteractDataDTO {
collectNum: number | string;
commentNum: number | string;
contentId: string;
contentType: number;
likeNum: number | string;
readNum: number;
shareNum: number;
@Observed
export class InteractDataDTO {
collectNum: number | string = 0;
commentNum: number | string = 0;
contentId: string = '';
contentType: number = 0;
likeNum: number | string = 0;
readNum: number = 0;
shareNum: number = 0;
}
\ No newline at end of file
... ...
... ... @@ -6,4 +6,5 @@ export interface H5ReceiveDataExtraBean {
networkStatus: number;
darkMode: string;
fontSizes: string;
clientHeight: number;
}
\ No newline at end of file
... ...
@Observed export class ReserveItemBean {
liveId: number
relationId: string
subscribe: boolean
constructor( liveId: number, relationId: string, subscribe: boolean) {
this.liveId = liveId;
this.relationId = relationId;
this.subscribe = subscribe;
}
}
... ...
import { AudioDataList } from './AudioDataList';
import { OperDataList } from './OperDataList';
import { ContentDTO } from '../content/ContentDTO';
export interface CompList {
audioDataList: AudioDataList[];
... ... @@ -36,7 +36,7 @@ export interface CompList {
// openComment?: any;
// openLikes?: any;
operDataList: OperDataList[];
operDataList: ContentDTO[];
pageId: string;
// position?: any;
... ...
... ... @@ -4,7 +4,7 @@
export interface TopNavDTO {
channelId: number;
channelStyle: number;
channelType: number;
channelType: number; // 频道样式;1-沉浸式;2-信息流;3-特殊频道(跳转指定页面的,如版面)
defaultPermitted: number;
delPermitted: number;
fontCColor: string; // 频道展示样式颜色(选中状态)
... ...
... ... @@ -7,7 +7,7 @@
"main": "Index.ets",
"version": "1.0.0",
"dependencies": {
"@ohos/lottie": "2.0.0",
"@ohos/lottie": "2.0.10",
"wdConstant": "file:../../commons/wdConstant",
"wdPlayer": "file:../../features/wdPlayer",
"wdLogin": "file:../../features/wdLogin",
... ...
... ... @@ -23,7 +23,7 @@ import { Card21Component } from './cardview/Card21Component';
*/
@Component
export struct CardParser {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
build() {
this.contentBuilder(this.contentDTO);
... ...
import { SPHelper,Logger,ToastUtils } from 'wdKit';
import { ContentDetailDTO, Action, ContentDTO,batchLikeAndCollectResult } from 'wdBean';
import { ProcessUtils } from 'wdRouter';
import router from '@ohos.router';
import { batchLikeAndCollectParams } from 'wdDetailPlayApi/src/main/ets/request/ContentDetailRequest';
import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel';
import { SpConstants } from 'wdConstant/Index';
import { WDShare } from 'wdShare/Index';
import {LikeComponent} from './view/LikeComponent'
const TAG = 'CarderInteraction'
/**
* 卡片 分享、评论、点赞公用组件
*/
@Component
export struct CarderInteraction {
@Prop contentDTO: ContentDTO
@State contentId: string = ''
@State contentDetailData: ContentDetailDTO = {} as ContentDetailDTO
@State newsStatusOfUser: batchLikeAndCollectResult = {} as batchLikeAndCollectResult// 点赞、收藏状态
@State likeBean: Record<string, string> = {}
async aboutToAppear() {
await this.getContentDetailData()
// 点赞需要数据
this.likeBean['contentId'] = this.contentDetailData.newsId + ''
this.likeBean['userName'] = this.contentDetailData.userInfo?.userName + ''
this.likeBean['contentType'] = this.contentDetailData.newsType + ''
this.likeBean['title'] = this.contentDetailData.newsTitle + ''
this.likeBean['userHeaderUrl'] = this.contentDetailData.userInfo?.headPhotoUrl + ''
this.likeBean['channelId'] = this.contentDetailData.reLInfo?.channelId + ''
}
build() {
Row(){
Row(){
Image($r('app.media.CarderInteraction_share'))
.width(18)
.height(18)
Text('分享')
.margin({left:4})
.fontSize(14)
.fontColor('#666666')
}
.justifyContent(FlexAlign.Center)
.onClick(()=>{
WDShare.shareContent(this.contentDetailData)
})
Row(){
Image($r('app.media.CarderInteraction_comment'))
.width(18)
.height(18)
Text('评论')
.margin({left:4})
.fontSize(14)
.fontColor('#666666')
}
.justifyContent(FlexAlign.Center)
.onClick(()=>{
ProcessUtils.processPage(this.contentDTO)
})
this.builderLike()
}
.width('100%')
.margin({top:11})
.padding({
left:21,
right:21
})
.justifyContent(FlexAlign.SpaceBetween)
.alignItems(VerticalAlign.Center)
}
/**
* 点赞组件
*/
@Builder
builderLike() {
Row(){
if (this.likeBean?.contentId) {
LikeComponent({
data: this.likeBean,
componentType: 3
})
}
}
.width(42)
}
/**
* 请求(动态)详情页数据
* */
private async getContentDetailData() {
try {
let data = await MultiPictureDetailViewModel.getDetailData(this.contentDTO.relId, this.contentDTO.objectId, this.contentDTO.relType)
this.contentDetailData = data[0];
console.log('动态详情',JSON.stringify(this.contentDetailData))
} catch (exception) {
console.log('请求失败',JSON.stringify(exception))
}
}
}
... ...
... ... @@ -55,7 +55,7 @@ export struct DynamicDetailComponent {
@State newsStatusOfUser: batchLikeAndCollectResult = {} as batchLikeAndCollectResult// 点赞、收藏状态
//跳转
private mJumpInfo: ContentDTO = {} as ContentDTO;
private mJumpInfo: ContentDTO = new ContentDTO();
@State publishTime: string = ''
@State isNetConnected: boolean = true
... ...
... ... @@ -6,7 +6,7 @@ import {
H5ReceiveDetailBean,
ResponseBean
} from 'wdBean';
import { Logger, SPHelper, NetworkUtil } from 'wdKit';
import { Logger, SPHelper, NetworkUtil, DisplayUtils } from 'wdKit';
import { SpConstants } from 'wdConstant';
import { WdWebLocalComponent } from 'wdWebComponent';
import { NativeCallH5Type } from 'wdWebComponent/src/main/ets/pages/NativeCallH5Type';
... ... @@ -67,7 +67,7 @@ export struct ImageAndTextWebComponent {
loadImageOnlyWifiSwitch: loadImageOnlyWifiSwitch ? '1' : '2',
networkStatus: Number(NetworkUtil.getNetworkType()),
darkMode: 'light',
fontSizes: 'small'
fontSizes: 'normalsize'
} as H5ReceiveDataExtraBean
let h5ReceiveDataJsonBean: H5ReceiveDataJsonBean = {
... ...
@Component
export struct InteractMComponent {
build() {
Row(){
Image('')
.backgroundColor(Color.Red)
.width(36)
.height(36)
.borderRadius(18)
Column(){
Row(){
Text('用户名')
.fontSize('14fp').fontColor('#222222')
Text('回复了你的评论')
.fontSize('14fp').fontColor('#999999')
.margin({left:5})
}.width('100%')
Text('两天前')
.margin({top:2})
.fontSize('12fp').fontColor('#B0B0B0')
Text('评论内容')
.margin({top:8,bottom:10})
.fontSize('16fp').fontColor('#222222')
.width('100%')
.constraintSize({maxHeight:500})
Column(){
Text('[你的评论]乐事薯片,大家的最爱').fontSize('14fp').fontColor('#666666').constraintSize({maxHeight:500})
.margin({top:5,bottom:5})
.width('100%')
Divider()
.color('#f5f5f5')
.backgroundColor('#f5f5f5')
.width('100%')
.height(1)
Row(){
Text('乐事薯片,大家的最爱!!!!').fontSize('12fp').fontColor('#666666').constraintSize({maxHeight:500})
Blank()
Image($r('app.media.mine_user_edit'))
.width('12')
.height('12')
}.margin({top:5,bottom:5}).width('100%')
}.alignItems(HorizontalAlign.Start).backgroundColor('#f5f5f5').borderRadius(5)
}.padding({left:5}).alignItems(HorizontalAlign.Start)
}.padding({top:5,left:16,right:16}).width('100%').height(160).alignItems(VerticalAlign.Top).backgroundColor(Color.Red)
}
}
\ No newline at end of file
... ...
// import { FrontLinkObject, MorningEveningPaperDTO, PageInfoBean } from 'wdBean';
import { CompList, PageInfoBean } from 'wdBean';
import {
CompList,
PageInfoBean,
ContentDTO,
contentListParams,
InteractDataDTO
} from 'wdBean';
import { DateTimeUtils, Logger, SPHelper, WindowModel } from 'wdKit/Index';
import { PaperReaderSimpleDialog } from '../../dialog/PaperReaderDialog';
import { MorningEveningViewModel } from '../../viewmodel/MorningEveningViewModel';
... ... @@ -13,6 +19,8 @@ import { image } from '@kit.ImageKit';
import { getPicture, imageNet2PixelMap } from '../../utils/ImageUtils';
import { effectKit } from '@kit.ArkGraphics2D';
import { window } from '@kit.ArkUI';
import { PeopleShipMainViewModel } from '../../viewmodel/PeopleShipMainViewModel';
import { AudioSuspensionModel } from '../../viewmodel/AudioSuspensionModel'
const TAG = 'MorningEveningPaperComponent';
... ... @@ -22,6 +30,7 @@ export struct MorningEveningPaperComponent {
@State pageInfoBean: PageInfoBean = {} as PageInfoBean
// @State compInfoBean: CompInfoBean = {} as CompInfoBean
@State compListItem: CompList = {} as CompList
@Provide commentList: InteractDataDTO[] = []
@State audioPlayUrl: string = ""
// @Consume dailyPaperTopicPageId: number
// @Provide compListItem: CompList = {} as CompList
... ... @@ -66,6 +75,7 @@ export struct MorningEveningPaperComponent {
offset: { dx: 12, dy: -150 },
})
private AudioSuspension = new AudioSuspensionModel()
onCancel() {
Logger.info(TAG, "cj2024 onCancel = ")
... ... @@ -128,6 +138,10 @@ export struct MorningEveningPaperComponent {
// this.compInfoBean = compInfoBean
if (compInfoBean?.compList[0]) {
this.compListItem = compInfoBean?.compList[0]
Logger.debug(TAG, '获取评论数据' + `${this.compListItem.operDataList.length}`)
if (this.compListItem.operDataList && this.compListItem.operDataList.length > 0) {
this.getAllContentInteractData(this.compListItem.operDataList)
}
if (compInfoBean?.compList[0].audioDataList) {
this.audioPlayUrl = compInfoBean?.compList[0].audioDataList[0].audioUrl
this.audioTitle = compInfoBean?.compList[0].audioDataList[0].title
... ... @@ -146,6 +160,29 @@ export struct MorningEveningPaperComponent {
}
// 批量查询内容当前用户点赞、收藏状态评论个数
private async getAllContentInteractData(list: ContentDTO[]) {
try {
// 获取列表数据
const params: contentListParams = {
contentList: []
}
list.forEach((item: ContentDTO) => {
params.contentList.push({
contentId: item.objectId,
contentType: Number(item.objectType ?? '1')
})
})
Logger.debug(TAG, '获取评论数据' + `${JSON.stringify(params)}`)
this.commentList = await PeopleShipMainViewModel.getContentInteractInfo(params)
Logger.debug(TAG, '获取评论数据' + `${JSON.stringify(this.commentList)}`)
} catch (exception) {
}
}
async setComponentBgColor(imageUrl: string) {
// 图片转换为PixelMap对象
// const pixelMap: image.PixelMap = await image2PixelMap(item.icon);
... ... @@ -203,7 +240,9 @@ export struct MorningEveningPaperComponent {
}
ListItem() {
SingleColumn999Component({ compListItem: this.compListItem })
SingleColumn999Component({
compListItem: this.compListItem,
})
.margin({
top: this.pageInfoBean?.topicInfo?.frontLinkObject ? 10 : 44
})
... ... @@ -261,8 +300,9 @@ export struct MorningEveningPaperComponent {
.objectFit(ImageFit.Contain)
.onClick(() => {
Logger.info("TAG", "cj compInfoBean onClick1 = " + this.isAudioPlaying)
dialog.open()
this.playerController.firstPlay(this.audioPlayUrl)
// dialog.open()
this.AudioSuspension.showWindow()
// this.playerController.firstPlay(this.audioPlayUrl)
Logger.info("TAG", "cj compInfoBean onClick2 = " + this.isAudioPlaying)
})
}
... ...
... ... @@ -27,35 +27,51 @@ export struct PaperTitleComponent {
Row() {
// 在 29 * 18 的矩形框中绘制一个三角形,起点(0, 0),经过(0, 18),经过(20, 18),终点(29, 0)
Polygon({ width: 29, height: 18 })
.points([[0, 0], [0, 18], [20, 18], [29, 0]])// .fill(Color.White)
.fillOpacity(0.2)
.fill(Color.White)
// Polygon({ width: 29, height: 18 })
// .points([[0, 0], [0, 18], [20, 18], [29, 0]])// .fill(Color.White)
// .fillOpacity(0.2)
// .fill(Color.White)
// .linearGradient({
// direction: GradientDirection.Right,
// colors: [[0xffffff, 1.0], [0xffffff, 0.75], [0xffffff, 0.5], [0xffffff, 0.0], [0xffffff, 0.0]]
// })
Row()
.width('29vp')
.height('18vp')
.clip(new Path({
commands: `M0 0 H${vp2px(29)} L${vp2px(20)} ${vp2px(18)} L0 ${vp2px(18)} Z`
}))
.linearGradient({
direction: GradientDirection.Right, // 渐变方向
repeating: false, // 渐变颜色是否重复
colors: [[0x1affffff, 0.0],[0x1affffff, 0.3], [0x33ffffff, 0.6], [0x4dffffff,1]] // 数组末尾元素占比小于1时满足重复着色效果
})
Text(this.title ?? "")
.margin({ left: 5 })
.fontSize(20)
.margin({ left: 10 })
.fontSize(22)
.fontColor($r('app.color.white'))
.fontWeight(900)
.maxLines(1)
Text(this.subTitle ?? '')// Text('2024年\n1月16日')
// .width(50)
.margin({ left: 5 })
.fontSize(8)
.margin({ left: 6 })
.fontSize(10)
.fontColor($r('app.color.white'))
.maxLines(2)
.textAlign(TextAlign.End)
this.rightDecorateBuilder()
// .linearGradient({
// direction: GradientDirection.Right,
// colors: [[0x4Dffffff, 1.0], [0x4Dffffff, 0.75], [0x4Dffffff, 0.5], [0x4Dffffff, 0.75], [0x1ffffff, 0.0]]
// })
Image($r('app.media.bg_event_status_end'))
.height($r('app.float.top_arrow_size'))
.width(100)
.visibility(Visibility.None)
// Image($r('app.media.bg_event_status_end'))
// .height($r('app.float.top_arrow_size'))
// .width(100)
// .visibility(Visibility.None)
}
.height('100%')
.alignItems(VerticalAlign.Center)
... ... @@ -87,7 +103,7 @@ export struct PaperTitleComponent {
center: { anchor: "__container__", align: VerticalAlign.Center }
})
.id('img_share')
.margin({ right: 13 })
.margin({ right: 16 })
.onClick(() => {
ToastUtils.showToast('分享为公共方法,待开发', 1000)
})
... ... @@ -105,19 +121,32 @@ export struct PaperTitleComponent {
@Builder
rightDecorateBuilder() {
Row() {
Polygon({ width: 20, height: 18 })
.points([[8, 0], [0, 18], [20, 18], [20, 0]])// .fill(Color.White)
.fillOpacity(0.3)
.fill(Color.White)
Rect({ width: 80, height: 18 })// .fillOpacity(0.3)
.fill(Color.White)
.fillOpacity(0.01)
Row()
.width('100vp')
.height('18vp')
.clip(new Path({
commands: `M${vp2px(9)} 0 H${vp2px(91)} V${vp2px(18)} L0 ${vp2px(18)} Z`
}))
.linearGradient({
direction: GradientDirection.Right,
colors: [[0x4Dffffff, 1.0], [0x4Dffffff, 0.75], [0x4Dffffff, 0.5], [0x40ffffff, 0.25], [0x1ffffff, 0.0]]
direction: GradientDirection.Right, // 渐变方向
repeating: false, // 渐变颜色是否重复
colors: [[0x4dffffff, 0.0], [0x33ffffff, 0.3], [0x1affffff,0.6], [0x03ffffff,1]] // 数组末尾元素占比小于1时满足重复着色效果
})
}
.margin({ left: 6 })
.margin({ left:8, right: 0})
// Row() {
// Polygon({ width: 20, height: 18 })
// .points([[8, 0], [0, 18], [20, 18], [20, 0]])// .fill(Color.White)
// .fillOpacity(0.3)
// .fill(Color.White)
// Rect({ width: 80, height: 18 })// .fillOpacity(0.3)
// .fill(Color.White)
// .fillOpacity(0.01)
// .linearGradient({
// direction: GradientDirection.Right,
// colors: [[0x4Dffffff, 1.0], [0x4Dffffff, 0.75], [0x4Dffffff, 0.5], [0x40ffffff, 0.25], [0x1ffffff, 0.0]]
// })
// }
// .margin({ left: 6 })
}
}
\ No newline at end of file
... ...
import { CompList, ContentDTO } from 'wdBean';
import { it } from '@ohos/hypium';
import { CompList, ContentDTO, InteractDataDTO} from 'wdBean';
import { BreakpointConstants } from 'wdConstant';
import { Logger } from 'wdKit';
import { PaperSingleColumn999CardView } from '../page/CardView';
... ... @@ -13,6 +14,7 @@ const TAG = 'SingleColumn999Component';
export struct SingleColumn999Component {
// @Consume compListItem?: CompList
@Prop compListItem?: CompList
@StorageLink('currentBreakpoint') @Watch('watchCurrentBreakpoint') currentBreakpoint: string = BreakpointConstants.BREAKPOINT_XS;
// @State compDTO: CompDTO = {
... ... @@ -122,8 +124,6 @@ export struct SingleColumn999Component {
this.buildPaperItem(item, index)
}
}, (item: ContentDTO, index: number) => JSON.stringify(item))
// }
// .divider({ strokeWidth: 1, color: '#EFEFEF' }) // 每行之间的分界线
ListItem() {
Text("已显示全部内容")
... ... @@ -170,7 +170,7 @@ export struct SingleColumn999Component {
buildPaperItem(item: ContentDTO, index: number) {
PaperSingleColumn999CardView({
item: item,
index: index
index: index,
})
}
}
\ No newline at end of file
... ...
... ... @@ -270,6 +270,7 @@ export struct MultiPictureDetailPageComponent {
.indicator(false)
.displayCount(1)
.loop(false)
.effectMode(EdgeEffect.None)
.id('e_swiper_content')
.alignRules({
center: { anchor: "__container__", align: VerticalAlign.Center },
... ...
... ... @@ -9,7 +9,7 @@ import { DateTimeUtils } from 'wdKit/Index'
*/
@Component
export struct CardMediaInfo {
@State contentDTO: ContentDTO = {} as ContentDTO // 如果有duraion,代表点播,显示时长;如果不传或者传0,显示直播中
@State contentDTO: ContentDTO = new ContentDTO() // 如果有duraion,代表点播,显示时长;如果不传或者传0,显示直播中
// objectType 0:不跳转 1:点播,2:直播,3:活动,4:广告,5:专题,6:链接,7:榜单,8:图文,9:组图,10:H5新闻,11:频道,12:组件,13:音频,
// 14动态图文,15动态视频16问政;100人民号,101标签
... ...
... ... @@ -4,7 +4,7 @@ import { DateTimeUtils } from 'wdKit/Index';
@Component
export struct CardSourceInfo {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
build() {
Flex() {
... ... @@ -51,6 +51,7 @@ export struct CardSourceInfo {
.fontColor($r("app.color.color_B0B0B0"))
.flexShrink(0)
.margin({ left: 6 })
.visibility(Number(this.contentDTO?.interactData?.commentNum) === 0 ? Visibility.None : Visibility.Visible)
}
}
.width(CommonConstants.FULL_WIDTH)
... ...
... ... @@ -3,12 +3,40 @@
*/
import { RmhInfoDTO } from 'wdBean'
import { CommonConstants } from 'wdConstant/Index';
import { DateTimeUtils } from 'wdKit';
import { DateTimeUtils, SPHelper } from 'wdKit';
import { SpConstants } from 'wdConstant/Index'
import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
import router from '@ohos.router'
@Component
export struct RmhTitle {
@Prop rmhInfo: RmhInfoDTO
@Prop publishTime: string | undefined
@Prop hideTime: boolean
async appointReq() {
// 未登录,跳转登录
const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
if (!user_id) {
WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
return
}
}
aboutToAppear(): void {
let page = router.getState();
if (page.path.includes('/page/PeopleShipHomePage') || page.path.includes('/pages/MainPage')) {
this.hideTime = true;
}
}
getDaysBetweenDates(date: number) {
const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
const time1 = new Date().getTime(); // 今天日期的时间戳
const time2 = new Date(date).getTime(); // 要比较日期的时间戳
const diffDays = Math.round(Math.abs((time1 - time2) / oneDay)); // 两个日期时间戳差值除以一天的毫秒数得到天数,取绝对值并四舍五入
return Math.ceil(diffDays);
}
build() {
Flex() {
... ... @@ -33,6 +61,7 @@ export struct RmhTitle {
.alignSelf(ItemAlign.Start)
Flex({alignContent: FlexAlign.Start, wrap: FlexWrap.NoWrap}) {
Row() {
if (!(this.hideTime && this.getDaysBetweenDates(Number(this.publishTime)) > 2)) {
if (this.publishTime) {
Text(DateTimeUtils.getCommentTime(Number.parseFloat(this.publishTime)))
.fontSize($r("app.float.font_size_12"))
... ... @@ -43,6 +72,7 @@ export struct RmhTitle {
.width(16)
.height(16)
}
}
Text(this.rmhInfo.rmhDesc)
.fontSize($r("app.float.font_size_12"))
.fontColor($r("app.color.color_B0B0B0"))
... ... @@ -68,7 +98,7 @@ export struct RmhTitle {
.flexShrink(0)
.alignSelf(ItemAlign.Center)
.onClick(() => {
// TODO 调用关注接口
this.appointReq();
})
}
}
... ...
... ... @@ -20,7 +20,7 @@ const TAG: string = 'Card2Component';
@Component
export struct CardAdvVideoComponent {
@State compDTO: CompDTO = {} as CompDTO
@State contentDTO: ContentDTO = {} as ContentDTO
@State contentDTO: ContentDTO = new ContentDTO()
pageModel: PageModel = new PageModel();
aboutToAppear(): void {
... ...
import { ContentDTO, slideShows } from 'wdBean';
import { ContentDTO, slideShows, VideoInfoDTO } from 'wdBean';
import { CommonConstants } from 'wdConstant';
import { ProcessUtils } from 'wdRouter';
import { CardSourceInfo } from '../cardCommon/CardSourceInfo';
import { CardMediaInfo } from '../cardCommon/CardMediaInfo';
import { Notes } from './notes';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
/**
* 大专题卡--CompStyle: 10
... ... @@ -12,7 +14,12 @@ const TAG: string = 'Card10Component';
@Preview
@Component
export struct Card10Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column() {
... ... @@ -31,7 +38,8 @@ export struct Card10Component {
}
// 大图
Stack() {
Image(this.contentDTO && this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO?.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width('100%')
.borderRadius({
topLeft: $r('app.float.image_border_radius'),
... ... @@ -40,19 +48,8 @@ export struct Card10Component {
.onClick((event: ClickEvent) => {
ProcessUtils.processPage(this.contentDTO)
})
// Text('专题')
// .fontSize($r('app.float.font_size_12'))
// .padding({ left: 8, right: 8, top: 3, bottom: 3 })
// .backgroundColor(Color.Red)
// .fontColor(Color.White)
// .borderRadius($r('app.float.button_border_radius'))
// .margin({ left: 5, bottom: 5 })
ImageSpan($r('app.media.special'))
.width($r('app.float.font_size_36'))
.objectFit(ImageFit.Fill)
.verticalAlign(ImageSpanAlignment.CENTER)
.margin({ left: 5, bottom: 5 })
Notes({ objectType: 5 }).margin({ left: 5, bottom: 5 })
}.alignContent(Alignment.BottomStart)
// 专题列表--后端返回三个,
... ... @@ -99,38 +96,22 @@ export struct Card10Component {
timelineItem(item: slideShows, index: number) {
Row() {
Column() {
Text(item.newsTitle) {
Stack() {
if (item.objectType == '5') {
// Text('专题')
// .fontSize($r('app.float.font_size_12'))
// .padding({ left: 8, right: 8, top: 3, bottom: 3 })
// .backgroundColor(Color.Red)
// .fontColor(Color.White)
// .borderRadius($r('app.float.button_border_radius'))
// .margin({ right: 5 })
ImageSpan($r('app.media.special'))
.width($r('app.float.font_size_36'))
.objectFit(ImageFit.Fill)
.verticalAlign(ImageSpanAlignment.CENTER)
.margin({ right: 5 })
}
Span(item.newsTitle)
Notes({ objectType: 5 })
}
Text(item.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontWeight(400)
.fontColor($r('app.color.color_222222'))
.maxLines(2)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.textIndent(item.objectType == '5' ? 40 : 0)
}.alignContent(Alignment.TopStart)
CardSourceInfo(
{
contentDTO: {
publishTime: item.publishTime || '',
source: item.source || ''
} as ContentDTO
contentDTO: this.createContent(item)
}
)
}
... ... @@ -140,19 +121,15 @@ export struct Card10Component {
// 右侧图片
if (item.fullColumnImgUrls[0] && item.fullColumnImgUrls[0].url) {
Stack() {
Image(item.fullColumnImgUrls[0].url)
Image(this.loadImg ? item.fullColumnImgUrls[0].url : '')
.backgroundColor(0xf5f5f5)
.width(117)
.height(78)
.objectFit(ImageFit.Cover)
.borderRadius($r('app.float.image_border_radius'))
.margin({ left: 12 })
CardMediaInfo({
contentDTO: {
objectType: String(item.objectType),
videoInfo: { videoDuration: Number(item.videoDuration) as number },
photoNum: Number(item.photoNum),
voiceInfo: { voiceDuration: Number(item.voiceDuration) as number }
} as ContentDTO
contentDTO: this.createMediaInfoContent(item)
})
}
.alignContent(Alignment.BottomEnd)
... ... @@ -168,4 +145,20 @@ export struct Card10Component {
ProcessUtils.processPage(data)
})
}
private createContent(item: slideShows): ContentDTO {
let contentDTO = new ContentDTO()
contentDTO.publishTime = item.publishTime.toString() || '';
contentDTO.source = item.source || '';
return contentDTO;
}
private createMediaInfoContent(item: slideShows): ContentDTO {
let contentDTO = new ContentDTO()
contentDTO.objectType = String(item.objectType);
contentDTO.videoInfo = { videoDuration: Number(item.videoDuration) as number } as VideoInfoDTO;
contentDTO.photoNum = Number(item.photoNum);
contentDTO.voiceInfo = { voiceDuration: Number(item.voiceDuration) as number };
return contentDTO;
}
}
\ No newline at end of file
... ...
... ... @@ -11,13 +11,14 @@ const TAG = 'Card11Component';
*/
@Component
export struct Card11Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State clicked: boolean = false;
build() {
Column() {
Text(this.contentDTO.newsTitle)
.fontSize($r("app.float.font_size_16"))
.fontColor($r("app.color.color_222222"))
.fontColor(this.clicked ? 0x848484 : $r("app.color.color_222222"))
.maxLines(3)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.width(CommonConstants.FULL_WIDTH)
... ... @@ -32,6 +33,8 @@ export struct Card11Component {
})
.backgroundColor($r("app.color.white"))
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ...
... ... @@ -3,6 +3,7 @@ import { RmhTitle } from '../cardCommon/RmhTitle'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import {CarderInteraction} from '../CarderInteraction'
const TAG = 'Card12Component';
... ... @@ -11,7 +12,8 @@ const TAG = 'Card12Component';
*/
@Component
export struct Card12Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State clicked: boolean = false;
aboutToAppear(): void {
}
... ... @@ -26,7 +28,7 @@ export struct Card12Component {
if (this.contentDTO.newsTitle) {
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.width(CommonConstants.FULL_WIDTH)
.textOverflowStyle(3)
.margin({ bottom: 8 })
... ... @@ -34,7 +36,7 @@ export struct Card12Component {
.lineHeight(25)
.fontFamily('PingFang SC-Regular')
}
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
.padding({
... ... @@ -44,6 +46,7 @@ export struct Card12Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ...
... ... @@ -3,6 +3,8 @@ import { RmhTitle } from '../cardCommon/RmhTitle'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import {CarderInteraction} from '../CarderInteraction'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Card14Component';
... ... @@ -11,41 +13,12 @@ const TAG = 'Card14Component';
*/
@Component
export struct Card14Component {
@State contentDTO: ContentDTO = {
appStyle: '20',
coverType: 1,
coverUrl: 'https://rmrbcmsonline.peopleapp.com/upload/user_app/gov_dynamic/video/default_image/202105/rmrb_default_image_4GdWrgSw1622451312.jpg?x-oss-process=image/resize,m_fill,h_480,w_360/quality,q_90',
fullColumnImgUrls: [
{
landscape: 1,
size: 1,
url: 'https://rmrbcmsonline.peopleapp.com/upload/user_app/gov_dynamic/video/default_image/202105/rmrb_default_image_4GdWrgSw1622451312.jpg?x-oss-process=image/resize,m_fill,h_480,w_360/quality,q_90',
weight: 1600
}
],
newsTitle: '好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》好玩!》',
rmhInfo: {
authIcon:
'https://cdnjdphoto.aikan.pdnews.cn/creator-category/icon/auth/yellow.png',
authTitle: '10后音乐人王烁然个人人民号',
authTitle2: '10后音乐人王烁然个人人民号',
banControl: 0,
cnIsAttention: 1,
rmhDesc: '10后少年音乐人10后少年音乐人10后少年音乐人10后少年音乐人10后少年音乐人',
rmhHeadUrl: 'https://cdnjdphoto.aikan.pdnews.cn/image/creator/rmh/20221031/3d3419e86a.jpeg?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg',
rmhName: '王烁然',
userId: '522435359667845',
userType: '2'
},
objectType: '1',
videoInfo: {
firstFrameImageUri: '',
videoDuration: 37,
videoUrl: 'https://rmrbcmsonline.peopleapp.com/upload/user_app/gov_dynamic/video/mp4/202105/rmrb_GSNARt6P1622451310.mp4'
}
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
aboutToAppear(): void {
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
... ... @@ -59,7 +32,7 @@ export struct Card14Component {
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.textOverflowStyle(3)
.lineHeight(25)
.fontFamily('PingFang SC-Regular')
... ... @@ -68,7 +41,8 @@ export struct Card14Component {
.margin({right: 12})
.flexBasis(214)
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.flexBasis(117)
.height(78)
.borderRadius($r('app.float.image_border_radius'))
... ... @@ -79,7 +53,7 @@ export struct Card14Component {
.width(CommonConstants.FULL_WIDTH)
.margin({ bottom: 8 })
.height(75)
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
... ... @@ -90,6 +64,7 @@ export struct Card14Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ...
... ... @@ -3,6 +3,8 @@ import { ProcessUtils } from 'wdRouter';
import { RmhTitle } from '../cardCommon/RmhTitle'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CommonConstants } from 'wdConstant/Index';
import {CarderInteraction} from '../CarderInteraction'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG: string = 'Card15Component';
... ... @@ -15,45 +17,14 @@ const TAG: string = 'Card15Component';
*/
@Component
export struct Card15Component {
@State contentDTO: ContentDTO = {
// appStyle: '15',
// coverType: 1,
// objectType: '9',
// coverUrl: 'https://rmrbcmsonline.peopleapp.com/rb_recsys/img/2024/0413/VL20Z09ISBEKXZU_963672030241091584.jpeg?x-oss-process=image/resize,m_fill,h_450,w_800/quality,q_90',
// fullColumnImgUrls: [
// {
// landscape: 2,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/rb_recsys/img/2024/0413/VL20Z09ISBEKXZU_963672030241091584.jpeg?x-oss-process=image/resize,m_fill,h_450,w_800/quality,q_90',
// weight: 1170
// }
// ],
// newsTitle: '押解画面公开!被湖北民警从柬埔寨押解回国被湖北民警从柬埔寨押解回国的130名涉赌诈嫌疑人是他们被湖北民警从柬埔寨押解回国的130名涉赌诈嫌疑人是他们的130名涉赌诈嫌疑人是他们',
// publishTime: '1712993333000',
// rmhInfo: {
// authIcon: '',
// authTitle: '',
// authTitle2: '',
// banControl: 0,
// cnIsAttention: 1,
// rmhDesc: '中共武汉市委机关报长江日报官方人民号',
// rmhHeadUrl: 'https://uatjdcdnphoto.aikan.pdnews.cn/vod/content/202302/202302Sa121448724/TUw.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg',
// rmhId: '4255270',
// rmhName: '长江日报',
// userId: '513696944662469',
// userType: '3'
// },
// videoInfo: {
// firstFrameImageUri: '',
// videoDuration: 12,
// // videoLandscape: 2,
// videoUrl: 'https://rmrbcmsonline.peopleapp.com/rb_recsys/video/2024/0413/VL20Z09ISBEKXZU_963672027208609792.mp4'
// },
// photoNum: '9',
// voiceInfo: {
// voiceDuration: 12
// }
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column() {
... ... @@ -63,14 +34,15 @@ export struct Card15Component {
if (this.contentDTO.newsTitle) {
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.width(CommonConstants.FULL_WIDTH)
.textOverflowStyle(2)
.margin({ bottom: 8 })
}
//大图
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.borderRadius($r('app.float.image_border_radius'))
//播放状态+时长
CardMediaInfo({
... ... @@ -80,7 +52,7 @@ export struct Card15Component {
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.alignContent(Alignment.BottomEnd)
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
.padding({
... ... @@ -90,6 +62,7 @@ export struct Card15Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ...
... ... @@ -3,6 +3,8 @@ import { RmhTitle } from '../cardCommon/RmhTitle'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import {CarderInteraction} from '../CarderInteraction'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Card16Component';
... ... @@ -16,9 +18,12 @@ interface fullColumnImgUrlItem {
*/
@Component
export struct Card16Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
aboutToAppear(): void {
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
... ... @@ -31,7 +36,7 @@ export struct Card16Component {
if (this.contentDTO.newsTitle) {
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.width(CommonConstants.FULL_WIDTH)
.textOverflowStyle(2)
.margin({ bottom: 8 })
... ... @@ -40,10 +45,15 @@ export struct Card16Component {
if (this.contentDTO.fullColumnImgUrls?.length > 0) {
Flex() {
ForEach(this.contentDTO.fullColumnImgUrls.slice(0, 3), (item: fullColumnImgUrlItem, index: number) => {
Image(item.url).flexBasis(113).height(75).margin({ right: index > 1 ? 0 : 2 })
Image(this.loadImg ? item.url : '')
.backgroundColor(0xf5f5f5)
.flexBasis(113)
.height(75)
.margin({ right: index > 1 ? 0 : 2 })
})
}
}
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
.padding({
... ... @@ -53,6 +63,7 @@ export struct Card16Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ... @@ -68,6 +79,11 @@ interface radiusType {
@Component
struct createImg {
@Prop contentDTO: ContentDTO
@State loadImg: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
GridRow() {
... ... @@ -77,7 +93,8 @@ struct createImg {
span: { xs: 12 }
}) {
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.borderRadius($r('app.float.image_border_radius'))
... ... @@ -91,7 +108,8 @@ struct createImg {
span: { xs: 6 }
}) {
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.borderRadius($r('app.float.image_border_radius'))
CardMediaInfo({ contentDTO: this.contentDTO })
... ...
... ... @@ -5,6 +5,8 @@ import { DateTimeUtils } from 'wdKit';
import { WDRouterRule } from 'wdRouter';
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CardSourceInfo } from '../cardCommon/CardSourceInfo'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Card17Component';
/**
... ... @@ -13,14 +15,21 @@ const TAG = 'Card17Component';
@Component
export struct Card17Component {
@State compDTO: CompDTO = {} as CompDTO
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column({ space: 8 }) {
Text(this.contentDTO.newsTitle)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.lineHeight(25)
.maxLines(3)
.width(CommonConstants.FULL_WIDTH)
... ... @@ -29,8 +38,8 @@ export struct Card17Component {
// 三个图,
GridRow({ gutter: 2 }) {
GridCol({ span: { xs: 8 } }) {
Image(this.contentDTO.fullColumnImgUrls.length > 0 ?this.contentDTO.fullColumnImgUrls[0].url:'')
.backgroundColor('#f5f5f5')
Image(this.loadImg ? this.contentDTO.fullColumnImgUrls.length > 0 ?this.contentDTO.fullColumnImgUrls[0].url:'' : '')
.backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.borderRadius({
... ... @@ -40,8 +49,8 @@ export struct Card17Component {
}
GridCol({ span: { xs: 4 } }) {
Image(this.contentDTO.fullColumnImgUrls.length > 1? this.contentDTO.fullColumnImgUrls[1].url:'')
.backgroundColor('#f5f5f5')
Image(this.loadImg ? this.contentDTO.fullColumnImgUrls.length > 1? this.contentDTO.fullColumnImgUrls[1].url:'' : '')
.backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.margin({ bottom: 1 })
... ... @@ -56,8 +65,8 @@ export struct Card17Component {
}
GridCol({ span: { xs: 4 } }) {
Image(this.contentDTO.fullColumnImgUrls.length > 2? this.contentDTO.fullColumnImgUrls[2].url:'')
.backgroundColor('#f5f5f5')
Image(this.loadImg ? this.contentDTO.fullColumnImgUrls.length > 2? this.contentDTO.fullColumnImgUrls[2].url:'' : '')
.backgroundColor(this.loadImg ? '#f5f5f5' : 0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.margin({ top: 1 })
... ... @@ -71,6 +80,7 @@ export struct Card17Component {
}
.width(CommonConstants.FULL_WIDTH)
.onClick((event: ClickEvent) => {
this.clicked = true;
let taskAction: Action = {
type: 'JUMP_DETAIL_PAGE',
params: {
... ...
... ... @@ -2,6 +2,8 @@ import { ContentDTO, FullColumnImgUrlDTO, PhotoListBean } from 'wdBean';
import { RmhTitle } from '../cardCommon/RmhTitle'
import { ProcessUtils } from 'wdRouter';
import { CommonConstants } from 'wdConstant/Index';
import {CarderInteraction} from '../CarderInteraction'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Card19Component';
... ... @@ -10,69 +12,8 @@ const TAG = 'Card19Component';
*/
@Component
export struct Card19Component {
@State contentDTO: ContentDTO = {
// appStyle: '19',
// coverUrl: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994160362418176.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg',
// fullColumnImgUrls: [
// {
// fullUrl: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994155727712256.png?x-oss-process=image/quality,q_90/auto-orient,1',
// height: 1500,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994160362418176.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg',
// weight: 2000
// },
// {
// fullUrl: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994155727712256.png?x-oss-process=image/quality,q_90/auto-orient,1',
// height: 1500,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994155727712256.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg',
// weight: 2000
// },
// {
// fullUrl: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994132109586432.png?x-oss-process=image/quality,q_90/auto-orient,1',
// height: 1280,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994132109586432.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg',
// weight: 1707
// },
// {
// fullUrl: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994132109586432.png?x-oss-process=image/quality,q_90/auto-orient,1',
// height: 1280,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20240323/a_955994132109586432.png?x-oss-process=image/resize,w_550/quality,q_90/format,jpg',
// weight: 1707
// }
// ],
// newsSummary: '#平安建设双提升#【进工地,送安全】3月21日下午,@合肥交警 包河大队走进辖区建筑工地为驾驶员、安全员们开展春季交通安全主题宣传活动。活动中,交警结合涉工程运输车、渣土车交通事故案例,详细讲解行驶注意事项,并普及了“一盔一带”“右转必停”等安全常识,要求驾驶员牢固树立交通安全意识,自觉遵守交通法律法规,确保出行安全。',
// newsTitle: '#平安建设双提升#【进工地,送安全】3月21日下午,@合肥交警 包河大队走进辖区建筑工地为驾驶员、安全员们开展春季交通安全主题宣传活动。活动中,交警结合涉工程运输车、渣土车交通事故案例,详细讲解行驶注意事项,并普及了“一盔一带”“右转必停”等安全常识,要求驾驶员牢固树立交通安全意识,自觉遵守交通法律法规,确保出行安全。',
// publishTime: '1711185754000',
// relType: '1',
// rmhInfo: {
// authIcon: '',
// authTitle: '',
// authTitle2: '',
// banControl: 0,
// cnIsAttention: 1,
// cnIsComment: 1,
// cnIsLike: 1,
// cnMainControl: 1,
// cnShareControl: 1,
// posterShareControl: 1,
// rmhDesc: '合肥市公安局官方人民号',
// rmhHeadUrl: 'https://uatjdcdnphoto.aikan.pdnews.cn/vod/content/202302/202302Sa121448724/TUw.png?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg',
// rmhId: '4255290',
// rmhName: '合肥警方',
// userId: '513697181730757',
// userType: '2'
// }
} as ContentDTO
aboutToAppear(): void {
}
@State contentDTO: ContentDTO = new ContentDTO()
@State clicked: boolean = false;
build() {
Column() {
... ... @@ -82,11 +23,12 @@ export struct Card19Component {
if (this.contentDTO.newsTitle) {
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.textOverflowStyle(3)
.margin({ bottom: 8 })
.width(CommonConstants.FULL_WIDTH)
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ... @@ -104,6 +46,7 @@ export struct Card19Component {
})
ProcessUtils.gotoMultiPictureListPage(photoList,0)
})
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
.padding({
... ... @@ -113,6 +56,7 @@ export struct Card19Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ... @@ -130,13 +74,17 @@ struct createImg {
@Prop fullColumnImgUrls: FullColumnImgUrlDTO[]
@State picWidth: number = 0;
@State picHeight: number = 0;
aboutToAppear(): void {
@State loadImg: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
if(this.fullColumnImgUrls.length === 4) { // 为了使用栅格布局以便于占用三分之二的宽度,加一个占位
this.fullColumnImgUrls.splice(2,0, {
fullUrl: ''
} as FullColumnImgUrlDTO)
}
}
caclImageRadius(index: number) {
let radius: radiusType = {
topLeft: index === 0 ? $r('app.float.image_border_radius') : 0,
... ... @@ -189,14 +137,15 @@ struct createImg {
alignContent: Alignment.BottomEnd
}) {
if (this.getPicType() === 1) {
Image(item.fullUrl)
Image(this.loadImg ? item.fullUrl : '')
.backgroundColor(0xf5f5f5)
.width('100%')
// .height(172)
.height(172)
.autoResize(true)
.borderRadius(this.caclImageRadius(index))
} else if (this.getPicType() === 2) {
Image(item.fullUrl)
// .width('100%')
Image(this.loadImg ? item.fullUrl : '')
.width('100%')
.height(305)
.autoResize(true)
.borderRadius(this.caclImageRadius(index))
... ... @@ -211,6 +160,7 @@ struct createImg {
.fontWeight(400)
.fontColor(0xffffff)
.fontFamily('PingFang SC')
.shadow({radius: 4, color: 0xc3cbd5, offsetX: 4, offsetY: 4})
}
.width(48)
.padding({bottom: 9})
... ... @@ -221,7 +171,8 @@ struct createImg {
GridCol({
span: { xs: 8 }
}) {
Image(item.fullUrl)
Image(this.loadImg ? item.fullUrl : '')
.backgroundColor(0xf5f5f5)
.width('100%')
.borderRadius(this.caclImageRadius(index))
.autoResize(true)
... ... @@ -236,7 +187,8 @@ struct createImg {
GridCol({
span: { xs: 4 }
}) {
Image(item.fullUrl)
Image(this.loadImg ? item.fullUrl : '')
.backgroundColor(0xf5f5f5)
.aspectRatio(1)
.borderRadius(this.caclImageRadius(index))
}
... ... @@ -244,7 +196,8 @@ struct createImg {
GridCol({
span: { sm: 4, lg: 3 }
}) {
Image(item.fullUrl)
Image(this.loadImg ? item.fullUrl : '')
.backgroundColor(0xf5f5f5)
.aspectRatio(1)
.borderRadius(this.caclImageRadius(index))
}
... ...
... ... @@ -3,6 +3,9 @@ import { RmhTitle } from '../cardCommon/RmhTitle'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import {CarderInteraction} from '../CarderInteraction'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Card20Component';
/**
... ... @@ -10,39 +13,8 @@ const TAG = 'Card20Component';
*/
@Component
export struct Card20Component {
@State contentDTO: ContentDTO = {
// appStyle: '20',
// coverType: 1,
// coverUrl: 'https://rmrbcmsonline.peopleapp.com/upload/user_app/gov_dynamic/video/default_image/202105/rmrb_default_image_4GdWrgSw1622451312.jpg?x-oss-process=image/resize,m_fill,h_480,w_360/quality,q_90',
// fullColumnImgUrls: [
// {
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/user_app/gov_dynamic/video/default_image/202105/rmrb_default_image_4GdWrgSw1622451312.jpg?x-oss-process=image/resize,m_fill,h_480,w_360/quality,q_90',
// weight: 1600
// }
// ],
// newsTitle: '好玩!》',
// rmhInfo: {
// authIcon:
// 'https://cdnjdphoto.aikan.pdnews.cn/creator-category/icon/auth/yellow.png',
// authTitle: '10后音乐人王烁然个人人民号',
// authTitle2: '10后音乐人王烁然个人人民号',
// banControl: 0,
// cnIsAttention: 1,
// rmhDesc: '10后少年音乐人10后少年音乐人10后少年音乐人10后少年音乐人10后少年音乐人',
// rmhHeadUrl: 'https://cdnjdphoto.aikan.pdnews.cn/image/creator/rmh/20221031/3d3419e86a.jpeg?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg',
// rmhName: '王烁然',
// userId: '522435359667845',
// userType: '2'
// },
// objectType: '1',
// videoInfo: {
// firstFrameImageUri: '',
// videoDuration: 37,
// videoUrl: 'https://rmrbcmsonline.peopleapp.com/upload/user_app/gov_dynamic/video/mp4/202105/rmrb_GSNARt6P1622451310.mp4'
// }
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State clicked: boolean = false;
aboutToAppear(): void {
}
... ... @@ -55,7 +27,7 @@ export struct Card20Component {
if (this.contentDTO.newsTitle) {
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.width(CommonConstants.FULL_WIDTH)
.textOverflowStyle(3)
.margin({ bottom: 8 })
... ... @@ -64,6 +36,7 @@ export struct Card20Component {
if (this.contentDTO.fullColumnImgUrls[0]) {
createImg({ contentDTO: this.contentDTO })
}
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
.padding({
... ... @@ -73,6 +46,7 @@ export struct Card20Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ... @@ -88,6 +62,12 @@ interface radiusType {
@Component
struct createImg {
@Prop contentDTO: ContentDTO
@State loadImg: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
GridRow() {
... ... @@ -97,7 +77,8 @@ struct createImg {
span: { xs: 12 }
}) {
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.borderRadius($r('app.float.image_border_radius'))
... ... @@ -114,7 +95,8 @@ struct createImg {
span: { xs: 6 }
}) {
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.borderRadius($r('app.float.image_border_radius'))
CardMediaInfo({ contentDTO: this.contentDTO })
... ...
... ... @@ -3,6 +3,8 @@ import { CommonConstants, CompStyle } from 'wdConstant';
import { ProcessUtils } from 'wdRouter';
import { RmhTitle } from '../cardCommon/RmhTitle'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import {CarderInteraction} from '../CarderInteraction'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG: string = 'Card6Component-Card13Component';
... ... @@ -11,7 +13,13 @@ const TAG: string = 'Card6Component-Card13Component';
*/
@Component
export struct Card21Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column() {
... ... @@ -22,7 +30,7 @@ export struct Card21Component {
GridItem() {
Text(`${this.contentDTO.newsTitle}`)
.fontSize($r('app.float.selected_text_size'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.width(CommonConstants.FULL_WIDTH)
.maxLines(4)
.textOverflow({ overflow: TextOverflow.Ellipsis })
... ... @@ -32,7 +40,8 @@ export struct Card21Component {
GridItem() {
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.borderRadius($r('app.float.image_border_radius'))
CardMediaInfo({ contentDTO: this.contentDTO })
... ... @@ -42,10 +51,11 @@ export struct Card21Component {
}
.columnsTemplate('2fr 1fr')
.maxCount(1)
CarderInteraction({contentDTO: this.contentDTO})
//TODO 底部的:分享、评论、点赞 功能;需要引用一个公共组件
}
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
.padding({
... ...
... ... @@ -2,8 +2,11 @@
import { ContentDTO } from 'wdBean';
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CardSourceInfo } from '../cardCommon/CardSourceInfo'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo';
import { CardSourceInfo } from '../cardCommon/CardSourceInfo';
import { Notes } from './notes';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG: string = 'Card2Component';
/**
... ... @@ -15,38 +18,39 @@ const TAG: string = 'Card2Component';
*/
@Component
export struct Card2Component {
@State contentDTO: ContentDTO = {
// appStyle: '2',
// objectType: '1',
// coverUrl:
// 'https://rmrbcmsonline.peopleapp.com/upload/image/202404/202404141115457926.png?x-oss-process=image/resize,m_fill,h_450,w_800/quality,q_90',
// newsTitle: '又见花开!新疆伊犁花海延绵清新怡人',
// publishTime: '1713067227000',
// source: '荔枝新闻',
// videoInfo: {
// videoDuration: 25,
// videoLandscape: 1,
// videoUrl:
// 'https://rmrbcmsonline.peopleapp.com/upload/video/mp4/202404/1713064515901314d148763996.mp4'
// }
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column() {
Column() {
Stack() {
//新闻标题
if (this.contentDTO.objectType == '5') {
Notes({ objectType: this.contentDTO.objectType })
}
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.maxLines(2)
.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。
.align(Alignment.Start)
.textIndent(this.contentDTO.objectType == '5' ? 40 : 0)
}
.alignContent(Alignment.TopStart)
//大图
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.width(CommonConstants.FULL_WIDTH)
.aspectRatio(16 / 9)
.borderRadius($r('app.float.image_border_radius'))
.backgroundColor(0xf5f5f5)
//播放状态+时长
CardMediaInfo({
contentDTO: this.contentDTO
... ... @@ -70,6 +74,7 @@ export struct Card2Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ...
... ... @@ -9,23 +9,14 @@ import { CardSourceInfo } from '../cardCommon/CardSourceInfo'
*/
@Component
export struct Card3Component {
@State contentDTO: ContentDTO = {
// appStyle: '3',
// channelId: '2002',
// newsTitle: '习近平向斯洛伐克当选总统佩',
// objectId: '30044351686',
// objectType: '8',
// publishTime: '1712967589000',
// relId: '500005307414',
// relType: '1',
// source: '新华社',
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State clicked: boolean = false;
build() {
Column() {
Text(this.contentDTO.newsTitle)
.fontSize($r("app.float.font_size_16"))
.fontColor($r("app.color.color_222222"))
.fontColor(this.clicked ? 0x848484 : $r("app.color.color_222222"))
.width(CommonConstants.FULL_WIDTH)
// 评论等信息
CardSourceInfo({ contentDTO: this.contentDTO })
... ... @@ -38,6 +29,7 @@ export struct Card3Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ...
... ... @@ -3,6 +3,7 @@ import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import { CardSourceInfo } from '../cardCommon/CardSourceInfo'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG: string = 'Card4Component';
/**
... ... @@ -14,62 +15,14 @@ const TAG: string = 'Card4Component';
*/
@Component
export struct Card4Component {
@State contentDTO: ContentDTO = {
// appStyle: '4',
// fullColumnImgUrls: [
// {
// format: null,
// fullUrl: '',
// height: 187,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/article_resource/image/1648118198_0c20f7c31c7b4eca6b0d0871e7771c62.png?x-oss-process=image/resize,m_fill,h_160,w_240/quality,q_90',
// weight: 248
// },
// {
// format: null,
// fullUrl: '',
// height: 187,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/article_resource/image/1648118198_0c20f7c31c7b4eca6b0d0871e7771c62.png?x-oss-process=image/resize,m_fill,h_160,w_240/quality,q_90',
// weight: 248
// },
// {
// format: null,
// fullUrl: '',
// height: 187,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/article_resource/image/1648118200_d10309bee894a67311e6c8f77df676d4.png?x-oss-process=image/resize,m_fill,h_160,w_240/quality,q_90',
// weight: 248
// },
// {
// format: null,
// fullUrl: '',
// height: 187,
// landscape: 1,
// size: 1,
// url: 'https://rmrbcmsonline.peopleapp.com/upload/article_resource/image/1648118202_f33743e452fb69ee2c45c18a56eccdf6.png?x-oss-process=image/resize,m_fill,h_160,w_240/quality,q_90',
// weight: 248
// }
// ],
// newsTitle: '科普:如何发现家中是否有白蚁危害?丨又到白蚁分飞季②',
// rmhInfo: {
// authIcon:
// 'https://cdnjdphoto.aikan.pdnews.cn/creator-category/icon/auth/blue.png',
// authTitle: '封面新闻',
// rmhDesc: '封面新闻,亿万年轻人的生活方式。',
// rmhHeadUrl:
// 'https://cdnjdphoto.aikan.pdnews.cn/image/creator/rmh/20221212/122faff796.jpeg?x-oss-process=image/resize,l_100/auto-orient,1/quality,q_90/format,jpg',
// rmhId: '2016608',
// rmhName: '封面新闻',
// userId: '522390888224390',
// userType: '2'
// },
// source: '头条号',
// publishTime: '1651204607000',
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column() {
... ... @@ -78,7 +31,7 @@ export struct Card4Component {
//新闻标题
Text(this.contentDTO.newsTitle)
.fontSize($r('app.float.font_size_17'))
.fontColor($r('app.color.color_222222'))
.fontColor(this.clicked ? 0x848484 : $r('app.color.color_222222'))
.maxLines(3)
.textOverflow({ overflow: TextOverflow.Ellipsis }) // 超出的部分显示省略号。
//三图
... ... @@ -88,7 +41,8 @@ export struct Card4Component {
ForEach(this.contentDTO.fullColumnImgUrls, (item: FullColumnImgUrlDTO, index: number) => {
if (index < 3) {
GridCol({ span: { xs: 4 } }) {
Image(item.url)
Image(this.loadImg ? item.url : '')
.backgroundColor(0xf5f5f5)
.width('100%')
.aspectRatio(113 / 75)
.borderRadius({
... ... @@ -115,6 +69,7 @@ export struct Card4Component {
.justifyContent(FlexAlign.Start)
.alignItems(HorizontalAlign.Start)
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
//bottom 评论等信息
... ...
import { ContentDTO } from 'wdBean';
import { CommonConstants } from 'wdConstant';
import { ProcessUtils } from 'wdRouter';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
import { Notes } from './notes';
const TAG: string = 'Card5Component';
/**
* 卡片样式:"appStyle":"5" 头图卡
*/
// @Entry
@Component
export struct Card5Component {
@State contentDTO: ContentDTO = {
// coverSize: '850*478',
// coverType: 1,
// coverUrl:
// 'https://uatjdcdnphoto.aikan.pdnews.cn/sjbj-20240323/image/display/54ce2de0d20842839e96a644c78361b7.jpg?x-oss-process=image/resize,w_550/quality,q_90/format,jpg',
// linkUrl:
// 'https://pd-people-uat.pdnews.cn/h/atv/collect/1000000472?hiddenNavigator=1',
// newsTitle: '今天是周日,天气阴天,明天是周一。',
// objectType: '6'
} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State titleShowPolicy: number | string = 1
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(CommonConstants.FULL_WIDTH)
.autoResize(true)
.borderRadius($r('app.float.image_border_radius'))
if ((this.titleShowPolicy === 1 || this.contentDTO.titleShow === 1) && this.contentDTO.newsTitle) {
// if ((this.titleShowPolicy === 1 || this.contentDTO.titleShow === 1) && this.contentDTO.newsTitle) {
Row()
.width(CommonConstants.FULL_WIDTH)
.height(59)
... ... @@ -38,22 +37,24 @@ export struct Card5Component {
]
})
Row() {
if (this.titleShowPolicy === 1) {
Stack() {
if (this.contentDTO.objectType == '5') {
Notes({ objectType: this.contentDTO.objectType })
}
Text(this.contentDTO.newsTitle)
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
.width(CommonConstants.FULL_WIDTH)// .height(CommonConstants.FULL_HEIGHT)
.fontColor(Color.White)
.fontSize($r('app.float.normal_text_size'))
.fontWeight(FontWeight.Bold)
.maxLines(2)
.align(Alignment.Bottom)
}
.align(Alignment.TopStart)
.textIndent(this.contentDTO.objectType == '5' ? 40 : 0)
}.alignContent(Alignment.TopStart)
}
.justifyContent(FlexAlign.Start)
.height(40)
// .height(40)
.margin({ left: 12, bottom: 10, right: 12 })
}
// }
}
.alignContent(Alignment.Bottom)
.width(CommonConstants.FULL_WIDTH)
... ... @@ -64,6 +65,7 @@ export struct Card5Component {
bottom: $r('app.float.card_comp_pagePadding_tb')
})
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
... ...
import { ContentDTO } from 'wdBean';
import { CommonConstants, CompStyle } from 'wdConstant';
import { ProcessUtils } from 'wdRouter';
import { CardSourceInfo } from '../cardCommon/CardSourceInfo'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CardSourceInfo } from '../cardCommon/CardSourceInfo';
import { CardMediaInfo } from '../cardCommon/CardMediaInfo';
import { Notes } from './notes';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG: string = 'Card6Component-Card13Component';
/**
... ... @@ -10,7 +13,13 @@ const TAG: string = 'Card6Component-Card13Component';
*/
@Component
export struct Card6Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Row() {
... ... @@ -26,12 +35,25 @@ export struct Card6Component {
// .padding(2)
// .margin({ right: 2 })
// }
Stack() {
if (this.contentDTO.newTags) {
Notes({ newTags: this.contentDTO.newTags })
} else if (this.contentDTO.objectType == '5') {
Notes({ objectType: this.contentDTO.objectType })
}
Text(`${this.contentDTO.newsTitle}`)
.fontColor(this.clicked ? 0x848484 : 0x222222)
.fontSize(16)
.fontWeight(FontWeight.Normal)
.maxLines(3)//
.maxLines(3)
.alignSelf(ItemAlign.Start)
.textOverflow({ overflow: TextOverflow.Ellipsis }) // 超出的部分显示省略号。
.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。
.textIndent(this.contentDTO.newTags?.length < 5 && this.contentDTO.newTags?.length > 2 ? 60 :
(this.contentDTO.newTags?.length != 0 && this.contentDTO.newTags?.length) ||
this.contentDTO.objectType == '5' ? 30 : 0)
}.alignContent(Alignment.TopStart)
}.height("80%")
.justifyContent(FlexAlign.Start)
... ... @@ -42,9 +64,10 @@ export struct Card6Component {
.alignItems(HorizontalAlign.Start)
.justifyContent(FlexAlign.Start)
.width('58%')
Stack() {
Image(this.contentDTO.coverUrl)
.backgroundColor($r('app.color.color_B0B0B0'))
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(this.loadImg ? $r('app.color.color_B0B0B0') : 0xf5f5f5)
.borderRadius(5)
.aspectRatio(this.contentDTO.appStyle === CompStyle.Card_13 ? 3 / 2 : 3 / 4)
.height(this.contentDTO.appStyle === CompStyle.Card_13 ? 90 : 180)
... ... @@ -53,6 +76,7 @@ export struct Card6Component {
.alignContent(Alignment.BottomEnd)
}
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
.padding({
... ...
... ... @@ -2,6 +2,8 @@ import { ContentDTO, slideShows } from 'wdBean';
import { CommonConstants } from 'wdConstant';
import { DateTimeUtils } from 'wdKit';
import { ProcessUtils } from 'wdRouter';
import { Notes } from './notes';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
/**
* 时间链卡--CompStyle: 09
... ... @@ -10,13 +12,20 @@ const TAG: string = 'Card9Component';
@Component
export struct Card9Component {
@State contentDTO: ContentDTO = {} as ContentDTO;
@State contentDTO: ContentDTO = new ContentDTO();
@State loadImg: boolean = false;
@State clicked: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Column() {
// 顶部标题,最多两行
if (this.contentDTO.titleShow === 1 && this.contentDTO.newsTitle) {
Text(this.contentDTO.newsTitle)
.fontColor(this.clicked ? 0x848484 : 0x222222)
.width(CommonConstants.FULL_WIDTH)
.fontSize($r('app.float.font_size_17'))
.fontWeight(600)
... ... @@ -26,18 +35,15 @@ export struct Card9Component {
}
// 大图
Stack() {
Image(this.contentDTO.coverUrl)
Image(this.loadImg ? this.contentDTO.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width('100%')
.borderRadius({
topLeft: $r('app.float.image_border_radius'),
topRight: $r('app.float.image_border_radius')
})
Text('专题')
.fontSize($r('app.float.font_size_12'))
.padding({ left: 8, right: 8, top: 3, bottom: 3 })
.backgroundColor(Color.Red)
.fontColor(Color.White)
.borderRadius($r('app.float.button_border_radius'))
Notes({ objectType: 5 })
.margin({ left: 5, bottom: 5 })
}.alignContent(Alignment.BottomStart)
... ... @@ -77,6 +83,7 @@ export struct Card9Component {
.backgroundColor($r("app.color.white"))
.margin({ bottom: 8 })
.onClick((event: ClickEvent) => {
this.clicked = true;
ProcessUtils.processPage(this.contentDTO)
})
}
... ... @@ -129,12 +136,13 @@ export struct Card9Component {
.textOverflow({ overflow: TextOverflow.Ellipsis })
.alignSelf(ItemAlign.Center)
.margin({ left: 12 })
if (item.fullColumnImgUrls[0] && item.fullColumnImgUrls[0].url) {
Image(item.fullColumnImgUrls[0].url)
.width(90)
.height(60)
.borderRadius($r('app.float.image_border_radius'))
}
// if (item.fullColumnImgUrls[0] && item.fullColumnImgUrls[0].url) {
// Image(this.loadImg? item.fullColumnImgUrls[0].url : '')
// .backgroundColor(0xf5f5f5)
// .width(90)
// .height(60)
// .borderRadius($r('app.float.image_border_radius'))
// }
}
}
}
... ...
/**
* 表示
* objectType 0:不跳转 1:点播,2:直播,3:活动,4:广告,5:专题,6:链接,7:榜单,8:图文,9:组图,10:H5新闻,11:频道,12:组件,13:音频,
14动态图文,15动态视频16问政;100人民号,101标签
*/
@Preview
@Component
export struct Notes {
@State objectType: number | string = 5
@State newTags: string = ''
build() {
if (this.returnTypeTitleFn()) {
Text(this.returnTypeTitleFn())
.fontSize($r('app.float.font_size_12'))
.padding({
left: 5,
right: 5,
top: 3,
bottom: 3
})
.linearGradient({ angle: 90, colors: [['#FFFF2B00', 0.0], ['#FFFE6A00', 1.0]] })
.fontColor(Color.White)
.borderRadius($r('app.float.button_border_radius'))
}
}
returnTypeTitleFn(): string {
if (this.newTags) {
return this.newTags
} else {
if (this.objectType == 5) {
return '专题'
} else if (this.objectType == 10) {
return 'H5'
} else if (this.objectType == 8) {
return '文章'
}
}
return ''
}
}
\ No newline at end of file
... ...
import ArrayList from '@ohos.util.ArrayList'
import { ViewType } from 'wdConstant/Index';
import { DateTimeUtils, EmitterEventId, EmitterUtils, LazyDataSource } from 'wdKit/Index';
import PageModel from '../../../viewmodel/PageModel';
import { commentItemModel, commentListModel, WDPublicUserType } from '../model/CommentModel';
import commentViewModel from '../viewmodel/CommentViewModel'
import { commentItemModel, WDPublicUserType } from '../model/CommentModel';
import commentViewModel from '../viewmodel/CommentViewModel';
import { CommentText } from './CommentText';
import measure from '@ohos.measure'
import { CommentCustomDialog } from './CommentCustomDialog'
import { CommentCustomDialog } from './CommentCustomDialog';
import { publishCommentModel } from '../model/PublishCommentModel';
import { ifaa } from '@kit.OnlineAuthenticationKit';
import { HttpUrlUtils, HttpUtils } from 'wdNetwork/Index';
import NoMoreLayout from '../../page/NoMoreLayout';
import { HttpUtils } from 'wdNetwork/Index';
import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
import { ColorUtils } from '../../../utils/ColorUtils';
import NoMoreLayout from '../../page/NoMoreLayout';
import { EmptyComponent } from '../../view/EmptyComponent';
const TAG = 'CommentComponent';
... ... @@ -24,17 +19,17 @@ const testString = '因为读书的人\n是低着头向上看的人\n身处一
export struct CommentComponent {
@State hasMore: boolean = true;
@State currentPage: number = 1;
// @State private browSingModel: commentListModel = new commentListModel()
@State isComments: boolean = true
/*必传*/
@ObjectLink publishCommentModel: publishCommentModel
listScroller: ListScroller = new ListScroller(); // scroller控制器
historyOffset: number = 0; // 上次浏览到列表距离顶端的偏移量offset
isloading: boolean = false
@State allDatas: LazyDataSource<commentItemModel> = new LazyDataSource();
@State dialogController: CustomDialogController | null = null;
// @State private browSingModel: commentListModel = new commentListModel()
// 在自定义组件即将析构销毁时将dialogControlle置空
aboutToDisappear() {
this.dialogController = null // 将dialogController置空
... ... @@ -142,12 +137,19 @@ export struct CommentComponent {
build() {
Column() {
List({scroller:this.listScroller}) {
List({ scroller: this.listScroller }) {
ListItemGroup({ header: this.titleHeader() })
if (!this.isComments) {
EmptyComponent({ emptyType: 17 })
.height(300)
} else {
LazyForEach(this.allDatas, (item: commentItemModel, index: number) => {
if (item.hasMore) {
ListItemGroup({ header: this.CommentHeaderItem(item, index), footer: this.GroupFooterView(item, index) }) {
ListItemGroup({
header: this.CommentHeaderItem(item, index),
footer: this.GroupFooterView(item, index)
}) {
LazyForEach(item.childCommentsLazyDataSource, (childItem: commentItemModel, subIndex: number) => {
ListItem() {
ChildCommentItem({
... ... @@ -181,14 +183,17 @@ export struct CommentComponent {
// 加载更多
ListItem() {
if (this.hasMore === false) NoMoreLayout()
if (this.hasMore === false) {
NoMoreLayout()
}
}
}
.onReachEnd(()=>{
}
.onReachEnd(() => {
if (this.hasMore) {
this.getData()
}
})
.enableScrollInteraction(false)
}
... ... @@ -197,14 +202,20 @@ export struct CommentComponent {
//获取数据
async getData() {
commentViewModel.fetchContentCommentList(this.currentPage + '', this.publishCommentModel.targetId, this.publishCommentModel.targetType)
commentViewModel.fetchContentCommentList(this.currentPage + '', this.publishCommentModel.targetId,
this.publishCommentModel.targetType)
.then(commentListModel => {
this.currentPage++
if (Number.parseInt(commentListModel.totalCommentNum) > Number.parseInt(this.publishCommentModel.totalCommentNumer)) {
if (Number.parseInt(commentListModel.totalCommentNum) >
Number.parseInt(this.publishCommentModel.totalCommentNumer)) {
this.publishCommentModel.totalCommentNumer = commentListModel.totalCommentNum + ''
}
if (commentListModel.list.length === 0) {
this.isComments = false
}
if (commentListModel.hasNext === 0) {
this.hasMore = false;
} else {
... ... @@ -223,11 +234,10 @@ export struct CommentComponent {
});
}else{
} else {
this.hasMore = false
}
})
}
}
... ... @@ -318,14 +328,7 @@ struct ChildCommentItem {
})
.margin({ left: 95, right: 16, top: -5 })
.onClick(() => {
this.publishCommentModel.rootCommentId = this.item.rootCommentId
this.publishCommentModel.parentId = this.item.id
this.publishCommentModel.placeHolderText = '回复' + this.item.fromUserName + ':'
if (this.dialogController != null) {
this.dialogController.open()
}
this.replyComment()
})
... ... @@ -337,6 +340,17 @@ struct ChildCommentItem {
}.alignItems(HorizontalAlign.Start)
.width('100%')
}
replyComment() {
if (this.item.id && this.item.checkStatus == '2') { // 审核通过的才显示回复
this.publishCommentModel.rootCommentId = this.item.rootCommentId
this.publishCommentModel.parentId = this.item.id
this.publishCommentModel.placeHolderText = '回复' + this.item.fromUserName + ':'
if (this.dialogController != null) {
this.dialogController.open()
}
}
}
}
... ... @@ -486,12 +500,7 @@ struct commentHeaderView {
})
.margin({ left: 59, right: 16, top: -5 })
.onClick(() => {
this.publishCommentModel.rootCommentId = this.item.rootCommentId
this.publishCommentModel.parentId = this.item.id
this.publishCommentModel.placeHolderText = '回复' + this.item.fromUserName + ':'
if (this.dialogController != null) {
this.dialogController.open()
}
this.replyComment()
})
commentFooterView({
... ... @@ -501,6 +510,17 @@ struct commentHeaderView {
}).margin({ left: 59, right: 16 })
}.alignItems(HorizontalAlign.Start)
}
replyComment() {
if (this.item.id && this.item.checkStatus == '2') { // 审核通过的才显示回复
this.publishCommentModel.rootCommentId = this.item.rootCommentId
this.publishCommentModel.parentId = this.item.id
this.publishCommentModel.placeHolderText = '回复' + this.item.fromUserName + ':'
if (this.dialogController != null) {
this.dialogController.open()
}
}
}
}
/*评论内容下面的IP地址时间点赞*/
... ... @@ -538,12 +558,7 @@ struct commentFooterView {
.fontColor($r('app.color.color_222222'))
.fontSize(12)
.onClick(() => {
this.publishCommentModel.rootCommentId = this.item.rootCommentId
this.publishCommentModel.parentId = this.item.id
this.publishCommentModel.placeHolderText = '回复' + this.item.fromUserName + ':'
if (this.dialogController != null) {
this.dialogController.open()
}
this.replyComment()
})
}
}
... ... @@ -570,6 +585,17 @@ struct commentFooterView {
.height(30)
}
replyComment() {
if (this.item.id && this.item.checkStatus == '2') { // 审核通过的才显示回复
this.publishCommentModel.rootCommentId = this.item.rootCommentId
this.publishCommentModel.parentId = this.item.id
this.publishCommentModel.placeHolderText = '回复' + this.item.fromUserName + ':'
if (this.dialogController != null) {
this.dialogController.open()
}
}
}
clickLike() {
// 未登录,跳转登录
const user_id = HttpUtils.getUserId()
... ...
... ... @@ -45,10 +45,31 @@ export struct CommentTabComponent {
build() {
Row() {
Stack({ alignContent: Alignment.Start }) {
Image($r('app.media.comment_img_input_hui')).width(151).height(30)
Text(this.placeHolder).fontSize(12).fontColor('#999999').margin({ left: 10 })
RelativeContainer() {
Image($r('app.media.comment_img_input_hui'))
.objectFit(ImageFit.Fill)
.resizable({ slice: { top: 1, left: 1, right: 20, bottom: 1 } })
.alignRules({
top: { anchor: "__container__", align: VerticalAlign.Top },
left: { anchor: "__container__", align: HorizontalAlign.Start },
right: { anchor: "__container__", align: HorizontalAlign.End },
bottom: { anchor: "__container__", align: VerticalAlign.Bottom },
})
.id("Image")
Text(this.placeHolder)
.fontSize(12)
.fontColor('#999999')
.margin({ left: 10 })
.alignRules({
top: { anchor: "__container__", align: VerticalAlign.Top },
left: { anchor: "__container__", align: HorizontalAlign.Start },
bottom: { anchor: "__container__", align: VerticalAlign.Bottom },
})
.id("Text")
}
}
}
}.width(151).height(30)
.height(30)
.onClick(() => {
this.onCommentFocus && this.onCommentFocus()
... ...
... ... @@ -443,18 +443,14 @@ struct QualityCommentItem {
jumpToDetail() {
// programInfoModel.api_isCommentAction = YES;
let program: ContentDTO = {
objectId: this.item.targetId,
objectType: this.item.targetType,
relId: this.item.targetRelId,
relType: this.item.targetRelType,
// objectLevel: this.item.topicType,
pageId: this.item.pageId,
linkUrl: this.item.h5Url,
} as ContentDTO
ProcessUtils.processPage(program)
let content = new ContentDTO()
content.objectId = this.item.targetId;
content.objectType = this.item.targetType;
content.relId = this.item.targetRelId;
content.relType = this.item.targetRelType;
content.pageId = this.item.pageId;
content.linkUrl = this.item.h5Url;
ProcessUtils.processPage(content)
}
replyComment() {
... ...
import { CompDTO, ContentDTO, } from 'wdBean';
import { BreakpointConstants, CommonConstants, DurationEnum } from 'wdConstant';
import { BreakpointConstants, CommonConstants } from 'wdConstant';
import { BreakPointType, Logger } from 'wdKit';
import { CompUtils } from '../../utils/CompUtils';
import { ProcessUtils } from 'wdRouter';
import { EmptyComponent } from '../view/EmptyComponent';
import { CardMediaInfo } from '../cardCommon/CardMediaInfo'
import { CardMediaInfo } from '../cardCommon/CardMediaInfo';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
import { Notes } from '../cardview/notes';
const TAG = 'Zh_Carousel_Layout-01';
... ... @@ -39,19 +41,21 @@ class MyDataSource implements IDataSource {
@Component
export struct ZhCarouselLayout01 {
@StorageLink('currentBreakpoint') @Watch('watchCurrentBreakpoint') currentBreakpoint: string = BreakpointConstants.BREAKPOINT_XS;
@StorageLink('currentBreakpoint') @Watch('watchCurrentBreakpoint') currentBreakpoint: string =
BreakpointConstants.BREAKPOINT_XS;
@State compDTO: CompDTO = {} as CompDTO
private data: MyDataSource = new MyDataSource([])
@State firstWd: number = 0
@State SecondWd: number = 0
@State swiperIndex: number = 0
private data: MyDataSource = new MyDataSource([])
watchCurrentBreakpoint() {
Logger.info(TAG, `watchCurrentBreakpoint, this.currentBreakpoint: ${this.currentBreakpoint}`);
}
aboutToAppear() {
Logger.info(TAG, `aboutToAppear, beanList:${this.compDTO?.operDataList?.length}, currentBreakpoint:${this.currentBreakpoint}`);
Logger.info(TAG,
`aboutToAppear, beanList:${this.compDTO?.operDataList?.length}, currentBreakpoint:${this.currentBreakpoint}`);
let list: number[] = []
for (let i = 1; i <= this.compDTO?.operDataList?.length; i++) {
list.push(i);
... ... @@ -154,22 +158,33 @@ export struct ZhCarouselLayout01 {
}
public buildDisplayCount(): number {
return new BreakPointType({ xs: 1, sm: 1, md: 2, lg: 3 }).getValue(this.currentBreakpoint)
return new BreakPointType({
xs: 1,
sm: 1,
md: 2,
lg: 3
}).getValue(this.currentBreakpoint)
}
}
@Component
struct CarouselLayout01CardView {
private item: ContentDTO = {} as ContentDTO;
@State loadImg: boolean = false;
private item: ContentDTO = new ContentDTO();
private length: number = 1; // 轮播图数量
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
Stack() {
Image(this.item.coverUrl)
Image(this.loadImg ? this.item.coverUrl : '')
.width(CommonConstants.FULL_PARENT)
.height(CommonConstants.FULL_PARENT)
.objectFit(ImageFit.Cover)
.backgroundColor(0xf5f5f5)
Row()
.width(CommonConstants.FULL_PARENT)
... ... @@ -180,22 +195,18 @@ struct CarouselLayout01CardView {
})
Column() {
// 这里用于展示轮播图右上角信息,这里只对直播类型的展示
if (this.item.objectType === '2' || this.item.objectType ==='4') {
if (this.item.objectType === '2' || this.item.objectType === '4') {
CardMediaInfo({ contentDTO: this.item })
.width(CommonConstants.FULL_PARENT)
}
Blank()
// 文本信息
Stack() {
if (this.item.objectType == '5') {
Notes({ objectType: this.item.objectType })
}
Text(`${this.item.corner}${this.item.newsTitle}`)
.width(CommonConstants.FULL_PARENT)
.height(39)
.padding({
left: 10,
right: 10
})
.margin({
bottom: this.length > 1 ? 28 : 10
})
.fontColor(Color.White)
.fontSize($r('app.float.font_size_16'))
.fontWeight(FontWeight.Medium)
... ... @@ -203,6 +214,18 @@ struct CarouselLayout01CardView {
.align(Alignment.Bottom)
.maxLines(CompUtils.MAX_LINES_2)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.textIndent(this.item.objectType == '5' ? 40 : 0)
}
// .height(39)
.padding({
left: 10,
right: 10
})
.margin({
bottom: this.length > 1 ? 28 : 10
})
.alignContent(Alignment.TopStart)
}
.width(CommonConstants.FULL_PARENT)
.height(CommonConstants.FULL_PARENT)
... ...
... ... @@ -3,6 +3,7 @@ import { CommonConstants } from 'wdConstant/Index';
import { Logger } from 'wdKit/Index';
import { ProcessUtils } from 'wdRouter';
import PageViewModel from '../../viewmodel/PageViewModel';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Zh_Grid_Layout-02';
const FULL_PARENT: string = '100%';
... ... @@ -18,18 +19,22 @@ let listSize: number = 2;
export struct ZhGridLayout02 {
@State compDTO: CompDTO = {} as CompDTO
@State operDataList: ContentDTO[] = []
currentPage = 1
pageSize = 12
@State loadImg: boolean = false;
aboutToAppear() {
async aboutToAppear(): Promise<void> {
Logger.debug(TAG, 'aboutToAppear ' + this.compDTO.objectTitle)
this.currentPage = 1
PageViewModel.getLiveReviewUrl(this.currentPage, this.pageSize).then((liveReviewDTO) => {
this.operDataList = []
this.operDataList.push(...liveReviewDTO.list)
})
this.loadImg = await onlyWifiLoadImg();
}
currentPage = 1
pageSize = 12
build() {
Column() {
Scroll() {
... ... @@ -96,7 +101,8 @@ export struct ZhGridLayout02 {
@Builder
buildItemCard(item: ContentDTO) {
Column() {
Image(item.fullColumnImgUrls[0].url)
Image(this.loadImg ? item.fullColumnImgUrls[0].url : '')
.backgroundColor(0xf5f5f5)
.width('100%')
.height(95)
.borderRadius(4)
... ...
... ... @@ -3,6 +3,7 @@ import { CompStyle } from 'wdConstant';
import { Logger } from 'wdKit';
import { WDRouterRule } from 'wdRouter';
import { ProcessUtils } from 'wdRouter';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
const TAG = 'Zh_Grid_Layout-03';
const FULL_PARENT: string = '100%';
... ... @@ -18,11 +19,13 @@ let listSize: number = 4;
@Component
export struct ZhGridLayout03 {
@State compDTO: CompDTO = {} as CompDTO
@State loadImg: boolean = false;
aboutToAppear() {
async aboutToAppear(): Promise<void> {
if (this.compDTO.operDataList) {
listSize = this.compDTO.operDataList.length > 5 ? 4 : this.compDTO.operDataList.length;
}
this.loadImg = await onlyWifiLoadImg();
}
build() {
... ... @@ -52,7 +55,8 @@ export struct ZhGridLayout03 {
@Builder
buildItemCard(item: ContentDTO) {
Column() {
Image(item.coverUrl)
Image(this.loadImg ? item.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(44)
.aspectRatio(1 / 1)
.margin({
... ...
... ... @@ -4,7 +4,7 @@ import { HttpUrlUtils } from 'wdNetwork/Index';
import { postInteractAccentionOperateParams } from 'wdBean';
import { PageRepository } from '../../repository/PageRepository';
import { CommonConstants } from 'wdConstant/Index';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
/**
* 兴趣卡
* Zh_Single_Column-09
... ... @@ -18,12 +18,13 @@ export struct ZhSingleColumn09 {
@State activeIndexs: Array<number> = []
@State operDataList: ContentDTO[] = this.compDTO?.operDataList || []
@State selfClosed: Boolean = false;
@State loadImg: boolean = false;
aboutToAppear(): void {
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
this.operDataList = this.shuffleArray(this.compDTO?.operDataList)
}
getItemWidth(index: number) {
if (index % 4 === 0 || index % 4 === 3) {
return 80
... ... @@ -84,7 +85,8 @@ export struct ZhSingleColumn09 {
ForEach(this.operDataList, (item: ContentDTO, index: number) => {
GridItem() {
Stack({alignContent: Alignment.TopEnd}) {
Image(item.coverUrl)
Image(this.loadImg ? item.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width('100%')
.height('100%')
Text(item.newsTitle)
... ...
... ... @@ -5,6 +5,7 @@ import { PageRepository } from '../../repository/PageRepository';
import { CommonConstants } from 'wdConstant/Index';
import { ProcessUtils } from 'wdRouter';
import { HttpUtils } from 'wdNetwork/Index';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
/**
* 小视频横划卡
... ... @@ -104,13 +105,21 @@ function textOverflowStyle(maxLine: number) {
struct CreatorItem {
@Prop item: ContentDTO
@State rmhIsAttention: number = 0
@State loadImg: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
ListItem() {
Column() {
Stack({ alignContent: Alignment.Bottom }) {
Image(this.item.coverUrl)
Image(this.loadImg ? this.item.coverUrl : '')
.width(156)
.height(208)
.backgroundColor(0xf5f5f5)
Row()
.width(156)
.height(80)
... ...
import { CompDTO, ContentDTO, Params, Action } from 'wdBean';
import { CompDTO, ContentDTO, Params, Action, ReserveItemBean} from 'wdBean';
import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
import { postInteractAccentionOperateParams } from 'wdBean';
import { PageRepository } from '../../repository/PageRepository';
import { ProcessUtils } from 'wdRouter';
import { HttpUtils } from 'wdNetwork/Index';
import { DateTimeUtils } from 'wdKit';
import { DateTimeUtils, SPHelper } from 'wdKit';
import { LiveModel } from '../../viewmodel/LiveModel'
import { Logger, ToastUtils } from 'wdKit';
import { onlyWifiLoadImg } from '../../utils/lazyloadImg';
import { SpConstants } from 'wdConstant/Index'
/**
* 直播预约卡
... ... @@ -14,11 +16,6 @@ import { Logger, ToastUtils } from 'wdKit';
*/
const TAG = 'Zh_Single_Row-03'
interface reserveItem {
liveId: number,
relationId: string,
subscribe: boolean
}
interface reserveReqItem {
liveId: string,
... ... @@ -32,24 +29,28 @@ export struct ZhSingleRow03 {
@State isEndEdge: boolean = false;
// @State reserveStatus: reserveItem[] = []
@State reservedIds: string[] = [];
scroller: Scroller = new Scroller()
@State loadImg: boolean = false;
aboutToAppear(): void {
async aboutToAppear(): Promise<void> {
this.getReserveState();
this.loadImg = await onlyWifiLoadImg();
}
scroller: Scroller = new Scroller()
// 请求所有预约状态
async getReserveState() {
const reserveBean: reserveReqItem[] = this.compDTO.operDataList.map((item: ContentDTO) => {
const reqItem: reserveReqItem = {
liveId: item.objectId,
relationId: item.relId
liveId: item.objectId.toString(),
relationId: item.relId.toString()
}
return reqItem;
})
const res = await LiveModel.getAppointmentStatus(reserveBean);
// this.reserveStatus = res;
res.map((item: reserveItem) => {
Logger.debug(TAG, '数据信息:' + `${JSON.stringify(res)}`)
res.map((item: ReserveItemBean) => {
if (item.subscribe) {
this.reservedIds.push(item.liveId.toString())
}
... ... @@ -63,6 +64,13 @@ export struct ZhSingleRow03 {
// 预约/取消预约
async bookAndCancel(relationId: string, liveId: string, isSubscribe: boolean) {
// 未登录,跳转登录
const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
if (!user_id) {
WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
return
}
const res = await LiveModel.liveAppointment(relationId.toString(), liveId.toString(), isSubscribe);
if (res.code == 0) {
ToastUtils.shortToast(isSubscribe ? '预约成功' : '取消预约成功')
... ... @@ -128,10 +136,12 @@ export struct ZhSingleRow03 {
ItemCard(item: ContentDTO) {
Column() {
Row() {
Image(item.coverUrl)
Image(this.loadImg ? item.coverUrl : '')
.width(106)
.height(60)
.margin({right: 12})
.backgroundColor(0xf5f5f5)
Text(item.newsTitle)
.width(154)
.height(60)
... ... @@ -256,11 +266,17 @@ function textOverflowStyle(maxLine: number) {
struct CreatorItem {
@Prop item: ContentDTO
@State rmhIsAttention: number = 0
@State loadImg: boolean = false;
async aboutToAppear(): Promise<void> {
this.loadImg = await onlyWifiLoadImg();
}
build() {
ListItem() {
Column() {
Stack({ alignContent: Alignment.Bottom }) {
Image(this.item.coverUrl)
Image(this.loadImg ? this.item.coverUrl : '')
.backgroundColor(0xf5f5f5)
.width(156)
.height(208)
Row()
... ...
... ... @@ -64,7 +64,7 @@ export struct ZhSingleRow04 {
operDataListItem: item
}
)
.margin({right: index === this.compDTO.operDataList.length - 1 ? $r('app.float.card_comp_pagePadding_lf') : 0, left:
.margin({right: index === this.compDTO.operDataList.length - 1 ? 26 : 0, left:
index === 0 ? $r('app.float.card_comp_pagePadding_lf') : 0,
top: 6})
.onClick(() => {
... ... @@ -106,6 +106,9 @@ struct localCard {
.align(Alignment.TopStart)
.maxLines(3)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.lineHeight(20)
.margin({bottom: 17})
.fontWeight(500)
Row() {
Text(DateTimeUtils.getCommentTime(Number.parseFloat(this.operDataListItem.publishTime)))
.fontSize($r("app.float.font_size_12"))
... ... @@ -136,7 +139,7 @@ struct localCard {
.border({
radius: 2,
})
.shadow({ radius: 15, color: '#1A000000', offsetX: 2, offsetY: 2 })
.shadow({ radius: 6, color: '#1A000000', offsetX: 3, offsetY: 0 })
.margin({
right: 10
})
... ...
import { commentInfo, CompDTO, ContentDTO, Params } from 'wdBean';
import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
import { HttpUtils } from 'wdNetwork/Index';
import { postInteractAccentionOperateParams } from 'wdBean';
import { PageRepository } from '../../repository/PageRepository';
import { DateTimeUtils } from 'wdKit/Index';
import { DateTimeUtils, SPHelper } from 'wdKit/Index';
import { ProcessUtils } from 'wdRouter';
import { SpConstants } from 'wdConstant/Index'
/**
* 精选评论卡
... ... @@ -32,6 +30,20 @@ export struct ZhSingleRow06 {
@State compDTO: CompDTO = {} as CompDTO
@State likeBl: boolean = false;
async likeAction() {
const user_id = await SPHelper.default.get(SpConstants.USER_ID, '')
if (!user_id) {
WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
return
}
if (this.likeBl) {
this.likeBl = false;
} else {
this.likeBl = true;
}
}
build() {
Column() {
//顶部
... ... @@ -41,6 +53,7 @@ export struct ZhSingleRow06 {
Column(){
Text(this.compDTO.operDataList[0]?.commentInfo?.commentTitle)
.fontWeight(500)
.maxLines(4)
.textOverflow({overflow: TextOverflow.Ellipsis})
.lineHeight(23)
... ... @@ -78,7 +91,7 @@ export struct ZhSingleRow06 {
Row() {
Text(DateTimeUtils.getCommentTime(this.compDTO.operDataList[0]?.commentInfo?.publishTime))
.fontSize(14)
.fontSize(12)
.fontColor(0x999999)
Row(){
... ... @@ -88,15 +101,11 @@ export struct ZhSingleRow06 {
.margin({right: 3})
Text('点赞')
.fontSize(14)
.fontSize(15)
.fontColor(0x999999)
}
.onClick(() => {
if (this.likeBl) {
this.likeBl = false;
} else {
this.likeBl = true;
}
this.likeAction()
})
}
.justifyContent(FlexAlign.SpaceBetween)
... ... @@ -125,6 +134,7 @@ export struct ZhSingleRow06 {
.fontSize(14)
.fontColor(0x222222)
.maxLines(1)
.fontWeight(500)
.textOverflow({overflow: TextOverflow.Ellipsis})
}
.onClick(() => {
... ... @@ -155,106 +165,3 @@ function textOverflowStyle(maxLine: number) {
.maxLines(maxLine)
.textOverflow({ overflow: TextOverflow.Ellipsis })
}
@Component
struct CreatorItem {
@Prop item: ContentDTO
@State rmhIsAttention: number = 0
build() {
ListItem() {
Column() {
Flex({direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween}) {
Column() {
Row() {
Image('')
.width(20)
.height(20)
.margin({right: 4})
.border({width: 1, color: 0xcccccc, radius: 10})
Text('立志之间')
.fontColor(0x212228)
.fontSize(12)
}
}
Column() {
Row() {
Image($r('app.media.icon_like_no'))
.width(16)
.height(16)
.margin({right: 4})
Text('3835')
.fontSize(14)
.fontColor(0x999999)
}
}
}
.margin({top: 10, left: 10, right: 10, bottom: 8})
Text('就业不仅是民生问题,也是发展问题,就业不仅是民生问题,也是发展问题,就业不仅是民生问题,也是发展问题,')
.maxLines(2)
.textOverflow({overflow: TextOverflow.Ellipsis})
.margin({left: 10, right: 10, bottom: 8})
.fontSize(17)
.fontColor(0x212228)
.lineHeight(25)
Row() {
Image('')
.width(66)
.height(44)
.borderRadius({topLeft: 3, topRight: 0, bottomLeft: 3, bottomRight: 0})
Text('原文|强化就业优先政策 健全就业促进机制原文|强化就业优先政策 健全就业促进机制原文|强化就业优先政策 健全就业促进机制')
.margin({left: 8})
.width(172)
.maxLines(2)
.textOverflow({overflow: TextOverflow.Ellipsis})
}
.linearGradient({
direction: GradientDirection.Right,
colors: [[0xffffff, 0.0],[0xffffff, 0.8], [0xf9f9f9, 1.0]]
})
}
.width(276)
.height(150)
.margin({ right: 10 })
.borderWidth(1)
.borderColor($r('app.color.color_EDEDED'))
.borderRadius($r('app.float.image_border_radius'))
.backgroundColor(0xf9f9f9)
}
.onClick(() => {
console.log('跳转到rmh');
})
}
/**
* 关注号主 TODO 这里后面需要抽离
*/
handleAccention(item: ContentDTO, status: number) {
this.rmhIsAttention = this.rmhIsAttention ? 0 : 1
return
// 未登录,跳转登录
if (!HttpUtils.getUserId()) {
WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
return
}
const params: postInteractAccentionOperateParams = {
attentionUserType: item.rmhInfo?.userType || '', //被关注用户类型(1 普通用户 2 视频号 3 矩阵号)
attentionUserId: item.rmhInfo?.userId || '', // 被关注用户号主id
attentionCreatorId: item.rmhInfo?.rmhId || '', // 被关注用户号主id
// userType: 1,
// userId: '1', // TODO 用户id需要从本地获取
status: status,
}
PageRepository.postInteractAccentionOperate(params).then(res => {
console.log(TAG, '关注号主==', JSON.stringify(res.data))
if (status === 1) {
this.rmhIsAttention = 0
} else {
this.rmhIsAttention = 1
}
})
}
}
... ...
... ... @@ -47,7 +47,7 @@ export default struct MinePageMoreFunctionUI {
.fontWeight(400)
Blank()
Image($r('app.media.mine_user_arrow'))
Image($r('app.media.mine_user_arrow_2'))
.width('27lpx')
.height('27lpx')
.objectFit(ImageFit.Auto)
... ...
... ... @@ -78,6 +78,14 @@ export default struct MinePagePersonFunctionUI {
WDRouterRule.jumpWithPage(WDRouterPage.browsingHistoryPage)
break;
}
case "消息":{
if(!this.isLogin){
WDRouterRule.jumpWithPage(WDRouterPage.loginPage)
return
}
WDRouterRule.jumpWithPage(WDRouterPage.mineMessagePage)
break;
}
}
}).width('169lpx')
.height('117lpx')
... ...
... ... @@ -83,14 +83,15 @@ export default struct MinePageUserSimpleInfoUI {
.height('29lpx')
}.margin({top:'15lpx'})
}.alignItems(HorizontalAlign.Start)
.margin({top:'12lpx',left:'17lpx'})
.margin({top:'12lpx',left:'23lpx'})
.width('352lpx')
}else{
Row(){
Text("登录注册")
.fontColor($r('app.color.color_222222'))
.textOverflow({ overflow: TextOverflow.Ellipsis })
.fontSize('33lpx')
.fontSize('38lpx')
.lineHeight("46lpx")
.fontWeight(600)
Image($r('app.media.mine_user_edit'))
.width('11lpx')
... ... @@ -101,7 +102,7 @@ export default struct MinePageUserSimpleInfoUI {
}.onClick(()=>{
this.jumpLogin()
})
.margin({top:'11lpx',left:'17lpx'})
.margin({top:'11lpx',left:'23lpx'})
.width('352lpx')
}
... ... @@ -170,13 +171,20 @@ export default struct MinePageUserSimpleInfoUI {
if(value!=null){
if(StringUtils.isEmpty(this.levelHead)){
if(this.userType === "1"){
if(value.levelHead != undefined){
this.levelHead = value.levelHead
}
}
}
if(value.levelId != undefined){
this.levelId = value.levelId
UserDataLocal.setUserLevel(this.levelId)
}
if(StringUtils.isNotEmpty(this.levelHead)){
UserDataLocal.setUserLevelHeaderUrl(this.levelHead + "")
}
}
}).catch((err:Error)=>{
console.log(TAG,JSON.stringify(err))
})
... ...
... ... @@ -17,9 +17,7 @@ export struct AppointmentListChildComponent{
}),
autoCancel: true,
alignment: DialogAlignment.Center,
offset: { dx: 0, dy: -20 },
gridCount: 4,
customStyle: false
customStyle: true
})
... ...
... ... @@ -80,6 +80,7 @@ export struct FollowChildComponent{
}
.justifyContent(FlexAlign.Center)
.width('100lpx')
.backgroundColor($r("app.color.color_F5F5F5"))
.height('46lpx')
.onClick(()=>{
this.followOperation()
... ... @@ -115,10 +116,9 @@ export struct FollowChildComponent{
}.height('202lpx')
.justifyContent(FlexAlign.Start)
Divider().width('100%')
.height('1lpx')
.strokeWidth('1lpx')
.backgroundColor($r('app.color.color_EDEDED'))
Text().backgroundColor($r('app.color.color_EDEDED'))
.width('100%')
.height('2lpx')
}.width('100%')
}else {
... ... @@ -193,6 +193,7 @@ export struct FollowChildComponent{
.fontWeight('500lpx')
.lineHeight('35lpx')
}
.backgroundColor($r("app.color.color_F5F5F5"))
.justifyContent(FlexAlign.Center)
.width('100lpx')
.height('46lpx')
... ... @@ -228,13 +229,10 @@ export struct FollowChildComponent{
}.height('146lpx')
.justifyContent(FlexAlign.Center)
.onClick(()=>{
})
Divider().width('100%')
.height('1lpx')
.strokeWidth('1lpx')
.backgroundColor($r('app.color.color_EDEDED'))
Text().backgroundColor($r('app.color.color_EDEDED'))
.width('100%')
.height('2lpx')
}.width('100%')
}
... ...
... ... @@ -16,10 +16,9 @@ export struct FollowSecondTabsComponent{
build(){
Column(){
Divider().width('100%')
.height('1lpx')
.strokeWidth('1lpx')
.backgroundColor($r('app.color.color_EDEDED'))
Text().backgroundColor($r('app.color.color_EDEDED'))
.width('100%')
.height('2lpx')
if(this.data != null){
if(this.data[this.firstIndex].children == null || this.data[this.firstIndex].children.length == 0){
... ...
... ... @@ -35,7 +35,7 @@ export struct FollowThirdTabsComponent{
Text(item.directoryName)
.fontSize('27lpx')
.fontWeight(this.currentIndex === index ? "600lpx" : "400lpx")
.fontWeight(this.currentIndex === index ? 600 : 400)
.fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
.lineHeight('35lpx')
.backgroundImage($r('app.media.ic_collect_mid'))
... ...
... ... @@ -195,13 +195,12 @@ export struct ChildCommentComponent {
}.height('69lpx')
.justifyContent(FlexAlign.Center)
.onClick(() => {
ProcessUtils.processPage(
{
objectId: this.data.targetId,
relType: this.data.targetRelType + "",
relId: this.data.targetRelId,
objectType: this.data.targetType + "",
} as ContentDTO)
let content = new ContentDTO()
content.objectId = this.data.targetId;
content.relType = this.data.targetRelType + "";
content.relId = this.data.targetRelId;
content.objectType = this.data.targetType + "";
ProcessUtils.processPage(content)
})
}
.margin({ top: '19lpx', bottom: '31lpx', left: '31lpx', right: '31lpx' })
... ...
import { StringUtils, ToastUtils } from 'wdKit/Index'
import MinePageDatasModel from '../../../model/MinePageDatasModel'
import { MessageItem } from '../../../viewmodel/MessageItem'
import { CustomTitleUI } from '../../reusable/CustomTitleUI'
const TAG = "MessageListUI"
@Component
export struct MessageListUI {
@State msgData: MessageItem[] = []
aboutToAppear() {
this.msgData = MinePageDatasModel.getMessageData()
}
build() {
Column() {
//标题栏目
CustomTitleUI({ titleName: "消息" })
List() {
ForEach(this.msgData, (item: MessageItem, index: number) => {
ListItem() {
Column(){
Column() {
Row() {
Row() {
Image(item.imgSrc)
.objectFit(ImageFit.Auto)
.width('92lpx')
.height('92lpx')
.margin({ right: '15lpx' })
Column() {
Text(item.title)
.fontWeight(500)
.fontSize('31lpx')
.lineHeight('42lpx')
.fontColor($r('app.color.color_222222'))
.maxLines(1)
.margin({ bottom: StringUtils.isNotEmpty(item.desc)?'8lpx':0 })
if(StringUtils.isNotEmpty(item.desc)){
Text(`${item.desc}`)
.fontColor($r('app.color.color_B0B0B0'))
.fontSize('23lpx')
.lineHeight('38lpx')
.fontWeight(400)
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
}
}
.height('92lpx')
.layoutWeight(1)
.alignItems(HorizontalAlign.Start)
.justifyContent(StringUtils.isNotEmpty(item.desc)?FlexAlign.Start:FlexAlign.Center)
}.layoutWeight(1)
Row() {
Text(`${item.time}`)
.fontColor($r('app.color.color_999999'))
.fontSize('23lpx')
.fontWeight(500)
.lineHeight('35lpx')
}
.justifyContent(FlexAlign.Start)
.alignItems(VerticalAlign.Top)
.height('92lpx')
}
.width('100%')
.height('92lpx')
.justifyContent(FlexAlign.SpaceBetween)
}.height('154lpx')
.width("100%")
.justifyContent(FlexAlign.Center)
Text().backgroundColor($r('app.color.color_EDEDED'))
.width('100%')
.height('1lpx')
.visibility(index != 3 ?Visibility.Visible:Visibility.None)
}
}
.padding({left:"31lpx",right:"31lpx"})
.onClick(() => {
ToastUtils.shortToast(index+"")
switch (index) {
case 0: //互动消息
break;
case 1: //预约消息
break;
case 2: //历史推送
break;
case 3: //系统消息
break;
}
})
.height('154lpx')
.width("100%")
})
}
}
.backgroundColor($r('app.color.white'))
.height('100%')
.width('100%')
}
}
\ No newline at end of file
... ...
... ... @@ -7,6 +7,7 @@ import { CompUtils } from '../../utils/CompUtils';
import PageViewModel from '../../viewmodel/PageViewModel';
import HomeChannelUtils, { AssignChannelParam } from 'wdRouter/src/main/ets/utils/HomeChannelUtils';
import { Message } from 'wdJsBridge/src/main/ets/bean/Message';
import { VideoChannelPage } from './VideoChannelPage';
const TAG = 'BottomNavigationComponent';
let storage = LocalStorage.getShared();
... ... @@ -76,10 +77,15 @@ export struct BottomNavigationComponent {
Tabs({ barPosition: BarPosition.End, index: this.currentNavIndex, controller: this.navController }) {
ForEach(this.bottomNavList, (navItem: BottomNavDTO, index: number) => {
TabContent() {
Column() {
if (CompUtils.isMine(navItem)) {
// 我的页面组件数据列表
MinePageComponent()
} else if (navItem.name === '视频') {
// 视频频道,包含视频和直播
VideoChannelPage({
topNavList: navItem.topNavChannelList.filter(item => item.channelId != 2073),
_currentNavIndex: $currentNavIndex,
})
} else {
TopNavigationComponent({
groupId: navItem.id,
... ... @@ -91,20 +97,21 @@ export struct BottomNavigationComponent {
autoRefresh: this.autoRefresh
})
}
}
}
.tabBar(this.tabBarBuilder(navItem, index))
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])
});
}
.scrollable(false)
.animationDuration(0)
.barHeight($r('app.float.bottom_navigation_barHeight'))
.barMode(BarMode.Fixed)
.barBackgroundColor(this.barBackgroundColor)
// 备注:鸿蒙目前只有修改三线导航背景方法,对于全面屏导航条手机需要设置背景色并使其扩散到导航区域
.backgroundColor(this.barBackgroundColor)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
.expandSafeArea([SafeAreaType.SYSTEM])
// .padding({ bottom: this.bottomRectHeight + 'px', top: this.topRectHeight + 'px' }) // 此处margin具体数值在实际中应与导航条区域高度保持一致
... ... @@ -115,7 +122,12 @@ export struct BottomNavigationComponent {
Stack({ alignContent: Alignment.Bottom }) {
Image(this.currentNavIndex === index ? navItem.iconC : navItem.icon)
.height(CommonConstants.FULL_PARENT)
.padding({ bottom: 15, left: 10, right: 10, top: 2 })
.padding({
bottom: 15,
left: 10,
right: 10,
top: 2
})
.aspectRatio(this.ASPECT_RATIO_1_1)
Text(navItem.name)
... ... @@ -130,13 +142,13 @@ export struct BottomNavigationComponent {
.hoverEffect(HoverEffect.Highlight)
.onClick(() => {
Logger.info(TAG, `onChange, index: ${index}`);
this.onBottomNavigationIndexChange(navItem,index)
this.onBottomNavigationIndexChange(navItem, index)
})
}
// 底导切换函数
async onBottomNavigationIndexChange(navItem:BottomNavDTO,index:number) {
async onBottomNavigationIndexChange(navItem: BottomNavDTO, index: number) {
Logger.info(TAG, `onBottomNavigationIndexChange this.currentNavIndex: ${this.currentNavIndex}`);
if (navItem.name === '我的') {
this.barBackgroundColor = Color.White
... ... @@ -154,8 +166,9 @@ export struct BottomNavigationComponent {
// 请求顶导数据(参数):
}
//请求顶导数据
async getTopNavList(id:number){
async getTopNavList(id: number) {
let bottomNavDetail = await PageViewModel.getBottomNavDetailData(id)
this.topNavList = bottomNavDetail?.topNavChannelList || []
}
... ...
... ... @@ -7,7 +7,6 @@ import { ErrorComponent } from '../view/ErrorComponent'
import RefreshLayout from './RefreshLayout'
import { RefreshLayoutBean } from './RefreshLayoutBean';
import { CompDTO, ContentDTO } from 'wdBean'
import LoadMoreLayout from './LoadMoreLayout'
import NoMoreLayout from './NoMoreLayout'
import CustomRefreshLoadLayout from './CustomRefreshLoadLayout';
import { CustomSelectUI } from '../view/CustomSelectUI';
... ...
import { Action, ContentDTO, Params } from 'wdBean';
import { Action, ContentDTO, Params, InteractDataDTO } from 'wdBean';
import { CommonConstants, ConfigConstants, ScreenType } from 'wdConstant';
import { Logger, ToastUtils, DateTimeUtils } from 'wdKit';
import { CompUtils } from '../../utils/CompUtils';
... ... @@ -15,7 +15,7 @@ const TAG: string = 'CardView';
*/
@Component
export struct CarouselLayout01CardView {
private item: ContentDTO = {} as ContentDTO;
private item: ContentDTO = new ContentDTO();
private index: number = -1;
build() {
... ... @@ -85,7 +85,7 @@ export struct CarouselLayout01CardView {
*/
@Component
export struct SingleColumn01CardView {
private item: ContentDTO = {} as ContentDTO;
private item: ContentDTO = new ContentDTO();
private index: number = -1;
build() {
... ... @@ -164,7 +164,7 @@ export struct SingleColumn01CardView {
*/
@Component
export struct SingleColumn02CardView {
private item: ContentDTO = {} as ContentDTO;
private item: ContentDTO = new ContentDTO();
private index: number = -1;
build() {
... ... @@ -288,7 +288,7 @@ export struct SingleColumn02CardView {
*/
@Component
export struct MasonryLayout01CardView {
private item: ContentDTO = {} as ContentDTO;
private item: ContentDTO = new ContentDTO();
private index: number = -1;
build() {
... ... @@ -387,8 +387,10 @@ export struct MasonryLayout01CardView {
*/
@Component
export struct PaperSingleColumn999CardView {
private item: ContentDTO = {} as ContentDTO;
private item: ContentDTO = new ContentDTO();
private index: number = -1;
@State interactData: InteractDataDTO = {} as InteractDataDTO;
@Consume @Watch('onChangeCommentList') commentList: InteractDataDTO[]
getPublishTime(): string {
const publishTimestamp = parseInt(this.item?.publishTime)
... ... @@ -471,7 +473,7 @@ export struct PaperSingleColumn999CardView {
.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。
.margin({ left: 22, right: 22 })
}
if (this.item?.visitorComment) {
if (this.item) {
Row() {
Row() {
Text(this.item?.source)
... ... @@ -485,10 +487,17 @@ export struct PaperSingleColumn999CardView {
Text(this.getPublishTime())
.fontSize(12)
.fontColor(Color.Gray)
Text(this.item?.visitorComment + "评")
if (this.interactData && this.interactData.commentNum) {
Text(this.interactData.commentNum + "评")
.fontSize(12)
.fontColor(Color.Gray)
.margin({ left: 6 })
}else if (this.commentList && this.commentList.length) {
Text(this.interactData.commentNum + "评")
.fontSize(12)
.fontColor(Color.Gray)
.margin({ left: 6 })
}
}
.justifyContent(FlexAlign.Start)
... ... @@ -508,10 +517,28 @@ export struct PaperSingleColumn999CardView {
}
}
.backgroundColor(Color.White)
.margin({ bottom: 5, left: 12, right: 12 })
.margin({ bottom: 14, left: 12, right: 12 })
.borderRadius(4)
.onClick(() => {
ProcessUtils.processPage(this.item)
})
}
aboutToAppear(): void {
this.onChangeCommentList()
}
onChangeCommentList() {
// 获取评论
if (this.commentList && this.commentList.length > 0 && this.item && this.item.objectId) {
const objc = this.commentList.find((interactModel: InteractDataDTO) => {
return this.item.objectId == interactModel.contentId
})
if (objc) {
this.interactData = objc
}
}
}
}
\ No newline at end of file
... ...
... ... @@ -13,8 +13,20 @@ const LOCAL_CHANNEL: string = '地方频道'
const TAG: string = 'ChannelSubscriptionLayout'
@CustomDialog
struct ChannelDialog {
// @Entry
@Component
struct ChannelSubscriptionLayout {
@State indexSettingArray: string [] = ['推荐', '热点']
//当前选中的频道
@Link currentTopNavSelectedIndex: number;
@Prop homeChannelList: TopNavDTO []
@Prop indexSettingChannelId: number
@Link myChannelList: TopNavDTO []
@Link moreChannelList: TopNavDTO []
@Link localChannelList: TopNavDTO []
@Link channelIds: number []
@StorageLink('channelIds') storeChannelIds: string = ''
@State isShow: boolean = false
@State dragItem: number = -1
private dragRefOffsetX: number = 0
private dragRefOffsetY: number = 0
... ... @@ -25,26 +37,40 @@ struct ChannelDialog {
@State indexSettingTabIndex: number = 0
@State isEditIng: boolean = false
@State currentTopNavSelectedItem: TopNavDTO = {} as TopNavDTO
@Link currentTopNavSelectedIndex: number
@Link myChannelList: TopNavDTO[]
@Link moreChannelList: TopNavDTO[]
@Link localChannelList: TopNavDTO[]
@Link homeChannelList: TopNavDTO[]
@Link indexSettingChannelId: number
controller?: CustomDialogController
confirm: (index: number) => void = () => {
}
changeChannelIndex: (index1: number, index2: number) => void = () => {
}
delChannelItem: (index: number) => void = () => {
}
addChannelItem: (item: TopNavDTO) => void = () => {
changeTab: (index: number) => void = () => {
}
aboutToAppear() {
this.currentTopNavSelectedItem = this.myChannelList[this.currentTopNavSelectedIndex]
}
//交换我的频道数组中的位置
changeChannelIndex(index1: number, index2: number) {
let tmp = this.myChannelList.splice(index1, 1)
let channelIdTmp = this.channelIds.splice(index1, 1)
this.myChannelList.splice(index2, 0, tmp[0])
this.channelIds.splice(index2, 0, channelIdTmp[0])
this.storeChannelIds = this.channelIds.join(',')
}
//删除频道
delChannelItem(index: number){
let item = this.myChannelList.splice(index, 1)[0]
this.channelIds.splice(index, 1)
this.storeChannelIds = this.channelIds.join(',')
if (item.moreChannel === '1') {
this.moreChannelList.unshift(item)
}
if (item.localChannel === '1') {
this.localChannelList.unshift(item)
}
}
// 添加频道
addChannelItem(item: TopNavDTO){
this.channelIds.push(item.channelId)
this.myChannelList.push(item)
this.storeChannelIds = this.channelIds.join(',')
}
itemMove(index: number, newIndex: number): void {
let targetItem = this.myChannelList[newIndex]
if (!(targetItem?.headlinesOn === 1 || targetItem?.movePermitted === 0 || targetItem?.homeChannel === '1')) {
... ... @@ -176,7 +202,8 @@ struct ChannelDialog {
}
}
build() {
@Builder
sheetBuilder() {
Column() {
Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
Image($r('app.media.icon_ren_min_ri_bao'))
... ... @@ -185,7 +212,7 @@ struct ChannelDialog {
Image($r('app.media.close_button'))
.width(24)
.onClick(() => {
this.controller?.close()
this.isShow = false
})
}
.width('100%')
... ... @@ -310,8 +337,8 @@ struct ChannelDialog {
this.delChannelItem(index)
}
} else {
this.confirm(index)
this.controller?.close()
this.changeTab(index)
this.isShow = false
}
}),
LongPressGesture({ repeat: true })
... ... @@ -464,73 +491,6 @@ struct ChannelDialog {
})
.backgroundColor('#ffffff')
}
}
// @Entry
@Component
struct ChannelSubscriptionLayout {
@State indexSettingArray: string [] = ['推荐', '热点']
//当前选中的频道
@Link currentTopNavSelectedIndex: number;
@Prop homeChannelList: TopNavDTO []
@Prop indexSettingChannelId: number
@Link myChannelList: TopNavDTO []
@Link moreChannelList: TopNavDTO []
@Link localChannelList: TopNavDTO []
@Link channelIds: number []
@StorageLink('channelIds') storeChannelIds: string = ''
changeTab: (index: number) => void = () => {
}
//频道弹窗点击切换频道
onAccept = (index: number) => {
this.changeTab(index)
}
//交换我的频道数组中的位置
changeChannelIndex = (index1: number, index2: number) => {
let tmp = this.myChannelList.splice(index1, 1)
let channelIdTmp = this.channelIds.splice(index1, 1)
this.myChannelList.splice(index2, 0, tmp[0])
this.channelIds.splice(index2, 0, channelIdTmp[0])
this.storeChannelIds = this.channelIds.join(',')
}
//删除频道
delChannelItem = (index: number) => {
let item = this.myChannelList.splice(index, 1)[0]
this.channelIds.splice(index, 1)
this.storeChannelIds = this.channelIds.join(',')
if (item.moreChannel === '1') {
this.moreChannelList.unshift(item)
}
if (item.localChannel === '1') {
this.localChannelList.unshift(item)
}
}
// 添加频道
addChannelItem = (item: TopNavDTO) => {
this.channelIds.push(item.channelId)
this.myChannelList.push(item)
this.storeChannelIds = this.channelIds.join(',')
}
dialogController: CustomDialogController | null = new CustomDialogController({
builder: ChannelDialog({
currentTopNavSelectedIndex: $currentTopNavSelectedIndex,
indexSettingChannelId: $indexSettingChannelId,
homeChannelList: $homeChannelList,
myChannelList: $myChannelList,
moreChannelList: $moreChannelList,
localChannelList: $localChannelList,
confirm: this.onAccept,
changeChannelIndex: this.changeChannelIndex,
delChannelItem: this.delChannelItem,
addChannelItem: this.addChannelItem
}),
alignment: DialogAlignment.TopEnd,
customStyle: true,
})
aboutToDisappear() {
this.dialogController = null // 将dialogController置空
}
build() {
Row() {
... ... @@ -542,10 +502,9 @@ struct ChannelSubscriptionLayout {
.justifyContent(FlexAlign.Center)
.backgroundColor(Color.White)
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
this.isShow = true
})
.bindContentCover(this.isShow, this.sheetBuilder())
}
}
... ...
... ... @@ -37,9 +37,9 @@ struct EditUserIntroductionPage {
Divider()
.margin(12)
.margin(20)
Text('1、账号中(头像、昵称等)不允许含有违禁违规内容;\n2、出于商业或作为素材恶搞目的,而将国旗、国徽以及国家领导人用于头像、昵称;\n3、最多60个字,只能输入中文、数字、英文字母。')
Text('1、账号中(头像、昵称等)不允许含有违禁违规内容;\n2、最多60个字,只能输入中文、数字、英文字母。')
.fontSize(13)
.padding(12)
.fontColor(Color.Gray)
... ...
... ... @@ -39,9 +39,9 @@ struct EditUserNikeNamePage {
.alignItems(VerticalAlign.Center)
Divider()
.margin(12)
.margin(20)
Text('1、账号中(头像、昵称等)不允许含有违禁违规内容;\n2、出于商业或作为素材恶搞目的,而将国旗、国徽以及国家领导人用于头像、昵称;\n3、最多16个字,只能输入中文、数字、英文字母。')
Text('1、账号中(头像、昵称等)不允许含有违禁违规内容;\n2、最多16个字,只能输入中文、数字、英文字母。')
.fontSize(13)
.padding(12)
.fontColor(Color.Gray)
... ...
import MyCollectionViewModel from '../../viewmodel/MyCollectionViewModel';
import PageModel from '../../viewmodel/PageModel';
import { CommonConstants, ViewType } from 'wdConstant'
import { EmptyComponent,WDViewDefaultType } from '../view/EmptyComponent'
import { ContentDTO } from 'wdBean'
import NoMoreLayout from './NoMoreLayout'
import CustomRefreshLoadLayout from './CustomRefreshLoadLayout';
import { CustomSelectUI } from '../view/CustomSelectUI';
import { CustomBottomFuctionUI } from '../view/CustomBottomFuctionUI';
import { BigPicCardComponent } from '../view/BigPicCardComponent';
import { CustomTitleUI } from '../reusable/CustomTitleUI';
import { CustomPullToRefresh } from '../reusable/CustomPullToRefresh';
import { InteractMComponent } from '../InteractMessage/InteractMComponent';
@Entry
@Component
struct InteractMessagePage {
@State private browSingModel: PageModel = new PageModel()
isloading : boolean = false
@Provide isEditState:boolean = false
@State allDatas :ContentDTO[] = [];
private scroller: Scroller = new Scroller();
@State likeNum: number = 20
aboutToAppear(){
this.getData()
}
build() {
Column(){
CustomTitleUI({titleName:'互动消息'})
this.ListLayout()
// if(this.browSingModel.viewType == ViewType.ERROR){
// EmptyComponent({emptyType:WDViewDefaultType.WDViewDefaultType_NetworkFailed})
// }else if(this.browSingModel.viewType == ViewType.EMPTY){
// EmptyComponent({emptyType:WDViewDefaultType.WDViewDefaultType_NoHistory})
// }else {
// CustomPullToRefresh({
// alldata:this.allDatas,
// scroller:this.scroller,
// customList:()=>{
// this.ListLayout()
// },
// onRefresh:(resolve)=>{
// this.browSingModel.currentPage = 0
// this.getData(resolve)
// },
// onLoadMore:(resolve)=> {
// this.browSingModel.currentPage++
// this.getData()
// }
// })
// }
}
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
}
@Builder ListLayout() {
List({scroller: this.scroller}) {
ListItem(){
this.likeUILayout()
}
// 下拉刷新
ForEach(this.allDatas, (compDTO: ContentDTO, compIndex: number) => {
ListItem() {
InteractMComponent()
}
})
// 加载更多
ListItem() {
if (this.browSingModel.hasMore) {
} else {
NoMoreLayout()
}
}
}
.height(CommonConstants.FULL_PARENT)
.edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
}
@Builder
likeUILayout(){
Column(){
Row(){
Text('共获')
.fontSize(18)
Text(this.likeNum.toString())
.fontSize(30)
.fontColor(Color.Red)
Text('赞')
.fontSize(18)
}.height(75)
Divider()
.color('#f5f5f5')
.backgroundColor('#f5f5f5')
.width('100%')
.height(5)
}
.alignItems(HorizontalAlign.Start)
.padding({ left:16,right:16 })
.width('100%')
.height(80)
}
async getData(resolve?: (value: string | PromiseLike<string>) => void){
MyCollectionViewModel.fetchMyCollectList(2,'1',this.browSingModel.currentPage,getContext(this)).then(collectionItem => {
if(resolve) resolve('刷新成功')
if (collectionItem && collectionItem.list && collectionItem.list.length > 0) {
this.browSingModel.viewType = ViewType.LOADED;
this.allDatas.push(...collectionItem.list)
if (collectionItem.list.length === this.browSingModel.pageSize) {
this.browSingModel.currentPage++;
this.browSingModel.hasMore = true;
} else {
this.browSingModel.hasMore = false;
}
} else {
this.browSingModel.viewType = ViewType.EMPTY;
}
})
}
}
... ...
... ... @@ -29,7 +29,7 @@ struct LiveMorePage {
pageSize: number = 20;
operDataList: ContentDTO[] = [];
title: string = '直播列表'
@State contentDTO: ContentDTO = {
@State contentDTO: ContentDTO = new ContentDTO();
// appStyle: '15',
// coverType: 1,
// objectType: '9',
... ... @@ -67,7 +67,7 @@ struct LiveMorePage {
// voiceInfo: {
// voiceDuration: 12
// }
} as ContentDTO;
// } as ContentDTO;
aboutToAppear(): void {
PageViewModel.getLiveMoreUrl(this.type, this.currentPage, this.pageSize).then((liveReviewDTO) => {
... ...
import CustomRefreshLoadLayout from './CustomRefreshLoadLayout';
import { RefreshLayoutBean } from './RefreshLayoutBean';
import CustomLoadMoreLayout from '../refresh/CustomLoadMoreLayout';
/**
* The load more layout component.
*/
@Component
export default struct LoadMoreLayout {
@ObjectLink refreshBean: RefreshLayoutBean;
@Prop isVisible: boolean;
build() {
Column() {
if (this.refreshBean.isVisible) {
CustomRefreshLoadLayout({
refreshBean: new RefreshLayoutBean(this.refreshBean.isVisible,
this.refreshBean.imageSrc, this.refreshBean.textValue, this.refreshBean.heightValue)
})
} else {
CustomRefreshLoadLayout({
refreshBean: new RefreshLayoutBean(this.refreshBean.isVisible,
this.refreshBean.imageSrc, this.refreshBean.textValue, 0)
})
if (this.isVisible) {
CustomLoadMoreLayout()
}
}
}
... ...
... ... @@ -28,7 +28,7 @@ export struct PageComponent {
// 自动刷新通知
@Prop @Watch('onAutoRefresh') autoRefresh: number = 0
private listScroller: Scroller = new Scroller();
needload: boolean = true;
build() {
Column() {
if (this.pageModel.viewType == ViewType.LOADING) {
... ... @@ -84,10 +84,7 @@ export struct PageComponent {
// 加载更多
ListItem() {
if (this.pageModel.hasMore) {
// LoadMoreLayout({
// refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage,
// this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight)
// })
LoadMoreLayout({ isVisible: this.pageModel.isVisiblePullUpLoad })
} else if (!this.pageModel.contentNeedScroll) {
PageNoMoreLayout({ noMoreBean: new NoMoreBean(this.pageModel.pageInfo.baselineCopywriting) })
}
... ... @@ -96,7 +93,7 @@ export struct PageComponent {
// comp自己处理分页,这里设置EdgeEffect.None
.edgeEffect(this.pageModel.contentNeedScroll ? EdgeEffect.None : EdgeEffect.Spring)
.scrollBar(BarState.Off)
.cachedCount(8)
.cachedCount(5)
.height(CommonConstants.FULL_PARENT)
.onScrollIndex((start: number, end: number) => {
// Listen to the first index of the current list.
... ... @@ -220,14 +217,18 @@ export struct PageComponent {
// 选中tab,才请求数据。拦截大量接口请求
if (this.navIndex === this.currentTopNavSelectedIndex) {
this.getData();
this.needload = false;
}
}
onChange() {
Logger.info(TAG, `onChangezz id: ${this.pageId} , ${this.channelId} , ${this.navIndex} , navIndex: ${this.currentTopNavSelectedIndex}`);
if (this.navIndex === this.currentTopNavSelectedIndex) {
if(this.needload){
this.getData();
}
this.needload = false;
}
}
onAutoRefresh() {
... ...