index.js 4.34 KB
import React from 'react'
import UserManageBar from '@components/Common/WhiteBar/index'
import { Form, Button, Input, Tree, message,  Radio  } from 'antd'
import './index.less'
import Utils from '@src/utils/utils'
const FormItem = Form.Item;
const TreeNode = Tree.TreeNode
//创建所属菜单树
class MenuOptionsForm extends React.Component {
  state = {}
  componentDidMount () {
    this.props.onRef(this);
  }
  //查询菜单列表
  queryList = () => {
    let data = this.props.form.getFieldsValue();
    if(!data.moduleName || !data.moduleName.replace(/\s+/g,"")){

      message.warn('请输入菜单名')
      return
    }
    this.props.getMenuByName(data.moduleName.replace(/\s+/g,""))
    this.setState({
      checkedKeys: [],
      checkedObj:[]
    })
  }

  //重置
  reset = () => {
    this.props.getMenuTreeList()
    this.props.form.resetFields()
    this.setState({
      checkedKeys: [],
      checked:[]
    })
  }

  //递归获取树形机构图
  renderTreeNodes = (data) => {
    const checkedObj = this.props.checkedObj
    const parentCheckedObj = this.props.parentCheckedObj
    return data.map(item => {
      if (item.modules && item.modules.length > 0) {
        return <TreeNode icon={<Radio ref={item.name} disabled={parentCheckedObj== item.name ? true:false} checked={checkedObj.key == item.id} value={item.id} />} title={<span>{Utils.formatTableColumn(item.name)}
          <span className="orgGrade" >{item.creator}  </span>
          <span className="updateTime" >{Utils.formateDateToYMD(item.updateTime)}</span>
          <span className="remark" >{Utils.formatTableColumn(item.remark)}  </span>
        </span>} key={item.id}
          name={item.name}
        >

          {this.renderTreeNodes(item.modules)}
        </TreeNode>
      } else {
        return <TreeNode icon={<Radio ref={item.name} disabled={parentCheckedObj== item.name ? true:false}  checked={checkedObj.key == item.id} value={item.id} />} title={<span>{Utils.formatTableColumn(item.name)}
          <span className="orgGrade" >{item.creator}  </span>
          <span className="updateTime" >{Utils.formateDateToYMD(item.updateTime)}</span>
          <span className="remark" >{Utils.formatTableColumn(item.remark)}</span>
        </span>} key={item.id}
          name={item.name}
        >

        </TreeNode>
      }
    })
 
  } 

  //操作选中某一项
  onSelect = (checkedKeys, e) => {
    //console.log(e.node.props.name)
    const parentCheckedObj = this.props.parentCheckedObj
    if(parentCheckedObj !== e.node.props.name){
      if (checkedKeys && checkedKeys.length > 0) {
         console.log(checkedKeys);
        this.props.getCheckedObj({
            key: checkedKeys[0],
            val: e.node.props.name
        })
      }
    } 
  }
  //渲染弹窗页面
  render() {

    const { getFieldDecorator } = this.props.form;
    const menuOptionsArr = this.props.menuOptionsArr

    return (
      <div>
        <Form layout="inline" >
          <FormItem  >
            <label >菜单名称</label>
            {
              getFieldDecorator('moduleName', {
              })(
                <Input placeholder="菜单名称" />
              )
            }
          </FormItem>
          <FormItem style={{ marginTop: 38, }} >
            <Button onClick={(item) => { this.queryList(item) }} style={{ background: '#00BB29', color: "#fff", marginRight: 4 }} >查询</Button>
            <Button onClick={this.reset} style={{ background: '#ED1719', color: "#fff" }} type="danger">重置</Button>
          </FormItem>
        </Form>
        <UserManageBar title="菜单树形机构" />

        <div className="treeTable" >
          <div className="treeHeader">
            <div className="flex-item">菜单名称</div>
            <div className="flex-item">菜单级别</div>
            <div className="flex-item">更新时间</div>
            <div className="flex-item">备注</div>
          </div>
          {menuOptionsArr.length !==0 ? 
          <Tree
            showIcon
            defaultExpandAll
            className="orgTree"
            onSelect={(checkedKeys, e) => { this.onSelect(checkedKeys, e) }}
          >

            {this.renderTreeNodes(menuOptionsArr)}
          </Tree>
          : <div className="ant-table-placeholder">No data</div>
              }
        </div>
      </div>
    );
  }
}
MenuOptionsForm = Form.create({})(MenuOptionsForm)

export default MenuOptionsForm