mirror of
https://github.com/haiwen/seahub.git
synced 2025-04-27 19:05:16 +00:00
12.0 department set quota (#7736)
* 01 system admin department set quota * 02 org admin department set quota
This commit is contained in:
parent
a1686622b3
commit
31e0b24e07
@ -9,7 +9,7 @@ import toaster from '../toast';
|
||||
|
||||
const propTypes = {
|
||||
toggle: PropTypes.func.isRequired,
|
||||
groupID: PropTypes.number.isRequired,
|
||||
group: PropTypes.object.isRequired,
|
||||
onSetQuota: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
@ -29,7 +29,7 @@ class SetGroupQuotaDialog extends React.Component {
|
||||
if ((quota.length && myReg.test(quota)) || quota == -2) {
|
||||
this.setState({ errMessage: '' });
|
||||
let newQuota = this.state.quota == -2 ? this.state.quota : this.state.quota * 1000000;
|
||||
orgAdminAPI.orgAdminSetGroupQuota(orgID, this.props.groupID, newQuota).then((res) => {
|
||||
orgAdminAPI.orgAdminSetGroupQuota(orgID, this.props.group.id, newQuota).then((res) => {
|
||||
this.props.toggle();
|
||||
this.props.onSetQuota(res.data);
|
||||
}).catch(error => {
|
||||
@ -55,10 +55,15 @@ class SetGroupQuotaDialog extends React.Component {
|
||||
};
|
||||
|
||||
render() {
|
||||
const group = this.props.group;
|
||||
const oldQuota = Utils.bytesToSize(group.quota);
|
||||
const message = gettext('The current quota for {group_name} is {quota}').replace('{group_name}', group.name).replace('{quota}', oldQuota);
|
||||
return (
|
||||
<Modal isOpen={true} toggle={this.props.toggle} autoFocus={false}>
|
||||
<SeahubModalHeader toggle={this.props.toggle}>{gettext('Set Quota')}</SeahubModalHeader>
|
||||
<ModalBody>
|
||||
<p>{message}</p>
|
||||
<p>{gettext('Please enter a new quota')}</p>
|
||||
<InputGroup>
|
||||
<Input
|
||||
onKeyDown={this.handleKeyDown}
|
||||
|
@ -9,7 +9,7 @@ import SeahubModalHeader from '@/components/common/seahub-modal-header';
|
||||
|
||||
const propTypes = {
|
||||
toggle: PropTypes.func.isRequired,
|
||||
groupID: PropTypes.number.isRequired,
|
||||
group: PropTypes.object.isRequired,
|
||||
onSetQuota: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
@ -29,7 +29,7 @@ class SetGroupQuotaDialog extends React.Component {
|
||||
if ((quota.length && numberReg.test(quota)) || quota == -2) {
|
||||
this.setState({ errMessage: '' });
|
||||
let newQuota = this.state.quota == -2 ? this.state.quota : this.state.quota * 1000000;
|
||||
systemAdminAPI.sysAdminUpdateDepartmentQuota(this.props.groupID, newQuota).then((res) => {
|
||||
systemAdminAPI.sysAdminUpdateDepartmentQuota(this.props.group.id, newQuota).then((res) => {
|
||||
this.props.toggle();
|
||||
this.props.onSetQuota(res.data);
|
||||
}).catch(error => {
|
||||
@ -55,10 +55,15 @@ class SetGroupQuotaDialog extends React.Component {
|
||||
};
|
||||
|
||||
render() {
|
||||
const group = this.props.group;
|
||||
const oldQuota = Utils.bytesToSize(group.quota);
|
||||
const message = gettext('The current quota for {group_name} is {quota}').replace('{group_name}', group.name).replace('{quota}', oldQuota);
|
||||
return (
|
||||
<Modal isOpen={true} toggle={this.props.toggle} autoFocus={false}>
|
||||
<SeahubModalHeader toggle={this.props.toggle}>{gettext('Set Quota')}</SeahubModalHeader>
|
||||
<ModalBody>
|
||||
<p>{message}</p>
|
||||
<p>{gettext('Please enter a new quota')}</p>
|
||||
<InputGroup>
|
||||
<Input
|
||||
onKeyDown={this.handleKeyDown}
|
||||
|
@ -6,6 +6,7 @@ class DepartmentNode {
|
||||
this.children = props.children || [];
|
||||
this.parentNode = props.parentNode || null;
|
||||
this.orgId = props.orgId || '';
|
||||
this.quota = props.quota || -2;
|
||||
}
|
||||
|
||||
findNodeById(nodeId) {
|
||||
|
@ -132,6 +132,7 @@ class Department extends React.Component {
|
||||
<DepartmentNodeMenu
|
||||
node={currentDepartment}
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleRename={this.props.toggleRename}
|
||||
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { DropdownItem, DropdownMenu } from 'reactstrap';
|
||||
import { gettext } from '../../../utils/constants';
|
||||
|
||||
function DepartmentNodeMenu({ node, toggleDelete, toggleRename, toggleAddMembers, toggleAddDepartment, toggleAddLibrary }) {
|
||||
function DepartmentNodeMenu({ node, toggleDelete, toggleRename, toggleAddMembers, toggleAddDepartment, toggleAddLibrary, toggleSetQuotaDialog }) {
|
||||
return (
|
||||
<DropdownMenu
|
||||
modifiers={{ preventOverflow: { boundariesElement: document.body } }}
|
||||
@ -24,6 +24,9 @@ function DepartmentNodeMenu({ node, toggleDelete, toggleRename, toggleAddMembers
|
||||
<DropdownItem key={`${node.id}-delete`} onClick={() => toggleDelete(node)}>
|
||||
{gettext('Delete')}
|
||||
</DropdownItem>
|
||||
<DropdownItem key={`${node.id}-set-quota`} onClick={() => toggleSetQuotaDialog(node)}>
|
||||
{gettext('Set quota')}
|
||||
</DropdownItem>
|
||||
<DropdownItem key={`${node.id}-id`} disabled={true}>
|
||||
{`${gettext('Department ID')} : ${node.id}`}
|
||||
</DropdownItem>
|
||||
@ -38,6 +41,7 @@ DepartmentNodeMenu.propTypes = {
|
||||
toggleAddMembers: PropTypes.func.isRequired,
|
||||
toggleAddDepartment: PropTypes.func.isRequired,
|
||||
toggleAddLibrary: PropTypes.func.isRequired,
|
||||
toggleSetQuotaDialog: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default DepartmentNodeMenu;
|
||||
|
@ -9,6 +9,7 @@ const DepartmentsTreePanelPropTypes = {
|
||||
onChangeDepartment: PropTypes.func,
|
||||
listSubDepartments: PropTypes.func,
|
||||
toggleAddDepartment: PropTypes.func,
|
||||
toggleSetQuotaDialog: PropTypes.func,
|
||||
toggleAddLibrary: PropTypes.func,
|
||||
toggleAddMembers: PropTypes.func,
|
||||
toggleRename: PropTypes.func,
|
||||
@ -29,6 +30,7 @@ class DepartmentsTreePanel extends Component {
|
||||
onChangeDepartment={this.props.onChangeDepartment}
|
||||
listSubDepartments={this.props.listSubDepartments}
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleRename={this.props.toggleRename}
|
||||
|
@ -4,6 +4,7 @@ import { Utils } from '../../../utils/utils';
|
||||
import { gettext, orgID } from '../../../utils/constants';
|
||||
import { orgAdminAPI } from '../../../utils/org-admin-api';
|
||||
import toaster from '../../../components/toast';
|
||||
import SetGroupQuotaDialog from '../../../components/dialog/org-set-group-quota-dialog';
|
||||
import AddDepartmentDialog from '../../../components/dialog/sysadmin-dialog/add-department-v2-dialog';
|
||||
import AddDepartMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-depart-member-v2-dialog';
|
||||
import RenameDepartmentDialog from '../../../components/dialog/sysadmin-dialog/rename-department-v2-dialog';
|
||||
@ -30,6 +31,7 @@ class Departments extends React.Component {
|
||||
isRenameDepartmentDialogShow: false,
|
||||
isDeleteDepartmentDialogShow: false,
|
||||
isShowAddRepoDialog: false,
|
||||
isSetQuotaDialogShow: false,
|
||||
membersList: [],
|
||||
isTopDepartmentLoading: false,
|
||||
isMembersListLoading: false,
|
||||
@ -48,6 +50,7 @@ class Departments extends React.Component {
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
orgId: item.org_id,
|
||||
quota: item.quota,
|
||||
});
|
||||
return node;
|
||||
});
|
||||
@ -102,6 +105,7 @@ class Departments extends React.Component {
|
||||
parentGroupId: department.parent_group_id,
|
||||
orgId: department.org_id,
|
||||
parentNode: node,
|
||||
quota: department.quota,
|
||||
}));
|
||||
node.setChildren(childrenNodes);
|
||||
cb && cb(childrenNodes);
|
||||
@ -285,6 +289,28 @@ class Departments extends React.Component {
|
||||
});
|
||||
};
|
||||
|
||||
toggleSetQuotaDialog = (node) => {
|
||||
this.setState({ operateNode: node, isSetQuotaDialogShow: !this.state.isSetQuotaDialogShow });
|
||||
};
|
||||
|
||||
onSetQuota = (newNode) => {
|
||||
const rootNodes = this.state.rootNodes.slice(0);
|
||||
this._setQuota(rootNodes[0], newNode);
|
||||
this.setState({
|
||||
rootNodes: rootNodes
|
||||
});
|
||||
};
|
||||
|
||||
_setQuota = (node, newNode) => {
|
||||
if (node.id === newNode.id) {
|
||||
node.quota = newNode.quota;
|
||||
} else {
|
||||
node.children.forEach(child => {
|
||||
this._setQuota(child, newNode);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
const { rootNodes, operateNode, checkedDepartmentId, isAddDepartmentDialogShow, isAddMembersDialogShow,
|
||||
@ -308,6 +334,7 @@ class Departments extends React.Component {
|
||||
onChangeDepartment={this.onChangeDepartment}
|
||||
listSubDepartments={this.listSubDepartments}
|
||||
toggleAddDepartment={this.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.toggleAddLibrary}
|
||||
toggleAddMembers={this.toggleAddMembers}
|
||||
toggleRename={this.toggleRename}
|
||||
@ -328,6 +355,7 @@ class Departments extends React.Component {
|
||||
deleteGroup={this.deleteGroup}
|
||||
createGroup={this.createGroup}
|
||||
toggleAddDepartment={this.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.toggleAddLibrary}
|
||||
toggleAddMembers={this.toggleAddMembers}
|
||||
toggleRename={this.toggleRename}
|
||||
@ -384,6 +412,13 @@ class Departments extends React.Component {
|
||||
groupID={String(operateNode.id)}
|
||||
/>
|
||||
)}
|
||||
{this.state.isSetQuotaDialogShow &&
|
||||
<SetGroupQuotaDialog
|
||||
group={operateNode}
|
||||
onSetQuota={this.onSetQuota}
|
||||
toggle={this.toggleSetQuotaDialog}
|
||||
/>
|
||||
}
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ const departmentsV2TreeNodePropTypes = {
|
||||
listSubDepartments: PropTypes.func,
|
||||
onChangeDepartment: PropTypes.func,
|
||||
toggleAddDepartment: PropTypes.func,
|
||||
toggleSetQuotaDialog: PropTypes.func,
|
||||
toggleAddLibrary: PropTypes.func,
|
||||
toggleAddMembers: PropTypes.func,
|
||||
toggleRename: PropTypes.func,
|
||||
@ -85,6 +86,7 @@ class DepartmentsV2TreeNode extends Component {
|
||||
toggleRename={this.props.toggleRename}
|
||||
toggleDelete={this.props.toggleDelete}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
/>
|
||||
);
|
||||
});
|
||||
@ -151,6 +153,7 @@ class DepartmentsV2TreeNode extends Component {
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleRename={this.props.toggleRename}
|
||||
toggleDelete={this.props.toggleDelete}
|
||||
/>
|
||||
|
@ -6,6 +6,7 @@ class DepartmentNode {
|
||||
this.children = props.children || [];
|
||||
this.parentNode = props.parentNode || null;
|
||||
this.orgId = props.orgId || '';
|
||||
this.quota = props.quota || -2;
|
||||
}
|
||||
|
||||
findNodeById(nodeId) {
|
||||
|
@ -155,6 +155,7 @@ class Department extends React.Component {
|
||||
<DepartmentNodeMenu
|
||||
node={currentDepartment}
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleRename={this.props.toggleRename}
|
||||
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { DropdownItem, DropdownMenu } from 'reactstrap';
|
||||
import { gettext } from '../../../utils/constants';
|
||||
|
||||
function DepartmentNodeMenu({ node, toggleDelete, toggleRename, toggleAddMembers, toggleAddDepartment, toggleAddLibrary }) {
|
||||
function DepartmentNodeMenu({ node, toggleDelete, toggleRename, toggleAddMembers, toggleAddDepartment, toggleAddLibrary, toggleSetQuotaDialog }) {
|
||||
return (
|
||||
<DropdownMenu
|
||||
modifiers={{ preventOverflow: { boundariesElement: document.body } }}
|
||||
@ -24,6 +24,9 @@ function DepartmentNodeMenu({ node, toggleDelete, toggleRename, toggleAddMembers
|
||||
<DropdownItem key={`${node.id}-delete`} onClick={() => toggleDelete(node)}>
|
||||
{gettext('Delete')}
|
||||
</DropdownItem>
|
||||
<DropdownItem key={`${node.id}-set-quota`} onClick={() => toggleSetQuotaDialog(node)}>
|
||||
{gettext('Set quota')}
|
||||
</DropdownItem>
|
||||
<DropdownItem key={`${node.id}-id`} disabled={true}>
|
||||
{`${gettext('Department ID')} : ${node.id}`}
|
||||
</DropdownItem>
|
||||
@ -38,6 +41,7 @@ DepartmentNodeMenu.propTypes = {
|
||||
toggleAddMembers: PropTypes.func.isRequired,
|
||||
toggleAddDepartment: PropTypes.func.isRequired,
|
||||
toggleAddLibrary: PropTypes.func.isRequired,
|
||||
toggleSetQuotaDialog: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default DepartmentNodeMenu;
|
||||
|
@ -9,6 +9,7 @@ const DepartmentsTreePanelPropTypes = {
|
||||
onChangeDepartment: PropTypes.func,
|
||||
listSubDepartments: PropTypes.func,
|
||||
toggleAddDepartment: PropTypes.func,
|
||||
toggleSetQuotaDialog: PropTypes.func,
|
||||
toggleAddLibrary: PropTypes.func,
|
||||
toggleAddMembers: PropTypes.func,
|
||||
toggleRename: PropTypes.func,
|
||||
@ -29,6 +30,7 @@ class DepartmentsTreePanel extends Component {
|
||||
onChangeDepartment={this.props.onChangeDepartment}
|
||||
listSubDepartments={this.props.listSubDepartments}
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleRename={this.props.toggleRename}
|
||||
|
@ -5,6 +5,7 @@ import { Utils } from '../../../utils/utils';
|
||||
import { systemAdminAPI } from '../../../utils/system-admin-api';
|
||||
import Loading from '../../../components/loading';
|
||||
import toaster from '../../../components/toast';
|
||||
import SetGroupQuotaDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-set-group-quota-dialog';
|
||||
import AddDepartmentV2Dialog from '../../../components/dialog/sysadmin-dialog/add-department-v2-dialog';
|
||||
import AddDepartMemberV2Dialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-depart-member-v2-dialog';
|
||||
import RenameDepartmentV2Dialog from '../../../components/dialog/sysadmin-dialog/rename-department-v2-dialog';
|
||||
@ -25,6 +26,7 @@ class Departments extends React.Component {
|
||||
rootNodes: [],
|
||||
checkedDepartmentId: -1,
|
||||
operateNode: null,
|
||||
isSetQuotaDialogShow: false,
|
||||
isAddDepartmentDialogShow: false,
|
||||
isAddMembersDialogShow: false,
|
||||
isRenameDepartmentDialogShow: false,
|
||||
@ -51,6 +53,7 @@ class Departments extends React.Component {
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
orgId: item.org_id,
|
||||
quota: item.quota,
|
||||
});
|
||||
return node;
|
||||
});
|
||||
@ -135,6 +138,7 @@ class Departments extends React.Component {
|
||||
parentGroupId: department.parent_group_id,
|
||||
orgId: department.org_id,
|
||||
parentNode: node,
|
||||
quota: department.quota,
|
||||
}));
|
||||
node.setChildren(childrenNodes);
|
||||
cb && cb(childrenNodes);
|
||||
@ -168,6 +172,10 @@ class Departments extends React.Component {
|
||||
this.setState({ operateNode: node, isAddDepartmentDialogShow: !this.state.isAddDepartmentDialogShow });
|
||||
};
|
||||
|
||||
toggleSetQuotaDialog = (node) => {
|
||||
this.setState({ operateNode: node, isSetQuotaDialogShow: !this.state.isSetQuotaDialogShow });
|
||||
};
|
||||
|
||||
toggleAddMembers = (node) => {
|
||||
this.setState({ operateNode: node, isAddMembersDialogShow: !this.state.isAddMembersDialogShow });
|
||||
};
|
||||
@ -318,6 +326,24 @@ class Departments extends React.Component {
|
||||
});
|
||||
};
|
||||
|
||||
onSetQuota = (newNode) => {
|
||||
const rootNodes = this.state.rootNodes.slice(0);
|
||||
this._setQuota(rootNodes[0], newNode);
|
||||
this.setState({
|
||||
rootNodes: rootNodes
|
||||
});
|
||||
};
|
||||
|
||||
_setQuota = (node, newNode) => {
|
||||
if (node.id === newNode.id) {
|
||||
node.quota = newNode.quota;
|
||||
} else {
|
||||
node.children.forEach(child => {
|
||||
this._setQuota(child, newNode);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
const { rootNodes, operateNode, checkedDepartmentId, isAddDepartmentDialogShow, isAddMembersDialogShow,
|
||||
@ -341,6 +367,7 @@ class Departments extends React.Component {
|
||||
onChangeDepartment={this.onChangeDepartment}
|
||||
listSubDepartments={this.listSubDepartments}
|
||||
toggleAddDepartment={this.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.toggleAddLibrary}
|
||||
toggleAddMembers={this.toggleAddMembers}
|
||||
toggleRename={this.toggleRename}
|
||||
@ -361,6 +388,7 @@ class Departments extends React.Component {
|
||||
deleteGroup={this.deleteGroup}
|
||||
createGroup={this.createGroup}
|
||||
toggleAddDepartment={this.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.toggleAddLibrary}
|
||||
toggleAddMembers={this.toggleAddMembers}
|
||||
toggleRename={this.toggleRename}
|
||||
@ -419,6 +447,13 @@ class Departments extends React.Component {
|
||||
groupID={String(operateNode.id)}
|
||||
/>
|
||||
)}
|
||||
{this.state.isSetQuotaDialogShow &&
|
||||
<SetGroupQuotaDialog
|
||||
group={operateNode}
|
||||
onSetQuota={this.onSetQuota}
|
||||
toggle={this.toggleSetQuotaDialog}
|
||||
/>
|
||||
}
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ const departmentsTreeNodePropTypes = {
|
||||
listSubDepartments: PropTypes.func,
|
||||
onChangeDepartment: PropTypes.func,
|
||||
toggleAddDepartment: PropTypes.func,
|
||||
toggleSetQuotaDialog: PropTypes.func,
|
||||
toggleAddLibrary: PropTypes.func,
|
||||
toggleAddMembers: PropTypes.func,
|
||||
toggleRename: PropTypes.func,
|
||||
@ -81,6 +82,7 @@ class DepartmentsTreeNode extends Component {
|
||||
checkedDepartmentId={this.props.checkedDepartmentId}
|
||||
listSubDepartments={this.props.listSubDepartments}
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleRename={this.props.toggleRename}
|
||||
toggleDelete={this.props.toggleDelete}
|
||||
@ -149,6 +151,7 @@ class DepartmentsTreeNode extends Component {
|
||||
<DepartmentNodeMenu
|
||||
node={node}
|
||||
toggleAddDepartment={this.props.toggleAddDepartment}
|
||||
toggleSetQuotaDialog={this.props.toggleSetQuotaDialog}
|
||||
toggleAddLibrary={this.props.toggleAddLibrary}
|
||||
toggleAddMembers={this.props.toggleAddMembers}
|
||||
toggleRename={this.props.toggleRename}
|
||||
|
Loading…
Reference in New Issue
Block a user