feat: expand IM admin controls

This commit is contained in:
richjohnrambo
2026-08-21 15:09:39 +08:00
parent c3676f9744
commit 543c7b624e
29 changed files with 1308 additions and 39 deletions
+37 -4
View File
@@ -1,7 +1,7 @@
<template>
<div>
<div class="n-layout-page-header">
<n-card :bordered="false" title="IM用户管理"></n-card>
<n-card :bordered="false" title="IM用户管理" />
</div>
<n-card :bordered="false" class="proCard">
<BasicForm
@@ -22,30 +22,34 @@
/>
</n-card>
<ViewModal ref="viewRef" />
<DevicesModal ref="devicesRef" />
<ResetPasswordModal ref="resetPasswordRef" @reload="reloadTable" />
</div>
</template>
<script lang="ts" setup>
import { computed, h, onMounted, reactive, ref } from 'vue';
import { useMessage } from 'naive-ui';
import { useDialog, useMessage } from 'naive-ui';
import { BasicTable, TableAction } from '@/components/Table';
import { BasicForm, useForm } from '@/components/Form/index';
import { usePermission } from '@/hooks/web/usePermission';
import { useUserStore } from '@/store/modules/user';
import { List } from '@/api/imUser';
import { List, RevokeSessions } from '@/api/imUser';
import { columns, loadOptions, loadTenantOptions, schemas, State, tenantOptions } from './model';
import { adaTableScrollX } from '@/utils/hotgo';
import ViewModal from './view.vue';
import DevicesModal from './DevicesModal.vue';
import ResetPasswordModal from './ResetPasswordModal.vue';
const message = useMessage();
const dialog = useDialog();
const { hasPermission } = usePermission();
const userStore = useUserStore();
const isPlatformAdmin = computed(() => userStore.isCompanyDept);
const actionRef = ref();
const searchFormRef = ref<any>({});
const viewRef = ref();
const devicesRef = ref();
const resetPasswordRef = ref();
const tenantSchema = schemas.value.find((item) => item.field === 'tenantId');
@@ -54,7 +58,7 @@
}
const actionColumn = reactive({
width: 220,
width: 330,
title: '操作',
key: 'action',
fixed: 'right',
@@ -67,6 +71,17 @@
onClick: handleView.bind(null, record),
auth: ['/imUser/view'],
},
{
label: '设备',
onClick: handleDevices.bind(null, record),
auth: ['/imUser/devices'],
},
{
label: '撤销会话',
type: 'error',
onClick: handleRevokeSessions.bind(null, record),
auth: ['/imUser/revokeSessions'],
},
{
label: '重置密码',
type: 'warning',
@@ -107,6 +122,24 @@
viewRef.value.openModal(record);
}
function handleDevices(record: State) {
devicesRef.value.openModal(record);
}
function handleRevokeSessions(record: State) {
dialog.warning({
title: '撤销用户会话',
content: '将递增该用户认证版本,并通知 IM 服务清退在线会话,是否确认?',
positiveText: '确认',
negativeText: '取消',
onPositiveClick: async () => {
await RevokeSessions({ tenantId: record.tenantId, userId: record.userId });
message.success('会话撤销事件已提交');
reloadTable();
},
});
}
function handleResetPassword(record: State) {
resetPasswordRef.value.openModal(record);
}