Skip to content

资源管理示例(组合示例) ​

本页不是新组件:演示如何用 oas-resource(泳道 + 负载直方图)+ oas-card(资源卡)+ oas-checkbox(任务分配表)加纯函数 levelResources() 组合出一个可交互的资源管理页。资源卡与分配表都属宿主层(页面脚本实现),组件只负责泳道/直方图渲染、超载检测与平衡计算。

可运行的组合示例 ​

资源管理页:卡片 + 分配表 + 泳道负载 + 一键平衡(改分配即重算)

张三

容量 1 · 峰值 – · 超载 – 天

李四

容量 1 · 峰值 – · 超载 – 天

王五

容量 1 · 峰值 – · 超载 – 天

任务日期张三李四王五
一键平衡重置示例数据

  • 改分配即重算:勾选 / 取消分配表中的资源,任务分配立即写回 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-*),暗色主题自动适配。

相关 ​

基于 MIT OR Apache-2.0 双许可发布