index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { connect } from 'dva';
  2. import { Divider, Table, Modal } from 'antd';
  3. import PreviewFile from '@/components/PreviewFile';
  4. import FileViewerModal from '@/components/FileViewer';
  5. import React, { useState, useMemo } from 'react';
  6. function AttachmentTable(props) {
  7. const [excelFileVisible, setExcelFileVisible] = useState(false);
  8. const [exportData, setExportData] = useState({});
  9. const { loading, excelFileList, canDelete = true, dispatch, version } = props;
  10. const columns = [
  11. {
  12. title: '文件名',
  13. dataIndex: 'name',
  14. },
  15. {
  16. title: '操作',
  17. render: record => {
  18. return (
  19. <>
  20. {canDelete && (
  21. <a
  22. onClick={() => {
  23. deleteFile(record.id);
  24. }}
  25. style={{ marginRight: 10 }}
  26. >
  27. 删除
  28. </a>
  29. )}
  30. <a
  31. onClick={() => {
  32. setExcelFileVisible(true);
  33. setExportData(record);
  34. }}
  35. >
  36. 预览
  37. </a>
  38. </>
  39. );
  40. },
  41. },
  42. ];
  43. const downloadFile = record => {
  44. window.location.href = `${record.url}`;
  45. };
  46. const deleteFile = id => {
  47. Modal.confirm({
  48. title: '提醒',
  49. content: '确认删除该文件,删除后无法复原',
  50. okText: '确认',
  51. cancelText: '取消',
  52. onOk() {
  53. dispatch({
  54. type: 'detail/deleteFiles',
  55. id: id,
  56. callback: () => {
  57. dispatch({
  58. type: 'detail/QueryExcelFiles',
  59. payload: {
  60. excel_id: version.attachment_id,
  61. },
  62. });
  63. },
  64. });
  65. },
  66. });
  67. };
  68. const excelFileData = useMemo(() => {
  69. return excelFileList?.map(item => {
  70. const list = item.url.split('/');
  71. const name = list[list.length - 1];
  72. return { name, url: item.url, id: item.id };
  73. });
  74. }, [excelFileList]);
  75. return (
  76. <>
  77. <Table
  78. title={() => '附件列表'}
  79. rowKey="id"
  80. loading={loading}
  81. columns={columns}
  82. dataSource={excelFileData}
  83. />
  84. <FileViewerModal
  85. data={exportData}
  86. visible={excelFileVisible}
  87. downloadFile={downloadFile}
  88. onCancel={() => {
  89. setExcelFileVisible(false);
  90. }}
  91. />
  92. </>
  93. );
  94. }
  95. const isImg = fileNmae => {
  96. const imgReg = /\.(png|jpg|gif|jpeg|webp)$/;
  97. return imgReg.test(fileNmae);
  98. };
  99. export default connect(({ detail, loading }) => ({
  100. excelFileList: detail.excelFileList,
  101. loading: loading.effects['detail/QueryExcelFiles'],
  102. }))(AttachmentTable);