From 9351da99b1aba0d7dfa7e50f2f062a6f8efc0534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Mon, 28 Oct 2024 17:37:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(ywq):=20=E6=96=B0=E5=A2=9E=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=AD=BE=E5=90=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加授权签名相关页面和逻辑 - 新增授权数据模型和接口 - 优化医生选择和授权流程 - 添加授权协议和确认页面 --- src/main/ets/pages/XWebview.ets | 26 ++- src/main/ets/utils/WindowHelper.ets | 13 ++ src/main/ets/utils/XWebHelper.ets | 3 +- src/main/ets/view/SafeView.ets | 252 ++++++++++++++-------------- 4 files changed, 167 insertions(+), 127 deletions(-) diff --git a/src/main/ets/pages/XWebview.ets b/src/main/ets/pages/XWebview.ets index a97dc5e..e486c13 100644 --- a/src/main/ets/pages/XWebview.ets +++ b/src/main/ets/pages/XWebview.ets @@ -15,7 +15,8 @@ import { SZYXLocalStorageKeys } from '../utils/SZYXLocalStorageKeys'; @Component export struct XWebview { // 手机号 - @State url: string = (router.getParams() as XWebParams).url + @State url?: string = (router.getParams() as XWebParams).url + @State content?: string = (router.getParams() as XWebParams).content @State title?: string = (router.getParams() as XWebParams).title @State closeTag?: string = (router.getParams() as XWebParams).closeTag @State showMenu: boolean = (router.getParams() as XWebParams).showMenu ?? false @@ -26,6 +27,23 @@ export struct XWebview { aboutToAppear(): void { SZYXLocalStorageHelper.storage.setOrCreate(SZYXLocalStorageKeys.XWebViewCLose, undefined) + if (this.content) { + try { + this.controller.loadData(this.content, + "text/html", + "UTF-8") + } catch (e) { + ToolsHelper.showAlertDialog({ + title: '警告', + msg: e.message ?? '加载内容失败', + action: { + onClick: () => { + router.back() + } + } + }) + } + } } aboutToDisappear(): void { @@ -38,7 +56,9 @@ export struct XWebview { if (this.controller.accessBackward()) { this.controller.backward() } else { - ToolsHelper.doubleAndExit() + ToolsHelper.doubleAndExit(() => { + router.back() + }) } return true } @@ -95,7 +115,7 @@ export struct XWebview { .visibility(this.progress > 95 || this.progress == 0 ? Visibility.None : Visibility.Visible) .width('100%') - Web({ src: this.url, controller: this.controller }) + Web({ src: this.url ?? 'www.example.com', controller: this.controller }) .width('100%') .height('100%') .visibility(this.errorInfo == null ? Visibility.Visible : Visibility.None) diff --git a/src/main/ets/utils/WindowHelper.ets b/src/main/ets/utils/WindowHelper.ets index 87bd776..a87a679 100644 --- a/src/main/ets/utils/WindowHelper.ets +++ b/src/main/ets/utils/WindowHelper.ets @@ -143,6 +143,19 @@ export class WindowHelper { WindowHelper._windowClass.setSpecificSystemBarEnabled('navigationIndicator', true); } } + + /** + * 设置状态栏内容颜色 + * #ffffff + * 不可以用white这种 + */ + static setStatusBar(color: string) { + if (WindowHelper._windowClass) { + WindowHelper._windowClass.setWindowSystemBarProperties({ + statusBarContentColor: color, + }) + } + } } /** diff --git a/src/main/ets/utils/XWebHelper.ets b/src/main/ets/utils/XWebHelper.ets index 1275411..7b4f350 100644 --- a/src/main/ets/utils/XWebHelper.ets +++ b/src/main/ets/utils/XWebHelper.ets @@ -6,7 +6,8 @@ const XWebview = import('../pages/XWebview'); export interface XWebParams { - url: string + url?: string + content?: string title?: string showMenu?: boolean closeTag?:string diff --git a/src/main/ets/view/SafeView.ets b/src/main/ets/view/SafeView.ets index b5d9334..aa800ef 100644 --- a/src/main/ets/view/SafeView.ets +++ b/src/main/ets/view/SafeView.ets @@ -17,6 +17,8 @@ export struct SafeView { @Prop isImmersive: boolean // 设置导航栏标题 @Prop titleText: ResourceStr + // 设置导航栏标题颜色 + @Prop titleColor: ResourceColor // 设置导航栏背景色 @Prop backgroundColorNav: ResourceColor // 设置导航栏背景色 @@ -26,6 +28,8 @@ export struct SafeView { @Prop opacitys: number | Resource // 是否显示返回按钮 @Prop hideBack: boolean + // 是否显示返回按钮 + @Prop hideNavBar: boolean /** * 是否显示左侧角标,存在onClickLeft时生效 */ @@ -59,133 +63,135 @@ export struct SafeView { .width('100%') .height('100%') - Row() - .height(WindowHelper.topRectHeight) - .width('100%') + if (!this.hideNavBar) { + Row() + .height(WindowHelper.topRectHeight) + .width('100%') + .backgroundColor(this.backgroundColorNav ?? '#ffffff') + .opacity(undefined === this.opacitys ? 1 : this.opacitys > 1 ? 1 : this.opacitys < 0 ? 0 : this.opacitys) + + Row() { + + Row() { + Image($r("app.media.base_back")) + .height(15) + .objectFit(ImageFit.Contain).visibility(!this.hideBack ? Visibility.Visible : Visibility.None) + }.width(110) + .onClick(() => { + if (this.hideBack) { + return + } + if (this.onBackEvent && !this.hideBack) { + this.onBackEvent() + } else if (this.pageInfos) { + this.pageInfos.pop() + } + }) + + Text(this.titleText ?? '') + .maxLines(1) + .fontColor(this.titleColor ?? '#11102C') + .fontSize(16) + .fontWeight(FontWeight.Medium) + .ellipsisMode(EllipsisMode.CENTER) + .textOverflow({ + overflow: TextOverflow.Ellipsis + }) + .constraintSize({ + maxWidth: 120 + }) + + Row() { + if (!this.onClickLeft?.img && this.onClickLeft) { + Badge({ + count: this.showBadgeLeft ? 1 : 0, + style: { + badgeSize: 6, + badgeColor: Color.Red + } + }) { + Text(`${this.onClickLeft?.text}` ?? '确定') + .fontColor(this.onClickLeft?.color ?? '#17171A') + .onClick(() => { + this.onClickLeft?.onClick && this.onClickLeft?.onClick() + }) + } + } + if (this.onClickLeft?.img && this.onClickLeft) { + Badge({ + count: this.showBadgeLeft ? 1 : 0, + style: { + badgeSize: 6, + badgeColor: '#FF6500', + color: '#FF6500' + } + }) { + Image(this.onClickLeft.img) + .onClick(() => { + this.onClickLeft?.onClick && this.onClickLeft?.onClick() + }) + .objectFit(ImageFit.Contain) + .width(20) + .height(20) + } + } + if (!this.onClickRight?.img && this.onClickRight) { + Badge({ + count: this.showBadgeRight ? 1 : 0, + style: { + badgeSize: 6, + badgeColor: '#FF6500', + color: '#FF6500' + } + }) { + Text(this.onClickRight?.text ?? '确定') + .fontColor(this.onClickRight?.color ?? '#17171A') + .onClick(() => { + this.onClickRight?.onClick && this.onClickRight?.onClick() + }) + .margin({ + left: 10 + }) + } + } + if (this.onClickRight?.img && this.onClickRight) { + Badge({ + count: this.showBadgeRight ? 1 : 0, + style: { + badgeSize: 6, + badgeColor: '#FF6500', + color: '#FF6500' + } + }) { + Image(this.onClickRight.img) + .onClick(() => { + this.onClickRight?.onClick && this.onClickRight?.onClick() + }) + .objectFit(ImageFit.Contain) + .width(20) + .height(20) + .margin({ + left: 10 + }) + } + } + + }.width(110) + .justifyContent(FlexAlign.End) + } .backgroundColor(this.backgroundColorNav ?? '#ffffff') .opacity(undefined === this.opacitys ? 1 : this.opacitys > 1 ? 1 : this.opacitys < 0 ? 0 : this.opacitys) - - Row() { - - Row() { - Image($r("app.media.base_back")) - .height(15) - .objectFit(ImageFit.Contain).visibility(!this.hideBack ? Visibility.Visible : Visibility.None) - }.width(110) - .onClick(() => { - if (this.hideBack) { - return - } - if (this.onBackEvent && !this.hideBack) { - this.onBackEvent() - } else if (this.pageInfos) { - this.pageInfos.pop() - } + .justifyContent(FlexAlign.SpaceBetween) + .height(44) + .padding({ + left: 15, + right: 15 + }) + .width('100%') + .margin({ + top: WindowHelper.topRectHeight }) - - Text(this.titleText ?? '') - .maxLines(1) - .fontColor('#11102C') - .fontSize(16) - .fontWeight(FontWeight.Medium) - .ellipsisMode(EllipsisMode.CENTER) - .textOverflow({ - overflow: TextOverflow.Ellipsis - }) - .constraintSize({ - maxWidth: 120 - }) - - Row() { - if (!this.onClickLeft?.img && this.onClickLeft) { - Badge({ - count: this.showBadgeLeft ? 1 : 0, - style: { - badgeSize: 6, - badgeColor: Color.Red - } - }) { - Text(`${this.onClickLeft?.text}` ?? '确定') - .fontColor(this.onClickLeft?.color ?? '#17171A') - .onClick(() => { - this.onClickLeft?.onClick && this.onClickLeft?.onClick() - }) - } - } - if (this.onClickLeft?.img && this.onClickLeft) { - Badge({ - count: this.showBadgeLeft ? 1 : 0, - style: { - badgeSize: 6, - badgeColor: '#FF6500', - color: '#FF6500' - } - }) { - Image(this.onClickLeft.img) - .onClick(() => { - this.onClickLeft?.onClick && this.onClickLeft?.onClick() - }) - .objectFit(ImageFit.Contain) - .width(20) - .height(20) - } - } - if (!this.onClickRight?.img && this.onClickRight) { - Badge({ - count: this.showBadgeRight ? 1 : 0, - style: { - badgeSize: 6, - badgeColor: '#FF6500', - color: '#FF6500' - } - }) { - Text(this.onClickRight?.text ?? '确定') - .fontColor(this.onClickRight?.color ?? '#17171A') - .onClick(() => { - this.onClickRight?.onClick && this.onClickRight?.onClick() - }) - .margin({ - left: 10 - }) - } - } - if (this.onClickRight?.img && this.onClickRight) { - Badge({ - count: this.showBadgeRight ? 1 : 0, - style: { - badgeSize: 6, - badgeColor: '#FF6500', - color: '#FF6500' - } - }) { - Image(this.onClickRight.img) - .onClick(() => { - this.onClickRight?.onClick && this.onClickRight?.onClick() - }) - .objectFit(ImageFit.Contain) - .width(20) - .height(20) - .margin({ - left: 10 - }) - } - } - - }.width(110) - .justifyContent(FlexAlign.End) } - .backgroundColor(this.backgroundColorNav ?? '#ffffff') - .opacity(undefined === this.opacitys ? 1 : this.opacitys > 1 ? 1 : this.opacitys < 0 ? 0 : this.opacitys) - .justifyContent(FlexAlign.SpaceBetween) - .height(44) - .padding({ - left: 15, - right: 15 - }) - .width('100%') - .margin({ - top: WindowHelper.topRectHeight - }) Column() { LoadingProgress()