feat(admin): 用户管理列表只查企业账号(enterprise_type 0/1, NULL保留), 排除物业账号(2)

This commit is contained in:
xiaoqu
2026-09-03 18:48:21 +08:00
parent 3087570803
commit 48e4f61ff4
3 changed files with 20 additions and 2 deletions
+1 -1
View File
@@ -254,7 +254,7 @@ onMounted(async () => {
<div class="token-layout">
<div>
<article class="card">
<div class="card-title"><span>人员</span><small>来自现有 user 表</small></div>
<div class="card-title"><span>人员</span><small>来自现有 user 表 · 仅企业账号(不含物业)</small></div>
<div class="toolbar compact">
<el-input v-model="userKeyword" clearable placeholder="姓名 / 手机号" aria-label="搜索人员"
data-testid="admin-input-user-search" @keyup.enter="run(() => loadUsers(true))" />
@@ -88,7 +88,9 @@ public class AdminConsoleController {
if (keyword.length() > 100) bad("搜索关键词最多 100 字");
int pageNo = Math.max(page, 1);
int size = pageSize < 1 ? 20 : Math.min(pageSize, 100);
LambdaQueryWrapper<User> query = new LambdaQueryWrapper<User>().eq(User::getSoftDelete, 0);
LambdaQueryWrapper<User> query = new LambdaQueryWrapper<User>().eq(User::getSoftDelete, 0)
// 只查企业账号(0=企业内部 1=代理),物业账号(2)不进列表;历史数据可能为 NULL 一并保留
.and(w -> w.ne(User::getEnterpriseType, 2).or().isNull(User::getEnterpriseType));
if (!keyword.isBlank()) query.and(w -> w.like(User::getName, keyword.trim())
.or().like(User::getMobile, keyword.trim()));
Long total = userMapper.selectCount(query);
@@ -19,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@@ -41,6 +42,10 @@ class AdminConsoleControllerTest {
@BeforeEach
void setUp() {
com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableInfo(
new org.apache.ibatis.builder.MapperBuilderAssistant(
new com.baomidou.mybatisplus.core.MybatisConfiguration(), ""),
me.iiv.agent.entity.m0.User.class);
controller = new AdminConsoleController(userMapper, authorityMapper, agentMapper, tokenMapper,
scopeMapper, toolMapper, scopeToolMapper, auditMapper, tokenScopeMapper,
permissionService, tokenService);
@@ -62,4 +67,15 @@ class AdminConsoleControllerTest {
assertEquals(1, view.page());
assertEquals(20, view.pageSize());
}
@Test
void usersExcludesPropertyAccounts() {
controller.users("", 1, 20);
org.mockito.ArgumentCaptor<com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<me.iiv.agent.entity.m0.User>>
captor = org.mockito.ArgumentCaptor.forClass(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper.class);
org.mockito.Mockito.verify(userMapper, org.mockito.Mockito.atLeastOnce()).selectCount(captor.capture());
String sql = captor.getValue().getSqlSegment();
assertTrue(sql.contains("enterprise_type"), "用户列表必须过滤物业账号: " + sql);
assertTrue(sql.contains("IS NULL"), "历史 NULL 数据需保留: " + sql);
}
}