|
@@ -54,18 +54,18 @@ export default class extends Component {
|
|
|
submitAsk() {
|
|
|
const { userQuestion, questionNo = {} } = this.props;
|
|
|
const { ask = {} } = this.state;
|
|
|
- if (ask.originContent === '' || ask.content === '' || ask.target === '') return;
|
|
|
+ if (!ask.originContent || !ask.content || !ask.target) return;
|
|
|
My.addQuestionAsk(userQuestion.id, ask.target, questionNo.id, ask.originContent, ask.content).then(() => {
|
|
|
- this.setState({ askModal: false, askOkModal: true });
|
|
|
+ this.setState({ askModal: false, askOkModal: true, ask: {} });
|
|
|
}).catch(err => {
|
|
|
- this.setState({ askError: err.message });
|
|
|
+ this.setState({ askError: err.message, ask: {} });
|
|
|
});
|
|
|
}
|
|
|
|
|
|
submitFeedbackError() {
|
|
|
const { questionNo = {} } = this.props;
|
|
|
const { feedback = {} } = this.state;
|
|
|
- if (feedback.originContent === '' || feedback.content === '' || feedback.target === '') return;
|
|
|
+ if (!feedback.originContent || !feedback.content || !feedback.target) return;
|
|
|
My.addFeedbackErrorQuestion(
|
|
|
questionNo.id,
|
|
|
questionNo.title,
|
|
@@ -74,10 +74,10 @@ export default class extends Component {
|
|
|
feedback.content,
|
|
|
)
|
|
|
.then(() => {
|
|
|
- this.setState({ feedbackModal: false, feedbackOkModal: true });
|
|
|
+ this.setState({ feedbackModal: false, feedbackOkModal: true, feedback: {} });
|
|
|
})
|
|
|
.catch(err => {
|
|
|
- this.setState({ feedbackError: err.message });
|
|
|
+ this.setState({ feedbackError: err.message, feedback: {} });
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -152,6 +152,41 @@ export default class extends Component {
|
|
|
return text;
|
|
|
}
|
|
|
|
|
|
+ formatOtherStem(question) {
|
|
|
+ if (!question.stem) return '';
|
|
|
+ const { content = {}, stem } = question;
|
|
|
+ const { table = {}, questions = [] } = content;
|
|
|
+ let text = stem.replace(/#select#/g, `<span class='#select#${question.id}' />`);
|
|
|
+ text = text.replace(/#table#/g, `<span class='#table#${question.id}' />`);
|
|
|
+ setTimeout(() => {
|
|
|
+ const selectList = document.getElementsByClassName(`#select#${question.id}`);
|
|
|
+ const tableList = document.getElementsByClassName(`#table#${question.id}`);
|
|
|
+ for (let i = 0; i < selectList.length; i += 1) {
|
|
|
+ if (!questions[i]) break;
|
|
|
+ ReactDOM.render(
|
|
|
+ <AnswerSelect
|
|
|
+ list={questions[i].select}
|
|
|
+ type={'single'}
|
|
|
+ // selected={(userQuestion.userAnswer || { questions: [] }).questions[i]}
|
|
|
+ // answer={(question.answer || { questions: [] }).questions[i]}
|
|
|
+ fix
|
|
|
+ // show={showAnswer}
|
|
|
+ />,
|
|
|
+ selectList[i],
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (table.row && table.col && table.header) {
|
|
|
+ const columns = table.header.map((title, index) => {
|
|
|
+ return { title, key: index };
|
|
|
+ });
|
|
|
+ for (let i = 0; i < tableList.length; i += 1) {
|
|
|
+ ReactDOM.render(<AnswerTable list={columns} columns={columns} data={table.data} />, tableList[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, 1);
|
|
|
+ return text;
|
|
|
+ }
|
|
|
+
|
|
|
render() {
|
|
|
return (
|
|
|
<Fullscreen
|
|
@@ -271,7 +306,7 @@ export default class extends Component {
|
|
|
<span className="b">
|
|
|
<span className="s">{formatPercent(questionNo.totalCorrect, questionNo.totalNumber)}</span>%
|
|
|
</span>
|
|
|
- <Icon name="question" />
|
|
|
+ <Icon name="question c-p" />
|
|
|
<Icon name="star" active={userQuestion.collect} onClick={() => this.toggleCollect()} />
|
|
|
</div>
|
|
|
</div>
|
|
@@ -319,7 +354,7 @@ export default class extends Component {
|
|
|
提问
|
|
|
</AnswerButton>
|
|
|
)}
|
|
|
- <AnswerButton className="item" onClick={() => this.setState({ feedbackModal: true })}>
|
|
|
+ <AnswerButton className="item" onClick={() => this.setState({ feedbackModal: true, feedback: { position: AskTarget[0].value } })}>
|
|
|
纠错
|
|
|
</AnswerButton>
|
|
|
</div>
|
|
@@ -369,8 +404,8 @@ export default class extends Component {
|
|
|
const { typeset = 'one' } = question.content;
|
|
|
const { hideAnalysis, analysisTab } = this.state;
|
|
|
const show = typeset === 'one' ? true : !hideAnalysis;
|
|
|
- return (
|
|
|
- <div className={`block block-analysis two-analysis ${show ? 'show' : ''}`}>
|
|
|
+ return (<div className="block">
|
|
|
+ <div className={`block-analysis two-analysis ${show ? 'show' : ''}`}>
|
|
|
<Tabs
|
|
|
type="division"
|
|
|
active={analysisTab}
|
|
@@ -389,7 +424,7 @@ export default class extends Component {
|
|
|
{typeset === 'two' && this.renderAnswer()}
|
|
|
{this.renderText()}
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div></div>
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -401,18 +436,18 @@ export default class extends Component {
|
|
|
switch (analysisTab) {
|
|
|
case 'official':
|
|
|
content = (
|
|
|
- <div className="detail-block text-block" dangerouslySetInnerHTML={{ __html: question.officialContent }} />
|
|
|
+ <div className="detail-block "><div className="block-text" dangerouslySetInnerHTML={{ __html: question.officialContent }} /></div>
|
|
|
);
|
|
|
break;
|
|
|
case 'qx':
|
|
|
- content = <div className="detail-block text-block" dangerouslySetInnerHTML={{ __html: question.qxContent }} />;
|
|
|
+ content = <div className="detail-block "><div className="block-text" dangerouslySetInnerHTML={{ __html: question.qxContent }} /></div>;
|
|
|
break;
|
|
|
case 'association':
|
|
|
content = (
|
|
|
<div className="detail-block">
|
|
|
<Carousel>
|
|
|
{associations.map(association => {
|
|
|
- return <div className="text-block" dangerouslySetInnerHTML={{ __html: association.stem }} />;
|
|
|
+ return <div className="block-text" dangerouslySetInnerHTML={{ __html: this.formatOtherStem(association) }} />;
|
|
|
})}
|
|
|
</Carousel>
|
|
|
</div>
|
|
@@ -420,10 +455,12 @@ export default class extends Component {
|
|
|
break;
|
|
|
case 'qa':
|
|
|
content = (
|
|
|
- <div className="detail-block answer-block">
|
|
|
- {asks.map((ask, index) => {
|
|
|
- return <OtherAnswer key={index} data={ask} />;
|
|
|
- })}
|
|
|
+ <div className="detail-block ">
|
|
|
+ <div className="block-answer">
|
|
|
+ {asks.map((ask, index) => {
|
|
|
+ return <OtherAnswer key={index} data={ask} />;
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
);
|
|
|
break;
|
|
@@ -437,9 +474,9 @@ export default class extends Component {
|
|
|
const { question = { content: {} }, userQuestion = {}, detail } = this.props;
|
|
|
const { questions = [], type, typeset = 'one' } = question.content;
|
|
|
const { showAnswer } = this.state;
|
|
|
- return (
|
|
|
- <div className="block block-answer">
|
|
|
- {detail && typeset === 'two' ? (
|
|
|
+ return (<div className="block">
|
|
|
+ <div className="block-answer">
|
|
|
+ {detail && typeset === 'two' && (
|
|
|
<Switch
|
|
|
checked={showAnswer}
|
|
|
onChange={value => {
|
|
@@ -448,8 +485,6 @@ export default class extends Component {
|
|
|
>
|
|
|
{showAnswer ? '显示答案' : '关闭答案'}
|
|
|
</Switch>
|
|
|
- ) : (
|
|
|
- ''
|
|
|
)}
|
|
|
{questions.map((item, index) => {
|
|
|
return (
|
|
@@ -469,7 +504,7 @@ export default class extends Component {
|
|
|
</div>
|
|
|
);
|
|
|
})}
|
|
|
- </div>
|
|
|
+ </div></div>
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -478,9 +513,9 @@ export default class extends Component {
|
|
|
const { typeset = 'one' } = question.content;
|
|
|
const { steps = [] } = question.content;
|
|
|
const { showAnswer, step } = this.state;
|
|
|
- return (
|
|
|
- <div className="block block-content">
|
|
|
- {detail && typeset === 'one' && question.questionType !== 'awa' ? (
|
|
|
+ return (<div className="block">
|
|
|
+ <div className="block-content">
|
|
|
+ {detail && typeset === 'one' && question.questionType !== 'awa' && (
|
|
|
<Switch
|
|
|
checked={showAnswer}
|
|
|
onChange={value => {
|
|
@@ -489,8 +524,6 @@ export default class extends Component {
|
|
|
>
|
|
|
{showAnswer ? '显示答案' : '关闭答案'}
|
|
|
</Switch>
|
|
|
- ) : (
|
|
|
- ''
|
|
|
)}
|
|
|
{question.questionType === 'awa' && <h2>Analytical Writing Assessment</h2>}
|
|
|
{steps.length > 0 && (
|
|
@@ -503,18 +536,17 @@ export default class extends Component {
|
|
|
)}
|
|
|
<div
|
|
|
className="text"
|
|
|
- style={{ height: 2000 }}
|
|
|
dangerouslySetInnerHTML={{ __html: this.formatStem(steps.length > 0 ? steps[step].stem : question.stem) }}
|
|
|
/>
|
|
|
- </div>
|
|
|
+ </div></div>
|
|
|
);
|
|
|
}
|
|
|
|
|
|
renderAWA() {
|
|
|
const { userQuestion = { detail: {}, userAnswer: {} } } = this.state;
|
|
|
const { showAnswer } = this.state;
|
|
|
- return (
|
|
|
- <div className="block block-awa">
|
|
|
+ return (<div className="block">
|
|
|
+ <div className="block-awa">
|
|
|
<Switch
|
|
|
checked={showAnswer}
|
|
|
onChange={value => {
|
|
@@ -549,7 +581,7 @@ export default class extends Component {
|
|
|
)}
|
|
|
{!showAnswer && <div className="show-awa">选择「显示答案」查看自己的作文</div>}
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div></div>
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -622,10 +654,11 @@ export default class extends Component {
|
|
|
<div className="text">关注公众号,老师回答后会立即收到通知。</div>
|
|
|
<div className="text">我们也会通过站内信的方式通知你。</div>
|
|
|
<div className="small">
|
|
|
- 成为学员享受极速答疑特权。<Link>了解更多</Link>
|
|
|
+ 成为学员享受极速答疑特权。<Link to="">了解更多</Link>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div className="right">
|
|
|
+ <Assets name="qrcode" />
|
|
|
<div className="text">扫码关注公众号</div>
|
|
|
<div className="text">千行GMAT</div>
|
|
|
</div>
|
|
@@ -659,6 +692,7 @@ export default class extends Component {
|
|
|
<Link to="/">了解更多></Link>
|
|
|
</div>
|
|
|
<div className="right">
|
|
|
+ <Assets name="qrcode" />
|
|
|
<div className="text">扫码关注公众号</div>
|
|
|
<div className="text">千行GMAT</div>
|
|
|
</div>
|
|
@@ -707,9 +741,20 @@ export default class extends Component {
|
|
|
className="textarea"
|
|
|
value={feedback.originContent}
|
|
|
placeholder="你可以适当扩大复制范围以使我们准确定位,感谢。"
|
|
|
+ onChange={(e) => {
|
|
|
+ feedback.originContent = e.target.value;
|
|
|
+ this.setState({ feedback });
|
|
|
+ }}
|
|
|
/>
|
|
|
<div className="label">应该改为:</div>
|
|
|
- <textarea className="textarea" placeholder="只需提供正确内容即可" />
|
|
|
+ <textarea
|
|
|
+ className="textarea"
|
|
|
+ value={feedback.content}
|
|
|
+ placeholder="只需提供正确内容即可"
|
|
|
+ onChange={(e) => {
|
|
|
+ feedback.content = e.target.value;
|
|
|
+ this.setState({ feedback });
|
|
|
+ }} />
|
|
|
</div>
|
|
|
<div className="bottom">
|
|
|
<AnswerButton
|
|
@@ -751,6 +796,7 @@ export default class extends Component {
|
|
|
<div className="text">您也可以关注公众号及时获取结果。</div>
|
|
|
</div>
|
|
|
<div className="right">
|
|
|
+ <Assets name="qrcode" />
|
|
|
<div className="text">扫码关注公众号</div>
|
|
|
<div className="text">千行GMAT</div>
|
|
|
</div>
|