import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { is, fromJS } from 'immutable'
|
import { Table, Button, Modal, Icon } from 'antd'
|
|
import MenuForm from '../menuform'
|
import Utils from '@/utils/utils.js'
|
// import MKEmitter from '@/utils/events.js'
|
import './index.scss'
|
|
const { confirm } = Modal
|
|
class MenuTable extends Component {
|
static propTpyes = {
|
menus: PropTypes.array, // 卡片行信息
|
cols: PropTypes.array, // 字段集
|
}
|
|
state = {
|
data: [],
|
editMenu: null,
|
columns: [
|
{ title: '菜单名称', dataIndex: 'name', key: 'name' },
|
{ title: '菜单参数', dataIndex: 'MenuNo', key: 'MenuNo' },
|
{ title: '菜单属性', dataIndex: 'property', key: 'property', render: text => {
|
const trans = {menu: '菜单', link: '链接', linkmenu: '关联菜单'}
|
|
return trans[text]
|
}},
|
{ title: '图标', dataIndex: 'icon', key: 'icon', render: (text, record) => {
|
return text ? <Icon type={text} /> : ''
|
}},
|
{ title: '是否隐藏', dataIndex: 'hidden', key: 'hidden', render: (text, record) => {
|
const trans = {'true': '是', 'false': '否'}
|
return trans[text] || '否'
|
}},
|
{ title: '操作', key: 'operation', align: 'center', width: '190px', render: (text, record) =>
|
(<div>
|
<Button type="link" style={{padding: '0 5px', marginRight: '5px'}} onClick={() => this.editMenu(record)}>编辑</Button>
|
<Button type="link" style={{color: '#ff4d4f', padding: '0 5px', marginRight: '5px'}} onClick={() => this.delMenu(record)}>删除</Button>
|
<Icon type="arrow-up" style={{color: '#26C281', cursor: 'pointer', padding: '0 5px', marginRight: '5px'}} onClick={() => this.moveUp(record)}/>
|
<Icon type="arrow-down" style={{color: '#ff4d4f', cursor: 'pointer', padding: '0 5px'}} onClick={() => this.moveDown(record)}/>
|
</div>)
|
}
|
]
|
}
|
|
UNSAFE_componentWillMount () {
|
const { menus } = this.props
|
|
this.setState({data: fromJS(menus).toJS()})
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
moveUp = (record) => {
|
let data = fromJS(this.state.data).toJS()
|
|
let dragIndex = data.findIndex(c => c.MenuID === record.MenuID)
|
let hoverIndex = dragIndex - 1
|
|
if (hoverIndex === -1) return
|
|
data.splice(hoverIndex, 0, ...data.splice(dragIndex, 1))
|
this.setState({data})
|
}
|
|
moveDown = (record) => {
|
let data = fromJS(this.state.data).toJS()
|
|
let dragIndex = data.findIndex(c => c.MenuID === record.MenuID)
|
let hoverIndex = dragIndex + 1
|
|
if (hoverIndex === data.length) return
|
|
data.splice(hoverIndex, 0, ...data.splice(dragIndex, 1))
|
this.setState({data})
|
}
|
|
delMenu = (record) => {
|
const { data } = this.state
|
const _this = this
|
|
confirm({
|
title: (record.property === 'classify' && record.sublist.length > 0 ? '菜单下含有子菜单,' : '') + '确定删除吗?',
|
content: '',
|
onOk() {
|
_this.setState({data: data.filter(item => item.MenuID !== record.MenuID)})
|
|
// let uuids = [record.MenuID]
|
// record.sublist && record.sublist.forEach(item => {
|
// uuids.push(item.MenuID)
|
|
// item.sublist && item.sublist.forEach(cell => {
|
// uuids.push(cell.MenuID)
|
// })
|
// })
|
// MKEmitter.emit('delButtons', uuids)
|
},
|
onCancel() {}
|
})
|
}
|
|
editMenu = (record) => {
|
this.setState({editMenu: record, visible: true})
|
}
|
|
plusMenu = () => {
|
let _menu = {
|
name: '菜单',
|
property: 'menu'
|
}
|
|
this.setState({editMenu: _menu, visible: true})
|
}
|
|
menuSubmit = () => {
|
const { editMenu, data } = this.state
|
|
this.menuRef.handleConfirm().then(res => {
|
let _menu = {...editMenu, ...res}
|
if (!_menu.MenuID) {
|
_menu.MenuID = Utils.getuuid()
|
this.setState({data: [...data, _menu], editMenu: null, visible: false})
|
} else {
|
this.setState({
|
editMenu: null,
|
visible: false,
|
data: data.map(item => {
|
if (item.MenuID === _menu.MenuID) {
|
return _menu
|
} else {
|
return item
|
}
|
})
|
})
|
}
|
})
|
}
|
|
menuUpdate = (res) => {
|
const { data } = this.state
|
|
this.setState({
|
data: data.map(item => {
|
if (item.MenuID === res.MenuID) {
|
return res
|
} else {
|
return item
|
}
|
})
|
})
|
}
|
|
render() {
|
const { cols } = this.props
|
const { columns, data, visible, editMenu } = this.state
|
|
return (
|
<div className="menu-control-wrap">
|
<Button className="menu-plus mk-green" onClick={this.plusMenu}>添加</Button>
|
<Table
|
rowKey="MenuID"
|
columns={columns}
|
dataSource={data}
|
pagination={false}
|
/>
|
<Modal
|
title="编辑"
|
visible={visible}
|
width={750}
|
maskClosable={false}
|
onOk={this.menuSubmit}
|
onCancel={() => { this.setState({ visible: false }) }}
|
destroyOnClose
|
>
|
<MenuForm
|
menu={editMenu}
|
cols={cols}
|
inputSubmit={this.menuSubmit}
|
wrappedComponentRef={(inst) => this.menuRef = inst}
|
/>
|
</Modal>
|
</div>
|
)
|
}
|
}
|
|
export default MenuTable
|