intelligent-recommend.8997ef18.chunk.js.map 17.3 KB
Newer Older
zhanghaozhe committed
1
{"version":3,"sources":["components/intelligent-recommend/index.js"],"names":["messageType","SYSTEM_MESSAGE","USER_MESSAGE","OPTIONS","IntelligentRecommend","state","showAnalyzing","systemAvatar","options","data","messageId","next","oid","rid","handleSelect","item","_this","props","addMessage","type","content","describe","id","setState","Object","_Users_zhanghaozhe_server_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_2__","getMessage","_this$state$next","http","get","concat","API","home","then","res","_res$data","code","msg","answer_type","setTimeout","addResult","Math","random","message","contents","find","is_question","optionsData","filter","antd_mobile_lib_toast__WEBPACK_IMPORTED_MODULE_1___default","a","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$props","this","reselect","isEmpty","_this2","_this$state","_this$props2","user","_this$props2$intellig","processing","recommends","react__WEBPACK_IMPORTED_MODULE_8___default","createElement","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","react_router_dom__WEBPACK_IMPORTED_MODULE_10__","to","second_btn","Component","_ref","_ref2","connect","_ref3","WithFullSize"],"mappings":"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","file":"mrstatic/js/intelligent-recommend.8997ef18.chunk.js","sourcesContent":["import React, { Component } from 'react';\nimport './index.scss'\nimport { Link } from \"react-router-dom\";\nimport { browser, getParam, http } from \"@/utils\"\nimport { Toast } from \"antd-mobile\";\nimport { connect } from \"react-redux\";\nimport { WithFullSize } from \"@/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\n\nclass IntelligentRecommend extends Component {\n\n  state = {\n    showAnalyzing: false,\n    systemAvatar: '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\n  handleSelect = (item) => {\n    this.props.addMessage({type: messageType.USER_MESSAGE, content: item.describe, id: item.id})\n    this.setState(state => ({\n      options: {data: [], messageId: 0},\n      next: {\n        ...state.next,\n        oid: item.id,\n      },\n    }), () => {\n      this.getMessage()\n    })\n  }\n\n  getMessage = () => {\n    const {oid, rid} = this.state.next\n    http.get(`${API.home}/sys/icc/communicate/${oid}/${rid}`)\n      .then(res => {\n        const {data, code, msg} = res.data\n        if (code === 200) {\n          if (data.answer_type === 1) {\n            this.setState({\n              showAnalyzing: true,\n            }, () => {\n              setTimeout(() => {\n                this.setState({showAnalyzing: false})\n                this.props.addResult({...data})\n              }, Math.random() * 500 + 1000)\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.post(`${API.home}/sys/icc/consult`, {\n      rid: this.props.intelligentRecommend.result.rid,\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      location.replace(`${state.from.pathname}${state.from.search}`)\n    } else {\n      window.location.href = window.location.origin\n    }\n  }\n\n\n  render() {\n    const {showAnalyzing, systemAvatar, options} = this.state\n    const {user, intelligentRecommend: {result, processing}, reselect} = 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 className='iconfont iconiconfront-68' onClick={this.goBack}></i>\n            </div>\n            <div className={'title'}>七月在线智能选课</div>\n          </div>\n          <button onClick={() => {\n            this.setState({\n              next: {oid: 0, rid: 0},\n              options: {messageId: 0, data: []},\n            }, () => {\n              reselect()\n              this.getMessage()\n            });\n          }}>重新选课\n          </button>\n        </div>\n        <div className=\"dialog-box\">\n          {\n            !!processing.length && processing.map((item, index) => {\n              switch (item.type) {\n                case messageType.SYSTEM_MESSAGE:\n                  return (\n                    <React.Fragment key={index}>\n                      <Message text={item.content.describe} identity={'system'} avatar={systemAvatar}/>\n                      {\n                        options.messageId === item.content.id &&\n                        <Options options={options.data} handleSelect={this.handleSelect}/>\n                      }\n                    </React.Fragment>\n                  )\n                case messageType.USER_MESSAGE:\n                  return <Message text={item.content} identity={'user'} avatar={user.data.avatar} key={index + 2}/>\n              }\n            })\n          }\n          {\n            showAnalyzing && <div className=\"analyzing\">努力分析中...</div>\n          }\n        </div>\n\n\n        {\n          !isEmpty(recommends) && <div className=\"result\">\n            <div className=\"title\">根据您目前的情况,推荐结果如下</div>\n            <div className=\"obtained\">\n              <div className={'subtitle'} dangerouslySetInnerHTML={{__html: recommends.skill_title}}></div>\n              <div className={'skill'} dangerouslySetInnerHTML={{__html: recommends.skill_desc}}></div>\n            </div>\n            <div className=\"obtained\">\n              <div className={'subtitle'} dangerouslySetInnerHTML={{__html: recommends.project_title}}></div>\n              <div className={'skill project'} dangerouslySetInnerHTML={{__html: recommends.project_desc}}></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 className={'subtitle'} dangerouslySetInnerHTML={{__html: recommends.salary_title}}></div>\n              <div className={'salary'} dangerouslySetInnerHTML={{__html: recommends.salary_desc}}></div>\n            </div>\n            <div className=\"recommends\">\n              <div>想获得以上技能,向您推荐:</div>\n              <ul className={'courses'}>\n                {\n                  !!recommends.courses.length && recommends.courses.map(item => {\n                    return <li className={'course'} key={item.course_id} onClick={(e) => {\n                      if (e.target.nodeName.toLowerCase() !== 'a') {\n                        if (item.course_id) {\n                          this.props.history.push(`/detail?id=${item.course_id}`)\n                        } else {\n                          this.props.history.push(`/play?id=${item.v_course_id}`)\n                        }\n                      }\n                    }}>\n                      <div className=\"cover\">\n                        <img src={item.img_url}\n                             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                          {\n                            item.c_type === 1 && <React.Fragment key={item.course_id}>\n                              <div className=\"prices\">\n                                <span className={'price'}>¥{this.displayPrice(item.price_sale)}</span>\n                                <span className={'old-price'}>¥{this.displayPrice(item.price_original)}</span>\n                              </div>\n                              <Link className={'register'} to={`/detail?id=${item.course_id}`}>{item.second_btn}</Link>\n                            </React.Fragment>\n                          }\n                          {\n                            item.c_type === 2 && <React.Fragment key={item.course_id}>\n                              <a href=\"http://q.url.cn/s/Vbkup6m?_type=wpa\" className={'contact'}\n                                 onClick={this.consult}>{item.consult}</a>\n                              <Link className={'register'} to={`/detail?id=${item.course_id}`}>{item.second_btn}</Link>\n                            </React.Fragment>\n                          }\n                          {\n                            item.c_type === 0 &&\n                            <Link className={'study'} to={`/play?id=${item.v_course_id}`}>{item.second_btn}</Link>\n                          }\n                        </div>\n                      </div>\n                    </li>\n                  })\n                }\n              </ul>\n            </div>\n          </div>\n        }\n      </div>\n    );\n  }\n\n}\n\nfunction Message({text, avatar, identity}) {\n  return <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\nfunction Options({options, handleSelect}) {\n  return <ul className={'options'}>\n    {\n      !!options.length && options.map(item => {\n        return <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));"],"sourceRoot":""}