uniapp小程序实现横屏手写签名

news/2024/9/18 20:48:21/ 标签: uni-app, 小程序

在这里插入图片描述

<template><view class="signBox column-me"><!-- 这个是自定义的title-可根据自己封装的title的作为调整 --><status-bar title="电子签名" :bgColor="null"></status-bar><view class="topHint">请绘制清晰可辨的签名并保存</view><canvas class="canvas flex1" :canvas-id="cid" :id="cid" @touchstart="touchstart" @touchmove="touchmove"@touchend="touchend" :disable-scroll="true"></canvas><view class="btn margin-top10 margin-bottom10"><view class="cancelBtn" @click="reWrite">重写</view><view class="saveBtn margin-left30" @click="save">保存</view></view></view>
</template><script>export default {components: {},data() {return {line: [],radius: 0,taskId: '',//以下与签名有关参数dom: null,cid: 'canvas', //画布idStrokes: [],showCanvasDialog: false,canvasImg: '', //签名图片}},onLoad(e) {this.taskId = e.taskId},computed: {},mounted: function() {let that = thisthis.initCanvas()},methods: {initCanvas() {let that = thisthis.$nextTick(function() {this.dom = uni.createCanvasContext(this.cid, this);var query = wx.createSelectorQuery();query.select('#canvas').boundingClientRect();query.exec(function(res) {let widths = res[0].widthlet heights = res[0].heightthat.dom.rect(0, 0, widths, heights)that.dom.setFillStyle('#FFFFFF')that.dom.fill()that.dom.draw()})});},touchstart(e) {this.Strokes.push({imageData: null,style: {color: '#000000',lineWidth: '3',},points: [{x: e.touches[0].x,y: e.touches[0].y,type: e.type,}]})this.drawLine(this.Strokes[this.Strokes.length - 1], e.type);},touchmove(e) {this.Strokes[this.Strokes.length - 1].points.push({x: e.touches[0].x,y: e.touches[0].y,type: e.type,})this.drawLine(this.Strokes[this.Strokes.length - 1], e.type);},touchend(e) {if (this.Strokes[this.Strokes.length - 1].points.length < 2) { //当此路径只有一个点的时候this.Strokes.pop();}},drawLine(StrokesItem, type) {if (StrokesItem.points.length > 1) {this.dom.setLineCap('round')this.dom.setStrokeStyle(StrokesItem.style.color);this.dom.setLineWidth(StrokesItem.style.lineWidth);this.dom.moveTo(StrokesItem.points[StrokesItem.points.length - 2].x, StrokesItem.points[StrokesItem.points.length -2].y);this.dom.lineTo(StrokesItem.points[StrokesItem.points.length - 1].x, StrokesItem.points[StrokesItem.points.length -1].y);this.dom.stroke();this.dom.draw(true);}},//重写签名reWrite() {this.Strokes = [];this.dom.draw();this.initCanvas()},// 保存图片save() {let that = thisuni.canvasToTempFilePath({canvasId: 'canvas',fileType: 'png',quality: 1, //图片质量success: function(res) {let imgs = [res.tempFilePath]that.$.upload_img(imgs, 0, res => {let imgUrl = res.data //签名图片let mediaUrl = that.$.get_data('mediaUrl') //采集图片if (that.$.isEmpty(mediaUrl)) {mediaUrl = ''}that.$.ajax("POST", "/customer/user/checkTask", {taskId: that.taskId,status: 1, //状态:1同意2拒绝  signImage: imgUrl,userVideo: mediaUrl,}, (res) => {if (res.code === 1000) {that.$.ti_shi(res.message)setTimeout(() => {uni.$emit('signOk')that.$.back()}, 1000)} else {that.$.ti_shi(res.message)}});})},fail(e) {console.log(e)}})}}}
</script><style scoped lang="less">.signBox {position: relative;overflow: hidden;background-color: #F6F6F6;height: 100vh;width: 100vw;.canvas {width: 100%;background: #FFFFFF;}.topHint {width: 100%;height: 60rpx;line-height: 60rpx;font-size: 28rpx;color: #6D7984;text-align: center;background: ;}.btn {width: 100%;height: 132rpx;display: flex;align-items: center;justify-content: center;.saveBtn {width: 300rpx;height: 88rpx;line-height: 88rpx;background: #215AA0;border-radius: 20rpx;text-align: center;font-size: 32rpx;color: #FFFFFF;}.cancelBtn {width: 298rpx;height: 86rpx;line-height: 86rpx;background: #FFFFFF;border-radius: 20rpx;text-align: center;font-size: 32rpx;color: #202233;border: 1px solid #BBC4CC;}}}
</style>

http://www.ppmy.cn/news/1518768.html

相关文章

贪心算法---加油站

题目&#xff1a; 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数…

用 CSS 实现太阳系运行效果

介绍实现最终效果结语介绍 在编程的浩瀚宇宙中,我们总是在探索能够以最简洁的方式创造出最酷炫效果的方法。而使用 CSS 制作响应式太阳系,绝对能提升你的编程乐趣。 如何用 CSS 实现这个神奇的太阳系呢?关键在于巧妙运用 CSS 的动画、定位和尺寸属性。通过定义不同的元素来…

【论文阅读】基于生成对抗网络的模型窃取方法的研究(2021)

Research on Model Stealing Method Based on Generative Adversarial Networks 提出了一种基于生成对抗网络的模型窃取方法——GBMS(Generative adversarial networks Based Model Stealing method)&#xff0c;GBMS允许攻击者在没有真实数据的情况下训练替代模型&#xff0c;…

数据导出为Excel接口报错:java.io.IOException: UT010029: Stream is closed

在Spring框架中&#xff0c;开发过程中经常需要实现数据的导出功能&#xff0c;尤其是将数据导出为Excel文件。然而&#xff0c;在实现这样的功能时&#xff0c;可能会遇到一些意料之外的错误&#xff0c;比如java.io.IOException: UT010029: Stream is closed。本文将基于一个…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术&#xff0c;它通常依赖于云存储服务来实现。在Java中&#xff0c;实现云同步功能通常需要与云服务提供商的API进行交互&#xff0c;如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

Web自动化测试实战--博客系统

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;测试&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.项目效果展示 2.编写web测试用例 3.自动化测试脚本开发 3.1创建空项目 引…

YeAudio音频工具的介绍和使用

夜雨飘零音频工具 这款Python音频处理工具功能强大&#xff0c;支持读取多种格式的音频文件。它不仅能够对音频进行裁剪、添加混响、添加噪声等多种处理操作&#xff0c;还广泛应用于语音识别、语音合成、声音分类以及声纹识别等多个项目领域。 安装 使用pip安装。 pip ins…

设计模式-结构型模式-享元模式

1.享元模式定义 摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;从而让我们能在有限的内存容量中载入更多对象&#xff1b; 1.1 享元模式优缺点 优点 极大减少内存中相似或相同对象数量&#xff0c;节约系统资源&#xff0c…

window下kafka3启动多个

准备工作 我们先安装好kafka&#xff0c;并保证启动成功&#xff0c;可参考文章Windows下安装Kafka3-CSDN博客 复制kafka安装文件 kafka3已经内置了zookeeper&#xff0c;所以直接复制就行了 修改zookeeper配置文件 这里我们修改zookeeper配置文件&#xff0c;主要是快照地址…

前端的面试题

Class 与 Style 如何动态绑定&#xff1f; 对象语法&#xff1a; <div v-bind:class"{ active: isActive, text-danger: hasError }"></div> data: {isActive: true,hasError: false }数组语法&#xff1a; <div v-bind:class"[isActive ? acti…

使用tinyxml向xml文件中插入数据

目前已有一个xml文件&#xff0c;内容如下所示。想要在这个文件中间插入一个数据。tinyxml库比较好用。 1.下载tinyxml库文件并添加进工程 在网上下载好tinyxml的库文件&#xff0c;然后放入项目目录中 在qt工程中点击【添加现有文件】&#xff0c;把这6个文件添加进来 2.使…

【WPF】WPF学习之【二】布局学习

WPF布局学习 常用布局Grid网格布局StackPanel 布局CanvasDockPanel布局WrapPanel布局 常用布局 1、StackPanel: 学习如何使用StackPanel进行垂直和水平布局。 2、Grid: 掌握Grid的网格布局技术。 3、Canvas: 了解Canvas的绝对定位布局。 4、DockPanel: 学习DockPanel的停靠…

python基础(15多线程编程介绍)

python系列文章目录 python基础&#xff08;01变量&数据类型&运算符&#xff09; python基础&#xff08;02序列共性&#xff09; python基础(03列表和元组) python基础&#xff08;04字符串&字典&#xff09; python基础&#xff08;05集合set&#xff09; pytho…

滚雪球学MyBatis-Plus(02):环境准备

环境准备 本地开发环境参考如下&#xff1a; 开发工具&#xff1a;IntelliJ IDEA 2021.3.2JDK版本&#xff1a; JDK 1.8Spring Boot版本&#xff1a;2.3.1.RELEASEMaven版本&#xff1a;Apache Maven 3.8.2MySQL&#xff1a;5.6 前言 在上期内容中&#xff0c;我们系统地介绍了…

【UE5】UMG C++父类绑定蓝图子类属性

有时我们在设计UMG时可能会使用到C父类来处理一些通用逻辑&#xff0c;如果我们想要在C父类中获取其派生子类的某个属性&#xff0c;如Image或Button等&#xff0c;我们可以通过使用UE提供的BindWidget元数据标签的方式来获取。 BindWidget BindWidget元数据标签在官方文档中…

【GIS系列】多源异构原始影像解析:策略模式与规则引擎的应用

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 1. 前言 在遥感技术和地球观测领域&#…

学习记录——day37 C++ 基础概念 字符串 命名空间

目录 一、C相关概念 二、面向对象 三、C框架 四、输出流对象&#xff1a;cout 五、输入流对象 cin 六、输入流对象 输出流对象 示例 1、大小写转换 2、输出斐波那契数列 3、进制转换 宽度 精度 七、命名空间 namespace 1、命名空间的意义 2、程序中的标识符&#xff0…

【学习笔记】第三章深度学习基础——Datawhale X李宏毅苹果书 AI夏令营

局部极小值与鞍点 梯度为0的点我们统称为临界点&#xff0c;包括局部极小值、鞍点等 局部极小值和鞍点的梯度都为0&#xff0c;那如何判断呢&#xff1f; 先请出我们损失函数&#xff1a;L(θ)&#xff0c;θ是模型中的参数的取值&#xff0c;是一个向量。 由于网络的复杂性&a…

React基础面试题

React 面试题 以下是面试官最有可能问到的 50 个 React 面试题和答案。为方便你学习&#xff0c;我对它们进行了分类&#xff1a; 基本知识React 组件React ReduxReact 路由 基本知识 1. 区分Real DOM和Virtual DOM Real DOMVirtual DOM1. 更新缓慢。1. 更新更快。2. 可以…

那么多编程语言,先学哪个?

简单介绍一下几种主要的语言&#xff1a; C&#xff0c;是一种面向对象的编程语言&#xff0c;常用于开发游戏、操作系统和嵌入式系统等性能要求比较高的场景。如果你对这些领域感兴趣&#xff0c;C是一个很好的选择。 Java&#xff0c;也是面向对象的编程语言&#xff0c;特点…