import React from 'react' import { connect } from 'dva' import { Button, Col, Form, Input, message, Row, Select, Tabs, Tree,Spin } from 'antd' import styles from './roleEditPage.css' import { extend, extendRule, getOnlyPropertyData, initFilter } from "../../../utils/common" import { cloneDeep } from 'lodash' const FormItem = Form.Item const Option = Select.Option const { TextArea } = Input const TabPane = Tabs.TabPane class RoleEditPage extends React.Component { constructor (props) { super(props) this.state = { data: {}, btns: [], permissionData: [], permissionTotalCount: 0, workstageData: {}, panelData: {}, menuSelectedRowKeys: [], menuLoadParam: { "RuleCount": 0, "IncludeCount": 0, "OrderCount": 0, "PageIndex": 1, "Limit": 10, "Start": 0, OrgId: this.props.login.OrgId, Sort: 'CODE', Order: '1', FilterGroupCount: 0, }, workstageLoadParam: { "RuleCount": 0, "IncludeCount": 0, "OrderCount": 0, "PageIndex": 1, "Limit": 10, "Start": 0, OrgId: this.props.login.OrgId, Sort: 'CREATE_TIME', Order: '1', FilterGroupCount: 0, }, panelLoadParam: { "RuleCount": 0, "IncludeCount": 0, "OrderCount": 0, "PageIndex": 1, "Limit": 10, "Start": 0, OrgId: this.props.login.OrgId, Sort: 'CREATE_TIME', Order: '1', FilterGroupCount: 0, }, checked: true, menuSearch: {}, workstageSearch: {}, departmentTreeData: [], departmentCheckedKeys: [], panes: [] } this.checkedNode = [] this.serverLoadedRows = [] this.selectTab = '' } componentDidMount () { //this.props.form.resetFields() this.loadData() } componentWillReceiveProps (NextProps, NextContent) { const { data } = this.props let { id } = data ? data : {} if (!id) { id = '' } if (NextProps.custom['roleEditClick' + id]) { this.props.form.resetFields() this.loadData() this.props.dispatch({ type: 'custom/save', payload: { ['roleEditClick' + id]: false }, }) } } loadData = () => { const { data, formId } = this.props const { id } = data ? data : {} if (id) { const userGroupJson = initFilter(this.props.login.OrgId) extendRule(userGroupJson, 'ID', 1, id) // extendInclude(userGroupJson, 'Nav_Workstages'); this.props.dispatch({ type: 'FMRoleEdit/getRole', payload: userGroupJson, onComplete: (ret) => { if (ret) { this.setState({ data: ret, menuLoadParam: { ...this.state.menuLoadParam, ...{ PageIndex: 1, Start: 0 } } }, () => { this.loadPermissionData() this.LoadDepartment() //this.loadWorkstage(); //this.loadPanel(); }) } } }) } else { this.setState({ data: { ...this.state.data, ORG_ID: this.props.login.OrgId, PLATFORM_TYPE: 0, menuLoadParam: { ...this.state.menuLoadParam, ...{ PageIndex: 1, Start: 0 } } } }, () => { this.loadPermissionData() this.LoadDepartment() // this.loadWorkstage(); //this.loadPanel(); const { form, } = this.props const { setFieldsValue } = form if (this.props.login.OrgCode) { setFieldsValue({ CODE: (this.props.login.OrgCode), }) } }) } if (formId) { const btnJson = initFilter(this.props.login.OrgId, '', 'NUM', 0) extendRule(btnJson, 'PAGE_CUSTOM_FORM_ID', 1, formId) this.props.dispatch({ type: 'FMRoleEdit/getBtnList', payload: btnJson, onComplete: (ret) => { if (ret) { this.setState({ btns: ret, }) } } }) } } getBtns = () => { if (this.state.btns) { return this.state.btns.map(item => { if (item.BTN_TYPE === 1) { return ( ) } return null }) } } handleOk = () => { const { form, dispatch } = this.props const { validateFieldsAndScroll } = form validateFieldsAndScroll((errors, values) => { if (errors) return extend(this.state.data, values) const menuSelectedRowKeys = this.state.menuSelectedRowKeys || [] let updateData = getOnlyPropertyData(this.state.data) let permissions = [] const workstages = [] const panels = [] this.serverLoadedRows.forEach(item => { item.Permission.IS_PERMISSION = false menuSelectedRowKeys.forEach(key => { key === item.ID && (item.Permission.IS_PERMISSION = true) }) item.Permission.Nav_PermissionBtns = [] item.Permission.Nav_PermissionColumns = [] item.Nav_Btns && item.Nav_Btns.forEach(btn => { btn.IsCheck && item.Permission.Nav_PermissionBtns.push(btn.Btn) }) item.Nav_Columns && item.Nav_Columns.forEach(col => { col.IsCheck && item.Permission.Nav_PermissionColumns.push(col.Column) }) permissions.push(item.Permission) }) if (this.state.workstageData && this.state.workstageData.Data) { this.state.workstageData.Data.forEach(t => { let isSelect = false if (this.state.workstageSelectedRowKeys && this.state.workstageSelectedRowKeys.length) { this.state.workstageSelectedRowKeys.forEach(t2 => { if (t.ID === t2) { isSelect = true } }) } let isGet = false if (this.state.data.Nav_Workstages && this.state.data.Nav_Workstages.length) { this.state.data.Nav_Workstages.forEach(t1 => { if (t1.WORKSTAGE_ID === t.ID) { t1.IS_PERMISSION = isSelect workstages.push(t1) isGet = true } }) } if (isSelect && !isGet) { workstages.push({ WORKSTAGE_ID: t.ID, ORG_ID: this.props.login.OrgId, IS_PERMISSION: true }) } }) } if (this.state.panelData && this.state.panelData.Data) { this.state.panelData.Data.forEach(t => { let isSelect = false if (this.state.panelSelectedRowKeys && this.state.panelSelectedRowKeys.length) { this.state.panelSelectedRowKeys.forEach(t2 => { if (t.ID === t2) { isSelect = true } }) } if (!isSelect) { return } let isGet = false if (this.state.data.Nav_Panels && this.state.data.Nav_Panels.length) { this.state.data.Nav_Panels.forEach(t1 => { if (t1.PANEL_ID === t.ID) { panels.push(t1) isGet = true } }) } if (isSelect && !isGet) { panels.push({ PANEL_ID: t.ID, ORG_ID: this.props.login.OrgId }) } }) } //updateData['Nav_MenuPermissions'] = permissions //updateData['Nav_Workstages'] = workstages //updateData['Nav_Panels'] = panels updateData['CheckKeys'] = this.checkedNode updateData['DepartmentCheckedKeys'] = this.state.panes dispatch({ type: 'FMRoleEdit/updateRole', payload: updateData, //payload:checkedNode, onComplete: (ret) => { ret && message.success('执行成功') } }) }) } workstageChangeTable = (pagination, filters, sorter) => { const { current, pageSize } = pagination let newParams = { ...this.state.workstageLoadParam, OrgId: this.props.login.OrgId, PageIndex: current, Limit: pageSize, Sort: sorter.field || 'CREATE_TIME', Order: sorter.order === "descend" ? '0' : '1', Start: (current - 1) * pageSize } this.doLoadWorkstage(newParams) this.setState({ workstageLoadParam: { ...this.state.workstageLoadParam, ...newParams } }) } doLoadWorkstage = (param) => { const { dispatch } = this.props const newParam = JSON.parse(JSON.stringify(param)) // {...param}; newParam.OrgType = 1 newParam.OrgId = this.state.data && this.state.data.ORG_ID ? this.state.data.ORG_ID : this.props.login.OrgId extendRule(newParam, 'ENABLE_STATUS', 1, 0) if (this.state.workstageSearch.CODE) { extendRule(newParam, 'CODE', 9, this.state.workstageSearch.CODE) } if (this.state.workstageSearch.NAME) { extendRule(newParam, 'NAME', 9, this.state.workstageSearch.NAME) } if (this.state.workstageSearch.TYPE != null) { extendRule(newParam, 'TYPE', 1, this.state.workstageSearch.TYPE) } dispatch({ type: 'FMRoleEdit/getWorkstages', payload: newParam, onComplete: (ret) => { this.setState({ workstageData: ret, }) } }) } loadWorkstage = () => { const workstageSelectedRowKeys = [] if (this.state.data && this.state.data.Nav_Workstages && this.state.data.Nav_Workstages.length) { this.state.data.Nav_Workstages.forEach(n => { if (n.IS_PERMISSION) { workstageSelectedRowKeys.push(n.WORKSTAGE_ID) } }) } this.setState({ workstageSelectedRowKeys, }) this.doLoadWorkstage(this.state.workstageLoadParam) } panelChangeTable = (pagination, filters, sorter) => { const { current, pageSize } = pagination let newParams = { ...this.state.panelLoadParam, OrgId: this.props.login.OrgId, PageIndex: current, Limit: pageSize, Sort: sorter.field || 'CREATE_TIME', Order: sorter.order === "descend" ? '0' : '1', Start: (current - 1) * pageSize } this.doLoadPanel(newParams) this.setState({ panelLoadParam: { ...this.state.panelLoadParam, ...newParams } }) } doLoadPanel = (param) => { const { dispatch } = this.props const newParam = { ...param } extendRule(newParam, 'ENABLE_STATUS', 1, 0) newParam.OrgType = 1 newParam.OrgId = this.state.data && this.state.data.ORG_ID ? this.state.data.ORG_ID : this.props.login.OrgId dispatch({ type: 'FMRoleEdit/getPanels', payload: newParam, onComplete: (ret) => { this.setState({ panelData: ret, }) } }) } LoadDepartment = () => { const json = { OrgId: this.props.login.OrgId, Keyword: this.state.data.ID, IgnoreOrgRule: true } this.props.dispatch({ type: 'app/getDataByPost', url: 'FM/Role/GetTreeDepartment', payload: json, onlyData: false, onComplete: (re) => { if (re && re.IsSuccessful && re.Data && re.Data) { this.setState({ panes: re.Data }) } } }) } loadPanel = () => { const panelSelectedRowKeys = [] if (this.state.data && this.state.data.Nav_Panels && this.state.data.Nav_Panels.length) { this.state.data.Nav_Panels.forEach(n => { panelSelectedRowKeys.push(n.PANEL_ID) }) } this.setState({ panelSelectedRowKeys, }) this.doLoadPanel(this.state.panelLoadParam) } menuChangeTable = (pagination, filters, sorter) => { const { current, pageSize } = pagination let newParams = { ...this.state.menuLoadParam, OrgId: this.props.login.OrgId, PageIndex: current, Limit: pageSize, Sort: sorter.field || 'CODE', Order: sorter.order === "descend" ? '0' : '1', Start: (current - 1) * pageSize } this.doLoadPermissionData(newParams) this.setState({ menuLoadParam: { ...this.state.menuLoadParam, ...newParams } }) } loadPermissionData = () => { this.doLoadPermissionData(this.state.menuLoadParam) } doLoadPermissionData = (param) => { const { form, dispatch } = this.props const { getFieldValue } = form const newParam = { ...param } extendRule(newParam, 'PLATFORM_TYPE', 1, getFieldValue('PLATFORM_TYPE')) extendRule(newParam, 'ENABLE_STATUS', 1, 0) if (this.state.menuSearch.CODE) { extendRule(newParam, 'CODE', 9, this.state.menuSearch.CODE) } if (this.state.menuSearch.NAME) { extendRule(newParam, 'NAME', 9, this.state.menuSearch.NAME) } if (this.state.menuSearch.MODULE_TYPE != null) { extendRule(newParam, 'MODULE_TYPE', 1, this.state.menuSearch.MODULE_TYPE) } newParam.Keyword = this.state.data.ID newParam.OrgType = 1 newParam.OrgId = this.state.data && this.state.data.ORG_ID ? this.state.data.ORG_ID : this.props.login.OrgId dispatch({ type: 'FMRoleEdit/getPermissionForms', payload: newParam, onComplete: (ret) => { if (ret == null) return const { Forms = [], TotalCount = 0 } = ret || {} const currSelectedKeys = cloneDeep(this.state.menuSelectedRowKeys) const serverLoadedRowKeys = this.serverLoadedRows.map(slr => slr.ID) const permissionData = [] Forms.forEach(tableRow => { const { ID, IsCheck } = tableRow if (IsCheck) { const findIndex = serverLoadedRowKeys.indexOf(ID) if (findIndex !== -1) { this.serverLoadedRows[findIndex].IsCheck && currSelectedKeys.indexOf(ID) === -1 && currSelectedKeys.push(ID) } else { currSelectedKeys.push(ID) } } serverLoadedRowKeys.indexOf(ID) === -1 && this.serverLoadedRows.push(tableRow) permissionData.push(ID) }) this.checkedNode = ret.checks this.setState({ permissionData, permissionTotalCount: TotalCount, menuSelectedRowKeys: currSelectedKeys, treeDatas: ret.rolePermissionTreeModels, checkedKeys: ret.checkLastKey }) } }) } loadPermissionData = () => { this.doLoadPermissionData(this.state.menuLoadParam) } // 选择复选框触发函数 onCheckTree = (checkedKeys, checkedNodes) => { let checkednode = [...checkedKeys, ...checkedNodes.halfCheckedKeys] this.checkedNode = checkednode this.setState({ checkedKeys }) } onLoad = (loadedKeys, { event, node }) => { } onMenuSelectChange = (selectedRowKeys, selectedRows) => { // 选择菜单行 const selectedIds = (selectedRows || []).map(row => row.ID) const { permissionData } = this.state this.serverLoadedRows.forEach(tableRow => { // 对当前table页行数据进行是否选中标记 if (permissionData.indexOf(tableRow.ID) !== -1) { tableRow.IsCheck = selectedIds.indexOf(tableRow.ID) !== -1 // 表单列权限勾选与取消 tableRow.Nav_Columns && tableRow.Nav_Columns.forEach(nc => { nc.IsCheck = tableRow.IsCheck }) // 表单按钮权限勾选与取消 tableRow.Nav_Btns && tableRow.Nav_Btns.forEach(nb => { nb.IsCheck = tableRow.IsCheck }) } }) this.setState({ menuSelectedRowKeys: selectedRowKeys }) } onWorkstageSelectChange = (selectedRowKeys) => { // 选择工作中心 this.setState({ workstageSelectedRowKeys: selectedRowKeys }) } onPanelSelectChange = (selectedRowKeys) => { // 选择表格行 this.setState({ panelSelectedRowKeys: selectedRowKeys }) } onTabClick = (checkedKeys) => { this.selectTab = checkedKeys } onCheckDepartmentTree = (checkedKeys, pane) => { pane.departmentCheckedKeys = checkedKeys this.forceUpdate() } render () { const {loading} = this.props; const { checkedKeys, treeDatas, menuLoadParam, panes, } = this.state const { getFieldDecorator } = this.props.form const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } } return (
{ getFieldDecorator('NAME', { validateTrigger: 'onBlur', initialValue: this.state.data.NAME, rules: [{ required: true, message: '请输入角色名称' }], })() } { getFieldDecorator('CODE', { validateTrigger: 'onBlur', initialValue: this.state.data.CODE, rules: [{ required: true, message: '请输入角色编码' }], })() } { getFieldDecorator('PLATFORM_TYPE', { validateTrigger: 'onBlur', initialValue: (this.state.data.PLATFORM_TYPE ? this.state.data.PLATFORM_TYPE.toString() : '0'), })( ) } { getFieldDecorator('ROLE_TYPE', { validateTrigger: 'onBlur', initialValue: (this.state.data.ROLE_TYPE ? this.state.data.ROLE_TYPE.toString() : '0') })( ) } { getFieldDecorator('ENABLE_STATUS', { validateTrigger: 'onBlur', initialValue: this.state.data.ENABLE_STATUS ? this.state.data.ENABLE_STATUS.toString() : '0' })( ) } { getFieldDecorator('IS_CHECK_MESSAGE', { validateTrigger: 'onBlur', initialValue: (this.state.data.IS_CHECK_MESSAGE ? this.state.data.IS_CHECK_MESSAGE.toString() : 'false'), })( ) } { getFieldDecorator('REMARK', { initialValue: this.state.data.REMARK, })(