| | |
| | | |
| | | class Documents extends Component { |
| | | state = { |
| | | folders: [], |
| | | docs: [], |
| | | selectKey: [], |
| | | actFolder: '' |
| | | actFolder: null |
| | | } |
| | | |
| | | UNSAFE_componentWillMount() { |
| | | const { documents } = this.props |
| | | |
| | | let folders = [] |
| | | let actFolder = documents[0].folder |
| | | let docs = [] |
| | | documents.forEach(item => { |
| | | folders.push(item.folder) |
| | | if (item.folder === actFolder) { |
| | | docs.push(item) |
| | | } |
| | | }) |
| | | let actFolder = documents[0] || null |
| | | |
| | | this.setState({selectKey: [], folders: Array.from(new Set(folders)), actFolder: actFolder, docs}) |
| | | this.setState({selectKey: [], actFolder: actFolder}) |
| | | } |
| | | |
| | | submit = () => { |
| | | this.props.onChange() |
| | | const { selectKey, actFolder } = this.state |
| | | |
| | | let items = [] |
| | | |
| | | if (actFolder && selectKey.length > 0) { |
| | | actFolder.attachments.forEach(doc => { |
| | | if (selectKey.includes(doc.id)) { |
| | | items.push(doc) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | this.props.onChange(items) |
| | | } |
| | | |
| | | checkfolder = (val) => { |
| | | checkfolder = (id) => { |
| | | const { documents } = this.props |
| | | const { actFolder } = this.state |
| | | |
| | | if (actFolder === val) return |
| | | if (!actFolder || actFolder.id === id) return |
| | | |
| | | let docs = [] |
| | | let _actFolder = null |
| | | documents.forEach(item => { |
| | | if (item.folder === val) { |
| | | docs.push(item) |
| | | if (item.id === id) { |
| | | _actFolder = item |
| | | } |
| | | }) |
| | | |
| | | this.setState({actFolder: val, selectKey: [], docs}) |
| | | this.setState({actFolder: _actFolder, selectKey: []}, () => { |
| | | this.submit() |
| | | }) |
| | | } |
| | | |
| | | checkItem = (id) => { |
| | | const { selectKey } = this.state |
| | | |
| | | if (selectKey.includes(id)) { |
| | | this.setState({selectKey: selectKey.filter(key => key !== id)}, () => { |
| | | this.submit() |
| | | }) |
| | | } else { |
| | | this.setState({selectKey: [...selectKey, id]}, () => { |
| | | this.submit() |
| | | }) |
| | | } |
| | | } |
| | | |
| | | checkAllItem = () => { |
| | | const { selectKey, actFolder } = this.state |
| | | |
| | | if (!actFolder || actFolder.attachments.length === 0) return |
| | | |
| | | if (selectKey.length === actFolder.attachments.length) { |
| | | this.setState({selectKey: []}, () => { |
| | | this.submit() |
| | | }) |
| | | } else { |
| | | this.setState({selectKey: actFolder.attachments.map(item => item.id)}, () => { |
| | | this.submit() |
| | | }) |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { folders, docs, selectKey, actFolder } = this.state |
| | | const { documents } = this.props |
| | | const { selectKey, actFolder } = this.state |
| | | |
| | | let checkAll = '' |
| | | if (selectKey.length > 0) { |
| | | checkAll = selectKey.length < docs.length ? ' half' : ' active' |
| | | if (actFolder && selectKey.length > 0) { |
| | | checkAll = selectKey.length < actFolder.attachments.length ? ' half' : ' active' |
| | | } else if (!actFolder || actFolder.attachments.length === 0) { |
| | | checkAll = ' disabled' |
| | | } |
| | | |
| | | return ( |
| | |
| | | <div className="document-title"> |
| | | <div className="folder-box">文件夹</div> |
| | | <div className="folder"> |
| | | <span className={'square-select' + checkAll}></span> |
| | | <span onClick={this.checkAllItem} className={'square-select' + checkAll}></span> |
| | | <span>文件</span> |
| | | </div> |
| | | </div> |
| | | <div className="document-body"> |
| | | <div className="doc-name"> |
| | | {folders.map(folder => (<div className={actFolder === folder ? 'active' : ''} onClick={() => this.checkfolder(folder)} key={folder}>{folder}</div>))} |
| | | {documents.map(folder => (<div className={actFolder.id === folder.id ? 'active' : ''} onClick={() => this.checkfolder(folder.id)} key={folder.id}>{folder.data_name}</div>))} |
| | | </div> |
| | | <div className="file-wrap"> |
| | | {docs.map(doc => { |
| | | {actFolder && actFolder.attachments.map(doc => { |
| | | return <div className="file-item" key={doc.id}> |
| | | <span className={'square-select' + (selectKey.indexOf(doc.id) > -1 ? ' active' : '')}></span> |
| | | <span onClick={() => this.checkItem(doc.id)} className={'square-select' + (selectKey.indexOf(doc.id) > -1 ? ' active' : '')}></span> |
| | | <img src={doc.icon} alt=""/> |
| | | <span className="file-name">{doc.attachments_title}</span> |
| | | </div> |