From d32a99673cfc24788e2ee247585ca3ec2817f769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Fri, 8 Nov 2024 19:29:44 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat(app):=20=E6=96=B0=E5=A2=9E=E5=86=A0?= =?UTF-8?q?=E6=96=B0=E9=A6=96=E9=A1=B5=E5=B9=B6=E8=B0=83=E6=95=B4=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 GXMainView 组件作为冠新首页 - 修改登录成功后根据用户类型跳转到不同首页- 更新路由配置,支持冠新首页 - 调整底部导航栏样式 - 优化登录界面布局 --- src/main/ets/view/SafeView.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/ets/view/SafeView.ets b/src/main/ets/view/SafeView.ets index f1d2e78..e30b727 100644 --- a/src/main/ets/view/SafeView.ets +++ b/src/main/ets/view/SafeView.ets @@ -39,7 +39,7 @@ export struct SafeView { */ @Prop showBadgeRight: boolean; // 设置返回按钮事件,如果hideBack为true,该事件无效 - onBackEvent?: () => void = undefined + onBackEvent?: () => void // 设置返回按钮事件 @Prop onClickLeft?: TitleBarBtn @Prop onClickRight?: TitleBarBtn From c2425f621aa4076ae371dbb25f665327055472e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Sat, 9 Nov 2024 17:13:53 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat(app):=20=E6=B7=BB=E5=8A=A0=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=8F=8D=E9=A6=88=E5=8A=9F=E8=83=BD-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=97=AE=E9=A2=98=E5=8F=8D=E9=A6=88=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=20FeedbackView=20-=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=8F=8D=E9=A6=88=E5=9B=BE=E7=89=87=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=92=8C=E6=8F=90=E4=BA=A4=E5=8A=9F=E8=83=BD=20-=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B8=E5=85=B3=20API=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B-=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=9B=BE=E7=89=87=E9=80=89=E6=8B=A9=E5=92=8C=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/ets/utils/FileHelper.ets | 27 +++++++++++++++++++++++++++ src/main/ets/utils/PickerHelper.ets | 2 ++ 2 files changed, 29 insertions(+) diff --git a/src/main/ets/utils/FileHelper.ets b/src/main/ets/utils/FileHelper.ets index c2bd0b3..bc26baa 100644 --- a/src/main/ets/utils/FileHelper.ets +++ b/src/main/ets/utils/FileHelper.ets @@ -3,6 +3,9 @@ import fs, { ListFileOptions, ReadOptions, ReadTextOptions, WriteOptions } from import { BusinessError } from '@kit.BasicServicesKit'; import { StrHelper } from './StrHelper'; import { hilog } from '@kit.PerformanceAnalysisKit'; +import { image } from '@kit.ImageKit'; +import { buffer } from '@kit.ArkTS'; +import { LogHelper } from './LogHelper'; export class FileHelper { private constructor() { @@ -308,6 +311,30 @@ export class FileHelper { return fs.accessSync(path); } + static BmpToBase64(photoUri: string): Promise { + const imagePackerApi: image.ImagePacker = image.createImagePacker(); + const packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; + + return new Promise((resolve, reject) => { + let file = FileHelper.openSync(photoUri, fs.OpenMode.READ_ONLY) + const imageSource = image.createImageSource(file.fd); + LogHelper.error('file.fd:' + file.fd) + + imageSource.createPixelMap().then((pixelMap) => { + imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => { + let buf: buffer.Buffer = buffer.from(data); + LogHelper.error('data:' + data) + resolve(buf.toString('base64')) + }).catch((err: BusinessError) => { + LogHelper.error('packing failed with err: ' + JSON.stringify(err)); + reject(err) + }) + }).catch((err: BusinessError) => { + LogHelper.error('createPixelMap failed with err: ' + JSON.stringify(err)); + reject(err) + }); + }) + } /** * 打开文件,支持使用URI打开文件。使用Promise异步回调。 diff --git a/src/main/ets/utils/PickerHelper.ets b/src/main/ets/utils/PickerHelper.ets index 992521c..e2cabcd 100644 --- a/src/main/ets/utils/PickerHelper.ets +++ b/src/main/ets/utils/PickerHelper.ets @@ -4,6 +4,7 @@ import { common } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; +import { LogHelper } from './LogHelper'; const DOCUMENT_DEFAULT_SELECT_NUMBER: number = 9; //数量 @@ -65,6 +66,7 @@ export class PickerHelper { let photoPicker = new photoAccessHelper.PhotoViewPicker(); let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(options); + LogHelper.error(JSON.stringify(photoSelectResult)) if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) { return photoSelectResult.photoUris; } else { From b00fca281d3d04fd67765ff8073389f84f1e5d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Sat, 9 Nov 2024 18:56:59 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat(ContactSupportView):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BF=9D=E5=AD=98=E5=9B=BE=E7=89=87=E5=88=B0=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ContactSupportView 组件中添加保存图片按钮 - 实现保存图片到本地的逻辑 - 更新权限请求,添加对相册的访问权限 - 优化界面布局,调整图片显示和按钮样式 --- src/main/ets/utils/FileHelper.ets | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main/ets/utils/FileHelper.ets b/src/main/ets/utils/FileHelper.ets index bc26baa..991133a 100644 --- a/src/main/ets/utils/FileHelper.ets +++ b/src/main/ets/utils/FileHelper.ets @@ -6,6 +6,9 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; import { image } from '@kit.ImageKit'; import { buffer } from '@kit.ArkTS'; import { LogHelper } from './LogHelper'; +import { ToolsHelper } from './ToolsHelper'; +import { photoAccessHelper } from '@kit.MediaLibraryKit'; +import { GlobalContext } from '../ContextConfig'; export class FileHelper { private constructor() { @@ -311,6 +314,11 @@ export class FileHelper { return fs.accessSync(path); } + /** + * 图片转base64 + * @param photoUri + * @returns + */ static BmpToBase64(photoUri: string): Promise { const imagePackerApi: image.ImagePacker = image.createImagePacker(); const packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; @@ -336,6 +344,35 @@ export class FileHelper { }) } + /** + * 保存图片到相册,需要注意权限 + * @param pixmap + */ + static async saveImage(pixmap: image.PixelMap) { + let imageBuffer: ArrayBuffer = new ArrayBuffer(1) + try { + imageBuffer = await image.createImagePacker().packing(pixmap, { format: "image/png", quality: 100 }) + } catch (err) { + ToolsHelper.showMessage('保存失败') + console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`) + } + + const uri = await photoAccessHelper.getPhotoAccessHelper(GlobalContext.getContext()) + .createAsset(photoAccessHelper.PhotoType.IMAGE, 'png') + + fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE) + .then(async (file) => { + try { + await fs.write(file.fd, imageBuffer) + ToolsHelper.showMessage('保存成功') + } finally { + await fs.close(file.fd) // 确保文件关闭 + } + }).catch(() => { + ToolsHelper.showMessage('保存失败') + }) + } + /** * 打开文件,支持使用URI打开文件。使用Promise异步回调。 * @param path string 文件的应用沙箱路径或URI。 From 3ad2b23292f6add5b31b31f61d375f42adf11717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Mon, 11 Nov 2024 15:18:16 +0800 Subject: [PATCH 4/5] =?UTF-8?q?refactor(app):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=A3=81=E5=89=AA=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B4=A6=E6=88=B7=E4=BF=A1=E6=81=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ApiConfig 中为 getAccountInfo 接口添加 showLog 字段 - 删除 ImageCropperView 组件和相关路由 - 移除 @candies/image_cropper 依赖 -优化 FileHelper 中的 saveImage 方法,返回保存后的图片 URI --- src/main/ets/utils/FileHelper.ets | 55 +++++++++++++++++++------------ 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/main/ets/utils/FileHelper.ets b/src/main/ets/utils/FileHelper.ets index 991133a..7254824 100644 --- a/src/main/ets/utils/FileHelper.ets +++ b/src/main/ets/utils/FileHelper.ets @@ -314,6 +314,11 @@ export class FileHelper { return fs.accessSync(path); } + static getFileFd(uri: string) { + let file = FileHelper.openSync(uri, fs.OpenMode.READ_ONLY) + return file.fd + } + /** * 图片转base64 * @param photoUri @@ -348,29 +353,37 @@ export class FileHelper { * 保存图片到相册,需要注意权限 * @param pixmap */ - static async saveImage(pixmap: image.PixelMap) { - let imageBuffer: ArrayBuffer = new ArrayBuffer(1) - try { - imageBuffer = await image.createImagePacker().packing(pixmap, { format: "image/png", quality: 100 }) - } catch (err) { - ToolsHelper.showMessage('保存失败') - console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`) - } + static saveImage(pixmap: image.PixelMap): Promise { + return new Promise(async (resolve, reject) => { - const uri = await photoAccessHelper.getPhotoAccessHelper(GlobalContext.getContext()) - .createAsset(photoAccessHelper.PhotoType.IMAGE, 'png') + let imageBuffer: ArrayBuffer = new ArrayBuffer(1); + try { + imageBuffer = await image.createImagePacker().packing(pixmap, { format: "image/png", quality: 100 }); + } catch (err) { + ToolsHelper.showMessage('保存失败'); + console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`); + reject() + return; + } - fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE) - .then(async (file) => { - try { - await fs.write(file.fd, imageBuffer) - ToolsHelper.showMessage('保存成功') - } finally { - await fs.close(file.fd) // 确保文件关闭 - } - }).catch(() => { - ToolsHelper.showMessage('保存失败') - }) + const uri = await photoAccessHelper.getPhotoAccessHelper(GlobalContext.getContext()) + .createAsset(photoAccessHelper.PhotoType.IMAGE, 'png'); + + fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE) + .then(async (file) => { + try { + await fs.write(file.fd, imageBuffer); + ToolsHelper.showMessage('保存成功'); + } finally { + await fs.close(file.fd); // 确保文件关闭 + } + resolve(uri); + }).catch(() => { + ToolsHelper.showMessage('保存失败'); + reject() + return; + }); + }); } /** From 3706c66fbf85a5697020cbef91404f0561d13d6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Mon, 11 Nov 2024 17:52:57 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(account):=20=E5=86=A0=E6=96=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=B1=BB=E5=9E=8B=E9=80=BB=E8=BE=91=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 AccountData 类,增加 GXTokenData 和 GXTokeModel 接口 - 更新 AccountManager 类,添加冠新用户信息获取方法 - 调整 GlobalValue 中的 appType 和 gxToken 字段 - 更新相关 API 配置 - 修改页面组件,支持冠新用户类型和厂商选择 --- src/main/ets/view/SafeView.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/ets/view/SafeView.ets b/src/main/ets/view/SafeView.ets index e30b727..519f0d3 100644 --- a/src/main/ets/view/SafeView.ets +++ b/src/main/ets/view/SafeView.ets @@ -57,7 +57,7 @@ export struct SafeView { this.customBuilderParam() } .padding({ - top: this.isImmersive ? 0 : WindowHelper.topRectHeight + 44, + top: this.isImmersive ? 0 : this.hideNavBar ? 44 : WindowHelper.topRectHeight + 44, bottom: this.isImmersive ? 0 : WindowHelper.bottomRectHeight }) .align(Alignment.Top)