feat: add tenant-aware IM management console

This commit is contained in:
richjohnrambo
2026-08-19 00:31:09 +08:00
parent 642b7ec5da
commit 89ba6bcff8
126 changed files with 11941 additions and 339 deletions
+73
View File
@@ -0,0 +1,73 @@
<template>
<div>
<n-modal
v-model:show="showModal"
:mask-closable="false"
:show-icon="false"
preset="dialog"
transform-origin="center"
:title="'群成员 ' + current.topic"
:style="{ width: dialogWidth }"
>
<BasicTable
ref="actionRef"
:columns="memberColumns"
:request="loadDataTable"
:row-key="(row) => row.userId"
:scroll-x="scrollX"
:resizeHeightOffset="-10000"
/>
<template #action>
<n-space>
<n-button @click="closeForm">关闭</n-button>
</n-space>
</template>
</n-modal>
</div>
</template>
<script lang="ts" setup>
import { computed, ref } from 'vue';
import { BasicTable } from '@/components/Table';
import { MemberList } from '@/api/imGroup';
import { memberColumns, newState, State } from './model';
import { adaModalWidth, adaTableScrollX } from '@/utils/hotgo';
const showModal = ref(false);
const current = ref<State>(newState(null));
const actionRef = ref();
const dialogWidth = computed(() => adaModalWidth(980));
const scrollX = computed(() => adaTableScrollX(memberColumns, 0));
// 加载表格数据
const loadDataTable = async (res) => {
if (!current.value.tenantId || !current.value.topic) {
return { list: [], page: 1, pageCount: 0, totalCount: 0 };
}
return await MemberList({
tenantId: current.value.tenantId,
topic: current.value.topic,
...res,
});
};
// 关闭弹窗
function closeForm() {
showModal.value = false;
}
// 打开弹窗
function openModal(state: State) {
current.value = newState(state);
showModal.value = true;
setTimeout(() => {
actionRef.value?.reload();
});
}
defineExpose({
openModal,
});
</script>
<style lang="less"></style>