1135 lines
42 KiB
Markdown
1135 lines
42 KiB
Markdown
# Ether 智慧物业管理平台 - 项目进度总览
|
||
|
||
**文档版本**: v1.2
|
||
**最后更新**: 2026-03-02
|
||
**当前阶段**: Phase 3 移动端适配已完成,Phase 4/5 集成中心开发中
|
||
|
||
---
|
||
|
||
## 〇、长时间运行智能体框架
|
||
|
||
本项目采用长时间运行智能体框架进行开发,确保跨会话的一致性和进度追踪。
|
||
|
||
### 核心文档
|
||
|
||
| 文档 | 路径 | 说明 |
|
||
| -------- | -------------------------------------- | ------------------------------------------ |
|
||
| 特性清单 | `docs/FEATURE_LIST.md` | 所有特性的状态追踪(待开发/进行中/已完成) |
|
||
| 会话进度 | `docs/SESSION_PROGRESS.md` | 每个会话的工作记录和下一步计划 |
|
||
| 项目进度 | `docs/03-项目进度/PROJECT_PROGRESS.md` | 本文档,项目整体进度总览 |
|
||
|
||
### 工作流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 会话开始 │
|
||
│ 1. 阅读 SESSION_PROGRESS.md 了解上次进度 │
|
||
│ 2. 阅读 FEATURE_LIST.md 选择本次要完成的特性 │
|
||
│ 3. 更新特性状态为 🔄 进行中 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 开发工作 │
|
||
│ 1. 遵循开发规范编写代码 │
|
||
│ 2. 每次完成1-3个相关特性 │
|
||
│ 3. 运行测试确保通过 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 会话结束 │
|
||
│ 1. 更新特性状态为 ✅ 已完成 │
|
||
│ 2. 更新 SESSION_PROGRESS.md 记录工作内容 │
|
||
│ 3. 提交有意义的 Git commit │
|
||
│ 4. 写明下一步计划 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 会话检查清单
|
||
|
||
- [ ] 代码可编译/可运行
|
||
- [ ] 相关测试通过
|
||
- [ ] 更新 `FEATURE_LIST.md` 特性状态
|
||
- [ ] 更新 `SESSION_PROGRESS.md` 会话记录
|
||
- [ ] 提交 Git commit
|
||
|
||
---
|
||
|
||
## 一、项目概述
|
||
|
||
基于微服务架构的智慧物业管理平台,涵盖空间资产、设备管理、工单运维、财务收费等核心模块。
|
||
|
||
### 技术架构
|
||
|
||
```
|
||
ether-gateway # API网关 (端口:8080)
|
||
ether-auth # 认证授权服务 (端口:8081)
|
||
ether-mdm # 主数据服务 (端口:8082)
|
||
ether-ops # 运维服务 (端口:8083)
|
||
ether-finance # 财务服务 (端口:8084)
|
||
ether-ui-admin # 前端管理界面 (端口:3000)
|
||
```
|
||
|
||
### 技术栈
|
||
|
||
- **后端**: Spring Boot 3.x, Spring Cloud, Spring Data JPA
|
||
- **前端**: Vue 3, TypeScript, Element Plus, Pinia
|
||
- **数据库**: PostgreSQL
|
||
- **消息队列**: RabbitMQ
|
||
- **服务发现**: Nacos
|
||
- **构建工具**: Maven
|
||
|
||
---
|
||
|
||
## 二、已完成模块
|
||
|
||
### 1. RBAC 权限系统 ✅
|
||
|
||
**后端 (ether-auth)**
|
||
|
||
- [x] Role 实体 - 角色表,支持系统预设和自定义角色
|
||
- [x] Permission 实体 - 权限表,支持菜单/按钮/API权限
|
||
- [x] UserRole 实体 - 用户-角色关联,支持项目隔离
|
||
- [x] RolePermission 实体 - 角色-权限关联
|
||
- [x] Repository 层 - 数据访问
|
||
- [x] PermissionService - 业务逻辑
|
||
- [x] PermissionController - API接口
|
||
- [x] ProjectContextInterceptor - 项目上下文拦截器
|
||
|
||
**前端 (ether-ui-admin)**
|
||
|
||
- [x] permission API - 权限相关接口
|
||
- [x] permission Store - Pinia状态管理
|
||
- [x] permission 指令 - 按钮级权限控制
|
||
- [x] permissionGuard - 路由权限守卫
|
||
- [x] 角色管理页面 - 角色CRUD和权限分配
|
||
|
||
**API 接口**
|
||
| 接口 | 说明 |
|
||
|------|------|
|
||
| POST /api/v1/auth/permissions/roles | 创建角色 |
|
||
| GET /api/v1/auth/permissions/roles | 查询角色列表 |
|
||
| POST /api/v1/auth/permissions | 创建权限 |
|
||
| GET /api/v1/auth/permissions | 查询权限列表 |
|
||
| POST /api/v1/auth/permissions/roles/{id}/permissions | 分配权限 |
|
||
| GET /api/v1/auth/permissions/users/{id}/menus | 获取用户菜单 |
|
||
|
||
---
|
||
|
||
### 2. 工单与通知系统集成 ✅
|
||
|
||
**后端 (ether-ops)**
|
||
|
||
- [x] 工单创建通知 - 创建工单时发送通知给创建人
|
||
- [x] 工单分配通知 - 分配工单时通知处理人(站内信+推送)
|
||
- [x] 工单接单通知 - 接单时发送通知
|
||
- [x] 工单开始通知 - 开始处理时发送通知
|
||
- [x] 工单完成通知 - 完成时通知创建人
|
||
- [x] 工单关闭通知 - 关闭时发送通知
|
||
- [x] 默认通知规则 - 4条默认规则已创建
|
||
- [x] 默认消息模板 - 6个默认模板已创建
|
||
|
||
**事件类型**
|
||
| 事件类型 | 触发时机 | 接收人 |
|
||
|----------|----------|--------|
|
||
| WORK_ORDER_CREATED | 工单创建 | 创建人 |
|
||
| WORK_ORDER_ASSIGNED | 工单分配 | 处理人 |
|
||
| WORK_ORDER_ACCEPTED | 工单接单 | - |
|
||
| WORK_ORDER_STARTED | 开始处理 | - |
|
||
| WORK_ORDER_COMPLETED | 工单完成 | 创建人 |
|
||
| WORK_ORDER_CLOSED | 工单关闭 | - |
|
||
|
||
---
|
||
|
||
### 3. 前端通知中心组件 ✅
|
||
|
||
**前端 (ether-ui-admin)**
|
||
|
||
- [x] 通知 API - 通知相关接口封装
|
||
- [x] 通知 Store - Pinia状态管理,支持轮询
|
||
- [x] 通知中心组件 - 顶部通知图标和下拉列表
|
||
- [x] 通知列表页面 - 完整的通知管理页面
|
||
|
||
**功能特性**
|
||
|
||
- [x] 未读消息提醒 - 顶部导航栏显示未读数量徽章
|
||
- [x] 通知下拉列表 - 显示最近5条未读通知
|
||
- [x] 通知详情弹窗 - 点击查看通知详情
|
||
- [x] 全部已读 - 一键标记所有通知为已读
|
||
- [x] 自动轮询 - 30秒自动刷新未读数量
|
||
- [x] 筛选功能 - 全部/未读/已读筛选
|
||
- [x] 分页加载 - 支持分页浏览历史通知
|
||
- [x] 业务跳转 - 点击通知可跳转到相关业务页面
|
||
|
||
---
|
||
|
||
### 4. 费用催缴通知 ✅
|
||
|
||
**后端 (ether-finance)**
|
||
|
||
- [x] FeeReminderJob - 定时扫描即将到期和逾期账单
|
||
- [x] FinanceNotificationProducer - 通过RabbitMQ发送费用通知
|
||
- [x] FinanceNotificationConsumer - 接收并保存费用通知
|
||
- [x] FeeNotificationService - 费用通知业务接口
|
||
- [x] FeeNotificationServiceImpl - 费用通知业务实现
|
||
- [x] RabbitMQNotificationConfig - 财务通知队列配置
|
||
|
||
**定时任务**
|
||
| 任务 | 执行时间 | 功能 |
|
||
|------|----------|------|
|
||
| remindUpcomingDue | 每天9:00 | 提醒3天内到期的账单 |
|
||
| remindOverdue | 每天9:00和18:00 | 催缴已逾期的账单 |
|
||
| sendWeeklySummary | 每周一9:00 | 发送本周待缴费汇总 |
|
||
|
||
**通知类型**
|
||
| 事件类型 | 触发时机 | 接收人 |
|
||
|----------|----------|--------|
|
||
| FEE_BILL_CREATED | 账单创建 | 业主 |
|
||
| FEE_UPCOMING_DUE | 即将到期 | 业主 |
|
||
| FEE_OVERDUE | 账单逾期 | 业主 |
|
||
| FEE_PAYMENT_SUCCESS | 缴费成功 | 业主 |
|
||
|
||
---
|
||
|
||
### 5. 巡检提醒通知 ✅
|
||
|
||
**后端 (ether-ops)**
|
||
|
||
- [x] InspectionTask - 巡检任务实体
|
||
- [x] InspectionTaskRepository - 数据访问层
|
||
- [x] InspectionReminderJob - 定时扫描和提醒
|
||
|
||
**定时任务**
|
||
| 任务 | 执行时间 | 功能 |
|
||
|------|----------|------|
|
||
| remindTodayInspection | 每天8:00 | 提醒当天需要执行的巡检任务 |
|
||
| remindTomorrowInspection | 每天18:00 | 提醒明天的巡检任务 |
|
||
| alertOverdueInspection | 每天9:00和15:00 | 告警已逾期的巡检任务 |
|
||
| sendWeeklyInspectionSummary | 每周一8:00 | 发送本周巡检任务汇总 |
|
||
|
||
**通知事件类型**
|
||
| 事件类型 | 触发时机 | 接收人 |
|
||
|----------|----------|--------|
|
||
| INSPECTION_TODAY | 当天巡检提醒 | 巡检人 |
|
||
| INSPECTION_TOMORROW | 明天巡检提醒 | 巡检人 |
|
||
| INSPECTION_OVERDUE | 巡检任务逾期 | 巡检人 |
|
||
| INSPECTION_WEEKLY_SUMMARY | 周巡检汇总 | 巡检人 |
|
||
|
||
---
|
||
|
||
### 6. 工单系统核心功能 ✅
|
||
|
||
**开发状态**: 核心功能开发完成,146个测试全部通过
|
||
|
||
**后端 (ether-ops)**
|
||
|
||
- [x] 实体层 - WorkOrder, WorkOrderFlow
|
||
- [x] 枚举层 - Type, Status, Priority, Source
|
||
- [x] 仓储层 - Repository + 自定义查询
|
||
- [x] Service层 - 完整生命周期管理
|
||
- [x] Controller层 - REST API
|
||
- [x] 流转记录 - 自动记录状态变更
|
||
- [x] 集成测试 - 端到端测试
|
||
- [x] 统计功能 - 多维度统计分析
|
||
|
||
**前端 (ether-ui-admin)**
|
||
|
||
- [x] API层 - 完整API封装
|
||
- [x] WorkOrderList - 列表+搜索+分页
|
||
- [x] WorkOrderForm - 创建/编辑表单
|
||
- [x] WorkOrderDetail - 详情+操作按钮
|
||
- [x] 统计页面 - ECharts图表
|
||
- [x] 页面集成 - 主页面布局
|
||
|
||
**工单生命周期**
|
||
|
||
```
|
||
CREATED (已创建) → ASSIGNED (已分配) → ACCEPTED (已接单)
|
||
→ IN_PROGRESS (处理中) → COMPLETED (已完成) → CLOSED (已关闭)
|
||
```
|
||
|
||
---
|
||
|
||
### 7. 合同管理系统 ✅
|
||
|
||
**开发状态**: 功能完善完成,后端编译通过,前端类型检查通过
|
||
|
||
**后端 (ether-mdm)**
|
||
|
||
- [x] 数据库设计 - mdm_contract, mdm_contract_fee_item, mdm_contract_change
|
||
- [x] 枚举类 - ContractType (14种), ContractStatus, FeeCycle, ContractChangeType
|
||
- [x] 实体类 - Contract, ContractFeeItem, ContractChange
|
||
- [x] Repository层 - ContractRepository, ContractFeeItemRepository, ContractChangeRepository
|
||
- [x] Service层 - ContractService, ContractServiceImpl
|
||
- [x] Controller层 - ContractController (REST API + @LogOperation)
|
||
- [x] 定时任务 - ContractReminderJob (到期预警)
|
||
- [x] 事件发布 - ContractSignedEvent (合同签订事件)
|
||
|
||
**后端 (ether-finance)**
|
||
|
||
- [x] 账单生成 - FeeService.generateBillsFromContract (合同签订后自动生成账单)
|
||
- [x] 费用类型 - FeeType.RENT (新增租金类型)
|
||
|
||
**后端 (ether-auth)**
|
||
|
||
- [x] 权限配置 - V12\_\_add_contract_permissions.sql (菜单和按钮权限)
|
||
|
||
**前端 (ether-ui-admin)**
|
||
|
||
- [x] API封装 - contract.ts (类型定义、接口封装、14种合同类型)
|
||
- [x] 合同列表页 - index.vue (搜索、分页、状态标签、到期预警)
|
||
- [x] 合同详情页 - detail.vue (基本信息、费用明细、变更记录、附件展示、PDF预览)
|
||
- [x] 合同表单页 - form.vue (创建/编辑、附件上传、费用明细编辑)
|
||
- [x] 路由配置 - 动态路由映射
|
||
|
||
**合同生命周期**
|
||
|
||
```
|
||
DRAFT (草稿) → PENDING_APPROVAL (待审批) → APPROVED (已审批)
|
||
→ PENDING_SIGN (待签订) → EFFECTIVE (生效中) → EXPIRING (即将到期) → EXPIRED (已到期)
|
||
↓
|
||
TERMINATED (已终止) / RENEWED (已续签)
|
||
```
|
||
|
||
**核心功能**
|
||
|
||
- 合同CRUD管理
|
||
- 合同审批流程
|
||
- 合同签订确认
|
||
- 合同费用明细管理
|
||
- 合同变更管理
|
||
- 合同到期预警(定时任务)
|
||
- 合同续签功能
|
||
- 合同终止功能
|
||
- 合同附件上传与PDF预览
|
||
- 合同签订后自动生成账单
|
||
|
||
**合同类型支持 (14种)**
|
||
|
||
| 类型 | 编码 | 适用场景 |
|
||
| ---------------- | ----------------- | ---------------- |
|
||
| 物业服务合同 | PROPERTY_SERVICE | 物业公司与业委会 |
|
||
| 前期物业服务合同 | PRE_PROPERTY | 开发商与物业公司 |
|
||
| 住宅租赁合同 | RESIDENTIAL_LEASE | 住宅出租 |
|
||
| 商业租赁合同 | COMMERCIAL_LEASE | 商铺/写字楼 |
|
||
| 车位租赁合同 | PARKING_LEASE | 车位出租 |
|
||
| 保洁服务合同 | CLEANING_SERVICE | 第三方保洁公司 |
|
||
| 安保服务合同 | SECURITY_SERVICE | 第三方安保公司 |
|
||
| 绿化养护合同 | LANDSCAPE_SERVICE | 第三方绿化公司 |
|
||
| 电梯维保合同 | ELEVATOR_SERVICE | 电梯维保公司 |
|
||
| 消防维保合同 | FIRE_SERVICE | 消防维保公司 |
|
||
| 垃圾清运合同 | WASTE_SERVICE | 环卫公司 |
|
||
| 广告位租赁合同 | ADVERTISEMENT | 广告位出租 |
|
||
| 场地租赁合同 | VENUE_RENTAL | 临时活动场地 |
|
||
| 其他合同 | OTHER | 其他类型 |
|
||
|
||
**相关文档**
|
||
|
||
- [合同管理规格说明书](../09-BUSINESS_IMPLEMENTATION_MAPPING/02-主数据管理/05-合同管理.md)
|
||
- [合同管理任务清单](../09-BUSINESS_IMPLEMENTATION_MAPPING/02-主数据管理/05-合同管理-task_list.md)
|
||
- [合同管理检查清单](../09-BUSINESS_IMPLEMENTATION_MAPPING/02-主数据管理/05-合同管理-checklist.md)
|
||
- [合同管理完善规格说明书](../09-BUSINESS_IMPLEMENTATION_MAPPING/02-主数据管理/05-合同管理-完善规格说明书.md)
|
||
- [合同管理AI分析方案设计](../09-BUSINESS_IMPLEMENTATION_MAPPING/02-主数据管理/05-合同管理-AI分析方案设计.md)
|
||
|
||
**单元测试**
|
||
|
||
- [x] ContractServiceTest - 18个测试用例,覆盖合同生命周期所有操作
|
||
- [x] ContractControllerTest - 14个测试用例,覆盖所有API接口
|
||
|
||
**测试结果**
|
||
|
||
```
|
||
Tests run: 32, Failures: 0, Errors: 0, Skipped: 0
|
||
BUILD SUCCESS
|
||
```
|
||
|
||
---
|
||
|
||
## 三、模块架构
|
||
|
||
根据领域驱动设计,项目分为以下模块:
|
||
|
||
```
|
||
ether-platform/
|
||
├── ether-gateway/ # API 网关
|
||
├── ether-auth/ # 认证中心
|
||
├── ether-mdm/ # 空间主数据 (4.1)
|
||
│ ├── SpaceNode # 空间节点
|
||
│ ├── RoomDetail # 房间详情
|
||
│ ├── Ownership # 产权信息
|
||
│ ├── Visitor # 访客管理
|
||
│ ├── Inspection # 巡检管理
|
||
│ └── Contract # 合同管理
|
||
├── ether-ops/ # 运营调度 (4.2)
|
||
│ ├── WorkOrder # 工单系统
|
||
│ └── Notification # 通知系统
|
||
├── ether-asset/ # 设施设备 (4.3)
|
||
│ └── Equipment # 设备台账
|
||
└── ether-finance/ # 财务计费 (4.4)
|
||
├── FeeItem # 收费项目
|
||
├── FeeBill # 收费账单
|
||
└── FeePayment # 支付记录
|
||
```
|
||
|
||
### API 路由映射
|
||
|
||
| 模块 | 路由前缀 | 说明 |
|
||
| ------------- | -------------------- | ---------- |
|
||
| ether-auth | `/api/v1/auth/**` | 认证相关 |
|
||
| ether-mdm | `/api/v1/mdm/**` | 主数据管理 |
|
||
| ether-ops | `/api/v1/ops/**` | 运营调度 |
|
||
| ether-asset | `/api/v1/asset/**` | 设施设备 |
|
||
| ether-finance | `/api/v1/finance/**` | 财务计费 |
|
||
|
||
---
|
||
|
||
## 四、下一阶段工作规划
|
||
|
||
### Phase 1: 完善现有功能联动(已完成)✅
|
||
|
||
**目标**: 完善现有模块的联动功能
|
||
|
||
1. **设备与工单联动** ✅
|
||
- ✅ 设备故障自动创建维修工单
|
||
- ⏭️ 工单关联设备信息展示(待开发)
|
||
- ⏭️ 设备维修历史查询(待开发)
|
||
|
||
2. **巡检与工单联动** ✅
|
||
- ✅ 巡检异常自动创建工单
|
||
- ⏭️ 巡检任务与工单状态同步(待开发)
|
||
|
||
3. **收费管理优化** ✅
|
||
- ✅ 费用催缴通知
|
||
- ✅ 逾期费用计算
|
||
- ⏭️ 费用报表导出(待开发)
|
||
|
||
4. **消息通知系统** ✅
|
||
- ✅ 通知渠道管理
|
||
- ✅ 消息模板管理
|
||
- ✅ 通知规则管理
|
||
- ✅ 消息历史记录
|
||
- ✅ 与工单系统集成(已完成)
|
||
|
||
### Phase 2: 权限与账户领域完善(已完成)✅
|
||
|
||
**目标**: 实现 RBAC 权限模型和项目隔离
|
||
|
||
1. **系统配置管理** ✅
|
||
- ✅ EtherProperties 统一配置管理
|
||
- ✅ 访客凭证配置(过期时间、签名算法)
|
||
- ✅ 系统配置(版本、超级管理员角色编码)
|
||
|
||
2. **项目隔离实现** ✅
|
||
- ✅ Gateway 自动注入 project_id(X-Project-Id Header)
|
||
- ✅ ProjectContextHolder ThreadLocal 上下文
|
||
- ✅ ProjectContextInterceptor 拦截器
|
||
- ✅ 超级管理员跳过项目隔离(基于 RBAC 判断)
|
||
|
||
3. **访客凭证系统** ✅
|
||
- ✅ VisitorCredential 实体和 CredentialStatus 枚举
|
||
- ✅ 二维码生成与验证(格式:VC:{credentialId}:{timestamp}:{signature})
|
||
- ✅ HmacSHA256 签名验证
|
||
- ✅ VisitorCredentialService 业务逻辑
|
||
- ✅ VisitorCredentialController API 接口
|
||
- ✅ 数据库表 auth_visitor_credential
|
||
|
||
4. **操作日志审计系统** ✅
|
||
- ✅ OperationLog 实体
|
||
- ✅ @LogOperation 注解
|
||
- ✅ OperationLogAspect AOP 切面
|
||
- ✅ 敏感字段脱敏(password, salt, idCard, phone)
|
||
- ✅ 用户维度查询(by-user)
|
||
- ✅ 业务维度查询(by-project, by-business)
|
||
- ✅ 数据库表 auth_operation_log
|
||
- ⏭️ 自动归档(待系统开发完成后实现)
|
||
|
||
### Phase 3: 移动端适配(已完成)✅
|
||
|
||
**目标**: 支持移动端访问,方便现场人员使用
|
||
|
||
**完成状态**: ✅ 已完成
|
||
|
||
1. **响应式布局优化** ✅
|
||
- ✅ 适配手机、平板屏幕
|
||
- ✅ 触摸友好的交互
|
||
|
||
2. **员工端 H5/App** ✅
|
||
- ✅ 工单接单、处理
|
||
- ✅ 巡检任务执行
|
||
- ✅ 访客登记
|
||
- ✅ 通知接收
|
||
|
||
3. **业主端 H5/App** ✅
|
||
- ✅ 账单查询
|
||
- ✅ 在线缴费
|
||
- ✅ 报修提交
|
||
- ✅ 访客预约
|
||
|
||
4. **扫码功能** ✅
|
||
- ✅ 设备扫码查看
|
||
- ✅ 扫码报修
|
||
- ✅ 访客扫码通行
|
||
|
||
5. **消息推送** ✅
|
||
- ✅ 工单提醒
|
||
- ✅ 缴费提醒
|
||
- ✅ 巡检提醒
|
||
|
||
### Phase 4: 集成中心(优先级:中)
|
||
|
||
**目标**: 对接外部系统和 IoT 设备
|
||
|
||
**完成状态**: ⏳ 开发中
|
||
|
||
1. **停车系统集成** ⏳
|
||
- ⏭️ 车牌识别接口
|
||
- ⏭️ 车位状态同步
|
||
|
||
2. **门禁系统集成** ⏳
|
||
- ⏭️ 访客二维码下发
|
||
- ⏭️ 通行记录上报
|
||
|
||
3. **IoT 传感器接入** ⏳
|
||
- ⏭️ MQTT 消息监听
|
||
- ⏭️ 设备故障自动报警
|
||
|
||
---
|
||
|
||
## 三、功能实现进度
|
||
|
||
### 模块完成度统计
|
||
|
||
| 模块 | 功能 | 完成度 | 说明 |
|
||
| ------------------ | ---------------------------- | ------ | ---------------------- |
|
||
| M01 空间与资产管理 | 项目管理、空间节点、业主管理 | 100% | |
|
||
| M01 空间与资产管理 | 租户管理 | 100% | 已实现,需求文档待更新 |
|
||
| M02 设施设备管理 | 设备台账、维修工单 | 100% | |
|
||
| M03 运营调度 | 工单、巡检、访客 | 100% | |
|
||
| M04 巡检管理 | 巡检计划、任务、记录 | 100% | |
|
||
| M05 访客管理 | 预约、登记、凭证、黑名单 | 100% | 已实现,需求文档待更新 |
|
||
| M06 财务计费 | 账单、收费、催缴 | 95% | 在线支付已实现,待集成 |
|
||
| M07 权限与账户 | 用户、角色、权限 | 100% | |
|
||
|
||
---
|
||
|
||
## 五、待开发任务清单
|
||
|
||
### 高优先级
|
||
|
||
- [ ] 业主端小程序/APP
|
||
- [ ] 工单关联设备信息展示
|
||
- [ ] 设备维修历史查询
|
||
- [ ] 费用报表导出
|
||
|
||
### 中优先级
|
||
|
||
- [ ] 报表统计功能
|
||
- [ ] 数据导入导出
|
||
- [x] 系统配置管理 ✅ (2026-02-10 完成)
|
||
- [x] 操作日志审计 ✅ (2026-02-10 完成,自动归档待后续实现)
|
||
|
||
### 低优先级
|
||
|
||
- [ ] 短信通知渠道
|
||
- [ ] 邮件通知渠道
|
||
- [ ] 推送通知渠道
|
||
- [ ] 第三方系统集成
|
||
|
||
---
|
||
|
||
## 六、测试统计
|
||
|
||
### 后端测试
|
||
|
||
```
|
||
WorkOrderTest ................... 5 tests ✅
|
||
WorkOrderEnumsTest .............. 12 tests ✅
|
||
WorkOrderRepositoryTest ......... 12 tests ✅
|
||
WorkOrderServiceTest ............ 26 tests ✅
|
||
WorkOrderControllerTest ......... 19 tests ✅
|
||
WorkOrderFlowTest ............... 6 tests ✅
|
||
WorkOrderFlowRepositoryTest ..... 6 tests ✅
|
||
WorkOrderIntegrationTest ........ 6 tests ✅
|
||
WorkOrderStatisticsServiceTest .. 10 tests ✅
|
||
-------------------------------------------
|
||
Total ........................... 103 tests ✅
|
||
```
|
||
|
||
###
|
||
|
||
前端测试
|
||
|
||
```
|
||
work-order.test.ts .............. 19 tests ✅
|
||
WorkOrderList.spec.ts ........... 13 tests ✅
|
||
WorkOrderForm.spec.ts ........... 11 tests ✅
|
||
-------------------------------------------
|
||
Total ........................... 43 tests ✅
|
||
```
|
||
|
||
---
|
||
|
||
## 七、开发规范
|
||
|
||
### 代码规范
|
||
|
||
- 使用 Lombok 简化代码
|
||
- 遵循 RESTful API 设计规范
|
||
- 统一返回结果封装 (Result)
|
||
- 异常统一处理
|
||
|
||
### 数据库规范
|
||
|
||
- 表名使用下划线命名
|
||
- 字段名使用下划线命名
|
||
- 必须包含 created_at, updated_at 字段
|
||
- 使用 UUID 作为主键
|
||
|
||
### 接口规范
|
||
|
||
- 统一前缀: /api/v1/{module}
|
||
- 使用 HTTP 方法区分操作
|
||
- 请求参数使用 DTO 封装
|
||
- 返回结果使用 VO 封装
|
||
|
||
---
|
||
|
||
## 八、Bug修复记录
|
||
|
||
### 2026-02-10 - 前端页面报错修复
|
||
|
||
#### 问题汇总
|
||
|
||
| 页面 | 问题 | 原因 | 解决方案 |
|
||
| -------- | ---------------- | ------------------------------------------------------------ | ------------------------------------------------- |
|
||
| 设备管理 | 404 错误 | 前端导入 `api/asset/equipment`,后端只有 `api/mdm/equipment` | 修改导入路径为 `api/mdm/equipment` |
|
||
| 访客管理 | 404 错误 | 后端 `VisitorController` 缺少 `/api/v1` 前缀 | 修改 `@RequestMapping("/api/v1/mdm/visitors")` |
|
||
| 工单统计 | echarts 导入错误 | 项目未安装 echarts 依赖 | `npm install echarts --save` 并重启开发服务器 |
|
||
| 角色管理 | 页面加载失败 | 使用 Element Plus 组件,但项目只安装了 Ant Design Vue | 将 Element Plus 组件替换为 Ant Design Vue |
|
||
| 巡检管理 | 404 错误 | 后端 `InspectionController` 缺少 `/api/v1` 前缀 | 修改 `@RequestMapping("/api/v1/mdm/inspections")` |
|
||
|
||
#### 解决方案文档
|
||
|
||
- 已创建《前端开发规范》文档:`docs/02-设计文档/公共规范/前端开发规范.md`
|
||
- 包含:组件库规范、API路径规范、依赖管理规范、问题解决方案记录
|
||
|
||
### 2026-02-10 - 前端路由跳转问题修复
|
||
|
||
#### 问题描述
|
||
|
||
**症状**: 点击侧边栏菜单,页面没有切换,URL 保持不变。
|
||
|
||
**根本原因**:
|
||
|
||
1. 菜单点击使用 `router.push({ name: key })`,但动态路由的 `name` 可能未正确注册
|
||
2. 动态路由添加后,使用 `name` 导航可能找不到对应路由
|
||
|
||
**解决方案**:
|
||
|
||
```typescript
|
||
// 修改前:使用 name 导航
|
||
const handleMenuClick = ({ key }: { key: string }) => {
|
||
router.push({ name: key });
|
||
};
|
||
|
||
// 修改后:使用 path 导航
|
||
const handleMenuClick = ({ key }: { key: string }) => {
|
||
const menu = findMenuByComponentName(menus, key);
|
||
if (menu?.menuPath) {
|
||
router.push(menu.menuPath);
|
||
}
|
||
};
|
||
```
|
||
|
||
**相关文件**:
|
||
|
||
- `src/views/layout/index.vue` - 菜单点击处理
|
||
- `src/router/index.ts` - 动态路由生成
|
||
|
||
**文档更新**:
|
||
|
||
- 已创建《前端路由最佳实践》文档:`docs/04-技术方案/ROUTING_BEST_PRACTICES.md`
|
||
- 包含:路由架构设计、常见问题解决方案、开发规范
|
||
|
||
### 2026-02-10 - 访客凭证功能完善
|
||
|
||
#### 前端表单提交修复
|
||
|
||
**问题**: 表单提交后弹窗不关闭,无法显示生成的二维码
|
||
|
||
**根本原因**: request 拦截器已经解包了响应数据,但前端代码还在检查 `res.code === 200`
|
||
|
||
**修复内容**:
|
||
|
||
```typescript
|
||
// 修改前
|
||
const res = await visitorCredentialApi.generateCredential(submitData);
|
||
if (res.code === 200) { // 错误
|
||
...
|
||
}
|
||
|
||
// 修改后
|
||
const res = await visitorCredentialApi.generateCredential(submitData);
|
||
message.success("凭证生成成功");
|
||
generateModalVisible.value = false;
|
||
fetchCredentials();
|
||
resetForm();
|
||
if (res) {
|
||
currentCredential.value = res;
|
||
qrCodeModalVisible.value = true;
|
||
}
|
||
```
|
||
|
||
**相关文件**:
|
||
|
||
- `src/views/mdm/visitor/components/VisitorCredential.vue`
|
||
- `src/api/mdm/visitor.ts`
|
||
|
||
#### @LogOperation 注解完善
|
||
|
||
**添加范围**:
|
||
|
||
| Controller | 方法数 | 说明 |
|
||
| --------------------------- | ------ | ---------------------------------------------- |
|
||
| AuthController | 5 | 登录、注册、刷新Token、登出、获取权限 |
|
||
| PermissionController | 17 | 角色管理、权限管理、角色权限分配、用户角色分配 |
|
||
| VisitorCredentialController | 6 | 生成、查询、撤销、验证、清理凭证 |
|
||
|
||
**使用示例**:
|
||
|
||
```java
|
||
@LogOperation(
|
||
module = "访客管理",
|
||
operation = "CREATE",
|
||
description = "生成访客凭证",
|
||
businessType = "VISITOR_CREDENTIAL"
|
||
)
|
||
public ResponseEntity<VisitorCredentialResponse> generateCredential(...) { ... }
|
||
```
|
||
|
||
**验证结果**:
|
||
|
||
- ✅ 前端表单提交正常,弹窗关闭并显示二维码
|
||
- ✅ 操作日志正确记录到数据库
|
||
- ✅ 敏感字段自动脱敏(password, idCard, phone 等)
|
||
|
||
### 2026-02-10 - 前端功能完善
|
||
|
||
#### 前端验证凭证功能
|
||
|
||
**修复内容**:
|
||
|
||
- 修复 API 响应处理逻辑(移除 `res.code === 200` 检查)
|
||
- 添加成功/失败消息提示
|
||
- 验证成功后自动刷新列表
|
||
|
||
**文件**: `src/views/mdm/visitor/components/VisitorCredential.vue`
|
||
|
||
#### 前端撤销凭证功能
|
||
|
||
**修复内容**:
|
||
|
||
- 修复 API 响应处理逻辑
|
||
- 添加确认弹窗
|
||
- 撤销成功后自动刷新列表并更新统计
|
||
|
||
#### 操作日志前端页面
|
||
|
||
**新增文件**:
|
||
|
||
- `src/api/system/operationLog.ts` - 操作日志 API
|
||
- `src/views/system/operation-log/index.vue` - 操作日志页面
|
||
|
||
**功能特性**:
|
||
|
||
- 多维度筛选(模块、操作类型、业务类型、执行结果、时间范围)
|
||
- 表格展示(操作时间、操作人、模块、类型、描述、URL、执行时间、结果)
|
||
- 详情弹窗(完整日志信息、请求参数格式化展示)
|
||
- 支持查询参数高亮显示
|
||
|
||
**页面路径**: `/system/operation-logs`
|
||
|
||
#### 权限管理前端页面
|
||
|
||
**新增文件**:
|
||
|
||
- `src/api/system/permission.ts` - 权限管理 API
|
||
- `src/views/system/permission/index.vue` - 权限管理页面
|
||
|
||
**功能特性**:
|
||
|
||
- **角色管理**: 新增、编辑、删除角色,启用/禁用角色,分配权限
|
||
- **权限管理**: 新增、编辑、删除权限,启用/禁用权限
|
||
- **权限分配**: 树形结构展示权限,支持批量分配
|
||
- **数据范围**: 支持配置角色的数据访问范围(全部/项目/部门/仅本人)
|
||
|
||
**页面路径**: `/system/permissions`
|
||
|
||
#### 功能完整性总结
|
||
|
||
| 模块 | 功能 | 前端 | API | 状态 |
|
||
| -------- | ---------- | ---- | --- | ---- |
|
||
| 访客凭证 | 生成凭证 | ✅ | ✅ | 完成 |
|
||
| 访客凭证 | 查看二维码 | ✅ | ✅ | 完成 |
|
||
| 访客凭证 | 撤销凭证 | ✅ | ✅ | 完成 |
|
||
| 访客凭证 | 验证凭证 | ✅ | ✅ | 完成 |
|
||
| 访客凭证 | 查询列表 | ✅ | ✅ | 完成 |
|
||
| 访客凭证 | 清理过期 | ✅ | ✅ | 完成 |
|
||
| 操作日志 | 查询日志 | ✅ | ✅ | 完成 |
|
||
| 权限管理 | 角色管理 | ✅ | ✅ | 完成 |
|
||
| 权限管理 | 权限管理 | ✅ | ✅ | 完成 |
|
||
| 权限管理 | 权限分配 | ✅ | ✅ | 完成 |
|
||
|
||
### 2026-02-11 - E2E测试报告
|
||
|
||
#### 单元测试
|
||
|
||
**执行命令**: `npm test -- --run`
|
||
|
||
**测试结果**: ✅ 全部通过 (7/7)
|
||
|
||
- ✓ should fetch work orders by project
|
||
- ✓ should create work order
|
||
- ✓ should update work order
|
||
- ✓ should delete work order
|
||
- ✓ should search work orders
|
||
- ✓ should fetch work order detail
|
||
- ✓ should handle API errors
|
||
|
||
#### E2E功能测试
|
||
|
||
**测试环境**:
|
||
|
||
- 前端: http://localhost:5174
|
||
- 后端: http://localhost:8081
|
||
- 浏览器: Chrome DevTools MCP
|
||
|
||
**测试用例执行结果**:
|
||
|
||
| 模块 | 功能 | 测试结果 | 备注 |
|
||
| -------- | ---------- | --------- | ---------------------------- |
|
||
| 访客凭证 | 页面加载 | ✅ 通过 | 统计数据正确显示 |
|
||
| 访客凭证 | 生成凭证 | ✅ 通过 | 弹窗关闭,列表刷新,统计更新 |
|
||
| 访客凭证 | 查看二维码 | ✅ 通过 | 弹窗显示二维码和凭证信息 |
|
||
| 访客凭证 | 撤销凭证 | ✅ 通过 | 状态变更,统计更新 |
|
||
| 访客凭证 | 验证凭证 | ✅ 通过 | API测试通过 |
|
||
| 操作日志 | API查询 | ✅ 通过 | 支持多维度筛选 |
|
||
| 权限管理 | 页面加载 | ⚠️ 受限 | 需要权限配置 |
|
||
| 权限管理 | 创建角色 | ⚠️ 需修复 | 已添加 projectId 传递 |
|
||
|
||
**发现的问题**:
|
||
|
||
1. **权限管理页面访问受限** - 当前用户没有权限管理权限,需要配置角色权限
|
||
2. **创建角色缺少 projectId** - 已修复,添加 permissionStore 获取当前项目ID
|
||
|
||
**修复记录**:
|
||
|
||
| 问题 | 修复文件 | 修复内容 |
|
||
| ---------------------- | --------------------------------------- | ------------------------------------------ |
|
||
| 创建角色缺少 projectId | `src/views/system/permission/index.vue` | 添加 permissionStore,提交时包含 projectId |
|
||
|
||
### 2026-02-11 - 权限控制机制验证
|
||
|
||
#### 权限控制实现状态
|
||
|
||
**已实现的权限控制机制**:
|
||
|
||
| 控制层级 | 实现方式 | 状态 | 说明 |
|
||
| -------- | ------------------- | --------- | -------------------------- |
|
||
| 菜单级 | 后端返回菜单列表 | ✅ 已生效 | 用户只能看到后端返回的菜单 |
|
||
| 路由级 | 路由守卫检查 | ✅ 已生效 | 无权限访问时重定向到首页 |
|
||
| 按钮级 | `v-permission` 指令 | ✅ 已生效 | 无权限时按钮不渲染 |
|
||
| API级 | 后端权限校验 | ✅ 已生效 | 返回 403 无权限访问 |
|
||
|
||
**验证结果**:
|
||
|
||
1. **菜单级权限控制** ✅
|
||
- 后端 `user-permissions` 接口只返回用户有权限的菜单
|
||
- Layout 组件根据 `permissionStore.menus` 渲染菜单
|
||
- 当前用户没有权限管理菜单,所以看不到
|
||
|
||
2. **路由级权限控制** ✅
|
||
- `permissionGuard.ts` 检查 `to.meta.permission`
|
||
- 无权限时跳转到 403 页面
|
||
- 当前用户访问 `/system/permissions` 被正确拦截
|
||
|
||
3. **按钮级权限控制** ✅
|
||
- `v-permission` 指令已注册
|
||
- 支持 `v-permission="'code'"`、`v-permission:all`、`v-permission:any`
|
||
- 无权限时元素被移除
|
||
|
||
4. **API级权限控制** ✅
|
||
- 后端接口返回 403
|
||
- 验证:`/api/v1/auth/user-permissions` 返回 403
|
||
|
||
#### 权限控制使用说明
|
||
|
||
**1. 菜单权限控制**:
|
||
|
||
```typescript
|
||
// 后端返回的菜单数据控制显示
|
||
// 只有后端返回的菜单才会显示在侧边栏
|
||
```
|
||
|
||
**2. 路由权限控制**:
|
||
|
||
```typescript
|
||
// 在路由配置中添加 permission 元数据
|
||
{
|
||
path: '/system/permissions',
|
||
meta: {
|
||
permission: 'system:permission:view' // 需要此权限才能访问
|
||
}
|
||
}
|
||
```
|
||
|
||
**3. 按钮权限控制**:
|
||
|
||
```vue
|
||
<!-- 单个权限 -->
|
||
<a-button v-permission="'system:permission:create'">新增</a-button>
|
||
|
||
<!-- 需要所有权限 -->
|
||
<a-button
|
||
v-permission:all="['system:permission:edit', 'system:permission:admin']"
|
||
>编辑</a-button>
|
||
|
||
<!-- 需要任意权限 -->
|
||
<a-button
|
||
v-permission:any="['system:permission:edit', 'system:permission:view']"
|
||
>查看</a-button>
|
||
```
|
||
|
||
**4. 代码级权限检查**:
|
||
|
||
```typescript
|
||
const permissionStore = usePermissionStore();
|
||
|
||
// 检查是否有权限码
|
||
if (permissionStore.hasPermissionCode("system:permission:create")) {
|
||
// 有权限
|
||
}
|
||
|
||
// 检查是否有任意权限
|
||
if (permissionStore.hasAnyPermission(["code1", "code2"])) {
|
||
// 有权限
|
||
}
|
||
|
||
// 检查是否有所有权限
|
||
if (permissionStore.hasAllPermissions(["code1", "code2"])) {
|
||
// 有权限
|
||
}
|
||
```
|
||
|
||
### 2026-02-11 - 超级管理员权限修复
|
||
|
||
#### 问题分析
|
||
|
||
系统初始化时创建了超级管理员,但超级管理员无法看到权限管理菜单:
|
||
|
||
1. **DataInitializer** 使用 `SYSTEM_PROJECT_ID` (00000000-0000-0000-0000-000000000000) 作为系统项目ID
|
||
2. **PermissionService.getUserPermissions** 使用 `findPermissionsByUserIdAndProjectId` 查询权限
|
||
3. 该查询方法通过 `UserRole` 关联查询,但超级管理员的权限直接绑定在系统项目上
|
||
|
||
#### 修复方案
|
||
|
||
修改 `PermissionService.getUserPermissions` 方法,为超级管理员特殊处理:
|
||
|
||
```java
|
||
// 检查是否是超级管理员
|
||
boolean isSuperAdmin = userRoles.stream()
|
||
.anyMatch(ur -> {
|
||
Role role = roleRepository.findById(ur.getRoleId()).orElse(null);
|
||
return role != null && "SUPER_ADMIN".equals(role.getRoleCode());
|
||
});
|
||
|
||
// 获取权限时特殊处理
|
||
for (UUID projectId : projectIds) {
|
||
List<Permission> permissions;
|
||
if (isSuperAdmin && SYSTEM_PROJECT_ID.equals(projectId)) {
|
||
// 超级管理员获取系统项目的所有权限
|
||
permissions = permissionRepository.findByProjectIdAndEnabledTrueOrderByModuleAscSortOrderAsc(projectId);
|
||
} else {
|
||
permissions = permissionRepository
|
||
.findPermissionsByUserIdAndProjectId(userId, projectId);
|
||
}
|
||
// ...
|
||
}
|
||
```
|
||
|
||
#### 修复文件
|
||
|
||
| 文件 | 修改内容 |
|
||
| ------------------------------------------------------------------------ | ------------------------------------------------ |
|
||
| `ether-auth/src/main/java/com/ether/auth/service/PermissionService.java` | 添加超级管理员判断,使用直接查询获取系统项目权限 |
|
||
|
||
#### 系统初始化数据
|
||
|
||
**超级管理员账号**: admin / admin123
|
||
|
||
**初始化权限包括**:
|
||
|
||
- 系统管理:项目管理、用户管理、角色管理、权限管理
|
||
- 主数据:空间节点、业主、设备、巡检、访客、收费
|
||
- 运维:工单管理、工单统计
|
||
- 消息:消息中心、通知配置
|
||
|
||
### 2026-02-11 - 网关和CORS配置修复 ✅
|
||
|
||
#### 修复内容
|
||
|
||
**1. 网关配置修复**
|
||
|
||
| 文件 | 修改内容 |
|
||
| ----------------------------------------------------------------------------------- | -------------------------------- |
|
||
| `ether-gateway/src/main/resources/application.yml` | 使用直接URL路由替代Nacos服务发现 |
|
||
| `ether-gateway/src/main/java/com/ether/gateway/filter/JwtAuthenticationFilter.java` | 更新注释说明公开路径 |
|
||
|
||
**2. 前端API地址修复**
|
||
|
||
| 文件 | 修改内容 |
|
||
| --------------------------------- | ---------------------------------------------------- |
|
||
| `ether-ui-admin/.env.development` | 修改 `VITE_API_BASE_URL` 从 `8081` 到 `8080`(网关) |
|
||
|
||
**3. CORS配置调整**
|
||
|
||
| 文件 | 修改内容 |
|
||
| ---------------------------------------------------------------- | ---------------------------------- |
|
||
| `ether-auth/src/main/java/com/ether/auth/config/CorsConfig.java` | 禁用CORS配置,由网关统一处理 |
|
||
| `ether-gateway/src/main/resources/application.yml` | 启用网关全局CORS配置,统一处理跨域 |
|
||
|
||
**4. 权限管理Controller修复**
|
||
|
||
| 文件 | 修改内容 |
|
||
| ------------------------------------------------------------------------------ | ----------------------------------------------------------------- |
|
||
| `ether-auth/src/main/java/com/ether/auth/controller/PermissionController.java` | 修复createRole和createPermission方法,优先使用前端传递的projectId |
|
||
|
||
#### 服务架构
|
||
|
||
```
|
||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||
│ Frontend │────▶│ Gateway │────▶│ Auth │
|
||
│ :5175 │ │ :8080 │ │ :8081 │
|
||
└─────────────┘ └─────────────┘ └─────────────┘
|
||
│
|
||
▼
|
||
┌─────────────┐
|
||
│ Other │
|
||
│ Services │
|
||
└─────────────┘
|
||
```
|
||
|
||
#### CORS配置策略
|
||
|
||
- **网关层**: 统一处理所有跨域请求
|
||
- **下游服务**: 禁用CORS配置,避免重复添加CORS头
|
||
|
||
#### 验证结果
|
||
|
||
| 功能 | 状态 | 说明 |
|
||
| ---------------- | ---- | ---------------- |
|
||
| 超级管理员登录 | ✅ | 成功 |
|
||
| 权限管理菜单显示 | ✅ | 成功显示所有菜单 |
|
||
| 权限管理页面访问 | ✅ | 成功 |
|
||
| 新增角色 | ✅ | 成功创建角色 |
|
||
|
||
---
|
||
|
||
### 2026-02-11 - 超级管理员菜单显示修复 ✅
|
||
|
||
#### 问题描述
|
||
|
||
超级管理员登录后,左侧菜单上方显示"项目 00000000"项目选择器,并且显示了所有业务功能菜单(空间节点、业主、设备等),这是不正确的。超级管理员应该只能看到系统级管理菜单。
|
||
|
||
#### 修复内容
|
||
|
||
**1. 后端DTO修改**
|
||
|
||
| 文件 | 修改内容 |
|
||
| -------------------------------------------------------------------------- | -------------------------------------------- |
|
||
| `ether-auth/src/main/java/com/ether/auth/dto/UserPermissionsResponse.java` | ProjectInfo 添加 `isSystem` 字段标识系统项目 |
|
||
|
||
**2. 后端Service修改**
|
||
|
||
| 文件 | 修改内容 |
|
||
| ------------------------------------------------------------------------ | ------------------------------------------------ |
|
||
| `ether-auth/src/main/java/com/ether/auth/service/PermissionService.java` | buildProjectInfo 方法对系统项目返回特殊标识 |
|
||
| `ether-auth/src/main/java/com/ether/auth/service/PermissionService.java` | 添加 `isSystemManagementPermission` 方法过滤权限 |
|
||
| `ether-auth/src/main/java/com/ether/auth/service/PermissionService.java` | getUserPermissions 方法只返回系统管理相关权限 |
|
||
|
||
**3. 前端Store修改**
|
||
|
||
| 文件 | 修改内容 |
|
||
| ----------------------------------------- | ------------------------------- |
|
||
| `ether-ui-admin/src/stores/permission.ts` | 添加 `isSystemAdmin` 计算属性 |
|
||
| `ether-ui-admin/src/stores/permission.ts` | 修改 `hasProjects` 排除系统项目 |
|
||
|
||
**4. 前端路由修改**
|
||
|
||
| 文件 | 修改内容 |
|
||
| ------------------------------------ | ---------------------------------------------- |
|
||
| `ether-ui-admin/src/router/index.ts` | 路由守卫允许系统管理员访问,不跳转到无项目页面 |
|
||
|
||
#### 修复原理
|
||
|
||
1. **后端识别系统项目**: 当项目是系统项目(00000000-0000-0000-0000-000000000000)时,返回 `isSystem: true`
|
||
2. **后端过滤权限**: 超级管理员只返回 `system:` 和 `msg:` 开头的权限(系统管理和消息中心)
|
||
3. **前端识别系统管理员**: 通过 `isSystemAdmin` 计算属性判断用户是否只有系统项目
|
||
4. **隐藏项目选择器**: 当 `hasProjects` 为 false(只有系统项目)时,不显示项目选择器
|
||
5. **允许访问菜单**: 系统管理员可以正常访问系统管理菜单,不会被重定向到无项目页面
|
||
|
||
#### 超级管理员菜单结构
|
||
|
||
超级管理员现在只能看到以下 6 个系统管理菜单:
|
||
|
||
| 序号 | 菜单名称 | 权限编码前缀 |
|
||
| ---- | -------- | ------------ |
|
||
| 1 | 项目管理 | system: |
|
||
| 2 | 用户管理 | system: |
|
||
| 3 | 角色管理 | system: |
|
||
| 4 | 权限管理 | system: |
|
||
| 5 | 消息中心 | msg: |
|
||
| 6 | 通知配置 | msg: |
|
||
|
||
**不再显示的业务功能菜单:**
|
||
|
||
- ❌ 空间节点管理 (mdm:)
|
||
- ❌ 业主管理 (mdm:)
|
||
- ❌ 设备管理 (mdm:)
|
||
- ❌ 巡检管理 (mdm:)
|
||
- ❌ 访客管理 (mdm:)
|
||
- ❌ 收费管理 (mdm:)
|
||
- ❌ 工单管理 (ops:)
|
||
- ❌ 工单统计 (ops:)
|
||
|
||
#### 验证结果
|
||
|
||
| 功能 | 状态 | 说明 |
|
||
| ------------------ | ---- | ------------------------ |
|
||
| 超级管理员登录 | ✅ | 成功 |
|
||
| 不显示项目选择器 | ✅ | 左侧菜单上方无项目下拉框 |
|
||
| 只显示系统管理菜单 | ✅ | 仅 6 个系统管理菜单 |
|
||
| 不显示业务功能菜单 | ✅ | 无 mdm: 和 ops: 相关菜单 |
|
||
| 权限管理功能正常 | ✅ | 可以创建角色、权限等 |
|
||
|
||
---
|
||
|
||
## 九、历史计划归档
|
||
|
||
以下计划文档已完成,仅作历史参考:
|
||
|
||
| 计划文档 | 完成状态 | 说明 |
|
||
| ------------------------------------------ | --------- | --------------- |
|
||
| 2026-02-05-project-initialization.md | ✅ 已完成 | 项目初始化计划 |
|
||
| 2026-02-06-frontend-ether-ui-admin.md | ✅ 已完成 | 前端开发计划 |
|
||
| 2026-02-06-jwt-auth-gateway-interceptor.md | ✅ 已完成 | JWT认证计划 |
|
||
| 2026-02-06-mdm-auth-implementation.md | ✅ 已完成 | MDM认证实现计划 |
|
||
| 2026-02-06-work-order-system.md | ✅ 已完成 | 工单系统计划 |
|
||
| 2026-02-08-notification-system-plan.md | ✅ 已完成 | 通知系统计划 |
|
||
| 2026-02-08-tdd-development-plan.md | ✅ 已完成 | TDD开发计划 |
|
||
|
||
---
|
||
|
||
**文档维护**: 本文档为项目进度的唯一权威文档,所有进度更新请直接修改此文件。
|