+
+
+
+ 返回用户列表
+
+
用户详情
+
敏感信息遵循最小权限原则,查看与处置操作均需审计。
+
+
+ {{ accountStatusText(user.accountStatus) }}
+ {{ riskLevelText(user.riskLevel) }}
+
+
+
+ 重新加载
+
+
+
+
{{ (user.displayName || '用')[0] }}
+
{{ user.displayName || '未设置显示名称' }} 用户编号:{{ user.id }}
+
+
+
- {{ user.id }}
- {{ user.displayName }}
+ {{ user.displayName || '-' }}
+ {{ user.idVerified ? '已认证' : '未认证' }}
{{ genderText(user.gender) }}
{{ user.age || '-' }}
-
-
- {{ user.phoneMasked }}
- 需要查看
-
- {{ user.phone }}
+
+ {{ user.phoneMasked || '已脱敏' }} 权限说明
+ {{ user.phone || '-' }}
{{ user.regionName || '-' }}
{{ formatTime(user.registeredAt) }}
{{ formatTime(user.lastLoginAt) }}
-
-
{{ maritalText(user.maritalStatus) }}
{{ childrenText(user.childrenStatus) }}
- {{ eduText(user.educationCode) }}
- {{ occText(user.occupationCode) }}
- {{ user.selfIntro || '未填写' }}
- {{ user.profileCompletion }}%
+ {{ user.educationCode || '-' }}
+ {{ user.occupationCode || '-' }}
{{ profileStatusText(user.profileStatus) }}
+ {{ relationshipText(user.relationshipStatus) }}
+ {{ user.selfIntro || '未填写' }}
-
-
-
-
- {{ user.totalRiskScore ?? 0 }}
-
- {{ riskLevelText(user.riskLevel) }}
-
- {{ user.totalReportsCount ?? 0 }}
- {{ user.activeActionsCount ?? 0 }}
-
-
-
修改账号状态
+
+
+
风险分数 {{ user.totalRiskScore ?? 0 }}
+
历史举报 {{ user.totalReportsCount ?? 0 }}
+
当前处置 {{ user.activeActionsCount ?? 0 }}
+
+
+
账号状态处置状态变更会影响用户登录和平台功能,提交前请确认处置依据。
+
修改账号状态
+
无状态修改权限
-
-
-
-
-
- {{ accountStatusText(user.accountStatus) }}
-
- {{ relationshipText(user.relationshipStatus) }}
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
- 取消
- 确认
-
+ 取消 确认变更
-
-
diff --git a/admin-web/src/modules/user/UserManagementView.vue b/admin-web/src/modules/user/UserManagementView.vue
index cf170df..722ca01 100644
--- a/admin-web/src/modules/user/UserManagementView.vue
+++ b/admin-web/src/modules/user/UserManagementView.vue
@@ -1,103 +1,170 @@
-
-
-
-
-
+
+
+
+
用户与资料审核
+
用户管理
+
仅按当前角色权限查询用户,手机号等敏感信息默认脱敏。
+
+ 共 {{ total }} 人
+
-
-
-
-
- {{ row.gender === 'male' ? '男' : row.gender === 'female' ? '女' : '-' }}
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+ 重新加载
+
+
+
+
+
+ {{ row.displayName || '未设置' }}
-
-
-
-
-
- {{ accountStatusText(row.accountStatus) }}
+
+ {{ genderText(row.gender) }}
+
+
+ {{ row.age || '-' }}
+
+
+ {{ row.phoneMasked || '未绑定' }}
+
+
+ {{ row.regionName || '-' }}
+
+
+
+
+ {{ accountStatusText(row.accountStatus) }}
+
-
-
- {{ riskLevelText(row.riskLevel) }}
+
+
+
+ {{ riskLevelText(row.riskLevel) }}
+
-
- {{ formatTime(row.registeredAt) }}
+
+ {{ formatTime(row.registeredAt) }}
-
-
- 查看
+
+
+ 查看详情
+
+
+
-
-
+
+
diff --git a/admin-web/src/views/DashboardView.vue b/admin-web/src/views/DashboardView.vue
index 9bc8df3..1d39f39 100644
--- a/admin-web/src/views/DashboardView.vue
+++ b/admin-web/src/views/DashboardView.vue
@@ -5,30 +5,32 @@
{{ today }} 今日服务
- {{item.label}} {{item.icon}}
{{item.value}} {{item.hint}}
+ {{item.label}}
{{item.value}} {{item.hint}}
{{task.title}} {{task.desc}} {{task.count}}
-
+
{{item.label}} {{item.value}}
{{item.note}}
\ No newline at end of file
+.welcome{background:var(--admin-soft-pink)}.welcome:after{content:none}
+
diff --git a/admin-web/src/views/LoginView.vue b/admin-web/src/views/LoginView.vue
index da68db1..3436dc7 100644
--- a/admin-web/src/views/LoginView.vue
+++ b/admin-web/src/views/LoginView.vue
@@ -1,42 +1,77 @@
-
-
-
+
+
+
diff --git a/ui-tests/admin-redesign-contracts.mjs b/ui-tests/admin-redesign-contracts.mjs
index 414c139..de70141 100644
--- a/ui-tests/admin-redesign-contracts.mjs
+++ b/ui-tests/admin-redesign-contracts.mjs
@@ -29,4 +29,19 @@ assert.ok(layout.includes('/brand/logo-mark.png'), '管理端未使用正式品
assert.ok(layout.includes('globalSearch'), '管理端顶部搜索没有可操作状态')
assert.ok(layout.includes('showNotifications'), '管理端通知入口没有可操作反馈')
+for (const file of [
+ 'admin-web/src/views/LoginView.vue',
+ 'admin-web/src/views/DashboardView.vue',
+ 'admin-web/src/modules/user/UserManagementView.vue',
+ 'admin-web/src/modules/user/UserDetailView.vue',
+ 'admin-web/src/modules/review/ReviewView.vue',
+]) {
+ const source = read(file)
+ assert.ok(
+ source.includes('page-shell') || source.includes('login-shell'),
+ `${file} 未接入样板布局`,
+ )
+ assert.doesNotMatch(source, /[\u{1F300}-\u{1FAFF}]/u, `${file} 仍包含 Emoji`)
+}
+
console.log('Admin redesign contracts passed')