SignDialog.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <template>
  2. <el-dialog v-model="signDialogVisible" title="签名" width="935">
  3. <div class="position-relative">
  4. <Vue3Signature class="b b-solid b-gray" ref="signature" w="900px" h="400px" />
  5. <el-button
  6. class="pos-absolute bottom-20px right-10px"
  7. type="primary"
  8. text
  9. size="small"
  10. @click="signature.clear()"
  11. >
  12. <Icon icon="ep:delete" class="mr-5px" />
  13. 清除
  14. </el-button>
  15. </div>
  16. <template #footer>
  17. <div class="dialog-footer">
  18. <el-button @click="signDialogVisible = false">取消</el-button>
  19. <el-button type="primary" @click="submit"> 提交 </el-button>
  20. </div>
  21. </template>
  22. </el-dialog>
  23. </template>
  24. <script setup lang="ts">
  25. import Vue3Signature from 'vue3-signature'
  26. import * as FileApi from '@/api/infra/file'
  27. import download from '@/utils/download'
  28. const message = useMessage() // 消息弹窗
  29. const signDialogVisible = ref(false)
  30. const signature = ref()
  31. const open = async () => {
  32. signDialogVisible.value = true
  33. }
  34. defineExpose({ open })
  35. const emits = defineEmits(['success'])
  36. const submit = async () => {
  37. message.success('签名上传中请稍等。。。')
  38. const res = await FileApi.updateFile({
  39. file: download.base64ToFile(signature.value.save('image/png'), '签名')
  40. })
  41. emits('success', res.data)
  42. signDialogVisible.value = false
  43. }
  44. </script>
  45. <style scoped></style>