feat: 1. 添加企查查的按钮。新增相关组件和对接接口进行显示。
2. 为51707端口添加只存在交叉评查入口的项目启动配置。入口页添加相关的区分。 3. 完善文档列表的权限功能控制。 4. 隐藏系统概览中高风险用户的统计模块。 fix: 1. 修复合同起草无权访问却生成了新的模板文件的问题。 2. 修复文档类型无法编辑入口模块的问题。
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import type { MetaFunction, LoaderFunctionArgs, ActionFunctionArgs } from '@remix-run/node';
|
||||
import { redirect } from '@remix-run/node';
|
||||
import { useLoaderData, useNavigate, useSubmit } from '@remix-run/react';
|
||||
import { useLoaderData, useNavigate, useSubmit, useActionData } from '@remix-run/react';
|
||||
import { useState, useEffect } from 'react';
|
||||
import { getContractTemplate } from '~/api/contract-template/templates';
|
||||
import type { ContractTemplate } from '~/api/contract-template/templates';
|
||||
@@ -9,6 +9,7 @@ import filePreviewStyles from '~/styles/components/file-preview-isolation.css?ur
|
||||
import { getUserSession } from '~/api/login/auth.server';
|
||||
import { createDraftContract } from '~/api/contracts/draft-service.server';
|
||||
import { apiRequest, downloadFile } from '~/api/axios-client';
|
||||
import { checkRoutePermission } from '~/api/auth/check-route-permission.server';
|
||||
|
||||
// 导入FilePreview组件
|
||||
import { FilePreview } from '~/components/reviews';
|
||||
@@ -76,11 +77,20 @@ export async function action({ request, params }: ActionFunctionArgs) {
|
||||
}
|
||||
|
||||
// 获取用户信息和JWT
|
||||
const { userInfo, frontendJWT } = await getUserSession(request);
|
||||
const { userInfo, frontendJWT, userRole } = await getUserSession(request);
|
||||
if (!userInfo?.sub) {
|
||||
return Response.json({ error: '未登录' }, { status: 401 });
|
||||
}
|
||||
|
||||
// 🔒 在执行任何操作之前,先检查用户是否有权限访问目标路由
|
||||
const targetPath = '/contract-draft';
|
||||
const permissionCheck = await checkRoutePermission(targetPath, userRole, frontendJWT || undefined);
|
||||
|
||||
if (!permissionCheck.allowed) {
|
||||
console.warn(`[Action] 用户无权访问 ${targetPath}:`, permissionCheck.error);
|
||||
return Response.json({ error: permissionCheck.error || '您没有权限使用起草合同功能' }, { status: 403 });
|
||||
}
|
||||
|
||||
try {
|
||||
// 解析表单数据
|
||||
const formData = await request.formData();
|
||||
@@ -148,8 +158,14 @@ export async function action({ request, params }: ActionFunctionArgs) {
|
||||
}
|
||||
}
|
||||
|
||||
// Action 返回的数据类型
|
||||
interface ActionData {
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export default function ContractTemplateDetail() {
|
||||
const { template }: { template: ContractTemplate } = useLoaderData<typeof loader>();
|
||||
const actionData = useActionData<ActionData>();
|
||||
const navigate = useNavigate();
|
||||
const submit = useSubmit();
|
||||
const [isCreatingDraft, setIsCreatingDraft] = useState(false);
|
||||
@@ -162,6 +178,14 @@ export default function ContractTemplateDetail() {
|
||||
window.scrollTo({ top: 0, behavior: 'instant' });
|
||||
}, []);
|
||||
|
||||
// 处理 action 返回的错误
|
||||
useEffect(() => {
|
||||
if (actionData?.error) {
|
||||
toastService.error(actionData.error);
|
||||
setIsCreatingDraft(false);
|
||||
}
|
||||
}, [actionData]);
|
||||
|
||||
const handleBack = () => {
|
||||
navigate('/contract-template/list');
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user