Skip to content
页面信息
📝 描述Toast 通知、动画数字翻转器和用户选择对话框
📥 导入import { Notification, Rotator, selectUser } from '@hydrooj/ui-default'

Notification, Rotator & selectUser

源码: packages/ui-default/components/notification/index.tspackages/ui-default/components/rotator/index.jspackages/ui-default/components/selectUser.tsx

三个 UI 工具:Toast 样式通知、动画数字翻转器、用户选择对话框。


Notification

ts
class Notification

双模式通知系统。静态方法(successinfowarnerror)渲染 Mantine Toast 通知。构造函数创建旧版基于 jQuery 的通知,支持可选头像、标题和点击动作。

静态方法(Mantine Toast)

方法签名说明
success(message: string, duration?: number) => string显示带勾选图标的绿色成功 Toast。
info(message: string, duration?: number) => string显示带信息图标的蓝色提示 Toast。
warn(message: string, duration?: number) => string显示带警告图标的橙色警告 Toast。
error(message: string, duration?: number) => string显示带关闭图标的红色错误 Toast。

所有静态方法委托给 @mantine/notifications,返回通知 id

实例 API(旧版 jQuery 通知)

构造函数: new Notification(options: NotificationOptions)

ts
interface NotificationOptions {
  avatar?: string;    // 头像图片 URL
  title?: string;     // 通知标题
  message: string;    // 正文内容(换行符转换为 <p> 元素)
  type?: string;      // 追加到通知元素的 CSS 类后缀
  duration?: number;  // 自动隐藏延迟(毫秒,默认 3000)
  action?: any;       // 点击回调(默认空操作)
}

方法:

方法签名说明
show(autohide?: boolean) => void显示通知;若 autohide 为 true(默认),在 duration 后自动隐藏。
hide() => void隐藏通知,200ms 过渡动画后移除 DOM 元素。
handleClick() => void点击时调用 action 回调。

Rotator

ts
class Rotator extends DOMAttachedObject

动画值显示组件,将旧值滑出、新值滑入。通过数值比较确定滑动方向 —— 较大值从下方滑入,较小值从上方滑入。

DOM 绑定: data-vjRotatorInstance(通过 DOMAttachedObject.DOMAttachKey = 'vjRotatorInstance'

构造函数: new Rotator($dom: JQuery) — 读取元素的文本内容作为初始值。

方法:

方法签名说明
setValue(value: string) => void动画过渡到新值。值未变时不执行操作。
getValue() => string返回当前显示的值。

动画行为: 旧元素滑动到 pos--abovepos--below(与进入方向相反),新元素从另一侧开始并过渡到 pos--original。每次过渡动画总时长 4000ms。


selectUser

ts
function selectUser(): Promise<any>

打开带用户自动补全字段的 prompt 对话框。返回选定的用户对象,对话框取消时返回 undefined

同时注册为全局变量 window.Hydro.components.selectUser