1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-24 12:58:34 +00:00

optimize log user selector

This commit is contained in:
孙永强
2025-03-06 13:42:16 +08:00
parent 4f16bbb0d6
commit 779fee29b6
12 changed files with 508 additions and 115 deletions

View File

@@ -17,6 +17,8 @@ import FilterMenu from './file-access-item-menu';
import ToggleFilter from './file-access-toggle-filter';
import MainPanelTopbar from '../main-panel-topbar';
import UserLink from '../user-link';
import LogUserSelector from '../../dashboard/log-user-selector'
import LogRepoSelector from '../../dashboard/log-repo-selector';
dayjs.extend(relativeTime);
@@ -248,6 +250,8 @@ class FileAccessLogs extends Component {
currentPage: 1,
hasNextPage: false,
isExportExcelDialogOpen: false,
availableUsers: [],
selectedUsers: [],
};
this.initPage = 1;
}
@@ -265,13 +269,15 @@ class FileAccessLogs extends Component {
userFilteredBy: urlParams.get('email'),
repoFilteredBy: urlParams.get('repo_id')
}, () => {
// this.getAvailableUsers();
this.getLogsByPage(this.state.currentPage);
});
}
getLogsByPage = (page) => {
const { perPage, userFilteredBy, repoFilteredBy } = this.state;
systemAdminAPI.sysAdminListFileAccessLogs(page, perPage, userFilteredBy, repoFilteredBy).then((res) => {
const { perPage, userFilteredBy, repoFilteredBy, selectedUsers } = this.state;
let emails = selectedUsers.map(user => user.email);
systemAdminAPI.sysAdminListFileAccessLogs(page, perPage, emails, repoFilteredBy).then((res) => {
this.setState({
logList: res.data.file_access_log_list,
loading: false,
@@ -322,12 +328,51 @@ class FileAccessLogs extends Component {
});
};
getAvailableUsers = () => {
systemAdminAPI.sysAdminListUsers().then((res) => {
this.setState({
availableUsers: res.data.data
});
}).catch((error) => {
this.setState({
errorMsg: Utils.getErrorMsg(error, true)
});
});
};
handleUserFilter = (user, shouldFetchData = true) => {
const { selectedUsers } = this.state;
let newSelectedUsers;
if (user === null) {
newSelectedUsers = selectedUsers;
} else {
const isSelected = selectedUsers.find(item => item.email === user.email);
if (isSelected) {
newSelectedUsers = selectedUsers.filter(item => item.email !== user.email);
} else {
newSelectedUsers = [...selectedUsers, user];
}
}
this.setState({
selectedUsers: newSelectedUsers,
currentPage: 1
}, () => {
if (shouldFetchData) {
this.getLogsByPage(1);
}
});
};
render() {
const {
logList,
userFilteredBy, repoFilteredBy,
currentPage, perPage, hasNextPage,
isExportExcelDialogOpen
isExportExcelDialogOpen,
availableUsers,
selectedUsers
} = this.state;
return (
<Fragment>
@@ -338,6 +383,12 @@ class FileAccessLogs extends Component {
<div className="cur-view-container">
<LogsNav currentItem="fileAccessLogs" />
<div className="cur-view-content">
<Fragment>
<LogUserSelector
items={availableUsers}
selectedItems={selectedUsers}
onSelect={this.handleUserFilter}
/>
<Content
loading={this.state.loading}
errorMsg={this.state.errorMsg}
@@ -352,6 +403,7 @@ class FileAccessLogs extends Component {
getLogsByPage={this.getLogsByPage}
resetPerPage={this.resetPerPage}
/>
</Fragment>
</div>
</div>
</div>