Merge branch 'main' of http://192.168.1.42/developOne/harmonyPool into main
* 'main' of http://192.168.1.42/developOne/harmonyPool: fix:修复点击 tab 切换频道没有动画问题 fix:bug[17196] 修改密码鸿蒙版描述信息文字错误,存在错别字 fix:bug[17195] 功能缺陷-【uat】点击忘记密码,进入找回密码页,输入手机号密码,进入重置密码页,并且提示“效验成功,准备跳转设置页面”,预期android不提示 fix:bug[17186] 功能缺陷-【uat】登录-已输入手机号,点击忘记密码按钮,跳转到找回密码页面,应带入手机号 fix:16994 功能缺陷--进入直播,点击直播预告,点击更多按钮,进入直播预告详情页,已预约直播间,显示预约按钮,预期显示已预约按钮 fix:bug[17128] UI-我的用户信息和编辑资料字体大小鸿蒙与按照不一致 无用引用 首页添加分页加载loading ui fix: 16984 功能缺陷-进入直播间,点击预约按钮,进入直播tab页,预约按钮没有变成已预约按钮 fix: 预约debug fix: 预约debug fix:bug[17014] UI还原问题--我的关注下分割线粗细和间距,已关注背景鸿蒙与安卓不一致 fix: 16929 功能缺陷-进入文化频道页,日期未展示 fix:bug[16855] UI还原问题-账号登录注册-忘记密码-进入设置密码页,输入密码不一致,提示和android版本不一致 fix:bug[16854] 功能缺陷-账号登录注册-忘记密码-进入设置密码页,输入简单密码无提示 fix: 人民号单图卡和轮播图卡添加标签 fix:17298 图集,第一页或最后一页,不应支持向左滑或向右滑 fix: 17358 UI还原问题-【uat】精选评论卡-时间字体偏大 fix: 17155 搜索结果页-没有评论不该展示0评
Showing
33 changed files
with
717 additions
and
483 deletions
| 1 | @CustomDialog | 1 | @CustomDialog |
| 2 | export struct CustomToast { | 2 | export struct CustomToast { |
| 3 | - public static LENGTH_LONG = 5000; | ||
| 4 | - public static LENGTH_SHORT = 3000; | 3 | + public static LENGTH_LONG = 4000; |
| 4 | + public static LENGTH_SHORT = 2000; | ||
| 5 | 5 | ||
| 6 | @State msg: string = "" | 6 | @State msg: string = "" |
| 7 | @State duration: number = CustomToast.LENGTH_SHORT | 7 | @State duration: number = CustomToast.LENGTH_SHORT |
| @@ -29,6 +29,7 @@ export struct CustomToast { | @@ -29,6 +29,7 @@ export struct CustomToast { | ||
| 29 | .fontColor($r('app.color.white')) | 29 | .fontColor($r('app.color.white')) |
| 30 | .fontSize("27lpx") | 30 | .fontSize("27lpx") |
| 31 | .lineHeight("38lpx") | 31 | .lineHeight("38lpx") |
| 32 | + .textAlign(TextAlign.Center) | ||
| 32 | }.borderRadius(`${this.bgBorderRadius}lpx`) | 33 | }.borderRadius(`${this.bgBorderRadius}lpx`) |
| 33 | .constraintSize({maxWidth:"86%"}) | 34 | .constraintSize({maxWidth:"86%"}) |
| 34 | .padding({top:"23lpx",bottom:'23lpx',left:"35lpx",right:"35lpx"}) | 35 | .padding({top:"23lpx",bottom:'23lpx',left:"35lpx",right:"35lpx"}) |
| @@ -26,6 +26,9 @@ export enum EmitterEventId { | @@ -26,6 +26,9 @@ export enum EmitterEventId { | ||
| 26 | // 换绑成功 | 26 | // 换绑成功 |
| 27 | PHONE_CHANGE_SUCCESS = 9, | 27 | PHONE_CHANGE_SUCCESS = 9, |
| 28 | 28 | ||
| 29 | + // 直播间-取消-预约成功 | ||
| 30 | + LIVE_ROOM_SUBSCRIBE = 10, | ||
| 31 | + | ||
| 29 | // App回到前台 | 32 | // App回到前台 |
| 30 | APP_ENTER_FOREGROUD = 100, | 33 | APP_ENTER_FOREGROUD = 100, |
| 31 | // App进入后台 | 34 | // App进入后台 |
| @@ -213,7 +213,7 @@ export class HttpUrlUtils { | @@ -213,7 +213,7 @@ export class HttpUrlUtils { | ||
| 213 | /** | 213 | /** |
| 214 | * 预约状态 | 214 | * 预约状态 |
| 215 | */ | 215 | */ |
| 216 | - static readonly LIVE_APPOINTMENT_BATCH_PATH: string = "api/live-center-message/zh/c/live/subscribe/user/batch"; | 216 | + static readonly LIVE_APPOINTMENT_BATCH_PATH: string = "/api/live-center-message/zh/c/live/subscribe/user/batch"; |
| 217 | /** | 217 | /** |
| 218 | 218 | ||
| 219 | * 搜索结果 显示tab 数 | 219 | * 搜索结果 显示tab 数 |
| @@ -126,7 +126,7 @@ export class WDRouterPage { | @@ -126,7 +126,7 @@ export class WDRouterPage { | ||
| 126 | //直播更多页 | 126 | //直播更多页 |
| 127 | static liveMorePage = new WDRouterPage("wdComponent", "ets/components/page/LiveMorePage"); | 127 | static liveMorePage = new WDRouterPage("wdComponent", "ets/components/page/LiveMorePage"); |
| 128 | //预约更多页 | 128 | //预约更多页 |
| 129 | - static reserveMorePage = new WDRouterPage("wdComponent", "ets/components/page/ReserveMorePage"); | 129 | + static reserveMorePage = new WDRouterPage("wdComponent", "ets/components/reserveMore/ReserveMorePage"); |
| 130 | //金刚位聚合页 | 130 | //金刚位聚合页 |
| 131 | static themeListPage = new WDRouterPage("wdComponent", "ets/components/page/ThemeListPage"); | 131 | static themeListPage = new WDRouterPage("wdComponent", "ets/components/page/ThemeListPage"); |
| 132 | // 栏目页面、频道详情 | 132 | // 栏目页面、频道详情 |
| @@ -168,4 +168,7 @@ export { GoldenPositionExtraBean } from './src/main/ets/bean/content/GoldenPosit | @@ -168,4 +168,7 @@ export { GoldenPositionExtraBean } from './src/main/ets/bean/content/GoldenPosit | ||
| 168 | export { ClassBean } from './src/main/ets/bean/content/ClassBean'; | 168 | export { ClassBean } from './src/main/ets/bean/content/ClassBean'; |
| 169 | export { CreatorsBean } from './src/main/ets/bean/content/CreatorsBean'; | 169 | export { CreatorsBean } from './src/main/ets/bean/content/CreatorsBean'; |
| 170 | 170 | ||
| 171 | -export { MasterDetailRes } from './src/main/ets/bean/user/MasterDetailRes'; | ||
| 171 | +export { MasterDetailRes } from './src/main/ets/bean/user/MasterDetailRes'; | ||
| 172 | + | ||
| 173 | +export { ReserveItemBean } from './src/main/ets/bean/live/ReserveItemBean'; | ||
| 174 | + |
| @@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
| 7 | "main": "Index.ets", | 7 | "main": "Index.ets", |
| 8 | "version": "1.0.0", | 8 | "version": "1.0.0", |
| 9 | "dependencies": { | 9 | "dependencies": { |
| 10 | - "@ohos/lottie": "2.0.0", | 10 | + "@ohos/lottie": "2.0.10", |
| 11 | "wdConstant": "file:../../commons/wdConstant", | 11 | "wdConstant": "file:../../commons/wdConstant", |
| 12 | "wdPlayer": "file:../../features/wdPlayer", | 12 | "wdPlayer": "file:../../features/wdPlayer", |
| 13 | "wdLogin": "file:../../features/wdLogin", | 13 | "wdLogin": "file:../../features/wdLogin", |
| @@ -270,6 +270,7 @@ export struct MultiPictureDetailPageComponent { | @@ -270,6 +270,7 @@ export struct MultiPictureDetailPageComponent { | ||
| 270 | .indicator(false) | 270 | .indicator(false) |
| 271 | .displayCount(1) | 271 | .displayCount(1) |
| 272 | .loop(false) | 272 | .loop(false) |
| 273 | + .effectMode(EdgeEffect.None) | ||
| 273 | .id('e_swiper_content') | 274 | .id('e_swiper_content') |
| 274 | .alignRules({ | 275 | .alignRules({ |
| 275 | center: { anchor: "__container__", align: VerticalAlign.Center }, | 276 | center: { anchor: "__container__", align: VerticalAlign.Center }, |
| @@ -51,6 +51,7 @@ export struct CardSourceInfo { | @@ -51,6 +51,7 @@ export struct CardSourceInfo { | ||
| 51 | .fontColor($r("app.color.color_B0B0B0")) | 51 | .fontColor($r("app.color.color_B0B0B0")) |
| 52 | .flexShrink(0) | 52 | .flexShrink(0) |
| 53 | .margin({ left: 6 }) | 53 | .margin({ left: 6 }) |
| 54 | + .visibility(Number(this.contentDTO?.interactData?.commentNum) === 0 ? Visibility.None : Visibility.Visible) | ||
| 54 | } | 55 | } |
| 55 | } | 56 | } |
| 56 | .width(CommonConstants.FULL_WIDTH) | 57 | .width(CommonConstants.FULL_WIDTH) |
| @@ -25,7 +25,7 @@ export struct RmhTitle { | @@ -25,7 +25,7 @@ export struct RmhTitle { | ||
| 25 | 25 | ||
| 26 | aboutToAppear(): void { | 26 | aboutToAppear(): void { |
| 27 | let page = router.getState(); | 27 | let page = router.getState(); |
| 28 | - if (page.path.includes('/page/PeopleShipHomePage')) { | 28 | + if (page.path.includes('/page/PeopleShipHomePage') || page.path.includes('/pages/MainPage')) { |
| 29 | this.hideTime = true; | 29 | this.hideTime = true; |
| 30 | } | 30 | } |
| 31 | } | 31 | } |
| @@ -38,6 +38,8 @@ export struct Card6Component { | @@ -38,6 +38,8 @@ export struct Card6Component { | ||
| 38 | Stack() { | 38 | Stack() { |
| 39 | if (this.contentDTO.newTags) { | 39 | if (this.contentDTO.newTags) { |
| 40 | Notes({ newTags: this.contentDTO.newTags }) | 40 | Notes({ newTags: this.contentDTO.newTags }) |
| 41 | + } else if (this.contentDTO.objectType == '5') { | ||
| 42 | + Notes({ objectType: this.contentDTO.objectType }) | ||
| 41 | } | 43 | } |
| 42 | 44 | ||
| 43 | Text(`${this.contentDTO.newsTitle}`) | 45 | Text(`${this.contentDTO.newsTitle}`) |
| @@ -48,7 +50,8 @@ export struct Card6Component { | @@ -48,7 +50,8 @@ export struct Card6Component { | ||
| 48 | .alignSelf(ItemAlign.Start) | 50 | .alignSelf(ItemAlign.Start) |
| 49 | .textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。 | 51 | .textOverflow({ overflow: TextOverflow.Ellipsis })// 超出的部分显示省略号。 |
| 50 | .textIndent(this.contentDTO.newTags?.length < 5 && this.contentDTO.newTags?.length > 2 ? 60 : | 52 | .textIndent(this.contentDTO.newTags?.length < 5 && this.contentDTO.newTags?.length > 2 ? 60 : |
| 51 | - this.contentDTO.newTags?.length != 0 && this.contentDTO.newTags?.length < 3 ? 30 : 0) | 53 | + (this.contentDTO.newTags?.length != 0 && this.contentDTO.newTags?.length) || |
| 54 | + this.contentDTO.objectType == '5' ? 30 : 0) | ||
| 52 | }.alignContent(Alignment.TopStart) | 55 | }.alignContent(Alignment.TopStart) |
| 53 | 56 | ||
| 54 | }.height("80%") | 57 | }.height("80%") |
| @@ -64,7 +67,7 @@ export struct Card6Component { | @@ -64,7 +67,7 @@ export struct Card6Component { | ||
| 64 | 67 | ||
| 65 | Stack() { | 68 | Stack() { |
| 66 | Image(this.loadImg ? this.contentDTO.coverUrl : '') | 69 | Image(this.loadImg ? this.contentDTO.coverUrl : '') |
| 67 | - .backgroundColor( this.loadImg ? $r('app.color.color_B0B0B0') : 0xf5f5f5) | 70 | + .backgroundColor(this.loadImg ? $r('app.color.color_B0B0B0') : 0xf5f5f5) |
| 68 | .borderRadius(5) | 71 | .borderRadius(5) |
| 69 | .aspectRatio(this.contentDTO.appStyle === CompStyle.Card_13 ? 3 / 2 : 3 / 4) | 72 | .aspectRatio(this.contentDTO.appStyle === CompStyle.Card_13 ? 3 / 2 : 3 / 4) |
| 70 | .height(this.contentDTO.appStyle === CompStyle.Card_13 ? 90 : 180) | 73 | .height(this.contentDTO.appStyle === CompStyle.Card_13 ? 90 : 180) |
| @@ -136,13 +136,13 @@ export struct Card9Component { | @@ -136,13 +136,13 @@ export struct Card9Component { | ||
| 136 | .textOverflow({ overflow: TextOverflow.Ellipsis }) | 136 | .textOverflow({ overflow: TextOverflow.Ellipsis }) |
| 137 | .alignSelf(ItemAlign.Center) | 137 | .alignSelf(ItemAlign.Center) |
| 138 | .margin({ left: 12 }) | 138 | .margin({ left: 12 }) |
| 139 | - if (item.fullColumnImgUrls[0] && item.fullColumnImgUrls[0].url) { | ||
| 140 | - Image(this.loadImg? item.fullColumnImgUrls[0].url : '') | ||
| 141 | - .backgroundColor(0xf5f5f5) | ||
| 142 | - .width(90) | ||
| 143 | - .height(60) | ||
| 144 | - .borderRadius($r('app.float.image_border_radius')) | ||
| 145 | - } | 139 | + // if (item.fullColumnImgUrls[0] && item.fullColumnImgUrls[0].url) { |
| 140 | + // Image(this.loadImg? item.fullColumnImgUrls[0].url : '') | ||
| 141 | + // .backgroundColor(0xf5f5f5) | ||
| 142 | + // .width(90) | ||
| 143 | + // .height(60) | ||
| 144 | + // .borderRadius($r('app.float.image_border_radius')) | ||
| 145 | + // } | ||
| 146 | } | 146 | } |
| 147 | } | 147 | } |
| 148 | } | 148 | } |
| 1 | -import { CompDTO, ContentDTO, Params, Action } from 'wdBean'; | 1 | +import { CompDTO, ContentDTO, Params, Action, ReserveItemBean} from 'wdBean'; |
| 2 | import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'; | 2 | import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'; |
| 3 | import { postInteractAccentionOperateParams } from 'wdBean'; | 3 | import { postInteractAccentionOperateParams } from 'wdBean'; |
| 4 | import { PageRepository } from '../../repository/PageRepository'; | 4 | import { PageRepository } from '../../repository/PageRepository'; |
| @@ -16,11 +16,6 @@ import { SpConstants } from 'wdConstant/Index' | @@ -16,11 +16,6 @@ import { SpConstants } from 'wdConstant/Index' | ||
| 16 | */ | 16 | */ |
| 17 | const TAG = 'Zh_Single_Row-03' | 17 | const TAG = 'Zh_Single_Row-03' |
| 18 | 18 | ||
| 19 | -interface reserveItem { | ||
| 20 | - liveId: number, | ||
| 21 | - relationId: string, | ||
| 22 | - subscribe: boolean | ||
| 23 | -} | ||
| 24 | 19 | ||
| 25 | interface reserveReqItem { | 20 | interface reserveReqItem { |
| 26 | liveId: string, | 21 | liveId: string, |
| @@ -47,14 +42,15 @@ export struct ZhSingleRow03 { | @@ -47,14 +42,15 @@ export struct ZhSingleRow03 { | ||
| 47 | async getReserveState() { | 42 | async getReserveState() { |
| 48 | const reserveBean: reserveReqItem[] = this.compDTO.operDataList.map((item: ContentDTO) => { | 43 | const reserveBean: reserveReqItem[] = this.compDTO.operDataList.map((item: ContentDTO) => { |
| 49 | const reqItem: reserveReqItem = { | 44 | const reqItem: reserveReqItem = { |
| 50 | - liveId: item.objectId, | ||
| 51 | - relationId: item.relId | 45 | + liveId: item.objectId.toString(), |
| 46 | + relationId: item.relId.toString() | ||
| 52 | } | 47 | } |
| 53 | return reqItem; | 48 | return reqItem; |
| 54 | }) | 49 | }) |
| 55 | const res = await LiveModel.getAppointmentStatus(reserveBean); | 50 | const res = await LiveModel.getAppointmentStatus(reserveBean); |
| 56 | // this.reserveStatus = res; | 51 | // this.reserveStatus = res; |
| 57 | - res.map((item: reserveItem) => { | 52 | + Logger.debug(TAG, '数据信息:' + `${JSON.stringify(res)}`) |
| 53 | + res.map((item: ReserveItemBean) => { | ||
| 58 | if (item.subscribe) { | 54 | if (item.subscribe) { |
| 59 | this.reservedIds.push(item.liveId.toString()) | 55 | this.reservedIds.push(item.liveId.toString()) |
| 60 | } | 56 | } |
| @@ -91,7 +91,7 @@ export struct ZhSingleRow06 { | @@ -91,7 +91,7 @@ export struct ZhSingleRow06 { | ||
| 91 | 91 | ||
| 92 | Row() { | 92 | Row() { |
| 93 | Text(DateTimeUtils.getCommentTime(this.compDTO.operDataList[0]?.commentInfo?.publishTime)) | 93 | Text(DateTimeUtils.getCommentTime(this.compDTO.operDataList[0]?.commentInfo?.publishTime)) |
| 94 | - .fontSize(14) | 94 | + .fontSize(12) |
| 95 | .fontColor(0x999999) | 95 | .fontColor(0x999999) |
| 96 | 96 | ||
| 97 | Row(){ | 97 | Row(){ |
| @@ -80,6 +80,7 @@ export struct FollowChildComponent{ | @@ -80,6 +80,7 @@ export struct FollowChildComponent{ | ||
| 80 | } | 80 | } |
| 81 | .justifyContent(FlexAlign.Center) | 81 | .justifyContent(FlexAlign.Center) |
| 82 | .width('100lpx') | 82 | .width('100lpx') |
| 83 | + .backgroundColor($r("app.color.color_F5F5F5")) | ||
| 83 | .height('46lpx') | 84 | .height('46lpx') |
| 84 | .onClick(()=>{ | 85 | .onClick(()=>{ |
| 85 | this.followOperation() | 86 | this.followOperation() |
| @@ -192,6 +193,7 @@ export struct FollowChildComponent{ | @@ -192,6 +193,7 @@ export struct FollowChildComponent{ | ||
| 192 | .fontWeight('500lpx') | 193 | .fontWeight('500lpx') |
| 193 | .lineHeight('35lpx') | 194 | .lineHeight('35lpx') |
| 194 | } | 195 | } |
| 196 | + .backgroundColor($r("app.color.color_F5F5F5")) | ||
| 195 | .justifyContent(FlexAlign.Center) | 197 | .justifyContent(FlexAlign.Center) |
| 196 | .width('100lpx') | 198 | .width('100lpx') |
| 197 | .height('46lpx') | 199 | .height('46lpx') |
| @@ -7,7 +7,6 @@ import { ErrorComponent } from '../view/ErrorComponent' | @@ -7,7 +7,6 @@ import { ErrorComponent } from '../view/ErrorComponent' | ||
| 7 | import RefreshLayout from './RefreshLayout' | 7 | import RefreshLayout from './RefreshLayout' |
| 8 | import { RefreshLayoutBean } from './RefreshLayoutBean'; | 8 | import { RefreshLayoutBean } from './RefreshLayoutBean'; |
| 9 | import { CompDTO, ContentDTO } from 'wdBean' | 9 | import { CompDTO, ContentDTO } from 'wdBean' |
| 10 | -import LoadMoreLayout from './LoadMoreLayout' | ||
| 11 | import NoMoreLayout from './NoMoreLayout' | 10 | import NoMoreLayout from './NoMoreLayout' |
| 12 | import CustomRefreshLoadLayout from './CustomRefreshLoadLayout'; | 11 | import CustomRefreshLoadLayout from './CustomRefreshLoadLayout'; |
| 13 | import { CustomSelectUI } from '../view/CustomSelectUI'; | 12 | import { CustomSelectUI } from '../view/CustomSelectUI'; |
| 1 | -import CustomRefreshLoadLayout from './CustomRefreshLoadLayout'; | ||
| 2 | -import { RefreshLayoutBean } from './RefreshLayoutBean'; | 1 | +import CustomLoadMoreLayout from '../refresh/CustomLoadMoreLayout'; |
| 3 | 2 | ||
| 4 | /** | 3 | /** |
| 5 | * The load more layout component. | 4 | * The load more layout component. |
| 6 | */ | 5 | */ |
| 7 | @Component | 6 | @Component |
| 8 | export default struct LoadMoreLayout { | 7 | export default struct LoadMoreLayout { |
| 9 | - @ObjectLink refreshBean: RefreshLayoutBean; | 8 | + @Prop isVisible: boolean; |
| 10 | 9 | ||
| 11 | build() { | 10 | build() { |
| 12 | Column() { | 11 | Column() { |
| 13 | - if (this.refreshBean.isVisible) { | ||
| 14 | - CustomRefreshLoadLayout({ | ||
| 15 | - refreshBean: new RefreshLayoutBean(this.refreshBean.isVisible, | ||
| 16 | - this.refreshBean.imageSrc, this.refreshBean.textValue, this.refreshBean.heightValue) | ||
| 17 | - }) | ||
| 18 | - } else { | ||
| 19 | - CustomRefreshLoadLayout({ | ||
| 20 | - refreshBean: new RefreshLayoutBean(this.refreshBean.isVisible, | ||
| 21 | - this.refreshBean.imageSrc, this.refreshBean.textValue, 0) | ||
| 22 | - }) | 12 | + if (this.isVisible) { |
| 13 | + CustomLoadMoreLayout() | ||
| 23 | } | 14 | } |
| 24 | } | 15 | } |
| 25 | } | 16 | } |
| @@ -84,10 +84,7 @@ export struct PageComponent { | @@ -84,10 +84,7 @@ export struct PageComponent { | ||
| 84 | // 加载更多 | 84 | // 加载更多 |
| 85 | ListItem() { | 85 | ListItem() { |
| 86 | if (this.pageModel.hasMore) { | 86 | if (this.pageModel.hasMore) { |
| 87 | - // LoadMoreLayout({ | ||
| 88 | - // refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullUpLoad, this.pageModel.pullUpLoadImage, | ||
| 89 | - // this.pageModel.pullUpLoadText, this.pageModel.pullUpLoadHeight) | ||
| 90 | - // }) | 87 | + LoadMoreLayout({ isVisible: this.pageModel.isVisiblePullUpLoad }) |
| 91 | } else if (!this.pageModel.contentNeedScroll) { | 88 | } else if (!this.pageModel.contentNeedScroll) { |
| 92 | PageNoMoreLayout({ noMoreBean: new NoMoreBean(this.pageModel.pageInfo.baselineCopywriting) }) | 89 | PageNoMoreLayout({ noMoreBean: new NoMoreBean(this.pageModel.pageInfo.baselineCopywriting) }) |
| 93 | } | 90 | } |
sight_harmony/features/wdComponent/src/main/ets/components/page/ReserveMorePage.ets
deleted
100644 → 0
| 1 | -import { ContentDTO, ReserveBean } from 'wdBean'; | ||
| 2 | -import { ProcessUtils } from 'wdRouter'; | ||
| 3 | -import { CommonConstants } from 'wdConstant/Index'; | ||
| 4 | -import PageViewModel from '../../viewmodel/PageViewModel'; | ||
| 5 | -import RefreshLayout from '../page/RefreshLayout'; | ||
| 6 | -import { RefreshLayoutBean } from '../page/RefreshLayoutBean'; | ||
| 7 | -import PageModel from '../../viewmodel/PageModel'; | ||
| 8 | -import { LazyDataSource } from 'wdKit/Index'; | ||
| 9 | -import { router } from '@kit.ArkUI'; | ||
| 10 | -import { LiveModel } from '../../viewmodel/LiveModel'; | ||
| 11 | - | ||
| 12 | -const TAG: string = 'ReserveMorePage'; | ||
| 13 | - | ||
| 14 | -/** | ||
| 15 | - * 预约更多: | ||
| 16 | - * type=1 直播 | ||
| 17 | - * type=2 预约 | ||
| 18 | - * 卡片结构:上下结构 | ||
| 19 | - * 卡片宽度:充满父窗口 | ||
| 20 | - * 卡片高度,仅包含横板图片:图片高度由图片的宽度及宽高比决定,图片宽度占父窗口'100%',宽高比为16:9: | ||
| 21 | - */ | ||
| 22 | -@Entry | ||
| 23 | -@Component | ||
| 24 | -struct ReserveMorePage { | ||
| 25 | - @State private pageModel: PageModel = new PageModel(); | ||
| 26 | - @State data: LazyDataSource<ContentDTO> = new LazyDataSource(); | ||
| 27 | - reserveBean: ReserveBean[] = [] | ||
| 28 | - topSafeHeight: number = AppStorage.get<number>('topSafeHeight') as number; | ||
| 29 | - type: number = 2; | ||
| 30 | - currentPage: number = 1; | ||
| 31 | - pageSize: number = 20; | ||
| 32 | - operDataList: ContentDTO[] = []; | ||
| 33 | - title: string = '预约列表' | ||
| 34 | - //是否预约过直播 | ||
| 35 | - @State isAppointmentLive: boolean = false | ||
| 36 | - @State contentDTO: ContentDTO = new ContentDTO() | ||
| 37 | - // appStyle: '15', | ||
| 38 | - // coverType: 1, | ||
| 39 | - // objectType: '9', | ||
| 40 | - // 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', | ||
| 41 | - // fullColumnImgUrls: [ | ||
| 42 | - // { | ||
| 43 | - // landscape: 2, | ||
| 44 | - // size: 1, | ||
| 45 | - // 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', | ||
| 46 | - // weight: 1170 | ||
| 47 | - // } | ||
| 48 | - // ], | ||
| 49 | - // newsTitle: '押解画面公开!被湖北民警从柬埔寨押解回国被湖北民警从柬埔寨押解回国的130名涉赌诈嫌疑人是他们被湖北民警从柬埔寨押解回国的130名涉赌诈嫌疑人是他们的130名涉赌诈嫌疑人是他们', | ||
| 50 | - // publishTime: '1712993333000', | ||
| 51 | - // rmhInfo: { | ||
| 52 | - // authIcon: '', | ||
| 53 | - // authTitle: '', | ||
| 54 | - // authTitle2: '', | ||
| 55 | - // banControl: 0, | ||
| 56 | - // cnIsAttention: 1, | ||
| 57 | - // rmhDesc: '中共武汉市委机关报长江日报官方人民号', | ||
| 58 | - // 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', | ||
| 59 | - // rmhId: '4255270', | ||
| 60 | - // rmhName: '长江日报', | ||
| 61 | - // userId: '513696944662469', | ||
| 62 | - // userType: '3' | ||
| 63 | - // }, | ||
| 64 | - // videoInfo: { | ||
| 65 | - // firstFrameImageUri: '', | ||
| 66 | - // videoDuration: 12, | ||
| 67 | - // // videoLandscape: 2, | ||
| 68 | - // videoUrl: 'https://rmrbcmsonline.peopleapp.com/rb_recsys/video/2024/0413/VL20Z09ISBEKXZU_963672027208609792.mp4' | ||
| 69 | - // }, | ||
| 70 | - // photoNum: '9', | ||
| 71 | - // voiceInfo: { | ||
| 72 | - // voiceDuration: 12 | ||
| 73 | - // } | ||
| 74 | - // } as ContentDTO; | ||
| 75 | - | ||
| 76 | - async aboutToAppear(): Promise<void> { | ||
| 77 | - // PageViewModel.get | ||
| 78 | - | ||
| 79 | - PageViewModel.getLiveMoreUrl(this.type, this.currentPage, this.pageSize).then(async (liveReviewDTO) => { | ||
| 80 | - // this.operDataList = [] | ||
| 81 | - // this.operDataList.push(...liveReviewDTO.list) | ||
| 82 | - this.data.push(...liveReviewDTO.list) | ||
| 83 | - this.reserveBean = this.transformToLiveDetailsBeans(liveReviewDTO.list) | ||
| 84 | - | ||
| 85 | - const apointMentStatus = await LiveModel.getAppointmentStatus(this.reserveBean) | ||
| 86 | - // console.info(`cj2024 ${apointMentStatus.code}`) | ||
| 87 | - }) | ||
| 88 | - | ||
| 89 | - | ||
| 90 | - } | ||
| 91 | - | ||
| 92 | - // 这个函数遍历liveReviewDTO.list并转换为LiveDetailsBean数组 | ||
| 93 | - transformToLiveDetailsBeans(list: ContentDTO[]): ReserveBean[] { | ||
| 94 | - const liveDetailsBeans: ReserveBean[] = []; | ||
| 95 | - list.forEach(item => { | ||
| 96 | - liveDetailsBeans.push({ | ||
| 97 | - relationId: item.relId, | ||
| 98 | - liveId: item.objectId, | ||
| 99 | - }); | ||
| 100 | - }); | ||
| 101 | - return liveDetailsBeans | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - build() { | ||
| 105 | - // Navigation() { | ||
| 106 | - // //滑动区域 | ||
| 107 | - // this.ListLayout() | ||
| 108 | - // } | ||
| 109 | - // .titleMode(NavigationTitleMode.Mini) | ||
| 110 | - // .title('直播列表') | ||
| 111 | - | ||
| 112 | - Column() { | ||
| 113 | - this.TabbarNormal() | ||
| 114 | - Column() { | ||
| 115 | - this.ListLayout() | ||
| 116 | - } | ||
| 117 | - .padding({ | ||
| 118 | - left: $r('app.float.card_comp_pagePadding_lf'), | ||
| 119 | - right: $r('app.float.card_comp_pagePadding_lf'), | ||
| 120 | - bottom: $r('app.float.card_comp_pagePadding_tb') | ||
| 121 | - }) | ||
| 122 | - } | ||
| 123 | - .backgroundColor('#F5F5F5') | ||
| 124 | - | ||
| 125 | - // .onClick((event: ClickEvent) => { | ||
| 126 | - // ProcessUtils.processPage(this.contentDTO) | ||
| 127 | - // }) | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | - @Builder | ||
| 131 | - ListLayout() { | ||
| 132 | - List() { | ||
| 133 | - // 下拉刷新 | ||
| 134 | - ListItem() { | ||
| 135 | - RefreshLayout({ | ||
| 136 | - refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage, | ||
| 137 | - this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight) | ||
| 138 | - }) | ||
| 139 | - } | ||
| 140 | - | ||
| 141 | - LazyForEach(this.data, (contentDTO: ContentDTO, contentIndex: number) => { | ||
| 142 | - ListItem() { | ||
| 143 | - // Column() { | ||
| 144 | - // CompParser({ compDTO: compDTO, compIndex: compIndex }); | ||
| 145 | - // } | ||
| 146 | - this.buildItem(contentDTO) | ||
| 147 | - } | ||
| 148 | - }, | ||
| 149 | - (contentDTO: ContentDTO, contentIndex: number) => contentDTO.pageId + contentIndex.toString() | ||
| 150 | - ) | ||
| 151 | - } | ||
| 152 | - .scrollBar(BarState.Off) | ||
| 153 | - .cachedCount(8) | ||
| 154 | - .height(CommonConstants.FULL_PARENT) | ||
| 155 | - .backgroundColor('#F5F5F5') | ||
| 156 | - .onScrollIndex((start: number, end: number) => { | ||
| 157 | - // Listen to the first index of the current list. | ||
| 158 | - this.pageModel.startIndex = start; | ||
| 159 | - // 包含了 头尾item,判断时需要考虑+2 | ||
| 160 | - this.pageModel.endIndex = end; | ||
| 161 | - }) | ||
| 162 | - } | ||
| 163 | - | ||
| 164 | - /** | ||
| 165 | - * 组件项 | ||
| 166 | - * | ||
| 167 | - * @param programmeBean item 组件项, 上面icon,下面标题 | ||
| 168 | - */ | ||
| 169 | - @Builder | ||
| 170 | - buildItem(item: ContentDTO) { | ||
| 171 | - Column({ space: 8 }) { | ||
| 172 | - Stack() { | ||
| 173 | - Image(item.fullColumnImgUrls[0].url) | ||
| 174 | - .width('100%') | ||
| 175 | - .height(196) | ||
| 176 | - .borderRadius(4) | ||
| 177 | - this.LiveImage() | ||
| 178 | - | ||
| 179 | - } | ||
| 180 | - .alignContent(Alignment.BottomEnd) | ||
| 181 | - | ||
| 182 | - Text(item.newsTitle) | ||
| 183 | - .fontSize(17) | ||
| 184 | - .maxLines(2) | ||
| 185 | - .textOverflow({ overflow: TextOverflow.Ellipsis }) | ||
| 186 | - .margin({ top: 16, left: 12, right: 12 }) | ||
| 187 | - .alignSelf(ItemAlign.Start) | ||
| 188 | - Row() { | ||
| 189 | - Row() { | ||
| 190 | - Image($r('app.media.reserve_play_icon')) | ||
| 191 | - .width(20) | ||
| 192 | - .height(20) | ||
| 193 | - .margin({ left: 10, top: 2, bottom: 2, right: 6 }) | ||
| 194 | - // Text(DateTimeUtils.formatDate(item.liveInfo.liveStartTime, "MM月dd日 HH:mm")) | ||
| 195 | - Text(this.getReserveDate(item.liveInfo.liveStartTime, 1)) | ||
| 196 | - .fontSize(12) | ||
| 197 | - .fontWeight(500) | ||
| 198 | - .fontColor('#ED2800') | ||
| 199 | - .fontFamily('PingFang SC-Medium') | ||
| 200 | - .maxLines(1) | ||
| 201 | - .textOverflow({ overflow: TextOverflow.Ellipsis }) | ||
| 202 | - .margin({ top: 8, bottom: 8 }) | ||
| 203 | - .align(Alignment.Start) | ||
| 204 | - | ||
| 205 | - Image($r('app.media.point_icon')) | ||
| 206 | - .objectFit(ImageFit.Auto) | ||
| 207 | - .interpolation(ImageInterpolation.High) | ||
| 208 | - .width(6) | ||
| 209 | - .height(16) | ||
| 210 | - .margin(2) | ||
| 211 | - | ||
| 212 | - Text(this.getReserveDate(item.liveInfo.liveStartTime, 2)) | ||
| 213 | - .fontSize(12) | ||
| 214 | - .fontWeight(500) | ||
| 215 | - .fontColor('#ED2800') | ||
| 216 | - .fontFamily('PingFang SC-Medium') | ||
| 217 | - .maxLines(1) | ||
| 218 | - .textOverflow({ overflow: TextOverflow.Ellipsis }) | ||
| 219 | - .margin({ top: 8, bottom: 8, right: 10 }) | ||
| 220 | - .align(Alignment.Start) | ||
| 221 | - } | ||
| 222 | - .backgroundColor('#F5F5F5') | ||
| 223 | - .margin(12) | ||
| 224 | - | ||
| 225 | - Flex({ justifyContent: FlexAlign.Center }) { | ||
| 226 | - Text(this.isAppointmentLive ? '已预约' : '预约') | ||
| 227 | - .fontSize(12) | ||
| 228 | - .fontWeight(400) | ||
| 229 | - .fontFamily('PingFang SC-Regular') | ||
| 230 | - .width(52) | ||
| 231 | - .height(24) | ||
| 232 | - .fontColor(Color.White) | ||
| 233 | - .textAlign(TextAlign.Center) | ||
| 234 | - .onClick(() => { | ||
| 235 | - this.liveAppointment(item) | ||
| 236 | - }) | ||
| 237 | - } | ||
| 238 | - .width(52) | ||
| 239 | - .backgroundColor('#ED2800') | ||
| 240 | - .borderRadius(3) | ||
| 241 | - .margin({ right: 12 }) | ||
| 242 | - } | ||
| 243 | - .width('100%') | ||
| 244 | - .justifyContent(FlexAlign.SpaceBetween) | ||
| 245 | - | ||
| 246 | - } | ||
| 247 | - .borderRadius(4) | ||
| 248 | - .backgroundColor(Color.White) | ||
| 249 | - .width('100%') | ||
| 250 | - .margin({ top: 12, bottom: 8 }) | ||
| 251 | - .onClick(() => { | ||
| 252 | - ProcessUtils.processPage(item) | ||
| 253 | - }) | ||
| 254 | - } | ||
| 255 | - | ||
| 256 | - getReserveDate(eventDateTimeString: string, type: number): string { | ||
| 257 | - // 解析事件的日期和时间 | ||
| 258 | - const eventDateTime = new Date(eventDateTimeString); | ||
| 259 | - const currentDateTime = new Date(); | ||
| 260 | - | ||
| 261 | - // 截取事件时间的小时和分钟(假设事件时间是按照24小时制) | ||
| 262 | - const eventHour = eventDateTime.getHours(); | ||
| 263 | - const eventMinutes = eventDateTime.getMinutes(); | ||
| 264 | - const eventTimeStr = `${eventHour}:${eventMinutes.toString().padStart(2, '0')}开始`; // 格式化时间,确保分钟是两位数 | ||
| 265 | - | ||
| 266 | - // 计算时间差 | ||
| 267 | - const timeDifference = eventDateTime.getTime() - currentDateTime.getTime(); | ||
| 268 | - | ||
| 269 | - // 如果事件在24小时内 | ||
| 270 | - if (type === 1) { | ||
| 271 | - if (timeDifference > 0 && timeDifference <= 24 * 60 * 60 * 1000) { | ||
| 272 | - return `今天`; | ||
| 273 | - } else { | ||
| 274 | - // 如果事件不在24小时内 | ||
| 275 | - const month = eventDateTime.getMonth() + 1; // 月份从0开始 | ||
| 276 | - const date = eventDateTime.getDate(); | ||
| 277 | - return `${month}月${date}日`; | ||
| 278 | - } | ||
| 279 | - } else { | ||
| 280 | - return `${eventTimeStr}`; | ||
| 281 | - } | ||
| 282 | - } | ||
| 283 | - | ||
| 284 | - async liveAppointment(item: ContentDTO) { | ||
| 285 | - // this.liveViewModel.liveAppointment( | ||
| 286 | - // this.liveDetailsBean.reLInfo ? this.liveDetailsBean.reLInfo.relId : '', | ||
| 287 | - // this.liveDetailsBean.newsId, | ||
| 288 | - // !this.isAppointmentLive).then( | ||
| 289 | - // (data) => { | ||
| 290 | - // if (data.success) { | ||
| 291 | - // this.isAppointmentLive = !this.isAppointmentLive | ||
| 292 | - // } | ||
| 293 | - // }, | ||
| 294 | - // () => { | ||
| 295 | - // | ||
| 296 | - // }) | ||
| 297 | - const liveDetail = await LiveModel.liveAppointment(item?.relId || '', item?.objectId || '', this.isAppointmentLive || false) | ||
| 298 | - // const liveDetail = await LiveModel.getAppointmentStatus(item?.relId || '', item?.objectId || '', this.isAppointmentLive || false) | ||
| 299 | - } | ||
| 300 | - | ||
| 301 | - /*导航栏*/ | ||
| 302 | - @Builder | ||
| 303 | - TabbarNormal() { | ||
| 304 | - RelativeContainer() { | ||
| 305 | - //标题栏目 | ||
| 306 | - Image($r('app.media.icon_arrow_left')) | ||
| 307 | - .width(24) | ||
| 308 | - .height(24) | ||
| 309 | - .objectFit(ImageFit.Auto) | ||
| 310 | - .id("back_icon") | ||
| 311 | - .alignRules({ | ||
| 312 | - center: { anchor: "__container__", align: VerticalAlign.Center }, | ||
| 313 | - left: { anchor: "__container__", align: HorizontalAlign.Start } | ||
| 314 | - }) | ||
| 315 | - .onClick(() => { | ||
| 316 | - router.back() | ||
| 317 | - }) | ||
| 318 | - | ||
| 319 | - Text(this.title)// .height('42lpx') | ||
| 320 | - .maxLines(1) | ||
| 321 | - .id("title") | ||
| 322 | - .fontSize('35lpx') | ||
| 323 | - .fontWeight(400) | ||
| 324 | - .fontColor($r('app.color.color_222222')) | ||
| 325 | - .lineHeight('42lpx') | ||
| 326 | - .alignRules({ | ||
| 327 | - center: { anchor: "__container__", align: VerticalAlign.Center }, | ||
| 328 | - middle: { anchor: "__container__", align: HorizontalAlign.Center } | ||
| 329 | - }) | ||
| 330 | - } | ||
| 331 | - .backgroundColor('#FFFFFF') | ||
| 332 | - .height(44) | ||
| 333 | - .width('100%') | ||
| 334 | - } | ||
| 335 | - | ||
| 336 | - @Builder | ||
| 337 | - LiveImage() { | ||
| 338 | - Row() { | ||
| 339 | - Image($r('app.media.reserve_icon')) | ||
| 340 | - .width(22) | ||
| 341 | - .height(18) | ||
| 342 | - Text('预约') | ||
| 343 | - .fontSize('11fp') | ||
| 344 | - .fontWeight(400) | ||
| 345 | - .fontColor(Color.White) | ||
| 346 | - } | ||
| 347 | - .backgroundColor('#4D000000') | ||
| 348 | - .margin({ right: 8, bottom: 8 }) | ||
| 349 | - } | ||
| 350 | -} |
| @@ -64,8 +64,6 @@ export struct TopNavigationComponent { | @@ -64,8 +64,6 @@ export struct TopNavigationComponent { | ||
| 64 | @State indicatorLeftMargin: number = 0 | 64 | @State indicatorLeftMargin: number = 0 |
| 65 | @State indicatorWidth: number = 0 | 65 | @State indicatorWidth: number = 0 |
| 66 | private tabsWidth: number = 0 | 66 | private tabsWidth: number = 0 |
| 67 | - //定时器延时处理切换至版面、播报tab时 返回上一个tab | ||
| 68 | - @State tabTimmer: number = 0 | ||
| 69 | // 标识,是否为点击触发的tab切换,临时变量 | 67 | // 标识,是否为点击触发的tab切换,临时变量 |
| 70 | private changeByClick: boolean = false | 68 | private changeByClick: boolean = false |
| 71 | 69 | ||
| @@ -273,11 +271,7 @@ export struct TopNavigationComponent { | @@ -273,11 +271,7 @@ export struct TopNavigationComponent { | ||
| 273 | let width = Number.parseFloat(newValue.width.toString()) | 271 | let width = Number.parseFloat(newValue.width.toString()) |
| 274 | this.tabsWidth = Number.isNaN(width) ? 0 : width | 272 | this.tabsWidth = Number.isNaN(width) ? 0 : width |
| 275 | }) | 273 | }) |
| 276 | - .animationDuration(this.animationDuration) | ||
| 277 | .onChange((index: number) => { | 274 | .onChange((index: number) => { |
| 278 | - if (this.tabTimmer) { | ||
| 279 | - clearTimeout(this.tabTimmer) | ||
| 280 | - } | ||
| 281 | this.currentTopNavName = | 275 | this.currentTopNavName = |
| 282 | this._currentNavIndex === 0 ? this.myChannelList[index].name : this.topNavList[index].name | 276 | this._currentNavIndex === 0 ? this.myChannelList[index].name : this.topNavList[index].name |
| 283 | Logger.info(TAG, `onChange index : ${index}`); | 277 | Logger.info(TAG, `onChange index : ${index}`); |
| @@ -289,13 +283,10 @@ export struct TopNavigationComponent { | @@ -289,13 +283,10 @@ export struct TopNavigationComponent { | ||
| 289 | if (this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index])) { | 283 | if (this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index])) { |
| 290 | // 跳转到播报页面 | 284 | // 跳转到播报页面 |
| 291 | ProcessUtils.gotoBroadcastPage(this.myChannelList[index].pageId) | 285 | ProcessUtils.gotoBroadcastPage(this.myChannelList[index].pageId) |
| 292 | - this.tabTimmer = setTimeout(() => { | ||
| 293 | this.tabsController.changeIndex(this.currentTopNavSelectedIndex) | 286 | this.tabsController.changeIndex(this.currentTopNavSelectedIndex) |
| 294 | - }, 100) | ||
| 295 | } | 287 | } |
| 296 | if (this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index])) { | 288 | if (this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index])) { |
| 297 | ProcessUtils.gotoENewsPaper() | 289 | ProcessUtils.gotoENewsPaper() |
| 298 | - this.tabTimmer = setTimeout(() => { | ||
| 299 | if (!this.changeByClick) { | 290 | if (!this.changeByClick) { |
| 300 | // 识别左滑右滑,跳过版面,到下一个 | 291 | // 识别左滑右滑,跳过版面,到下一个 |
| 301 | let nextIndex = this.currentTopNavSelectedIndex > index ? index - 1 : index + 1 | 292 | let nextIndex = this.currentTopNavSelectedIndex > index ? index - 1 : index + 1 |
| @@ -305,42 +296,41 @@ export struct TopNavigationComponent { | @@ -305,42 +296,41 @@ export struct TopNavigationComponent { | ||
| 305 | // 重置标识 | 296 | // 重置标识 |
| 306 | this.changeByClick = false | 297 | this.changeByClick = false |
| 307 | } | 298 | } |
| 308 | - }, 100) | ||
| 309 | - } | ||
| 310 | - }) | ||
| 311 | - .onAnimationStart((index: number, targetIndex: number, event: TabsAnimationEvent) => { | ||
| 312 | - if (!this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) && | ||
| 313 | - !this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) | ||
| 314 | - ) { | ||
| 315 | - return | ||
| 316 | - } | ||
| 317 | - this.currentTopNavSelectedIndex = targetIndex | ||
| 318 | - // 切换动画开始时触发该回调。下划线跟着页面一起滑动,同时宽度渐变。 | ||
| 319 | - let targetIndexInfo = this.getTextInfo(targetIndex) | ||
| 320 | - this.startAnimateTo(this.animationDuration, targetIndexInfo.left, targetIndexInfo.width) | ||
| 321 | - }) | ||
| 322 | - .onAnimationEnd((index: number, event: TabsAnimationEvent) => { | ||
| 323 | - if (!this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) && | ||
| 324 | - !this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) | ||
| 325 | - ) { | ||
| 326 | - return | ||
| 327 | - } | ||
| 328 | - // 切换动画结束时触发该回调。下划线动画停止。 | ||
| 329 | - let currentIndicatorInfo = this.getCurrentIndicatorInfo(index, event) | ||
| 330 | - this.startAnimateTo(0, currentIndicatorInfo.left, currentIndicatorInfo.width) | ||
| 331 | - }) | ||
| 332 | - .onGestureSwipe((index: number, event: TabsAnimationEvent) => { | ||
| 333 | - if (!this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) && | ||
| 334 | - !this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) | ||
| 335 | - ) { | ||
| 336 | - return | ||
| 337 | } | 299 | } |
| 338 | - // 在页面跟手滑动过程中,逐帧触发该回调。 | ||
| 339 | - let currentIndicatorInfo = this.getCurrentIndicatorInfo(index, event) | ||
| 340 | - this.currentTopNavSelectedIndex = currentIndicatorInfo.index | ||
| 341 | - this.indicatorLeftMargin = currentIndicatorInfo.left | ||
| 342 | - this.indicatorWidth = currentIndicatorInfo.width | ||
| 343 | }) | 300 | }) |
| 301 | + // .onAnimationStart((index: number, targetIndex: number, event: TabsAnimationEvent) => { | ||
| 302 | + // if (!this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) && | ||
| 303 | + // !this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) | ||
| 304 | + // ) { | ||
| 305 | + // return | ||
| 306 | + // } | ||
| 307 | + // this.currentTopNavSelectedIndex = targetIndex | ||
| 308 | + // // 切换动画开始时触发该回调。下划线跟着页面一起滑动,同时宽度渐变。 | ||
| 309 | + // let targetIndexInfo = this.getTextInfo(targetIndex) | ||
| 310 | + // this.startAnimateTo(this.animationDuration, targetIndexInfo.left, targetIndexInfo.width) | ||
| 311 | + // }) | ||
| 312 | + // .onAnimationEnd((index: number, event: TabsAnimationEvent) => { | ||
| 313 | + // if (!this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) && | ||
| 314 | + // !this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) | ||
| 315 | + // ) { | ||
| 316 | + // return | ||
| 317 | + // } | ||
| 318 | + // // 切换动画结束时触发该回调。下划线动画停止。 | ||
| 319 | + // let currentIndicatorInfo = this.getCurrentIndicatorInfo(index, event) | ||
| 320 | + // this.startAnimateTo(0, currentIndicatorInfo.left, currentIndicatorInfo.width) | ||
| 321 | + // }) | ||
| 322 | + // .onGestureSwipe((index: number, event: TabsAnimationEvent) => { | ||
| 323 | + // if (!this.isBroadcast(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) && | ||
| 324 | + // !this.isLayout(this._currentNavIndex === 0 ? this.myChannelList[index] : this.topNavList[index]) | ||
| 325 | + // ) { | ||
| 326 | + // return | ||
| 327 | + // } | ||
| 328 | + // // 在页面跟手滑动过程中,逐帧触发该回调。 | ||
| 329 | + // let currentIndicatorInfo = this.getCurrentIndicatorInfo(index, event) | ||
| 330 | + // this.currentTopNavSelectedIndex = currentIndicatorInfo.index | ||
| 331 | + // this.indicatorLeftMargin = currentIndicatorInfo.left | ||
| 332 | + // this.indicatorWidth = currentIndicatorInfo.width | ||
| 333 | + // }) | ||
| 344 | 334 | ||
| 345 | // 分类列表最右侧频道设置 | 335 | // 分类列表最右侧频道设置 |
| 346 | if (this._currentNavIndex === 0) { | 336 | if (this._currentNavIndex === 0) { |
sight_harmony/features/wdComponent/src/main/ets/components/refresh/CustomLoadMoreLayout.ets
0 → 100644
| 1 | +import lottie, { AnimationItem } from '@ohos/lottie'; | ||
| 2 | +import { Logger } from 'wdKit/Index'; | ||
| 3 | +import { RefreshConstants } from '../../utils/RefreshConstants'; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * Custom layout to show refresh or load. | ||
| 7 | + * Android 24+12+24(top+image+bottom) 高度db | ||
| 8 | + */ | ||
| 9 | +@Component | ||
| 10 | +export default struct CustomLoadMoreLayout { | ||
| 11 | + private mainRenderingSettings: RenderingContextSettings = new RenderingContextSettings(true) | ||
| 12 | + private mainCanvasRenderingContext: CanvasRenderingContext2D = | ||
| 13 | + new CanvasRenderingContext2D(this.mainRenderingSettings) | ||
| 14 | + private animateName: string = "loadMore"; | ||
| 15 | + private animateItem: AnimationItem | null = null; | ||
| 16 | + | ||
| 17 | + build() { | ||
| 18 | + Row() { | ||
| 19 | + Canvas(this.mainCanvasRenderingContext) | ||
| 20 | + .width(14) | ||
| 21 | + .height(14) | ||
| 22 | + .backgroundColor(Color.Transparent) | ||
| 23 | + .onReady(() => { | ||
| 24 | + // 可在此生命回调周期中加载动画,可以保证动画尺寸正确 | ||
| 25 | + //抗锯齿的设置 | ||
| 26 | + this.mainCanvasRenderingContext.imageSmoothingEnabled = true; | ||
| 27 | + this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium' | ||
| 28 | + this.animate() | ||
| 29 | + }) | ||
| 30 | + .onDisAppear(() => { | ||
| 31 | + Logger.error('zzzz','CustomLoadMoreLayout onDisAppear') | ||
| 32 | + lottie.destroy(this.animateName); | ||
| 33 | + }) | ||
| 34 | + | ||
| 35 | + Text('努力加载中') | ||
| 36 | + .margin({ | ||
| 37 | + left: RefreshConstants.RefreshLayout_TEXT_MARGIN_LEFT, | ||
| 38 | + bottom: RefreshConstants.RefreshLayout_TEXT_MARGIN_BOTTOM | ||
| 39 | + }) | ||
| 40 | + .fontSize(14) | ||
| 41 | + .fontColor('#888888') | ||
| 42 | + .textAlign(TextAlign.Center) | ||
| 43 | + } | ||
| 44 | + .clip(true) | ||
| 45 | + .width(RefreshConstants.FULL_WIDTH) | ||
| 46 | + .justifyContent(FlexAlign.Center) | ||
| 47 | + .height(60) | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + animate() { | ||
| 51 | + if (this.animateItem == null) { | ||
| 52 | + this.animateItem = lottie.loadAnimation({ | ||
| 53 | + container: this.mainCanvasRenderingContext, | ||
| 54 | + renderer: 'canvas', // canvas 渲染模式 | ||
| 55 | + loop: 50, | ||
| 56 | + autoplay: true, | ||
| 57 | + name: this.animateName, | ||
| 58 | + path: "lottie/loading_more.json", // 路径加载动画只支持entry/src/main/ets 文件夹下的相对路径 | ||
| 59 | + }) | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | +} |
sight_harmony/features/wdComponent/src/main/ets/components/reserveMore/ReserveMorePage.ets
0 → 100644
| 1 | +import { ContentDTO, ReserveBean, ReserveItemBean } from 'wdBean/Index'; | ||
| 2 | +import { ProcessUtils } from 'wdRouter/Index'; | ||
| 3 | +import PageViewModel from '../../viewmodel/PageViewModel'; | ||
| 4 | +import { Logger, EmitterEventId, EmitterUtils, ToastUtils } from 'wdKit/Index'; | ||
| 5 | +import { router } from '@kit.ArkUI'; | ||
| 6 | +import { LiveModel } from '../../viewmodel/LiveModel'; | ||
| 7 | +import { ViewType } from 'wdConstant/src/main/ets/enum/ViewType'; | ||
| 8 | +import { EmptyComponent } from '../view/EmptyComponent'; | ||
| 9 | +import { ErrorComponent } from '../view/ErrorComponent'; | ||
| 10 | +import { CustomPullToRefresh } from '../reusable/CustomPullToRefresh'; | ||
| 11 | +import { PeopleShipNoMoreData } from '../reusable/PeopleShipNoMoreData'; | ||
| 12 | +import { HttpUtils } from 'wdNetwork/Index'; | ||
| 13 | +import { WDRouterPage, WDRouterRule } from 'wdRouter' | ||
| 14 | +import { LazyDataSource } from 'wdKit/Index'; | ||
| 15 | + | ||
| 16 | +const TAG: string = 'ReserveMorePage'; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * 预约更多: | ||
| 20 | + * type=1 直播 | ||
| 21 | + * type=2 预约 | ||
| 22 | + * 卡片结构:上下结构 | ||
| 23 | + * 卡片宽度:充满父窗口 | ||
| 24 | + * 卡片高度,仅包含横板图片:图片高度由图片的宽度及宽高比决定,图片宽度占父窗口'100%',宽高比为16:9: | ||
| 25 | + */ | ||
| 26 | +@Entry | ||
| 27 | +@Component | ||
| 28 | +struct ReserveMorePage { | ||
| 29 | + @State data: LazyDataSource<ContentDTO> = new LazyDataSource(); | ||
| 30 | + @State reserveList: ReserveItemBean[] = [] | ||
| 31 | + topSafeHeight: number = AppStorage.get<number>('topSafeHeight') as number; | ||
| 32 | + type: number = 2; | ||
| 33 | + pageSize: number = 20; | ||
| 34 | + title: string = '预约列表' | ||
| 35 | + //是否预约过直播 | ||
| 36 | + @State isAppointmentLive: boolean = false | ||
| 37 | + @State contentDTO: ContentDTO = {} as ContentDTO; | ||
| 38 | + @State private hasMore: boolean = true | ||
| 39 | + @State private currentPage: number = 1 | ||
| 40 | + @State private isLoading: boolean = false | ||
| 41 | + @State viewType: ViewType = ViewType.LOADING | ||
| 42 | + private scroller: Scroller = new Scroller() | ||
| 43 | + @State reservedIds: string[] = [] | ||
| 44 | + @State isShow: boolean = false | ||
| 45 | + @State private liveId: string = '' | ||
| 46 | + @State isLoadingAttention: boolean = false | ||
| 47 | + | ||
| 48 | + build() { | ||
| 49 | + Column(){ | ||
| 50 | + this.TabbarNormal() | ||
| 51 | + if (this.viewType == ViewType.LOADING) { | ||
| 52 | + this.LoadingLayout() | ||
| 53 | + } else if (this.viewType == ViewType.ERROR) { | ||
| 54 | + ErrorComponent() | ||
| 55 | + .onTouch(() => { | ||
| 56 | + if (this.viewType === ViewType.ERROR) { | ||
| 57 | + this.getData() | ||
| 58 | + } | ||
| 59 | + }) | ||
| 60 | + } else if (this.viewType == ViewType.EMPTY) { | ||
| 61 | + EmptyComponent() | ||
| 62 | + } else { | ||
| 63 | + CustomPullToRefresh({ | ||
| 64 | + alldata: this.data, | ||
| 65 | + scroller: this.scroller, | ||
| 66 | + hasMore: false, | ||
| 67 | + customList: () => { | ||
| 68 | + this.ListLayout() | ||
| 69 | + }, | ||
| 70 | + onRefresh: (resolve) => { | ||
| 71 | + this.currentPage = 1 | ||
| 72 | + this.getData(resolve) | ||
| 73 | + }, | ||
| 74 | + }) | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + }.backgroundColor($r('app.color.color_F5F5F5')) | ||
| 78 | + | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + @Builder | ||
| 82 | + LoadingLayout() { | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + @Builder | ||
| 86 | + ListLayout() { | ||
| 87 | + List({scroller: this.scroller}) { | ||
| 88 | + // 下拉刷新 | ||
| 89 | + LazyForEach(this.data, (contentDTO: ContentDTO, index: number) => { | ||
| 90 | + ListItem() { | ||
| 91 | + this.buildItem(contentDTO, index) | ||
| 92 | + } | ||
| 93 | + }, | ||
| 94 | + (contentDTO: ContentDTO, contentIndex: number) => contentDTO.pageId + contentIndex.toString() | ||
| 95 | + ) | ||
| 96 | + // 加载更多 | ||
| 97 | + ListItem() { | ||
| 98 | + if (!this.hasMore && !this.isLoading) { | ||
| 99 | + PeopleShipNoMoreData() | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + .cachedCount(8) | ||
| 104 | + .edgeEffect(EdgeEffect.None) | ||
| 105 | + .scrollBar(BarState.Off) | ||
| 106 | + .backgroundColor('#F5F5F5') | ||
| 107 | + .layoutWeight(1) | ||
| 108 | + .onReachEnd(() => { | ||
| 109 | + Logger.debug(TAG, "触底了"); | ||
| 110 | + if(!this.isLoading && this.hasMore){ | ||
| 111 | + //加载分页数据 | ||
| 112 | + this.currentPage++; | ||
| 113 | + this.getData() | ||
| 114 | + } | ||
| 115 | + }) | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + /** | ||
| 119 | + * 组件项 | ||
| 120 | + * | ||
| 121 | + * @param programmeBean item 组件项, 上面icon,下面标题 | ||
| 122 | + */ | ||
| 123 | + @Builder | ||
| 124 | + buildItem(item: ContentDTO, index: number) { | ||
| 125 | + Column() { | ||
| 126 | + Stack() { | ||
| 127 | + Image(item.fullColumnImgUrls[0].url) | ||
| 128 | + .width('100%') | ||
| 129 | + .height(196) | ||
| 130 | + .borderRadius(4) | ||
| 131 | + this.LiveImage() | ||
| 132 | + | ||
| 133 | + } | ||
| 134 | + .alignContent(Alignment.BottomEnd) | ||
| 135 | + | ||
| 136 | + Text(item.newsTitle) | ||
| 137 | + .fontSize(17) | ||
| 138 | + .maxLines(2) | ||
| 139 | + .textOverflow({ overflow: TextOverflow.Ellipsis }) | ||
| 140 | + .margin({ top: 16, left: 12, right: 12 }) | ||
| 141 | + .alignSelf(ItemAlign.Start) | ||
| 142 | + Row() { | ||
| 143 | + Row() { | ||
| 144 | + Image($r('app.media.reserve_play_icon')) | ||
| 145 | + .width(20) | ||
| 146 | + .height(20) | ||
| 147 | + .margin({ left: 10, top: 2, bottom: 2, right: 6 }) | ||
| 148 | + // Text(DateTimeUtils.formatDate(item.liveInfo.liveStartTime, "MM月dd日 HH:mm")) | ||
| 149 | + Text(this.getReserveDate(item.liveInfo.liveStartTime, 1)) | ||
| 150 | + .fontSize(12) | ||
| 151 | + .fontWeight(500) | ||
| 152 | + .fontColor('#ED2800') | ||
| 153 | + .fontFamily('PingFang SC-Medium') | ||
| 154 | + .maxLines(1) | ||
| 155 | + .textOverflow({ overflow: TextOverflow.Ellipsis }) | ||
| 156 | + .margin({ top: 8, bottom: 8 }) | ||
| 157 | + .align(Alignment.Start) | ||
| 158 | + | ||
| 159 | + Image($r('app.media.point_icon')) | ||
| 160 | + .objectFit(ImageFit.Auto) | ||
| 161 | + .interpolation(ImageInterpolation.High) | ||
| 162 | + .width(6) | ||
| 163 | + .height(16) | ||
| 164 | + .margin(2) | ||
| 165 | + | ||
| 166 | + Text(this.getReserveDate(item.liveInfo.liveStartTime, 2)) | ||
| 167 | + .fontSize(12) | ||
| 168 | + .fontWeight(500) | ||
| 169 | + .fontColor('#ED2800') | ||
| 170 | + .fontFamily('PingFang SC-Medium') | ||
| 171 | + .maxLines(1) | ||
| 172 | + .textOverflow({ overflow: TextOverflow.Ellipsis }) | ||
| 173 | + .margin({ top: 8, bottom: 8, right: 10 }) | ||
| 174 | + .align(Alignment.Start) | ||
| 175 | + } | ||
| 176 | + .backgroundColor('#F5F5F5') | ||
| 177 | + .margin(12) | ||
| 178 | + | ||
| 179 | + // Flex({ justifyContent: FlexAlign.Center }) { | ||
| 180 | + // Text(this.isAppointmentLive ? '已预约' : '预约') | ||
| 181 | + // .fontSize(12) | ||
| 182 | + // .fontWeight(400) | ||
| 183 | + // .fontFamily('PingFang SC-Regular') | ||
| 184 | + // .width(52) | ||
| 185 | + // .height(24) | ||
| 186 | + // .fontColor(Color.White) | ||
| 187 | + // .textAlign(TextAlign.Center) | ||
| 188 | + // .onClick(() => { | ||
| 189 | + // this.liveAppointment(item) | ||
| 190 | + // }) | ||
| 191 | + // } | ||
| 192 | + // .width(52) | ||
| 193 | + // .backgroundColor('#ED2800') | ||
| 194 | + // .borderRadius(3) | ||
| 195 | + // ReserveMoreAttentionComponent({reserveItem: this.getAttentionItem(item), }) | ||
| 196 | + // .margin({ right: 12 }) | ||
| 197 | + Row() { | ||
| 198 | + LoadingProgress() | ||
| 199 | + .width(20) | ||
| 200 | + .height(20) | ||
| 201 | + .color(!this.isReserved(item) ? $r('app.color.color_fff') : $r('app.color.color_CCCCCC')) | ||
| 202 | + .visibility((this.isLoadingAttention && this.liveId == item.objectId) ? Visibility.Visible : Visibility.None) | ||
| 203 | + | ||
| 204 | + Text(!this.isReserved(item) ? '关注' : '已关注') | ||
| 205 | + .fontSize($r('app.float.vp_12')) | ||
| 206 | + .fontWeight(500) | ||
| 207 | + .fontColor(!this.isReserved(item) ? $r('app.color.color_fff') : $r('app.color.color_CCCCCC')) | ||
| 208 | + .width('100%') | ||
| 209 | + .height('100%') | ||
| 210 | + .textAlign(TextAlign.Center) | ||
| 211 | + .visibility((this.isLoadingAttention && this.liveId == item.objectId) ? Visibility.None : Visibility.Visible) | ||
| 212 | + .margin({ | ||
| 213 | + right: '10vp' | ||
| 214 | + }) | ||
| 215 | + .backgroundColor(!this.isReserved(item) ? $r('app.color.color_ED2800') : $r('app.color.color_F5F5F5')) | ||
| 216 | + .borderRadius(3) | ||
| 217 | + | ||
| 218 | + }.onClick(() => { | ||
| 219 | + this.bookAndCancel(item) | ||
| 220 | + }) | ||
| 221 | + .justifyContent(FlexAlign.Center) | ||
| 222 | + .alignItems(VerticalAlign.Center) | ||
| 223 | + .borderRadius(3) | ||
| 224 | + .width('52vp') | ||
| 225 | + .height('24vp') | ||
| 226 | + .margin({right: 12}) | ||
| 227 | + | ||
| 228 | + } | ||
| 229 | + .width('100%') | ||
| 230 | + .justifyContent(FlexAlign.SpaceBetween) | ||
| 231 | + | ||
| 232 | + } | ||
| 233 | + .borderRadius(4) | ||
| 234 | + .backgroundColor(Color.White) | ||
| 235 | + .width('calc(100% - 24vp)') | ||
| 236 | + .margin({ | ||
| 237 | + left: '12vp', | ||
| 238 | + right: '12vp', | ||
| 239 | + top: index == 0 ? '12vp' : '8vp' | ||
| 240 | + }) | ||
| 241 | + .onClick(() => { | ||
| 242 | + ProcessUtils.processPage(item) | ||
| 243 | + }) | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + /*导航栏*/ | ||
| 247 | + @Builder | ||
| 248 | + TabbarNormal() { | ||
| 249 | + RelativeContainer() { | ||
| 250 | + //标题栏目 | ||
| 251 | + Image($r('app.media.icon_arrow_left')) | ||
| 252 | + .width(24) | ||
| 253 | + .height(24) | ||
| 254 | + .objectFit(ImageFit.Auto) | ||
| 255 | + .id("back_icon") | ||
| 256 | + .alignRules({ | ||
| 257 | + center: { anchor: "__container__", align: VerticalAlign.Center }, | ||
| 258 | + left: { anchor: "__container__", align: HorizontalAlign.Start } | ||
| 259 | + }) | ||
| 260 | + .onClick(() => { | ||
| 261 | + router.back() | ||
| 262 | + }) | ||
| 263 | + | ||
| 264 | + Text(this.title)// .height('42lpx') | ||
| 265 | + .maxLines(1) | ||
| 266 | + .id("title") | ||
| 267 | + .fontSize('35lpx') | ||
| 268 | + .fontWeight(400) | ||
| 269 | + .fontColor($r('app.color.color_222222')) | ||
| 270 | + .lineHeight('42lpx') | ||
| 271 | + .alignRules({ | ||
| 272 | + center: { anchor: "__container__", align: VerticalAlign.Center }, | ||
| 273 | + middle: { anchor: "__container__", align: HorizontalAlign.Center } | ||
| 274 | + }) | ||
| 275 | + } | ||
| 276 | + .backgroundColor('#FFFFFF') | ||
| 277 | + .height(44) | ||
| 278 | + .width('100%') | ||
| 279 | + } | ||
| 280 | + | ||
| 281 | + @Builder | ||
| 282 | + LiveImage() { | ||
| 283 | + Row() { | ||
| 284 | + Image($r('app.media.reserve_icon')) | ||
| 285 | + .width(22) | ||
| 286 | + .height(18) | ||
| 287 | + Text('预约') | ||
| 288 | + .fontSize('11fp') | ||
| 289 | + .fontWeight(400) | ||
| 290 | + .fontColor(Color.White) | ||
| 291 | + } | ||
| 292 | + .backgroundColor('#4D000000') | ||
| 293 | + .margin({ right: 8, bottom: 8 }) | ||
| 294 | + } | ||
| 295 | + | ||
| 296 | + async aboutToAppear(): Promise<void> { | ||
| 297 | + // PageViewModel.get | ||
| 298 | + this.currentPage = 1 | ||
| 299 | + this.getData() | ||
| 300 | + // 登录成功 | ||
| 301 | + EmitterUtils.receiveEvent(EmitterEventId.LOGIN_SUCCESS, () => { | ||
| 302 | + this.currentPage = 1 | ||
| 303 | + this.getData() | ||
| 304 | + }) | ||
| 305 | + | ||
| 306 | + // 获取预约 | ||
| 307 | + EmitterUtils.receiveEvent(EmitterEventId.LIVE_ROOM_SUBSCRIBE, (str?: string) => { | ||
| 308 | + Logger.debug(TAG, 'receiveEvent LIVE_ROOM_SUBSCRIBE: ' + str) | ||
| 309 | + if (str) { | ||
| 310 | + // 跳转指定频道场景,传参底导id、频道id | ||
| 311 | + const model: ReserveItemBean = JSON.parse(str) | ||
| 312 | + Logger.debug(TAG,'是否关注元数据0:' +` ${model.liveId}`) | ||
| 313 | + if (model && model.liveId && this.reserveList) { | ||
| 314 | + // 修改源数据 | ||
| 315 | + this.reserveList.forEach((element) => { | ||
| 316 | + if (element.liveId == model.liveId) { | ||
| 317 | + if (element && element.subscribe != model.subscribe) { | ||
| 318 | + Logger.debug(TAG,'是否关注元数据2:' +` ${JSON.stringify(element.subscribe)}`) | ||
| 319 | + element.subscribe = !element.subscribe | ||
| 320 | + Logger.debug(TAG,'是否关注元数据3:' +` ${JSON.stringify(element.subscribe)}`) | ||
| 321 | + this.data.reloadData() | ||
| 322 | + this.isShow = true | ||
| 323 | + } | ||
| 324 | + } | ||
| 325 | + }) | ||
| 326 | + } | ||
| 327 | + } | ||
| 328 | + }) | ||
| 329 | + } | ||
| 330 | + | ||
| 331 | + onPageShow(): void { | ||
| 332 | + if (this.isShow) { | ||
| 333 | + this.data.reloadData() | ||
| 334 | + this.isShow = false | ||
| 335 | + } | ||
| 336 | + } | ||
| 337 | + | ||
| 338 | + private async getData(resolve?: (value: string | PromiseLike<string>) => void) { | ||
| 339 | + if (this.isLoading) { | ||
| 340 | + if (resolve) { | ||
| 341 | + resolve('已更新至最新') | ||
| 342 | + } | ||
| 343 | + return | ||
| 344 | + } | ||
| 345 | + this.isLoading = true | ||
| 346 | + try { | ||
| 347 | + const liveReviewDTO = await PageViewModel.getLiveMoreUrl(this.type, this.currentPage, this.pageSize) | ||
| 348 | + | ||
| 349 | + if (liveReviewDTO && liveReviewDTO.list && liveReviewDTO.list.length > 0) { | ||
| 350 | + if (liveReviewDTO.list.length === this.pageSize) { | ||
| 351 | + this.hasMore = true; | ||
| 352 | + } else { | ||
| 353 | + this.hasMore = false; | ||
| 354 | + } | ||
| 355 | + if (this.currentPage == 1) { | ||
| 356 | + this.data.clear() | ||
| 357 | + this.reserveList = [] | ||
| 358 | + } | ||
| 359 | + this.data.push(...liveReviewDTO.list) | ||
| 360 | + //批量查询关注状态 | ||
| 361 | + this.getAppointmentInfo(liveReviewDTO.list) | ||
| 362 | + } else { | ||
| 363 | + this.hasMore = false; | ||
| 364 | + } | ||
| 365 | + this.resolveEnd(true, resolve) | ||
| 366 | + if (liveReviewDTO.list.length == 0 && this.currentPage == 1) { | ||
| 367 | + this.viewType = ViewType.EMPTY | ||
| 368 | + } | ||
| 369 | + }catch (exception) { | ||
| 370 | + this.resolveEnd(false, resolve) | ||
| 371 | + } | ||
| 372 | + // PageViewModel.getLiveMoreUrl(this.type, this.currentPage, this.pageSize).then(async (liveReviewDTO) => { | ||
| 373 | + // // this.operDataList = [] | ||
| 374 | + // // this.operDataList.push(...liveReviewDTO.list) | ||
| 375 | + // this.data.push(...liveReviewDTO.list) | ||
| 376 | + // | ||
| 377 | + // // this.getAppointmentInfo() | ||
| 378 | + // }) | ||
| 379 | + } | ||
| 380 | + | ||
| 381 | + private resolveEnd(isTop: boolean, resolve?: (value: string | PromiseLike<string>) => void) { | ||
| 382 | + if (resolve) { | ||
| 383 | + if (this.currentPage == 1 && isTop) { | ||
| 384 | + resolve('已更新至最新') | ||
| 385 | + }else { | ||
| 386 | + resolve('') | ||
| 387 | + } | ||
| 388 | + } | ||
| 389 | + if (this.currentPage == 1 && !isTop) { | ||
| 390 | + this.viewType = ViewType.ERROR | ||
| 391 | + } else { | ||
| 392 | + this.viewType = ViewType.LOADED | ||
| 393 | + } | ||
| 394 | + this.isLoading = false | ||
| 395 | + } | ||
| 396 | + | ||
| 397 | + async getAppointmentInfo(list: ContentDTO[]) { | ||
| 398 | + if (HttpUtils.getUserId()) { | ||
| 399 | + const reserveBean = this.transformToLiveDetailsBeans(list) | ||
| 400 | + Logger.debug(TAG,'是否预约数据:' +` ${JSON.stringify(reserveBean)}`) | ||
| 401 | + LiveModel.getAppointmentStatus(reserveBean).then((result) => { | ||
| 402 | + Logger.debug(TAG,'是否预约数据:' +` ${JSON.stringify(result)}`) | ||
| 403 | + if (result && result.length > 0) { | ||
| 404 | + this.reserveList.push(...result) | ||
| 405 | + this.data.reloadData() | ||
| 406 | + } | ||
| 407 | + }).catch(() =>{ | ||
| 408 | + // this.data.push(...list) | ||
| 409 | + }) | ||
| 410 | + }else { | ||
| 411 | + // this.data.push(...list) | ||
| 412 | + | ||
| 413 | + } | ||
| 414 | + } | ||
| 415 | + | ||
| 416 | + // 判断是否预约 | ||
| 417 | + isReserved(item: ContentDTO) { | ||
| 418 | + const objc = this.getAttentionItem(item) | ||
| 419 | + if (objc) { | ||
| 420 | + return objc.subscribe | ||
| 421 | + } | ||
| 422 | + return false | ||
| 423 | + } | ||
| 424 | + | ||
| 425 | + getAttentionItem(item: ContentDTO) { | ||
| 426 | + const objc = this.reserveList.find((element: ReserveItemBean) => { | ||
| 427 | + return element.liveId.toString() == item.objectId | ||
| 428 | + }) | ||
| 429 | + return objc | ||
| 430 | + } | ||
| 431 | + | ||
| 432 | + // 这个函数遍历liveReviewDTO.list并转换为LiveDetailsBean数组 | ||
| 433 | + transformToLiveDetailsBeans(list: ContentDTO[]): ReserveBean[] { | ||
| 434 | + const liveDetailsBeans: ReserveBean[] = []; | ||
| 435 | + list.forEach(item => { | ||
| 436 | + liveDetailsBeans.push({ | ||
| 437 | + relationId: item.relId, | ||
| 438 | + liveId: item.objectId, | ||
| 439 | + }); | ||
| 440 | + }); | ||
| 441 | + return liveDetailsBeans | ||
| 442 | + } | ||
| 443 | + | ||
| 444 | + // 预约/取消预约 | ||
| 445 | + async bookAndCancel(item: ContentDTO) { | ||
| 446 | + | ||
| 447 | + // 未登录,跳转登录 | ||
| 448 | + if (!HttpUtils.getUserId()) { | ||
| 449 | + WDRouterRule.jumpWithPage(WDRouterPage.loginPage) | ||
| 450 | + return | ||
| 451 | + } | ||
| 452 | + if (!this.isLoadingAttention && this.liveId.length == 0) { | ||
| 453 | + this.isLoadingAttention = true | ||
| 454 | + this.liveId = item.objectId | ||
| 455 | + const reserveItem = this.getAttentionItem(item) | ||
| 456 | + if (reserveItem) { | ||
| 457 | + this.isLoadingAttention = true | ||
| 458 | + this.liveId = reserveItem.liveId.toString() | ||
| 459 | + try { | ||
| 460 | + const res = await LiveModel.liveAppointment(reserveItem.relationId, reserveItem.liveId.toString(), !reserveItem.subscribe); | ||
| 461 | + if (res.code == 0) { | ||
| 462 | + ToastUtils.shortToast(!reserveItem.subscribe ? '预约成功' : '取消预约成功') | ||
| 463 | + // 修改源数据 | ||
| 464 | + this.reserveList.forEach((element) => { | ||
| 465 | + if (element.liveId.toString() == item.objectId) { | ||
| 466 | + Logger.debug(TAG,'是否关注元数据:' +` ${JSON.stringify(element.subscribe)}`) | ||
| 467 | + element.subscribe = !element.subscribe | ||
| 468 | + Logger.debug(TAG,'是否关注元数据1:' +` ${JSON.stringify(element.subscribe)}`) | ||
| 469 | + this.data.reloadData() | ||
| 470 | + } | ||
| 471 | + }) | ||
| 472 | + } | ||
| 473 | + this.isLoadingAttention = false | ||
| 474 | + this.liveId = '' | ||
| 475 | + } catch (e) { | ||
| 476 | + this.liveId = '' | ||
| 477 | + this.isLoadingAttention = false | ||
| 478 | + } | ||
| 479 | + }else { | ||
| 480 | + this.liveId = '' | ||
| 481 | + this.isLoadingAttention = false | ||
| 482 | + } | ||
| 483 | + } | ||
| 484 | + } | ||
| 485 | + | ||
| 486 | + getReserveDate(eventDateTimeString: string, type: number): string { | ||
| 487 | + // 解析事件的日期和时间 | ||
| 488 | + const eventDateTime = new Date(eventDateTimeString); | ||
| 489 | + const currentDateTime = new Date(); | ||
| 490 | + | ||
| 491 | + // 截取事件时间的小时和分钟(假设事件时间是按照24小时制) | ||
| 492 | + const eventHour = eventDateTime.getHours(); | ||
| 493 | + const eventMinutes = eventDateTime.getMinutes(); | ||
| 494 | + const eventTimeStr = `${eventHour}:${eventMinutes.toString().padStart(2, '0')}开始`; // 格式化时间,确保分钟是两位数 | ||
| 495 | + | ||
| 496 | + // 计算时间差 | ||
| 497 | + const timeDifference = eventDateTime.getTime() - currentDateTime.getTime(); | ||
| 498 | + | ||
| 499 | + // 如果事件在24小时内 | ||
| 500 | + if (type === 1) { | ||
| 501 | + if (timeDifference > 0 && timeDifference <= 24 * 60 * 60 * 1000) { | ||
| 502 | + return `今天`; | ||
| 503 | + } else { | ||
| 504 | + // 如果事件不在24小时内 | ||
| 505 | + const month = eventDateTime.getMonth() + 1; // 月份从0开始 | ||
| 506 | + const date = eventDateTime.getDate(); | ||
| 507 | + return `${month}月${date}日`; | ||
| 508 | + } | ||
| 509 | + } else { | ||
| 510 | + return `${eventTimeStr}`; | ||
| 511 | + } | ||
| 512 | + } | ||
| 513 | + | ||
| 514 | + async liveAppointment(item: ContentDTO) { | ||
| 515 | + const liveDetail = await LiveModel.liveAppointment(item?.relId || '', item?.objectId || '', this.isAppointmentLive || false) | ||
| 516 | + } | ||
| 517 | + | ||
| 518 | + | ||
| 519 | +} |
| 1 | import { PullToRefresh, PullToRefreshConfigurator } from '@ohos/pulltorefresh'; | 1 | import { PullToRefresh, PullToRefreshConfigurator } from '@ohos/pulltorefresh'; |
| 2 | +import { LazyDataSource } from 'wdKit'; | ||
| 2 | 3 | ||
| 3 | @Component | 4 | @Component |
| 4 | export struct CustomPullToRefresh { | 5 | export struct CustomPullToRefresh { |
| 5 | - @Link alldata: Object[]; | 6 | + @Link alldata: Object[] | LazyDataSource<Object>; |
| 6 | scroller: Scroller = new Scroller(); | 7 | scroller: Scroller = new Scroller(); |
| 7 | @BuilderParam customList: () => void; | 8 | @BuilderParam customList: () => void; |
| 8 | onRefresh: (resolve?: (value: string | PromiseLike<string>) => void) => void = () => { | 9 | onRefresh: (resolve?: (value: string | PromiseLike<string>) => void) => void = () => { |
| @@ -15,7 +16,7 @@ export struct CustomPullToRefresh { | @@ -15,7 +16,7 @@ export struct CustomPullToRefresh { | ||
| 15 | build() { | 16 | build() { |
| 16 | Column(){ | 17 | Column(){ |
| 17 | PullToRefresh({ | 18 | PullToRefresh({ |
| 18 | - data:this.alldata, | 19 | + data:$alldata, |
| 19 | scroller:this.scroller, | 20 | scroller:this.scroller, |
| 20 | refreshConfigurator:this.refreshConfigurator, | 21 | refreshConfigurator:this.refreshConfigurator, |
| 21 | customList:()=>{ | 22 | customList:()=>{ |
| @@ -268,8 +268,8 @@ struct MineHomePage { | @@ -268,8 +268,8 @@ struct MineHomePage { | ||
| 268 | .height('42lpx') | 268 | .height('42lpx') |
| 269 | .maxLines(1) | 269 | .maxLines(1) |
| 270 | .id("rightText") | 270 | .id("rightText") |
| 271 | - .fontSize('35lpx') | ||
| 272 | - .fontWeight('400lpx') | 271 | + .fontSize('31lpx') |
| 272 | + .fontWeight(400) | ||
| 273 | .fontColor($r('app.color.white') ) | 273 | .fontColor($r('app.color.white') ) |
| 274 | .lineHeight('42lpx') | 274 | .lineHeight('42lpx') |
| 275 | .alignRules({ | 275 | .alignRules({ |
| @@ -324,10 +324,10 @@ struct MineHomePage { | @@ -324,10 +324,10 @@ struct MineHomePage { | ||
| 324 | .height('42lpx') | 324 | .height('42lpx') |
| 325 | .maxLines(1) | 325 | .maxLines(1) |
| 326 | .id("title") | 326 | .id("title") |
| 327 | - .fontSize('35lpx') | ||
| 328 | - .fontWeight('400lpx') | 327 | + .fontSize('27lpx') |
| 328 | + .fontWeight(400) | ||
| 329 | .fontColor($r('app.color.color_222222')) | 329 | .fontColor($r('app.color.color_222222')) |
| 330 | - .lineHeight('42lpx') | 330 | + .lineHeight('31lpx') |
| 331 | .alignRules({ | 331 | .alignRules({ |
| 332 | center: { anchor: "__container__", align: VerticalAlign.Center }, | 332 | center: { anchor: "__container__", align: VerticalAlign.Center }, |
| 333 | left: { anchor: "head_icon", align: HorizontalAlign.End } | 333 | left: { anchor: "head_icon", align: HorizontalAlign.End } |
| @@ -338,8 +338,8 @@ struct MineHomePage { | @@ -338,8 +338,8 @@ struct MineHomePage { | ||
| 338 | .height('42lpx') | 338 | .height('42lpx') |
| 339 | .maxLines(1) | 339 | .maxLines(1) |
| 340 | .id("rightText") | 340 | .id("rightText") |
| 341 | - .fontSize('35lpx') | ||
| 342 | - .fontWeight('400lpx') | 341 | + .fontSize('31lpx') |
| 342 | + .fontWeight(400) | ||
| 343 | .fontColor($r('app.color.color_222222')) | 343 | .fontColor($r('app.color.color_222222')) |
| 344 | .lineHeight('42lpx') | 344 | .lineHeight('42lpx') |
| 345 | .alignRules({ | 345 | .alignRules({ |
| 1 | import { HttpUrlUtils, ResponseDTO } from 'wdNetwork'; | 1 | import { HttpUrlUtils, ResponseDTO } from 'wdNetwork'; |
| 2 | import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest'; | 2 | import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest'; |
| 3 | -import { Logger, ToastUtils } from 'wdKit'; | ||
| 4 | -import { LiveDetailsBean, ReserveBean } from 'wdBean/Index'; | 3 | +import { Logger, ToastUtils, EmitterEventId, EmitterUtils } from 'wdKit'; |
| 4 | +import { LiveDetailsBean, ReserveBean, ReserveItemBean } from 'wdBean/Index'; | ||
| 5 | 5 | ||
| 6 | const TAG = 'LiveModel' | 6 | const TAG = 'LiveModel' |
| 7 | 7 | ||
| 8 | -interface ReserveRes { | ||
| 9 | - code: string | number, | ||
| 10 | - data: ReserveItem[] | ||
| 11 | -} | ||
| 12 | 8 | ||
| 13 | -interface ReserveItem { | ||
| 14 | - liveId: number, | ||
| 15 | - relationId: string, | ||
| 16 | - subscribe: boolean | ||
| 17 | -} | 9 | + |
| 18 | 10 | ||
| 19 | export class LiveModel { | 11 | export class LiveModel { |
| 20 | /** | 12 | /** |
| @@ -70,10 +62,15 @@ export class LiveModel { | @@ -70,10 +62,15 @@ export class LiveModel { | ||
| 70 | ToastUtils.shortToast(data.message) | 62 | ToastUtils.shortToast(data.message) |
| 71 | return | 63 | return |
| 72 | } | 64 | } |
| 65 | + if (data.code == 0) { | ||
| 66 | + const reserveModel = new ReserveItemBean(Number(liveId), relationId, isSubscribe) | ||
| 67 | + EmitterUtils.sendEvent(EmitterEventId.LIVE_ROOM_SUBSCRIBE, JSON.stringify(reserveModel)) | ||
| 68 | + } | ||
| 73 | success(data) | 69 | success(data) |
| 70 | + Logger.info('liveAppointment', JSON.stringify(data)) | ||
| 74 | }, (error: Error) => { | 71 | }, (error: Error) => { |
| 75 | fail(error.message) | 72 | fail(error.message) |
| 76 | - Logger.debug(TAG + ":error ", error.toString()) | 73 | + Logger.debug(TAG + ":error ", JSON.stringify(error)) |
| 77 | }) | 74 | }) |
| 78 | }) | 75 | }) |
| 79 | } | 76 | } |
| @@ -88,11 +85,12 @@ export class LiveModel { | @@ -88,11 +85,12 @@ export class LiveModel { | ||
| 88 | static getAppointmentStatus(reserveBean: ReserveBean[]) { | 85 | static getAppointmentStatus(reserveBean: ReserveBean[]) { |
| 89 | // let params: Record<string, ArrayList<ReserveBean>> = {}; | 86 | // let params: Record<string, ArrayList<ReserveBean>> = {}; |
| 90 | // params = reserveBean | 87 | // params = reserveBean |
| 91 | - return new Promise<Array<ReserveItem>>((success, fail) => { | ||
| 92 | - HttpRequest.post<ResponseDTO<Array<ReserveItem>>>( | 88 | + return new Promise<Array<ReserveItemBean>>((success, fail) => { |
| 89 | + HttpRequest.post<ResponseDTO<Array<ReserveItemBean>>>( | ||
| 93 | HttpUrlUtils.getAppointmentStatusUrl(), | 90 | HttpUrlUtils.getAppointmentStatusUrl(), |
| 94 | reserveBean, | 91 | reserveBean, |
| 95 | - ).then((data: ResponseDTO<Array<ReserveItem>>) => { | 92 | + ).then((data: ResponseDTO<Array<ReserveItemBean>>) => { |
| 93 | + Logger.debug(TAG, 'getAppointmentStatus:' + `${JSON.stringify(data)}`) | ||
| 96 | if (!data || !data.data) { | 94 | if (!data || !data.data) { |
| 97 | fail("数据为空") | 95 | fail("数据为空") |
| 98 | return | 96 | return |
| @@ -103,9 +101,10 @@ export class LiveModel { | @@ -103,9 +101,10 @@ export class LiveModel { | ||
| 103 | return | 101 | return |
| 104 | } | 102 | } |
| 105 | success(data.data) | 103 | success(data.data) |
| 104 | + Logger.info('getAppointmentStatus', JSON.stringify(data.data)) | ||
| 106 | }, (error: Error) => { | 105 | }, (error: Error) => { |
| 107 | fail(error.message) | 106 | fail(error.message) |
| 108 | - Logger.debug(TAG + ":error ", error.toString()) | 107 | + Logger.debug(TAG + ":error ", JSON.stringify(error)) |
| 109 | }) | 108 | }) |
| 110 | }) | 109 | }) |
| 111 | } | 110 | } |
| @@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
| 19 | "components/page/PeopleShipHomePage", | 19 | "components/page/PeopleShipHomePage", |
| 20 | "pages/MultiPictureListPage", | 20 | "pages/MultiPictureListPage", |
| 21 | "components/page/LiveMorePage", | 21 | "components/page/LiveMorePage", |
| 22 | - "components/page/ReserveMorePage", | 22 | + "components/reserveMore/ReserveMorePage", |
| 23 | "pages/VideoPlayPage", | 23 | "pages/VideoPlayPage", |
| 24 | "components/page/ThemeListPage", | 24 | "components/page/ThemeListPage", |
| 25 | "pages/ShowUserHeaderPage", | 25 | "pages/ShowUserHeaderPage", |
| 1 | import { HttpUrlUtils, ResponseDTO } from 'wdNetwork'; | 1 | import { HttpUrlUtils, ResponseDTO } from 'wdNetwork'; |
| 2 | import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest'; | 2 | import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest'; |
| 3 | -import { Logger, ToastUtils } from 'wdKit'; | ||
| 4 | -import { ContentDetailDTO, LiveDetailsBean, LiveRoomBean, LiveRoomDataBean } from 'wdBean/Index'; | 3 | +import { Logger, ToastUtils, EmitterEventId, EmitterUtils } from 'wdKit'; |
| 4 | +import { ContentDetailDTO, LiveDetailsBean, LiveRoomBean, LiveRoomDataBean, ReserveItemBean } from 'wdBean/Index'; | ||
| 5 | import { ContentDetailRequest } from 'wdDetailPlayApi/Index'; | 5 | import { ContentDetailRequest } from 'wdDetailPlayApi/Index'; |
| 6 | 6 | ||
| 7 | const TAG = 'LiveModel' | 7 | const TAG = 'LiveModel' |
| @@ -199,6 +199,10 @@ export class LiveModel { | @@ -199,6 +199,10 @@ export class LiveModel { | ||
| 199 | ToastUtils.shortToast(data.message) | 199 | ToastUtils.shortToast(data.message) |
| 200 | return | 200 | return |
| 201 | } | 201 | } |
| 202 | + if (data.code == 0) { | ||
| 203 | + const reserveModel = new ReserveItemBean(Number(liveId), relationId, isSubscribe) | ||
| 204 | + EmitterUtils.sendEvent(EmitterEventId.LIVE_ROOM_SUBSCRIBE, JSON.stringify(reserveModel)) | ||
| 205 | + } | ||
| 202 | success(data) | 206 | success(data) |
| 203 | }, (error: Error) => { | 207 | }, (error: Error) => { |
| 204 | fail(error.message) | 208 | fail(error.message) |
| @@ -5,7 +5,6 @@ import CustomRefreshLoadLayout from 'wdComponent/src/main/ets/components/page/Cu | @@ -5,7 +5,6 @@ import CustomRefreshLoadLayout from 'wdComponent/src/main/ets/components/page/Cu | ||
| 5 | import { RefreshLayoutBean } from 'wdComponent/src/main/ets/components/page/RefreshLayoutBean' | 5 | import { RefreshLayoutBean } from 'wdComponent/src/main/ets/components/page/RefreshLayoutBean' |
| 6 | import PageModel from 'wdComponent/src/main/ets/viewmodel/PageModel' | 6 | import PageModel from 'wdComponent/src/main/ets/viewmodel/PageModel' |
| 7 | import { ViewType } from 'wdConstant/Index' | 7 | import { ViewType } from 'wdConstant/Index' |
| 8 | -import LoadMoreLayout from 'wdComponent/src/main/ets/components/page/LoadMoreLayout' | ||
| 9 | import RefreshLayout from 'wdComponent/src/main/ets/components/page/RefreshLayout' | 8 | import RefreshLayout from 'wdComponent/src/main/ets/components/page/RefreshLayout' |
| 10 | import { StringUtils } from 'wdKit/Index' | 9 | import { StringUtils } from 'wdKit/Index' |
| 11 | import { LiveViewModel } from '../../viewModel/LiveViewModel' | 10 | import { LiveViewModel } from '../../viewModel/LiveViewModel' |
| @@ -5,7 +5,7 @@ import router from '@ohos.router' | @@ -5,7 +5,7 @@ import router from '@ohos.router' | ||
| 5 | import { WDRouterRule, WDRouterPage } from 'wdRouter'; | 5 | import { WDRouterRule, WDRouterPage } from 'wdRouter'; |
| 6 | import { SettingPasswordParams } from './SettingPasswordLayout' | 6 | import { SettingPasswordParams } from './SettingPasswordLayout' |
| 7 | import { Router } from '@ohos.arkui.UIContext' | 7 | import { Router } from '@ohos.arkui.UIContext' |
| 8 | -import { CustomToast, EmitterEventId, EmitterUtils, NetworkUtil, SPHelper, ToastUtils } from 'wdKit/Index' | 8 | +import { CustomToast, EmitterEventId, EmitterUtils, NetworkUtil, SPHelper, StringUtils, ToastUtils } from 'wdKit/Index' |
| 9 | import { SpConstants } from 'wdConstant/Index' | 9 | import { SpConstants } from 'wdConstant/Index' |
| 10 | import { emitter } from '@kit.BasicServicesKit' | 10 | import { emitter } from '@kit.BasicServicesKit' |
| 11 | 11 | ||
| @@ -23,6 +23,7 @@ struct ForgetPasswordPage { | @@ -23,6 +23,7 @@ struct ForgetPasswordPage { | ||
| 23 | loginViewModel: LoginViewModel = new LoginViewModel() | 23 | loginViewModel: LoginViewModel = new LoginViewModel() |
| 24 | @State @Watch('onCodeSend') isCodeSend: boolean = false //验证码点击发送事件 | 24 | @State @Watch('onCodeSend') isCodeSend: boolean = false //验证码点击发送事件 |
| 25 | pageType:number = (router.getParams() as Record<string, number>)['pageType']; //0、登录->忘记密码 1、设置->重置密码 2、设置->更换手机号页面1 3、设置->更换手机号页面2 | 25 | pageType:number = (router.getParams() as Record<string, number>)['pageType']; //0、登录->忘记密码 1、设置->重置密码 2、设置->更换手机号页面1 3、设置->更换手机号页面2 |
| 26 | + phone:string = (router.getParams() as Record<string, number>)['phone'] + ""; //登录 密码登录 填写手机号 点击忘记密码 带过来手机号 | ||
| 26 | @State pageTitle:string = '找回密码'; | 27 | @State pageTitle:string = '找回密码'; |
| 27 | @State codeStateSuccess:boolean=false | 28 | @State codeStateSuccess:boolean=false |
| 28 | onCodeSend() { | 29 | onCodeSend() { |
| @@ -30,6 +31,7 @@ struct ForgetPasswordPage { | @@ -30,6 +31,7 @@ struct ForgetPasswordPage { | ||
| 30 | this.sendVerifyCode() | 31 | this.sendVerifyCode() |
| 31 | } | 32 | } |
| 32 | } | 33 | } |
| 34 | + | ||
| 33 | @State toastText:string = "" | 35 | @State toastText:string = "" |
| 34 | dialogToast: CustomDialogController = new CustomDialogController({ | 36 | dialogToast: CustomDialogController = new CustomDialogController({ |
| 35 | builder: CustomToast({ | 37 | builder: CustomToast({ |
| @@ -37,8 +39,6 @@ struct ForgetPasswordPage { | @@ -37,8 +39,6 @@ struct ForgetPasswordPage { | ||
| 37 | }), | 39 | }), |
| 38 | autoCancel: false, | 40 | autoCancel: false, |
| 39 | alignment: DialogAlignment.Center, | 41 | alignment: DialogAlignment.Center, |
| 40 | - offset: { dx: 0, dy: -20 }, | ||
| 41 | - gridCount: 1, | ||
| 42 | customStyle: true, | 42 | customStyle: true, |
| 43 | maskColor:"#00000000" | 43 | maskColor:"#00000000" |
| 44 | }) | 44 | }) |
| @@ -93,6 +93,9 @@ struct ForgetPasswordPage { | @@ -93,6 +93,9 @@ struct ForgetPasswordPage { | ||
| 93 | } | 93 | } |
| 94 | if (this.pageType == 0){ | 94 | if (this.pageType == 0){ |
| 95 | this.pageTitle = '找回密码' | 95 | this.pageTitle = '找回密码' |
| 96 | + if(StringUtils.isNotEmpty(this.phone) && this.phone.indexOf("****") === -1){ | ||
| 97 | + this.phoneContent = this.phone | ||
| 98 | + } | ||
| 96 | }else if (this.pageType == 1){ | 99 | }else if (this.pageType == 1){ |
| 97 | this.pageTitle = '验证当前手机号' | 100 | this.pageTitle = '验证当前手机号' |
| 98 | }else if (this.pageType == 2){ | 101 | }else if (this.pageType == 2){ |
| @@ -211,7 +214,6 @@ struct ForgetPasswordPage { | @@ -211,7 +214,6 @@ struct ForgetPasswordPage { | ||
| 211 | } | 214 | } |
| 212 | WDRouterRule.jumpWithReplacePage(WDRouterPage.settingPasswordPage, params) | 215 | WDRouterRule.jumpWithReplacePage(WDRouterPage.settingPasswordPage, params) |
| 213 | 216 | ||
| 214 | - this.showToastTip("校验成功,准备跳转设置页面") | ||
| 215 | Logger.debug(TAG,"校验成功") | 217 | Logger.debug(TAG,"校验成功") |
| 216 | }).catch((error:string)=>{ | 218 | }).catch((error:string)=>{ |
| 217 | this.showToastTip(error) | 219 | this.showToastTip(error) |
| @@ -53,8 +53,6 @@ struct LoginPage { | @@ -53,8 +53,6 @@ struct LoginPage { | ||
| 53 | }), | 53 | }), |
| 54 | autoCancel: false, | 54 | autoCancel: false, |
| 55 | alignment: DialogAlignment.Center, | 55 | alignment: DialogAlignment.Center, |
| 56 | - offset: { dx: 0, dy: -20 }, | ||
| 57 | - gridCount: 1, | ||
| 58 | customStyle: true, | 56 | customStyle: true, |
| 59 | maskColor:"#00000000" | 57 | maskColor:"#00000000" |
| 60 | }) | 58 | }) |
| @@ -167,8 +165,13 @@ struct LoginPage { | @@ -167,8 +165,13 @@ struct LoginPage { | ||
| 167 | Text('忘记密码').fontColor('#666666').fontSize(14).margin({ top: 16 }) | 165 | Text('忘记密码').fontColor('#666666').fontSize(14).margin({ top: 16 }) |
| 168 | .onClick(() => { | 166 | .onClick(() => { |
| 169 | // router.pushUrl({ url: 'pages/login/ForgetPasswordPage' }) | 167 | // router.pushUrl({ url: 'pages/login/ForgetPasswordPage' }) |
| 170 | - let pageType = { 'pageType': 0 } as Record<string, number>; | ||
| 171 | - WDRouterRule.jumpWithPage(WDRouterPage.forgetPasswordPage, pageType) | 168 | + if(StringUtils.isNotEmpty(this.accountContent) && StringUtils.photoMatch(this.accountContent)){ |
| 169 | + let pageType = { 'pageType': 0, 'phone': Number(this.accountContent) } as Record<string, number>; | ||
| 170 | + WDRouterRule.jumpWithPage(WDRouterPage.forgetPasswordPage, pageType) | ||
| 171 | + }else{ | ||
| 172 | + let pageType = { 'pageType': 0 } as Record<string, number>; | ||
| 173 | + WDRouterRule.jumpWithPage(WDRouterPage.forgetPasswordPage, pageType) | ||
| 174 | + } | ||
| 172 | }) | 175 | }) |
| 173 | } | 176 | } |
| 174 | 177 |
| @@ -24,8 +24,6 @@ struct ModifyPasswordPage { | @@ -24,8 +24,6 @@ struct ModifyPasswordPage { | ||
| 24 | }), | 24 | }), |
| 25 | autoCancel: false, | 25 | autoCancel: false, |
| 26 | alignment: DialogAlignment.Center, | 26 | alignment: DialogAlignment.Center, |
| 27 | - offset: { dx: 0, dy: -20 }, | ||
| 28 | - gridCount: 1, | ||
| 29 | customStyle: true, | 27 | customStyle: true, |
| 30 | maskColor:"#00000000" | 28 | maskColor:"#00000000" |
| 31 | }) | 29 | }) |
| @@ -123,7 +121,7 @@ struct ModifyPasswordPage { | @@ -123,7 +121,7 @@ struct ModifyPasswordPage { | ||
| 123 | .alignItems(VerticalAlign.Center) | 121 | .alignItems(VerticalAlign.Center) |
| 124 | 122 | ||
| 125 | Column() { | 123 | Column() { |
| 126 | - Text("提示:密码长度6~20,需大写字母、小写字母、数字、特殊符合中组合三种及三种以上").fontSize(12).maxLines(3).fontColor(0x999999).padding({top:'10lpx'}) | 124 | + Text("提示:密码长度6~20位,使用大写字母、小写字母、数字、特殊字符中三种或三种以上").fontSize(12).maxLines(3).fontColor(0x999999).padding({top:'10lpx'}) |
| 127 | } | 125 | } |
| 128 | .width('100%') | 126 | .width('100%') |
| 129 | .height('85lpx') | 127 | .height('85lpx') |
| @@ -64,8 +64,6 @@ export struct SettingPasswordLayout { | @@ -64,8 +64,6 @@ export struct SettingPasswordLayout { | ||
| 64 | }), | 64 | }), |
| 65 | autoCancel: false, | 65 | autoCancel: false, |
| 66 | alignment: DialogAlignment.Center, | 66 | alignment: DialogAlignment.Center, |
| 67 | - offset: { dx: 0, dy: -20 }, | ||
| 68 | - gridCount: 1, | ||
| 69 | customStyle: true, | 67 | customStyle: true, |
| 70 | maskColor:"#00000000" | 68 | maskColor:"#00000000" |
| 71 | }) | 69 | }) |
| @@ -95,7 +93,7 @@ export struct SettingPasswordLayout { | @@ -95,7 +93,7 @@ export struct SettingPasswordLayout { | ||
| 95 | this.listData.push(new AccoutPageDataModel(0, '设置密码', '', '', '', '', 0)) | 93 | this.listData.push(new AccoutPageDataModel(0, '设置密码', '', '', '', '', 0)) |
| 96 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入密码', 10086)) | 94 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入密码', 10086)) |
| 97 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '再次输入密码', 10087)) | 95 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '再次输入密码', 10087)) |
| 98 | - this.listData.push(new AccoutPageDataModel(3, '', '', '提示:密码长度6~20,需大写字母、小写字母、数字、特殊符合中组合三种及三种以上', '', '', 0)) | 96 | + this.listData.push(new AccoutPageDataModel(3, '', '', '提示:密码长度6~20位,使用大写字母、小写字母、数字、特殊字符中三种或三种以上', '', '', 0)) |
| 99 | this.listData.push(new AccoutPageDataModel(4, '', '', '', '确认', '', 0)) | 97 | this.listData.push(new AccoutPageDataModel(4, '', '', '', '确认', '', 0)) |
| 100 | break; | 98 | break; |
| 101 | 99 | ||
| @@ -105,7 +103,7 @@ export struct SettingPasswordLayout { | @@ -105,7 +103,7 @@ export struct SettingPasswordLayout { | ||
| 105 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入原密码', 10010)) | 103 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入原密码', 10010)) |
| 106 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入新密码', 10086)) | 104 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入新密码', 10086)) |
| 107 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请再请输入原密码', 10087)) | 105 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请再请输入原密码', 10087)) |
| 108 | - this.listData.push(new AccoutPageDataModel(3, '', '', '提示:密码长度6~20,需大写字母、小写字母、数字、特殊符合中组合三种及三种以上', '', '', 0)) | 106 | + this.listData.push(new AccoutPageDataModel(3, '', '', '提示:密码长度6~20位,使用大写字母、小写字母、数字、特殊字符中三种或三种以上', '', '', 0)) |
| 109 | this.listData.push(new AccoutPageDataModel(4, '', '', '', '确认', '', 0)) | 107 | this.listData.push(new AccoutPageDataModel(4, '', '', '', '确认', '', 0)) |
| 110 | this.listData.push(new AccoutPageDataModel(3, '', '', '忘记密码', '', '', 0)) | 108 | this.listData.push(new AccoutPageDataModel(3, '', '', '忘记密码', '', '', 0)) |
| 111 | break; | 109 | break; |
| @@ -126,7 +124,7 @@ export struct SettingPasswordLayout { | @@ -126,7 +124,7 @@ export struct SettingPasswordLayout { | ||
| 126 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入新密码', 10086)) | 124 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请输入新密码', 10086)) |
| 127 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请再请输入原密码', 10087)) | 125 | this.listData.push(new AccoutPageDataModel(1, '', '', '', '', '请再请输入原密码', 10087)) |
| 128 | this.listData.push(new AccoutPageDataModel(2, '', '', '', '', '验证码', 10088)) | 126 | this.listData.push(new AccoutPageDataModel(2, '', '', '', '', '验证码', 10088)) |
| 129 | - this.listData.push(new AccoutPageDataModel(3, '', '', '提示:密码长度6~20,需大写字母、小写字母、数字、特殊符合中组合三种及三种以上', '', '', 0)) | 127 | + this.listData.push(new AccoutPageDataModel(3, '', '', '提示:密码长度6~20位,使用大写字母、小写字母、数字、特殊字符中三种或三种以上', '', '', 0)) |
| 130 | this.listData.push(new AccoutPageDataModel(4, '', '', '', '确认', '', 0)) | 128 | this.listData.push(new AccoutPageDataModel(4, '', '', '', '确认', '', 0)) |
| 131 | this.listData.push(new AccoutPageDataModel(3, '', '', '忘记密码', '', '', 0)) | 129 | this.listData.push(new AccoutPageDataModel(3, '', '', '忘记密码', '', '', 0)) |
| 132 | break; | 130 | break; |
| @@ -327,7 +325,7 @@ export struct SettingPasswordLayout { | @@ -327,7 +325,7 @@ export struct SettingPasswordLayout { | ||
| 327 | return | 325 | return |
| 328 | } | 326 | } |
| 329 | if (this.password01 != this.password02) { | 327 | if (this.password01 != this.password02) { |
| 330 | - this.showToastTip('密码不一致') | 328 | + this.showToastTip('两次输入的密码不一致,请重新输入') |
| 331 | return | 329 | return |
| 332 | } | 330 | } |
| 333 | if(this.pageId == 1){ //设置密码 | 331 | if(this.pageId == 1){ //设置密码 |
| 1 | +{"v":"5.6.10","fr":60,"ip":0,"op":60,"w":128,"h":128,"nm":"上拉刷新-灰色","ddd":0,"assets":[{"id":"image_0","w":128,"h":128,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"loding.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[64,64,0],"ix":2},"a":{"a":0,"k":[64,64,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0}],"markers":[{"tm":1,"cm":"{\n\t\"storePath\":\t\"/Users/changkang/Downloads/中文版动效/动效到处最终版本的/上拉刷新-列表灰色\"\n}","dr":0}]} |
-
Please register or login to post a comment