feat: 1. 完善文档列表的显示效果,数据对接后端接口返回。

2. 对评查点分组和文档类型的编辑删除新增操作进行限制。
This commit is contained in:
2025-11-20 15:26:11 +08:00
parent 2edde8a8ab
commit 6dc9b4e468
11 changed files with 549 additions and 575 deletions
+7 -28
View File
@@ -82,7 +82,7 @@ function mapApiToFrontend(apiGroup: ApiRuleGroup): RuleGroup {
code: apiGroup.code || '',
description: apiGroup.description,
status: apiGroup.is_enabled ? 'active' : 'inactive',
parentId: apiGroup.pid === '0' ? null : apiGroup.pid,
parentId: (!apiGroup.pid || apiGroup.pid === '0') ? null : apiGroup.pid, // 🆕 NULL或'0'都表示顶级分组
sortOrder: 0 // API中不存在sortOrder字段,使用默认值
};
}
@@ -162,8 +162,7 @@ export async function action({ request }: ActionFunctionArgs) {
const status = formData.get("status") as string || "active";
const groupType = formData.get("groupType") as string;
const parentId = groupType === "secondary" ? formData.get("parentId") as string : null;
const reviewType = formData.get("reviewType") as string || undefined;
// 表单验证
// action是处于服务端的表单提交方法,这里再次验证表单数据也是出于安全考虑,防止客户端验证被绕过从而提交非法数据
const errors: ActionData["errors"] = {};
@@ -195,8 +194,7 @@ export async function action({ request }: ActionFunctionArgs) {
code: code.trim(),
description: description?.trim() || "",
is_enabled: status === "active",
pid: parentId === null ? "0" : parentId,
reviewType: reviewType // 传递 reviewType
pid: parentId || undefined // 🆕 NULL/undefined 表示顶级分组
};
try {
@@ -244,17 +242,14 @@ export default function RuleGroupNew() {
const isSubmitting = navigation.state === "submitting";
const rootData = useRouteLoaderData("root") as { userRole: string };
const userRole = rootData?.userRole || 'common';
// 判断表单是否为只读模式
const isReadOnly = userRole === 'common';
// 判断表单是否为只读模式(只有包含'provin'的用户才有编辑权限)
const hasEditPermission = userRole.toLowerCase().includes('provin');
const isReadOnly = !hasEditPermission;
// 解构数据
const { group, parentGroups, isEdit, error } = data;
// 从 sessionStorage 获取 reviewType
const [reviewType, setReviewType] = useState<string | null>(null);
// 表单状态管理 - 使用受控组件
const [formValues, setFormValues] = useState<{
groupType: "primary" | "secondary";
@@ -315,19 +310,6 @@ export default function RuleGroupNew() {
}
}, [group]);
// 在组件挂载时从 sessionStorage 获取 reviewType
useEffect(() => {
try {
if (typeof window !== 'undefined') {
const storedReviewType = sessionStorage.getItem('reviewType');
// console.log("从 sessionStorage 获取 reviewType:", storedReviewType);
setReviewType(storedReviewType);
}
} catch (error) {
console.error('获取 sessionStorage 中的 reviewType 失败:', error);
}
}, []);
// 验证表单字段
const validateField = (field: string, value: string) => {
switch (field) {
@@ -490,9 +472,6 @@ export default function RuleGroupNew() {
{/* 如果是编辑模式,添加ID */}
{group?.id && <input type="hidden" name="id" value={group.id} />}
{/* 传递 reviewType */}
{reviewType && <input type="hidden" name="reviewType" value={reviewType} />}
{/* 基本信息区域 */}
<Card className="form-section">
<div className="form-section-header">