page.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. import { User } from '../../../stores/user';
  14. const MessageTypeMap = getMap(MessageType, 'value', 'label');
  15. const columns = [
  16. {
  17. title: '消息',
  18. key: 'title',
  19. render: (text, row) => {
  20. return <div>
  21. {!row.isRead ? <span className='dot'>{text}</span> : text}
  22. {row.content && <div className='ws-p'>{row.content}{row.link && <a className='m-l-5' href={row.link} target="_blank">{row.linkTitle || '查看详情'}</a>}{row.linkSecond && <a className='m-l-5' href={row.linkSecond} target="_blank">{row.linkSecondTitle || '查看详情'}</a>}</div>}
  23. </div>;
  24. },
  25. },
  26. { title: '类型', key: 'type', width: 120 },
  27. {
  28. title: '发送时间',
  29. key: 'date',
  30. width: 180,
  31. render: (text) => {
  32. return <div className="sub">
  33. <div className="t-2 t-s-12">{text.split(' ')[0]}</div>
  34. <div className="t-6 t-s-12">{text.split(' ')[1]}</div>
  35. </div>;
  36. },
  37. }];
  38. export default class extends Page {
  39. constructor(props) {
  40. props.size = 15;
  41. super(props);
  42. }
  43. initState() {
  44. return {
  45. tab: '',
  46. filterMap: {},
  47. };
  48. }
  49. initData() {
  50. const data = Object.assign(this.state, this.state.search);
  51. if (data.order) {
  52. data.sortMap = { [data.order]: data.direction };
  53. }
  54. data.filterMap = this.state.search;
  55. data.messageTypeSelect = MessageType.map(row => {
  56. row.title = row.label;
  57. row.key = row.value;
  58. return row;
  59. });
  60. data.messageTypeSelect.unshift({
  61. title: '全部消息',
  62. key: '',
  63. });
  64. this.setState(data);
  65. My.message(Object.assign({ read: data.tab === 'unread' ? 0 : null }, this.state.search)).then(result => {
  66. result.list = result.list.map(row => {
  67. row.type = MessageTypeMap[row.type];
  68. row.date = formatDate(row.createTime, 'YYYY-MM-DD HH:mm:ss');
  69. return row;
  70. });
  71. result.page = data.page;
  72. this.setState(result);
  73. });
  74. }
  75. onFilter(value) {
  76. this.search(value);
  77. }
  78. onTabChange(tab) {
  79. const data = { tab };
  80. this.refreshQuery(data);
  81. }
  82. onChangePage(page) {
  83. this.search({ page });
  84. }
  85. readAllMessage() {
  86. My.readAllMessage().then(() => {
  87. asyncSMessage('操作成功');
  88. User.refreshToken();
  89. this.refresh();
  90. });
  91. }
  92. renderView() {
  93. const { config } = this.props;
  94. return <UserLayout active={config.key} menu={menu} center={this.renderTable()} />;
  95. }
  96. renderTable() {
  97. const { tab, list, messageTypeSelect, filterMap, page, total } = this.state;
  98. return (
  99. <div className="table-layout">
  100. <UserAction
  101. left={
  102. <Tabs
  103. type="tag"
  104. theme="white"
  105. size="small"
  106. space={5}
  107. width={54}
  108. active={tab}
  109. tabs={[{ key: '', title: '全部' }, { key: 'unread', title: '未读' }]}
  110. onChange={key => this.onTabChange(key)}
  111. />
  112. }
  113. right={<span style={{ cursor: 'pointer' }} onClick={() => {
  114. this.readAllMessage();
  115. }}>全部已读</span>}
  116. selectList={[
  117. {
  118. select: messageTypeSelect,
  119. placeholder: '消息类型',
  120. key: 'messageType',
  121. },
  122. ]}
  123. filterMap={filterMap}
  124. onFilter={value => this.onFilter(value)}
  125. />
  126. <UserTable
  127. size="small"
  128. columns={columns}
  129. data={list}
  130. current={page}
  131. total={total}
  132. pageSize={this.state.search.size}
  133. onChange={(value) => {
  134. this.onChangePage(value);
  135. }}
  136. />
  137. </div>
  138. );
  139. }
  140. }