From 47b8b26564290ef0f000354210a152d4fd65e850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 20 May 2025 19:42:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E4=BC=98=E5=8C=96=20AI=20=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=A1=B5=E9=9D=A2=E5=B9=B6=E6=B7=BB=E5=8A=A0=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -重构 ApiBean 类,增加分页相关字段 - 更新 AIDocumentView 页面布局和样式 - 添加文档分享功能 - 优化 HomeBannerModel 和 ArticleDetailView - 更新 XWebview 页面,支持自定义点击菜单 --- src/main/ets/pages/XWebview.ets | 50 +++++++++++++++++++++++-------- src/main/ets/utils/XWebHelper.ets | 2 ++ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/main/ets/pages/XWebview.ets b/src/main/ets/pages/XWebview.ets index 1b2a010..062b521 100644 --- a/src/main/ets/pages/XWebview.ets +++ b/src/main/ets/pages/XWebview.ets @@ -4,13 +4,14 @@ import { router, WebHeader } from '@kit.ArkUI'; import { XDialogController } from '../dialog/XDialogController'; import { XDialogList } from '../dialog/XDialogList'; import { picker } from '@kit.CoreFileKit'; -import { BusinessError } from '@kit.BasicServicesKit'; +import { BusinessError, pasteboard } from '@kit.BasicServicesKit'; import { ToolsHelper } from '../utils/ToolsHelper'; import { JsParams, XWebController, XWebParams } from '../utils/XWebHelper'; import { WindowHelper } from '../utils/WindowHelper'; import { SZYXLocalStorageHelper } from '../utils/SZYXLocalStorageHelper'; import { SZYXLocalStorageKeys } from '../utils/SZYXLocalStorageKeys'; import { XWebManager } from '../utils/XWebManager'; +import { TitleBarBtn } from '../view/SafeView'; @Entry({ routeName: 'XWebview' }) @Component @@ -27,6 +28,7 @@ export struct XWebview { // @State xJsController?: XWebController = (router.getParams() as XWebParams).jsController @State closeTag?: string = (router.getParams() as XWebParams).closeTag @State showMenu: boolean = (router.getParams() as XWebParams).showMenu ?? false + @State clickMenu?: TitleBarBtn = (router.getParams() as XWebParams).clickMenu @State errorInfo: string | null = null @State progress: number = 0 @State _uuid?: string = (router.getParams() as XWebParams)._uuid @@ -53,11 +55,6 @@ export struct XWebview { } }) } - if (this.jsParams?.controller && this._uuidToHtml) { - XWebManager.addOnMessageToWeb(this._uuidToHtml, (msg) => { - this.controller.runJavaScript(msg) - }) - } } aboutToDisappear(): void { @@ -74,6 +71,7 @@ export struct XWebview { } catch (error) { console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); } + // this.controller.rele } onBackPress(): boolean | void { @@ -120,14 +118,32 @@ export struct XWebview { }) Button({ buttonStyle: ButtonStyleMode.TEXTUAL }) { - Image($r('sys.media.ohos_ic_public_more')) - .width(26).height(26) + if (this.clickMenu?.img) { + Image(this.clickMenu?.img) + .width(15).height(15) + } else if (this.clickMenu?.text) { + Text(this.clickMenu.text) + .fontColor(this.clickMenu?.color ?? '#17171A') + .fontSize(13) + .textAlign(TextAlign.Center) + .ellipsisMode(EllipsisMode.END) + .textOverflow({ + overflow: TextOverflow.Ellipsis + }) + } else { + Image($r('sys.media.ohos_ic_public_more')) + .width(26).height(26) + } }.width(65) .onClick(() => { + if (this.clickMenu) { + this.clickMenu.onClick() + return + } if (this.dialogController != null) { this.dialogController.open() } - }).visibility(this.showMenu ? Visibility.Visible : Visibility.Hidden) + }).visibility(this.showMenu || this.clickMenu ? Visibility.Visible : Visibility.Hidden) } .width('100%') .height(45) @@ -221,6 +237,11 @@ export struct XWebview { this.controller.postMessage('__init_port__', [this.ports[0]], '*'); }) .onControllerAttached(() => { + if (this.jsParams?.controller && this._uuidToHtml) { + XWebManager.addOnMessageToWeb(this._uuidToHtml, (msg) => { + this.controller.runJavaScript(msg) + }) + } if (this.content) { try { this.controller.loadData(this.content, @@ -338,18 +359,23 @@ export struct XWebview { // 标题(可选) title: '选择您的操作', // 选择内容列表 - values: ['刷新', '浏览器打开', '分享', '复制地址'], + values: ['刷新', '浏览器打开', '复制地址'], // 用户选择事件 onSelected: (index: number, value: string) => { if (index === 0) { this.controller.refresh() + } else if (index === 1) { + } else { - ToolsHelper.showMessage(`用户选择了第${index}个,内容为:${value}`) + pasteboard.getSystemPasteboard() + .setData(pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, this.controller.getUrl()), () => { + ToolsHelper.showMessage('已复制到剪切板') + }) } }, // 用户取消事件 onCancel: () => { - ToolsHelper.showMessage('用户取消操作') + // ToolsHelper.showMessage('用户取消操作') }, // 是否可取消(点击空白处,或者物理返回键) autoCancel: true diff --git a/src/main/ets/utils/XWebHelper.ets b/src/main/ets/utils/XWebHelper.ets index 75af43d..2521305 100644 --- a/src/main/ets/utils/XWebHelper.ets +++ b/src/main/ets/utils/XWebHelper.ets @@ -2,6 +2,7 @@ import { router, WebHeader } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; import { LogHelper, SZYXLocalStorageHelper } from '../../../../Index'; import { baseEncode } from '../util/base64Util'; +import { TitleBarBtn } from '../view/SafeView'; import { ToolsHelper } from './ToolsHelper'; import { XWebManager } from './XWebManager'; @@ -33,6 +34,7 @@ export interface XWebParams { closeTag?: string headers?: Array onMessage?: (message: string) => void + clickMenu?: TitleBarBtn controller?: XWebController zoomAccess?: boolean _uuid?: string