{"version":3,"sources":["components/intelligent-recommend/index.js"],"names":["messageType","IntelligentRecommend","state","showAnalyzing","systemAvatar","options","data","messageId","next","oid","rid","handleSelect","item","props","addMessage","type","content","describe","id","setState","getMessage","http","get","API","home","then","res","code","msg","answer_type","setTimeout","addResult","Math","random","message","contents","find","is_question","optionsData","filter","fail","consult","e","preventDefault","target","post","intelligentRecommend","result","finally","window","location","href","getAttribute","displayPrice","price","decimal","toString","split","parseInt","goBack","browser","isWeixin","getParam","history","go","records","length","from","pathname","replace","search","origin","this","reselect","isEmpty","user","processing","recommends","className","onClick","map","index","Fragment","key","Message","text","identity","avatar","Options","dangerouslySetInnerHTML","__html","skill_title","skill_desc","project_title","project_desc","salary_title","salary_desc","courses","course_id","nodeName","toLowerCase","push","v_course_id","src","img_url","alt","recmd_title","recmd_desc","c_type","price_sale","price_original","to","second_btn","Component","connect","WithFullSize"],"mappings":"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","file":"mrstaticjs/intelligent-recommend.516dee6a.chunk.js","sourcesContent":["/* eslint-disable default-case */\nimport React, { Component } from \"react\"\nimport \"./index.scss\"\nimport { Link } from \"react-router-dom\"\nimport { browser, getParam, http } from \"src/utils\"\nimport { Toast } from \"antd-mobile\"\nimport { connect } from \"react-redux\"\nimport { WithFullSize } from \"src/HOCs\"\nimport { isEmpty } from \"lodash\"\nimport { addMessage, addResult, reselect } from \"./store\"\n\nconst messageType = {\n  SYSTEM_MESSAGE: 1,\n  USER_MESSAGE: 2,\n  OPTIONS: 3,\n}\n\nclass IntelligentRecommend extends Component {\n  state = {\n    showAnalyzing: false,\n    systemAvatar:\n      \"https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/home/avatar_20191104.png\",\n    options: {\n      data: [],\n      messageId: 0,\n    },\n    next: {\n      oid: 0,\n      rid: 0,\n    },\n  }\n\n  componentDidMount() {\n    const { intelligentRecommend, reselect } = this.props\n    if (isEmpty(intelligentRecommend.result)) {\n      reselect()\n      this.getMessage()\n    }\n  }\n\n  handleSelect = (item) => {\n    this.props.addMessage({\n      type: messageType.USER_MESSAGE,\n      content: item.describe,\n      id: item.id,\n    })\n    this.setState(\n      (state) => ({\n        options: { data: [], messageId: 0 },\n        next: {\n          ...state.next,\n          oid: item.id,\n        },\n      }),\n      () => {\n        this.getMessage()\n      }\n    )\n  }\n\n  getMessage = () => {\n    const { oid, rid } = this.state.next\n    http.get(`${API.home}/sys/icc/communicate/${oid}/${rid}`).then((res) => {\n      const { data, code, msg } = res.data\n      if (code === 200) {\n        if (data.answer_type === 1) {\n          this.setState(\n            {\n              showAnalyzing: true,\n            },\n            () => {\n              setTimeout(() => {\n                this.setState({ showAnalyzing: false })\n                this.props.addResult({ ...data })\n              }, Math.random() * 500 + 1000)\n            }\n          )\n        } else {\n          const message = {\n            type: messageType.SYSTEM_MESSAGE,\n            content: data.contents.find((item) => item.is_question),\n          }\n          const optionsData = data.contents.filter((item) => !item.is_question)\n          this.props.addMessage(message)\n          this.setState({\n            options: {\n              messageId: message.content.id,\n              data: optionsData,\n            },\n            next: { rid: data.rid },\n          })\n        }\n      } else {\n        Toast.fail(msg)\n      }\n    })\n  }\n\n  consult = (e) => {\n    e.preventDefault()\n    let target = e.target\n    http\n      .post(`${API.home}/sys/icc/consult`, {\n        rid: this.props.intelligentRecommend.result.rid,\n      })\n      .finally(() => {\n        window.location.href = target.getAttribute(\"href\")\n      })\n  }\n\n  displayPrice = (price) => {\n    let _price = price.toString()\n    let decimal = _price.split(\".\")\n    return parseInt(decimal[1]) === 0 ? decimal[0] : price\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  render() {\n    const { showAnalyzing, systemAvatar, options } = this.state\n    const {\n      user,\n      intelligentRecommend: { result, processing },\n      reselect,\n    } = this.props\n    const recommends = result.contents\n    return (\n      <div id={\"intelligent-recommend\"}>\n        <div className=\"head\">\n          <div>\n            <div className=\"go-back\">\n              <i\n                className=\"iconfont iconiconfront-68\"\n                onClick={this.goBack}\n              ></i>\n            </div>\n            <div className={\"title\"}>七月在线智能选课</div>\n          </div>\n          <button\n            onClick={() => {\n              this.setState(\n                {\n                  next: { oid: 0, rid: 0 },\n                  options: { messageId: 0, data: [] },\n                },\n                () => {\n                  reselect()\n                  this.getMessage()\n                }\n              )\n            }}\n          >\n            重新选课\n          </button>\n        </div>\n        <div className=\"dialog-box\">\n          {!!processing.length &&\n            // eslint-disable-next-line array-callback-return\n            processing.map((item, index) => {\n              switch (item.type) {\n                case messageType.SYSTEM_MESSAGE:\n                  return (\n                    <React.Fragment key={index}>\n                      <Message\n                        text={item.content.describe}\n                        identity={\"system\"}\n                        avatar={systemAvatar}\n                      />\n                      {options.messageId === item.content.id && (\n                        <Options\n                          options={options.data}\n                          handleSelect={this.handleSelect}\n                        />\n                      )}\n                    </React.Fragment>\n                  )\n                case messageType.USER_MESSAGE:\n                  return (\n                    <Message\n                      text={item.content}\n                      identity={\"user\"}\n                      avatar={user.data.avatar}\n                      key={index + 2}\n                    />\n                  )\n              }\n            })}\n          {showAnalyzing && <div className=\"analyzing\">努力分析中...</div>}\n        </div>\n\n        {!isEmpty(recommends) && (\n          <div className=\"result\">\n            <div className=\"title\">根据您目前的情况,推荐结果如下</div>\n            <div className=\"obtained\">\n              <div\n                className={\"subtitle\"}\n                dangerouslySetInnerHTML={{ __html: recommends.skill_title }}\n              ></div>\n              <div\n                className={\"skill\"}\n                dangerouslySetInnerHTML={{ __html: recommends.skill_desc }}\n              ></div>\n            </div>\n            <div className=\"obtained\">\n              <div\n                className={\"subtitle\"}\n                dangerouslySetInnerHTML={{ __html: recommends.project_title }}\n              ></div>\n              <div\n                className={\"skill project\"}\n                dangerouslySetInnerHTML={{ __html: recommends.project_desc }}\n              ></div>\n              {/*<ul>\n                <li className={'skill project'}>·技能描述、技能描述</li>\n                <li className={'skill project'}>·工作及项目描述、工作及项目描述、项目描述</li>\n              </ul>*/}\n            </div>\n            <div className={\"salary-section\"}>\n              <div\n                className={\"subtitle\"}\n                dangerouslySetInnerHTML={{ __html: recommends.salary_title }}\n              ></div>\n              <div\n                className={\"salary\"}\n                dangerouslySetInnerHTML={{ __html: recommends.salary_desc }}\n              ></div>\n            </div>\n            <div className=\"recommends\">\n              <div>想获得以上技能,向您推荐:</div>\n              <ul className={\"courses\"}>\n                {!!recommends.courses.length &&\n                  recommends.courses.map((item) => {\n                    return (\n                      <li\n                        className={\"course\"}\n                        key={item.course_id}\n                        onClick={(e) => {\n                          if (e.target.nodeName.toLowerCase() !== \"a\") {\n                            if (item.course_id) {\n                              this.props.history.push(\n                                `/detail?id=${item.course_id}`\n                              )\n                            } else {\n                              this.props.history.push(\n                                `/play?id=${item.v_course_id}`\n                              )\n                            }\n                          }\n                        }}\n                      >\n                        <div className=\"cover\">\n                          <img src={item.img_url} alt=\"\" />\n                        </div>\n                        <div className=\"info\">\n                          <div className={\"title\"}>{item.recmd_title}</div>\n                          <div className={\"des\"}>{item.recmd_desc}</div>\n                          <div className=\"bar\">\n                            {item.c_type === 1 && (\n                              <React.Fragment key={item.course_id}>\n                                <div className=\"prices\">\n                                  <span className={\"price\"}>\n                                    ¥{this.displayPrice(item.price_sale)}\n                                  </span>\n                                  <span className={\"old-price\"}>\n                                    ¥{this.displayPrice(item.price_original)}\n                                  </span>\n                                </div>\n                                <Link\n                                  className={\"register\"}\n                                  to={`/detail?id=${item.course_id}`}\n                                >\n                                  {item.second_btn}\n                                </Link>\n                              </React.Fragment>\n                            )}\n                            {item.c_type === 2 && (\n                              <React.Fragment key={item.course_id}>\n                                <a\n                                  href=\"http://q.url.cn/s/Vbkup6m?_type=wpa\"\n                                  className={\"contact\"}\n                                  onClick={this.consult}\n                                >\n                                  {item.consult}\n                                </a>\n                                <Link\n                                  className={\"register\"}\n                                  to={`/detail?id=${item.course_id}`}\n                                >\n                                  {item.second_btn}\n                                </Link>\n                              </React.Fragment>\n                            )}\n                            {item.c_type === 0 && (\n                              <Link\n                                className={\"study\"}\n                                to={`/play?id=${item.v_course_id}`}\n                              >\n                                {item.second_btn}\n                              </Link>\n                            )}\n                          </div>\n                        </div>\n                      </li>\n                    )\n                  })}\n              </ul>\n            </div>\n          </div>\n        )}\n      </div>\n    )\n  }\n}\n\nfunction Message({ text, avatar, identity }) {\n  return (\n    <div className={`message clearfix ${identity}`}>\n      <div className=\"avatar\">\n        <img src={avatar} alt=\"\" />\n      </div>\n      <div className={`text`}>{text}</div>\n    </div>\n  )\n}\n\nfunction Options({ options, handleSelect }) {\n  return (\n    <ul className={\"options\"}>\n      {!!options.length &&\n        options.map((item) => {\n          return (\n            <li onClick={() => handleSelect(item)} key={item.id}>\n              <button>{item.describe}</button>\n            </li>\n          )\n        })}\n    </ul>\n  )\n}\n\nexport default connect(\n  ({ user, intelligentRecommend }) => ({ user, intelligentRecommend }),\n  { addMessage, addResult, reselect }\n)(WithFullSize(IntelligentRecommend))\n"],"sourceRoot":""}