feat: add status filter
This commit is contained in:
@@ -7,8 +7,8 @@ function normalizeItems(items) {
|
||||
}
|
||||
|
||||
export const TenantService = {
|
||||
async listTenants({ page, limit, name, code, sortField, sortOrder } = {}) {
|
||||
const query = { page, limit, name, code };
|
||||
async listTenants({ page, limit, name, code, status, sortField, sortOrder } = {}) {
|
||||
const query = { page, limit, name, code, status };
|
||||
if (sortField && sortOrder) {
|
||||
if (sortOrder === 1) query.asc = sortField;
|
||||
if (sortOrder === -1) query.desc = sortField;
|
||||
|
||||
@@ -15,6 +15,7 @@ const page = ref(1);
|
||||
const rows = ref(10);
|
||||
|
||||
const keyword = ref('');
|
||||
const status = ref('');
|
||||
const sortField = ref('id');
|
||||
const sortOrder = ref(-1);
|
||||
|
||||
@@ -65,6 +66,7 @@ async function loadTenants() {
|
||||
limit: rows.value,
|
||||
name: keyword.value,
|
||||
code: keyword.value,
|
||||
status: status.value,
|
||||
sortField: sortField.value,
|
||||
sortOrder: sortOrder.value
|
||||
});
|
||||
@@ -89,6 +91,7 @@ function onSearch() {
|
||||
|
||||
function onReset() {
|
||||
keyword.value = '';
|
||||
status.value = '';
|
||||
sortField.value = 'id';
|
||||
sortOrder.value = -1;
|
||||
page.value = 1;
|
||||
@@ -127,20 +130,26 @@ function openRenewDialog(item) {
|
||||
}
|
||||
|
||||
const tenantStatusDialogVisible = ref(false);
|
||||
const tenantStatusLoading = ref(false);
|
||||
const tenantStatusOptionsLoading = ref(false);
|
||||
const tenantStatusUpdating = ref(false);
|
||||
const tenantStatusOptions = ref([]);
|
||||
const tenantStatusTenant = ref(null);
|
||||
const tenantStatusValue = ref(null);
|
||||
|
||||
async function ensureTenantStatusOptionsLoaded() {
|
||||
if (tenantStatusOptions.value.length > 0) return;
|
||||
const list = await TenantService.getTenantStatuses();
|
||||
tenantStatusOptions.value = (list || [])
|
||||
.map((kv) => ({
|
||||
label: kv?.value ?? kv?.key ?? '-',
|
||||
value: kv?.key ?? ''
|
||||
}))
|
||||
.filter((item) => item.value);
|
||||
tenantStatusOptionsLoading.value = true;
|
||||
try {
|
||||
const list = await TenantService.getTenantStatuses();
|
||||
tenantStatusOptions.value = (list || [])
|
||||
.map((kv) => ({
|
||||
label: kv?.value ?? kv?.key ?? '-',
|
||||
value: kv?.key ?? ''
|
||||
}))
|
||||
.filter((item) => item.value);
|
||||
} finally {
|
||||
tenantStatusOptionsLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
async function openTenantStatusDialog(tenant) {
|
||||
@@ -148,13 +157,10 @@ async function openTenantStatusDialog(tenant) {
|
||||
tenantStatusValue.value = tenant?.status ?? null;
|
||||
tenantStatusDialogVisible.value = true;
|
||||
|
||||
tenantStatusLoading.value = true;
|
||||
try {
|
||||
await ensureTenantStatusOptionsLoaded();
|
||||
} catch (error) {
|
||||
toast.add({ severity: 'error', summary: '加载失败', detail: error?.message || '无法加载租户状态列表', life: 4000 });
|
||||
} finally {
|
||||
tenantStatusLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +168,7 @@ async function confirmUpdateTenantStatus() {
|
||||
const tenantID = tenantStatusTenant.value?.id;
|
||||
if (!tenantID || !tenantStatusValue.value) return;
|
||||
|
||||
tenantStatusLoading.value = true;
|
||||
tenantStatusUpdating.value = true;
|
||||
try {
|
||||
await TenantService.updateTenantStatus({ tenantID, status: tenantStatusValue.value });
|
||||
toast.add({ severity: 'success', summary: '更新成功', detail: `TenantID: ${tenantID}`, life: 3000 });
|
||||
@@ -171,7 +177,7 @@ async function confirmUpdateTenantStatus() {
|
||||
} catch (error) {
|
||||
toast.add({ severity: 'error', summary: '更新失败', detail: error?.message || '无法更新租户状态', life: 4000 });
|
||||
} finally {
|
||||
tenantStatusLoading.value = false;
|
||||
tenantStatusUpdating.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,6 +200,7 @@ async function confirmRenew() {
|
||||
|
||||
onMounted(() => {
|
||||
loadTenants();
|
||||
ensureTenantStatusOptionsLoaded().catch(() => {});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -213,6 +220,9 @@ onMounted(() => {
|
||||
<InputText v-model="keyword" placeholder="请输入" class="w-full" @keyup.enter="onSearch" />
|
||||
</IconField>
|
||||
</SearchField>
|
||||
<SearchField label="状态">
|
||||
<Select v-model="status" :options="tenantStatusOptions" optionLabel="label" optionValue="value" placeholder="请选择" :loading="tenantStatusOptionsLoading" class="w-full" />
|
||||
</SearchField>
|
||||
</SearchPanel>
|
||||
|
||||
<DataTable
|
||||
@@ -300,12 +310,12 @@ onMounted(() => {
|
||||
<div class="flex flex-col gap-4">
|
||||
<div>
|
||||
<label class="block font-medium mb-2">租户状态</label>
|
||||
<Select v-model="tenantStatusValue" :options="tenantStatusOptions" optionLabel="label" optionValue="value" placeholder="选择状态" :disabled="tenantStatusLoading" fluid />
|
||||
<Select v-model="tenantStatusValue" :options="tenantStatusOptions" optionLabel="label" optionValue="value" placeholder="选择状态" :disabled="tenantStatusUpdating" fluid />
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<Button label="取消" icon="pi pi-times" text @click="tenantStatusDialogVisible = false" :disabled="tenantStatusLoading" />
|
||||
<Button label="确认" icon="pi pi-check" @click="confirmUpdateTenantStatus" :loading="tenantStatusLoading" :disabled="!tenantStatusValue" />
|
||||
<Button label="取消" icon="pi pi-times" text @click="tenantStatusDialogVisible = false" :disabled="tenantStatusUpdating" />
|
||||
<Button label="确认" icon="pi pi-check" @click="confirmUpdateTenantStatus" :loading="tenantStatusUpdating" :disabled="!tenantStatusValue" />
|
||||
</template>
|
||||
</Dialog>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user