{"version":3,"sources":["components/activity/give-courses/share-content/poster/poster.js","components/activity/give-courses/share-content/prizes/prizes.js","components/activity/give-courses/share-content/index.js"],"names":["Poster","state","redirectUrl","backgroundUrl","avatar","username","poster","props","generatePoster","a","canvas","document","createElement","ctx","getContext","posterWidth","canvasWidth","getImage","bg","style","width","height","drawImage","r","avatarImage","save","beginPath","arc","Math","PI","clip","restore","font","fillStyle","fillText","getQRCodeCanvas","qrcode","setState","toDataURL","savePoster","url","Promise","resolve","img","Image","setAttribute","onload","this","src","text","codeSize","window","innerWidth","QRCode","toCanvas","http","get","API","getParam","then","res","data","errno","msg","head_img","user_name","m_redirect_code","background_img_url","info","id","className","alt","Component","showToast","Prizes","list","isShowRule","rule","rankList","getPrizes","awards","getRankingList","saveRankingList","rankingList","length","map","item","index","key","onClick","padding","cellSpacing","cellPadding","border","name","num","dangerouslySetInnerHTML","__html","ShareContent","activeIndex","tabs","WithFullSize"],"mappings":"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","file":"mrstaticjs/61.90a82eb5.chunk.js","sourcesContent":["import React, { Component } from \"react\"\nimport QRCode from \"qrcode\"\nimport \"./poster.scss\"\nimport { getParam, http } from \"src/utils\"\nimport { Toast } from \"antd-mobile\"\n\nfunction showToast(text) {\n Toast.info(text, 2, null, false)\n}\n\nclass Poster extends Component {\n state = {\n redirectUrl: \"\",\n backgroundUrl: \"\",\n avatar: \"\",\n username: \"\",\n poster: this.props.poster,\n }\n\n componentDidMount() {\n const { poster } = this.props\n if (!poster) {\n http\n .get(\n `${API[\"base-api\"]}/assistance/active_haibao_info/${getParam(\n \"assis_word\"\n )}`\n )\n .then((res) => {\n const { data, errno, msg } = res.data\n if (errno === 200) {\n this.setState(\n {\n avatar: data.head_img,\n username: data.user_name,\n redirectUrl: data.m_redirect_code,\n backgroundUrl: data.background_img_url,\n },\n () => {\n this.generatePoster()\n }\n )\n } else {\n showToast(msg)\n }\n })\n }\n }\n\n generatePoster = async () => {\n let canvas = document.createElement(\"canvas\"),\n ctx = canvas.getContext(\"2d\"),\n posterWidth = 270,\n canvasWidth = 540\n\n const { backgroundUrl, avatar, username, redirectUrl } = this.state\n\n const bg = await this.getImage(backgroundUrl)\n canvas.style.width = posterWidth + \"px\"\n canvas.style.height = (posterWidth * bg.height) / bg.width + \"px\"\n canvas.width = canvasWidth\n canvas.height = (canvasWidth * bg.height) / bg.width\n\n ctx.drawImage(bg, 0, 0, canvas.width, canvas.height)\n\n let r = 33\n const avatarImage = await this.getImage(avatar)\n const ax = 40\n const ay = 16\n ctx.save()\n ctx.beginPath()\n ctx.arc(ax + r, ay + r, r, 0, Math.PI * 2)\n ctx.clip()\n ctx.drawImage(avatarImage, ax, ay, 66, 66)\n ctx.restore()\n\n ctx.font = `24px serif`\n ctx.fillStyle = \"#fff\"\n ctx.fillText(username, 2 * r + ax + 10, ay + r - 5)\n\n let qrcode = await this.getQRCodeCanvas(redirectUrl, posterWidth)\n ctx.drawImage(qrcode, 380, 796, 140, 140)\n\n this.setState(\n {\n poster: canvas.toDataURL(),\n },\n () => {\n const { savePoster } = this.props\n savePoster && savePoster(this.state.poster)\n }\n )\n }\n\n getImage = (url) => {\n return new Promise((resolve) => {\n const img = new Image()\n img.setAttribute(\"crossOrigin\", \"anonymous\")\n img.onload = function () {\n resolve(this)\n }\n img.src = url\n })\n }\n\n getQRCodeCanvas = (text, posterWidth) => {\n const canvas = document.createElement(\"canvas\")\n let codeWidth = 100,\n codeHeight = 100,\n codeSize = posterWidth * (100 / (window.innerWidth * 0.72))\n\n canvas.style.width = `${codeSize}px`\n canvas.style.height = `${codeSize}px`\n canvas.width = codeWidth\n canvas.height = codeHeight\n\n return QRCode.toCanvas(canvas, text)\n }\n\n render() {\n const { poster } = this.state\n return (\n <div id=\"poster\">\n <div className=\"placard-desc\">长按下方海报,分享给好友~</div>\n <div className=\"total-container\">\n <div className=\"placard-img-container\" id=\"imgWrapper\">\n <img src={poster} alt=\"分享海报\" />\n </div>\n </div>\n </div>\n )\n }\n}\n\nexport default Poster\n","import React, { Component } from \"react\"\nimport \"./prizes.scss\"\nimport { http } from \"src/utils\"\nimport { Toast } from \"antd-mobile\"\n\nfunction showToast(text) {\n Toast.info(text, 2, null, false)\n}\n\nclass Prizes extends Component {\n state = {\n list: [],\n isShowRule: false,\n rule: \"\",\n rankList: [],\n }\n\n componentDidMount() {\n const { rankingList } = this.props\n if (!rankingList || !rankingList.length) {\n this.getRankingList()\n } else {\n this.setState({\n rankingList,\n })\n }\n this.getPrizes()\n }\n\n getPrizes = () => {\n http.get(`${API[\"base-api\"]}/assistance/invite`).then((res) => {\n const { data, msg, errno } = res.data\n if (errno === 200) {\n this.setState({\n list: data.awards,\n rule: data.rule,\n })\n } else {\n showToast(msg)\n }\n })\n }\n\n getRankingList = () => {\n const { saveRankingList } = this.props\n http.get(`${API[\"base-api\"]}/assistance/ranking_list/50`).then((res) => {\n const { data, msg, errno } = res.data\n if (errno === 200) {\n this.setState({\n rankList: data.list,\n })\n\n saveRankingList && saveRankingList(data.list)\n } else {\n showToast(msg)\n }\n })\n }\n\n render() {\n const { list, rankList, isShowRule, rule } = this.state\n return (\n <div id={\"prizes\"}>\n <div className=\"content\">\n <i className=\"part-title__decorate\" />\n <div className=\"part-title__txt\">活动奖品</div>\n <i className=\"part-title__decorate\" />\n\n <div className=\"prize-img\">\n {list.map((item, index) => {\n return (\n <div className=\"img-box\" key={index}>\n <img src={item} alt=\"\" />\n </div>\n )\n })}\n </div>\n\n <span\n className=\"rule\"\n onClick={() => {\n this.setState({ isShowRule: true })\n }}\n >\n 活动规则\n </span>\n </div>\n\n <div className=\"content\" style={{ padding: `20px 0 30px 0` }}>\n <i className=\"part-title__decorate\" />\n <div className=\"part-title__txt\">排行榜</div>\n <i className=\"part-title__decorate\" />\n\n <div className=\"tip\">数据实时更新 只显示Top50</div>\n\n <table className=\"ranking\" cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n <thead>\n <tr>\n <td>排名</td>\n <td>用户名称</td>\n <td>邀请人数</td>\n </tr>\n </thead>\n <tbody>\n {rankList.map((item, index) => {\n return (\n <tr key={index}>\n <td>{index + 1}</td>\n <td>{item.name}</td>\n <td>{item.num}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n {isShowRule ? (\n <div className=\"mbc-box\">\n <div className=\"rele-content-box\">\n <div className=\"title\">活动规则</div>\n\n <div className=\"rele-content\">\n <div dangerouslySetInnerHTML={{ __html: rule }}></div>\n </div>\n\n <img\n className=\"close\"\n onClick={() => {\n this.setState({ isShowRule: false })\n }}\n src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/close-btn.png\"\n alt=\"\"\n />\n </div>\n </div>\n ) : null}\n </div>\n )\n }\n}\n\nexport default Prizes\n","import React, { Component } from \"react\"\nimport \"./share-content.scss\"\nimport Poster from \"./poster/poster\"\nimport Prizes from \"./prizes/prizes\"\nimport { WithFullSize } from \"src/HOCs\"\n\nclass ShareContent extends Component {\n state = {\n activeIndex: 0,\n tabs: [\"分享海报\", \"活动奖品\"],\n poster: \"\",\n rankingList: [],\n }\n\n render() {\n const { tabs, activeIndex, poster, rankingList } = this.state\n return (\n <div id={\"share-content\"}>\n <ul className=\"tab\">\n {tabs.map((item, index) => {\n return (\n <li\n key={index}\n className={activeIndex === index ? \"active\" : \"\"}\n onClick={() => {\n this.setState({ activeIndex: index })\n }}\n >\n {item}\n </li>\n )\n })}\n </ul>\n {activeIndex === 0 ? (\n <Poster\n poster={poster}\n savePoster={(poster) => {\n this.setState({ poster })\n }}\n />\n ) : (\n <Prizes\n rankingList={rankingList}\n saveRankingList={(rankingList) => {\n this.setState({ rankingList })\n }}\n />\n )}\n </div>\n )\n }\n}\n\nexport default WithFullSize(ShareContent)\n"],"sourceRoot":""}