page.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017
  1. import React from 'react';
  2. import './index.less';
  3. import LineChart from '@src/components/LineChart';
  4. import BarChart from '@src/components/BarChart';
  5. import PieChart from '@src/components/PieChart';
  6. import Page from '@src/containers/Page';
  7. import { Icon } from 'antd';
  8. import { Question } from '../../../stores/question';
  9. import { Button } from '../../../components/Button';
  10. import Tabs from '../../../components/Tabs';
  11. function BarOption3(titles, data1, data2, color1, color2) {
  12. return {
  13. title: [
  14. {
  15. text: titles[0],
  16. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  17. left: 100,
  18. top: 15,
  19. },
  20. {
  21. text: titles[1],
  22. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  23. left: 195,
  24. top: 15,
  25. },
  26. {
  27. text: titles[2],
  28. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  29. left: 695,
  30. top: 15,
  31. },
  32. ],
  33. grid: [{ width: 250, x: 200, bottom: 30 }, { width: 250, x: 700, bottom: 30 }],
  34. xAxis: [
  35. {
  36. gridIndex: 0,
  37. show: false,
  38. axisTick: { show: false },
  39. axisLine: { show: false },
  40. splitLine: { show: false },
  41. },
  42. {
  43. gridIndex: 1,
  44. show: false,
  45. axisTick: { show: false },
  46. axisLine: { show: false },
  47. splitLine: { show: false },
  48. },
  49. ],
  50. yAxis: [
  51. {
  52. gridIndex: 0,
  53. type: 'category',
  54. axisTick: { show: false },
  55. axisLine: { show: false },
  56. splitLine: { show: false },
  57. offset: 15,
  58. data: ['Idiom', 'Comparison', 'Verb', 'Pronoun', 'Modifier', 'Parallelism'],
  59. axisLabel: { color: '#686872', fontSize: 16 },
  60. },
  61. {
  62. gridIndex: 1,
  63. type: 'category',
  64. axisTick: { show: false },
  65. axisLine: { show: false },
  66. splitLine: { show: false },
  67. axisLabel: { show: false },
  68. },
  69. ],
  70. series: [
  71. {
  72. type: 'bar',
  73. xAxisIndex: 0,
  74. yAxisIndex: 0,
  75. barWidth: 30,
  76. data: data1.map((item, index) => ({
  77. value: item,
  78. itemStyle: { color: index % 2 ? color1[0] : color1[1] },
  79. label: {
  80. show: true,
  81. color: '#303036',
  82. align: 'right',
  83. position: [360, 5],
  84. fontSize: 16,
  85. formatter: item,
  86. },
  87. })),
  88. },
  89. {
  90. type: 'bar',
  91. xAxisIndex: 1,
  92. yAxisIndex: 1,
  93. barWidth: 30,
  94. data: data2.map((item, index) => ({
  95. value: item,
  96. itemStyle: { color: index % 2 ? color2[0] : color2[1] },
  97. label: {
  98. show: true,
  99. color: '#303036',
  100. align: 'right',
  101. fontSize: 16,
  102. position: [360, 5],
  103. formatter: item,
  104. },
  105. })),
  106. },
  107. ],
  108. };
  109. }
  110. function BarOption2(title, data, legend, color) {
  111. return {
  112. title: {
  113. text: title,
  114. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  115. },
  116. tooltip: {
  117. trigger: 'axis',
  118. },
  119. legend: {
  120. show: legend.length > 1,
  121. data: legend,
  122. right: 20,
  123. },
  124. color,
  125. dataset: {
  126. source: [['type', ...legend], ...data],
  127. },
  128. grid: { left: 30, right: 30, height: 300 },
  129. xAxis: {
  130. type: 'category',
  131. axisLabel: { color: '#686872' },
  132. axisLine: { lineStyle: { color: '#D1D6DF' } },
  133. },
  134. yAxis: {
  135. type: 'value',
  136. min: 0,
  137. max: 100,
  138. axisLabel: { color: '#686872' },
  139. axisLine: { lineStyle: { color: '#D1D6DF' } },
  140. },
  141. series: legend.map(() => ({
  142. type: 'bar',
  143. barWidth: 40,
  144. })),
  145. };
  146. }
  147. function lineOption1(title, data, legend, color) {
  148. return {
  149. title: {
  150. text: title,
  151. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  152. left: '0',
  153. },
  154. tooltip: {
  155. trigger: 'axis',
  156. },
  157. legend: {
  158. show: legend.length > 1,
  159. data: legend,
  160. right: 20,
  161. },
  162. color,
  163. grid: { left: 30, right: 30, height: 300 },
  164. xAxis: {
  165. type: 'category',
  166. axisLabel: { color: '#686872' },
  167. axisLine: { lineStyle: { color: '#D1D6DF' } },
  168. },
  169. yAxis: {
  170. type: 'value',
  171. min: 0,
  172. max: 100,
  173. axisLabel: { color: '#686872' },
  174. axisLine: { lineStyle: { color: '#D1D6DF' } },
  175. },
  176. dataset: {
  177. source: [['type', ...legend], ...data],
  178. },
  179. series: legend.map(() => ({
  180. type: 'line',
  181. smooth: true,
  182. symbol: 'circle',
  183. })),
  184. };
  185. }
  186. function barOption1(title, value, allValue, avgCorrect, avgIncorrent) {
  187. const xAxis1 = [
  188. {
  189. gridIndex: 0,
  190. type: 'category',
  191. axisTick: { show: false },
  192. axisLine: { lineStyle: { color: '#D1D6DF' } },
  193. splitLine: { show: false },
  194. },
  195. {
  196. gridIndex: 1,
  197. type: 'category',
  198. axisTick: { show: false },
  199. axisLine: { lineStyle: { color: '#D1D6DF' } },
  200. splitLine: { show: false },
  201. data: [
  202. {
  203. value: 'Avg Time\nCorrect',
  204. textStyle: { color: '#686872', fontWeight: '500', fontSize: 14, lineHeight: 20 },
  205. },
  206. {
  207. value: 'Avg Time\nIncorrect',
  208. textStyle: { color: '#686872', fontWeight: '500', fontSize: 14, lineHeight: 20 },
  209. },
  210. ],
  211. },
  212. ];
  213. const xAxis2 = {
  214. type: 'category',
  215. axisTick: { show: false },
  216. axisLine: { lineStyle: { color: '#D1D6DF' } },
  217. splitLine: { show: false },
  218. };
  219. const yAxis1 = [
  220. {
  221. gridIndex: 0,
  222. show: false,
  223. min: 0,
  224. max: 100,
  225. axisTick: { show: false },
  226. axisLine: { show: false },
  227. splitLine: { show: false },
  228. },
  229. {
  230. gridIndex: 1,
  231. show: false,
  232. min: 0,
  233. max: 100,
  234. axisTick: { show: false },
  235. axisLine: { show: false },
  236. splitLine: { show: false },
  237. },
  238. ];
  239. const yAxis2 = {
  240. show: false,
  241. min: 0,
  242. max: 100,
  243. axisTick: { show: false },
  244. axisLine: { show: false },
  245. splitLine: { show: false },
  246. };
  247. const data1 = {
  248. type: 'bar',
  249. barWidth: 50,
  250. xAxisIndex: 0,
  251. yAxisIndex: 0,
  252. data: [
  253. {
  254. value,
  255. itemStyle: { color: '#7AA7DC' },
  256. label: {
  257. show: true,
  258. position: 'top',
  259. formatter: `{a|${value}}`,
  260. rich: { a: { fontSize: 16, fontWeight: 'bold', color: '#686872' } },
  261. },
  262. },
  263. {
  264. value: allValue,
  265. itemStyle: { color: '#598FCF' },
  266. label: {
  267. show: true,
  268. position: 'top',
  269. formatter: `{a|${allValue}}`,
  270. rich: { a: { fontSize: 12, color: '#686872' } },
  271. },
  272. },
  273. ],
  274. };
  275. const data2 = {
  276. type: 'bar',
  277. barWidth: 50,
  278. xAxisIndex: 1,
  279. yAxisIndex: 1,
  280. data: [
  281. {
  282. value: avgCorrect,
  283. name: 'Avg Time\nCorrect',
  284. itemStyle: { color: '#7775CA' },
  285. label: {
  286. show: true,
  287. position: 'top',
  288. formatter: `{a|${avgCorrect}}`,
  289. rich: { a: { fontSize: 16, fontWeight: 'bold', color: '#686872' } },
  290. },
  291. },
  292. {
  293. value: avgIncorrent,
  294. name: 'Avg Time\nIncorrect',
  295. itemStyle: { color: '#9396C9' },
  296. label: {
  297. show: true,
  298. position: 'top',
  299. formatter: `{a|${avgIncorrent}}`,
  300. rich: { a: { fontSize: 16, fontWeight: 'bold', color: '#686872' } },
  301. },
  302. },
  303. ],
  304. };
  305. return {
  306. title: [
  307. {
  308. text: title,
  309. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  310. left: '0',
  311. },
  312. {
  313. text: 'Avg Time\nTotal',
  314. textAlign: 'center',
  315. textVerticalAlign: 'middle',
  316. textStyle: { color: '#686872', fontWeight: '500', fontSize: 14, lineHeight: 20 },
  317. bottom: '2%',
  318. left: '26%',
  319. },
  320. ],
  321. xAxis: avgCorrect ? xAxis1 : xAxis2,
  322. yAxis: avgCorrect ? yAxis1 : yAxis2,
  323. grid: avgCorrect ? [{ width: 200, x: 72 }, { width: 350, x: 272 }] : { width: 200, left: '30%' },
  324. series: avgCorrect ? [data1, data2] : [data1],
  325. };
  326. }
  327. function pieOption1(title, value, allValue) {
  328. return {
  329. title: [
  330. {
  331. text: title,
  332. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  333. left: '0',
  334. },
  335. {
  336. text: `${value}%`,
  337. textAlign: 'center',
  338. textVerticalAlign: 'middle',
  339. textStyle: { color: value < 50 ? '#f19057' : '#7AA7DC', fontSize: 45 },
  340. subtext: `全站 ${allValue}%`,
  341. subtextStyle: { color: '#686872', fontSize: 16 },
  342. top: '35%',
  343. left: '49%',
  344. },
  345. ],
  346. series: [
  347. {
  348. type: 'pie',
  349. radius: ['64%', '70%'],
  350. label: {
  351. show: false,
  352. },
  353. hoverAnimation: false,
  354. animation: false,
  355. data: [
  356. {
  357. value: allValue,
  358. itemStyle: { color: '#7775CA' },
  359. label: {
  360. show: true,
  361. position: 'outside',
  362. formatter: `{a|全站用户}:{b|${allValue}%}`,
  363. rich: {
  364. a: {
  365. color: '#686872',
  366. fontSize: 16,
  367. },
  368. b: {
  369. color: '#6865FD',
  370. fontSize: 16,
  371. },
  372. },
  373. },
  374. },
  375. {
  376. value: 100 - allValue,
  377. itemStyle: { color: '#e1e1e1' },
  378. emphasis: { itemStyle: { color: '#e1e1e1' } },
  379. },
  380. ],
  381. },
  382. {
  383. type: 'pie',
  384. radius: ['45%', '61%'],
  385. label: {
  386. show: false,
  387. },
  388. hoverAnimation: false,
  389. animation: false,
  390. data: [
  391. { value, itemStyle: { color: value < 50 ? '#f19057' : '#7AA7DC' } },
  392. { value: 100 - value, itemStyle: { color: '#e1e1e1' }, emphasis: { itemStyle: { color: '#e1e1e1' } } },
  393. ],
  394. },
  395. ],
  396. };
  397. }
  398. function pieOption2(title, value1, value2, value3) {
  399. return {
  400. title: [
  401. {
  402. text: title,
  403. textStyle: { fontSize: 24, fontWeight: 'bold', color: '#686872' },
  404. left: '0',
  405. },
  406. {
  407. text: `${value1 + value2 + value3}`,
  408. textAlign: 'center',
  409. textVerticalAlign: 'middle',
  410. textStyle: { color: '#686872', fontSize: 60 },
  411. subtext: '综合力',
  412. subtextStyle: { color: '#686872', fontSize: 14 },
  413. top: '35%',
  414. left: '49.5%',
  415. },
  416. ],
  417. series: [
  418. {
  419. type: 'pie',
  420. radius: ['50%', '80%'],
  421. startAngle: 30,
  422. hoverAnimation: false,
  423. animation: false,
  424. data: [
  425. {
  426. value: value1,
  427. itemStyle: { color: '#6865FD' },
  428. label: {
  429. position: 'outside',
  430. formatter: `{a|逻辑关系} {b|${value1}}`,
  431. rich: {
  432. a: {
  433. color: '#686872',
  434. fontSize: 18,
  435. },
  436. b: {
  437. color: '#6865FD',
  438. fontSize: 18,
  439. },
  440. },
  441. },
  442. },
  443. {
  444. value: value2,
  445. itemStyle: { color: '#6EC28D' },
  446. label: {
  447. position: 'outside',
  448. formatter: `{a|句子结构} {b|${value2}}`,
  449. rich: {
  450. a: {
  451. color: '#686872',
  452. fontSize: 18,
  453. },
  454. b: {
  455. color: '#6EC28D',
  456. fontSize: 18,
  457. },
  458. },
  459. },
  460. },
  461. {
  462. value: value1,
  463. itemStyle: { color: '#598FCF' },
  464. label: {
  465. position: 'outside',
  466. formatter: `{a|阅读速度} {b|${value3}}`,
  467. rich: {
  468. a: {
  469. color: '#686872',
  470. fontSize: 18,
  471. },
  472. b: {
  473. color: '#598FCF',
  474. fontSize: 18,
  475. },
  476. },
  477. },
  478. },
  479. ],
  480. },
  481. ],
  482. };
  483. }
  484. export default class extends Page {
  485. initState() {
  486. return { report: { paperModule: 'examination' } };
  487. }
  488. initData() {
  489. const { id } = this.params;
  490. const { page = '' } = this.state.search;
  491. Question.detailReport(id).then(result => {
  492. switch (result.paperModule) {
  493. case 'sentence':
  494. this.refreshSentence(result);
  495. break;
  496. case 'textbook':
  497. this.refreshTextbook(result);
  498. break;
  499. case 'exercise':
  500. this.refreshExercise(result);
  501. break;
  502. case 'examination':
  503. this.refreshExamination(result);
  504. break;
  505. default:
  506. }
  507. this.setState({ report: result });
  508. });
  509. switch (page) {
  510. case 'question':
  511. // 题目回顾列表
  512. Question.questionReport(id).then(result => {
  513. this.setState({ list: result });
  514. });
  515. break;
  516. default:
  517. break;
  518. }
  519. }
  520. refreshSentence() {
  521. const { page = '' } = this.state.search;
  522. switch (page) {
  523. case 'question':
  524. break;
  525. default:
  526. }
  527. }
  528. refreshTextbook() {
  529. this.refreshExercise();
  530. }
  531. refreshExamination() {
  532. const { page = '' } = this.state.search;
  533. switch (page) {
  534. case 'total':
  535. break;
  536. case 'question':
  537. break;
  538. default:
  539. }
  540. }
  541. refreshExercise() {
  542. const { page = '' } = this.state.search;
  543. switch (page) {
  544. case 'question':
  545. break;
  546. default:
  547. }
  548. }
  549. renderView() {
  550. const { report = {} } = this.state;
  551. switch (report.paperModule) {
  552. case 'sentence':
  553. return this.renderSentence();
  554. case 'textbook':
  555. return this.renderTextbook();
  556. case 'exercise':
  557. return this.renderExercise();
  558. case 'examination':
  559. return this.renderExamination();
  560. default:
  561. return <div />;
  562. }
  563. }
  564. renderSentence() {
  565. return (
  566. <div className="sentence">
  567. <div className="header">
  568. <div className="content">
  569. <div className="title">Report for 「模考」千行CAT01</div>
  570. <div className="btns">
  571. <Button size="small" radius>
  572. 返回首页
  573. </Button>
  574. <Button size="small" radius>
  575. 题目回顾
  576. </Button>
  577. </div>
  578. <div className="right">
  579. <div className="text">周月言</div>
  580. <div className="desc">练习次数5</div>
  581. <div className="desc">2019-04-23 14:40:39</div>
  582. </div>
  583. </div>
  584. </div>
  585. <div className="body">
  586. <div className="content">
  587. <div className="title">完成情况</div>
  588. <div className="detail">
  589. <div className="block">
  590. <div className="t1">总耗时</div>
  591. <div className="t2">32</div>
  592. <div className="t3">min</div>
  593. </div>
  594. <div className="block">
  595. <div className="t1">超出建议用时</div>
  596. <div className="t2">32</div>
  597. <div className="t3">min</div>
  598. </div>
  599. <div className="line" />
  600. <div className="block">
  601. <div className="t1">完成题目</div>
  602. <div className="t2">32</div>
  603. <div className="t3">题</div>
  604. </div>
  605. <div className="block">
  606. <div className="t1">剩余未做</div>
  607. <div className="t2">32</div>
  608. <div className="t3">题</div>
  609. </div>
  610. </div>
  611. </div>
  612. </div>
  613. <div className="body gray">
  614. <div className="content">
  615. <div className="title">基本情况</div>
  616. <div className="block-wrapper">
  617. <div className="block">
  618. <PieChart option={pieOption1('平均用时', 10, 60)} />
  619. </div>
  620. <div className="block">
  621. <BarChart option={barOption1('用时', 10, 50)} />
  622. </div>
  623. </div>
  624. </div>
  625. </div>
  626. <div className="body">
  627. <div className="content">
  628. <div className="title">能力评估</div>
  629. <PieChart option={pieOption2('综合得分', 30, 60, 30)} />
  630. </div>
  631. </div>
  632. <div className="body gray">
  633. <div className="content t-c">
  634. <Button size="lager" width={200} radius>
  635. 继续做题
  636. </Button>
  637. </div>
  638. </div>
  639. </div>
  640. );
  641. }
  642. renderTextbook() {
  643. return this.renderExercise();
  644. }
  645. renderExercise() {
  646. return (
  647. <div className="exercise">
  648. <div className="header">
  649. <div className="content">
  650. <div className="title">Report for「练习」OG18-Easy(21-40)</div>
  651. <div className="btns">
  652. <Button size="small" radius>
  653. 返回首页
  654. </Button>
  655. <Button size="small" radius>
  656. 题目回顾
  657. </Button>
  658. </div>
  659. <div className="right">
  660. <div className="text">周月言</div>
  661. <div className="desc">练习次数5</div>
  662. <div className="desc">2019-04-23 14:40:39</div>
  663. </div>
  664. </div>
  665. </div>
  666. <div className="body">
  667. <div className="content">
  668. <div className="title">完成情况</div>
  669. <div className="detail">
  670. <div className="block">
  671. <div className="t1">总耗时</div>
  672. <div className="t2">32</div>
  673. <div className="t3">min</div>
  674. </div>
  675. <div className="block">
  676. <div className="t1">超出建议用时</div>
  677. <div className="t2">32</div>
  678. <div className="t3">min</div>
  679. </div>
  680. <div className="line" />
  681. <div className="block">
  682. <div className="t1">完成题目</div>
  683. <div className="t2">32</div>
  684. <div className="t3">题</div>
  685. </div>
  686. <div className="block">
  687. <div className="t1">剩余未做</div>
  688. <div className="t2">32</div>
  689. <div className="t3">题</div>
  690. </div>
  691. </div>
  692. </div>
  693. </div>
  694. <div className="body gray">
  695. <div className="content">
  696. <div className="title">基本情况</div>
  697. <div className="block-wrapper">
  698. <div className="block">
  699. <PieChart option={pieOption1('平均用时', 10, 60)} />
  700. </div>
  701. <div className="block-1-5">
  702. <BarChart option={barOption1('用时', 10, 50, 10, 50)} />
  703. </div>
  704. </div>
  705. </div>
  706. </div>
  707. <div className="body">
  708. <div className="content">
  709. <div className="title">PACE</div>
  710. <div className="detail-1">
  711. <div className="block">
  712. <div className="t1">平均用时</div>
  713. <div className="t2">1</div>
  714. <div className="t3">min</div>
  715. <div className="t2">03</div>
  716. <div className="t3">s</div>
  717. </div>
  718. <div className="block all">
  719. <div className="t1">全站用户</div>
  720. <div className="t2">1</div>
  721. <div className="t3">min</div>
  722. <div className="t2">03</div>
  723. <div className="t3">s</div>
  724. </div>
  725. </div>
  726. <LineChart
  727. height={400}
  728. option={lineOption1(
  729. '每题用时情况',
  730. [
  731. ['1', 43.3, 85.8],
  732. ['2', 43.1, 73.4],
  733. ['3', 56.4, 65.2],
  734. ['4', 16.4, 65.2],
  735. ['5', 36.4, 35.2],
  736. ['6', 76.4, 25.2],
  737. ['7', 16.4, 55.2],
  738. ['8', 26.4, 45.2],
  739. ['9', 36.4, 95.2],
  740. ['10', 26.4, 15.2],
  741. ],
  742. ['我的', '全站'],
  743. ['#7AA7DC', '#8684df'],
  744. )}
  745. />
  746. </div>
  747. </div>
  748. <div className="body gray">
  749. <div className="content">
  750. <div className="title">难度分析</div>
  751. <div className="detail-1">
  752. <div className="block">
  753. <div className="t1">正确率</div>
  754. <div className="t2">80%</div>
  755. </div>
  756. <div className="block all">
  757. <div className="t1">全站用户</div>
  758. <div className="t2">90</div>
  759. <div className="t3">%</div>
  760. </div>
  761. </div>
  762. <BarChart
  763. height={400}
  764. option={BarOption2(
  765. '正确率',
  766. [['Easy', 43.3, 85.8], ['Medium', 43.1, 73.4], ['Hard', 56.4, 65.2]],
  767. ['我的', '全站'],
  768. ['#8684df', '#5195e5'],
  769. )}
  770. />
  771. </div>
  772. </div>
  773. <div className="body">
  774. <div className="content">
  775. <div className="title">知识体系分析</div>
  776. <div className="detail-1">
  777. <div className="block">
  778. <div className="t1">平均用时</div>
  779. <div className="t2">1</div>
  780. <div className="t3">min</div>
  781. <div className="t2">03</div>
  782. <div className="t3">s</div>
  783. </div>
  784. <div className="block all">
  785. <div className="t1">正确率</div>
  786. <div className="t2">90%</div>
  787. </div>
  788. </div>
  789. <BarChart
  790. height={400}
  791. option={BarOption3(
  792. ['知识点', '正确率分析', '用时分析'],
  793. [50, 60, 70, 80, 10, 20],
  794. [50, 60, 70, 80, 10, 20],
  795. ['#7AA7DC', '#BFD4EE'],
  796. ['#8684df', '#C3C3E5'],
  797. )}
  798. />
  799. </div>
  800. </div>
  801. <div className="body gray">
  802. <div className="content">
  803. <div className="title">实战提醒</div>
  804. <div className="tip">
  805. <div className="t1">在实战限时情况下,本套题正确率为 </div>
  806. <div className="t2">56% </div>
  807. <Icon type="question-circle" theme="filled" />
  808. </div>
  809. </div>
  810. </div>
  811. <div className="body">
  812. <div className="content t-c">
  813. <Button size="lager" width={200} radius>
  814. 继续做题
  815. </Button>
  816. </div>
  817. </div>
  818. </div>
  819. );
  820. }
  821. renderExamination() {
  822. return (
  823. <div className="examination">
  824. <div className="header">
  825. <div className="content">
  826. <div className="title">千行 CAT 模考-01</div>
  827. <div className="btns">
  828. <Button size="small" radius>
  829. 返回首页
  830. </Button>
  831. <Button size="small" radius>
  832. 题目回顾
  833. </Button>
  834. </div>
  835. <div className="right">
  836. <div className="text">周月言</div>
  837. <div className="desc">练习次数5</div>
  838. <div className="desc">2019-04-23 14:40:39</div>
  839. </div>
  840. </div>
  841. </div>
  842. <div className="body">
  843. <div className="content">
  844. <Tabs
  845. type="division"
  846. theme="gray"
  847. active="main"
  848. space={7}
  849. tabs={[
  850. { key: 'main', name: '总览 Overview' },
  851. { key: 'ready', name: '语文 Verbal' },
  852. { key: 'exercise', name: '数学 Quant' },
  853. { key: 'cat', name: '综合推理 IR' },
  854. ]}
  855. />
  856. <div className="title">PACE</div>
  857. <div className="detail-1">
  858. <div className="block">
  859. <div className="t1">平均用时</div>
  860. <div className="t2">1</div>
  861. <div className="t3">min</div>
  862. <div className="t2">03</div>
  863. <div className="t3">s</div>
  864. </div>
  865. </div>
  866. <LineChart
  867. height={400}
  868. option={lineOption1(
  869. '每题用时情况',
  870. [
  871. ['1', 43.3],
  872. ['2', 43.1],
  873. ['3', 56.4],
  874. ['4', 16.4],
  875. ['5', 36.4],
  876. ['6', 76.4],
  877. ['7', 16.4],
  878. ['8', 26.4],
  879. ['9', 36.4],
  880. ['10', 26.4],
  881. ],
  882. ['我的'],
  883. ['#A3A8BF'],
  884. )}
  885. />
  886. <div className="m-b-4" />
  887. <LineChart
  888. height={400}
  889. option={lineOption1(
  890. '累计用时情况',
  891. [
  892. ['1', 43.3, 85.8],
  893. ['2', 43.1, 73.4],
  894. ['3', 56.4, 65.2],
  895. ['4', 16.4, 65.2],
  896. ['5', 36.4, 35.2],
  897. ['6', 76.4, 25.2],
  898. ['7', 16.4, 55.2],
  899. ['8', 26.4, 45.2],
  900. ['9', 36.4, 95.2],
  901. ['10', 26.4, 15.2],
  902. ],
  903. ['我的', '建议'],
  904. ['#A3A8BF', '#7AA7DC'],
  905. )}
  906. />
  907. </div>
  908. </div>
  909. <div className="body gray">
  910. <div className="content">
  911. <div className="title">基本情况</div>
  912. <table>
  913. <thead>
  914. <tr>
  915. <th>%Correct</th>
  916. <th>Avg Time</th>
  917. <th>
  918. Avg Time
  919. <br />
  920. Correct
  921. </th>
  922. <th>
  923. Avg Time
  924. <br />
  925. Incorrect
  926. </th>
  927. <th>
  928. Avg Diff
  929. <br />
  930. Correct
  931. </th>
  932. <th>
  933. Avg Diff
  934. <br />
  935. Incorrect
  936. </th>
  937. </tr>
  938. </thead>
  939. <tbody>
  940. <tr>
  941. <td>
  942. 50%
  943. <br />
  944. <span>8题/10题</span>
  945. </td>
  946. <td>
  947. 1:40
  948. <br />
  949. <span>15min/10题</span>
  950. </td>
  951. <td>
  952. 1:21
  953. <br />
  954. <span>15min/10题</span>
  955. </td>
  956. <td>
  957. 1:55
  958. <br />
  959. <span>15min/2题</span>
  960. </td>
  961. <td>650</td>
  962. <td>750</td>
  963. </tr>
  964. </tbody>
  965. </table>
  966. </div>
  967. </div>
  968. <div className="body">
  969. <div className="content">
  970. <div className="title">难度分析</div>
  971. <BarChart
  972. height={400}
  973. option={BarOption2(
  974. '正确率',
  975. [['Easy', 43.3, 85.8], ['Medium', 43.1, 73.4], ['Hard', 56.4, 65.2]],
  976. ['我的'],
  977. ['#989FC1'],
  978. )}
  979. />
  980. </div>
  981. </div>
  982. <div className="body gray">
  983. <div className="content">
  984. <div className="title">知识体系分析</div>
  985. <BarChart
  986. height={400}
  987. option={BarOption3(
  988. ['知识点', '正确率分析', '用时分析'],
  989. [50, 60, 70, 80, 10, 20],
  990. [50, 60, 70, 80, 10, 20],
  991. ['#92AFD2', '#BFD4EE'],
  992. ['#989FC1', '#CCCCDC'],
  993. )}
  994. />
  995. </div>
  996. </div>
  997. </div>
  998. );
  999. }
  1000. }