index.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React, { Component } from 'react';
  2. import './index.less';
  3. import { formatPercent } from '../../../../src/services/Tools';
  4. function getKey(type, index, selected, answer) {
  5. return `${(selected[type] || [])[index] ? 'selected' : ''} ${(answer[type] || [])[index] ? 'true' : 'false'}`;
  6. }
  7. function getDoubleKey(type, index, selected, answer, position) {
  8. return `${((selected[type] || [])[index] || [])[position] ? 'selected' : ''} ${((answer[type] || [])[index] || [])[position] ? 'true' : 'false'}`;
  9. }
  10. export default class AnswerList extends Component {
  11. render() {
  12. return <div className="answer-list">{this.renderDetail()}</div>;
  13. }
  14. renderDetail() {
  15. const { type } = this.props;
  16. switch (type) {
  17. case 'single':
  18. return this.renderList();
  19. case 'double':
  20. return this.renderTable();
  21. default:
  22. return <div />;
  23. }
  24. }
  25. renderList() {
  26. const { selected = {}, answer = {}, show, list = [], distributed = [], type } = this.props;
  27. const count = distributed.reduce((x, y) => x + y, 0);
  28. return (
  29. <div className="list">
  30. {list.map((item, index) => {
  31. return (
  32. <div className={`item ${getKey(type, index, selected, answer)} ${show ? 'show' : ''}`}>
  33. <div className="icon" />
  34. <div className="text">{item}</div>
  35. {show && <div className="total">{formatPercent(distributed[index], count, false)}用户选择该选项</div>}
  36. </div>
  37. );
  38. })}
  39. </div>
  40. );
  41. }
  42. renderTable() {
  43. const { selected = {}, answer = {}, show, list = [], type, first, second } = this.props;
  44. return (
  45. <table border="1" bordercolor="#d8d8d8">
  46. <thead>
  47. <tr className="bg">
  48. <th align="center" width="100" className="t-c">
  49. {first}
  50. </th>
  51. <th align="center" width="100" className="t-c">
  52. {second}
  53. </th>
  54. <th />
  55. </tr>
  56. </thead>
  57. <tbody>
  58. {list.map((item, index) => {
  59. return (
  60. <tr>
  61. <td align="center" className="bg">
  62. <div className={`item ${getDoubleKey(type, index, selected, answer, 0)} ${show ? 'show' : ''}`}><div className="icon" /></div>
  63. </td>
  64. <td align="center" className="bg">
  65. <div className={`item ${getDoubleKey(type, index, selected, answer, 1)} ${show ? 'show' : ''}`}><div className="icon" /></div>
  66. </td>
  67. <td>{item}</td>
  68. </tr>);
  69. })}
  70. </tbody>
  71. </table>
  72. );
  73. }
  74. }