import React, { Component } from "react" import "./index.scss" import { HeaderBar } from "src/common/index" import storage from "store2" import { Toast } from "antd-mobile" import { http } from "src/utils" import classnames from "classnames" import { Link } from "react-router-dom" import { isEmpty } from "lodash" class SubmitAnswer extends Component { store = storage.namespace("aiTestExam") timer = null state = { time: this.store.session.get("time") || { d: 0, h: 0, m: 0, s: 0 }, answer: this.store.session.get("answer"), recordId: this.store.session.get("recordId"), analysis: [], results: [], elapsed: this.store.session.get("elapsed"), } componentDidMount() { if (isEmpty(this.state.answer) || !this.state.recordId) { this.props.history.replace("/ai-test") this.store.session.remove("submitted") } if (this.store.session.get("submitted")) { this.getAnalysis() } else { this.setCounter() } } componentWillUnmount() { clearInterval(this.timer) } setCounter = () => { this.timer = setInterval(() => { this.setState((state) => { const fms = state.elapsed + 1 return { time: { d: Math.floor(fms / (60 * 60 * 100 * 24)), h: Math.floor(fms / (60 * 60 * 100)) % 24, m: Math.floor(fms / (60 * 100)) % 60, s: Math.floor(fms / 100) % 60, }, elapsed: fms, } }) }, 10) } submit = () => { const { answer, recordId } = this.state http .post(`${API.home}/sys/submit_answer`, { answer: JSON.stringify(answer), cost_time: this.state.elapsed * 10, record_id: recordId, }) .then((res) => { const { code, msg } = res.data if (code === 200) { this.store.session.set("submitted", true) this.store.session.set("elapsed", this.state.elapsed) this.store.session.set("time", this.state.time) clearInterval(this.timer) this.props.history.push("/ai-test/report") } else { Toast.fail(msg, 2, null, false) } }) } getAnalysis = () => { http .post(`${API.home}/sys/get_analysis`, { record_id: this.state.recordId, }) .then((res) => { const { code, msg, data } = res.data if (code === 200) { this.setState({ analysis: data, }) } else { Toast.fail(msg, 2, null, false) } }) } render() { const { time, answer, analysis, recordId } = this.state return ( <div className={"submit-answer"}> <HeaderBar title={"提交试卷"} arrow={true} /> <div className="content"> <div className="cost"> 用时: <span> {!!time.d && <>{time.d}天</>} {!!time.h && <>{time.h && time.h.toString().padStart(2, "0")}:</>} {time.m.toString().padStart(2, "0")}: {time.s.toString().padStart(2, "0")} </span> </div> {analysis.length ? ( <> <ul className={"answers"}> {analysis.map((item, index) => { const userSelectIndex = item.options.findIndex( (item) => item.user_select ) const rightAnswerIndex = item.options.findIndex( (item) => item.is_ans ) return ( <li key={item.id} className={classnames({ correct: userSelectIndex === rightAnswerIndex, wrong: userSelectIndex >= 0 && userSelectIndex !== rightAnswerIndex, unselect: userSelectIndex < 0, })} > {index + 1} </li> ) })} </ul> {!!analysis.length && ( <div className={"score"}>总分:{analysis[0].score}分</div> )} <Link to={`/ai-test/analysis/${recordId}`}> <button>查看解析</button> </Link> </> ) : ( <> <ul className={"answers"}> {answer && !!Object.keys(answer).length && Object.keys(answer).map((item, index) => { return ( <li key={item} className={answer[item] ? "selected" : ""}> {index + 1} </li> ) })} </ul> <button onClick={this.submit}>提交</button> </> )} </div> </div> ) } } export default SubmitAnswer