page.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. 'use client';
  2. import ProfileSettings from '@/components/dashboard/ProfileSettings';
  3. import Sidebar from '@/components/dashboard/Sidebar';
  4. import { useRouter } from 'next/navigation';
  5. import { LogOut, Plus } from 'lucide-react';
  6. import { useLanguage } from '@/lib/i18n/LanguageContext';
  7. export default function SettingsPage() {
  8. const router = useRouter();
  9. const { t } = useLanguage();
  10. const handleLogout = () => {
  11. localStorage.removeItem('rsid');
  12. localStorage.removeItem('user_info');
  13. router.push('/login');
  14. };
  15. // 新增:处理侧边栏点击导航
  16. // 如果你的 Sidebar 是纯状态控制的,需要在这里处理跳转
  17. const handleTabChange = (tab: string) => {
  18. if (tab === 'overview') {
  19. router.push('/dashboard');
  20. } else if (tab === 'orders') {
  21. router.push('/dashboard/orders');
  22. }
  23. // 既然当前已经在 settings 页面,点击 settings 不需要跳转
  24. };
  25. return (
  26. <div className="min-h-screen bg-slate-50">
  27. <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10">
  28. {/* Header */}
  29. <div className="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-8">
  30. <div>
  31. <h1 className="text-2xl font-bold text-gray-900">{t('settings.title')}</h1>
  32. <p className="text-sm text-gray-500 mt-1">{t('settings.subtitle')}</p>
  33. </div>
  34. <div className="flex gap-3">
  35. <button
  36. onClick={() => router.push('/services')}
  37. className="flex items-center gap-2 bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:bg-blue-700 transition shadow-sm"
  38. >
  39. <Plus size={16} /> {t('common.new_application')}
  40. </button>
  41. <button
  42. onClick={handleLogout}
  43. className="flex items-center gap-2 bg-white border border-gray-300 px-4 py-2 rounded-lg text-sm font-medium hover:bg-gray-50 text-gray-700 transition"
  44. >
  45. <LogOut size={16} /> {t('nav.logout')}
  46. </button>
  47. </div>
  48. </div>
  49. <div className="grid grid-cols-1 lg:grid-cols-4 gap-8">
  50. {/* 左侧侧边栏 */}
  51. <div className="lg:col-span-1">
  52. {/* 🔴 修复部分:传入必要的 props */}
  53. <Sidebar
  54. activeTab="settings"
  55. setActiveTab={handleTabChange}
  56. />
  57. </div>
  58. {/* 右侧内容区 */}
  59. <div className="lg:col-span-3">
  60. <div className="grid grid-cols-1 xl:grid-cols-3 gap-8">
  61. {/* 主要设置区域 */}
  62. <div className="xl:col-span-2">
  63. <ProfileSettings />
  64. </div>
  65. {/* 右侧提示信息 */}
  66. <div className="hidden xl:block space-y-6">
  67. <div className="bg-blue-50 p-6 rounded-xl border border-blue-100">
  68. <h3 className="font-bold text-blue-800 mb-2 text-sm">{t('settings.security_tip_title')}</h3>
  69. <p className="text-xs text-blue-600 leading-relaxed mb-4">
  70. {t('settings.security_tip_desc')}
  71. </p>
  72. <div className="h-px bg-blue-200 my-4"></div>
  73. <p className="text-xs text-blue-500">
  74. {t('settings.account_status')} <span className="font-bold text-green-600">{t('settings.status_normal')}</span>
  75. </p>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. );
  84. }