User dialog group moderation tools

This commit is contained in:
Natsumi
2025-08-23 07:22:30 +12:00
parent af6848e409
commit 4f94582731
10 changed files with 492 additions and 194 deletions

View File

@@ -318,7 +318,10 @@
{{ t('dialog.group.actions.create_post') }}
</el-dropdown-item>
</template>
<el-dropdown-item icon="el-icon-s-operation" command="Moderation Tools">
<el-dropdown-item
:disabled="!hasGroupModerationPermission(groupDialog.ref)"
icon="el-icon-s-operation"
command="Moderation Tools">
{{ t('dialog.group.actions.moderation_tools') }}
</el-dropdown-item>
<template
@@ -1152,14 +1155,6 @@
</div>
<!--Nested-->
<GroupPostEditDialog :dialog-data.sync="groupPostEditDialog" :selected-gallery-file="selectedGalleryFile" />
<GroupMemberModerationDialog
:is-group-members-loading.sync="isGroupMembersLoading"
:group-member-moderation="groupMemberModeration"
@close-dialog="closeMemberModerationDialog"
@group-members-search="groupMembersSearch"
@load-all-group-members="loadAllGroupMembers"
@set-group-member-filter="setGroupMemberFilter"
@set-group-member-sort-order="setGroupMemberSortOrder" />
<InviteGroupDialog />
</safe-dialog>
</template>
@@ -1179,6 +1174,7 @@
downloadAndSaveJson,
getFaviconUrl,
hasGroupPermission,
hasGroupModerationPermission,
languageClass,
openExternalLink,
refreshInstancePlayerCount,
@@ -1195,7 +1191,6 @@
useUserStore
} from '../../../stores';
import InviteGroupDialog from '../InviteGroupDialog.vue';
import GroupMemberModerationDialog from './GroupMemberModerationDialog.vue';
import GroupPostEditDialog from './GroupPostEditDialog.vue';
const { t } = useI18n();
@@ -1212,7 +1207,8 @@
setGroupVisibility,
applyGroupMember,
handleGroupMember,
handleGroupMemberProps
handleGroupMemberProps,
showGroupMemberModerationDialog
} = useGroupStore();
const { lastLocation } = storeToRefs(useLocationStore());
@@ -1245,13 +1241,6 @@
postId: '',
groupId: ''
});
const groupMemberModeration = reactive({
visible: false,
loading: false,
id: '',
groupRef: {},
auditLogTypes: []
});
let loadMoreGroupMembersParams = ref({
n: 100,
@@ -1292,10 +1281,6 @@
handleGroupRepresentationChange(groupId, false);
}
function closeMemberModerationDialog() {
groupMemberModeration.visible = false;
}
function groupMembersSearch() {
if (groupMembersSearchTimer.value) {
groupMembersSearchPending.value = true;
@@ -1539,28 +1524,6 @@
});
}
function showGroupMemberModerationDialog(groupId) {
if (groupId !== groupDialog.value.id) {
return;
}
const D = groupMemberModeration;
D.id = groupId;
D.groupRef = {};
D.auditLogTypes = [];
groupRequest.getCachedGroup({ groupId }).then((args) => {
D.groupRef = args.ref;
if (hasGroupPermission(D.groupRef, 'group-audit-view')) {
groupRequest.getGroupAuditLogTypes({ groupId }).then((args) => {
if (groupMemberModeration.id !== args.params.groupId) {
return;
}
groupMemberModeration.auditLogTypes = args.json;
});
}
});
D.visible = true;
}
function joinGroup(id) {
if (!id) {
return null;