temporary-registration.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer
  3. @hide="close" :width="width" :z-index="1002">
  4. <template #default>
  5. <div>
  6. <div v-if="info" ref="codeImgRef" style="width: 400px; margin: 0 auto;">
  7. <div class="mb-6 f-w-6 f-s-16 c-333">临时报名通道</div>
  8. <div class="mb-6">会议名称:{{ info?.trainingName}}</div>
  9. <div class="mb-6">会议时间:{{ info?.trainingStart }}~{{ info?.trainingEnd }}</div>
  10. <div class="mb-6">培训方式:{{ selectDictLabel(dict.dm_training_join_type, info.joinType) }}</div>
  11. <div class="mb-6">联系电话:{{ info?.tel }}</div>
  12. <div class="d-flex j-c a-c pd-10">
  13. <vueQr :text="VITE_APP_SHARE_QR_CODE_URL + '/meeting-sign-in?meetid=' + info?.id" :size="300"
  14. colorDark="orange"></vueQr>
  15. </div>
  16. </div>
  17. </div>
  18. <div class="d-flex j-c">
  19. <!-- <el-button @click="saveImg">保存临时报名二维码</el-button> -->
  20. </div>
  21. </template>
  22. </vxe-modal>
  23. </template>
  24. <script setup name="SignInCode" lang="ts">
  25. import { propTypes } from '@/utils/propTypes';
  26. import vueQr from 'vue-qr/src/packages/vue-qr.vue';
  27. import html2canvas from 'html2canvas';
  28. const emit = defineEmits(['update:show', 'close', 'success']);
  29. const props = defineProps({
  30. show: propTypes.bool.def(false),
  31. title: propTypes.string.def(' '),
  32. width: propTypes.number.def(500),
  33. info: propTypes.any.def(null),
  34. dict: propTypes.object.def({})
  35. });
  36. const VITE_APP_SHARE_QR_CODE_URL = ref(import.meta.env.VITE_APP_SHARE_QR_CODE_URL);
  37. const dialogVisible = ref(false);
  38. const close = () => {
  39. emit('update:show', false);
  40. emit('close', false);
  41. };
  42. const codeImgRef = ref<HTMLElement | null>(null);
  43. const saveImg = () => {
  44. html2canvas(codeImgRef.value, {
  45. useCORS: true,
  46. allowTaint: false,
  47. scale: 2
  48. }).then((canvas) => {
  49. const url = canvas.toDataURL('image/png');
  50. const a: any = document.createElement('a');
  51. a.download = `${props?.info?.trainingName}-临时报名二维码.png`;
  52. a.href = url;
  53. a.click();
  54. });
  55. };
  56. watch(
  57. () => props.show,
  58. (val) => {
  59. dialogVisible.value = val;
  60. },
  61. { immediate: true }
  62. );
  63. </script>