qrcodeedDialog.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <div>
  3. <el-dialog
  4. title="扫码签到"
  5. :visible.sync="dialogVisible"
  6. :close-on-click-modal="false"
  7. :close-on-press-escape="false"
  8. :append-to-body="true"
  9. class="qrcode-dialog"
  10. width="50%"
  11. top="6vh"
  12. center
  13. >
  14. <div class="codePic">
  15. <div id="qrcode" ref="qrcodes" class="qrCode" />
  16. </div>
  17. <span slot="footer" class="dialog-footer">
  18. <el-button type="primary" @click="downloadCode()">下载二维码</el-button>
  19. <el-button @click="dialogVisible = false">关 闭</el-button>
  20. </span>
  21. </el-dialog>
  22. </div>
  23. </template>
  24. <script>
  25. import QRCode from 'qrcodejs2' // 引入qrcode
  26. import { BASE_URL } from '@/constant'
  27. export default {
  28. name: 'qrcode',
  29. props: {
  30. visible: {
  31. type: Boolean,
  32. default: false
  33. },
  34. codeId: {
  35. type: String,
  36. default: ''
  37. }
  38. },
  39. data () {
  40. return {
  41. qrCode: '',
  42. dialogVisible: this.visible,
  43. url:'http://192.168.2.16:8080/',
  44. }
  45. },
  46. // mounted () {
  47. // this.$nextTick(() => {
  48. // this.qrcodeRender()
  49. // })
  50. // },
  51. watch:{
  52. dialogVisible: {
  53. handler: function(val, oldVal) {
  54. if(val == true){
  55. this.$nextTick(() => {
  56. this.qrcodeRender()
  57. })
  58. }
  59. },
  60. deep:true,
  61. immediate:true
  62. },
  63. },
  64. methods: {
  65. downloadCode () {
  66. const myCanvas = document.getElementById('qrcode').getElementsByTagName('canvas')
  67. const a = document.createElement('a')
  68. a.href = myCanvas[0].toDataURL('image/png')
  69. a.download = name
  70. a.click()
  71. },
  72. qrcodeRender () {
  73. if (this.qrCode) {
  74. this.$refs.qrcodes.innerHTML = ''
  75. }
  76. this.qrCode = new QRCode('qrcode', {
  77. width: 200,
  78. height: 200,
  79. // text: `${this.url}h5/#/pages/signin/signin?codeId=${this.codeId}`,
  80. text: `${BASE_URL}h5/#/pages/signin/signin?codeId=${this.codeId}`,
  81. colorDark: '#000000', // 前景色
  82. colorLight: '#FFFFFF', // 背景色
  83. correctLevel: QRCode.CorrectLevel.L
  84. })
  85. }
  86. }
  87. }
  88. </script>
  89. <style lang="scss" scoped>
  90. .qrcode-dialog {
  91. .qrCode {
  92. display: flex;
  93. justify-content: center;
  94. margin: 5% 0;
  95. }
  96. .qrCode >img{
  97. width: 50%;
  98. }
  99. }
  100. </style>