Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jump_hm_warehouse
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
毛勇泽
jump_hm_warehouse
Commits
636c2518
Commit
636c2518
authored
Jan 30, 2024
by
毛勇泽
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
签字+文件选择
parent
39dddc0d
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
317 行增加
和
10 行删除
+317
-10
EntryAbility.ets
entry/src/main/ets/entryability/EntryAbility.ets
+13
-0
FileWR.ets
entry/src/main/ets/io/FileWR.ets
+53
-9
FileSelectionPage.ets
entry/src/main/ets/pages/fielselect/FileSelectionPage.ets
+108
-0
SignCanvasPage.ets
entry/src/main/ets/pages/fielselect/SignCanvasPage.ets
+131
-0
module.json5
entry/src/main/module.json5
+9
-0
main_pages.json
entry/src/main/resources/base/profile/main_pages.json
+3
-1
没有找到文件。
entry/src/main/ets/entryability/EntryAbility.ets
View file @
636c2518
...
...
@@ -2,6 +2,7 @@ import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';
import database from '../database/database'
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import {
StatusBarManager
} from '@ohos/common';
...
...
@@ -11,6 +12,18 @@ export default class EntryAbility extends UIAbility {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
// 初始化数据库
// database.initDB(this.context)
let atManager = abilityAccessCtrl.createAtManager();
try {
atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA","ohos.permission.READ_MEDIA","ohos.permission.WRITE_MEDIA"]).then((data) => {
console.info("data:" + JSON.stringify(data));
console.info("data permissions:" + data.permissions);
console.info("data authResults:" + data.authResults);
}).catch((err) => {
console.info("data:" + JSON.stringify(err));
})
} catch(err) {
console.log(`catch err->${JSON.stringify(err)}`);
}
}
onDestroy() {
...
...
entry/src/main/ets/io/FileWR.ets
View file @
636c2518
...
...
@@ -26,18 +26,25 @@ export class FileWR{
});
}
/*创建文件目录*/
createFileMkdir(path?:string){
async
createFileMkdir(path?:string){
let filePath=filesDir+path
console.log("创建文件目录路径"+filePath)
if(fs.access(filePath)){
console.log("文件已存在")
return
try {
let access=await this.accessFile(filePath)
if(access){
console.log("文件已存在")
return
}
// fs.mkdirSync(filePath).then(() => {
// console.info("mkdir succeed");
// }).catch((err) => {
// console.error("mkdir failed with error message: " + err.message + ", error code: " + err.code);
// });
await fs.mkdirSync(filePath)
}catch (err){
console.log("创建文件目录报错"+JSON.stringify(err))
}
fs.mkdir(filePath).then(() => {
console.info("mkdir succeed");
}).catch((err) => {
console.error("mkdir failed with error message: " + err.message + ", error code: " + err.code);
});
}
readFile(path?:string):string{
let filePath = '/data/storage/el2/base/haps/entry/files/systemFile/serialNumber.txt';
...
...
@@ -51,6 +58,42 @@ export class FileWR{
fs.closeSync(file);
return buf.toString();
}
// 读取文件下所以文件
async readFolder(path?:string, isALl = false) {
let fileList:string[]=[];
await fs.listFile(filesDir).then((filenames) => {
fileList=filenames;
}).catch((err) => {
console.info("读取异常: " + err.message + ", error code: " + err.code);
});
console.log("文件下集合==》"+JSON.stringify(fileList))
}
/**
* 检查文件是否存在
* @param filePath
*/
async accessFile(filePath: string) {
let resp = false;
await fs.access(filePath).then((res) => {
resp = res;
}).catch((err) => {
Logger.error( JSON.stringify(err));
});
return resp;
}
/**
* 获取文件详细属性信息
* @param filePath
*/
static async getFileStat(filePath: string) {
let resp;
await fs.stat(filePath).then((stat) => {
resp = stat;
}).catch((err) => {
Logger.error(JSON.stringify(err));
});
return resp;
}
}
export default new FileWR()
\ No newline at end of file
entry/src/main/ets/pages/fielselect/FileSelectionPage.ets
0 → 100644
View file @
636c2518
import { TitleBar } from '../../view/title/TitleBar'
import promptAction from '@ohos.promptAction'
import FileWR from '../../io/FileWR'
@Extend(Button) function bottomBtnSty() {
.borderWidth(1)
.padding({ top: 1, bottom: 1, right: 7, left: 7 })
.borderColor('#0fa983')
.backgroundColor('#fff')
.fontColor('#0fa983')
.borderRadius(7)
.type(ButtonType.Normal)
.stateEffect(true)
}
@Entry
@Component
struct FileSelectionPage{
private searchcontroller: SearchController = new SearchController()
@State fileList:Array<any>=[]
@Builder bottomButtons() {
Row() {
Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
Button("全选")
.bottomBtnSty()
.onClick(() => {
})
.fontColor("#0fa983")
.fontSize("14vp")
Button("清空选择")
.bottomBtnSty().fontColor("#0fa983").fontSize("14vp")
.onClick(() => {
})
Button("导入")
.bottomBtnSty()
.onClick(() => {
}).fontColor("#0fa983").fontSize("14vp")
}
}.height(50)
}
build(){
Column(){
TitleBar({ title: "文件选择" })
Row() {
Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
Search({ placeholder: '请输入文件名', controller: this.searchcontroller })
.height(40)
.backgroundColor('#F5F5F5')
.placeholderColor(Color.Grey)
.textAlign(TextAlign.Center)
.placeholderFont({ size: 14, weight: 400 })
.textFont({ size: 14, weight: 400 })
.onSubmit((value: string) => {
})
.onChange((value: string) => {
// this.searchData.wzpm = '%' + value + '%'
// this.getWzcrkList()
})
.borderRadius(5)
}.margin({left:12,right:12})
}.width("100%")
Column() {
if (this.fileList.length == 0) {
this.renderEmpty()
} else {
List() {
ForEach(this.fileList, (item) => {
ListItem() {
Row() {
// Checkbox({ name: 'checkbox1', group: 'checkboxGroup' })
// .onChange((value: boolean) => {
// if (value) {
// this.checkedList.push(item.guid)
// } else {
// this.checkedList = this.checkedList.filter(i => i !== item.guid);
// }
// })
// .margin({ right: 10, left: 10 })
// PackList({ item })
}
}
})
}.divider({ strokeWidth: 1, color: "#bbbbb1" }).backgroundColor('#fff')
}
}.flexGrow(1).padding(15)
Row() {
// 底部按钮
this.bottomButtons();
}.backgroundColor("#97c6a6").width("100%").height(60)
}.width("100%").height("100%").linearGradient({
direction: GradientDirection.RightBottom,
repeating: true,
colors: [[0x36a3c0, 0.0], [0x97c6a6, 1.0], [0xc7d799, 2.0]]
})
}
@Builder renderEmpty() {
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
Column() {
Image($r("app.media.empty")).width("42%")
Text("暂无数据").fontSize(22).fontColor("#fff").margin({ top: 5 })
}
}.height('70%')
}
onPageShow(){
FileWR.readFolder("");
}
}
\ No newline at end of file
entry/src/main/ets/pages/fielselect/SignCanvasPage.ets
0 → 100644
View file @
636c2518
import { TitleBar } from '../../view/title/TitleBar'
import promptAction from '@ohos.promptAction'
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import buffer from '@ohos.buffer';
import router from '@ohos.router';
@Extend(Button) function bottomBtnSty() {
.borderWidth(1)
.padding({ top: 1, bottom: 1, right: 7, left: 7 })
.borderColor('#0fa983')
.backgroundColor('#fff')
.fontColor('#0fa983')
.borderRadius(7)
.type(ButtonType.Normal)
.stateEffect(true)
}
@Entry
@Component
struct SignCanvasPage{
//手写路径
@State pathCommands: string = '';
canvas: CanvasRenderingContext2D = new CanvasRenderingContext2D();
path2D: Path2D = new Path2D();
@Builder bottomButtons() {
Row() {
Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
Button("返回")
.bottomBtnSty()
.onClick(() => {
router.back()
})
.fontColor("#0fa983")
.fontSize("14vp")
Button("重签")
.bottomBtnSty().fontColor("#0fa983").fontSize("14vp")
.onClick(() => {
//将路径置空
this.path2D = new Path2D();
//清空画布
this.canvas.clearRect(0, 0, this.canvas.width, this.canvas.height);
})
Button("完成签名")
.bottomBtnSty()
.onClick(() => {
this.saveImage();
}).fontColor("#0fa983").fontSize("14vp")
}
}.height(50)
}
build(){
Column(){
TitleBar({ title: "签字" })
Canvas(this.canvas)
.width('100%')
.height('80%')
.onTouch((e) => {
this.onTouchEvent(e);
}).flexGrow(1)
Row() {
// 底部按钮
this.bottomButtons();
}.backgroundColor("#97c6a6").width("100%").height(60)
}.width("100%").height("100%").linearGradient({
direction: GradientDirection.RightBottom,
repeating: true,
colors: [[0x36a3c0, 0.0], [0x97c6a6, 1.0], [0xc7d799, 2.0]]
})
}
onTouchEvent(event: TouchEvent) {
//手指按下和移动时的位置转换成像素位置
let x = (event.touches[0].x);
let y = (event.touches[0].y);
switch (event.type) {
//手指按下
case TouchType.Down:
//移动到(x,y)点
this.path2D.moveTo(x, y);
break;
//画线到(x,y)点
case TouchType.Move:
this.path2D.lineTo(x, y);
//画笔颜色
this.canvas.strokeStyle = "#000";
//画笔粗细
this.canvas.lineWidth = 5;
//画出线段
this.canvas.stroke(this.path2D);
break;
default:
break;
}
}
saveImage() {
//获取图片的base64字符串
console.log("保存图片==》")
let imageStr = this.canvas.toDataURL().split(',')[1];
console.log("图片字符串==》"+imageStr)
//文件保存路径
let uri = '';
try {
let PhotoSaveOptions = new picker.PhotoSaveOptions();
//保存图片默认名称
PhotoSaveOptions.newFileNames = ['11111.png'];
let photoPicker = new picker.PhotoViewPicker();
//调起系统的图片保存功能
photoPicker.save(PhotoSaveOptions).then((PhotoSaveResult) => {
uri = PhotoSaveResult[0];
//打开文件
let file = fs.openSync(uri, fs.OpenMode.READ_WRITE|fs.OpenMode.CREATE);
//base64字符串转成buffer
const decodeBuffer = buffer.from(imageStr, 'base64').buffer;
//写入文件
// fs.writeSync(file.fd, decodeBuffer);
fs.write(file.fd, decodeBuffer).then((writeLen) => {
console.info("write data to file succeed and size is:" + writeLen);
}).catch((err) => {
console.error("write data to file failed with error message: " + err.message + ", error code: " + err.code);
});
//关闭文件
fs.closeSync(file);
}).catch((err: Error) => {
console.error('写入报错'+err + '');
})
} catch (e) {
console.error('保存报错'+JSON.stringify(e));
}
}
}
\ No newline at end of file
entry/src/main/module.json5
View file @
636c2518
...
...
@@ -7,6 +7,15 @@
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.READ_MEDIA"
},
{
"name": "ohos.permission.WRITE_MEDIA"
},
{
"name": "ohos.permission.CAMERA"
}
],
"deviceTypes": [
...
...
entry/src/main/resources/base/profile/main_pages.json
View file @
636c2518
...
...
@@ -58,6 +58,8 @@
"pages/metailmange/WzOutPage/WzOutDetail/WzOutDetail"
,
"pages/package/ReceivePack"
,
"pages/metailmange/Common/WzinsertDetail"
,
"pages/metailmange/Common/WzDetail"
"pages/metailmange/Common/WzDetail"
,
"pages/fielselect/FileSelectionPage"
,
"pages/fielselect/SignCanvasPage"
]
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论