DiskPage.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import React, { Component } from 'react';
  2. import { Space, Slider, message, Breadcrumb, Tooltip } from 'antd';
  3. import Folder from './Folder';
  4. import File from './File';
  5. import { apiFolderList, apiGroupRoot, apiRootFolderId } from '../../services/API/API';
  6. import getCookie from '../../utils/getCookie';
  7. import './DiskPage.less';
  8. import AddFolderModal from './AddFolderModal';
  9. import UploadFileModal from './UploadFileModal';
  10. import GroupModal from './GroupModal';
  11. import { CopyTwoTone } from '@ant-design/icons';
  12. import encrypt from '../../utils/encrypt/encrypt';
  13. import QueueAnim from 'rc-queue-anim';
  14. class DiskPage extends Component {
  15. state = {
  16. type: this.props.type,
  17. currentId: -1,
  18. size: 8,
  19. addressList: [],
  20. data: [],
  21. haveFolder: false,
  22. haveFile: false,
  23. };
  24. getRootFolderIdAndInter = () => {
  25. console.log(document.cookie);
  26. let params = {
  27. username: getCookie('username'),
  28. token: getCookie('token'),
  29. };
  30. console.log('获得参数:' + params.username + params.token);
  31. if (this.props.type === 'team') {
  32. params = {
  33. group_id: this.props.group_id,
  34. ...params,
  35. };
  36. apiGroupRoot(params).then((res) => {
  37. if (res.data.code === 200) {
  38. console.log('成功');
  39. this.setState({
  40. currentId: res.data.root_folder_id,
  41. });
  42. this.cdFolder(this.state.currentId, this.props.group_name);
  43. } else if (res.data.code === 401) {
  44. message.error('未登录');
  45. } else if (res.data.code === 403) {
  46. message.error('群不存在');
  47. window.location.href = '';
  48. } else {
  49. message.error('错误');
  50. window.location.href = '';
  51. }
  52. });
  53. } else {
  54. apiRootFolderId(params).then((res) => {
  55. if (res.data.code === 200) {
  56. console.log('成功');
  57. this.setState({
  58. currentId: res.data.root_folder_id,
  59. });
  60. this.cdFolder(this.state.currentId, getCookie('username'));
  61. } else if (res.data.code === 401) {
  62. message.error('未登录');
  63. // window.location.href = "";
  64. } else {
  65. message.error('错误');
  66. window.location.href = '';
  67. }
  68. });
  69. }
  70. };
  71. cdFolder = (FolderId, FolderName) => {
  72. console.log('正在进入' + FolderId);
  73. let params = {
  74. username: getCookie('username'),
  75. token: getCookie('token'),
  76. folder_id: FolderId,
  77. };
  78. apiFolderList(params).then((res) => {
  79. let addressList = this.state.addressList;
  80. let temp = -1;
  81. for (let i = 0; i < addressList.length; i++) {
  82. if (addressList[i].id === FolderId) {
  83. temp = i;
  84. break;
  85. }
  86. }
  87. if (temp === -1) {
  88. addressList.push({
  89. name: FolderName,
  90. id: FolderId,
  91. });
  92. } else {
  93. addressList.splice(temp + 1, addressList.length - temp - 1);
  94. }
  95. if (res.data.code === 200) {
  96. this.setState({
  97. currentId: FolderId,
  98. data: res.data.children,
  99. // addressList: [...this.state.addressList, {
  100. // name: FolderName,
  101. // id: FolderId
  102. // }]
  103. addressList: addressList,
  104. });
  105. let haveFileTemp = false;
  106. let haveFolderTemp = false;
  107. res.data.children.forEach((ele) => {
  108. if (ele.type === 'file') {
  109. haveFileTemp = true;
  110. }
  111. if (ele.type === 'folder') {
  112. haveFolderTemp = true;
  113. }
  114. });
  115. this.setState({
  116. haveFile: haveFileTemp,
  117. haveFolder: haveFolderTemp,
  118. });
  119. } else if (res.data.code === 401) {
  120. message.error('未登录');
  121. // window.location.href = "";
  122. } else {
  123. message.error('错误');
  124. // window.location.href = "";
  125. }
  126. });
  127. };
  128. componentWillMount() {
  129. this.getRootFolderIdAndInter();
  130. }
  131. componentDidMount() {}
  132. setSize = (size) => {
  133. this.setState({
  134. size: size,
  135. });
  136. };
  137. renderBread(addressList) {
  138. return addressList.map((ele, index) => {
  139. return this.props.type === 'team' ? (
  140. <Tooltip title={'Current Group ID : ' + this.props.group_id}>
  141. <Breadcrumb.Item key={ele.name} className="breadcrumb-line" onClick={(ev) => this.cdFolder(ele.id, ele.name)}>
  142. <a>{ele.name}</a>
  143. </Breadcrumb.Item>
  144. </Tooltip>
  145. ) : (
  146. <Breadcrumb.Item key={ele.name} className="breadcrumb-line" onClick={(ev) => this.cdFolder(ele.id, ele.name)}>
  147. <a>{ele.name}</a>
  148. </Breadcrumb.Item>
  149. );
  150. });
  151. }
  152. getGroupList = () => {
  153. if (this.props.getGroupList) {
  154. this.props.getGroupList();
  155. }
  156. };
  157. render() {
  158. return (
  159. <div>
  160. <div className={'disk-header'}>
  161. <Breadcrumb.Item key={'root'} className="breadcrumb-line"></Breadcrumb.Item>
  162. {this.renderBread(this.state.addressList)}
  163. {
  164. <div className={'group-modal'}>
  165. <GroupModal group_id={this.props.group_id} getGroupList={this.getGroupList.bind(this)} />
  166. </div>
  167. }
  168. </div>
  169. <div className="site-layout-background" style={{ marginTop: 10, padding: 24, minHeight: '82vh' }}>
  170. <div>
  171. <Slider value={this.state.size} onChange={(value) => this.setSize(value)} className={'disk-slider'} />
  172. <AddFolderModal actionName={'Add Folder'} fatherFolderId={this.state.currentId} cdFolder={this.cdFolder.bind(this)} className={'add-folder-button'} />
  173. <UploadFileModal actionName={'Upload File'} fatherFolderId={this.state.currentId} cdFolder={this.cdFolder.bind(this)} className={'upload-file-button'} />
  174. </div>
  175. <div className={'folder-page'}>
  176. <Space className={'disk-content'} size={this.state.size} wrap>
  177. {this.state.data.length === 0 ? (
  178. <div className={'no-files-div'}>
  179. <CopyTwoTone />
  180. &nbsp;&nbsp;NO&nbsp;&nbsp;FILES
  181. </div>
  182. ) : this.state.haveFolder ? (
  183. this.renderFolderList(this.state.data)
  184. ) : null}
  185. {this.state.data.length === 0 ? null : this.state.haveFile ? this.renderFileList(this.state.data) : null}
  186. </Space>
  187. </div>
  188. </div>
  189. </div>
  190. );
  191. }
  192. renderFolderList(dataList) {
  193. return dataList.map((ele, index) => {
  194. return ele.type === 'folder' ? (
  195. <div key={ele.folder_id + ele.folder_name + 'folder'}>
  196. <Folder ele={ele} cdFolder={this.cdFolder.bind(this)} fatherFolderId={this.state.currentId} />
  197. </div>
  198. ) : null;
  199. });
  200. }
  201. renderFileList(dataList) {
  202. return dataList.map((ele, index) => {
  203. return ele.type === 'folder' ? null : (
  204. <div key={ele.file_id + ele.file_name + 'file'}>
  205. <File ele={ele} fatherFolderId={this.state.currentId} cdFolder={this.cdFolder.bind(this)} />
  206. </div>
  207. );
  208. });
  209. }
  210. }
  211. export default DiskPage;