vue PC端完成电子签名

最近接到一任务,有一个功能,重来没有遇到过。就是电子签名

 看了原型其他基本都是对接口、写表单,难度不大,先把电子签名给攻克了起。

先贴效果图

 

 因为项目是vue 开发的,所以使用了 vue-esign 组件

1. 安装依赖

npm install vue-esign --save

2.使用

因为有许多地方要用到,就写了个组件

<template>
  <div>
    
    <el-card class="qianming-container" body-style="padding:0px">
      <vue-esign
        ref="esign"
        :isCrop="isCrop"
        :width="600"
        :height="300"
        :lineWidth="lineWidth"
        :lineColor="lineColor"
        :format="'image/png'"
        :bgColor.sync="bgColor"
      ></vue-esign>
      <div class="contro-container">
        <el-button type="danger" @click="handleReset">清空画板</el-button>
        <el-button type="primary" @click="handleGenerate">确认签名</el-button>
      </div>
    </el-card>
  </div>
</template>
  
<script>
import vueEsign from "vue-esign";
export default {
  components: { vueEsign },
  name: "Qianming",
  data() {
    return {
      lineWidth: 6,
      lineColor: "#000000",
      bgColor: "",
      resultImg: "",
      isCrop: false,
    };
  },
  methods: {
    //清空画板..
    handleReset() {
      this.$refs.esign.reset();
      this.resultImg = "";
    },
    //生成签名图片..
    handleGenerate() {
        this.$refs["esign"].generate().then((res) => {
              this.resultImg = res; // 得到了签字生成的base64图片
              this.$emit("setsignin",res)
                // 也可以转换成在线地址
               //this.dataURLtoFile(res)
            
        }).catch((err) => {
          //  没有签名,点击生成图片时调用
          this.$message({
            message: err + " 未签名!",
            type: "warning",
          });
        });
    },
   
    //将base64 上传到服务器,转换成在线地址
    dataURLtoFile(res) {
      const file = this.dataURItoBlob(res)
        let formData = new FormData()
        formData.append("file",file);
        // 上传图片
        uploadFile(formData).then(result=>{
            this.$emit("setsignin",result.data)
        })
    },
    dataURItoBlob(base64Data) {
      var byteString;
      if(base64Data.split(',')[0].indexOf('base64') >= 0)
        byteString = atob(base64Data.split(',')[1]);
      else{
        byteString = unescape(base64Data.split(',')[1]);
      }
      var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
      var ia = new Uint8Array(byteString.length);
      for(var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
      }
      var blob = new Blob([ia], {
        type: mimeString
      });
      return blob;
    },
  },
};
</script>
  
<style scoped>
button {
  height: 40px;
} 
 .contro-container {
  width: 600px;
  height: 50px;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-around;
  background-color: #d3d3d3;
  position: absolute;
  bottom: 0px;
}
.qianming-container {
  width: 600px;
  height: 350px;
  margin: 10px auto;
  position: relative;
}
.text {
  font-size: 14px;
}
.item {
  margin-bottom: 18px;
}
.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both;
}
.box-card {
  width: 95%;
  margin-left: 2.5%;
  margin-top: 20px;
}
</style>
  
  

3.使用组件

template--------------

<el-form-item label="电子签名">
              <div  @click="signinVisible=true" style="width: 200px;background-color: #d9d9d9;">
                <el-image :src="signinimg" style="width: 200px;height: 100px;display: flex;align-items: center;justify-content: center;color: #999;">
                  <div slot="error" >
                     点击签名
                  </div>
                </el-image>
              </div>
</el-form-item> 


<el-dialog title="电子签名" :visible.sync="signinVisible" width="700px">
       
          <signinDia @setsignin="setsignin"></signinDia>
        
      </el-dialog>


js----------

 import signinDia from "@/components/signinDia.vue"
components: {
     signinDia
    },

 setsignin(img){
        this.signinimg=img
        this.signinVisible=false
      },

组件目前是返回bas64格式,我觉得要把他转换成在线图片,然后再存起来,具体的等写到这时和后端商量吧

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三线码工

码字不易,有钱打赏,没打钱点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值