feat(ai): 优化 AI 文档页面并添加分享功能
-重构 ApiBean 类,增加分页相关字段 - 更新 AIDocumentView 页面布局和样式 - 添加文档分享功能 - 优化 HomeBannerModel 和 ArticleDetailView - 更新 XWebview 页面,支持自定义点击菜单
这个提交包含在:
父节点
791e3b74fc
当前提交
47b8b26564
@ -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
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户