import OHeader from '@/components/o-header' import { defineComponent, onMounted, reactive, nextTick } from 'vue' import styles from './report.module.less' import iconOrchestra from '@/views/mine-orchestra/images/icon-or.png' import { closeToast, Grid, GridItem, Icon, Image, Popup, showFailToast, showLoadingToast, showSuccessToast, showToast } from 'vant' import trainWeek from './images/week/icon-train-week.png' import OrchestraNum from './modal/orchestra-num' import TrainClass from './modal/train-class' import StudentAttendance from './modal/student-attendance' import TeacherAttendance from './modal/teacher-attendance' import TrainProgress from './modal/train-progress' import iconPhoto from './images/icon-photo.png' import iconClass from './images/icon-class.png' import iconSaveImage from '@/school/orchestra/images/icon-save-image.png' import iconWechat from '@/school/orchestra/images/icon-wechat.png' import iconWeekPoint from './images/week/icon-point.png' import popupWeekBanner from './images/week/popup-week-banner.png' import popupQrcodeBg from './images/popup-qrcode-bg.png' import OQrcode from '@/components/o-qrcode' import { useRoute, useRouter } from 'vue-router' import request from '@/helpers/request' import { postMessage, promisefiyPostMessage } from '@/helpers/native-message' import html2canvas from 'html2canvas' import dayjs from 'dayjs' import iconArrow from './images/icon-arrow.png' import { useRect } from '@vant/use' export const reportCourseType = { PERCUSSION: '打击乐', FLUTE: '长笛', SAX: '萨克斯', CLARINET: '单簧管', TRUMPET: '小号', TROMBONE: '长号', HORN: '圆号', BARITONE_TUBA: '上低音号-大号', EUPHONIUM: '上低音号', TUBA: '大号', MUSIC_THEORY: '乐理', INSTRUMENTAL_ENSEMBLE: '合奏' } export default defineComponent({ name: 'train-report', setup() { const router = useRouter() const route = useRoute() const forms = reactive({ id: route.query.id, showQrcode: false, share: route.query.share as any, url: window.location.href + '&share=1', width: 0, height: 0 }) const reportData = reactive({ orchestraName: null, startTime: null, endTime: null, COURSEWARE: {}, coursewareList: [] as any, COURSE_SCHEDULE: {}, KNOWLEDGE: {}, ORCHESTRA: {}, PHOTO: {} as any, STUDENT_ATTENDANCE: {}, TEACHER_ATTENDANCE: {}, TEACHER_NOT_ATTENDANCE: {} }) const getDetail = async () => { try { const { data } = await request.get('/api-school/open/orchestraReport/detail/' + forms.id) reportData.COURSEWARE = data.reportItem.COURSEWARE || {} reportData.COURSE_SCHEDULE = data.reportItem.COURSE_SCHEDULE || {} reportData.KNOWLEDGE = data.reportItem.KNOWLEDGE || {} reportData.ORCHESTRA = data.reportItem.ORCHESTRA || {} reportData.PHOTO = data.reportItem.PHOTO || {} reportData.STUDENT_ATTENDANCE = data.reportItem.STUDENT_ATTENDANCE || {} reportData.TEACHER_ATTENDANCE = data.reportItem.TEACHER_ATTENDANCE || {} reportData.TEACHER_NOT_ATTENDANCE = data.reportItem.TEACHER_NOT_ATTENDANCE || {} reportData.orchestraName = data.orchestraName || '' reportData.startTime = data.startTime || '' reportData.endTime = data.endTime || '' const courseware = data.notTargetClassList for (const i in courseware) { reportData.coursewareList.push(courseware[i].classGroupName) } } catch { // } } const imgs = reactive({ saveLoading: false, image: null as any, shareLoading: false }) const onSaveImg = async () => { // 判断是否在保存中... if (imgs.saveLoading) { return } imgs.saveLoading = true // 判断是否已经生成图片 if (imgs.image) { saveImg() } else { const container: any = document.getElementById(`preview-container`) html2canvas(container, { allowTaint: true, useCORS: true, backgroundColor: null }) .then(async (canvas) => { const url = canvas.toDataURL('image/png') imgs.image = url saveImg() }) .catch(() => { closeToast() imgs.saveLoading = false }) } } const onShare = () => { if (imgs.shareLoading) { return } imgs.shareLoading = true if (imgs.image) { openShare() } else { const container: any = document.getElementById(`preview-container`) html2canvas(container, { allowTaint: true, useCORS: true, backgroundColor: null }) .then(async (canvas) => { const url = canvas.toDataURL('image/png') imgs.image = url openShare() }) .catch(() => { closeToast() imgs.shareLoading = false }) } } const openShare = () => { const image = imgs.image setTimeout(() => { imgs.shareLoading = false }, 100) if (image) { postMessage( { api: 'shareTripartite', content: { title: '', desc: '', image, video: '', type: 'image', // button: ['copy'] shareType: 'wechat' } }, (res: any) => { if (res && res.content) { showToast(res.content.message || (res.content.status ? '分享成功' : '分享失败')) } } ) } } 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('保存失败') } } onMounted(() => { getDetail() }) return () => (
{{ right: () => forms.share != 1 && ( { forms.showQrcode = true nextTick(() => { const previewContainer = document.querySelector( '#preview-container' ) as HTMLElement const share = useRect(previewContainer) forms.width = share.width forms.height = share.height if (share.width > 0 && share.height > 0) { previewContainer.style.width = Math.round(share.width) + 'px' previewContainer.style.height = Math.round(share.height) + 'px' } }) }} > ) }}
{reportData.orchestraName}
{dayjs(reportData.startTime).format('YYYY/MM/DD')}- {dayjs(reportData.endTime).format('YYYY/MM/DD')}

{ if (forms.share == 1) return router.push({ path: '/school-photo' }) }} style={{ display: 'flex', alignItems: 'center' }} > 本周上传{reportData.PHOTO.TOTAL || 0}张训练照片 {forms.share != 1 && }

课件使用未达标班级

{reportData.coursewareList.map( (item: string, index: number) => item + (reportData.coursewareList.length - 1 === index ? '' : '、') )}

{reportData.orchestraName}
{dayjs(reportData.startTime).format('YYYY/MM/DD')}- {dayjs(reportData.endTime).format('YYYY/MM/DD')} {/* {reportData.startTime}-{reportData.endTime} */}
扫描上方二维码查看训练周报
(forms.showQrcode = false)} />

分享方式

{{ icon: () => , text: () =>
保存图片
}}
{{ icon: () => , text: () =>
微信
}}
) } })