page.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. initState() {
  17. return {
  18. tab: '',
  19. filterMap: {},
  20. };
  21. }
  22. initData() {
  23. const data = Object.assign(this.state, this.state.search);
  24. if (data.order) {
  25. data.sortMap = { [data.order]: data.direction };
  26. }
  27. data.filterMap = this.state.search;
  28. data.messageTypeSelect = MessageType.map(row => {
  29. row.title = row.label;
  30. row.key = row.value;
  31. return row;
  32. });
  33. data.messageTypeSelect.unshift({
  34. title: '消息类型',
  35. key: '',
  36. });
  37. this.setState(data);
  38. My.message(Object.assign({ read: data.tab === 'unread' ? 0 : null }, this.state.search)).then(result => {
  39. result.list = result.list.map(row => {
  40. row.type = MessageTypeMap[row.type];
  41. row.date = formatDate(row.createTime, 'YYYY-MM-DD\n HH:mm:ss');
  42. return row;
  43. });
  44. this.setState(result);
  45. });
  46. }
  47. onFilter(value) {
  48. this.search(value);
  49. }
  50. onTabChange(tab) {
  51. const data = { tab };
  52. this.refreshQuery(data);
  53. }
  54. readAllMessage() {
  55. My.readAllMessage().then(() => {
  56. asyncSMessage('操作成功');
  57. });
  58. }
  59. renderView() {
  60. const { config } = this.props;
  61. return <UserLayout active={config.key} menu={menu} center={this.renderTable()} />;
  62. }
  63. renderTable() {
  64. const { tab, list, messageTypeSelect, filterMap } = this.state;
  65. return (
  66. <div className="table-layout">
  67. <UserAction
  68. left={
  69. <Tabs
  70. type="tag"
  71. theme="white"
  72. size="small"
  73. space={5}
  74. width={54}
  75. active={tab}
  76. tabs={[{ key: '', title: '全部' }, { key: 'unread', title: '未读' }]}
  77. onChange={key => this.onTabChange(key)}
  78. />
  79. }
  80. right={<span style={{ cursor: 'pointer' }} onClick={() => {
  81. this.readAllMessage();
  82. }}>全部已读</span>}
  83. selectList={[
  84. {
  85. select: messageTypeSelect,
  86. key: 'messageType',
  87. },
  88. ]}
  89. filterMap={filterMap}
  90. onFilter={value => this.onFilter(value)}
  91. />
  92. <UserTable size="small" columns={columns} data={list} />
  93. </div>
  94. );
  95. }
  96. }