diff --git a/docs/dev/20261017-implementation.md b/docs/dev/20261017-implementation.md index 2ecb580..f884474 100644 --- a/docs/dev/20261017-implementation.md +++ b/docs/dev/20261017-implementation.md @@ -52,6 +52,18 @@ 本机方案存 config.json 的决定予以保留:这是设备个体偏好,不增加服务端配置或同步通道。通知/作业/叫人使用同一个 IslandApp.vue 实例及原状态机,custom 模式仅通过 Teleport 把它放到组件槽;不是固定层盖在自定义层上,也没有第二个岛窗口。主要行禁用提醒时回落到允许提醒的第一行;全部禁用时不展示提醒槽。多种内容仍服从原队列/列表规则,不会在多个位置重复投递。 +## 自定义灵动岛界面重写 + +按后续反馈,将组件栏明确收进同一个岛体:普通组件和提醒共用外层背景、圆角与阴影,嵌入提醒只保留原渲染器的内容、动画与操作,去掉原卡片的第二层背景形状。每行的普通组件与提醒上下排布,岛宽取两者中较宽的一项,避免横向累加造成留白。没有消息的通知、作业、叫人组件不占位。固定模式继续使用原有完整卡片。 + +编辑界面重写为左侧组件库、中央岛内预览、右侧当前对象设置。组件库按日常信息、消息提醒、组合容器分组,采用统一 SVG 线性图标;组件设置分为内容、外观、高级三个标签,独立外观关闭时禁用覆盖项。行名称、间距、主要行和通知开关放在行设置中,整体配色、缩放和多行选项放在整体外观中;方案复制与导入导出收在顶部菜单。 + +主设置页以两个选项选择经典或自定义灵动岛,自定义模式直接进入「编辑岛内组件」,隐藏不适用的固定宽高等选项。退出全屏编辑时,先在隐藏期间等待常态组件重新测量,避免保留行工具栏的空白高度;自然宽度测量也不再被上一轮获准窗口宽度撑住。分离多行时按实际外层留白计算尺寸。 + +新增回归检查设置标签隔离、共用岛体且无第二层形状、无消息不占位,以及退出编辑后的自然内容尺寸;关闭提醒通过原渲染器的「知道了」按钮验证。最终截图留档在 `.cache/island-rewrite-final-shots/`。 + +本轮视觉回归通过 102/102,随后补充的岛宽修正与展开可见性检查通过后台 28/28,并通过二次启动。后台最终几何检查先等待原渲染器的形变兜底和尺寸防抖完成,避免在隐藏窗口的中间动画帧判断最终尺寸。客户端构建、类型检查、lint、改动文件格式检查及文档严格构建均通过。 + ## 十项自检 1. 第三周周三第二节:ClassPlan 的规则与 ClassPlanEntry 的 timeLayoutItemId → `resolveActiveClassPlan` → `loadTermContext/resolveCurrentWeek` → `projectPlan` → `/schedules/active-week` → `refreshIslandSchedule` 的整周 IndexedDB 缓存 → `recomputeClassState` 发送当天课程 → `ComponentNode.vue` 课程表组件。 diff --git a/docs/reference.md b/docs/reference.md index 5ccf76c..e00503f 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -1566,22 +1566,25 @@ makensis 临时目录、ClassIsland 路径与日志编码等)。这里只列 [LessonsService 的启用解析](https://github.com/ClassIsland/ClassIsland/blob/master/ClassIsland/Services/LessonsService.cs)、 [组件文档](https://docs.classisland.tech/app/component/)。复刻能力与语义,不引入 .NET 或已退役插件。 -| 需求 | 实现入口 | 验收入口 | -| -------------------------------------------- | --------------------------------------------- | --------------------------------------- | -| 日课表、1–9 周轮换、四种时间点、显式位置外键 | 时间表与课表编辑页、class-plans 模块 | `packages/server/scripts/verify-v14.ts` | -| 换课/临时层/预定/群组,原表不变 | schedules 与 class-plan-groups | 同上 | -| 本机多行、多方案、组件独立设置与触摸拖动 | 设置→灵动岛→编辑布局;托盘同名入口 | `verify:desktop` 的组件布局用例 | -| 容器、规则隐藏、四档字体与外观覆盖 | 编辑器右侧设置 | 同上 + 显式视觉回归 | -| 通知/作业/叫人组件 | 主要且允许通知的行,复用 IslandApp 卡片与操作 | 原有固定模式回归 + 组件布局回归 | -| 换服务端重置退避与令牌 | config-events / client-agent | 本地假服务端心跳用例 | -| 即时远控与回执 | clients / client-agent | 冒烟假执行器;不调用系统命令 | -| 下载与安装阶段进度 | 客户端管理页/桌面关于页 | 进度 GET、ADMIN 房间事件、IPC | -| 集体成绩与转出过滤 | grades / lib/students | 临时数据库隐私与范围负断言 | -| 自动学年升级与可配周数 | 学期周次页 | dry-run、快照与事务幂等 | -| 自启动按钮与日期归档 | 系统设置页/通知日期选择器 | 注入系统适配器、Web 回归 | -| 四种内置岗位组与只读名单 | 权限组页/学生名单页 | 跨年级、跨部 403 | +| 需求 | 实现入口 | 验收入口 | +| -------------------------------------------- | ---------------------------------------------- | --------------------------------------- | +| 日课表、1–9 周轮换、四种时间点、显式位置外键 | 时间表与课表编辑页、class-plans 模块 | `packages/server/scripts/verify-v14.ts` | +| 换课/临时层/预定/群组,原表不变 | schedules 与 class-plan-groups | 同上 | +| 本机多行、多方案、组件独立设置与触摸拖动 | 设置→灵动岛→编辑岛内组件;托盘同名入口 | `verify:desktop` 的组件布局用例 | +| 容器、规则隐藏、四档字体与外观覆盖 | 右侧按内容/外观/高级分栏;行设置和整体外观独立 | 同上 + 显式视觉回归 | +| 通知/作业/叫人组件 | 主要且允许通知的行内,共用岛体和原提醒操作 | 原有固定模式回归 + 组件布局回归 | +| 换服务端重置退避与令牌 | config-events / client-agent | 本地假服务端心跳用例 | +| 即时远控与回执 | clients / client-agent | 冒烟假执行器;不调用系统命令 | +| 下载与安装阶段进度 | 客户端管理页/桌面关于页 | 进度 GET、ADMIN 房间事件、IPC | +| 集体成绩与转出过滤 | grades / lib/students | 临时数据库隐私与范围负断言 | +| 自动学年升级与可配周数 | 学期周次页 | dry-run、快照与事务幂等 | +| 自启动按钮与日期归档 | 系统设置页/通知日期选择器 | 注入系统适配器、Web 回归 | +| 四种内置岗位组与只读名单 | 权限组页/学生名单页 | 跨年级、跨部 403 | 天气组件本轮不做:没有可离线使用的数据源,验收不依赖外网。 +自定义组件栏位于灵动岛内部,提醒内容也在同一个岛体内展开,不再嵌套另一张带底色的岛卡片。 +编辑器左侧按用途添加组件、中央预览岛内排列、右侧只显示当前对象的设置;方案操作收在顶部菜单。 +主设置页选择经典或自定义灵动岛,自定义模式的组件尺寸、配色在编辑器中调整,主设置页保留位置与提醒选项。 迁移保留旧 Schedule 作为审计来源;新门面只写新模型。重复占用同一时间点的旧行无法同时成为一节课, 迁移选择同一时段 ID 最小的行,全部原行仍保留;旧数据未记录的群组、临时层和时间点名称无法恢复。 diff --git a/packages/desktop-client/src/island/ComponentIcon.vue b/packages/desktop-client/src/island/ComponentIcon.vue new file mode 100644 index 0000000..03fa9f9 --- /dev/null +++ b/packages/desktop-client/src/island/ComponentIcon.vue @@ -0,0 +1,34 @@ + + diff --git a/packages/desktop-client/src/island/ComponentInspector.vue b/packages/desktop-client/src/island/ComponentInspector.vue new file mode 100644 index 0000000..36eb17b --- /dev/null +++ b/packages/desktop-client/src/island/ComponentInspector.vue @@ -0,0 +1,254 @@ + + +