REAL SHOWCASE SOURCEnavigation-menu-clinical

1 个文件 · 89 行 · TypeScript

// ===== showcase/src/examples/components/navigation_menu.ts ===== import {  RenderBorder,  RenderButton,  RenderNavigationMenu,  RenderPageHeader,  RenderStackPanel,  RenderText,  type NavigationMenuGroup,} from 'ds-ui' const clinicalNavigationGroups: NavigationMenuGroup[] = [  {    key: 'clinical',    title: '临床业务',    icon: 'window',    collapsible: true,    children: [      { key: 'overview', title: '患者总览', icon: 'window', opened: true },      { key: 'records', title: '电子病历', icon: 'copy', status: 'success' },      { key: 'orders', title: '医嘱管理', icon: 'plus', badge: 6, status: 'warning' },      { key: 'critical', title: '危急值处理', icon: 'bell', badge: 2, status: 'danger' },    ],  },  {    key: 'operations',    title: '运营管理',    icon: 'settings',    collapsible: true,    children: [      { key: 'schedule', title: '排班管理', icon: 'calendar' },      { key: 'quality', title: '质控中心', icon: 'check', loading: true },      { key: 'analytics', title: '科室分析', icon: 'search', disabled: true, tooltip: '当前角色无访问权限' },    ],  },] export function createNavigationMenuExample(): RenderStackPanel {  const activeTitle = new RenderText('患者总览', { role: 'title', weight: 'semibold' })  const activeDescription = new RenderText('从侧边导航中选择业务模块;搜索会过滤分组和子项。', { role: 'secondary' })  let navigation!: RenderNavigationMenu  navigation = new RenderNavigationMenu({    title: 'Canvas HIS',    subtitle: '临床工作台',    groups: clinicalNavigationGroups,    selectedKey: 'overview',    searchPlaceholder: '搜索业务模块…',    onItemActivate: item => {      activeTitle.text = item.title      activeDescription.text = `已激活 ${item.key};选中状态、已打开标记和 badge 由导航数据独立维护。`    },    onCollapsedChange: collapsed => {      navigation.width = navigation.currentWidth      activeDescription.text = collapsed ? '导航已折叠为分组 rail,可从分组弹层选择子项。' : '导航已展开,搜索和完整标签重新可见。'    },  })  navigation.width = RenderNavigationMenu.expandedWidth   const detail = new RenderStackPanel({ orientation: 'vertical', spacing: 12, crossAxisAlignment: 'stretch' })  detail.addChild(activeTitle)  detail.addChild(activeDescription)  detail.addChild(new RenderBorder({    background: 'selected',    padding: 16,    accentSide: 'left',    child: new RenderText('当前模块内容区域:这里可装配患者列表、病历编辑器或科室运营视图。'),  }))  detail.addChild(new RenderButton({    label: '切换折叠状态',    onClick: () => {      navigation.collapsed = !navigation.collapsed      navigation.width = navigation.currentWidth    },  }))   const workspace = new RenderStackPanel({ orientation: 'horizontal', spacing: 16, crossAxisAlignment: 'stretch' })  workspace.addChild(navigation)  workspace.addChild(detail, 1)   const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 14, crossAxisAlignment: 'stretch' })  panel.addChild(new RenderPageHeader({    title: 'NavigationMenu 临床模块导航',    description: '分组导航集成搜索、折叠 rail、选中项、打开标记、badge、加载和权限状态。',  }))  panel.addChild(workspace, 1)  panel.padding = 18  return panel}