feat(ai): 优化 AI 文档页面并添加分享功能

-重构 ApiBean 类,增加分页相关字段
- 更新 AIDocumentView 页面布局和样式
- 添加文档分享功能
- 优化 HomeBannerModel 和 ArticleDetailView
- 更新 XWebview 页面,支持自定义点击菜单
这个提交包含在:
徐勤民 2025-05-20 19:42:48 +08:00
父节点 791e3b74fc
当前提交 47b8b26564
共有 2 个文件被更改,包括 40 次插入12 次删除

查看文件

@ -4,13 +4,14 @@ import { router, WebHeader } from '@kit.ArkUI';
import { XDialogController } from '../dialog/XDialogController'; import { XDialogController } from '../dialog/XDialogController';
import { XDialogList } from '../dialog/XDialogList'; import { XDialogList } from '../dialog/XDialogList';
import { picker } from '@kit.CoreFileKit'; import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit'; import { BusinessError, pasteboard } from '@kit.BasicServicesKit';
import { ToolsHelper } from '../utils/ToolsHelper'; import { ToolsHelper } from '../utils/ToolsHelper';
import { JsParams, XWebController, XWebParams } from '../utils/XWebHelper'; import { JsParams, XWebController, XWebParams } from '../utils/XWebHelper';
import { WindowHelper } from '../utils/WindowHelper'; import { WindowHelper } from '../utils/WindowHelper';
import { SZYXLocalStorageHelper } from '../utils/SZYXLocalStorageHelper'; import { SZYXLocalStorageHelper } from '../utils/SZYXLocalStorageHelper';
import { SZYXLocalStorageKeys } from '../utils/SZYXLocalStorageKeys'; import { SZYXLocalStorageKeys } from '../utils/SZYXLocalStorageKeys';
import { XWebManager } from '../utils/XWebManager'; import { XWebManager } from '../utils/XWebManager';
import { TitleBarBtn } from '../view/SafeView';
@Entry({ routeName: 'XWebview' }) @Entry({ routeName: 'XWebview' })
@Component @Component
@ -27,6 +28,7 @@ export struct XWebview {
// @State xJsController?: XWebController = (router.getParams() as XWebParams).jsController // @State xJsController?: XWebController = (router.getParams() as XWebParams).jsController
@State closeTag?: string = (router.getParams() as XWebParams).closeTag @State closeTag?: string = (router.getParams() as XWebParams).closeTag
@State showMenu: boolean = (router.getParams() as XWebParams).showMenu ?? false @State showMenu: boolean = (router.getParams() as XWebParams).showMenu ?? false
@State clickMenu?: TitleBarBtn = (router.getParams() as XWebParams).clickMenu
@State errorInfo: string | null = null @State errorInfo: string | null = null
@State progress: number = 0 @State progress: number = 0
@State _uuid?: string = (router.getParams() as XWebParams)._uuid @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 { aboutToDisappear(): void {
@ -74,6 +71,7 @@ export struct XWebview {
} catch (error) { } catch (error) {
console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
} }
// this.controller.rele
} }
onBackPress(): boolean | void { onBackPress(): boolean | void {
@ -120,14 +118,32 @@ export struct XWebview {
}) })
Button({ buttonStyle: ButtonStyleMode.TEXTUAL }) { Button({ buttonStyle: ButtonStyleMode.TEXTUAL }) {
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')) Image($r('sys.media.ohos_ic_public_more'))
.width(26).height(26) .width(26).height(26)
}
}.width(65) }.width(65)
.onClick(() => { .onClick(() => {
if (this.clickMenu) {
this.clickMenu.onClick()
return
}
if (this.dialogController != null) { if (this.dialogController != null) {
this.dialogController.open() this.dialogController.open()
} }
}).visibility(this.showMenu ? Visibility.Visible : Visibility.Hidden) }).visibility(this.showMenu || this.clickMenu ? Visibility.Visible : Visibility.Hidden)
} }
.width('100%') .width('100%')
.height(45) .height(45)
@ -221,6 +237,11 @@ export struct XWebview {
this.controller.postMessage('__init_port__', [this.ports[0]], '*'); this.controller.postMessage('__init_port__', [this.ports[0]], '*');
}) })
.onControllerAttached(() => { .onControllerAttached(() => {
if (this.jsParams?.controller && this._uuidToHtml) {
XWebManager.addOnMessageToWeb(this._uuidToHtml, (msg) => {
this.controller.runJavaScript(msg)
})
}
if (this.content) { if (this.content) {
try { try {
this.controller.loadData(this.content, this.controller.loadData(this.content,
@ -338,18 +359,23 @@ export struct XWebview {
// 标题(可选) // 标题(可选)
title: '选择您的操作', title: '选择您的操作',
// 选择内容列表 // 选择内容列表
values: ['刷新', '浏览器打开', '分享', '复制地址'], values: ['刷新', '浏览器打开', '复制地址'],
// 用户选择事件 // 用户选择事件
onSelected: (index: number, value: string) => { onSelected: (index: number, value: string) => {
if (index === 0) { if (index === 0) {
this.controller.refresh() this.controller.refresh()
} else if (index === 1) {
} else { } else {
ToolsHelper.showMessage(`用户选择了第${index}个,内容为:${value}`) pasteboard.getSystemPasteboard()
.setData(pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, this.controller.getUrl()), () => {
ToolsHelper.showMessage('已复制到剪切板')
})
} }
}, },
// 用户取消事件 // 用户取消事件
onCancel: () => { onCancel: () => {
ToolsHelper.showMessage('用户取消操作') // ToolsHelper.showMessage('用户取消操作')
}, },
// 是否可取消(点击空白处,或者物理返回键) // 是否可取消(点击空白处,或者物理返回键)
autoCancel: true autoCancel: true

查看文件

@ -2,6 +2,7 @@ import { router, WebHeader } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit'; import { BusinessError } from '@kit.BasicServicesKit';
import { LogHelper, SZYXLocalStorageHelper } from '../../../../Index'; import { LogHelper, SZYXLocalStorageHelper } from '../../../../Index';
import { baseEncode } from '../util/base64Util'; import { baseEncode } from '../util/base64Util';
import { TitleBarBtn } from '../view/SafeView';
import { ToolsHelper } from './ToolsHelper'; import { ToolsHelper } from './ToolsHelper';
import { XWebManager } from './XWebManager'; import { XWebManager } from './XWebManager';
@ -33,6 +34,7 @@ export interface XWebParams {
closeTag?: string closeTag?: string
headers?: Array<WebHeader> headers?: Array<WebHeader>
onMessage?: (message: string) => void onMessage?: (message: string) => void
clickMenu?: TitleBarBtn
controller?: XWebController controller?: XWebController
zoomAccess?: boolean zoomAccess?: boolean
_uuid?: string _uuid?: string