当前位置:   article > 正文

vue PC端完成电子签名_vue 电子签名

vue 电子签名

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

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

先贴效果图

 

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

1. 安装依赖

npm install vue-esign --save

2.使用

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

  1. <template>
  2. <div>
  3. <el-card class="qianming-container" body-style="padding:0px">
  4. <vue-esign
  5. ref="esign"
  6. :isCrop="isCrop"
  7. :width="600"
  8. :height="300"
  9. :lineWidth="lineWidth"
  10. :lineColor="lineColor"
  11. :format="'image/png'"
  12. :bgColor.sync="bgColor"
  13. ></vue-esign>
  14. <div class="contro-container">
  15. <el-button type="danger" @click="handleReset">清空画板</el-button>
  16. <el-button type="primary" @click="handleGenerate">确认签名</el-button>
  17. </div>
  18. </el-card>
  19. </div>
  20. </template>
  21. <script>
  22. import vueEsign from "vue-esign";
  23. export default {
  24. components: { vueEsign },
  25. name: "Qianming",
  26. data() {
  27. return {
  28. lineWidth: 6,
  29. lineColor: "#000000",
  30. bgColor: "",
  31. resultImg: "",
  32. isCrop: false,
  33. };
  34. },
  35. methods: {
  36. //清空画板..
  37. handleReset() {
  38. this.$refs.esign.reset();
  39. this.resultImg = "";
  40. },
  41. //生成签名图片..
  42. handleGenerate() {
  43. this.$refs["esign"].generate().then((res) => {
  44. this.resultImg = res; // 得到了签字生成的base64图片
  45. this.$emit("setsignin",res)
  46. // 也可以转换成在线地址
  47. //this.dataURLtoFile(res)
  48. }).catch((err) => {
  49. // 没有签名,点击生成图片时调用
  50. this.$message({
  51. message: err + " 未签名!",
  52. type: "warning",
  53. });
  54. });
  55. },
  56. //将base64 上传到服务器,转换成在线地址
  57. dataURLtoFile(res) {
  58. const file = this.dataURItoBlob(res)
  59. let formData = new FormData()
  60. formData.append("file",file);
  61. // 上传图片
  62. uploadFile(formData).then(result=>{
  63. this.$emit("setsignin",result.data)
  64. })
  65. },
  66. dataURItoBlob(base64Data) {
  67. var byteString;
  68. if(base64Data.split(',')[0].indexOf('base64') >= 0)
  69. byteString = atob(base64Data.split(',')[1]);
  70. else{
  71. byteString = unescape(base64Data.split(',')[1]);
  72. }
  73. var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
  74. var ia = new Uint8Array(byteString.length);
  75. for(var i = 0; i < byteString.length; i++) {
  76. ia[i] = byteString.charCodeAt(i);
  77. }
  78. var blob = new Blob([ia], {
  79. type: mimeString
  80. });
  81. return blob;
  82. },
  83. },
  84. };
  85. </script>
  86. <style scoped>
  87. button {
  88. height: 40px;
  89. }
  90. .contro-container {
  91. width: 600px;
  92. height: 50px;
  93. display: flex;
  94. flex-direction: row;
  95. align-items: center;
  96. justify-content: space-around;
  97. background-color: #d3d3d3;
  98. position: absolute;
  99. bottom: 0px;
  100. }
  101. .qianming-container {
  102. width: 600px;
  103. height: 350px;
  104. margin: 10px auto;
  105. position: relative;
  106. }
  107. .text {
  108. font-size: 14px;
  109. }
  110. .item {
  111. margin-bottom: 18px;
  112. }
  113. .clearfix:before,
  114. .clearfix:after {
  115. display: table;
  116. content: "";
  117. }
  118. .clearfix:after {
  119. clear: both;
  120. }
  121. .box-card {
  122. width: 95%;
  123. margin-left: 2.5%;
  124. margin-top: 20px;
  125. }
  126. </style>

3.使用组件

  1. template--------------
  2. <el-form-item label="电子签名">
  3. <div @click="signinVisible=true" style="width: 200px;background-color: #d9d9d9;">
  4. <el-image :src="signinimg" style="width: 200px;height: 100px;display: flex;align-items: center;justify-content: center;color: #999;">
  5. <div slot="error" >
  6. 点击签名
  7. </div>
  8. </el-image>
  9. </div>
  10. </el-form-item>
  11. <el-dialog title="电子签名" :visible.sync="signinVisible" width="700px">
  12. <signinDia @setsignin="setsignin"></signinDia>
  13. </el-dialog>
  14. js----------
  15. import signinDia from "@/components/signinDia.vue"
  16. components: {
  17. signinDia
  18. },
  19. setsignin(img){
  20. this.signinimg=img
  21. this.signinVisible=false
  22. },

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/893593
推荐阅读
相关标签
  

闽ICP备14008679号