1. 开启交叉评查的显示/隐藏(开启生产环境的配置),优化不同端口的显示/隐藏交叉评查入口的效果。

2. 优化评查结果的AI建议修改的文本输入框的显示效果。
3. 提交17正式环境的api-config.ts,备份一个wafIP的配置api-config-wafIP.ts。
This commit is contained in:
2025-12-16 17:47:15 +08:00
parent d2346aad70
commit d04882bf51
10 changed files with 293 additions and 149 deletions
+13 -4
View File
@@ -75,7 +75,15 @@ export async function loader({ request }: LoaderFunctionArgs) {
}
// 检查是否存在顶级路由 '/cross-checking'
hasCrossCheckingAccess = routesResult.data.some(route => route.path === '/cross-checking');
// 🔒 交叉评查访问控制:
// - CROSS_CHECKING_ONLY_MODE=false 时,所有端口都可访问(根据后端权限)
// - CROSS_CHECKING_ONLY_MODE=true 时,只有 51707 端口可访问
const currentPort = getCurrentPort();
if (!CROSS_CHECKING_ONLY_MODE || currentPort === CROSS_CHECKING_ONLY_PORT) {
hasCrossCheckingAccess = routesResult.data.some(route => route.path === '/cross-checking');
} else {
hasCrossCheckingAccess = false; // CROSS_CHECKING_ONLY_MODE=true 且非51707端口不显示交叉评查入口
}
// 检查是否存在顶级路由 '/chat-with-llm'
hasChatLLMAccess = routesResult.data.some(route => route.path === '/chat-with-llm');
@@ -89,11 +97,12 @@ export async function loader({ request }: LoaderFunctionArgs) {
// 🔑 判断是否启用交叉评查专属模式
// 条件:CROSS_CHECKING_ONLY_MODE=true 且 当前端口为 51707
const currentPort = getCurrentPort();
const isCrossCheckingOnlyMode = CROSS_CHECKING_ONLY_MODE && currentPort === CROSS_CHECKING_ONLY_PORT;
// 注意:currentPort 已在上面的权限检查中获取,这里复用(如果在 if 块外需要则重新获取)
const currentPortForMode = getCurrentPort();
const isCrossCheckingOnlyMode = CROSS_CHECKING_ONLY_MODE && currentPortForMode === CROSS_CHECKING_ONLY_PORT;
if (isCrossCheckingOnlyMode) {
console.log(`🔒 [Index Loader] 交叉评查专属模式已启用 (端口: ${currentPort})`);
console.log(`🔒 [Index Loader] 交叉评查专属模式已启用 (端口: ${currentPortForMode})`);
}
// 返回用户信息、入口模块和权限给客户端
+27 -5
View File
@@ -253,20 +253,42 @@ type LoaderData = {
// 添加 loader 函数
export async function loader({ request }: LoaderFunctionArgs) {
try {
const loaderStart = Date.now();
// 获取用户会话信息
const sessionStart = Date.now();
const { getUserSession } = await import("~/api/login/auth.server");
const { userInfo, frontendJWT } = await getUserSession(request);
// console.log(`[loader 耗时] getUserSession: ${Date.now() - sessionStart}ms`);
// console.log('loader: 开始加载数据...');
const url = new URL(request.url);
const mode = url.searchParams.get("mode") || "create";
// 我们不能在服务器端访问 sessionStorage,所以在客户端组件中处理 documentTypeIds 过滤
// 并行加载文档和文档类型
// 并行加载文档和文档类型(分别计时)
const apiStart = Date.now();
const documentsPromise = (async () => {
const start = Date.now();
const result = await getTodayDocuments(userInfo, frontendJWT);
// console.log(`[loader 耗时] getTodayDocuments API: ${Date.now() - start}ms`);
return result;
})();
const typesPromise = (async () => {
const start = Date.now();
const result = await getDocumentTypes(frontendJWT);
// console.log(`[loader 耗时] getDocumentTypes API: ${Date.now() - start}ms`);
return result;
})();
const [documentsResponse, typesResponse] = await Promise.all([
getTodayDocuments(userInfo, frontendJWT),
getDocumentTypes(frontendJWT)
documentsPromise,
typesPromise
]);
// console.log(`[loader 耗时] 并行API调用总耗时: ${Date.now() - apiStart}ms`);
console.log(`[loader 耗时] loader总耗时: ${(Date.now() - loaderStart)/1000}s`);
// console.log('loader: 文档加载结果:', documentsResponse);
// console.log('loader: 文档类型加载结果:', typesResponse);