|
|
@@ -11,17 +11,43 @@ class AccessObjectBox extends React.Component {
|
|
|
constructor(props) {
|
|
|
super(props);
|
|
|
this.state = {
|
|
|
- selectedGroups: props.group || [],
|
|
|
- selectedUsers: props.geren || []
|
|
|
+ selectedGroups: props.defaultSelectedGroups && props.defaultSelectedGroups.length >= 0 ? props.defaultSelectedGroups : [],
|
|
|
+ selectedUsers: props.defaultSelectedUsers && props.defaultSelectedUsers.length >= 0 ? props.defaultSelectedUsers : [],
|
|
|
+ columnWidth: 100,
|
|
|
+ boxHeight: 0,
|
|
|
+ tableHeaderHeight: 60,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
componentDidMount() {
|
|
|
const { dispatch } = this.props;
|
|
|
- dispatch({ type: 'userGroup/fetchList' });
|
|
|
- dispatch({ type: 'user/fetchList' });
|
|
|
+ new Promise(() => {
|
|
|
+ dispatch({ type: 'userGroup/fetchList' });
|
|
|
+ dispatch({ type: 'user/fetchList' }).then(() => {
|
|
|
+ window.setTimeout(() => {
|
|
|
+ var e = document.createEvent("Event");
|
|
|
+ e.initEvent("resize", true, true);
|
|
|
+ window.dispatchEvent(e);
|
|
|
+ }, 20);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ window.addEventListener('resize', this.onWindowResize);
|
|
|
}
|
|
|
|
|
|
+ componentWillUnmount() {
|
|
|
+ window.removeEventListener('resize', this.onWindowResize);
|
|
|
+ }
|
|
|
+
|
|
|
+ onWindowResize = () => {
|
|
|
+ const boxEl = document.getElementsByClassName('accessobject-box')[0].getElementsByClassName('ant-modal-content')[0];
|
|
|
+ const tableHeaderEl = boxEl.getElementsByTagName('thead')[0];
|
|
|
+
|
|
|
+ this.setState({
|
|
|
+ boxHeight: boxEl.offsetHeight,
|
|
|
+ tableHeaderHeight: tableHeaderEl.offsetHeight + 2, // 表头高度(含边框)
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
getAccessObject = () => {
|
|
|
const { okHandler, hideBox } = this.props;
|
|
|
const { selectedGroups, selectedUsers } = this.state;
|
|
|
@@ -30,18 +56,23 @@ class AccessObjectBox extends React.Component {
|
|
|
}
|
|
|
|
|
|
render() {
|
|
|
- const { visibleBox, hideBox, userGroup, user } = this.props;
|
|
|
- const { selectedGroups, selectedUsers } = this.state;
|
|
|
+ const { visibleBox, hideBox, userGroup, user, defaultSelectedGroups: _defaultSelectedGroups, defaultSelectedUsers: _defaultSelectedUsers } = this.props;
|
|
|
+ const { selectedGroups, selectedUsers, columnWidth, boxHeight } = this.state;
|
|
|
+
|
|
|
+ const defaultSelectedGroups = _defaultSelectedGroups && _defaultSelectedGroups.length >= 0 ? _defaultSelectedGroups : [];
|
|
|
+ const defaultSelectedUsers = _defaultSelectedUsers && _defaultSelectedUsers.length >= 0 ? _defaultSelectedUsers : [];
|
|
|
|
|
|
const reg = new RegExp('([+ \\- & | ! ( ) { } \\[ \\] ^ \" ~ * ? : ( ) \/])', 'g'); // 需要转义的字符
|
|
|
let filterLabel = (this.state.filterLabel || '').replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1'); // 添加转义符号
|
|
|
|
|
|
+ const tableBodyHeight = boxHeight - 50 - 45 - 37 - 53 - 2;
|
|
|
+
|
|
|
const userGroupColumns = [{
|
|
|
key: 'check',
|
|
|
title: '选择',
|
|
|
render: (v, r, i) => <Checkbox
|
|
|
dataKey={r.key}
|
|
|
- checked={!!selectedGroups.find(g => g.code === r.code)}
|
|
|
+ checked={!!defaultSelectedGroups.find(g => g.code === r.code) || !!selectedGroups.find(g => g.code === r.code)}
|
|
|
onChange={(e) => {
|
|
|
const target = e.target;
|
|
|
const checked = target.checked;
|
|
|
@@ -83,7 +114,7 @@ class AccessObjectBox extends React.Component {
|
|
|
title: '选择',
|
|
|
render: (v, r, i) => <Checkbox
|
|
|
dataKey={r.key}
|
|
|
- checked={!!selectedUsers.find(g => g.code === r.code)}
|
|
|
+ checked={!!defaultSelectedUsers.find(g => g.code === r.code) || !!selectedUsers.find(g => g.code === r.code)}
|
|
|
onChange={(e) => {
|
|
|
const target = e.target;
|
|
|
const checked = target.checked;
|
|
|
@@ -124,8 +155,8 @@ class AccessObjectBox extends React.Component {
|
|
|
return (
|
|
|
<Modal
|
|
|
className='accessobject-box'
|
|
|
- height='80%'
|
|
|
width='60%'
|
|
|
+ height='80%'
|
|
|
title={
|
|
|
<Row>
|
|
|
<Col span={14}>选择用户组或用户</Col>
|
|
|
@@ -152,9 +183,9 @@ class AccessObjectBox extends React.Component {
|
|
|
>
|
|
|
<TabPane tab="用户组" key="userGroup" >
|
|
|
<Table
|
|
|
- className='usergroup-table'
|
|
|
+ className='object-table usergroup-table'
|
|
|
columns={userGroupColumns.map(c => ({
|
|
|
- ...c, width: 100
|
|
|
+ ...c, width: columnWidth
|
|
|
}))}
|
|
|
dataSource={userGroup.list.filter(l => {
|
|
|
let reg = new RegExp('(' + filterLabel + '){1}', 'ig');
|
|
|
@@ -164,12 +195,40 @@ class AccessObjectBox extends React.Component {
|
|
|
key: i
|
|
|
}))}
|
|
|
size='small'
|
|
|
+ pagination={false}
|
|
|
+ scroll={{
|
|
|
+ x: userColumns.length * columnWidth,
|
|
|
+ y: tableBodyHeight
|
|
|
+ }}
|
|
|
+ onRow={(record) => {
|
|
|
+ return {
|
|
|
+ onClick: () => {
|
|
|
+ console.log(record);
|
|
|
+ const idx = selectedGroups.findIndex(i => i.code === record.code);
|
|
|
+ if(idx === -1) {
|
|
|
+ selectedGroups.push({
|
|
|
+ code: record.code,
|
|
|
+ name: record.name,
|
|
|
+ isGroup: true
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ selectedGroups.splice(idx, 1);
|
|
|
+ }
|
|
|
+ this.setState({
|
|
|
+ selectedGroups: selectedGroups
|
|
|
+ })
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }}
|
|
|
/>
|
|
|
</TabPane>
|
|
|
<TabPane tab="用户" key="user" >
|
|
|
<Table
|
|
|
- className='user-table'
|
|
|
- columns={userColumns}
|
|
|
+ className='object-table user-table'
|
|
|
+ columns={userColumns.map(c => ({
|
|
|
+ ...c,
|
|
|
+ width: columnWidth
|
|
|
+ }))}
|
|
|
dataSource={user.list.filter(l => {
|
|
|
let reg = new RegExp('(' + filterLabel + '){1}', 'ig');
|
|
|
return (l.fullName || '').search(reg) !== -1;
|
|
|
@@ -178,6 +237,30 @@ class AccessObjectBox extends React.Component {
|
|
|
key: i
|
|
|
}))}
|
|
|
size='small'
|
|
|
+ pagination={false}
|
|
|
+ scroll={{
|
|
|
+ x: userColumns.length * columnWidth,
|
|
|
+ y: tableBodyHeight
|
|
|
+ }}
|
|
|
+ onRow={(record) => {
|
|
|
+ return {
|
|
|
+ onClick: () => {
|
|
|
+ const idx = selectedUsers.findIndex(i => i.code === record.code);
|
|
|
+ if(idx === -1) {
|
|
|
+ selectedUsers.push({
|
|
|
+ code: record.code,
|
|
|
+ name: record.fullName,
|
|
|
+ isGroup: false
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ selectedUsers.splice(idx, 1);
|
|
|
+ }
|
|
|
+ this.setState({
|
|
|
+ selectedUsers: selectedUsers
|
|
|
+ })
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }}
|
|
|
/>
|
|
|
</TabPane>
|
|
|
</Tabs>
|