Commit 636c2518 by 毛勇泽

签字+文件选择

parent 39dddc0d
...@@ -2,6 +2,7 @@ import UIAbility from '@ohos.app.ability.UIAbility'; ...@@ -2,6 +2,7 @@ import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog'; import hilog from '@ohos.hilog';
import window from '@ohos.window'; import window from '@ohos.window';
import database from '../database/database' import database from '../database/database'
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { import {
StatusBarManager StatusBarManager
} from '@ohos/common'; } from '@ohos/common';
...@@ -11,6 +12,18 @@ export default class EntryAbility extends UIAbility { ...@@ -11,6 +12,18 @@ export default class EntryAbility extends UIAbility {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
// 初始化数据库 // 初始化数据库
// database.initDB(this.context) // 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() { onDestroy() {
......
...@@ -26,18 +26,25 @@ export class FileWR{ ...@@ -26,18 +26,25 @@ export class FileWR{
}); });
} }
/*创建文件目录*/ /*创建文件目录*/
createFileMkdir(path?:string){ async createFileMkdir(path?:string){
let filePath=filesDir+path let filePath=filesDir+path
console.log("创建文件目录路径"+filePath) console.log("创建文件目录路径"+filePath)
if(fs.access(filePath)){ try {
console.log("文件已存在") let access=await this.accessFile(filePath)
return 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{ readFile(path?:string):string{
let filePath = '/data/storage/el2/base/haps/entry/files/systemFile/serialNumber.txt'; let filePath = '/data/storage/el2/base/haps/entry/files/systemFile/serialNumber.txt';
...@@ -51,6 +58,42 @@ export class FileWR{ ...@@ -51,6 +58,42 @@ export class FileWR{
fs.closeSync(file); fs.closeSync(file);
return buf.toString(); 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() export default new FileWR()
\ No newline at end of file
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
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
...@@ -7,6 +7,15 @@ ...@@ -7,6 +7,15 @@
"requestPermissions": [ "requestPermissions": [
{ {
"name": "ohos.permission.INTERNET" "name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.READ_MEDIA"
},
{
"name": "ohos.permission.WRITE_MEDIA"
},
{
"name": "ohos.permission.CAMERA"
} }
], ],
"deviceTypes": [ "deviceTypes": [
......
...@@ -58,6 +58,8 @@ ...@@ -58,6 +58,8 @@
"pages/metailmange/WzOutPage/WzOutDetail/WzOutDetail", "pages/metailmange/WzOutPage/WzOutDetail/WzOutDetail",
"pages/package/ReceivePack", "pages/package/ReceivePack",
"pages/metailmange/Common/WzinsertDetail", "pages/metailmange/Common/WzinsertDetail",
"pages/metailmange/Common/WzDetail" "pages/metailmange/Common/WzDetail",
"pages/fielselect/FileSelectionPage",
"pages/fielselect/SignCanvasPage"
] ]
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论