addStudentModel.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import {
  2. NButton,
  3. NSpace,
  4. useMessage,
  5. NForm,
  6. NFormItem,
  7. NSelect,
  8. NImage
  9. } from 'naive-ui';
  10. import { defineComponent, onMounted, reactive, ref } from 'vue';
  11. import styles from '../index.module.less';
  12. import CSelect from '/src/components/CSelect';
  13. import stunentStart from '../images/studentStart.png';
  14. import studentCLose from '../images/studentClose.png';
  15. import { useUserStore } from '@/store/modules/users';
  16. import TheQrCode from '/src/components/TheQrCode';
  17. import { vaildUrl } from '@/utils/urlUtils';
  18. import logo from '@/common/images/logo.png';
  19. import studentTitle from '../images/studentTitle.png';
  20. import studentInfo from '../images/strudentCore.png';
  21. import btnBg from '../images/btnBg.png';
  22. import html2canvas from 'html2canvas';
  23. import codewrap from '../images/cordWrap.png'
  24. export default defineComponent({
  25. props: {
  26. activeRow: {
  27. type: Object,
  28. default: () => ({ id: '' })
  29. },
  30. gradeNumList: {
  31. type: Array,
  32. default: () => []
  33. },
  34. classArray: {
  35. type: Array,
  36. default: () => []
  37. }
  38. },
  39. name: 'resetStudent',
  40. emits: ['close', 'getList'],
  41. setup(props, { emit }) {
  42. const data = reactive({
  43. uploading: false
  44. });
  45. const message = useMessage();
  46. const userStore = useUserStore();
  47. const foemsRef = ref();
  48. const url = ref(
  49. vaildUrl() +
  50. `/classroom-app/#/student-register?sId=${userStore.getUserInfo.schoolInfos[0].id}`
  51. );
  52. const imgs = reactive({
  53. saveLoading: false,
  54. image: null as any,
  55. shareLoading: false
  56. });
  57. const downImg = () => {
  58. if (imgs.saveLoading) {
  59. return;
  60. }
  61. imgs.saveLoading = true;
  62. // 判断是否已经生成图片
  63. if (imgs.image) {
  64. saveImg();
  65. } else {
  66. const container: any = document.getElementById(`preview-container`);
  67. html2canvas(container, {
  68. allowTaint: true,
  69. useCORS: true,
  70. backgroundColor: null
  71. })
  72. .then(async canvas => {
  73. const url = canvas.toDataURL('image/png');
  74. imgs.image = url;
  75. saveImg();
  76. })
  77. .catch(() => {
  78. imgs.saveLoading = false;
  79. });
  80. }
  81. };
  82. const saveImg = async () => {
  83. // showLoadingToast({ message: '图片生成中...', forbidClick: true });
  84. setTimeout(() => {
  85. imgs.saveLoading = false;
  86. }, 100);
  87. const link = document.createElement('a');
  88. link.setAttribute('download', '报名图片' + '.png');
  89. // 添加时间戳,防止浏览器缓存图片
  90. // console.log(imgUrl,'imgUrl')
  91. link.href = imgs.image;
  92. link.click();
  93. // const res = await promisefiyPostMessage({
  94. // api: 'savePicture',
  95. // content: {
  96. // base64: imgs.image
  97. // }
  98. // });
  99. // if (res?.content?.status === 'success') {
  100. // showSuccessToast('保存成功');
  101. // } else {
  102. // showFailToast('保存失败');
  103. // }
  104. };
  105. return () => (
  106. <div class={[styles.addStudentWrap]}>
  107. <div
  108. onClick={() => {
  109. console.log('点击');
  110. emit('close');
  111. }}>
  112. <NImage
  113. src={studentCLose}
  114. previewDisabled
  115. class={styles.studentCLose}></NImage>
  116. </div>
  117. <NImage
  118. previewDisabled
  119. class={styles.stunentStart}
  120. src={stunentStart}></NImage>
  121. <NImage
  122. class={styles.addTitle}
  123. previewDisabled
  124. src={studentTitle}></NImage>
  125. <div class={styles.addStudentInfo} id="preview-container">
  126. <NImage
  127. class={styles.studentInfoBg}
  128. previewDisabled
  129. src={studentInfo}></NImage>
  130. <div class={styles.studentCore}>
  131. <img
  132. alt="img"
  133. crossorigin="anonymous"
  134. class={styles.schoolLogo}
  135. src={
  136. userStore.getUserInfo.schoolInfos[0].logo +
  137. `?some=${new Date().getTime()}`
  138. }></img>
  139. <div class={styles.studentCoreInfo}>
  140. <h2>{userStore.getUserInfo.schoolInfos[0].name}</h2>
  141. <p class={styles.studentCoreInfoSubtitle}>
  142. 邀请您的孩子加入
  143. <span>数字化乐器课堂</span>
  144. </p>
  145. <div class={styles.codewrap}>
  146. <img src={codewrap} class={styles.codewrapBg} alt="" />
  147. <TheQrCode margin={0} class={styles.codewrapImg} text={url.value} size={119} />
  148. </div>
  149. <div class={styles.codewrapSubmit}>
  150. <NImage previewDisabled src={btnBg}></NImage>
  151. 请使用微信扫码<span>完成报名</span>{' '}
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. <div class={styles.studentBottom}>
  157. <p>请将二维码图片发送给学生家长,扫码完成报名</p>
  158. <div class={styles.downBtn} onClick={downImg}>
  159. 下载图片
  160. </div>
  161. </div>
  162. </div>
  163. );
  164. }
  165. });