You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
405 lines
9.8 KiB
405 lines
9.8 KiB
2 weeks ago
|
// 通用任务配置文件
|
||
|
|
||
|
// 基础接口定义
|
||
|
export interface FieldConfig {
|
||
|
field: string; // 数据字段名
|
||
|
title: string; // 显示标题
|
||
|
dataType: 'string' | 'json' | 'number' | 'array'; // 数据类型
|
||
|
displayType: 'markdown' | 'text' | 'html'; // 前端展示类型
|
||
|
required?: boolean;
|
||
|
pdfSource?: 'contract' | 'bid' | 'document' | 'auto'; // PDF源
|
||
|
displayCondition?: (item: any) => boolean;
|
||
|
showComparison?: boolean; // 显示对比按钮
|
||
|
|
||
|
// JSON数据类型的配置
|
||
|
jsonConfig?: {
|
||
|
extractFields: string[];
|
||
|
separator?: string;
|
||
|
fieldLabels?: Record<string, string>;
|
||
|
fieldProcessors?: Record<string, (value: any) => string>;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export interface PdfSourceConfig {
|
||
|
id: string;
|
||
|
title: string;
|
||
|
apiField: string;
|
||
|
}
|
||
|
|
||
|
export interface TabConfig {
|
||
|
key: string;
|
||
|
label: string;
|
||
|
fields: FieldConfig[];
|
||
|
displayCondition?: (data: any) => boolean;
|
||
|
}
|
||
|
|
||
|
export interface TaskConfig {
|
||
|
taskType: string; // 任务类型标识
|
||
|
name: string; // 任务显示名称
|
||
|
mode: 'single' | 'tabs'; // 展示模式:单一内容或多标签
|
||
|
|
||
|
// PDF配置
|
||
|
pdfConfig?: {
|
||
|
layout: 'single' | 'split';
|
||
|
sources: PdfSourceConfig[];
|
||
|
};
|
||
|
|
||
|
// 单一模式配置
|
||
|
fields?: FieldConfig[];
|
||
|
|
||
|
// 多标签模式配置
|
||
|
tabs?: TabConfig[];
|
||
|
|
||
|
// 全局显示条件
|
||
|
displayCondition?: (taskInfo: any, data: any) => boolean;
|
||
|
}
|
||
|
|
||
|
// 配置定义
|
||
|
export const UNIVERSAL_TASK_CONFIGS: Record<string, TaskConfig> = {
|
||
|
// ==================== 文档审核任务配置 ====================
|
||
|
|
||
|
// 文档错误检查
|
||
|
"checkDocumentError": {
|
||
|
taskType: "checkDocumentError",
|
||
|
name: "文档错误检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document',
|
||
|
required: true
|
||
|
},
|
||
|
{
|
||
|
field: 'modifiedContent',
|
||
|
title: '修改建议',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
showComparison: true
|
||
|
},
|
||
|
{
|
||
|
field: 'modificationDisplay',
|
||
|
title: '修改情况',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown'
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// 重复文本检查
|
||
|
"checkRepeatText": {
|
||
|
taskType: "checkRepeatText",
|
||
|
name: "重复文本检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '第一段原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
},
|
||
|
{
|
||
|
field: 'comparedText',
|
||
|
title: '第二段原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
},
|
||
|
{
|
||
|
field: 'modificationDisplay',
|
||
|
title: '相似情况',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown'
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// 全文重复检查
|
||
|
"allCheckRepeatText": {
|
||
|
taskType: "allCheckRepeatText",
|
||
|
name: "全文重复检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '第一段原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
},
|
||
|
{
|
||
|
field: 'comparedText',
|
||
|
title: '第二段原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
},
|
||
|
{
|
||
|
field: 'modificationDisplay',
|
||
|
title: '相似情况',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown'
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// 公司名称检查
|
||
|
"checkCompanyName": {
|
||
|
taskType: "checkCompanyName",
|
||
|
name: "公司名称检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'modificationDisplay',
|
||
|
title: '相关原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// 标题名称检查
|
||
|
"checkTitleName": {
|
||
|
taskType: "checkTitleName",
|
||
|
name: "标题名称检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'modificationDisplay',
|
||
|
title: '相关原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// 地名检查
|
||
|
"checkPlaceName": {
|
||
|
taskType: "checkPlaceName",
|
||
|
name: "地名检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'modificationDisplay',
|
||
|
title: '相关原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'document'
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// 政策依据检查
|
||
|
"policyBases": {
|
||
|
taskType: "policyBases",
|
||
|
name: "政策依据检查",
|
||
|
mode: "single",
|
||
|
pdfConfig: {
|
||
|
layout: "single",
|
||
|
sources: [
|
||
|
{ id: "document", title: "文档", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '系统名称',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown'
|
||
|
},
|
||
|
{
|
||
|
field: 'reviewBasis',
|
||
|
title: '系统描述',
|
||
|
dataType: 'json',
|
||
|
displayType: 'markdown',
|
||
|
jsonConfig: {
|
||
|
extractFields: ['reviewPoints', 'review_content'],
|
||
|
separator: ':',
|
||
|
fieldProcessors: {
|
||
|
'reviewPoints': (value) => Array.isArray(value) ? value[0] : value
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
|
||
|
// ==================== 合同审核任务配置 ====================
|
||
|
|
||
|
// 合同审核(多标签模式)
|
||
|
"contractReview": {
|
||
|
taskType: "contractReview",
|
||
|
name: "合同审核",
|
||
|
mode: "tabs",
|
||
|
pdfConfig: {
|
||
|
layout: "split",
|
||
|
sources: [
|
||
|
{ id: "contract", title: "合同文件", apiField: "id" },
|
||
|
{ id: "bid", title: "招标文件", apiField: "id" }
|
||
|
]
|
||
|
},
|
||
|
tabs: [
|
||
|
{
|
||
|
key: "substantive",
|
||
|
label: "实质性审查",
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'contract',
|
||
|
required: true
|
||
|
},
|
||
|
{
|
||
|
field: 'modifiedContent',
|
||
|
title: '修改建议',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
showComparison: true
|
||
|
},
|
||
|
{
|
||
|
field: 'reviewBasis',
|
||
|
title: '审查依据',
|
||
|
dataType: 'json',
|
||
|
displayType: 'markdown',
|
||
|
jsonConfig: {
|
||
|
extractFields: ['reviewContent', 'reviewPoints'],
|
||
|
separator: ':'
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
key: "compliance",
|
||
|
label: "合规性审查",
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'contract',
|
||
|
required: true
|
||
|
},
|
||
|
{
|
||
|
field: 'existingIssues',
|
||
|
title: '合规性问题',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown'
|
||
|
},
|
||
|
{
|
||
|
field: 'modifiedContent',
|
||
|
title: '修改建议',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
showComparison: true
|
||
|
},
|
||
|
{
|
||
|
field: 'reviewBasis',
|
||
|
title: '法规依据',
|
||
|
dataType: 'json',
|
||
|
displayType: 'markdown',
|
||
|
jsonConfig: {
|
||
|
extractFields: ['reviewContent', 'reviewPoints'],
|
||
|
separator: ':'
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
key: "consistency",
|
||
|
label: "一致性审查",
|
||
|
fields: [
|
||
|
{
|
||
|
field: 'originalText',
|
||
|
title: '合同原文',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'contract',
|
||
|
required: true
|
||
|
},
|
||
|
{
|
||
|
field: 'comparedText',
|
||
|
title: '招标文件对应内容',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
pdfSource: 'bid',
|
||
|
required: true
|
||
|
},
|
||
|
{
|
||
|
field: 'modifiedContent',
|
||
|
title: '修改建议',
|
||
|
dataType: 'string',
|
||
|
displayType: 'markdown',
|
||
|
showComparison: true
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// 工具函数
|
||
|
export function getTaskConfig(taskType: string): TaskConfig | null {
|
||
|
return UNIVERSAL_TASK_CONFIGS[taskType] || null;
|
||
|
}
|
||
|
|
||
|
export function getAvailableConfigs(): TaskConfig[] {
|
||
|
return Object.values(UNIVERSAL_TASK_CONFIGS);
|
||
|
}
|
||
|
|
||
|
// 检查字段是否应该显示对比按钮
|
||
|
export function shouldShowComparison(fieldConfig: FieldConfig, item: any): boolean {
|
||
|
return !!(fieldConfig.showComparison && item.modificationDisplay && item.modificationDisplay.trim());
|
||
|
}
|
||
|
|
||
|
// 获取字段的PDF源
|
||
|
export function getFieldPdfSource(fieldConfig: FieldConfig): string | null {
|
||
|
return fieldConfig.pdfSource || null;
|
||
|
}
|
||
|
|
||
|
// 检查字段是否支持PDF定位
|
||
|
export function supportsPdfLocation(fieldConfig: FieldConfig): boolean {
|
||
|
return !!(fieldConfig.pdfSource && fieldConfig.pdfSource !== 'auto');
|
||
|
}
|