# 家庭成员与设备共享首期开发日志 操作时间:2026-09-13 操作类型:新增、扩展 影响模块:用户端 App、用户端 API、远程开发数据库 ## 操作前状态 个人中心仅显示“家庭成员与设备共享”暂未开放,没有独立页面、家庭关系、邀请确认、设备授权或审计接口。紧急联系人只能维护资料,并明确不代表设备控制或告警通知授权。 ## 具体操作 - 新增家庭成员邀请模型。邀请七天有效,受邀手机号对应的账号本人接受后才建立成员关系。 - 新增按成员、按设备保存的查看、告警和控制权限。告警或控制权限必须同时具备查看权限。 - 新增邀请、接受、拒绝、权限调整和撤销审计。审计摘要不记录完整手机号。 - 新增 `/family` 页面,按设计稿展示家庭概览、成员状态、共享设备、安全规则和固定邀请按钮。 - 个人中心入口改为真实路由。邀请、撤回和权限编辑均以服务端成功响应为准。 - 远程开发数据库执行 `migrate-family-sharing` 增量迁移,只创建家庭共享三张表、索引和中文注释。 ## 行为变化 变更前:点击入口只显示“暂未开放”。 变更后:房主可以邀请手机号、预设设备范围、撤回待确认邀请、调整成员权限或移除成员;受邀账号可以接受或拒绝。普通紧急联系人不会自动成为家庭成员,也不会自动获得设备权限。 ## 代码变更 - `backend/api/internal/models/user_family_member.go`:家庭成员、设备共享和审计模型。 - `backend/api/internal/logic/client/user/family.go`:本人隔离、邀请确认、权限替换、撤销和审计业务。 - `backend/api/internal/routers/client.go`:家庭共享用户端路由。 - `backend/api/cmd/cli/family_migration.go`、`main.go`:可重复执行的增量迁移命令。 - `apps/user_app/lib/domain/models/family_sharing.dart`:页面领域模型。 - `apps/user_app/lib/data/repositories/client_repository.dart`:家庭共享仓储调用。 - `apps/user_app/lib/ui/features/profile/family_sharing_page.dart`:独立页面及邀请、权限、撤销交互。 - `apps/user_app/lib/app/router.dart`、`profile_page.dart`:路由和个人中心入口。 - `apps/user_app/test/ui/family_sharing_page_test.dart`、`test/support/a1_fixture.dart`、`tool/a1_visual_test.dart`:页面和视觉验证。 ## 验证结果 - Go:`go test ./internal/logic/client/user ./internal/routers ./cmd/cli` 通过。 - Flutter:`flutter analyze` 无问题;家庭共享页面 2 项测试通过;320/360/390/430 宽度及 1.0/1.3 字体倍率共 8 组无溢出。 - 构建:带本地 API 地址的 Flutter Web Release 构建通过。 - 远程联调:真实账号创建待确认邀请,响应状态为 10,列表仅显示脱敏手机号;撤回成功并从活动列表消失。 - 内置浏览器:完成登录、打开 `/family`、打开邀请表单、发送邀请、查看待确认状态、二次确认撤回,并停留在撤回后的真实页面。 ## 风险评估 - 远程测试账号当前没有智能设备,未在真实数据上执行按设备授权。 - 当前只有一个已知用户端测试账号,接受/拒绝接口尚未完成双账号浏览器联调。 - 页面使用真实姓名首字头像;成员受控头像资源接口尚未接入,因此与设计稿人物照片存在差异。 - 设备远程控制能力本身仍由设备控制页面和物联网映射决定,本页授权不会绕过二次确认或设备可用性检查。