import { useState, useEffect } from 'react'; import { useNavigate, Form, useLoaderData } from '@remix-run/react'; import { type MetaFunction, type ActionFunctionArgs, LoaderFunctionArgs, redirect } from "@remix-run/node"; import styles from "~/styles/pages/home.css?url"; import dayjs from 'dayjs'; import { getUserSession, logout } from "~/api/login/auth.server"; export const links = () => [ { rel: "stylesheet", href: styles } ]; export const meta: MetaFunction = () => { return [ { title: "中国烟草AI合同及卷宗审核系统 - 首页" }, { name: "description", content: "中国烟草AI合同及卷宗审核系统首页" }, ]; }; // 处理登出请求 export async function action({ request }: ActionFunctionArgs) { const formData = await request.formData(); const intent = formData.get("intent"); if (intent === "logout") { return logout(request); } return null; } // 验证用户登录状态 export async function loader({ request }: LoaderFunctionArgs) { const { isAuthenticated, userRole } = await getUserSession(request); if (!isAuthenticated) { return redirect("/login"); } return Response.json({ userRole }); } export default function Index() { const navigate = useNavigate(); const { userRole } = useLoaderData(); const [currentDateTime, setCurrentDateTime] = useState({ date: '', time: '' }); // 打印服务器端传递的用户角色 useEffect(() => { console.log('_index 服务器返回的用户角色:', userRole); }, [userRole]); // 更新日期时间 useEffect(() => { const updateDateTime = () => { const now = dayjs(); // 格式化日期: YYYY/MM/DD setCurrentDateTime({ date: now.format('YYYY/MM/DD'), time: now.format('HH:mm:ss') }); }; // 初始化时间 updateDateTime(); // 每秒更新一次 const timerID = setInterval(updateDateTime, 1000); return () => clearInterval(timerID); }, []); // 处理模块点击 const handleModuleClick = (path: string, reviewType: string) => { // 将reviewType存入sessionStorage if (typeof window !== 'undefined') { sessionStorage.setItem('reviewType', reviewType); } navigate(path); }; // 处理键盘事件 const handleKeyDown = (path: string, reviewType: string, e: React.KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { handleModuleClick(path, reviewType); } }; // 处理登出 const handleLogout = () => { // 清除sessionStorage中的所有数据 if (typeof window !== 'undefined') { sessionStorage.clear(); } // 使用Form组件提交登出请求 const form = document.getElementById('logout-form') as HTMLFormElement; if (form) { form.submit(); } else { // 如果找不到表单,直接导航到登录页 navigate('/login'); } }; return (
{/* 登出表单 - 隐藏 */}
{/* 头部 */}
中国烟草
中国烟草 CHINA TOBACCO
{currentDateTime.date} {currentDateTime.time}
用户头像 {userRole === 'developer' ? '系统管理员' : '普通用户'}
{/* 主要内容 */}

- 欢迎来到智慧法务平台 -

{/* 合同管理模块 */}
handleModuleClick('/contract-template/search', 'contract')} onKeyDown={(e) => handleKeyDown('/contract-template/search', 'contract', e)} role="button" tabIndex={0} aria-label="合同管理" > 合同管理 合同管理
{/* 案卷智能评查模块 */}
handleModuleClick('/home', 'record')} onKeyDown={(e) => handleKeyDown('/home', 'record', e)} role="button" tabIndex={0} aria-label="案卷智能评查" > 案卷智能评查 案卷智能评查
{/* 智慧法务大模型模块 */}
handleModuleClick('/chat-with-llm', 'model')} onKeyDown={(e) => handleKeyDown('/chat-with-llm', 'model', e)} role="button" tabIndex={0} aria-label="智慧法务大模型" > 智慧法务大模型 智慧法务大模型
); }