import { Spin } from "antd"; import { ReactNode } from "react"; interface GlobalLoadProps { /** 是否显示加载状态 */ show: boolean; /** 子元素内容 */ children?: ReactNode; /** 进度条数值 0-100,非必须 */ progress?: number; /** 旋转圆环直径,非必须 */ spinnerDiameter?: number; /** 进度条宽度,非必须 */ progressWidth?: number; /** 是否显示旋转圆圈,默认显示 */ showSpinner?: boolean; } /** * 全局加载组件,支持标签包裹形式渲染子元素 * @param props - 组件属性 * @returns 加载组件 */ export default function GlobalLoad({ show, children=<>, progress, spinnerDiameter, progressWidth, showSpinner = true, }: GlobalLoadProps) { if (!show) { return <>{children}; } // 自定义加载图标:组合两个组件 const customIndicator = (
{showSpinner && } {Boolean(progress) && }
); return (
{children}
); } /** * Tailwind CSS loading spinner component for global loading overlay. * @param diameter - Diameter of the spinner in pixels * @returns {JSX.Element} - Spinner visual. */ export const TailwindSpinner = ({ diameter = 50 }: { diameter?: number }) => { const radius = diameter / 2; return (
{/* 主旋转圆环 */}
{/* 背景模糊圆环 */}
{/* 自定义动画关键帧 */}
); }; /** * Tailwind CSS linear progress bar loader with animated light sweep. * @param progress - Progress value from 0 to 100 * @param width - Width of the progress bar in pixels * @returns {JSX.Element} - Linear loader visual. */ export const TailwindLinearLoader = ({ progress, width = 160 }: { progress: number; width?: number; }) => (
{/* Animated light sweep - position controlled by progress */}
{/* Keyframes for light sweep - no longer needed since position is controlled by progress */}
);