page.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. import React from 'react';
  2. import './index.less';
  3. import { Icon, Checkbox } from 'antd';
  4. import Page from '@src/containers/Page';
  5. import UserLayout from '../../../layouts/User';
  6. import UserTable from '../../../components/UserTable';
  7. import UserAction from '../../../components/UserAction';
  8. import menu from '../index';
  9. import Tabs from '../../../components/Tabs';
  10. import Modal from '../../../components/Modal';
  11. import Select from '../../../components/Select';
  12. import GIcon from '../../../components/Icon';
  13. const columns = [
  14. { key: '', title: '题型', fixSort: true },
  15. { key: '', title: '题目ID', fixSort: true },
  16. { key: '', title: '内容' },
  17. { key: '', title: '耗时', sort: true },
  18. { key: '', title: '错误率', sort: true },
  19. { key: '', title: '最近做题' },
  20. {
  21. key: '',
  22. title: '',
  23. render() {
  24. return [<GIcon name="star" className="m-r-5" />, <GIcon name="note" />];
  25. },
  26. },
  27. ];
  28. const exportType = [
  29. { key: '1', title: '题目' },
  30. { key: '2', title: '官方解析' },
  31. { key: '3', title: '我的笔记' },
  32. { key: '4', title: '千行解析', auth: true },
  33. { key: '5', title: '题源联想', auth: true },
  34. { key: '6', title: '相关问答', auth: true },
  35. ];
  36. export default class extends Page {
  37. initState() {
  38. return {
  39. tab: '1',
  40. filterMap: {},
  41. sortMap: {},
  42. data: [{}, {}],
  43. selectList: [],
  44. allChecked: false,
  45. page: 1,
  46. total: 1,
  47. };
  48. }
  49. onChangeTab(tab) {
  50. this.setState({ tab });
  51. }
  52. onFilter(value) {
  53. this.setState({ filterMap: value });
  54. }
  55. onSort(value) {
  56. this.setState({ sortMap: value });
  57. }
  58. onDataChange(page) {
  59. this.setState({ page, allChecked: false, selectList: [] });
  60. }
  61. onAll(checked) {
  62. if (checked) {
  63. const { data = [] } = this.state;
  64. const list = [];
  65. data.forEach(item => {
  66. list.push(item.key);
  67. });
  68. this.setState({ selectList: list, allChecked: true });
  69. } else {
  70. this.setState({ selectList: [], allChecked: false });
  71. }
  72. }
  73. onAction() {}
  74. onSelect(selectList) {
  75. this.setState({ selectList });
  76. }
  77. renderView() {
  78. const { config } = this.props;
  79. return <UserLayout active={config.key} menu={menu} center={this.renderTable()} />;
  80. }
  81. renderTable() {
  82. const { tab } = this.state;
  83. return (
  84. <div className="table-layout">
  85. <Tabs
  86. border
  87. type="division"
  88. theme="theme"
  89. size="small"
  90. space={2.5}
  91. width={100}
  92. active={tab}
  93. tabs={[{ key: '1', title: '题目' }, { key: '2', title: '文章' }]}
  94. onChange={key => this.onChangeTab(key)}
  95. />
  96. {this[`renderTab${tab}`]()}
  97. {this.renderModal()}
  98. </div>
  99. );
  100. }
  101. renderTab1() {
  102. const { filterMap = {}, sortMap = {}, selectList = [], data = [], allChecked, page, total } = this.state;
  103. return (
  104. <div className="tab-1-layout">
  105. <UserAction
  106. search
  107. selectList={[
  108. {
  109. label: '123',
  110. key: 'one',
  111. select: [{ title: '123', key: '1' }, { title: '123', key: '2' }, { title: '123', key: '2' }],
  112. },
  113. {
  114. label: '123',
  115. children: [
  116. {
  117. key: '3',
  118. default: '1',
  119. select: [{ title: '123', key: '1' }, { title: '123', key: '2' }, { title: '123', key: '2' }],
  120. },
  121. {
  122. key: 'two',
  123. be: 'one',
  124. placeholder: '全部',
  125. selectMap: {
  126. 1: [{ title: '123', key: '1' }, { title: '123', key: '2' }, { title: '123', key: '2' }],
  127. },
  128. },
  129. ],
  130. },
  131. ]}
  132. filterMap={filterMap}
  133. onFilter={value => this.onFilter(value)}
  134. />
  135. <UserAction
  136. allCheckbox
  137. allChecked={allChecked}
  138. help
  139. btnList={[
  140. { title: '移除', key: 'remove' },
  141. { title: '组卷', key: 'group', tag: 'vip' },
  142. { title: '导出', key: 'export', tag: 'vip', disabled: true },
  143. ]}
  144. right={
  145. <div className="tip">
  146. 2019-06-03 15:30 组卷50题,做对30题。<span>移除正确题目</span>
  147. <Icon type="close-circle" theme="filled" />
  148. </div>
  149. }
  150. onAll={checked => this.onAll(checked)}
  151. onAction={key => this.onAction(key)}
  152. />
  153. <UserTable
  154. select
  155. columns={columns}
  156. sortMap={sortMap}
  157. data={data}
  158. current={page}
  159. total={total}
  160. selectList={selectList}
  161. onSelect={l => this.onSelect(l)}
  162. onSort={v => this.onSort(v)}
  163. onChange={p => this.onDataChange(p)}
  164. />
  165. </div>
  166. );
  167. }
  168. renderTab2() {
  169. const { filterMap = {}, sortMap = {}, selectList = [], data = [], allChecked, page, total } = this.state;
  170. return (
  171. <div className="tab-1-layout">
  172. <UserAction
  173. search
  174. selectList={[
  175. {
  176. label: '123',
  177. key: 'one',
  178. select: [{ title: '123', key: '1' }, { title: '123', key: '2' }, { title: '123', key: '2' }],
  179. },
  180. {
  181. label: '123',
  182. children: [
  183. {
  184. key: '3',
  185. default: '1',
  186. select: [{ title: '123', key: '1' }, { title: '123', key: '2' }, { title: '123', key: '2' }],
  187. },
  188. {
  189. key: 'two',
  190. be: 'one',
  191. placeholder: '全部',
  192. selectMap: {
  193. 1: [{ title: '123', key: '1' }, { title: '123', key: '2' }, { title: '123', key: '2' }],
  194. },
  195. },
  196. ],
  197. },
  198. ]}
  199. filterMap={filterMap}
  200. onFilter={value => this.onFilter(value)}
  201. />
  202. <UserAction
  203. allCheckbox
  204. allChecked={allChecked}
  205. help
  206. btnList={[
  207. { title: '移除', key: 'remove' },
  208. { title: '组卷', key: 'group', tag: 'vip' },
  209. { title: '导出', key: 'export', tag: 'vip', disabled: true },
  210. ]}
  211. right={
  212. <div className="tip">
  213. 2019-06-03 15:30 组卷50题,做对30题。<span>移除正确题目</span>
  214. <Icon type="close-circle" theme="filled" />
  215. </div>
  216. }
  217. onAll={checked => this.onAll(checked)}
  218. onAction={key => this.onAction(key)}
  219. />
  220. <UserTable
  221. select
  222. columns={columns}
  223. sortMap={sortMap}
  224. data={data}
  225. current={page}
  226. total={total}
  227. selectList={selectList}
  228. onSelect={l => this.onSelect(l)}
  229. onSort={v => this.onSort(v)}
  230. onChange={p => this.onDataChange(p)}
  231. />
  232. </div>
  233. );
  234. }
  235. renderModal() {
  236. return [
  237. <Modal title="操作提示" confirmText="好的,知道了" btnAlign="center" onConfirm={() => {}}>
  238. <div className="flex-layout m-b-2">
  239. <div className="flex-block">
  240. <div className="t-1 t-s-18">组卷功能</div>
  241. <div className="t-2">操作数量:10-50;</div>
  242. <div className="t-2">注意事项:可跨题型、不可跨学科。</div>
  243. </div>
  244. <div className="flex-block">
  245. <div className="t-1 t-s-18">导出功能</div>
  246. <div className="t-2">操作数量:1-100;</div>
  247. <div className="t-2">注意事项:“综合推理IR”暂时无法导出。</div>
  248. </div>
  249. </div>
  250. <div className="t-3">
  251. *您可点击
  252. <Icon type="question-circle" theme="filled" />
  253. 查阅以上信息。
  254. </div>
  255. </Modal>,
  256. <Modal title="组卷练习" confirmText="好的,知道了" btnAlign="center" onConfirm={() => {}}>
  257. <div className="t-2 t-s-18">不可同时选中语文题和数学题,请重新选择。</div>
  258. </Modal>,
  259. <Modal title="组卷练习" confirmText="开始练习" onConfirm={() => {}} onCancel={() => {}}>
  260. <div className="t-2 t-s-18">
  261. 您共选择了 <span className="t-4">50</span> 道题目,是否开始练习?
  262. </div>
  263. <div className="t-2 t-s-16">
  264. <Checkbox checked className="m-r-5" />
  265. 剔除已组卷练习 <Select
  266. theme="white"
  267. value="1"
  268. list={[{ key: '1', title: '2' }, { key: '2', title: '3' }]}
  269. />{' '}
  270. 次以上的错题
  271. </div>
  272. </Modal>,
  273. <Modal title="移出" onConfirm={() => {}} onCancel={() => {}}>
  274. <div className="t-2 t-s-18">
  275. 当前选中的 <span className="t-4">50</span> 道题即将被移出错题本,移出后无法恢复,是否继续?
  276. </div>
  277. </Modal>,
  278. <Modal title="导出" confirmText="好的,知道了" btnAlign="center" onConfirm={() => {}}>
  279. <div className="t-2 t-s-18">正在下载中,请不要关闭当前页面!</div>
  280. </Modal>,
  281. <Modal title="导出" confirmText="导出" onConfirm={() => {}} onCancel={() => {}}>
  282. <div className="t-2 t-s-18 m-b-5">
  283. 当前共选中 <span className="t-4">50</span> 道题,请确认需要导出的内容:
  284. </div>
  285. <div className="t-2 t-s-16">
  286. {exportType.map(item => {
  287. return (
  288. <div className="d-i-b m-b-5" style={{ width: 135 }}>
  289. <Checkbox checked className="m-r-5" />
  290. {item.title}
  291. </div>
  292. );
  293. })}
  294. </div>
  295. </Modal>,
  296. <Modal title="导出" confirmText="导出" onConfirm={() => {}} onCancel={() => {}}>
  297. <div className="t-2 t-s-18 m-b-5">
  298. 当前共选中 <span className="t-4">50</span> 道题,请确认需要导出的内容:
  299. </div>
  300. <div className="t-2 t-s-16 m-b-2">
  301. {exportType
  302. .filter(item => !item.auth)
  303. .map(item => {
  304. return (
  305. <div className="d-i-b m-b-2" style={{ width: 135 }}>
  306. <Checkbox checked className="m-r-5" />
  307. {item.title}
  308. </div>
  309. );
  310. })}
  311. </div>
  312. <div className="b-b m-b-2 m-t-2" />
  313. <div className="t-3 m-b-1">
  314. 以下内容需实名认证后才可导出: <a className="f-r">去认证 ></a>
  315. </div>
  316. <div className="t-2 t-s-16 m-b-2">
  317. {exportType
  318. .filter(item => item.auth)
  319. .map(item => {
  320. return (
  321. <div className="d-i-b" style={{ width: 135 }}>
  322. <Checkbox disabled className="m-r-5" />
  323. {item.title}
  324. </div>
  325. );
  326. })}
  327. </div>
  328. </Modal>,
  329. ];
  330. }
  331. }