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.
 
 
 
 
 
 

197 lines
6.7 KiB

import { $t, Tools, MarkupTableUtil } from 'platform-core';
import { Processor } from '../Processor';
import { PlaceHolder } from '@/utils/PlaceHolder';
class SingleRule extends Processor {
constructor(targetType: string, context?: any) {
super(targetType, context);
this.PROCESSOR_TYPE = 'SINGLE_RULE';
this.EDITOR_DIALOG_WIDTH = 1024;
}
public getToolbarAction(): any {
return {
extend: 'add',
name: 'singleRule',
label: $t('io.sc.engine.rule.core.enums.ProcessorType.' + this.PROCESSOR_TYPE),
icon: 'bi-noise-reduction',
enableIf: (args: any) => {
const valueType = this.context.target.valueType;
return valueType === 'io.sc.engine.rule.core.SingleRuleResult';
},
afterClick: (args: any) => {
args.grid.getEditorForm().setFieldValue('type', this.PROCESSOR_TYPE);
},
};
}
public format(row: any): any {
const objs: any[] = Tools.json2Object(row.singleRule);
if (objs && Tools.isArray(objs) && objs.length > 0) {
let header: string = '';
header += '<tr>';
header += ' <th>' + $t('level') + '</th>';
header += ' <th>' + $t('category') + '</th>';
header += ' <th>' + $t('condition') + '</th>';
header += ' <th>' + $t('value') + '</th>';
header += ' <th>' + $t('message') + '</th>';
header += '</tr>';
let body: string = '';
objs.forEach((obj) => {
body += '<tr>';
body += ' <td>' + obj.level + '</td>';
body += ' <td>' + obj.category + '</td>';
body += ' <td>' + PlaceHolder.replace(obj.condition) + '</td>';
body += ' <td>' + PlaceHolder.replace(obj.value) + '</td>';
body += ' <td>' + PlaceHolder.replace(obj.message) + '</td>';
body += '</tr>';
});
return MarkupTableUtil.markupTable(header, body, Tools.mergeObject({}, Processor.FORMAT_TABLE_STYLE));
}
return row.singleRule;
}
public getEditorFields(): any {
return [
{
colSpan: 12,
name: 'singleRule',
label: $t('re.processor.grid.entity.singleRule'),
showIf: (args: any) => {
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
},
type: 'w-grid',
height: 300,
localMode: true,
dbClickOperation: 'edit',
autoFetchData: false,
denseBody: false,
dndMode: 'local',
pageable: false,
configButton: false,
toolbarConfigure: { noIcon: false },
toolbarActions: [
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'example',
label: $t('example'),
icon: 'bi-balloon',
click: (args: any) => {
const sampleData = [
{ level: 1, category: '财务预警', condition: '${资产负债率}>0.3', value: '${资产负债率}', message: '资产负债率: ${资产负债率}, 大于 0.3' },
{ level: 1, category: '财务预警', condition: '${净利润率}>0.3', value: '${净利润率}', message: '净利润率: ${净利润率}, 大于 0.3' },
];
args.grid.setLocalData(sampleData);
},
},
],
columns: [
{ width: 60, name: 'level', label: $t('level') },
{ width: 100, name: 'category', label: $t('category') },
{ width: 250, name: 'condition', label: $t('condition') },
{ width: 200, name: 'value', label: $t('value') },
{ width: '100%', name: 'message', label: $t('message') },
],
editor: {
cellDialog: {
width: '1024px',
},
form: {
colsNum: 1,
fields: [
{ name: 'level', label: $t('level'), type: 'w-integer' },
{ name: 'category', label: $t('category'), type: 'w-text' },
{
name: 'condition',
label: $t('condition'),
type: 'w-code-mirror',
lang: 'java',
rows: 4,
lineWrap: true,
lineBreak: false,
placeholder: true,
autoCompletion: this.autoCompletionManager.autoCompletion(),
userDefinedFunctions: this.userDefinedFunctionsManager.userDefinedFunctions(),
},
{
name: 'value',
label: $t('value'),
type: 'w-code-mirror',
lang: 'java',
rows: 4,
lineWrap: true,
lineBreak: false,
placeholder: true,
autoCompletion: this.autoCompletionManager.autoCompletion(),
userDefinedFunctions: this.userDefinedFunctionsManager.userDefinedFunctions(),
},
{
name: 'message',
label: $t('message'),
type: 'w-code-mirror',
lang: 'java',
rows: 4,
lineWrap: true,
lineBreak: false,
placeholder: true,
autoCompletion: this.autoCompletionManager.autoCompletion(),
userDefinedFunctions: this.userDefinedFunctionsManager.userDefinedFunctions(),
},
],
},
},
onAfterEditorOpen: (args: any) => {
this.initAutoCompletionManager();
this.initUserDefinedFunctionsManager();
},
},
];
}
public getViewerFields(): any {
return [{ name: 'singleRule', label: $t('re.processor.grid.entity.singleRule') }];
}
public beforeEditorDataSubmit(args: any): void {
const grid = args.grid.getEditorForm().getFieldComponent('singleRule');
const localData: any[] = grid.getRows();
const rules: any[] = [];
localData.forEach((item) => {
rules.push({
level: item.level,
category: item.category,
condition: item.condition,
value: item.value,
message: item.message,
});
});
args.data.singleRule = Tools.object2Json(rules);
}
public afterEditorOpen(args: any): void {
args.grid.getEditorDialog().setWidth(this.EDITOR_DIALOG_WIDTH);
this.initAutoCompletionManager();
this.initUserDefinedFunctionsManager();
const form = args.grid.getEditorForm();
const grid = args.grid.getEditorForm().getFieldComponent('singleRule');
switch (form.getStatus()) {
case 'add': // 新增时清空表格内容
grid.setLocalData([]);
break;
case 'edit': // 编辑/复制时填充表格内容
case 'clone':
const data = Tools.json2Object(args.data.singleRule);
grid.setLocalData(data);
break;
}
}
}
export { SingleRule };