page.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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 { getMap, formatMoney, formatDate } from '@src/services/Tools';
  6. import UserLayout from '../../../layouts/User';
  7. import menu from '../index';
  8. import UserTable from '../../../components/UserTable';
  9. import { Order } from '../../../stores/order';
  10. import { RecordSource, ServiceKey } from '../../../../Constant';
  11. import More from '../../../components/More';
  12. const RecordSourceMap = getMap(RecordSource, 'value', 'label');
  13. const ServiceKeyMap = getMap(ServiceKey, 'value', 'label');
  14. function formatTitle(record) {
  15. if (record.productType === 'course-package') {
  16. return (record.coursePackage || {}).title;
  17. }
  18. if (record.productType === 'course') {
  19. return (record.course || {}).title;
  20. }
  21. if (record.productType === 'data') {
  22. return (record.data || {}).title;
  23. }
  24. if (record.productType === 'service') {
  25. return `${ServiceKeyMap[record.service]}`;
  26. }
  27. return '';
  28. }
  29. const columns = [
  30. { title: '订单编号', key: 'id' },
  31. {
  32. title: '服务',
  33. key: 'title',
  34. render: (text, record) => {
  35. const actionList = [];
  36. if (record.canInvoice && !record.hasInvoice) {
  37. actionList.push({ key: 'invoice', label: '开发票' });
  38. }
  39. actionList.push({ key: 'detail', label: '订单详情' });
  40. const onAction = (key) => {
  41. switch (key) {
  42. case 'invoice':
  43. this.setState({ showInvoice: true, invoice: { orderId: record.id, money: record.invoiceMoney } });
  44. break;
  45. case 'detail':
  46. openLink(`/order/detail/${record.id}`);
  47. break;
  48. default:
  49. }
  50. };
  51. if (record.checkouts.length > 3) {
  52. return <span>{formatTitle(record.checkouts[0])}<br />等{record.checkouts.length}个商品<More actionList={actionList} onAction={onAction} /></span>;
  53. }
  54. return record.checkouts.map(row => {
  55. return formatTitle(row);
  56. });
  57. },
  58. },
  59. {
  60. title: '购买时间',
  61. key: 'createTime',
  62. render: (text) => {
  63. return formatDate(text, 'YYYY-MM-DD\nHH:mm:ss');
  64. },
  65. },
  66. {
  67. title: '付款方式',
  68. key: 'payMethod',
  69. render: (text) => {
  70. return RecordSourceMap[text];
  71. },
  72. },
  73. {
  74. title: '付款金额',
  75. key: 'money',
  76. render: (text) => {
  77. return formatMoney(text);
  78. },
  79. },
  80. ];
  81. export default class extends Page {
  82. constructor(props) {
  83. props.size = 15;
  84. super(props);
  85. }
  86. initState() {
  87. return {};
  88. }
  89. initData() {
  90. Order.list(this.state.search)
  91. .then(result => {
  92. this.setState({ list: result.list, total: result.total, page: this.state.search.page });
  93. });
  94. }
  95. onChangePage(page) {
  96. this.search({ page });
  97. }
  98. submitInvoice(invoice) {
  99. Order.openInvoice(invoice)
  100. .then(() => {
  101. this.refresh();
  102. this.setState({ showFinish: true, showInvoice: false, invoice: {} });
  103. })
  104. .catch(e => {
  105. asyncSMessage(e.message, 'error');
  106. });
  107. }
  108. renderView() {
  109. const { config } = this.props;
  110. return <UserLayout active={config.key} menu={menu} center={this.renderTable()} />;
  111. }
  112. renderTable() {
  113. const { list, total, page } = this.state;
  114. return (
  115. <div className="table-layout">
  116. <UserTable
  117. size="small"
  118. columns={columns}
  119. data={list}
  120. onChange={p => this.onChangePage(p)}
  121. total={total}
  122. current={page}
  123. />
  124. </div>
  125. );
  126. }
  127. }