ux: 全部页面添加操作说明 PageGuide

为以下17个缺少操作说明的页面添加 PageGuide 组件:
- OrgChart: 组织架构管理
- SupportDashboard: 客服工作台
- Money: 薪酬管理
- AIAssistant: AI 智能助手
- Settings: 系统设置
- Calendar: 人事日历
- Templates: 模板管理
- AuditLog: 审计日志
- Notifications: 通知中心
- MedicalPeriodCalculator: 医疗期计算器
- HealthCheck: 用工健康检查
- AnnualValueReport: 年度价值报表
- CompanyFiles: 公司文件管理
- LeaveApproval: 请假审批
- TrainingRecords: 培训记录
- PerformanceRecords: 绩效记录
- DisciplinaryRecords: 违纪记录

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
selfrelease
2026-08-15 15:26:02 +08:00
parent 5c3f3503ea
commit f523f84c18
17 changed files with 34 additions and 0 deletions
+2
View File
@@ -1,5 +1,6 @@
import { useState, lazy, Suspense } from 'react'
import { Bot, FileSearch, Scale, Sparkles, BookOpen, TrendingUp, Loader2 } from 'lucide-react'
import PageGuide from '../components/ui/PageGuide'
const ChatTab = lazy(() => import('./ai-assistant/ChatTab').then(m => ({ default: m.ChatTab })))
const PredictTab = lazy(() => import('./ai-assistant/PredictTab').then(m => ({ default: m.PredictTab })))
@@ -24,6 +25,7 @@ export default function AIAssistant() {
return (
<div className="space-y-4">
<PageGuide>AI </PageGuide>
<div className="flex items-center gap-2">
<Bot className="h-5 w-5 text-primary" />
<div>
+2
View File
@@ -7,6 +7,7 @@ import Card from '../components/ui/Card'
import Button from '../components/ui/Button'
import EmptyState from '../components/ui/EmptyState'
import Pagination from '../components/ui/Pagination'
import PageGuide from '../components/ui/PageGuide'
const ACTION_LABELS: Record<string, string> = {
CREATE: '创建',
@@ -147,6 +148,7 @@ export default function AuditLog() {
return (
<div className="space-y-3">
<PageGuide></PageGuide>
<div className="flex items-center gap-2">
<ScrollText className="h-5 w-5 text-primary" />
<h1 className="text-base font-semibold"></h1>
+2
View File
@@ -7,6 +7,7 @@ import { dashboardApi, calendarApi } from '../lib/api-services'
import Card from '../components/ui/Card'
import Button from '../components/ui/Button'
import { Input, Label } from '../components/ui/Input'
import PageGuide from '../components/ui/PageGuide'
const EVENT_TYPE_COLORS: Record<string, string> = {
CONTRACT_EXPIRY: 'bg-red-100 text-red-700 border-red-200',
@@ -190,6 +191,7 @@ export default function Calendar() {
return (
<div className="space-y-3">
<PageGuide> birthdays /</PageGuide>
{/* 顶部工具栏 */}
<div className="flex items-center justify-between flex-wrap gap-2">
<div className="flex items-center gap-2">
+2
View File
@@ -7,6 +7,7 @@ import Card from '../components/ui/Card'
import Button from '../components/ui/Button'
import { Input, Label, Select } from '../components/ui/Input'
import EmptyState from '../components/ui/EmptyState'
import PageGuide from '../components/ui/PageGuide'
const FILE_TYPES = [
{ value: 'BUSINESS_LICENSE', label: '营业执照' },
@@ -82,6 +83,7 @@ export default function CompanyFiles() {
return (
<div className="space-y-4">
<PageGuide>线</PageGuide>
<div className="flex items-center gap-2">
<Building2 className="h-5 w-5 text-primary" />
<h1 className="text-lg font-semibold"></h1>
+2
View File
@@ -10,6 +10,7 @@ import Button from '../components/ui/Button'
import { Input, Label, Select } from '../components/ui/Input'
import EmptyState from '../components/ui/EmptyState'
import Pagination from '../components/ui/Pagination'
import PageGuide from '../components/ui/PageGuide'
const LEAVE_TYPE_MAP: Record<string, string> = {
SICK: '病假',
@@ -75,6 +76,7 @@ export default function LeaveApproval() {
return (
<div className="space-y-4">
<PageGuide> HR </PageGuide>
<div className="flex items-center gap-2">
<CalendarClock className="w-5 h-5 text-primary" />
<div>
+2
View File
@@ -1,6 +1,7 @@
import { useState, lazy, Suspense } from 'react'
import { useSearchParams } from 'react-router-dom'
import { Layers, Wallet, LayoutTemplate, Clock, Receipt, Loader2 } from 'lucide-react'
import PageGuide from '../components/ui/PageGuide'
const BatchManager = lazy(() => import('./money/BatchTab').then(m => ({ default: m.BatchManager })))
const TemplateManager = lazy(() => import('./money/TemplateTab').then(m => ({ default: m.TemplateManager })))
@@ -23,6 +24,7 @@ export default function Money() {
return (
<div className="space-y-4">
<PageGuide> </PageGuide>
<div className="flex items-center gap-2">
<Wallet className="w-5 h-5 text-primary" />
<div>
+2
View File
@@ -8,6 +8,7 @@ import Card from '../components/ui/Card'
import Button from '../components/ui/Button'
import EmptyState from '../components/ui/EmptyState'
import Pagination from '../components/ui/Pagination'
import PageGuide from '../components/ui/PageGuide'
const TYPE_LABELS: Record<string, string> = {
CONTRACT_EXPIRY: '合同到期',
@@ -62,6 +63,7 @@ export default function Notifications() {
return (
<div className="space-y-3">
<PageGuide>/</PageGuide>
<div className="flex items-center justify-between">
<div>
<div className="flex items-center gap-2">
+2
View File
@@ -10,6 +10,7 @@ import Card from '../components/ui/Card'
import Button from '../components/ui/Button'
import { Input, Label, Select } from '../components/ui/Input'
import Modal from '../components/ui/Modal'
import PageGuide from '../components/ui/PageGuide'
import api from '../lib/api'
export default function OrgChart() {
@@ -100,6 +101,7 @@ export default function OrgChart() {
return (
<div className="space-y-4">
<PageGuide>使</PageGuide>
<div className="flex items-center justify-between">
<div>
<h1 className="text-xl font-semibold text-gray-900"></h1>
+2
View File
@@ -10,6 +10,7 @@ import Button from '../components/ui/Button'
import { Input, Label, Select } from '../components/ui/Input'
import Modal from '../components/ui/Modal'
import { useConfirm } from '../hooks/useConfirm'
import PageGuide from '../components/ui/PageGuide'
export default function Settings() {
@@ -48,6 +49,7 @@ export default function Settings() {
return (
<div className="space-y-3">
<PageGuide></PageGuide>
<div className="flex items-center gap-2">
<Building2 className="h-5 w-5 text-primary" />
<div>
+2
View File
@@ -13,6 +13,7 @@ import Modal from '../components/ui/Modal'
import EmptyState from '../components/ui/EmptyState'
import Pagination from '../components/ui/Pagination'
import { useConfirm } from '../hooks/useConfirm'
import PageGuide from '../components/ui/PageGuide'
const CATEGORY_LABELS: Record<string, string> = {
CONTRACT: '合同',
@@ -78,6 +79,7 @@ export default function Templates() {
return (
<div className="space-y-3">
<PageGuide>使</PageGuide>
<div className="flex items-center gap-2">
<FileText className="h-5 w-5 text-primary" />
<h1 className="text-base font-semibold"></h1>
@@ -8,6 +8,7 @@ import api from '../../lib/api'
import { usePageSize } from '../../hooks/usePageSize'
import { Input, Label, Select } from '../../components/ui/Input'
import Button from '../../components/ui/Button'
import PageGuide from '../../components/ui/PageGuide'
const TYPE_LABELS: Record<string, string> = { LATE: '迟到', ABSENT: '旷工', INSUBORDINATION: '不服从管理', MISCONDUCT: '违纪', VIOLATE_POLICY: '违反规章制度', OTHER: '其他' }
const SEVERITY_LABELS: Record<string, string> = { WARNING: '警告', SERIOUS: '严重', SEVERE: '极其严重' }
@@ -73,6 +74,7 @@ export default function DisciplinaryRecords() {
return (
<div className="space-y-4">
<PageGuide></PageGuide>
<div className="flex items-center justify-between">
<div>
<h1 className="text-base font-semibold"></h1>
@@ -8,6 +8,7 @@ import api from '../../lib/api'
import { usePageSize } from '../../hooks/usePageSize'
import { Input, Label, Select } from '../../components/ui/Input'
import Button from '../../components/ui/Button'
import PageGuide from '../../components/ui/PageGuide'
const RESULT_LABELS: Record<string, string> = { EXCELLENT: '优秀', QUALIFIED: '合格', NEED_IMPROVE: '需改进', UNQUALIFIED: '不胜任' }
const RESULT_COLORS: Record<string, string> = { EXCELLENT: 'bg-green-50 text-green-700', QUALIFIED: 'bg-blue-50 text-blue-700', NEED_IMPROVE: 'bg-amber-50 text-amber-700', UNQUALIFIED: 'bg-red-50 text-red-700' }
@@ -72,6 +73,7 @@ export default function PerformanceRecords() {
return (
<div className="space-y-4">
<PageGuide> </PageGuide>
<div className="flex items-center justify-between">
<div>
<h1 className="text-base font-semibold"></h1>
@@ -9,6 +9,7 @@ import { usePageSize } from '../../hooks/usePageSize'
import { Input, Label, Select } from '../../components/ui/Input'
import Button from '../../components/ui/Button'
import Modal from '../../components/ui/Modal'
import PageGuide from '../../components/ui/PageGuide'
const ACK_LABELS: Record<string, string> = { PENDING: '待签收', SIGNED: '已签收', REFUSED: '拒绝签收' }
const ACK_COLORS: Record<string, string> = { PENDING: 'bg-amber-50 text-amber-700', SIGNED: 'bg-green-50 text-green-700', REFUSED: 'bg-red-50 text-red-700' }
@@ -100,6 +101,7 @@ export default function TrainingRecords() {
return (
<div className="space-y-4">
<PageGuide></PageGuide>
<div className="flex items-center justify-between">
<div>
<h1 className="text-base font-semibold"></h1>
@@ -9,6 +9,7 @@ import Card from '../../components/ui/Card'
import Button from '../../components/ui/Button'
import { Input, Label, Select } from '../../components/ui/Input'
import Modal from '../../components/ui/Modal'
import PageGuide from '../../components/ui/PageGuide'
import api from '../../lib/api'
export default function SupportDashboard() {
@@ -59,6 +60,7 @@ export default function SupportDashboard() {
return (
<div className="space-y-4">
<PageGuide></PageGuide>
<div>
<h1 className="text-xl font-semibold text-gray-900"></h1>
<p className="text-sm text-gray-500 mt-1">穿</p>
@@ -11,6 +11,7 @@ import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer, Cell } from
import { dashboardApi } from '../../lib/api-services'
import Card from '../../components/ui/Card'
import Button from '../../components/ui/Button'
import PageGuide from '../../components/ui/PageGuide'
function fmtMoney(n: number): string {
if (n >= 10000) return `¥${(n / 10000).toFixed(1)}`
@@ -84,6 +85,7 @@ export default function AnnualValueReport() {
return (
<div className="space-y-3">
<PageGuide></PageGuide>
{/* 标题栏 */}
<div className="flex items-center justify-between">
<div>
+2
View File
@@ -11,6 +11,7 @@ import { RadialBarChart, RadialBar, PolarAngleAxis, ResponsiveContainer } from '
import { dashboardApi } from '../../lib/api-services'
import Card from '../../components/ui/Card'
import Button from '../../components/ui/Button'
import PageGuide from '../../components/ui/PageGuide'
/**
* 用工体检诊断页面
@@ -62,6 +63,7 @@ export default function HealthCheck() {
return (
<div className="space-y-3">
<PageGuide></PageGuide>
<div className="flex items-center justify-between">
<div>
<div className="flex items-center gap-2">
@@ -10,6 +10,7 @@ import { Calculator, HeartPulse, Info } from 'lucide-react'
import Card from '../../components/ui/Card'
import Button from '../../components/ui/Button'
import { settingsApi } from '../../lib/api-services'
import PageGuide from '../../components/ui/PageGuide'
interface PolicyRule {
maxYears: number
@@ -108,6 +109,7 @@ export default function MedicalPeriodCalculator() {
return (
<div className="space-y-3">
<PageGuide></PageGuide>
<div className="flex items-center gap-2">
<HeartPulse className="h-5 w-5 text-primary" />
<h1 className="text-base font-semibold"></h1>