yangchenggong1_wd

fix:bug[16843] 功能缺陷-个人隐私保护指引,无网络,点击隐私政策,用户协议,进入空白页,预期进入“无网络”空页面样式页

  1 +import { CommonConstants } from 'wdConstant';
  2 +import { Logger } from 'wdKit';
  3 +
  4 +const TAG = 'EmptyComponent';
  5 +
  6 +/**
  7 + * WDViewDefaultType 缺省页 无网络
  8 + */
  9 +export const enum WDViewDefaultType {
  10 + /// 0.默认
  11 + WDViewDefaultType_Default,
  12 + /// 1.无网
  13 + WDViewDefaultType_NoNetwork,
  14 +}
  15 +
  16 +/**
  17 + * 空数据/无数据
  18 + */
  19 +@Preview
  20 +@Component
  21 +export struct EmptyComponent {
  22 + @State emptyWidth: string | number = CommonConstants.FULL_PARENT;
  23 + @State emptyHeight: string | number = CommonConstants.FULL_PARENT;
  24 + @State emptyType: number = WDViewDefaultType.WDViewDefaultType_NoNetwork; // 缺省图类型,传枚举
  25 + @State emptyButton: boolean = false
  26 + @State timeNum: number = 10
  27 + /**
  28 + * The empty image width percentage setting.
  29 + */
  30 + readonly EMPTY_IMAGE_WIDTH: string = '15%';
  31 + /**
  32 + * The empty image height percentage setting.
  33 + */
  34 + readonly EMPTY_IMAGE_HEIGHT: string = '15%';
  35 + /**
  36 + * The empty data text component margin top.
  37 + */
  38 + readonly EMPTY_TIP_TEXT_MARGIN_TOP: string = '10';
  39 + /**
  40 + * The empty data text opacity.
  41 + */
  42 + readonly TEXT_OPACITY: number = 0.4;
  43 + private timer: number = -1
  44 + retry: () => void = () => {
  45 + }
  46 +
  47 + build() {
  48 + this.noProgrammeData();
  49 + }
  50 +
  51 + /**
  52 + * 无数据,空白view组件
  53 + */
  54 + @Builder
  55 + noProgrammeData() {
  56 + Column() {
  57 + Image(this.buildNoDataTipImage())
  58 + .width(160)
  59 + .height(112)
  60 + .objectFit(ImageFit.Contain)
  61 +
  62 + Text(this.emptyType !== 8 ? this.buildNoDataTip() : `${this.buildNoDataTip()}(${this.timeNum}s)`)
  63 + .fontSize($r('app.float.font_size_14'))// .fontColor('#FF999999')
  64 + .fontWeight(FontWeight.Normal)
  65 + .opacity(this.TEXT_OPACITY)
  66 + .margin({ top: this.EMPTY_TIP_TEXT_MARGIN_TOP })
  67 + .onClick((event: ClickEvent) => {
  68 + Logger.info(TAG, `noProgrammeData onClick event?.source: ${event.source}`);
  69 + })
  70 +
  71 + if (this.isShowButton()) {
  72 + if (this.emptyType !== 15) {
  73 + Button('点击重试')
  74 + .type(ButtonType.Normal)
  75 + .width(80)
  76 + .height(28)
  77 + .backgroundColor('#fffffff')
  78 + .fontColor('#FF666666')
  79 + .border({ width: 1 })
  80 + .borderColor('#FFEDEDED')
  81 + .borderRadius(4)
  82 + .fontSize($r('app.float.font_size_12'))
  83 + .margin({ top: 16 })
  84 + .padding(0)
  85 + .onClick(() => {
  86 + this.retry()
  87 + })
  88 + } else {
  89 + Button('点击重试')
  90 + .type(ButtonType.Normal)
  91 + .width(80)
  92 + .height(28)
  93 + .backgroundColor(Color.Black)
  94 + .fontColor('#FFCCCCCC')
  95 + .border({ width: 1 })
  96 + .borderColor('#4DFFFFFF')
  97 + .borderRadius(4)
  98 + .fontSize($r('app.float.font_size_12'))
  99 + .margin({ top: 16 })
  100 + .padding(0)
  101 + .onClick(() => {
  102 + this.retry()
  103 + })
  104 + }
  105 + }
  106 + }
  107 + .justifyContent(FlexAlign.Center)
  108 + .width(this.emptyWidth)
  109 + .height(this.emptyHeight)
  110 + }
  111 +
  112 + buildNoDataTip(): string {
  113 + Logger.info(TAG, "buildNoDataTip");
  114 + let contentString: string = '暂无内容'
  115 + if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoNetwork) {
  116 + contentString = '网络出小差了,请检查网络后重试'
  117 + }
  118 + return contentString
  119 + }
  120 +
  121 + buildNoDataTipImage(): Resource | string {
  122 + Logger.info(TAG, "buildNoDataTip");
  123 + let imageString: Resource | string = ""
  124 + if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoNetwork) {
  125 + imageString = $r('app.media.icon_no_net1')
  126 + }
  127 + return imageString
  128 + }
  129 +
  130 + isShowButton() {
  131 + if (this.emptyType === 1 || this.emptyType === 9 || this.emptyType === 15) {
  132 + return true
  133 + } else {
  134 + return false
  135 + }
  136 + }
  137 +}
  138 +
1 import router from '@ohos.router'; 1 import router from '@ohos.router';
2 import webview from '@ohos.web.webview'; 2 import webview from '@ohos.web.webview';
3 import { SpConstants } from 'wdConstant/Index'; 3 import { SpConstants } from 'wdConstant/Index';
4 -import { Logger, SPHelper } from 'wdKit'; 4 +import { Logger, NetworkUtil, SPHelper } from 'wdKit';
5 import { Params } from '../../../../../../../commons/wdRouter/oh_modules/wdBean/src/main/ets/bean/content/Params'; 5 import { Params } from '../../../../../../../commons/wdRouter/oh_modules/wdBean/src/main/ets/bean/content/Params';
  6 +import { EmptyComponent } from './EmptyComponent';
6 7
7 8
8 const TAG = 'LoginProtocolWebview'; 9 const TAG = 'LoginProtocolWebview';
@@ -12,7 +13,7 @@ const TAG = 'LoginProtocolWebview'; @@ -12,7 +13,7 @@ const TAG = 'LoginProtocolWebview';
12 struct LoginProtocolWebview { 13 struct LoginProtocolWebview {
13 @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') || 0 14 @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') || 0
14 @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') || 0 15 @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') || 0
15 - webUrl: string = '' 16 + @State webUrl: string = ''
16 webviewController: webview.WebviewController = new webview.WebviewController() 17 webviewController: webview.WebviewController = new webview.WebviewController()
17 userProtocol = "https://cdnpeoplefrontuat.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1005.html" 18 userProtocol = "https://cdnpeoplefrontuat.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1005.html"
18 privateProtocol = 'https://cdnpeoplefrontuat.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1001.html' 19 privateProtocol = 'https://cdnpeoplefrontuat.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1001.html'
@@ -22,6 +23,7 @@ struct LoginProtocolWebview { @@ -22,6 +23,7 @@ struct LoginProtocolWebview {
22 collectionProtocol = 'https://cdnpeoplefront.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1002.html'//收集个人信息明示清单 23 collectionProtocol = 'https://cdnpeoplefront.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1002.html'//收集个人信息明示清单
23 thirdVendorProtocol = 'https://cdnpeoplefront.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1004.html'//第三方信息共享清单 24 thirdVendorProtocol = 'https://cdnpeoplefront.aikan.pdnews.cn/rmrb/rmrb-protocol-zh-web/0.0.1/app/protocol-1004.html'//第三方信息共享清单
24 @State contentID:string = "0" 25 @State contentID:string = "0"
  26 + @State isConnectNetwork : boolean = NetworkUtil.isNetConnected()
25 27
26 async aboutToAppear() { 28 async aboutToAppear() {
27 if (router.getParams()) { 29 if (router.getParams()) {
@@ -33,24 +35,17 @@ struct LoginProtocolWebview { @@ -33,24 +35,17 @@ struct LoginProtocolWebview {
33 if (params.contentID == "1") { //"人民日报客户端网络服务使用协议" 35 if (params.contentID == "1") { //"人民日报客户端网络服务使用协议"
34 this.webUrl = this.userProtocol 36 this.webUrl = this.userProtocol
35 this.webUrl = await SPHelper.default.get(SpConstants.NET_SERVICE_PROTOCOL, this.userProtocol) as string 37 this.webUrl = await SPHelper.default.get(SpConstants.NET_SERVICE_PROTOCOL, this.userProtocol) as string
36 - this.webviewController.loadUrl(this.webUrl)  
37 -  
38 } else if(params.contentID == "2"){ //"人民日报客户端用户隐私协议" 38 } else if(params.contentID == "2"){ //"人民日报客户端用户隐私协议"
39 this.webUrl = this.privateProtocol 39 this.webUrl = this.privateProtocol
40 this.webUrl = await SPHelper.default.get(SpConstants.PRIVATE_PROTOCOL, this.privateProtocol) as string 40 this.webUrl = await SPHelper.default.get(SpConstants.PRIVATE_PROTOCOL, this.privateProtocol) as string
41 - this.webviewController.loadUrl(this.webUrl)  
42 }else if(params.contentID == "3"){ //注销协议 41 }else if(params.contentID == "3"){ //注销协议
43 this.webUrl = await SPHelper.default.get(SpConstants.LOGOUT_PROTOCOL, this.logoutProtocol) as string 42 this.webUrl = await SPHelper.default.get(SpConstants.LOGOUT_PROTOCOL, this.logoutProtocol) as string
44 - this.webviewController.loadUrl(this.webUrl)  
45 } else if(params.contentID == "4"){ //华为用户认证协议 43 } else if(params.contentID == "4"){ //华为用户认证协议
46 this.webUrl = this.huaweiAuthProtocol 44 this.webUrl = this.huaweiAuthProtocol
47 - this.webviewController.loadUrl(this.webUrl)  
48 } else if(params.contentID == "5"){ //收集个人信息明示清单 45 } else if(params.contentID == "5"){ //收集个人信息明示清单
49 this.webUrl = this.collectionProtocol 46 this.webUrl = this.collectionProtocol
50 - this.webviewController.loadUrl(this.webUrl)  
51 } else if(params.contentID == "6"){ //第三方信息共享清单 47 } else if(params.contentID == "6"){ //第三方信息共享清单
52 this.webUrl = this.thirdVendorProtocol 48 this.webUrl = this.thirdVendorProtocol
53 - this.webviewController.loadUrl(this.webUrl)  
54 } 49 }
55 } 50 }
56 51
@@ -75,20 +70,27 @@ struct LoginProtocolWebview { @@ -75,20 +70,27 @@ struct LoginProtocolWebview {
75 .alignItems(VerticalAlign.Center) 70 .alignItems(VerticalAlign.Center)
76 .width('100%') 71 .width('100%')
77 .height(44) 72 .height(44)
78 -  
79 - Web({ src: this.webUrl, controller: this.webviewController })  
80 - .domStorageAccess(true)  
81 - .databaseAccess(true)  
82 - .javaScriptAccess(true)  
83 - .zoomAccess(false)  
84 - .horizontalScrollBarAccess(false)  
85 - .verticalScrollBarAccess(false)  
86 - .onHttpErrorReceive((event) => {  
87 - //TODO 页面加载不成功的时候处理  
88 - Logger.info(TAG, 'onHttpErrorReceive event.request.getRequestUrl:' + event?.request.getRequestUrl());  
89 - Logger.info(TAG, 'onHttpErrorReceive event.response.getResponseCode:' + event?.response.getResponseCode());  
90 - })  
91 - .padding({bottom:this.contentID === "2" ? "40lpx" : 0 }) 73 + if(this.isConnectNetwork){
  74 + Web({ src: this.webUrl, controller: this.webviewController })
  75 + .domStorageAccess(true)
  76 + .databaseAccess(true)
  77 + .javaScriptAccess(true)
  78 + .zoomAccess(false)
  79 + .horizontalScrollBarAccess(false)
  80 + .verticalScrollBarAccess(false)
  81 + .onHttpErrorReceive((event) => {
  82 + //TODO 页面加载不成功的时候处理
  83 + Logger.info(TAG, 'onHttpErrorReceive event.request.getRequestUrl:' + event?.request.getRequestUrl());
  84 + Logger.info(TAG, 'onHttpErrorReceive event.response.getResponseCode:' + event?.response.getResponseCode());
  85 + })
  86 + .padding({bottom:this.contentID === "2" ? "40lpx" : 0 })
  87 + }else{
  88 + EmptyComponent({ emptyType: 1,emptyHeight:"100%" ,retry: () => {
  89 + this.isConnectNetwork = NetworkUtil.isNetConnected()
  90 + }})
  91 + .layoutWeight(1)
  92 + .width('100%')
  93 + }
92 } 94 }
93 }.width("100%") 95 }.width("100%")
94 .height("100%") 96 .height("100%")