import React, {Component} from 'react'
|
|
class Documents extends Component {
|
state = {
|
selectKey: [],
|
actFolder: null
|
}
|
|
UNSAFE_componentWillMount() {
|
const { documents } = this.props
|
|
let actFolder = documents[0] || null
|
|
this.setState({selectKey: [], actFolder: actFolder})
|
}
|
|
submit = () => {
|
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 = (id) => {
|
const { documents } = this.props
|
const { actFolder } = this.state
|
|
if (!actFolder || actFolder.id === id) return
|
|
let _actFolder = null
|
documents.forEach(item => {
|
if (item.id === id) {
|
_actFolder = item
|
}
|
})
|
|
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 { documents } = this.props
|
const { selectKey, actFolder } = this.state
|
|
let checkAll = ''
|
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-wrap">
|
<div className="document-title">
|
<div className="folder-box">文件夹</div>
|
<div className="folder">
|
<span onClick={this.checkAllItem} className={'square-select' + checkAll}></span>
|
<span>文件</span>
|
</div>
|
</div>
|
<div className="document-body">
|
<div className="doc-name">
|
{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">
|
{actFolder && actFolder.attachments.map(doc => {
|
return <div className="file-item" key={doc.id}>
|
<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>
|
})}
|
</div>
|
</div>
|
</div>
|
)
|
}
|
}
|
|
export default Documents
|