完善卷宗和合同的数据隔离的效果

This commit is contained in:
2025-06-03 21:06:48 +08:00
parent 057563ba5e
commit 87ad3376fe
10 changed files with 326 additions and 108 deletions
+54 -2
View File
@@ -34,6 +34,7 @@ export interface RulesQueryParams {
keyword?: string;
orderBy?: string;
orderDirection?: 'asc' | 'desc';
reviewType?: string; // 添加 reviewType 参数,值为 contract 或 record
}
/**
@@ -162,7 +163,8 @@ export async function getRulesList(params: RulesQueryParams): Promise<{data: Rul
isActive,
keyword,
orderBy = 'created_at',
orderDirection = 'desc'
orderDirection = 'desc',
reviewType
} = params;
// 构建PostgrestParams参数
@@ -204,6 +206,46 @@ export async function getRulesList(params: RulesQueryParams): Promise<{data: Rul
postgrestParams.filter!['is_enabled'] = `eq.${isActive}`;
}
// 根据reviewType添加过滤条件
if (reviewType) {
try {
// 先获取所有评查点组数据,用于找到对应的pid
const groupsAllResponse = await postgrestGet<{code: number; msg: string; data: Array<{id: number; pid: number}>}>('evaluation_point_groups', {
select: 'id,pid'
});
let groups: Array<{id: number; pid: number}> = [];
if (!groupsAllResponse.error) {
if (groupsAllResponse.data && 'code' in groupsAllResponse.data && groupsAllResponse.data.data) {
groups = groupsAllResponse.data.data;
} else if (Array.isArray(groupsAllResponse.data)) {
groups = groupsAllResponse.data;
}
}
// 根据reviewType过滤pid
let pidList: number[] = [];
if (reviewType === 'contract') {
// 合同类型,找到所有pid=3的评查点组
const contractGroups = groups.filter(g => g.pid === 3).map(g => g.id);
pidList = contractGroups;
} else if (reviewType === 'record') {
// 卷宗类型,找到所有pid=1或pid=2的评查点组
const recordGroups = groups.filter(g => g.pid === 1 || g.pid === 2).map(g => g.id);
pidList = recordGroups;
}
// 如果有过滤的组id,则添加到查询条件中
if (pidList.length > 0) {
postgrestParams.filter!['evaluation_point_groups_id'] = `in.(${pidList.join(',')})`;
}
} catch (error) {
console.error('获取评查点组数据出错:', error);
}
}
// 如果指定了评查点类型ID,需要先查询该类型下的所有规则组ID
if (ruleType) {
try {
@@ -790,9 +832,10 @@ export interface RuleGroup {
/**
* 获取评查点类型列表
* @param reviewType 评查类型,contract表示合同,record表示卷宗
* @returns 评查点类型列表
*/
export async function getRuleTypes(): Promise<{data: RuleType[]; error?: never} | {data?: never; error: string; status?: number}> {
export async function getRuleTypes(reviewType?: string): Promise<{data: RuleType[]; error?: never} | {data?: never; error: string; status?: number}> {
try {
// 构建PostgrestParams参数
const postgrestParams: PostgrestParams = {
@@ -810,6 +853,15 @@ export async function getRuleTypes(): Promise<{data: RuleType[]; error?: never}
}
};
// 根据 reviewType 添加过滤条件
if (reviewType === 'contract') {
// 如果是合同类型,只加载id=3的评查点类型
postgrestParams.filter!['id'] = 'eq.3';
} else if (reviewType === 'record') {
// 如果是卷宗类型,只加载id=1和id=2的评查点类型
postgrestParams.filter!['id'] = 'in.(1,2)';
}
// 发送请求获取评查点类型列表
const response = await postgrestGet<{code: number; msg: string; data: Array<{
id: number;