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