Просмотр исходного кода

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

-重构 ApiBean 类,增加分页相关字段
- 更新 AIDocumentView 页面布局和样式
- 添加文档分享功能
- 优化 HomeBannerModel 和 ArticleDetailView
- 更新 XWebview 页面,支持自定义点击菜单
徐勤民 3 недель назад
Родитель
Сommit
47b8b26564
2 измененных файлов с 40 добавлено и 12 удалено
  1. 38 12
      src/main/ets/pages/XWebview.ets
  2. 2 0
      src/main/ets/utils/XWebHelper.ets

+ 38 - 12
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

+ 2 - 0
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<WebHeader>
   onMessage?: (message: string) => void
+  clickMenu?: TitleBarBtn
   controller?: XWebController
   zoomAccess?: boolean
   _uuid?: string