import { TransitionGroup, defineComponent, nextTick, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; import MSearch from '@/components/m-search'; import icon_play from '@/common/images/icon_play.svg'; import { Empty, List, Loading, NoticeBar, showLoadingToast, showToast } from 'vant'; import icon_back from './image/icon_back.svg'; import icon_down from '@/common/images/icon_down.svg'; import icon_jianpu from '@/common/images/icon_jianpu.svg'; import icon_jianpuActive from '@/common/images/icon_jianpuActive.svg'; import icons from '@/common/images/index.json'; import { postMessage, promisefiyPostMessage } from '@/helpers/native-message'; import { rows } from './data.json'; import html2canvas from 'html2canvas'; import { api_musicSheetCategoriesPage, api_musicSheetPage } from './api'; import { state } from '@/state'; import MEmpty from '@/components/m-empty'; export default defineComponent({ name: 'co-ai', setup() { const categorForms = reactive({ page: 1, rows: 999, subjectId: state.user.data?.subjectId || '' }); const musicForms = reactive({ page: 1, rows: 20, status: 1, keyword: '', // 关键词 musicSheetCategoriesId: '' }); const titles = rows; const data = reactive({ /** 教材Index */ typeIndex: 0, /** 音乐Index */ musicIndex: 0, /** 显示简谱 */ isShowJianpu: false, /** 教材列表 */ types: [] as any[], /** 音乐列表 */ musics: [] as any[], loading: true, finshed: false }); const downRef = ref(); // 返回 const goback = () => { postMessage({ api: 'goBack' }); }; /** 去云教练 */ const handleGoto = () => { let src = `${location.origin}/instrument?id=${ data.musics[data.musicIndex]?.id }`; console.log(src) postMessage({ api: 'openAccompanyWebView', content: { url: src, orientation: 0, isHideTitle: true, statusBarTextColor: false, isOpenLight: true } }); }; /** 保存图片 */ const handleSave = async () => { showLoadingToast({ message: '正在保存', duration: 0 }); try { html2canvas(downRef.value, { backgroundColor: '#fff', allowTaint: true, useCORS: true }) .then(async canvas => { var dataURL = canvas.toDataURL('image/png', 1); //可选取多种模式 setTimeout(() => { showToast('保存成功'); }, 500); const res = await promisefiyPostMessage({ api: 'savePicture', content: { base64: dataURL } }); }) .catch(() => { setTimeout(() => { showToast('保存失败'); }, 500); }); } catch (error) { setTimeout(() => { showToast('保存失败'); }, 500); } }; /** 获取音乐教材列表 */ const getMusicSheetCategories = async () => { try { const res = await api_musicSheetCategoriesPage({ ...categorForms }); if (res.code === 200 && Array.isArray(res?.data?.rows)) { data.types = res.data.rows; if (!musicForms.musicSheetCategoriesId && data.types.length > 0) { musicForms.musicSheetCategoriesId = data.types[0].id; } } } catch (error) { console.log('🚀 ~ error:', error); } }; /** 获取曲谱列表 */ const getMusicList = async () => { data.loading = true; try { const res = await api_musicSheetPage({ ...musicForms }); if (res.code === 200 && Array.isArray(res?.data?.rows)) { data.musics = [...data.musics, ...res.data.rows]; data.finshed = !res.data.next; } } catch (error) { console.log('🚀 ~ error:', error); } data.loading = false; }; const handleReset = () => { musicForms.page = 1; data.musics = []; getMusicList(); }; const spinRef = ref(); const handleResh = () => { if (data.loading || data.finshed) return; musicForms.page = musicForms.page + 1; getMusicList(); }; onMounted(async () => { await getMusicSheetCategories(); getMusicList(); const obv = new IntersectionObserver(entries => { if (entries[0].intersectionRatio > 0) { handleResh(); } }); nextTick(() => { obv.observe(spinRef.value); }); }); return () => (