{"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":""}