addteacherModel.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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 '../components/schoolInfo/index.module.less';
  12. import CSelect from '/src/components/CSelect';
  13. import stunentStart from '@/views/studentList/images/studentStart.png';
  14. import studentCLose from '@/views/studentList/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 '@/views/studentList/images/teacherCore.png';
  21. import codewrap from '@/views/studentList/images/cordWrap.png'
  22. import btnBg from '@/views/studentList/images/btnBg.png';
  23. import html2canvas from 'html2canvas';
  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 registerUrl = () => {
  49. const queryStr = `tenantId=${userStore.info.schoolInfos?.[0]?.tenantId}&schoolId=${userStore.info.schoolInfos?.[0]?.id}&schoolName=${userStore.info.schoolInfos?.[0]?.name}`;
  50. const url =
  51. `${location.origin}/classroom-app/#/teaher-register?` + queryStr;
  52. return url;
  53. };
  54. const queryStr = `tenantId=${userStore.info.schoolInfos?.[0]?.tenantId}&schoolId=${userStore.info.schoolInfos?.[0]?.id}&schoolName=${userStore.info.schoolInfos?.[0]?.name}`;
  55. const url =
  56. `${location.origin}/classroom-app/#/teaher-register?` + queryStr;
  57. const imgs = reactive({
  58. saveLoading: false,
  59. image: null as any,
  60. shareLoading: false
  61. });
  62. const downImg = () => {
  63. if (imgs.saveLoading) {
  64. return;
  65. }
  66. imgs.saveLoading = true;
  67. // 判断是否已经生成图片
  68. if (imgs.image) {
  69. saveImg();
  70. } else {
  71. const container: any = document.getElementById(`preview-container`);
  72. html2canvas(container, {
  73. allowTaint: true,
  74. useCORS: true,
  75. backgroundColor: null
  76. })
  77. .then(async canvas => {
  78. const url = canvas.toDataURL('image/png');
  79. console.log(url, 'url===>')
  80. imgs.image = url;
  81. saveImg();
  82. })
  83. .catch(() => {
  84. console.log('生成图片失败url===>')
  85. imgs.saveLoading = false;
  86. });
  87. }
  88. };
  89. const saveImg = async () => {
  90. // showLoadingToast({ message: '图片生成中...', forbidClick: true });
  91. setTimeout(() => {
  92. imgs.saveLoading = false;
  93. }, 100);
  94. const link = document.createElement('a');
  95. link.setAttribute('download', '新增老师' + '.png');
  96. // 添加时间戳,防止浏览器缓存图片
  97. // console.log(imgUrl,'imgUrl')
  98. link.href = imgs.image;
  99. link.click();
  100. // const res = await promisefiyPostMessage({
  101. // api: 'savePicture',
  102. // content: {
  103. // base64: imgs.image
  104. // }
  105. // });
  106. // if (res?.content?.status === 'success') {
  107. // showSuccessToast('保存成功');
  108. // } else {
  109. // showFailToast('保存失败');
  110. // }
  111. };
  112. return () => (
  113. <div class={[styles.addStudentWrap]}>
  114. <div
  115. onClick={() => {
  116. console.log('点击');
  117. emit('close');
  118. }}>
  119. <NImage
  120. src={studentCLose}
  121. previewDisabled
  122. class={styles.studentCLose}></NImage>
  123. </div>
  124. <NImage
  125. previewDisabled
  126. class={styles.stunentStart}
  127. src={stunentStart}></NImage>
  128. <NImage
  129. class={styles.addTitle}
  130. previewDisabled
  131. src={studentTitle}></NImage>
  132. <div class={styles.addStudentInfo} id="preview-container">
  133. <NImage
  134. class={styles.studentInfoBg}
  135. previewDisabled
  136. src={studentInfo}></NImage>
  137. <div class={styles.studentCore}>
  138. <img
  139. alt="img"
  140. crossorigin="anonymous"
  141. class={styles.schoolLogo}
  142. src={
  143. userStore.getUserInfo.schoolInfos[0].logo +
  144. `?some=${new Date().getTime()}`
  145. }></img>
  146. <div class={styles.studentCoreInfo}>
  147. <h2>{userStore.getUserInfo.schoolInfos[0].name}</h2>
  148. <p class={styles.studentCoreInfoSubtitle}>
  149. 邀请您的成为
  150. <span>音乐数字课堂老师</span>
  151. </p>
  152. <div class={styles.codewrap}>
  153. {/* <img src={codewrap} class={styles.codewrapBg} alt="" /> */}
  154. <TheQrCode margin={0} text={url} size={119} />
  155. </div>
  156. <div class={styles.codewrapSubmit}>
  157. <NImage previewDisabled src={btnBg}></NImage>
  158. 请扫描上方二维码 <span>完成注册</span>{' '}
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. <div class={styles.studentBottom}>
  164. <p>请将二维码图片发送给老师,扫码完成注册</p>
  165. <div class={styles.downBtn} onClick={downImg}>
  166. 下载图片
  167. </div>
  168. </div>
  169. </div>
  170. );
  171. }
  172. });