ai-test.2919506a.chunk.js.map 89 KB
Newer Older
wangshuo committed
1
{"version":3,"sources":["components/ai-test/scores/rank-1.png","components/ai-test/scores/rank-2.png","components/ai-test/scores/rank-3.png","assets/image/score_icon-l.png","assets/image/score_icon-r.png","assets/image/scoreReport_bg.png","components/ai-test/scores/index.js","components/ai-test/common/question/index.js","components/ai-test/common/navigation/index.js","components/ai-test/exam/index.js","components/ai-test/submit-answer/index.js","components/ai-test/common/recommends/index.js","components/ai-test/analysis/index.js","components/ai-test/assist/index.js","components/ai-test/share/index.js","components/ai-test/report/index.js","components/ai-test/index.js"],"names":["module","exports","Scores","store","storage","namespace","state","selfTabs","title","rankList","rankListTabs","isExpandRankList","icons","require","isShowRule","isNeverShow","get","pageState","availableTestNum","userScore","userAddress","name","phone","address","isShowUserAddress","entryButtonInRule","handleChange","e","isNeverSHow","target","checked","setState","set","startTest","props","history","push","getInitialData","http","API","home","then","res","data","code","msg","fail","getRankList","tab","type","getUserScores","getUserAddress","inputText","key","value","submitForm","preventDefault","Object","values","every","item","post","success","info","this","user","hasError","prevProps","prevState","_rankList","Array","isArray","slice","className","src","h5_banner","alt","join_num","href","onClick","tabs","tabBarUnderlineStyle","display","onChange","i","map","index","score","to","r_id","cost_time","rank","length","avatar","user_name","prize_url","prize","compareDesc","Date","stop_time","daily_test_num","Rule","rule","neverShow","close","action","onSubmit","placeholder","Component","dangerouslySetInnerHTML","html","id","htmlFor","connect","Question","handleSelect","option","selectAnswer","question","selectedId","answer","activeIndex","category","undefined","__html","ques","options","classnames","active","error","user_select","is_ans","correct","bind","String","fromCharCode","des","Navigation","questions","handleClick","isAnalysis","userSelectIndex","findIndex","rightAnswerIndex","unselect","Exam","timer","unlisten","activeQuestion","time","d","h","m","s","elapsed","recordId","setCounter","setInterval","fms","Math","floor","goBack","location","browser","isWeixin","getParam","window","go","records","from","pathname","replace","search","origin","getQuestions","session","isEmpty","forEach","record_id","getStartTime","create_time","now","createTimeStamp","current","createTime","differenceInDays","differenceInHours","differenceInMinutes","differenceInSeconds","differenceInMilliseconds","optionId","setTimeout","storeData","clearInterval","setAll","clearAll","listen","matchPath","path","isExact","document","addEventListener","visibilityState","toString","padStart","filter","SubmitAnswer","analysis","results","submit","JSON","stringify","getAnalysis","remove","arrow","wrong","keys","Recommends","recommends","course_id","image_name","Analysis","userSelect","rightAnswer","userUnselect","match","params","getAnswerInfo","userAnswerIndex","style","height","backgroundColor","commend_course","Assist","result","userAnswer","getData","encodeURIComponent","assistCode","question_id","answer_id","correct_answer","setAnswer","rightAnswerId","end","status","desc","aiTestHelp","share","wxShare","dec","link","imgUrl","isshowYindao","copyToSuccess","handleFetchInfo","total_num","getAssist","text","onCopy","scoreReport","myRankList","avatar_file","getBase64","getCanvas","getBase64Image","img","canvas","createElement","width","getContext","drawImage","ext","substring","lastIndexOf","toLowerCase","toDataURL","base64","image","Image","timeStamp","setAttribute","onload","onerror","console","log","change","cutIndex","codeSrc","onbeforeunload","documentElement","scrollTop","body","getCodeWe","_this","canvas2","_canvas","getElementsByClassName","w","parseInt","getComputedStyle","scale","devicePixelRatio","html2canvas","qrCodeLink","Promise","resolve","QRCode","err","url","backgroundImage","scoreReportBg","scoreIconL","scoreIconR","border","cellSpacing","cellPadding","AiTest","render"],"mappings":"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","file":"mrstaticjs/ai-test.2919506a.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAlCAMAAABmpnnDAAACT1BMVEUAAAA2qvr///82q/n+40L+40H+4T7/4Dv/4Dn+4T7/4DgyqvkaoPg8r/r+4j/+4jksqvk4qvn/4jv/3zn/4zH/3TY8m/v/5SL/5i/+40D2+//r9v695P254f3+40P+40P+4T/+4ELe1V3+5TolpvjZ1WASof/93j4xs/j/4DsTov8npfsxsfkysfv/3jz/3DUkyPz/4jEezfz/5Bf/3jo5ofY6ov/+3jr///8zq/n+vAD+5ET+40D+4T/+3Tj+5kX+4D7+3zz+4Tb+3Cc4rPn+3Db+1iz/1CTr+P9AsPo0rPolpPn/8c7+vwX+sQD1+////f7+5kf/2Eb+2zP+0yj+ugH+tgC54v4opvn+50j+40P+0CL+yRm95P0boPgaoPj+41n+4EP+2TD+2yP+2Rv/3xj+wg/+wgv+uAD//Po2qPn+3TL+2C3/7x/+zh7+zBv+xQ/+swApqf8mp/8Vov8Pof//9dz+523+5V/+40v+6Er+3zP+0iX/zB7+1hb+xxT+uwcCmf8Vn/06ovk5pvgppvhHruL/+uH/8a7l4oj/5XnW2GP+5Fb+5FL04T7/6i7/7in95Sf/1yf+2iH+3yD+0iD/8Rn/5Bf/3Bb+xBX+tQD0//+z5f+u4/8ep/+95P44rfkvqPn//PA7rOs/rOr/8dP/89Dr8M/19Mj/78b/9L7/5rL/7pr+64aqzIK0z3j/73H/7Gu/z2vBz2r+5WT+4F//3Erj3Er+4Unr3kj/1kXq4ET/1D785TT/zjL+3Cv+0iH+0Bf+1Ar+zQL+1AFVsjxgAAAAN3RSTlMAkvKg5+DVwkzGLPLy59uxqqGFeEY7OTEZ+/Ly8vLx8M/NuriyqqCZlpSRg4J2a2VcWExCHxsWf0bMXAAAAqJJREFUOMuFzmVzGkEYwPFNmkA8abzu7rrH+QWOpLRcIUiLVKBogsbd3d3q7u6uH6zHBdqkYab/2Rf7zG/nmQWhcjNSV8XGxq5OSU5OWcNfVqZuzgXhDrZ3yooQBDlzViI5d4q/nDx2vH3/vB3tkJxegoqOIwLuKYmCkpLdAm6PjhkCxiiioWL5YrzaVlbWFkHJssV4qbW8vPXyEuxUFCHdPb0v+vtf9vZ0IxcXoqziyt1nBRP2afvMtH2i4Pm9skpZBK9VlD8ZtU8GUB3KH8ekffTp9QpZGCtvvZ0aa9E7fXKr1eNz6FsKpz52Vc7/dufNIW8j52ApCicIHKPYWc7s/dy1VcBd772znFyNQwjJr1IIcYM86PAOxQi4ZcTMaQwMlNqabJYBhoRQzQabRzaGLG9YzmkNELK1fY8e3Kgaq+cXqD2cdvgQj2IjGuBtfAAJdftbAeSra3YRIgAOYw16EofQVo2oqtzIiUIBCcZlwpJAFuZ0UvxYOtj3pVgVQagOKLEskM6gJoyf6NKmH4PIH8S0KLkJrLeiVlyYmQvn/yKhQeVpIE6OaggotBBpEtXGhZCNjg1xQORBrVGQYFFtPEiHaAO2FI38QjHINCoDajL0W9svGkHu/5yR0jyqm5WWTJCE+VwMv7fUUl3zGEGqXlfX1PNPCZ0fywFARLvMBhLaXiHh7jRB0uDXM/EAgIRaE6ehyPEalUrldrtVqoffGYwM+qkDgE9c65xjMJZ+86FY6JOGwl1KagMIlY9bWvRkHZSGq6+Deh1uyQdCOUbcwTUSaiNB07SRwk1BJ/EuAYTLXoH59DqznGUY1mPWzTViOG+RksQU9Ct1qFKJokozSSXmgYXtE1G4RmsyaTU4lbYX/Fv2jsT4dWvjE7cJG//fbwenBIedeff8AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAlCAMAAABmpnnDAAABxVBMVEUAAAA2qvo2q/n////o6Ono6Ojp6enm5ua74/0yqvkaoPjo6eno6Ono6Onl5ubn6Ojo6urm5ufl5eXn5+csqvnk5eXp6eng4ODi4uLq6ur2+//r9v7p6ero6epAsPo5rfnl5ebm5ubK2+glpvjE2egWn/0xs/gZoPvo6Ogppfkxsfnl5eUysfvl5eXm5uYkyPzl5eUezfzo6Oj/7Nw+mPs6n/r/69vj4+Pm5uY5ofY6ov/k5OT////j4uLl5eY0rPng4N/p6erm5+fe3t3n6OjIxb84rPnn6Onh4eHa2djq6+wopvokpfoyqvnr7O3c29nV1NH2/P/s+P/Dv7i54/78/PxBsPnk4+LZ2NXT0s7Oy8bHxL7Gw7295P0aoPjq6+v/9ejm5eTFwbrAvLW/u7MboPjo5+bc3dvX1tPPzcnLycTKx8EVof0qqfv5+fk2qPnz8/Lf3t3R0MwWn/pAr/g5pfj19PTv7/Ds7e+u1Ozo6eny6+f7+/sEmfr39/bX5u/68uz+8en/+Ojk5ebt5uL/693NysWz4v87oPnn8vjy9vfw7+/v7ezG3ezG3Oyk0Ozs6+rp6eji5efd5Ofa4uf15dr15dlgWgQ3AAAAO3RSTlMAkqDy4MNKG/Ly8ujl29XUzse8saqXeEs7L/Ly8fDo5uHBurKqoJaRiIOCgnZrZVxYTEJCPjUyLSgbFkA3SKwAAAKPSURBVDjLjdJnU9swGMBxUTYte3fvvXcryZE84gEkBpOSVTKbnZCEvTfde3zeyo7hOKB3/Z9fyPd7Hr3wGZg96Tp3qrq6uqGpsbGpgR1Onr30GNg9mB5wjiCEXr8ZGhofZYfhV4Pv7lXs5bTjMDqmX1h4e+IonLhp4dWjscvCKsdR6Dh2AMfz+cl/4ejywMDy28PoGEFLM6vzXz7Pr84soeGpfeicHHy/JnJb27//bG9timsf8pPOXXTmBr8uJlS/FJDY41cji/P5nNPGnPPXRilgZFICIUJqxwi6N35M5Sp4zZkI++J+RaMyz4s0hNPxcnhx6oqFN36G/XG3S4YQsyAUXclYJsxXWXg5XI4TF4SEYI7DhLGGY+nwRdOerifZHlsTiwXkKcyyZawJcXX9EcMLcjA9B6HCoUorCoTQVY6KrQDUU9XAMrt0ARUj+JsHoQRTnot66TPQI/v9GpvFNKKrgjqL0Pckx1bTGbkHdELJS6GZwOZJiG26GVI1oHSAtlKgJFrIcWygiJBA2IFXpGQzOOGWFJ6RxYRH6KPOm0csqcdttA16UEEn3B62ChIRbcMe5Emp7M261l0DOtkItZBwzLzeyqTsDpBacItm0pq1xyE049MhwezaMa2cFa+DfpqKcrz59RBCETIbCi1gNioGddoHQAsX9ZmfvYDsigKHXbqxeR4A0Ct7Y0oIk5Vd/OSOUBjT6X3AqpX9Bk9xYgyPmeGSEpKjGdoGzOoXeMnAc1iww3MwGqS4Hlj1yfJOTBddlOc4nrpoKpbl+Tpg91DUdCPoS5p/guALGjoVe8Fezzu0iC8bkLJZKSj5sNbeD/Z3t0WTFbfXqxJRa74DDlbXXVtz5nRNe3cd+K/+AthJ8toP0APiAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAWAQMAAAACb9WyAAAABlBMVEUAAAD/ISHbCYifAAAAAXRSTlMAQObYZgAAAB1JREFUCNdjYKj//w9CEAv+/wcqBhNEA0agYhABAMyqEOu7SXuEAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAWAQMAAAACb9WyAAAABlBMVEUAAAD/ISHbCYifAAAAAXRSTlMAQObYZgAAABpJREFUCNdj+P//DwOYIBKAFP//ByZI0AElAEKDEefBnVvLAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","/* eslint-disable jsx-a11y/anchor-is-valid, no-script-url */\nimport React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { Tabs, Toast } from \"antd-mobile\"\nimport { http } from \"src/utils\"\nimport storage from \"store2\"\nimport { html } from \"src/utils\"\nimport { compareDesc } from \"date-fns\"\nimport { Link } from \"react-router-dom\"\nimport { connect } from \"react-redux\"\n\nclass Scores extends Component {\n  store = storage.namespace(\"aiTestEntry\")\n\n  state = {\n    selfTabs: [\n      { title: \"当前成绩\" },\n      { title: \"今日最佳\" },\n      { title: \"本月最佳\" },\n    ],\n    rankList: [],\n    rankListTabs: [{ title: \"日榜\" }, { title: \"总榜\" }],\n    isExpandRankList: false,\n    icons: [\n      require(\"./rank-1.png\"),\n      require(\"./rank-2.png\"),\n      require(\"./rank-3.png\"),\n    ],\n    isShowRule: false,\n    isNeverShow: this.store.get(\"isNeverShow\"),\n    pageState: {},\n    availableTestNum: 0,\n    userScore: {},\n    userAddress: {\n      name: \"\",\n      phone: \"\",\n      address: \"\",\n    },\n    isShowUserAddress: false,\n    entryButtonInRule: false,\n  }\n\n  componentDidMount() {\n    this.getInitialData()\n    this.getRankList(null, 0)\n    if (!this.props.user.hasError) {\n      this.getUserScores(0)\n      this.getUserAddress()\n    }\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (this.props.user.hasError !== prevProps.user.hasError) {\n      this.getUserScores(0)\n      this.getUserAddress()\n    }\n  }\n\n  handleChange = (e) => {\n    const isNeverSHow = e.target.checked\n    this.setState({\n      isNeverSHow,\n    })\n    this.store.set(\"isNeverShow\", isNeverSHow)\n  }\n\n  startTest = () => {\n    this.props.history.push(\"/ai-test/exam\")\n  }\n\n  getInitialData = () => {\n    http.get(`${API.home}/sys/activity_data`).then((res) => {\n      const { code, msg, data } = res.data\n      if (code === 200) {\n        this.setState({\n          pageState: data,\n        })\n      } else if (code === 3009) {\n        this.props.history.push(\"/\")\n      } else {\n        Toast.fail(msg, 2, null, false)\n      }\n    })\n  }\n\n  getRankList = (tab, type) => {\n    http.get(`${API.home}/sys/at/ranks/${type === 0 ? 0 : 2}`).then((res) => {\n      const { code, msg, data } = res.data\n      if (code === 200) {\n        this.setState({\n          rankList: data,\n        })\n      } else {\n        Toast.fail(msg, 2, null, false)\n      }\n    })\n  }\n\n  getUserScores = (type) => {\n    http.get(`${API.home}/sys/at/user_score/${type}/0`).then((res) => {\n      const { code, msg, data } = res.data\n\n      if (code === 200) {\n        this.setState({\n          userScore: data,\n        })\n      } else {\n        Toast.fail(msg, 2, null, false)\n      }\n    })\n  }\n\n  getUserAddress = () => {\n    http.get(`${API.home}/sys/user_address_info`).then((res) => {\n      const { code, data } = res.data\n      if (code === 200) {\n        this.setState({\n          userAddress: data,\n        })\n      }\n    })\n  }\n\n  inputText = (e) => {\n    const key = e.target.name\n    const value = e.target.value\n    this.setState((state) => {\n      return {\n        userAddress: {\n          ...state.userAddress,\n          ...{\n            [key]: value,\n          },\n        },\n      }\n    })\n  }\n\n  submitForm = (e) => {\n    e.preventDefault()\n    const { userAddress } = this.state\n    if (!Object.values(userAddress).every((item) => !!item)) {\n      Toast.info(\"请填写完整\")\n      return\n    }\n    http.post(`${API.home}/sys/update_address`, userAddress).then((res) => {\n      const { code, msg } = res.data\n      if (code === 200) {\n        Toast.success(\"提交成功\", 2, null, false)\n        this.setState({\n          isShowUserAddress: false,\n        })\n      } else {\n        Toast.fail(msg, 2, null, false)\n      }\n    })\n  }\n\n  render() {\n    const {\n      selfTabs,\n      rankList,\n      rankListTabs,\n      icons,\n      isExpandRankList,\n      isShowRule,\n      isNeverShow,\n      pageState,\n      userScore,\n      isShowUserAddress,\n      userAddress,\n      entryButtonInRule,\n    } = this.state\n    const { user, history } = this.props\n    const _rankList = Array.isArray(rankList)\n      ? isExpandRankList\n        ? rankList\n        : rankList.slice(0, 10)\n      : []\n    return (\n      <div className={\"scores\"}>\n        <div className=\"banner\">\n          <img src={pageState.h5_banner} alt=\"\" />\n        </div>\n        <div className=\"info\">\n          <span>已有{pageState.join_num}人参加测试</span>\n          <a\n            href=\"javascript:void(0);\"\n            onClick={() => {\n              this.setState({\n                isShowRule: true,\n              })\n            }}\n          >\n            规则\n          </a>\n        </div>\n        {\n          <div className=\"score-list\">\n            <Tabs\n              tabs={selfTabs}\n              tabBarUnderlineStyle={{ display: \"none\" }}\n              onChange={(tab, i) => {\n                this.getUserScores(i)\n              }}\n            >\n              {selfTabs.map((tab, index) => {\n                return (\n                  <div className={\"tab-content\"} key={index}>\n                    <table>\n                      <thead>\n                        <tr>\n                          <th>分数</th>\n                          <th>用时</th>\n                          <th>{index === 0 && \"最终\"}排名</th>\n                        </tr>\n                      </thead>\n                      <tbody>\n                        {user.hasError ? (\n                          <tr>\n                            <td>--</td>\n                            <td>--</td>\n                            <td>--</td>\n                          </tr>\n                        ) : (\n                          <tr>\n                            {userScore.score === \"-\" ? (\n                              <td>'-'</td>\n                            ) : (\n                              <td>\n                                {userScore.score}{\" \"}\n                                <Link\n                                  to={`/ai-test/analysis/${userScore.r_id}`}\n                                >\n                                  解析\n                                </Link>\n                              </td>\n                            )}\n                            <td>{userScore.cost_time}</td>\n                            {userScore.rank === \"-\" ? (\n                              <td>'-'</td>\n                            ) : (\n                              <td>{userScore.rank}名</td>\n                            )}\n                          </tr>\n                        )}\n                      </tbody>\n                    </table>\n                  </div>\n                )\n              })}\n            </Tabs>\n            <div className=\"share\">\n              <Link to={\"/ai-test/report\"}>分享</Link>\n            </div>\n          </div>\n        }\n        <div className=\"rank-list\">\n          <div className=\"head\">\n            <div>测试排行榜</div>\n            <div>\n              <span>仅显示前50名</span>\n              <a\n                href=\"javascript:void(0);\"\n                onClick={() => {\n                  if (user.hasError) {\n                    history.push(\"/passport\")\n                  } else {\n                    this.setState({\n                      isShowUserAddress: true,\n                    })\n                  }\n                }}\n              >\n                收货地址\n              </a>\n            </div>\n          </div>\n          <div className=\"list\">\n            <Tabs\n              tabs={rankListTabs}\n              tabBarUnderlineStyle={{ display: \"none\" }}\n              onChange={this.getRankList}\n            >\n              {rankListTabs.map((item, index) => {\n                return (\n                  <table key={index}>\n                    <thead>\n                      <tr>\n                        <th>名次</th>\n                        <th>昵称</th>\n                        <th>成绩</th>\n                        <th>奖品</th>\n                      </tr>\n                    </thead>\n                    <tbody>\n                      {!!_rankList.length &&\n                        _rankList.map((item, index) => {\n                          return (\n                            <tr key={index}>\n                              <td>\n                                {index < 3 ? (\n                                  <img src={icons[index]} alt=\"\" />\n                                ) : (\n                                  index + 1\n                                )}\n                              </td>\n                              <td>\n                                <img\n                                  src={item.avatar}\n                                  className={\"avatar\"}\n                                  alt=\"\"\n                                />\n                                {item.user_name}\n                              </td>\n                              <td>\n                                <span className={\"score\"}>{item.score}</span>/\n                                <span>{item.cost_time}</span>\n                              </td>\n                              <td>\n                                <div>\n                                  {item.prize_url ? (\n                                    <a href={`${item.prize_url}#goback`}>\n                                      {item.prize}\n                                    </a>\n                                  ) : (\n                                    item.prize\n                                  )}\n                                </div>\n                              </td>\n                            </tr>\n                          )\n                        })}\n                    </tbody>\n                  </table>\n                )\n              })}\n            </Tabs>\n            {rankList.length > 10 &&\n              (!isExpandRankList ? (\n                <div\n                  className=\"expand\"\n                  onClick={() => {\n                    this.setState({\n                      isExpandRankList: true,\n                    })\n                  }}\n                >\n                  <span>\n                    展开更多\n                    <i className={\"iconfont iconiconfront-69\"}></i>\n                  </span>\n                </div>\n              ) : (\n                <div\n                  className=\"expand\"\n                  onClick={() => {\n                    this.setState({\n                      isExpandRankList: false,\n                    })\n                  }}\n                >\n                  <span>\n                    收起\n                    <i className={\"iconfont iconiconfront-71\"}></i>\n                  </span>\n                </div>\n              ))}\n          </div>\n        </div>\n        <div className=\"qrcode\">\n          <img\n            src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/ai-test/qr.png\"\n            alt=\"\"\n          />\n          <div>得100分,请长按/扫码,免费领课!</div>\n        </div>\n        <div className=\"btn\">\n          {compareDesc(new Date(), pageState.stop_time * 1000) > 0 ? (\n            pageState.daily_test_num > 0 ? (\n              <button\n                className={\"available\"}\n                onClick={() => {\n                  isNeverShow\n                    ? this.startTest()\n                    : this.setState({\n                        entryButtonInRule: true,\n                        isShowRule: true,\n                      })\n                }}\n              >\n                开始测试<span>(今日可测试{pageState.daily_test_num}次)</span>\n              </button>\n            ) : (\n              <Link to={`/ai-test/share?shareCode=${pageState.code}`}>\n                <button className={\"get-chance\"}>\n                  获取测试机会<span>(今日可测试0次)</span>\n                </button>\n              </Link>\n            )\n          ) : (\n            <button className={\"unavailable\"}>活动已结束</button>\n          )}\n        </div>\n        {isShowRule && (\n          <Rule\n            rule={pageState.rule}\n            startTest={this.startTest}\n            neverShow={this.handleChange}\n            isNeverShow={isNeverShow}\n            close={() => {\n              this.setState({\n                isShowRule: false,\n                entryButtonInRule: false,\n              })\n            }}\n            entryButtonInRule={entryButtonInRule}\n          />\n        )}\n        {isShowUserAddress && (\n          <div className=\"user-address-wrapper\">\n            <div className=\"user-address\">\n              <div className=\"title\">收货信息</div>\n              <div className=\"tip\">\n                获奖用户(以最终榜单为准)请及时填写收货信息\n              </div>\n              <form action=\"\" onSubmit={this.submitForm}>\n                <input\n                  type=\"text\"\n                  placeholder={\"收件人\"}\n                  name={\"name\"}\n                  onChange={this.inputText}\n                  value={userAddress.name}\n                />\n                <input\n                  type=\"tel\"\n                  placeholder={\"联系方式\"}\n                  name={\"phone\"}\n                  onChange={this.inputText}\n                  value={userAddress.phone}\n                />\n                <input\n                  type=\"text\"\n                  placeholder={\"收货地址\"}\n                  name={\"address\"}\n                  onChange={this.inputText}\n                  value={userAddress.address}\n                />\n                <button\n                  type={\"submit\"}\n                  className={\n                    Object.values(userAddress).every((value) => !!value)\n                      ? \"available\"\n                      : \"\"\n                  }\n                >\n                  提交\n                </button>\n              </form>\n              <i\n                className={\"close iconfont iconiconfront-2\"}\n                onClick={() => {\n                  this.setState({\n                    isShowUserAddress: false,\n                  })\n                }}\n              />\n            </div>\n          </div>\n        )}\n      </div>\n    )\n  }\n}\n\nfunction Rule({\n  neverShow,\n  isNeverShow,\n  rule,\n  close,\n  startTest,\n  entryButtonInRule,\n}) {\n  return (\n    <div className=\"rule-mask\">\n      <div className=\"rule\">\n        <div>测试规则</div>\n        <div dangerouslySetInnerHTML={html(rule)}></div>\n        {entryButtonInRule && (\n          <>\n            <div className=\"option\">\n              <input\n                id={\"never-show\"}\n                type=\"checkbox\"\n                onChange={neverShow}\n                checked={isNeverShow}\n              />\n              <label htmlFor=\"never-show\">不再提示</label>\n            </div>\n            <button onClick={startTest}>进入测试</button>\n          </>\n        )}\n        <i className={\"close iconfont iconiconfront-2\"} onClick={close} />\n      </div>\n    </div>\n  )\n}\n\nexport default connect(({ user }) => ({ user }), null)(Scores)\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport classnames from \"classnames\"\n\nclass Question extends Component {\n  handleSelect = (option) => {\n    const { selectAnswer } = this.props\n    if (selectAnswer) {\n      selectAnswer(this.props.question, option.id)\n      this.setState({\n        selectedId: option.id,\n      })\n    }\n  }\n\n  render() {\n    const { question, answer, activeIndex, category } = this.props\n    return (\n      <div className={\"question-container\"}>\n        {\n          <div className=\"question\">\n            {activeIndex !== undefined && `${activeIndex + 1}.`}\n            {category && <span className={\"category\"}>{category}</span>}&nbsp;\n            <span dangerouslySetInnerHTML={{ __html: question.ques }}></span>\n          </div>\n        }\n        <ul className={\"options\"}>\n          {!!question.options.length &&\n            question.options.map((item, index) => {\n              return (\n                <li\n                  key={item.id}\n                  className={classnames({\n                    active: answer && answer[question.id] === item.id,\n                    error: item.user_select && !item.is_ans,\n                    correct: item.is_ans,\n                  })}\n                  onClick={this.handleSelect.bind(this, item)}\n                >\n                  <div className={\"letter\"}>\n                    {String.fromCharCode(65 + index)}\n                  </div>\n                  <div>{item.des}</div>\n                </li>\n              )\n            })}\n        </ul>\n      </div>\n    )\n  }\n}\n\nexport default Question\n","import React from \"react\"\nimport \"./index.scss\"\nimport classnames from \"classnames\"\n\nconst Navigation = ({ questions, answer, handleClick, isAnalysis }) => {\n  return (\n    <div className=\"navigation\">\n      <ul>\n        {!!questions.length &&\n          questions.map((item, index) => {\n            const userSelectIndex = item.options.findIndex(\n              (item) => item.user_select\n            )\n            const rightAnswerIndex = item.options.findIndex(\n              (item) => item.is_ans\n            )\n            return (\n              <li\n                key={index}\n                onClick={handleClick.bind(this, index)}\n                className={classnames({\n                  active: answer && answer[item.id],\n                  correct: isAnalysis && userSelectIndex === rightAnswerIndex,\n                  error:\n                    isAnalysis &&\n                    userSelectIndex >= 0 &&\n                    userSelectIndex !== rightAnswerIndex,\n                  unselect: isAnalysis && userSelectIndex < 0,\n                })}\n              >\n                {index + 1}\n              </li>\n            )\n          })}\n      </ul>\n    </div>\n  )\n}\n\nexport default Navigation\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport Question from \"../common/question\"\nimport { browser, getParam, http } from \"src/utils\"\nimport { Toast } from \"antd-mobile\"\nimport storage from \"store2\"\nimport Navigation from \"src/components/ai-test/common/navigation\"\nimport {\n  differenceInSeconds,\n  differenceInMinutes,\n  differenceInHours,\n  differenceInDays,\n  differenceInMilliseconds,\n} from \"date-fns\"\nimport { isEmpty } from \"lodash\"\nimport { connect } from \"react-redux\"\nimport { matchPath } from \"react-router-dom\"\n\nclass Exam extends Component {\n  store = storage.namespace(\"aiTestExam\")\n  timer = null\n  unlisten = null\n\n  state = {\n    questions: [],\n    activeQuestion: 0,\n    time: {\n      d: 0,\n      h: 0,\n      m: 0,\n      s: 0,\n    },\n    elapsed: 0,\n    answer: {},\n    recordId: undefined,\n  }\n\n  componentDidMount() {\n    const { user, history } = this.props\n    if (user.hasError) {\n      return history.push(\"/passport\")\n    }\n    if (this.store.session.get(\"submitted\")) {\n      this.store.session.clearAll()\n      this.props.history.replace(\"/ai-test\")\n    }\n    this.unlisten = history.listen((location) => {\n      const match = matchPath(location.pathname, {\n        path: \"/ai-test\",\n      })\n      if (match.isExact) {\n        this.store.clearAll()\n      }\n      this.unlisten && this.unlisten()\n    })\n    this.getQuestions()\n\n    document.addEventListener(\"visibilitychange\", () => {\n      if (document.visibilityState === \"visible\") {\n        this.setState((state) => {\n          return {\n            elapsed:\n              state.elapsed +\n              (Date.now() - this.store.session.get(\"hiddenTimestamp\")) / 10,\n          }\n        })\n      } else {\n        this.store.session.set(\"hiddenTimestamp\", Date.now())\n      }\n    })\n  }\n\n  componentWillUnmount() {\n    clearInterval(this.timer)\n  }\n\n  setCounter = () => {\n    this.timer = setInterval(() => {\n      this.setState((state) => {\n        const fms = state.elapsed + 1\n        return {\n          time: {\n            d: Math.floor(fms / (60 * 60 * 100 * 24)),\n            h: Math.floor(fms / (60 * 60 * 100)) % 24,\n            m: Math.floor(fms / (60 * 100)) % 60,\n            s: Math.floor(fms / 100) % 60,\n          },\n          elapsed: fms,\n        }\n      })\n    }, 10)\n  }\n\n  goBack = () => {\n    const { state } = this.props.location\n    if (browser.isWeixin && getParam(\"code\") && getParam(\"state\")) {\n      window.history.go(-2)\n    }\n    if (state.records && state.records.length > 1) {\n      window.history.go(-1)\n    } else if (state.from && state.from.pathname) {\n      window.location.replace(`${state.from.pathname}${state.from.search}`)\n    } else {\n      window.location.href = window.location.origin\n    }\n  }\n\n  getQuestions = () => {\n    http.get(`${API.home}/sys/get_question`).then((res) => {\n      const { code, msg, data } = res.data\n      if (code === 200) {\n        let answer = this.store.session.get(\"answer\") || {}\n        if (isEmpty(answer)) {\n          data.forEach((item) => {\n            answer[item.id] = 0\n          })\n        }\n        this.setState({\n          questions: data,\n          answer,\n          recordId: data[0].record_id,\n        })\n        this.getStartTime(data[0].create_time, data[0].now)\n        this.setCounter()\n      } else if (code === 23007) {\n        this.props.history.replace(\"/ai-test/scores\")\n      } else {\n        Toast.fail(msg, 2, null, false)\n      }\n    })\n  }\n\n  getStartTime = (createTimeStamp, current) => {\n    const now = new Date(current * 1000)\n    const createTime = new Date(createTimeStamp * 1000)\n    this.setState({\n      time: {\n        d: differenceInDays(now, createTime),\n        h: differenceInHours(now, createTime) % 24,\n        m: differenceInMinutes(now, createTime) % 60,\n        s: differenceInSeconds(now, createTime) % 60,\n      },\n      elapsed: differenceInMilliseconds(now, createTime) / 10,\n    })\n  }\n\n  selectAnswer = (question, optionId) => {\n    this.setState(\n      (state) => {\n        const answer = state.answer\n        const activeQuestion = state.activeQuestion + 1\n        setTimeout(() => {\n          this.setState({\n            activeQuestion:\n              activeQuestion >= state.questions.length\n                ? state.questions.length - 1\n                : activeQuestion,\n          })\n        }, 200)\n        answer[question.id] = optionId\n        return {\n          answer,\n        }\n      },\n      () => {\n        const { questions, activeQuestion } = this.state\n        if (activeQuestion === questions.length - 1) {\n          this.storeData()\n        }\n      }\n    )\n  }\n\n  storeData = () => {\n    const { answer, time, recordId, elapsed } = this.state\n    const { history } = this.props\n    clearInterval(this.timer)\n    this.store.session.setAll({ time, answer, recordId, elapsed })\n    history.push(\"/ai-test/submit\")\n  }\n\n  render() {\n    const { questions, activeQuestion, time, answer } = this.state\n    return (\n      <div className={\"exam\"}>\n        <header>\n          <div className=\"go-back\">\n            <i className=\"iconfont iconiconfront-68\" onClick={this.goBack}></i>\n          </div>\n          <div className=\"time\">\n            <i className={\"iconfont iconzhong\"}></i>\n            <span>\n              {!!time.d && <>{time.d}天</>}\n              {!!time.h && <>{time.h && time.h.toString().padStart(2, \"0\")}:</>}\n              {time.m.toString().padStart(2, \"0\")}:\n              {time.s.toString().padStart(2, \"0\")}\n            </span>\n          </div>\n          <div className=\"count\" onClick={this.storeData}>\n            {Object.values(answer).filter((item) => item).length}/\n            {questions.length}\n          </div>\n        </header>\n        <div className=\"banner\">\n          <img\n            src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/ai-test/m/scores/exam-banner.png\"\n            alt=\"\"\n          />\n        </div>\n        <div className=\"question-section\">\n          {!!questions.length && (\n            <Question\n              activeIndex={activeQuestion}\n              question={questions[activeQuestion]}\n              selectAnswer={this.selectAnswer}\n              answer={answer}\n            ></Question>\n          )}\n        </div>\n        <Navigation\n          questions={questions}\n          answer={answer}\n          handleClick={(index) => {\n            this.setState({\n              activeQuestion: index,\n            })\n          }}\n        />\n      </div>\n    )\n  }\n}\n\nexport default connect(({ user }) => ({ user }), null)(Exam)\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { HeaderBar } from \"src/common/index\"\nimport storage from \"store2\"\nimport { Toast } from \"antd-mobile\"\nimport { http } from \"src/utils\"\nimport classnames from \"classnames\"\nimport { Link } from \"react-router-dom\"\nimport { isEmpty } from \"lodash\"\n\nclass SubmitAnswer extends Component {\n  store = storage.namespace(\"aiTestExam\")\n  timer = null\n\n  state = {\n    time: this.store.session.get(\"time\") || { d: 0, h: 0, m: 0, s: 0 },\n    answer: this.store.session.get(\"answer\"),\n    recordId: this.store.session.get(\"recordId\"),\n    analysis: [],\n    results: [],\n    elapsed: this.store.session.get(\"elapsed\"),\n  }\n\n  componentDidMount() {\n    if (isEmpty(this.state.answer) || !this.state.recordId) {\n      this.props.history.replace(\"/ai-test\")\n      this.store.session.remove(\"submitted\")\n    }\n    if (this.store.session.get(\"submitted\")) {\n      this.getAnalysis()\n    } else {\n      this.setCounter()\n    }\n  }\n\n  componentWillUnmount() {\n    clearInterval(this.timer)\n  }\n\n  setCounter = () => {\n    this.timer = setInterval(() => {\n      this.setState((state) => {\n        const fms = state.elapsed + 1\n        return {\n          time: {\n            d: Math.floor(fms / (60 * 60 * 100 * 24)),\n            h: Math.floor(fms / (60 * 60 * 100)) % 24,\n            m: Math.floor(fms / (60 * 100)) % 60,\n            s: Math.floor(fms / 100) % 60,\n          },\n          elapsed: fms,\n        }\n      })\n    }, 10)\n  }\n\n  submit = () => {\n    const { answer, recordId } = this.state\n    http\n      .post(`${API.home}/sys/submit_answer`, {\n        answer: JSON.stringify(answer),\n        cost_time: this.state.elapsed * 10,\n        record_id: recordId,\n      })\n      .then((res) => {\n        const { code, msg } = res.data\n        if (code === 200) {\n          this.store.session.set(\"submitted\", true)\n          this.store.session.set(\"elapsed\", this.state.elapsed)\n          this.store.session.set(\"time\", this.state.time)\n          clearInterval(this.timer)\n          this.props.history.push(\"/ai-test/report\")\n        } else {\n          Toast.fail(msg, 2, null, false)\n        }\n      })\n  }\n\n  getAnalysis = () => {\n    http\n      .post(`${API.home}/sys/get_analysis`, {\n        record_id: this.state.recordId,\n      })\n      .then((res) => {\n        const { code, msg, data } = res.data\n        if (code === 200) {\n          this.setState({\n            analysis: data,\n          })\n        } else {\n          Toast.fail(msg, 2, null, false)\n        }\n      })\n  }\n\n  render() {\n    const { time, answer, analysis, recordId } = this.state\n    return (\n      <div className={\"submit-answer\"}>\n        <HeaderBar title={\"提交试卷\"} arrow={true} />\n        <div className=\"content\">\n          <div className=\"cost\">\n            用时:\n            <span>\n              {!!time.d && <>{time.d}天</>}\n              {!!time.h && <>{time.h && time.h.toString().padStart(2, \"0\")}:</>}\n              {time.m.toString().padStart(2, \"0\")}:\n              {time.s.toString().padStart(2, \"0\")}\n            </span>\n          </div>\n          {analysis.length ? (\n            <>\n              <ul className={\"answers\"}>\n                {analysis.map((item, index) => {\n                  const userSelectIndex = item.options.findIndex(\n                    (item) => item.user_select\n                  )\n                  const rightAnswerIndex = item.options.findIndex(\n                    (item) => item.is_ans\n                  )\n                  return (\n                    <li\n                      key={item.id}\n                      className={classnames({\n                        correct: userSelectIndex === rightAnswerIndex,\n                        wrong:\n                          userSelectIndex >= 0 &&\n                          userSelectIndex !== rightAnswerIndex,\n                        unselect: userSelectIndex < 0,\n                      })}\n                    >\n                      {index + 1}\n                    </li>\n                  )\n                })}\n              </ul>\n              {!!analysis.length && (\n                <div className={\"score\"}>总分:{analysis[0].score}分</div>\n              )}\n              <Link to={`/ai-test/analysis/${recordId}`}>\n                <button>查看解析</button>\n              </Link>\n            </>\n          ) : (\n            <>\n              <ul className={\"answers\"}>\n                {answer &&\n                  !!Object.keys(answer).length &&\n                  Object.keys(answer).map((item, index) => {\n                    return (\n                      <li key={item} className={answer[item] ? \"selected\" : \"\"}>\n                        {index + 1}\n                      </li>\n                    )\n                  })}\n              </ul>\n              <button onClick={this.submit}>提交</button>\n            </>\n          )}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default SubmitAnswer\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { Link } from \"react-router-dom\"\n\nclass Recommends extends Component {\n  render() {\n    const { recommends } = this.props\n    return (\n      <div className=\"recommends\">\n        <div>相关课程</div>\n        <ul>\n          {!!recommends.length &&\n            recommends.map((item) => {\n              return (\n                <li key={item.course_id}>\n                  <Link to={`/detail?id=${item.course_id}`}>\n                    <img src={item.image_name} alt=\"\" />\n                  </Link>\n                </li>\n              )\n            })}\n        </ul>\n      </div>\n    )\n  }\n}\n\nexport default Recommends\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { HeaderBar } from \"src/common/index\"\nimport Question from \"src/components/ai-test/common/question\"\nimport Navigation from \"src/components/ai-test/common/navigation\"\nimport { html, http } from \"src/utils\"\nimport { Toast } from \"antd-mobile\"\nimport Recommends from \"src/components/ai-test/common/recommends\"\n\nclass Analysis extends Component {\n  state = {\n    questions: [],\n    activeIndex: 0,\n    userSelect: \"\",\n    rightAnswer: \"\",\n    userUnselect: false,\n  }\n\n  componentDidMount() {\n    this.getAnalysis()\n  }\n\n  getAnalysis = () => {\n    http\n      .post(`${API.home}/sys/get_analysis`, {\n        record_id: this.props.match.params.recordId,\n      })\n      .then((res) => {\n        const { code, msg, data } = res.data\n        if (code === 200) {\n          this.setState(\n            {\n              questions: data,\n            },\n            () => {\n              this.getAnswerInfo()\n            }\n          )\n        } else {\n          Toast.fail(msg, 2, null, false)\n        }\n      })\n  }\n\n  getAnswerInfo = () => {\n    const { questions, activeIndex } = this.state\n    const question = questions[activeIndex]\n    const userAnswerIndex = question.options.findIndex(\n      (item) => item.user_select\n    )\n    const rightAnswerIndex = question.options.findIndex((item) => item.is_ans)\n    this.setState({\n      userSelect: String.fromCharCode(65 + userAnswerIndex),\n      rightAnswer: String.fromCharCode(65 + rightAnswerIndex),\n      userUnselect: userAnswerIndex < 0,\n    })\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (prevState.activeIndex !== this.state.activeIndex) {\n      this.getAnswerInfo()\n    }\n  }\n\n  render() {\n    const {\n      questions,\n      activeIndex,\n      userSelect,\n      rightAnswer,\n      userUnselect,\n    } = this.state\n    return (\n      <div className={\"analysis-container\"}>\n        <HeaderBar title={\"AI水平测试\"} arrow={true} />\n        {!!questions.length && (\n          <Question\n            activeIndex={activeIndex}\n            question={questions[activeIndex]}\n          />\n        )}\n        <div style={{ height: \"8px\", backgroundColor: \"#f5f5f5\" }}></div>\n        <div className=\"analysis\">\n          {userUnselect ? (\n            <div className={\"info\"}>您未作答</div>\n          ) : (\n            <div className=\"info\">\n              您选择的是{userSelect},正确答案是{rightAnswer} 回答\n              {userSelect === rightAnswer ? \"正确\" : \"错误\"}\n            </div>\n          )}\n          <div className=\"content\">\n            <div className=\"head\">\n              <i className=\"icon\"></i>\n              <span>解析</span>\n            </div>\n            {!!questions.length && (\n              <div\n                className=\"analysis-content\"\n                dangerouslySetInnerHTML={html(questions[activeIndex].analysis)}\n              ></div>\n            )}\n          </div>\n        </div>\n        {!!questions.length &&\n          questions[activeIndex] &&\n          questions[activeIndex].commend_course &&\n          !!questions[activeIndex].commend_course.length && (\n            <Recommends recommends={questions[activeIndex].commend_course} />\n          )}\n        <Navigation\n          questions={questions}\n          isAnalysis={true}\n          handleClick={(index) => {\n            this.setState({\n              activeIndex: index,\n            })\n          }}\n        />\n      </div>\n    )\n  }\n}\n\nexport default Analysis\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { HeaderBar } from \"src/common/index\"\nimport Question from \"src/components/ai-test/common/question\"\nimport { html, http, browser } from \"src/utils\"\nimport { Toast } from \"antd-mobile\"\nimport { Link } from \"react-router-dom\"\nimport { connect } from \"react-redux\"\nimport Recommends from \"src/components/ai-test/common/recommends\"\nimport classnames from \"classnames\"\nimport storage from \"store2\"\n\nclass Assist extends Component {\n  store = storage.namespace(\"aiTestAssist\")\n\n  state = {\n    question: this.store.session.get(\"question\"),\n    answer: this.store.session.get(\"answer\"),\n    result: null,\n    rightAnswer: \"\",\n    userAnswer: \"\",\n  }\n\n  componentDidMount() {\n    if (!this.store.session.get(\"question\")) {\n      this.getData()\n    }\n  }\n\n  getData = () => {\n    http.get(`${API.home}/sys/aitest/assist`).then((res) => {\n      const { code, msg, data } = res.data\n      if (code === 200) {\n        const answer = {\n          [data.id]: 0,\n        }\n        this.store.session.set(\"question\", data)\n        this.store.session.set(\"answer\", answer)\n        this.setState({\n          question: data,\n          answer,\n        })\n      } else {\n        Toast.fail(msg, 2, null, false)\n      }\n    })\n  }\n\n  selectAnswer = (question, optionId) => {\n    this.setState({\n      answer: {\n        [question.id]: optionId,\n      },\n    })\n  }\n\n  submit = () => {\n    const { history, user } = this.props\n    if (user.hasError) {\n      if (browser.isWeixin) {\n        window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=${encodeURIComponent(\n          `${window.location.origin}${window.location.pathname}?aa=bb`\n        )}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`\n      } else {\n        history.push(\"/passport\")\n      }\n      return\n    }\n    const { question, answer } = this.state\n    if (!answer[question.id]) {\n      Toast.info(\"请选择后进提交\", 2, null, false)\n      return\n    }\n    http\n      .post(`${API.home}/sys/aitest/assistSubmit`, {\n        code: this.props.match.params.assistCode,\n        question_id: question.id,\n        answer_id: answer[question.id],\n      })\n      .then((res) => {\n        const { code, msg, data } = res.data\n        if (answer[question.id] === data.correct_answer) {\n          Toast.info(\"回答正确\", 2, null, false)\n        } else {\n          Toast.info(\"回答错误\", 2, null, false)\n        }\n        this.setAnswer(data.correct_answer)\n        if (code === 200) {\n          this.setState({\n            result: data,\n          })\n          this.store.session.clearAll()\n        } else {\n          Toast.fail(msg, 2, null, false)\n        }\n      })\n  }\n\n  setAnswer = (rightAnswerId) => {\n    this.setState((state) => {\n      let rightAnswer = \"\",\n        userAnswer = \"\"\n      const question = {\n        ...state.question,\n        ...{\n          options: state.question.options.map((item, index) => {\n            if (item.id === rightAnswerId) {\n              item.is_ans = 1\n              rightAnswer = String.fromCharCode(65 + index)\n            }\n            if (item.id === state.answer[state.question.id]) {\n              userAnswer = String.fromCharCode(65 + index)\n              item.user_select = 1\n            }\n            return item\n          }),\n        },\n      }\n      return {\n        question,\n        rightAnswer,\n        userAnswer,\n      }\n    })\n  }\n\n  render() {\n    const { question, answer, result, rightAnswer, userAnswer } = this.state\n    return (\n      <div className={\"assist\"}>\n        <HeaderBar title={\"AI水平测试\"} arrow={true} />\n        {question && (\n          <Question\n            question={question}\n            category={\"机器学习\"}\n            answer={answer}\n            selectAnswer={!result && this.selectAnswer}\n          />\n        )}\n        <div style={{ height: \"8px\", backgroundColor: \"#f5f5f5\" }}></div>\n        {result && (\n          <div className=\"content\">\n            <div className={\"info\"}>\n              您的选择是{userAnswer},正确答案是{rightAnswer} 回答\n              {userAnswer === rightAnswer ? \"正确\" : \"错误\"}\n            </div>\n            <div className=\"head\">\n              <i className=\"icon\"></i>\n              <span>解析</span>\n            </div>\n            <div\n              className=\"analysis-content\"\n              dangerouslySetInnerHTML={html(result.analysis)}\n            ></div>\n          </div>\n        )}\n        {result && question.commend_course && question.commend_course.length && (\n          <>\n            <Recommends recommends={question.commend_course} />\n          </>\n        )}\n\n        <div className=\"btns\">\n          {result && (\n            <div\n              className={classnames([\n                \"status\",\n                {\n                  end: result.status === 6,\n                  success: result.status === 1,\n                  error:\n                    result.status === 2 ||\n                    result.status === 3 ||\n                    result.status === 4 ||\n                    result.status === 5,\n                },\n              ])}\n            >\n              {result.desc}\n            </div>\n          )}\n          {!result && (\n            <button className={\"submit\"} onClick={this.submit}>\n              提交\n            </button>\n          )}\n          {result &&\n            (result.status === 6 ? (\n              <Link to={\"/\"} className={\"home\"}>\n                返回首页\n              </Link>\n            ) : (\n              <Link to={\"/ai-test/scores\"} className={\"test\"}>\n                我也要测试\n              </Link>\n            ))}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default connect(({ user }) => ({ user }), null)(Assist)\n","import React, { Component } from \"react\"\nimport { CopyToClipboard } from \"react-copy-to-clipboard\"\nimport { browser, http, wxShare, getParam } from \"src/utils\"\nimport \"./index.scss\"\nimport { Toast } from \"antd-mobile\"\n\nclass aiTestHelp extends Component {\n  constructor(props) {\n    super(props)\n    this.state = {\n      total_num: \"\",\n      dec: \"\",\n      isshowYindao: false,\n    }\n  }\n\n  componentDidMount() {\n    this.handleFetchInfo()\n    this.getAssist()\n  }\n\n  share = () => {\n    wxShare({\n      title: \"全国AI水平测试开始了,看看你能答对几道题?\",\n      desc: this.state.dec,\n      link: `${API.m}/ai-test/assist/${getParam(\"shareCode\")}`,\n      imgUrl:\n        \"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/ai-test/m/share-img.png\",\n    })\n    this.setState({\n      isshowYindao: true,\n    })\n  }\n\n  copyToSuccess = () => {\n    Toast.info(\"链接已复制,快去发送给好友吧~\")\n  }\n\n  handleFetchInfo = () => {\n    http.get(`${API.home}/sys/aitest/invitation`).then((res) => {\n      const { code, data } = res.data\n      if (code === 200) {\n        this.setState({\n          total_num: data.total_num,\n        })\n      }\n    })\n  }\n\n  getAssist = () => {\n    http.get(`${API.home}/sys/aitest/assist`).then((res) => {\n      const { code, data } = res.data\n      if (code === 200) {\n        this.setState({\n          dec: data.ques,\n        })\n      }\n    })\n  }\n\n  render() {\n    const { total_num, isshowYindao } = this.state\n    return (\n      <div className={\"ai-test-help\"}>\n        <div className=\"banner\">\n          <img\n            src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/ai-test/m/text2.png\"\n            alt=\"\"\n          />\n          <span>{total_num}</span>\n          <img\n            src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/ai-test/m/text1.png\"\n            alt=\"\"\n          />\n        </div>\n\n        <p className={\"tip-l\"}>分享给好友</p>\n        <p className={\"tip-s\"}>每个好友只能助力1次哦~</p>\n        <p className={\"tip-m\"}>好友答题为你助力,答题正确你将获得</p>\n        <p className={\"tip-num\"}>一次测试机会</p>\n\n        {!browser.isWeixin && (\n          <CopyToClipboard\n            text={`${API.m}/ai-test/assist/${getParam(\"shareCode\")}`}\n            onCopy={this.copyToSuccess}\n          >\n            <div className={\"share-btn\"}>邀请好友助力</div>\n          </CopyToClipboard>\n        )}\n        {browser.isWeixin && (\n          <div className={\"share-btn\"} onClick={this.share}>\n            邀请好友助力\n          </div>\n        )}\n\n        {isshowYindao && (\n          <div className={\"share\"}>\n            <div className=\"content\">\n              <p className=\"test\">点击右上角,分享给好友</p>\n              <i className=\"iconfont\"></i>\n            </div>\n          </div>\n        )}\n      </div>\n    )\n  }\n}\n\nexport default aiTestHelp\n","/* eslint-disable eqeqeq */\nimport React, { Component } from \"react\"\nimport { HeaderBar } from \"src/common\"\nimport { getParam, http } from \"src/utils\"\nimport \"./index.scss\"\nimport QRCode from \"qrcode\"\nimport html2canvas from \"html2canvas\"\nimport scoreIconL from \"src/assets/image/score_icon-l.png\"\nimport scoreIconR from \"src/assets/image/score_icon-r.png\"\nimport scoreReportBg from \"src/assets/image/scoreReport_bg.png\"\nimport { connect } from \"react-redux\"\n\n@connect((state) => ({\n  user: state.user,\n}))\nclass scoreReport extends Component {\n  constructor(props) {\n    super(props)\n    this.state = {\n      tab: [\"当前成绩\", \"今日最佳\", \"本月最佳\"],\n      cutIndex: 0,\n      myRankList: \"\",\n      imgUrl: \"\",\n      codeSrc: \"\",\n      avatar_file: \"\",\n    }\n  }\n\n  componentDidMount() {\n    window.onbeforeunload = () => {\n      document.documentElement.scrollTop = 0\n      document.body.scrollTop = 0\n    }\n    this.getCodeWe()\n    this.handleFetchInfo(0)\n  }\n\n  // shouldComponentUpdate(nextProps, nextState, nextContext) {\n  //   if (this.props.user.data.avatar !== nextProps.user.data.avatar) {\n  //     this.getCanvas()\n  //     return false\n  //   }\n  //   return true\n  // }\n  //\n\n  getCanvas() {\n    document.documentElement.scrollTop = 0\n    document.body.scrollTop = 0\n\n    let _this = this\n    var canvas2 = document.createElement(\"canvas\")\n    let _canvas = document.getElementsByClassName(\"score-list\")[0]\n    if (!_canvas) {\n      return\n    }\n    var w = parseInt(window.getComputedStyle(_canvas).width)\n    var h = parseInt(window.getComputedStyle(_canvas).height)\n    var scale = window.devicePixelRatio\n    canvas2.width = w * scale\n    canvas2.height = h * scale\n\n    var context = canvas2.getContext(\"2d\")\n    context.scale(1, 1)\n    html2canvas(document.getElementsByClassName(\"score-list\")[0], {\n      canvas: canvas2,\n    }).then(function (canvas) {\n      //document.body.appendChild(canvas);\n\n      let imgUrl = canvas\n        .toDataURL(\"image/png\")\n        .replace(\"image/png\", \"image/octet-stream\")\n      _this.setState({\n        imgUrl: imgUrl,\n      })\n    })\n  }\n\n  // 获取二维码\n  getCodeWe() {\n    let _this = this\n    let qrCodeLink = `${API.m}/ai-test`\n    return new Promise((resolve) => {\n      QRCode.toDataURL(qrCodeLink, {}, function (err, url) {\n        _this.setState({\n          codeSrc: url,\n        })\n      })\n      resolve()\n    })\n  }\n\n  handleFetchInfo = (index) => {\n    http\n      .get(\n        `${API.home}/sys/at/user_score/${index}/${\n          getParam(\"uid\") ? getParam(\"uid\") : 0\n        }`\n      )\n      .then((res) => {\n        const { code, data } = res.data\n        if (code === 200) {\n          this.setState({\n            myRankList: data,\n          })\n\n          let avatar = data.avatar_file\n          this.getBase64(avatar)\n          setTimeout(() => {\n            this.getCanvas()\n          }, 500)\n        } else if (code === 4030) {\n          const { user, history } = this.props\n          if (user.hasError) {\n            history.push(\"/passport\")\n          }\n        }\n      })\n  }\n\n  getBase64Image = (img) => {\n    var canvas = document.createElement(\"canvas\")\n    canvas.width = img.width\n    canvas.height = img.height\n\n    var ctx = canvas.getContext(\"2d\")\n    ctx.drawImage(img, 0, 0, img.width, img.height)\n    var ext = img.src.substring(img.src.lastIndexOf(\".\") + 1).toLowerCase()\n    var dataURL = canvas.toDataURL(\"image/\" + ext)\n    return dataURL\n  }\n\n  getBase64 = (img) => {\n    let base64 = null\n    let image = new Image()\n    let timeStamp = +new Date()\n    image.setAttribute(\"crossOrigin\", \"anonymous\")\n    image.src = img + \"?\" + timeStamp\n    image.onload = () => {\n      base64 = this.getBase64Image(image)\n      this.setState({\n        avatar_file: base64,\n      })\n    }\n    image.onerror = () => {\n      console.log(\"onerror\")\n      let timeStamp = +new Date()\n      this.getBase64(img + \"?\" + timeStamp)\n    }\n  }\n\n  change = (index) => {\n    this.setState({\n      cutIndex: index,\n    })\n    this.handleFetchInfo(index)\n  }\n\n  render() {\n    const {\n      tab,\n      cutIndex,\n      myRankList,\n      codeSrc,\n      imgUrl,\n      avatar_file,\n    } = this.state\n    return (\n      <div className={\"score-content\"}>\n        <HeaderBar title=\"成绩报告\" arrow={true} home={false} />\n        <div className={\"score-report\"}>\n          <ul className={\"tab-list\"}>\n            {tab.map((item, index) => {\n              return (\n                <li\n                  key={index}\n                  className={cutIndex === index ? \"active\" : \"\"}\n                  onClick={() => this.change(index)}\n                >\n                  {item}\n                </li>\n              )\n            })}\n          </ul>\n\n          <div className=\"score-list-box\">\n            <div\n              className={\"score-list\"}\n              style={{ backgroundImage: `url(${scoreReportBg})` }}\n            >\n              <div className=\"title\">\n                <img src={scoreIconL} alt=\"\" />\n                成绩报告\n                <img src={scoreIconR} alt=\"\" />\n              </div>\n\n              <table border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n                <thead>\n                  <tr>\n                    <td>分数</td>\n                    <td>用时</td>\n                    <td>{cutIndex === 0 && \"最终\"}排名</td>\n                  </tr>\n                </thead>\n                <tbody>\n                  {myRankList.r_id !== 0 && (\n                    <tr className={\"has\"}>\n                      <td>{myRankList.score}分</td>\n                      <td>{myRankList.cost_time}</td>\n                      <td className={\"rank\"}>{myRankList.rank}</td>\n                    </tr>\n                  )}\n                  {myRankList.r_id == 0 && (\n                    <tr>\n                      <td>-</td>\n                      <td>-</td>\n                      <td>-</td>\n                    </tr>\n                  )}\n                </tbody>\n              </table>\n\n              <div className=\"comment text-overflow-4\">\n                <img className={\"avatar_file\"} src={avatar_file} alt=\"\" />\n                <span\n                  dangerouslySetInnerHTML={{ __html: myRankList.title }}\n                ></span>\n              </div>\n\n              <div className=\"code\">\n                <img src={codeSrc} alt=\"\" />\n                <p>AI水平测试</p>\n              </div>\n            </div>\n\n            <img className={\"imgUrl\"} src={imgUrl} alt=\"\" />\n          </div>\n\n          <div className=\"tip\">长按图片分享给好友,或保存后分享到朋友圈</div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default scoreReport\n","import React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { Switch, Route } from \"react-router-dom\"\nimport Scores from \"./scores\"\nimport Exam from \"./exam\"\nimport SubmitAnswer from \"src/components/ai-test/submit-answer\"\nimport Analysis from \"src/components/ai-test/analysis\"\nimport Assist from \"src/components/ai-test/assist\"\nimport Help from \"src/components/ai-test/share\"\nimport Report from \"src/components/ai-test/report\"\n\nclass AiTest extends Component {\n  render() {\n    const { match } = this.props\n    return (\n      <Switch>\n        <Route\n          path={`${match.path}/exam`}\n          render={(props) => <Exam {...props} />}\n        />\n        <Route\n          path={`${match.path}/submit`}\n          render={(props) => <SubmitAnswer {...props} />}\n        />\n        <Route\n          path={`${match.path}/analysis/:recordId`}\n          render={(props) => <Analysis {...props} />}\n        />\n        <Route\n          path={`${match.path}/assist/:assistCode`}\n          render={(props) => <Assist {...props} />}\n        />\n        <Route\n          path={`${match.path}/share`}\n          render={(props) => <Help {...props} />}\n        />\n        <Route\n          path={`${match.path}/report`}\n          render={(props) => <Report {...props} />}\n        />\n        <Route render={(props) => <Scores {...props} />} />\n      </Switch>\n    )\n  }\n}\n\nexport default AiTest\n"],"sourceRoot":""}