import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { is, fromJS } from 'immutable'
|
import { Affix, Dropdown } from 'antd'
|
import { DownOutlined } from '@ant-design/icons'
|
|
import asyncComponent from './asyncButtonComponent'
|
import './index.scss'
|
|
const NormalButton = asyncComponent(() => import('./normalbutton'))
|
const ExcelInButton = asyncComponent(() => import('./excelInbutton'))
|
const ExcelOutButton = asyncComponent(() => import('./exceloutbutton'))
|
const PopupButton = asyncComponent(() => import('./popupbutton'))
|
const TabButton = asyncComponent(() => import('./tabbutton'))
|
const NewPageButton = asyncComponent(() => import('./newpagebutton'))
|
const ChangeUserButton = asyncComponent(() => import('./changeuserbutton'))
|
const PrintButton = asyncComponent(() => import('./printbutton'))
|
const FuncMegvii = asyncComponent(() => import('./funcMegvii'))
|
const FuncZip = asyncComponent(() => import('./funczip'))
|
const EditLine = asyncComponent(() => import('./editLine'))
|
|
class ActionList extends Component {
|
static propTpyes = {
|
BID: PropTypes.any, // 主表ID
|
BData: PropTypes.any, // 主表数据
|
selectedData: PropTypes.any, // 子表中选择数据
|
MenuID: PropTypes.string, // 菜单ID
|
actions: PropTypes.array, // 按钮组
|
columns: PropTypes.array, // 显示列
|
setting: PropTypes.any, // 页面通用设置
|
}
|
|
state = {
|
actions: [],
|
mores: null
|
}
|
|
UNSAFE_componentWillMount() {
|
const { setting, actions } = this.props
|
|
if (!setting.btnlimit || setting.btnlimit >= actions.length) {
|
this.setState({actions: actions})
|
} else {
|
let mores = fromJS(actions).toJS()
|
|
this.setState({
|
actions: mores.splice(0, setting.btnlimit),
|
mores
|
})
|
}
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
getButtonList = (actions) => {
|
const { BID, BData, MenuID, columns, setting, selectedData } = this.props
|
return actions.map(item => {
|
if (['exec', 'prompt', 'pop'].includes(item.OpenType)) {
|
return (
|
<NormalButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
BData={BData}
|
setting={setting}
|
columns={columns}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.OpenType === 'excelIn') {
|
return (
|
<ExcelInButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
BData={BData}
|
setting={setting}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.OpenType === 'excelOut') {
|
return (
|
<ExcelOutButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
BData={BData}
|
setting={setting}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.OpenType === 'popview') {
|
return (
|
<PopupButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
BData={BData}
|
setting={setting}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.OpenType === 'tab') {
|
return (
|
<TabButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
btn={item}
|
BID={BID}
|
BData={BData}
|
MenuID={MenuID}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.OpenType === 'innerpage' || item.OpenType === 'outerpage') {
|
return (
|
<NewPageButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
btn={item}
|
BData={BData}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.OpenType === 'funcbutton') {
|
if (item.funcType === 'changeuser' || item.funcType === 'closetab') {
|
return (
|
<ChangeUserButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
BData={BData}
|
MenuID={MenuID}
|
setting={setting}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.funcType === 'print') {
|
return (
|
<PrintButton
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
BData={BData}
|
setting={setting}
|
columns={columns}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.funcType === 'megvii') {
|
return (
|
<FuncMegvii
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
setting={setting}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.funcType === 'filezip') {
|
return (
|
<FuncZip
|
key={item.uuid}
|
show={item.show || 'actionList'}
|
disabled={false}
|
BID={BID}
|
btn={item}
|
setting={setting}
|
selectedData={selectedData}
|
/>
|
)
|
} else if (item.funcType === 'addline' || item.funcType === 'delline') {
|
return (
|
<EditLine
|
key={item.uuid}
|
disabled={false}
|
btn={item}
|
selectedData={selectedData}
|
/>
|
)
|
}
|
}
|
return null
|
})
|
}
|
|
render() {
|
const { setting } = this.props
|
const { actions, mores } = this.state
|
|
if (setting.actionfixed === 'true') {
|
return (
|
<Affix offsetTop={48}>
|
<div className="button-list toolbar-button">
|
{this.getButtonList(actions)}
|
{mores ? <Dropdown overlay={<div className="mk-button-dropdown-wrap">{this.getButtonList(mores)}</div>} trigger={['hover']}>
|
<div className="mk-button-more">更多<DownOutlined/></div>
|
</Dropdown> : null}
|
</div>
|
</Affix>
|
)
|
} else {
|
return (
|
<div className="button-list toolbar-button">
|
{this.getButtonList(actions)}
|
{mores ? <Dropdown overlay={<div className="mk-button-dropdown-wrap">{this.getButtonList(mores)}</div>} trigger={['hover']}>
|
<div className="mk-button-more">更多<DownOutlined/></div>
|
</Dropdown> : null}
|
</div>
|
)
|
}
|
}
|
}
|
|
export default ActionList
|