feat: 系统优化Phase2 - 面包屑导航/侧边栏间距/制度公示阅读签收/模板变量中文化/通知类型补全
- 面包屑导航组件,集成至TopNav header - 侧边栏菜单分组间距增大,分组间分隔线 - 制度公示员工阅读签收:PolicyReadRecord模型、portal路由、管理端阅读统计 - 修复Policies.tsx民主程序推进bug(字段名/API路径/参数) - 用工文本模板变量名英文转中文显示 - 通知类型TYPE_LABELS补全(RISK_ALERT/SOCIAL_INS/OVERTIME_ALERT/PAYSLIP_READY) - 通知示例数据补充 - h2标题统一为text-sm font-medium - 新增run.md
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* 错误提示横幅组件
|
||||
* 统一各页面的错误信息展示样式
|
||||
*/
|
||||
|
||||
interface ErrorBannerProps {
|
||||
/** 错误信息 */
|
||||
message: string
|
||||
/** 变体:错误(红) / 警告(黄) */
|
||||
variant?: 'error' | 'warning'
|
||||
/** 自定义 className */
|
||||
className?: string
|
||||
}
|
||||
|
||||
const variantStyles: Record<string, string> = {
|
||||
error: 'bg-red-50 text-red-700',
|
||||
warning: 'bg-amber-50 text-amber-700',
|
||||
}
|
||||
|
||||
/**
|
||||
* 错误/警告提示横幅
|
||||
*/
|
||||
export default function ErrorBanner({ message, variant = 'error', className = '' }: ErrorBannerProps) {
|
||||
return (
|
||||
<div className={`px-3 py-2 rounded-md text-xs ${variantStyles[variant]} ${className}`}>
|
||||
{message}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* 加载中组件
|
||||
* 统一各页面的"加载中..."显示
|
||||
*/
|
||||
|
||||
interface LoadingSpinnerProps {
|
||||
/** 自定义文本 */
|
||||
text?: string
|
||||
/** 容器 padding */
|
||||
className?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载中占位
|
||||
*/
|
||||
export default function LoadingSpinner({ text = '加载中...', className = 'py-16' }: LoadingSpinnerProps) {
|
||||
return (
|
||||
<div className={`text-center text-sm text-gray-400 ${className}`}>
|
||||
{text}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* 状态徽章组件
|
||||
* 统一各页面的状态标签样式,替代重复的 `px-2 py-0.5 rounded text-xs` 模式
|
||||
*/
|
||||
|
||||
interface StatusBadgeProps {
|
||||
/** 状态文本 */
|
||||
label: string
|
||||
/** 颜色变体 */
|
||||
variant?: 'success' | 'warning' | 'danger' | 'info' | 'neutral' | 'purple'
|
||||
/** 自定义 className */
|
||||
className?: string
|
||||
}
|
||||
|
||||
const variantStyles: Record<string, string> = {
|
||||
success: 'bg-green-50 text-safe',
|
||||
warning: 'bg-yellow-50 text-yellow-700',
|
||||
danger: 'bg-red-50 text-danger',
|
||||
info: 'bg-blue-50 text-blue-600',
|
||||
neutral: 'bg-gray-100 text-gray-500',
|
||||
purple: 'bg-purple-50 text-purple-700',
|
||||
}
|
||||
|
||||
/**
|
||||
* 状态徽章
|
||||
*/
|
||||
export default function StatusBadge({ label, variant = 'neutral', className = '' }: StatusBadgeProps) {
|
||||
return (
|
||||
<span className={`px-2 py-0.5 rounded text-xs ${variantStyles[variant]} ${className}`}>
|
||||
{label}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
/** UI 组件统一导出 */
|
||||
export { default as Button } from './Button'
|
||||
export { default as Card } from './Card'
|
||||
export { default as Modal } from './Modal'
|
||||
export { default as Pagination } from './Pagination'
|
||||
export { default as EmptyState } from './EmptyState'
|
||||
export { default as ConfirmDialog } from './ConfirmDialog'
|
||||
export { Skeleton, SkeletonText, SkeletonCard, SkeletonPage } from './Skeleton'
|
||||
export { default as Signal } from './Signal'
|
||||
export { default as StatusBadge } from './StatusBadge'
|
||||
export { default as LoadingSpinner } from './LoadingSpinner'
|
||||
export { default as ErrorBanner } from './ErrorBanner'
|
||||
export { Input, Label, Select } from './Input'
|
||||
Reference in New Issue
Block a user