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

news2024/11/16 18:09:27

在这里插入图片描述

<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', //画布id
        Strokes: [],
        showCanvasDialog: false,
        canvasImg: '', //签名图片
      }
    },
    onLoad(e) {
      this.taskId = e.taskId
    },
    computed: {},
    mounted: function() {
      let that = this
      this.initCanvas()
    },
    methods: {
      initCanvas() {
        let that = this
        this.$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].width
            let heights = res[0].height
            that.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 = this
        uni.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.coloradmin.cn/o/2090712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

x264 编码器 AArch64汇编系列:zigzag 扫描相关汇编函数

zigzag 在x264_zigzag_init函数中初始化具体的 zigzag 实现函数: 以scan_4x4为例 c 语言实现 4x4 变换块扫描:zigzag_scan_4x4_frame。#define ZIGZAG4_FRAME\ZIGDC( 0,

QGraphicsview相关学习

文章学习自&#xff1a; Qt_绘图框架_QGraphicsview实现缩放移动图片_Livy0123的博客-CSDN博客 这里进行一些自己的分析和理解。 (1) 自定义类MyGraphicsView继承自QGraphicsView 核心是重定义的滚轮事件。 void MyGraphicsView::wheelEvent(QWheelEvent *ev) {if(Qt::CT…

房产报备小程序房产报备系统源码搭建方案

房产客户报备小程序开发&#xff0c;php开发语言&#xff0c;前端是uniapp。 房产报备小程序三个端&#xff1a;报备端&#xff08;经纪人报备客户&#xff09;&#xff0c;确客端&#xff08;员工确认报备的客户&#xff09;&#xff0c;管理后台 一 报备端 经纪人报备客户…

生物制药中的AI困境:创新突破还是过度炒作?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Your Diffusion Model is Secretly a Zero-Shot Classifier论文阅读笔记

Your Diffusion Model is Secretly a Zero-Shot Classifier论文阅读笔记 这篇文章我感觉在智源大会上听到无数个大佬讨论&#xff0c;包括OpenAI Sora团队负责人&#xff0c;谢赛宁&#xff0c;好像还有杨植麟。虽然这个文章好像似乎被引量不是特别高&#xff0c;但是和AI甚至…

使用 streamlink 把 m3u8 转为 mp4

问题描述&#xff0c; 背景&#xff0c; 来源&#xff1a; 下载 m3u8 ts —> 转为mp4, 按照以往的做法&#xff0c; 就是使用 python requests 一步一步地下载 m3u8, ts&#xff0c; 然后转换。 但是个人写的东西&#xff0c;毕竟问题比较多。 而且&#xff0c; 但是&…

坑——Redis集群key事件通知

redis集群的key事件通知不像普通的订阅发布消息&#xff0c;普通的订阅发布&#xff0c;在任何一个节点订阅通道&#xff0c;都可以收到消息&#xff0c;但是集群的key事件通知只在key所在的主从节点发出通知&#xff0c;只能通过订阅这个key所在的主从节点收到消息&#xff1b…

Leetcode3240. 最少翻转次数使二进制矩阵回文 II

Every day a Leetcode 题目来源&#xff1a;3240. 最少翻转次数使二进制矩阵回文 II 解法1&#xff1a;分类讨论 特殊情况&#xff1a; 讨论正中间一排&#xff08;如果 m 是奇数&#xff09;和正中间一列&#xff08;如果 n 是奇数&#xff09;中的格子要如何翻转。 综上所…

Qt Creator 配置pcl1.14.1

1.安装pcl1.14.1 地址&#xff1a;Releases PointCloudLibrary/pcl (github.com) 下载前两个 下载完成后双击exe文件&#xff0c;修改一下安装路径&#xff0c;然后一路下一步。 OpenNI2 默认安装到C:\Program Files 下了&#xff0c;想修改OpenNI2 的安装路径&#xff0c;可…

Unity 动态光照贴图,加载后显示变暗或者变白问题 ReflectionProbe的使用

动态加载光照贴图代码&#xff0c;可参考这个帖子 Unity 预制动态绑定光照贴图遇到变白问题_unity urp 动态加载光照信息 变黑-CSDN博客 这次遇到的问题是&#xff0c;在编辑器下光照贴图能正常显示&#xff0c;打出apk后光照贴图加载后变黑的问题 以下4张图代表4种状态&…

网页正文提取算法:行块分布算法 Readability

前提 爬取百度、搜狗、必应等搜索引擎时&#xff0c;详情页的正文因来源多样而无法简单通过通用的规则来匹配&#xff0c;这就需要相关的提取算法。 本文在此介绍两种网页正文提取算法&#xff1a;行块分布算法 & Readability。 行块分布算法 算法流程 算法依据 HTML 每…

Feign的原理及概念

1.什么是Feign Feign是Netflix开发的声明式、模板化的HTTP客户端&#xff0c;Feign可帮助我们更加便捷、优雅地调用HTTP API。Feign可以做到使用HTTP请求远程服务时就像调用本地方法一样的体验&#xff0c;开发者完全感知不到这是远程方法&#xff0c;更感知不到这是个HTTP请求…

迁移学习之领域偏移(domain shift)

实际应用中很多任务的数据的标注成本很高&#xff0c;无法获得充足的训练数据&#xff0c;这种情况可以 使用迁移学习&#xff08;transfer learning&#xff09;。假设 A、B 是两个相关的任务&#xff0c;A 任务有很多训练数 据&#xff0c;就可以把从A任务中学习到的某些可以…

监控域名到期发送钉钉消息通知

目的 想象一下&#xff0c;域名到期都不知道&#xff0c;忘了续费&#xff0c;就像忘了交房租&#xff0c;房东&#xff08;互联网&#xff09;会毫不留情地把你扫地出门&#xff01;所以&#xff0c;及时续费&#xff0c;让顾客轻松找到你&#xff0c;生意红红火火&#xff0…

掌握测试的艺术:深入探索Python的pytest库

文章目录 **掌握测试的艺术&#xff1a;深入探索Python的pytest库**背景&#xff1a;为什么选择pytest&#xff1f;pytest是什么&#xff1f;如何安装pytest&#xff1f;5个简单的库函数使用方法1. pytest.main()2. pytest.skip()3. pytest.mark.parametrize()4. pytest.raises…

从跟跑到领跑:AIGC时代国产游戏的崛起与展望

文章目录 一、技术深度挖掘1.图形渲染与视觉盛宴2.物理引擎的精细化与真实性3.AI技术的深度融入与创新 二、行业影响深度剖析1.产业链的全面升级2.IT人才需求的多元化与高端化3.文化输出与国际影响力的增强 三、未来趋势与跨界合作1.技术创新引领未来2.跨界合作拓展市场 四、代…

VLM(视觉语言模型)综述

概述 大型语言模型的出现标志着人工智能领域转型的开始&#xff0c;它们在文本信息处理上的能力极大地推动了这一进程。尽管LLMs在文本处理上表现出色&#xff0c;但它们主要限于处理单一模态的数据&#xff0c;即文本。这限制了它们在理解和生成涉及图像和视频等多模态数据方…

最新华为OD机试-E卷-流浪地球(100分)-五语言题解(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

XSS LABS - Level 20 过关思路

关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客 0x01:环境配置 提示:Flash 逆向工具 JPEXS 配置请看 Level 19 的过关流程,这里就不重新教怎么安装配置了。 要想完成本关,需要下载 Flash,不然就会出现下面的情况: 我个人建议,是直接下载一个 Flash…

HUD杂散光环境模拟测试设备

概述 HUD&#xff08;Head-Up Display&#xff09;杂散光环境模拟测试设备是用于模拟飞行器在实际运行过程中可能遇到的多种光照环境的系统。它主要用于测试和验证HUD显示系统的性能&#xff0c;确保其能在各种光线条件下清晰、准确地显示信息&#xff0c;从而保障飞行员在复杂…