| | |
| | | style="width: 100%; cursor: pointer;" |
| | | @click="showModal = true" |
| | | /> |
| | | |
| | | <!-- <div class="signature-area"> |
| | | <h4>请完成电子签名</h4> |
| | | <vue-signature-pad |
| | | ref="mySignaturePad" |
| | | class="signature-canvas" |
| | | :options="signatureOptions" |
| | | ></vue-signature-pad> |
| | | <div class="signature-btns"> |
| | | <button @click="clearSignature" class="btn-clear">清空签名</button> |
| | | <button @click="confirmSignature" class="btn-confirm" :disabled="!isAgree || !hasSignature">确认签名</button> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="signature-preview" v-if="signatureImg"> |
| | | <h4>签名预览</h4> |
| | | <img :src="signatureImg" alt="电子签名" /> |
| | | </div> --> |
| | | |
| | | |
| | | <!-- 模态框,用于显示放大的图片 --> |
| | | <div |
| | |
| | | </template> |
| | | <script> |
| | | import * as api from "@/axios/api"; |
| | | import VueSignaturePad from 'vue-signature-pad' |
| | | export default { |
| | | name: "about", |
| | | components: { |
| | | VueSignaturePad |
| | | }, |
| | | created() { |
| | | var that = this; |
| | | //接收页面传值 |
| | |
| | | title: this.$t("jy314"), |
| | | type: 0, |
| | | userInfo: {}, |
| | | showModal: false |
| | | showModal: false, |
| | | signatureImg: '', |
| | | isAgree: false, |
| | | hasSignature: false, |
| | | signatureOptions: { |
| | | penColor: '#000000', |
| | | penWidth: 2, |
| | | }, |
| | | signatureInstance: null |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.getUserInfo(); |
| | | // vue-signature-pad@2.x 的实例在 this.$refs.xxx.signaturePad 里 |
| | | this.signatureInstance = this.$refs.mySignaturePad.signaturePad |
| | | // 监听签名变化,更新 hasSignature 状态 |
| | | this.$refs.mySignaturePad.$on('signatureChanged', (isEmpty) => { |
| | | this.hasSignature = !isEmpty |
| | | }) |
| | | }, |
| | | methods: { |
| | | async getUserInfo() { |
| | |
| | | this.userInfo = data.data; |
| | | } else { |
| | | } |
| | | }, |
| | | // 清空签名(调用真实实例的方法) |
| | | clearSignature() { |
| | | if (this.signatureInstance) { |
| | | this.signatureInstance.clear() |
| | | this.signatureImg = '' |
| | | this.hasSignature = false |
| | | } else { |
| | | alert('签名组件未初始化!') |
| | | } |
| | | }, |
| | | // 确认签名(调用真实实例的方法) |
| | | confirmSignature() { |
| | | if (!this.isAgree) { |
| | | alert('请先阅读并同意用户协议!') |
| | | return |
| | | } |
| | | if (this.signatureInstance) { |
| | | // 检查是否有签名 |
| | | if (!this.signatureInstance.isEmpty()) { |
| | | // 导出 Base64 图片 |
| | | this.signatureImg = this.signatureInstance.toDataURL('image/png') |
| | | this.hasSignature = true |
| | | this.submitAgreement() |
| | | } else { |
| | | alert('请先完成电子签名!') |
| | | } |
| | | } else { |
| | | alert('签名组件未初始化!') |
| | | } |
| | | }, |
| | | // 提交协议 |
| | | submitAgreement() { |
| | | const submitData = { |
| | | userId: '当前用户ID', |
| | | isAgree: this.isAgree, |
| | | signature: this.signatureImg, |
| | | agreeTime: new Date().getTime() |
| | | } |
| | | console.log('提交数据:', submitData) |
| | | alert('签名成功,协议已提交!') |
| | | } |
| | | } |
| | | }; |
| | |
| | | |
| | | |
| | | <style scoped> |
| | | .agreement-page { |
| | | padding: 20px; |
| | | max-width: 800px; |
| | | margin: 0 auto; |
| | | } |
| | | .agreement-content { |
| | | margin-bottom: 30px; |
| | | } |
| | | .agreement-text { |
| | | height: 200px; |
| | | overflow-y: auto; |
| | | padding: 10px; |
| | | border: 1px solid #eee; |
| | | margin: 10px 0; |
| | | } |
| | | .agreement-check { |
| | | margin: 10px 0; |
| | | font-size: 14px; |
| | | } |
| | | .signature-area { |
| | | margin: 20px 0; |
| | | } |
| | | .signature-canvas { |
| | | width: 100%; |
| | | height: 200px; |
| | | border: 1px dashed #ccc; |
| | | margin: 10px 0; |
| | | } |
| | | .signature-btns { |
| | | margin: 10px 0; |
| | | } |
| | | .btn-clear, .btn-confirm { |
| | | padding: 8px 16px; |
| | | margin-right: 10px; |
| | | border: none; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | } |
| | | .btn-clear { |
| | | background: #eee; |
| | | color: #333; |
| | | } |
| | | .btn-confirm { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | .btn-confirm:disabled { |
| | | background: #ccc; |
| | | cursor: not-allowed; |
| | | } |
| | | .signature-preview { |
| | | margin-top: 20px; |
| | | } |
| | | .signature-preview img { |
| | | max-width: 300px; |
| | | border: 1px solid #eee; |
| | | } |
| | | .modal { |
| | | position: fixed; |
| | | top: 0; |