page.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import React from 'react';
  2. import './index.less';
  3. import Page from '@src/containers/Page';
  4. import { asyncSMessage } from '@src/services/AsyncTools';
  5. import UserLayout from '../../../layouts/User';
  6. import menu from '../index';
  7. import UserTable from '../../../components/UserTable';
  8. import UserAction from '../../../components/UserAction';
  9. import Tabs from '../../../components/Tabs';
  10. import { My } from '../../../stores/my';
  11. import { MessageType } from '../../../../Constant';
  12. import { getMap, formatDate } from '../../../../../src/services/Tools';
  13. const MessageTypeMap = getMap(MessageType, 'value', 'label');
  14. const columns = [{ title: '消息', key: 'content' }, { title: '类型', key: 'type' }, { title: '发送时间', key: 'date' }];
  15. export default class extends Page {
  16. constructor(props) {
  17. props.size = 15;
  18. super(props);
  19. }
  20. initState() {
  21. return {
  22. tab: '',
  23. filterMap: {},
  24. };
  25. }
  26. initData() {
  27. const data = Object.assign(this.state, this.state.search);
  28. if (data.order) {
  29. data.sortMap = { [data.order]: data.direction };
  30. }
  31. data.filterMap = this.state.search;
  32. data.messageTypeSelect = MessageType.map(row => {
  33. row.title = row.label;
  34. row.key = row.value;
  35. return row;
  36. });
  37. data.messageTypeSelect.unshift({
  38. title: '消息类型',
  39. key: '',
  40. });
  41. this.setState(data);
  42. My.message(Object.assign({ read: data.tab === 'unread' ? 0 : null }, this.state.search)).then(result => {
  43. result.list = result.list.map(row => {
  44. row.type = MessageTypeMap[row.type];
  45. row.date = formatDate(row.createTime, 'YYYY-MM-DD\n HH:mm:ss');
  46. return row;
  47. });
  48. result.page = data.page;
  49. this.setState(result);
  50. });
  51. }
  52. onFilter(value) {
  53. this.search(value);
  54. }
  55. onTabChange(tab) {
  56. const data = { tab };
  57. this.refreshQuery(data);
  58. }
  59. onChangePage(page) {
  60. this.search({ page });
  61. }
  62. readAllMessage() {
  63. My.readAllMessage().then(() => {
  64. asyncSMessage('操作成功');
  65. });
  66. }
  67. renderView() {
  68. const { config } = this.props;
  69. return <UserLayout active={config.key} menu={menu} center={this.renderTable()} />;
  70. }
  71. renderTable() {
  72. const { tab, list, messageTypeSelect, filterMap, page, total } = this.state;
  73. return (
  74. <div className="table-layout">
  75. <UserAction
  76. left={
  77. <Tabs
  78. type="tag"
  79. theme="white"
  80. size="small"
  81. space={5}
  82. width={54}
  83. active={tab}
  84. tabs={[{ key: '', title: '全部' }, { key: 'unread', title: '未读' }]}
  85. onChange={key => this.onTabChange(key)}
  86. />
  87. }
  88. right={<span style={{ cursor: 'pointer' }} onClick={() => {
  89. this.readAllMessage();
  90. }}>全部已读</span>}
  91. selectList={[
  92. {
  93. select: messageTypeSelect,
  94. key: 'messageType',
  95. },
  96. ]}
  97. filterMap={filterMap}
  98. onFilter={value => this.onFilter(value)}
  99. />
  100. <UserTable
  101. size="small"
  102. columns={columns}
  103. data={list}
  104. current={page}
  105. total={total}
  106. onChange={(value) => {
  107. this.onChangePage(value);
  108. }}
  109. />
  110. </div>
  111. );
  112. }
  113. }