feat: 添加同步租户套餐的功能,并更新租户选择器逻辑。

This commit is contained in:
AN 2025-05-18 01:21:22 +08:00
parent 0c40aa32db
commit d587ce4338
4 changed files with 35 additions and 8 deletions

View File

@ -3,10 +3,10 @@ import { computed, onMounted, ref } from 'vue';
import type { SelectOption } from 'naive-ui';
import { useLoading } from '@sa/hooks';
import { fetchTenantList } from '@/service/api';
import { fetchChangeTenant, fetchClearTenant } from '@/service/api/system/tenant';
import { fetchClearTenant } from '@/service/api/system/tenant';
import { useAppStore } from '@/store/modules/app';
import { useTabStore } from '@/store/modules/tab';
import { useAuth } from '@/hooks/business/auth';
import { useAuthStore } from '@/store/modules/auth';
import { useRouterPush } from '@/hooks/common/router';
defineOptions({ name: 'TenantSelect' });
@ -20,7 +20,7 @@ withDefaults(defineProps<Props>(), {
});
const appStore = useAppStore();
const { hasRole } = useAuth();
const { userInfo } = useAuthStore();
const { clearTabs } = useTabStore();
const { toHome } = useRouterPush();
@ -33,7 +33,7 @@ const tenantOption = ref<SelectOption[]>([]);
const { loading, startLoading, endLoading } = useLoading();
const showTenantSelect = computed<boolean>(() => {
return hasRole('superadmin') && enabled.value;
return userInfo.user?.userId === 1 && enabled.value;
});
/**
@ -57,7 +57,6 @@ async function handleChangeTenant(_tenantId: CommonType.IdType) {
if (lastSelected.value === _tenantId) {
return;
}
await fetchChangeTenant(_tenantId);
closeAndRefresh('切换租户成功', _tenantId);
}
@ -82,7 +81,7 @@ async function handleFetchTenantList() {
endLoading();
}
onMounted(async () => {
if (!hasRole('superadmin')) {
if (userInfo.user?.userId !== 1) {
return;
}
await handleFetchTenantList();

View File

@ -47,6 +47,15 @@ export function fetchSyncTenantDict() {
});
}
/** 同步租户套餐 */
export function fetchSyncTenantPackage(params: Api.System.SyncTenantPackageParams) {
return request<boolean>({
url: '/system/tenant/syncTenantPackage',
method: 'get',
params
});
}
/** 动态切换租户 */
export function fetchChangeTenant(tenantId: CommonType.IdType) {
return request<boolean>({

View File

@ -558,6 +558,9 @@ declare namespace Api {
}
>;
/** sync tenant package params */
type SyncTenantPackageParams = CommonType.RecordNullable<Pick<Api.System.Tenant, 'tenantId' | 'packageId'>>;
/** tenant list */
type TenantList = Api.Common.PaginatingQueryRecord<Tenant>;

View File

@ -1,7 +1,12 @@
<script setup lang="tsx">
import { computed } from 'vue';
import { NButton, NDivider } from 'naive-ui';
import { fetchBatchDeleteTenant, fetchGetTenantList, fetchSyncTenantDict } from '@/service/api/system/tenant';
import {
fetchBatchDeleteTenant,
fetchGetTenantList,
fetchSyncTenantDict,
fetchSyncTenantPackage
} from '@/service/api/system/tenant';
import { useAppStore } from '@/store/modules/app';
import { useAuthStore } from '@/store/modules/auth';
import { useAuth } from '@/hooks/business/auth';
@ -129,7 +134,7 @@ const {
icon="material-symbols:sync-outline"
tooltipContent="同步套餐"
popconfirmContent={`确认同步[${row.companyName}]的套餐吗?`}
onPositiveClick={() => handleSyncTenantDict()}
onPositiveClick={() => handleSyncTenantPackage(row)}
/>
);
};
@ -196,6 +201,17 @@ async function handleSyncTenantDict() {
await getData();
}
async function handleSyncTenantPackage(row: Api.System.Tenant) {
const params: Api.System.SyncTenantPackageParams = {
tenantId: row.tenantId,
packageId: row.packageId
};
const { error } = await fetchSyncTenantPackage(params);
if (error) return;
window.$message?.success('同步租户套餐成功');
await getData();
}
async function handleExport() {
download('/system/tenant/export', searchParams, `租户列表_${new Date().getTime()}.xlsx`);
}