import React, {Component} from 'react' import {Toast} from "antd-mobile" import {HeaderBar} from '@/common' import {browser, http, getParam, wxShare} from '@/utils' import './index.scss' import QRCode from 'qrcode' import html2canvas from 'html2canvas' import scoreIconL from '@assets/image/score_icon-l.png' import scoreIconR from '@assets/image/score_icon-r.png' import scoreReportBg from '@assets/image/scoreReport_bg.png' class scoreReport extends Component { constructor(props) { super(props) this.state = { tab: ['当前成绩', '今日最佳', '本月最佳'], cutIndex: 0, myRankList: '', imgUrl: '', codeSrc: '' } } componentDidMount() { this.handleFetchInfo(0) this.getCodeWe() } getCanvas() { let _this = this var canvas2 = document.createElement("canvas") let _canvas = document.getElementsByClassName('score-list')[0] var w = parseInt(window.getComputedStyle(_canvas).width) var h = parseInt(window.getComputedStyle(_canvas).height) var scale = window.devicePixelRatio //将canvas画布放大若干倍,然后盛放在较小的容器内,就显得不模糊了 canvas2.width = w * scale canvas2.height = h * scale var context = canvas2.getContext("2d") context.scale(1, 1) html2canvas(document.getElementsByClassName('score-list')[0], {canvas: canvas2}).then(function (canvas) { // document.body.appendChild(canvas); let imgUrl = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream") _this.setState({ imgUrl: imgUrl, }) }) } // 获取二维码 getCodeWe() { let _this = this let qrCodeLink = 'www.julyedu.com' return new Promise(resolve => { QRCode.toDataURL(qrCodeLink, {}, function (err, url) { _this.setState({ codeSrc: url }) }) resolve() }) } handleFetchInfo = (index) => { http.get(`${API.home}/sys/at/user_score/${index}`).then(res => { const {code, data} = res.data if (code === 200) { this.setState({ myRankList: data }) this.getCanvas() } }) } change = (index) => { this.setState({ cutIndex: index }) this.handleFetchInfo(index) } render() { const {tab, cutIndex, myRankList, codeSrc, imgUrl, isshow} = this.state return ( <> <HeaderBar title='成绩报告' arrow={true} home={false} /> <div className={'score-report'}> <ul className={'tab-list'}> { tab.map((item, index) => { return ( <li key={index} className={cutIndex === index ? 'active' : ''} onClick={() => this.change(index)}>{item}</li> ) }) } </ul> <div className="score-list-box"> <div className={'score-list'} style={{backgroundImage: `url(${scoreReportBg})`}}> <div className="title"> <img src={scoreIconL} alt=""/> 成绩报告 <img src={scoreIconR} alt=""/> </div> <table border="0" cellSpacing="0" cellPadding="0"> <thead> <tr> <td>分数</td> <td>用时</td> <td>排名</td> </tr> </thead> <tbody> { myRankList.r_id !== 0 && <tr className={'has'}> <td>{myRankList.score}分</td> <td>{myRankList.cost_time}</td> <td className={'rank'}>{myRankList.rank}</td> </tr> } { myRankList.r_id == 0 && <tr> <td>-</td> <td>-</td> <td>-</td> </tr> } </tbody> </table> <div className="comment text-overflow-4"> {myRankList && myRankList.title && myRankList.title.comment} </div> <div className="code"> <img src={codeSrc} alt=""/> <p>AI水平测试</p> </div> </div> <img className={'imgUrl'} src={imgUrl} alt=""/> </div> <div className="tip">长按图片分享给好友,或保存后分享到朋友圈</div> </div> </> ) } } export default scoreReport