资源管理示例(组合示例)
本页不是新组件:演示如何用
oas-resource(泳道 + 负载直方图)+oas-card(资源卡)+oas-checkbox(任务分配表)加纯函数levelResources()组合出一个可交互的资源管理页。资源卡与分配表都属宿主层(页面脚本实现),组件只负责泳道/直方图渲染、超载检测与平衡计算。
可运行的组合示例
资源管理页:卡片 + 分配表 + 泳道负载 + 一键平衡(改分配即重算)
张三
李四
王五
| 任务 | 日期 | 张三 | 李四 | 王五 |
|---|
- 改分配即重算:勾选 / 取消分配表中的资源,任务分配立即写回
tasks,泳道、负载直方图与资源卡同步重算。 - 一键平衡:调用纯函数
levelResources()——保工期、只后移不前移;结果按 id 合并回数据(不整体替换),被后移的任务在日期列标注「已后移 +N 天」。 - 超载状态行:初始与每次重算后由宿主按直方图红柱(
.pillar.over)刷新;oas-overload事件在超载态变化时同步更新(无超载不派发,宿主需自行兜底刷新)。
宿主层实现要点
ts
import { levelResources } from '@oas-ui/ui'
// 返回的只是被后移的任务(新日期)——按 id 合并回数据,不得整体替换
const moved = levelResources(resources, tasks, { scale: 'day' })
tasks = tasks.map((t) => moved.find((m) => m.id === t.id) ?? t)- 分配表每个
oas-checkbox的value即资源 id;勾选态由宿主从task.resources派生,oas-change(detail: { checked, value })后更新数据再重建表格。 - 资源卡的「峰值 / 超载天数」由宿主按天展开统计:峰值 = 该资源任一天的并行任务数最大值;超载天数 = 并行数 > 容量(此处容量 1)的天数。
- 本页卡片与表格样式仅为 demo 演示,颜色全部走设计 token(
--oas-color-*),暗色主题自动适配。