import { promisefiyPostMessage } from '@/helpers/native-message'; import html2canvas from 'html2canvas'; import { closeToast, showFailToast, showLoadingToast, showSuccessToast } from 'vant'; import { defineComponent, toRefs, ref, reactive, onMounted, onUnmounted, nextTick } from 'vue'; import styles from './pen.module.less'; import Tips, { tipState } from '../tips'; export default defineComponent({ name: 'tools-pen', props: { isWhite: { type: Boolean, default: false }, tip: { type: String, default: '请确认是否退出?' }, show: { type: Boolean, default: false }, close: { type: Function, default: () => ({}) } }, setup(props) { const { show } = toRefs(props); const firstRender = ref(true); const src = /(localhost|192)/.test(location.host) ? 'https://test.lexiaoya.cn/whiteboard-noCollab?platform=daya' : `https://online.lexiaoya.cn/whiteboard-noCollab?platform=daya`; const exportImg = (event: MessageEvent) => { const data = event.data; // console.log('🚀 ~ event:', data) if (data.api === 'excalidraw_exportImg') { imgs.base64 = data.base64; imgs.exported = true; nextTick(() => { onSaveImg(); }); } }; onMounted(() => { window.addEventListener('message', exportImg); }); onUnmounted(() => { window.removeEventListener('message', exportImg); }); const imgs = reactive({ exported: false, saveLoading: false, base64: '', image: '' }); const saveImg = async () => { showLoadingToast({ message: '图片生成中...', forbidClick: true }); setTimeout(() => { imgs.saveLoading = false; }, 100); const res = await promisefiyPostMessage({ api: 'savePicture', content: { base64: imgs.image } }); if (res?.content?.status === 'success') { showSuccessToast('保存成功'); } else { showFailToast('保存失败'); } imgs.exported = false; }; const onSaveImg = async () => { // 判断是否在保存中... if (imgs.saveLoading) { return; } console.log('开始'); imgs.saveLoading = true; const container: any = document.getElementById(`app`); html2canvas(container, { allowTaint: true, useCORS: true, backgroundColor: null }) .then(async canvas => { // console.log("🚀 ~ canvas:", canvas) // document.body.appendChild(canvas) // const url = await canvas.toDataURL() try { imgs.image = canvas.toDataURL(); } catch (error) { console.log(error); } console.log('🚀 ~ imgs.image:', imgs.image); saveImg(); }) .catch(error => { console.log('🚀 ~ error:', error); closeToast(); imgs.saveLoading = false; imgs.exported = false; }); }; return () => (