-
-
-
-
@@ -39,11 +39,12 @@ const fileRef = ref();
const importData = () => {
axios
.post(
- Environment.apiContextPath('/api/re/dictionary/import'),
+ Environment.apiContextPath('/api/re/lib/import'),
{
file: fileRef.value.nativeEl.files[0],
},
{
+ loading: true,
headers: {
'Content-Type': 'multipart/form-data',
},
diff --git a/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue b/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
index 3c989b9b..c52c6086 100644
--- a/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
+++ b/io.sc.engine.rule.frontend/src/views/lib/IndicatorGrid.vue
@@ -3,11 +3,12 @@
{
- return ValueTypeMap[value];
+ if (row.valueTypeVersion) {
+ return ValueTypeMap[value] + ' (V' + row.valueTypeVersion + ')';
+ }
+ if (row.valueType == 'java.math.BigDecimal') {
+ if (row.valueRoundingMode == 'HALF_UP') {
+ return ValueTypeMap[value] + '(' + row.valueScale + ')';
+ } else {
+ return ValueTypeMap[value] + '(' + row.valueScale + ',' + Formater.enum(Enums.RoundingMode)(row.valueRoundingMode) + ')';
+ }
+ }
+ var result = ValueTypeMap[value];
+ result = result || row.valueType;
+ if (result) {
+ result = result.replace('<', '<');
+ result = result.replace('>', '>');
+ }
+ return result;
},
},
{ width: 80, name: 'valueTypeIsList', label: $t('re.resources.designer.parameter.grid.entity.valueTypeIsList'), format: Formater.checkTag() },
@@ -117,16 +134,96 @@
form: {
colsNum: 1,
fields: [
+ { name: 'lib', label: $t('lib'), type: 'text', defaultValue: lib.id, hidden: true },
{ name: 'name', label: $t('name'), type: 'text' },
{ name: 'type', label: $t('type'), type: 'select', options: Options.enum(Enums.IndicatorType) },
{
name: 'valueType',
- label: $t('valueType'),
+ label: $t('re.resources.designer.parameter.grid.entity.valueType'),
type: 'select',
- options: [],
+ options: ValueTypeList,
+ 'onUpdate:modelValue': (value) => {
+ axios.get(Environment.apiContextPath('/api/re/dictionary/getVersionsByCode?code=' + value)).then((response) => {
+ const data = response.data;
+ const options = [];
+ for (const item of data) {
+ options.push({ label: item.key, value: item.value });
+ }
+ valueTypeVersionRef = options;
+ });
+ },
+ },
+ {
+ name: 'valueTypeVersion',
+ label: $t('re.resources.designer.parameter.grid.entity.valueTypeVersion'),
+ type: 'select',
+ options: valueTypeVersionRef,
+ showIf: (arg) => {
+ const valueType = arg.form.getFieldValue('valueType');
+ if (valueType) {
+ if (
+ valueType == 'java.lang.Boolean' ||
+ valueType == 'java.lang.Long' ||
+ valueType == 'java.lang.Float' ||
+ valueType == 'Float' ||
+ valueType == 'java.math.BigDecimal' ||
+ valueType == 'java.lang.String' ||
+ valueType == 'java.util.Date' ||
+ valueType == 'io.sc.engine.rule.core.classes.ResourceAbstract' ||
+ valueType == 'io.sc.engine.rule.core.classes.RuleResult' ||
+ valueType == 'io.sc.engine.rule.core.classes.SingleRuleResult' ||
+ valueType.startsWith('List') ||
+ valueType.startsWith('Map')
+ ) {
+ return false;
+ } else if (Tools.isUndefinedOrNull(ValueTypeMap[valueType])) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ },
+ },
+ {
+ name: 'valueScale',
+ label: $t('re.resources.designer.parameter.grid.entity.valueScale'),
+ type: 'number',
+ showIf: (arg) => {
+ const valueType = arg.form.getFieldValue('valueType');
+ const type = arg.form.getFieldValue('type');
+ if (valueType == 'java.math.BigDecimal' && type === 'INDICATOR') {
+ return true;
+ }
+ return false;
+ },
+ },
+ {
+ name: 'valueRoundingMode',
+ label: $t('re.resources.designer.parameter.grid.entity.valueRoundingMode'),
+ type: 'select',
+ options: Options.enum(Enums.RoundingMode),
+ showIf: (arg) => {
+ const valueType = arg.form.getFieldValue('valueType');
+ const type = arg.form.getFieldValue('type');
+ if (valueType == 'java.math.BigDecimal' && type === 'INDICATOR') {
+ return true;
+ }
+ return false;
+ },
+ },
+ {
+ name: 'valueTypeIsList',
+ label: $t('re.resources.designer.parameter.grid.entity.valueTypeIsList'),
+ type: 'checkbox',
+ defaultValue: false,
},
- { name: 'valueTypeIsList', label: $t('re.resources.designer.parameter.grid.entity.valueTypeIsList'), type: 'checkbox' },
- { name: 'defaultValue', label: $t('defaultValue'), type: 'text' },
+ {
+ name: 'defaultValue',
+ label: $t('defaultValue'),
+ type: 'text',
+ },
+
{ name: 'order', label: $t('order'), type: 'number' },
],
},
@@ -164,7 +261,8 @@
diff --git a/io.sc.engine.rule.frontend/src/views/lib/ProcessorGrid.vue b/io.sc.engine.rule.frontend/src/views/lib/ProcessorGrid.vue
index 7e6e6a26..83986080 100644
--- a/io.sc.engine.rule.frontend/src/views/lib/ProcessorGrid.vue
+++ b/io.sc.engine.rule.frontend/src/views/lib/ProcessorGrid.vue
@@ -1,701 +1,1228 @@
-
+ {
- const form = gridRef.getEditorForm();
- if ('NUMBER_RANGE' === data.type) {
- const grid = form.getFieldComponent('numberRange');
- const localData = grid.getLocalData();
- const ranges = [];
- for (const item of localData) {
- ranges.push({
- uuid: item.uuid,
- minIncluded: item.minIncluded,
- min: item.min,
- max: item.max,
- maxIncluded: item.maxIncluded,
- value: item.value,
- });
- }
- data.numberRange = Tools.object2Json(ranges);
- } else if ('CONDITION_RANGE' === data.type) {
- const grid = form.getFieldComponent('conditionRange');
- const localData = grid.getLocalData();
- const ranges = [];
- for (const item of localData) {
- ranges.push({
- uuid: item.uuid,
- condition: item.condition,
- value: item.value,
- });
+ { name: 'dataComeFrom', label: $t('dataComeFrom') },
+ { name: 'creator', label: $t('creator') },
+ { name: 'createDate', label: $t('createDate') },
+ { name: 'lastModifier', label: $t('lastModifier') },
+ { name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
+ ],
+ },
+ }"
+ @before-editor-data-submit="
+ (data, callback) => {
+ const form = gridRef.getEditorForm();
+ if ('OBJECT_PROPERTIES' === data.type) {
+ const grid = form.getFieldComponent('objectProperties');
+ const localData = grid.getLocalData();
+ const objectProperties = [];
+ for (const item of localData) {
+ objectProperties.push({
+ code: item.code,
+ name: item.name,
+ expression: item.expression,
+ });
+ }
+ data.objectProperties = Tools.object2Json(objectProperties);
+ } else if ('NUMBER_RANGE' === data.type) {
+ const grid = form.getFieldComponent('numberRange');
+ const localData = grid.getLocalData();
+ const ranges = [];
+ for (const item of localData) {
+ ranges.push({
+ uuid: item.uuid,
+ minIncluded: item.minIncluded,
+ min: item.min,
+ max: item.max,
+ maxIncluded: item.maxIncluded,
+ value: item.value,
+ });
+ }
+ data.numberRange = Tools.object2Json(ranges);
+ } else if ('CONDITION_RANGE' === data.type) {
+ const grid = form.getFieldComponent('conditionRange');
+ const localData = grid.getLocalData();
+ const ranges = [];
+ for (const item of localData) {
+ ranges.push({
+ uuid: item.uuid,
+ condition: item.condition,
+ value: item.value,
+ });
+ }
+ data.conditionRange = Tools.object2Json(ranges);
+ } else if ('SQL' === data.type) {
+ const sqlParameterValuesGrid = form.getFieldComponent('sqlParameterValues');
+ const sqlParameterValuesLocalData = sqlParameterValuesGrid.getLocalData();
+ const sqlParameterValues = [];
+ for (const item of sqlParameterValuesLocalData) {
+ sqlParameterValues.push({
+ uuid: item.uuid,
+ name: item.name,
+ value: item.value,
+ });
+ }
+ data.sqlParameterValues = Tools.object2Json(sqlParameterValues);
+
+ const sqlFieldMappingGrid = form.getFieldComponent('sqlFieldMapping');
+ const sqlFieldMappingLocalData = sqlFieldMappingGrid.getLocalData();
+ const sqlFieldMapping = [];
+ for (const item of sqlFieldMappingLocalData) {
+ sqlFieldMapping.push({
+ uuid: item.uuid,
+ field: item.field,
+ parameter: item.parameter,
+ });
+ }
+ data.sqlFieldMapping = Tools.object2Json(sqlFieldMapping);
}
- data.conditionRange = Tools.object2Json(ranges);
}
- }
- "
- @after-editor-open="
- (row) => {
- axios.get(Environment.apiContextPath('/api/re/indicator/listParemterHintsByIndicatorId/' + indicator.id)).then((response) => {
- const names = [];
- if (response.data?.parentParameterNames && response.data?.parentParameterNames.length > 0) {
- for (const item of response.data?.parentParameterNames) {
- names.push({ label: item, type: 'variable', apply: '${' + item + '}' });
- }
+ "
+ @after-editor-open="
+ (row) => {
+ // 获取代码提示列表
+ axios.get(Environment.apiContextPath('/api/re/common/listParameterAndValueTypeByIndicatorId/' + indicator.id)).then((response) => {
+ autoCompletionManager.setParameters(response.data.parameters);
+ autoCompletionManager.setValueTypes(response.data.valueTypes);
+ });
+ if ('add' == gridRef.getEditorForm().getStatus()) {
+ // 获取对象属性列表
+ axios.get(Environment.apiContextPath('/api/re/indicator/listObejctPropertiesByIndicatorId/' + indicator.id)).then((response) => {
+ const properties = response.data;
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ grid?.setLocalData(properties);
+ });
+ } else if ('edit' == gridRef.getEditorForm().getStatus()) {
+ // 获取对象属性列表
+ axios.get(Environment.apiContextPath('/api/re/indicator/processor/listObejctPropertiesByProcessorId/' + row.id)).then((response) => {
+ const properties = response.data;
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ grid?.setLocalData(properties);
+ });
}
- if (response.data?.parameterNames && response.data?.parameterNames.length > 0) {
- for (const item of response.data?.parameterNames) {
- names.push({ label: item, type: 'variable', apply: '${' + item + '}' });
- }
+
+ const type = gridRef.getEditorForm().getFieldValue('type');
+ if ('NUMBER_RANGE' === type) {
+ const grid = gridRef.getEditorForm().getFieldComponent('numberRange');
+ const rows = Tools.json2Object(row.numberRange);
+ grid.setLocalData(rows);
+ } else if ('CONDITION_RANGE' === type) {
+ const grid = gridRef.getEditorForm().getFieldComponent('conditionRange');
+ const rows = Tools.json2Object(row.conditionRange);
+ grid.setLocalData(rows);
+ } else if ('SQL' === type) {
+ const sqlParameterValuesGrid = gridRef.getEditorForm().getFieldComponent('sqlParameterValues');
+ const sqlParameterValuesRows = Tools.json2Object(row.sqlParameterValues);
+ sqlParameterValuesGrid.setLocalData(sqlParameterValuesRows);
+
+ const sqlFieldMappingGrid = gridRef.getEditorForm().getFieldComponent('sqlFieldMapping');
+ const sqlFieldMappingRows = Tools.json2Object(row.sqlFieldMapping);
+ sqlFieldMappingGrid.setLocalData(sqlFieldMappingRows);
}
- autoCompletionOptionsRef = names;
- });
- const type = gridRef.getEditorForm().getFieldValue('type');
- if ('NUMBER_RANGE' === type) {
- const grid = gridRef.getEditorForm().getFieldComponent('numberRange');
- const rows = Tools.json2Object(row.numberRange);
- grid.setLocalData(rows);
- } else if ('CONDITION_RANGE' === type) {
- const grid = gridRef.getEditorForm().getFieldComponent('conditionRange');
- const rows = Tools.json2Object(row.conditionRange);
- grid.setLocalData(rows);
}
- }
- "
- >
+ "
+ >
+ {
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ grid.setLocalData(objectProperties);
+ }
+ "
+ >
+
diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/ObjectPropertiesMatcherDialog.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/ObjectPropertiesMatcherDialog.vue
new file mode 100644
index 00000000..a406d261
--- /dev/null
+++ b/io.sc.engine.rule.frontend/src/views/resources/designer/ObjectPropertiesMatcherDialog.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue
index 44a2c33a..7da83e83 100644
--- a/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue
+++ b/io.sc.engine.rule.frontend/src/views/resources/designer/Parameter.vue
@@ -8,9 +8,10 @@
hide-bottom
:config-button="false"
selection="multiple"
+ db-click-operation="edit"
:checkbox-selection="true"
:tree="false"
- :fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/findByModelId?modelId=' + model.id)"
+ :fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/findParametersByModelId?modelId=' + model.id)"
:data-url="Environment.apiContextPath('/api/re/model/parameter')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
@@ -205,11 +206,11 @@
form: {
colsNum: 1,
fields: [
+ { name: 'type', label: $t('type'), type: 'select', options: Options.enum(Enums.ParameterType), 'onUpdate:modelValue': (value) => {} },
{ name: 'model', label: $t('modelId'), type: 'text', defaultValue: model.id, hidden: true },
{ name: 'code', label: $t('code'), type: 'text' },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), type: 'text' },
- { name: 'type', label: $t('type'), type: 'select', options: Options.enum(Enums.ParameterType) },
{
name: 'libCode',
label: $t('re.resources.designer.parameter.grid.entity.libCode'),
@@ -252,6 +253,7 @@
label: $t('re.resources.designer.parameter.grid.entity.valueType'),
type: 'select',
options: ValueTypeList,
+ defaultValue: 'java.math.BigDecimal',
showIf: (arg) => {
const type = arg.form.getFieldValue('type');
if (type == 'INDICATOR' || type == 'IN_OPTION' || type == 'RULE_RESULT' || type == 'SINGLE_RULE_RESULT') {
@@ -259,13 +261,29 @@
}
return true;
},
+ 'onUpdate:modelValue': (value) => {
+ const valueType = gridRef.getEditorForm().getFieldValue('valueType');
+ axios.get(Environment.apiContextPath('/api/re/dictionary/getVersionsByCode?code=' + valueType)).then((response) => {
+ const versions = response.data;
+ const options = [];
+ for (const version of versions) {
+ options.push({ label: version.key, value: version.value });
+ }
+ valueTypeVersionOptionsRef = options;
+ });
+ },
},
{
name: 'valueTypeVersion',
label: $t('re.resources.designer.parameter.grid.entity.valueTypeVersion'),
type: 'select',
- options: ValueTypeList,
+ clearable: true,
+ options: valueTypeVersionOptionsRef,
showIf: (arg) => {
+ const type = arg.form.getFieldValue('type');
+ if (type == 'INDICATOR' || type == 'IN_OPTION' || type == 'RULE_RESULT' || type == 'SINGLE_RULE_RESULT') {
+ return false;
+ }
const valueType = arg.form.getFieldValue('valueType');
if (valueType) {
if (
@@ -276,9 +294,9 @@
valueType == 'java.math.BigDecimal' ||
valueType == 'java.lang.String' ||
valueType == 'java.util.Date' ||
- valueType == 'org.wsp.engine.rule.core.classes.ResourceAbstract' ||
- valueType == 'org.wsp.engine.rule.core.classes.RuleResult' ||
- valueType == 'org.wsp.engine.rule.core.classes.SingleRuleResult' ||
+ valueType == 'io.sc.engine.rule.core.classes.ResourceAbstract' ||
+ valueType == 'io.sc.engine.rule.core.classes.RuleResult' ||
+ valueType == 'io.sc.engine.rule.core.classes.SingleRuleResult' ||
valueType.startsWith('List') ||
valueType.startsWith('Map')
) {
@@ -296,10 +314,17 @@
name: 'valueScale',
label: $t('re.resources.designer.parameter.grid.entity.valueScale'),
type: 'number',
+ defaultValue: 6,
showIf: (arg) => {
const valueType = arg.form.getFieldValue('valueType');
const type = arg.form.getFieldValue('type');
- if (valueType == 'java.math.BigDecimal' && type != 'INDICATOR' && type != 'RULE_RESULT' && type != 'SINGLE_RULE_RESULT') {
+ if (
+ valueType == 'java.math.BigDecimal' &&
+ type != 'INDICATOR' &&
+ type != 'IN_OPTION' &&
+ type != 'RULE_RESULT' &&
+ type != 'SINGLE_RULE_RESULT'
+ ) {
return true;
}
return false;
@@ -310,10 +335,17 @@
label: $t('re.resources.designer.parameter.grid.entity.valueRoundingMode'),
type: 'select',
options: Options.enum(Enums.RoundingMode),
+ defaultValue: 'HALF_UP',
showIf: (arg) => {
const valueType = arg.form.getFieldValue('valueType');
const type = arg.form.getFieldValue('type');
- if (valueType == 'java.math.BigDecimal' && type != 'INDICATOR' && type != 'RULE_RESULT' && type != 'SINGLE_RULE_RESULT') {
+ if (
+ valueType == 'java.math.BigDecimal' &&
+ type != 'INDICATOR' &&
+ type != 'IN_OPTION' &&
+ type != 'RULE_RESULT' &&
+ type != 'SINGLE_RULE_RESULT'
+ ) {
return true;
}
return false;
@@ -391,8 +423,8 @@
"
@after-editor-open="
(row) => {
- console.log(row);
- if (row.type === 'INDICATOR') {
+ const type = gridRef.getEditorForm().getFieldValue('type');
+ if (type === 'INDICATOR') {
axios.get(Environment.apiContextPath('/api/re/lib/isc/getLibInformationWrapper')).then((response) => {
IndicatorManager.setWrapper(response.data);
libCodeOptionsRef = IndicatorManager.getLibMap();
@@ -400,6 +432,34 @@
indicatorCodeOptionsRef = IndicatorManager.getIndicatorMap(row.libCode, row.libVersion);
});
}
+
+ const valueType = gridRef.getEditorForm().getFieldValue('valueType');
+ if (valueType) {
+ if (
+ valueType !== 'java.lang.Boolean' &&
+ valueType !== 'java.lang.Long' &&
+ valueType !== 'java.lang.Float' &&
+ valueType !== 'Float' &&
+ valueType !== 'java.math.BigDecimal' &&
+ valueType !== 'java.lang.String' &&
+ valueType !== 'java.util.Date' &&
+ valueType !== 'io.sc.engine.rule.core.classes.ResourceAbstract' &&
+ valueType !== 'io.sc.engine.rule.core.classes.RuleResult' &&
+ valueType !== 'io.sc.engine.rule.core.classes.SingleRuleResult' &&
+ !valueType.startsWith('List') &&
+ !valueType.startsWith('Map') &&
+ ValueTypeMap[valueType]
+ ) {
+ axios.get(Environment.apiContextPath('/api/re/dictionary/getVersionsByCode?code=' + valueType)).then((response) => {
+ const versions = response.data;
+ const options = [];
+ for (const version of versions) {
+ options.push({ label: version.key, value: version.value });
+ }
+ valueTypeVersionOptionsRef = options;
+ });
+ }
+ }
}
"
>
@@ -426,6 +486,7 @@ const emit = defineEmits<{
}>();
const gridRef = ref();
+const valueTypeVersionOptionsRef = ref([]);
const libCodeOptionsRef = ref([]);
const libVersionOptionsRef = ref();
const indicatorCodeOptionsRef = ref();
diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue
index d34ff2c1..17203bda 100644
--- a/io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue
+++ b/io.sc.engine.rule.frontend/src/views/resources/designer/Processor.vue
@@ -8,6 +8,7 @@
hide-bottom
:config-button="false"
selection="multiple"
+ db-click-operation="edit"
:checkbox-selection="true"
:tree="false"
:fetch-data-url="Environment.apiContextPath('/api/re/model/parameter/processor/findByParameterId?parameterId=' + parameter.id)"
@@ -25,6 +26,32 @@
},
click: undefined,
},
+ {
+ extend: 'add',
+ name: 'objectProperties',
+ label: Formater.enum(Enums.ProcessorType)('OBJECT_PROPERTIES'),
+ icon: 'bi-card-list',
+ enableIf: (arg) => {
+ const valueType = parameter.valueType;
+ return (
+ valueType !== 'java.lang.Boolean' &&
+ valueType !== 'java.lang.Long' &&
+ valueType !== 'java.lang.Float' &&
+ valueType !== 'Float' &&
+ valueType !== 'java.math.BigDecimal' &&
+ valueType !== 'java.lang.String' &&
+ valueType !== 'java.util.Date' &&
+ valueType !== 'io.sc.engine.rule.core.classes.ResourceAbstract' &&
+ valueType !== 'io.sc.engine.rule.core.classes.RuleResult' &&
+ valueType !== 'io.sc.engine.rule.core.classes.SingleRuleResult' &&
+ !valueType.startsWith('List') &&
+ !valueType.startsWith('Map')
+ );
+ },
+ afterClick: (arg) => {
+ arg.grid.getEditorForm().setFieldValue('type', 'OBJECT_PROPERTIES');
+ },
+ },
{
extend: 'add',
name: 'optionValue',
@@ -37,7 +64,6 @@
arg.grid.getEditorForm().setFieldValue('type', 'OPTION_VALUE');
},
},
- /*
{
extend: 'add',
name: 'mathFormula',
@@ -49,7 +75,7 @@
afterClick: (arg) => {
arg.grid.getEditorForm().setFieldValue('type', 'MATH_FORMULA');
},
- },*/
+ },
{
extend: 'add',
name: 'arithmetic',
@@ -283,10 +309,49 @@
sortable: false,
format: (value, row) => {
const type = row.type;
- if ('OPTION_VALUE' === type) {
+ if ('OBJECT_PROPERTIES' === type) {
+ let str = '';
+ if (row.objectCondition) {
+ str += `
When ` + PlaceHolder.replace(row.objectCondition) + ' Then
';
+ }
+ const objs = Tools.json2Object(row.objectProperties);
+ if (objs) {
+ str += `
`;
+ str += `
`;
+ for (let i = 0; i < objs.length; i++) {
+ const obj = objs[i];
+ str += '';
+ str += ` ` + obj.name + ` | `;
+ str += ` ` + ('' + PlaceHolder.replace(obj.expression)) + ' | ';
+ str += '
';
+ }
+ str += '
';
+ str += `
`;
+ }
+ return str;
+ } else if ('OPTION_VALUE' === type) {
return row.optionCode;
+ } else if ('MATH_FORMULA' === type) {
+ return {
+ componentType: 'w-expression',
+ attrs: {
+ modelValue: row.mathFormula,
+ readOnly: true,
+ zoom: 2,
+ },
+ };
} else if ('ARITHMETIC' === type) {
- return PlaceHolder.replace(row.arithmetic);
+ return {
+ componentType: 'w-code-mirror',
+ attrs: {
+ lang: 'java',
+ rows: 4,
+ modelValue: row.arithmetic,
+ editable: false,
+ placeholder: true,
+ lineWrap: true,
+ },
+ };
} else if ('TERNARY' === type) {
return row.ternaryCondition + '
? ' + row.ternaryTrue + '
: ' + row.ternaryFalse;
} else if ('WHEN_THEN' === type) {
@@ -304,8 +369,8 @@
} else if ('NUMBER_RANGE' === type) {
const objs = Tools.json2Object(row.numberRange);
if (objs) {
- let str = `
`;
- str += `
`;
+ let str = ``;
+ str += `
`;
for (let i = 0; i < objs.length; i++) {
const obj = objs[i];
str += '';
@@ -324,8 +389,8 @@
} else if ('CONDITION_RANGE' === type) {
const objs = Tools.json2Object(row.conditionRange);
if (objs) {
- let str = ``;
- str += `
`;
+ let str = ``;
+ str += `
`;
for (let i = 0; i < objs.length; i++) {
const obj = objs[i];
str += '';
@@ -346,24 +411,149 @@
return transfromContent(row.decisionTree);
} else if ('EXECUTION_FLOW' === type) {
return transfromContent(row.executionFlow);
+ } else if ('SQL' === type) {
+ return {
+ componentType: 'w-code-mirror',
+ attrs: {
+ lang: 'sql',
+ rows: 4,
+ editable: false,
+ modelValue: row.sql,
+ placeholder: true,
+ },
+ };
}
},
},
]"
:editor="{
dialog: {
- width: '800px',
+ width: editorDialogWidthRef,
},
form: {
- colsNum: 1,
+ colsNum: 5,
fields: [
- { name: 'parameter', label: 'parameter', type: 'text', defaultValue: parameter.id, hidden: true },
- { name: 'id', label: $t('id'), type: 'text', hidden: true },
- { name: 'order', label: $t('order'), type: 'number', hidden: true },
- { name: 'type', label: $t('type'), type: 'text', hidden: true },
- { name: 'description', label: $t('description'), type: 'text', hidden: true },
- { name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true, hidden: true },
+ { colSpan: 5, name: 'parameter', label: 'parameter', type: 'text', defaultValue: parameter.id, hidden: true },
+ { colSpan: 5, name: 'id', label: $t('id'), type: 'text', hidden: true },
+ { colSpan: 5, name: 'order', label: $t('order'), type: 'number', hidden: true },
+ { colSpan: 5, name: 'type', label: $t('type'), type: 'text', hidden: true },
+ { colSpan: 5, name: 'description', label: $t('description'), type: 'text', hidden: true },
+ { colSpan: 5, name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true, hidden: true },
{
+ colSpan: 5,
+ name: 'objectCondition',
+ label: $t('re.resources.designer.processor.grid.entity.objectCondition'),
+ type: 'code-mirror',
+ lang: 'java',
+ rows: 3,
+ lineWrap: true,
+ lineBreak: false,
+ autoCompletion: autoCompletion,
+ showIf: (arg) => {
+ return 'OBJECT_PROPERTIES' === arg.form.getFieldValue('type');
+ },
+ },
+ {
+ colSpan: 5,
+ name: 'objectProperties',
+ label: $t('re.resources.designer.processor.grid.entity.objectProperties'),
+ showIf: (arg) => {
+ return 'OBJECT_PROPERTIES' === arg.form.getFieldValue('type');
+ },
+ type: 'w-grid',
+ title: $t('re.resources.designer.processor.grid.entity.objectProperties'),
+ height: 400,
+ autoFetchData: false,
+ dbClickOperation: 'edit',
+ dense: true,
+ draggable: true,
+ pageable: false,
+ configButton: false,
+ toolbarConfigure: { noIcon: false },
+ toolbarActions: [
+ 'separator',
+ {
+ name: 'autoMatch',
+ label: $t('autoMatch'),
+ icon: 'bi-link-45deg',
+ click: () => {
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ const localData = grid.getLocalData();
+ const objectProperties = [];
+ for (const item of localData) {
+ objectProperties.push({
+ code: item.code,
+ name: item.name,
+ expression: item.expression,
+ });
+ }
+ objectPropertiesMatcherDialogRef.open(objectProperties);
+ },
+ },
+ 'edit',
+ ],
+ primaryKey: 'code',
+ columns: [
+ { name: 'code', label: 'code', hidden: true },
+ {
+ width: 300,
+ name: 'name',
+ label: $t('propertyName'),
+ align: 'left',
+ sortable: false,
+ format: (value, row) => {
+ if (row.expression) {
+ const expression = row.expression.replace(/\$\{(.+?)\.(.+?)\}/g, '$2');
+ if (expression.trim() !== value.trim()) {
+ return `` + value + '';
+ }
+ }
+ return value;
+ },
+ },
+ {
+ width: '100%',
+ name: 'expression',
+ label: $t('expression'),
+ sortable: false,
+ format: (value) => {
+ return PlaceHolder.replace(value);
+ },
+ },
+ ],
+ editor: {
+ dialog: {
+ width: '800px',
+ },
+ form: {
+ colsNum: 1,
+ fields: [
+ { name: 'code', label: 'code', hidden: true },
+ {
+ name: 'expression',
+ label: $t('expression'),
+ type: 'code-mirror',
+ lang: 'java',
+ rows: 3,
+ lineWrap: true,
+ lineBreak: false,
+ placeholder: true,
+ autoCompletion: autoCompletion,
+ },
+ ],
+ },
+ },
+ onBeforeEditorDataSubmit: (data, callback) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ const form = grid.getEditorForm();
+ if ('edit' == form.getStatus()) {
+ grid.replaceRow(data);
+ callback(false);
+ }
+ },
+ },
+ {
+ colSpan: 5,
name: 'optionCode',
label: $t('re.resources.designer.processor.grid.entity.optionCode'),
type: 'select',
@@ -371,100 +561,108 @@
showIf: (arg) => {
return 'OPTION_VALUE' === arg.form.getFieldValue('type');
},
- } /*
+ },
{
+ colSpan: 5,
name: 'mathFormula',
label: $t('re.resources.designer.processor.grid.entity.mathFormula'),
type: 'expression',
showIf: (arg) => {
return 'MATH_FORMULA' === arg.form.getFieldValue('type');
},
- },*/,
+ },
{
+ colSpan: 5,
name: 'arithmetic',
label: $t('re.resources.designer.processor.grid.entity.arithmetic'),
type: 'code-mirror',
lang: 'java',
rows: 5,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ lineWrap: true,
+ lineBreak: false,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'ARITHMETIC' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'ternaryCondition',
label: $t('re.resources.designer.processor.grid.entity.ternaryCondition'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ lineWrap: true,
+ lineBreak: false,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'TERNARY' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'ternaryTrue',
label: $t('re.resources.designer.processor.grid.entity.ternaryTrue'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ lineWrap: true,
+ lineBreak: false,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'TERNARY' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'ternaryFalse',
label: $t('re.resources.designer.processor.grid.entity.ternaryFalse'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ lineWrap: true,
+ lineBreak: false,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'TERNARY' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'when',
label: $t('re.resources.designer.processor.grid.entity.when'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
+ lineWrap: true,
+ lineBreak: false,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'WHEN_THEN' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'then',
label: $t('re.resources.designer.processor.grid.entity.then'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
+ lineWrap: true,
+ lineBreak: false,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'WHEN_THEN' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'isWhenThenShorted',
label: $t('re.resources.designer.processor.grid.entity.isWhenThenShorted'),
type: 'checkbox',
@@ -473,6 +671,7 @@
},
},
{
+ colSpan: 5,
name: 'numberRangeVar',
label: $t('re.resources.designer.processor.grid.entity.numberRangeVar'),
showIf: (arg) => {
@@ -480,13 +679,14 @@
},
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 3,
+ lineWrap: true,
+ lineBreak: false,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ autoCompletion: autoCompletion,
},
{
+ colSpan: 5,
name: 'numberRange',
label: $t('re.resources.designer.processor.grid.entity.numberRange'),
showIf: (arg) => {
@@ -494,6 +694,7 @@
},
type: 'w-grid',
height: 300,
+ autoFetchData: false,
denseBody: true,
draggable: true,
pageable: false,
@@ -594,6 +795,7 @@
},
},
{
+ colSpan: 5,
name: 'conditionRange',
label: $t('re.resources.designer.processor.grid.entity.conditionRange'),
showIf: (arg) => {
@@ -601,6 +803,7 @@
},
type: 'w-grid',
height: 300,
+ autoFetchData: false,
denseBody: true,
draggable: true,
pageable: false,
@@ -669,22 +872,22 @@
label: $t('condition'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ lineWrap: true,
+ lineBreak: false,
+ autoCompletion: autoCompletion,
},
{
name: 'value',
label: $t('value'),
type: 'code-mirror',
lang: 'java',
- rows: 1,
+ rows: 4,
+ lineWrap: true,
+ lineBreak: false,
placeholder: true,
- autoCompletion: true,
- autoCompletionOptions: autoCompletionOptionsRef,
- extAutoCompletionOptions: GroovyFunctions,
+ autoCompletion: autoCompletion,
},
],
},
@@ -703,6 +906,7 @@
},
},
{
+ colSpan: 5,
name: 'decisionTable2C',
label: $t('re.resources.designer.processor.grid.entity.decisionTable2C'),
type: 'code-mirror',
@@ -712,6 +916,7 @@
},
},
{
+ colSpan: 5,
name: 'decisionTable',
label: $t('re.resources.designer.processor.grid.entity.decisionTable'),
type: 'code-mirror',
@@ -721,36 +926,44 @@
},
},
{
+ colSpan: 5,
name: 'decisionTree',
label: $t('re.resources.designer.processor.grid.entity.decisionTree'),
type: 'code-mirror',
rows: 20,
lineNumber: true,
+ toolbar: false,
showIf: (arg) => {
return 'DECISION_TREE' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'executionFlow',
label: $t('re.resources.designer.processor.grid.entity.executionFlow'),
type: 'code-mirror',
- rows: 1,
+ rows: 20,
+ lineNumber: true,
+ toolbar: false,
showIf: (arg) => {
return 'EXECUTION_FLOW' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'pmml',
label: $t('re.resources.designer.processor.grid.entity.pmml'),
type: 'code-mirror',
- rows: 10,
+ rows: 20,
lineNumber: true,
+ toolbar: false,
lang: 'xml',
showIf: (arg) => {
return 'PMML' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 5,
name: 'groovyScript',
label: $t('re.resources.designer.processor.grid.entity.groovyScript'),
type: 'code-mirror',
@@ -762,40 +975,290 @@
},
},
{
+ colSpan: 5,
name: 'sqlDatasourceName',
label: $t('re.resources.designer.processor.grid.entity.sqlDatasourceName'),
type: 'select',
+ clearable: true,
+ options: dsOptionsRef,
rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 3,
name: 'sql',
label: $t('re.resources.designer.processor.grid.entity.sql'),
- type: 'select',
- rows: 1,
+ type: 'code-mirror',
+ height: 180,
+ lang: 'sql',
+ toolbar: false,
+ placeholder: true,
+ autoCompletion: autoCompletion,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
},
{
+ colSpan: 2,
name: 'sqlParameterValues',
label: $t('re.resources.designer.processor.grid.entity.sqlParameterValues'),
- type: 'select',
- rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
+ type: 'w-grid',
+ height: 150,
+ title: $t('re.resources.designer.processor.grid.entity.sqlParameterValues'),
+ autoFetchData: false,
+ dense: true,
+ dbClickOperation: 'edit',
+ draggable: true,
+ pageable: false,
+ configButton: false,
+ toolbarConfigure: { noIcon: false },
+ toolbarActions: [
+ {
+ name: 'analyze',
+ label: $t('analyze'),
+ icon: 'bi-tag',
+ click: (arg) => {
+ const sql = gridRef.getEditorForm().getFieldValue('sql');
+ const regex = /\$\{[\u0000-\uFFFF]+?\}/g;
+ const array = sql.match(regex);
+ const rows = [];
+ for (const item of array) {
+ rows.push({ uuid: Tools.uuid(), name: item, value: '' });
+ }
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlParameterValues');
+ grid.setLocalData(rows);
+ },
+ },
+ 'separator',
+ 'add',
+ 'edit',
+ [
+ {
+ extend: 'remove',
+ click: (arg) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlParameterValues');
+ grid.removeRows(arg.selecteds);
+ },
+ },
+ {
+ extend: 'remove',
+ name: 'removeAll',
+ label: $t('deleteAll'),
+ click: (arg) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlParameterValues');
+ grid.setLocalData([]);
+ },
+ },
+ ],
+ ],
+ primaryKey: 'uuid',
+ columns: [
+ { name: 'uuid', label: 'uuid', hidden: true },
+ {
+ width: '50%',
+ name: 'name',
+ label: $t('name'),
+ align: 'left',
+ sortable: false,
+ format: (value) => {
+ return PlaceHolder.replace(value);
+ },
+ },
+ {
+ width: '100%',
+ name: 'value',
+ label: $t('value'),
+ sortable: false,
+ },
+ ],
+ editor: {
+ dialog: {
+ width: '600px',
+ },
+ form: {
+ colsNum: 1,
+ fields: [
+ { name: 'uuid', label: 'uuid', hidden: true },
+ {
+ name: 'name',
+ label: $t('name'),
+ type: 'code-mirror',
+ lang: 'java',
+ rows: 1,
+ placeholder: true,
+ autoCompletion: autoCompletion,
+ },
+ {
+ name: 'value',
+ label: $t('value'),
+ type: 'text',
+ },
+ ],
+ },
+ },
+ onBeforeEditorDataSubmit: (data, callback) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlParameterValues');
+ const form = grid.getEditorForm();
+ if ('add' == form.getStatus() || 'clone' == form.getStatus()) {
+ data.uuid = Tools.uuid();
+ grid.addRow(data);
+ callback(false);
+ } else if ('edit' == form.getStatus()) {
+ grid.replaceRow(data);
+ callback(false);
+ }
+ },
},
{
+ colSpan: 3,
+ name: 'sqlQueryResult',
+ label: $t('re.resources.designer.processor.grid.entity.sqlQueryResult'),
+ showIf: (arg) => {
+ return 'SQL' === arg.form.getFieldValue('type');
+ },
+ type: 'w-grid',
+ height: 250,
+ autoFetchData: false,
+ title: $t('re.resources.designer.processor.grid.entity.sqlQueryResult'),
+ dense: true,
+ draggable: true,
+ pageable: false,
+ checkboxSelection: false,
+ configButton: false,
+ toolbarConfigure: { noIcon: false },
+ toolbarActions: [
+ {
+ name: 'execute',
+ label: $t('execute'),
+ icon: 'bi-caret-right',
+ click: (arg) => {
+ const sql = gridRef.getEditorForm().getFieldValue('sql');
+ let sqlParameterValues = gridRef.getEditorForm().getFieldValue('sqlParameterValues');
+ if (sqlParameterValues) {
+ sqlParameterValues = Tools.json2Object(sqlParameterValues);
+ }
+ axios
+ .post(Environment.apiContextPath('/api/re/model/parameter/processor/executeSql'), {
+ sql: sql,
+ sqlParameterValues: sqlParameterValues,
+ })
+ .then((response) => {
+ const fieldMetaDatas = response.data.fieldMetaDatas;
+ for (const field of fieldMetaDatas) {
+ field.value = field.name;
+ }
+ const data = response.data.data;
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlQueryResult');
+ sqlQueryResultFieldsRef = fieldMetaDatas;
+ grid.setLocalData(data);
+ });
+ },
+ },
+ ],
+ columns: computed(() => {
+ return sqlQueryResultFieldsRef;
+ }),
+ },
+ {
+ colSpan: 2,
name: 'sqlFieldMapping',
label: $t('re.resources.designer.processor.grid.entity.sqlFieldMapping'),
- type: 'select',
- rows: 1,
showIf: (arg) => {
return 'SQL' === arg.form.getFieldValue('type');
},
+ type: 'w-grid',
+ height: 250,
+ width: '100%',
+ autoFetchData: false,
+ title: $t('re.resources.designer.processor.grid.entity.sqlFieldMapping'),
+ dense: true,
+ dbClickOperation: 'edit',
+ draggable: true,
+ pageable: false,
+ configButton: false,
+ toolbarConfigure: { noIcon: false },
+ toolbarActions: [
+ 'add',
+ 'edit',
+ [
+ {
+ extend: 'remove',
+ click: (arg) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlFieldMapping');
+ grid.removeRows(arg.selecteds);
+ },
+ },
+ {
+ extend: 'remove',
+ name: 'removeAll',
+ label: $t('deleteAll'),
+ click: (arg) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlFieldMapping');
+ grid.setLocalData([]);
+ },
+ },
+ ],
+ ],
+ primaryKey: 'uuid',
+ columns: [
+ { name: 'uuid', label: 'uuid', hidden: true },
+ {
+ width: '50%',
+ name: 'field',
+ label: $t('fieldName'),
+ align: 'left',
+ sortable: false,
+ },
+ {
+ width: '50%',
+ name: 'parameter',
+ label: $t('parameterName'),
+ sortable: false,
+ format: (value) => {
+ return PlaceHolder.replace(value);
+ },
+ },
+ ],
+ editor: {
+ dialog: {
+ width: '600px',
+ },
+ form: {
+ colsNum: 1,
+ fields: [
+ { name: 'uuid', label: 'uuid', hidden: true },
+ {
+ name: 'field',
+ label: $t('fieldName'),
+ type: 'select',
+ options: sqlQueryResultFieldsRef,
+ },
+ {
+ name: 'parameter',
+ label: $t('parameterName'),
+ type: 'select',
+ options: autoCompletionOptionsRef,
+ },
+ ],
+ },
+ },
+ onBeforeEditorDataSubmit: (data, callback) => {
+ const grid = gridRef.getEditorForm().getFieldComponent('sqlFieldMapping');
+ const form = grid.getEditorForm();
+ if ('add' == form.getStatus() || 'clone' == form.getStatus()) {
+ data.uuid = Tools.uuid();
+ grid.addRow(data);
+ callback(false);
+ } else if ('edit' == form.getStatus()) {
+ grid.replaceRow(data);
+ callback(false);
+ }
+ },
},
],
},
@@ -842,7 +1305,19 @@
@before-editor-data-submit="
(data, callback) => {
const form = gridRef.getEditorForm();
- if ('NUMBER_RANGE' === data.type) {
+ if ('OBJECT_PROPERTIES' === data.type) {
+ const grid = form.getFieldComponent('objectProperties');
+ const localData = grid.getLocalData();
+ const objectProperties = [];
+ for (const item of localData) {
+ objectProperties.push({
+ code: item.code,
+ name: item.name,
+ expression: item.expression,
+ });
+ }
+ data.objectProperties = Tools.object2Json(objectProperties);
+ } else if ('NUMBER_RANGE' === data.type) {
const grid = form.getFieldComponent('numberRange');
const localData = grid.getLocalData();
const ranges = [];
@@ -869,38 +1344,80 @@
});
}
data.conditionRange = Tools.object2Json(ranges);
+ } else if ('SQL' === data.type) {
+ const sqlParameterValuesGrid = form.getFieldComponent('sqlParameterValues');
+ const sqlParameterValuesLocalData = sqlParameterValuesGrid.getLocalData();
+ const sqlParameterValues = [];
+ for (const item of sqlParameterValuesLocalData) {
+ sqlParameterValues.push({
+ uuid: item.uuid,
+ name: item.name,
+ value: item.value,
+ });
+ }
+ data.sqlParameterValues = Tools.object2Json(sqlParameterValues);
+
+ const sqlFieldMappingGrid = form.getFieldComponent('sqlFieldMapping');
+ const sqlFieldMappingLocalData = sqlFieldMappingGrid.getLocalData();
+ const sqlFieldMapping = [];
+ for (const item of sqlFieldMappingLocalData) {
+ sqlFieldMapping.push({
+ uuid: item.uuid,
+ field: item.field,
+ parameter: item.parameter,
+ });
+ }
+ data.sqlFieldMapping = Tools.object2Json(sqlFieldMapping);
}
}
"
@after-editor-open="
(row) => {
- axios.get(Environment.apiContextPath('/api/re/model/parameter/listParemterHintsByParameterId/' + parameter.id)).then((response) => {
- const names = [];
- if (response.data?.parentParameterNames && response.data?.parentParameterNames.length > 0) {
- for (const item of response.data?.parentParameterNames) {
- names.push({ label: item, type: 'variable', apply: '${' + item + '}' });
- }
- }
- if (response.data?.parameterNames && response.data?.parameterNames.length > 0) {
- for (const item of response.data?.parameterNames) {
- names.push({ label: item, type: 'variable', apply: '${' + item + '}' });
+ // 获取代码提示列表
+ axios.get(Environment.apiContextPath('/api/re/common/listParameterAndValueTypeByParameterId/' + parameter.id)).then((response) => {
+ autoCompletionManager.setParameters(response.data.parameters);
+ autoCompletionManager.setValueTypes(response.data.valueTypes);
+ });
+
+ // 获取选项输入参数列表
+ axios.get(Environment.apiContextPath('/api/re/model/parameter/listParemtersByParameterId/' + parameter.id)).then((response) => {
+ const parameters = response.data;
+ const options = [];
+ for (const item of parameters) {
+ if (item.type === 'IN_OPTION') {
+ options.push({ label: item.name, value: item.code });
}
}
- autoCompletionOptionsRef = names;
+ optionOptionsRef = options;
});
- const type = gridRef.getEditorForm().getFieldValue('type');
- if ('IN_OPTION' === type) {
- axios.get(Environment.apiContextPath('/api/re/model/parameter/listParemtersByParameterId/' + parameter.id)).then((response) => {
- const parameters = [];
- if (response.data) {
- for (const parameter of response.data) {
- if ('IN_OPTION' === parameter.type) {
- parameters.push({ label: parameter.name, value: parameter.code });
- }
- }
- }
- optionOptionsRef = parameters;
+
+ if ('add' == gridRef.getEditorForm().getStatus()) {
+ // 获取对象属性列表
+ axios.get(Environment.apiContextPath('/api/re/model/parameter/listObejctPropertiesByParameterId/' + parameter.id)).then((response) => {
+ const properties = response.data;
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ grid?.setLocalData(properties);
+ });
+ } else if ('edit' == gridRef.getEditorForm().getStatus()) {
+ // 获取对象属性列表
+ axios.get(Environment.apiContextPath('/api/re/model/parameter/processor/listObejctPropertiesByProcessorId/' + row.id)).then((response) => {
+ const properties = response.data;
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ grid?.setLocalData(properties);
});
+ }
+
+ const type = gridRef.getEditorForm().getFieldValue('type');
+ if ('OPTION_VALUE' === type) {
+ editorDialogWidthRef = '40%';
+ } else if ('SQL' === type || 'OBJECT_PROPERTIES' === type) {
+ editorDialogWidthRef = '80%';
+ } else {
+ editorDialogWidthRef = '60%';
+ }
+
+ if ('OBJECT_PROPERTIES' === type) {
+ } else if ('OPTION_VALUE' === type) {
} else if ('NUMBER_RANGE' === type) {
const grid = gridRef.getEditorForm().getFieldComponent('numberRange');
const rows = Tools.json2Object(row.numberRange);
@@ -909,21 +1426,57 @@
const grid = gridRef.getEditorForm().getFieldComponent('conditionRange');
const rows = Tools.json2Object(row.conditionRange);
grid.setLocalData(rows);
+ } else if ('DECISION_TABLE_2C' === type) {
+ const grid = gridRef.getEditorForm().getFieldComponent('decisionTable2C');
+ const rows = Tools.json2Object(row.decisionTable2C);
+ grid.setLocalData(rows);
+ } else if ('SQL' === type) {
+ const sqlParameterValuesGrid = gridRef.getEditorForm().getFieldComponent('sqlParameterValues');
+ const sqlParameterValuesRows = Tools.json2Object(row.sqlParameterValues);
+ sqlParameterValuesGrid.setLocalData(sqlParameterValuesRows);
+
+ const sqlFieldMappingGrid = gridRef.getEditorForm().getFieldComponent('sqlFieldMapping');
+ const sqlFieldMappingRows = Tools.json2Object(row.sqlFieldMapping);
+ sqlFieldMappingGrid.setLocalData(sqlFieldMappingRows);
+ }
+ }
+ "
+ @row-db-click="
+ (e, row) => {
+ const type = row.type;
+ if ('DECISION_TREE' === type) {
+ decisionTreeDialogRef.open(row.id);
+ } else if ('EXECUTION_FLOW' === type) {
+ executionFlowDialogRef.open(row.id);
+ } else {
+ gridRef.edit(row);
}
}
"
>
+ {
+ const grid = gridRef.getEditorForm().getFieldComponent('objectProperties');
+ grid.setLocalData(objectProperties);
+ }
+ "
+ >
diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/TestCaseParameter.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/TestCaseParameter.vue
index 976fadee..f75bd7af 100644
--- a/io.sc.engine.rule.frontend/src/views/resources/designer/TestCaseParameter.vue
+++ b/io.sc.engine.rule.frontend/src/views/resources/designer/TestCaseParameter.vue
@@ -18,6 +18,8 @@
}
}
"
+ db-click-operation="edit"
+ :tree-default-expand-all="true"
:fetch-data-url="Environment.apiContextPath('/api/re/testCaseParameter/findByTestCase?testCaseId=' + testCase.id)"
:data-url="Environment.apiContextPath('/api/re/testCaseParameter')"
:pageable="false"
diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/Testcase.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/Testcase.vue
index 754531c6..be8e8685 100644
--- a/io.sc.engine.rule.frontend/src/views/resources/designer/Testcase.vue
+++ b/io.sc.engine.rule.frontend/src/views/resources/designer/Testcase.vue
@@ -1,130 +1,161 @@
-
+ {
- emit('rowClick', evt, row, index);
- }
- "
- @before-request-data="
- () => {
- emit('beforeRequestData');
- }
- "
- @after-editor-open="
- (row) => {
- console.log(gridRef.getEditorForm());
- }
- "
- >
+
+ 'separator',
+ 'view',
+ 'separator',
+ 'export',
+ ]"
+ :columns="[
+ { width: 60, name: 'order', label: $t('order'), align: 'right', hidden: true },
+ { width: 100, name: 'id', label: $t('id'), hidden: true },
+ {
+ width: 60,
+ name: 'testResult',
+ label: $t('re.resources.designer.testCase.grid.entity.testResult'),
+ align: 'center',
+ format: PassOrNotFormater,
+ },
+ { width: 150, name: 'lastTestDate', label: $t('re.resources.designer.testCase.grid.entity.lastTestDate') },
+ { width: 400, name: 'name', label: $t('name') },
+ { width: '100%', name: 'description', label: $t('description') },
+ { width: 140, name: 'lastModifyDate', label: $t('lastModifyDate') },
+ ]"
+ :editor="{
+ dialog: {
+ width: '600px',
+ height: '250px',
+ },
+ form: {
+ colsNum: 1,
+ fields: [
+ { name: 'id', label: $t('id'), type: 'text', hidden: true },
+ { name: 'ownerType', label: $t('ownerType'), type: 'text', defaultValue: 'MODEL', hidden: true },
+ { name: 'owner', label: $t('owner'), type: 'text', defaultValue: model.resource, hidden: true },
+ { name: 'ownerId', label: $t('ownerId'), type: 'text', defaultValue: model.resource, hidden: true },
+ { name: 'name', label: $t('name'), type: 'text', required: true },
+ { name: 'description', label: $t('description'), type: 'text' },
+ { name: 'order', label: $t('order'), type: 'number' },
+ ],
+ },
+ }"
+ :viewer="{
+ panel: {
+ columnNum: 1,
+ fields: [
+ { name: 'order', label: $t('order') },
+ { name: 'id', label: $t('id') },
+ { name: 'name', label: $t('name') },
+ { name: 'description', label: $t('description') },
+
+ { name: 'dataComeFrom', label: $t('dataComeFrom') },
+ { name: 'creator', label: $t('creator') },
+ { name: 'createDate', label: $t('createDate') },
+ { name: 'lastModifier', label: $t('lastModifier') },
+ { name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
+ { name: 'corporationCode', label: $t('corporationCode') },
+ ],
+ },
+ }"
+ @row-click="
+ (evt, row, index) => {
+ emit('rowClick', evt, row, index);
+ }
+ "
+ @before-request-data="
+ () => {
+ emit('beforeRequestData');
+ }
+ "
+ @after-editor-open="
+ (row) => {
+ console.log(gridRef.getEditorForm());
+ }
+ "
+ >
+
+
diff --git a/io.sc.engine.rule.frontend/src/views/shared/UploadTestCaseDialog.vue b/io.sc.engine.rule.frontend/src/views/shared/UploadTestCaseDialog.vue
new file mode 100644
index 00000000..b1bd086d
--- /dev/null
+++ b/io.sc.engine.rule.frontend/src/views/shared/UploadTestCaseDialog.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
diff --git a/io.sc.engine.rule.frontend/src/views/testcase/Testcase.vue b/io.sc.engine.rule.frontend/src/views/testcase/Testcase.vue
index 73486beb..fbd749be 100644
--- a/io.sc.engine.rule.frontend/src/views/testcase/Testcase.vue
+++ b/io.sc.engine.rule.frontend/src/views/testcase/Testcase.vue
@@ -1,284 +1,324 @@
-
-
-
-
+
+
+
+ {
- currentSelectedTestCaseRef = row;
- testcaseParameterGridRef?.refresh();
- }
- "
- @before-request-data="
- () => {
- currentSelectedTestCaseRef = {};
- testcaseParameterGridRef?.refresh();
- }
- "
- >
-
-
-
-
- {
+ currentSelectedTestCaseRef = row;
+ testcaseParameterGridRef?.refresh();
+ }
+ "
+ @before-request-data="
+ () => {
+ currentSelectedTestCaseRef = {};
+ testcaseParameterGridRef?.refresh();
}
- }
- "
- :fetch-data-url="Environment.apiContextPath('/api/re/testCaseParameter/findByTestCase?testCaseId=' + currentSelectedTestCaseRef.id)"
- :data-url="Environment.apiContextPath('/api/re/testCaseParameter')"
- :pageable="false"
- :toolbar-configure="{ noIcon: false }"
- :toolbar-actions="[
- 'refresh',
- 'separator',
- 'expand',
- 'separator',
- {
- extend: 'edit',
- enableIf: (arg) => {
- return arg.selected && arg.selected.category !== 'M';
+ "
+ >
+
+
+
+
+
-
-
-
+ {
+ name: 'resultValue',
+ label: $t('re.resources.designer.testCaseParameter.grid.entity.resultValue'),
+ type: 'code-mirror',
+ rows: 4,
+ lang: 'json',
+ },
+ { name: 'skipCheck', label: $t('re.resources.designer.testCaseParameter.grid.entity.skipCheck'), type: 'checkbox' },
+ ],
+ },
+ }"
+ :viewer="{
+ panel: {
+ columnNum: 1,
+ fields: [
+ { name: 'dataComeFrom', label: $t('dataComeFrom') },
+ { name: 'creator', label: $t('creator') },
+ { name: 'createDate', label: $t('createDate') },
+ { name: 'lastModifier', label: $t('lastModifier') },
+ { name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
+ { name: 'corporationCode', label: $t('corporationCode') },
+ ],
+ },
+ }"
+ >
+
+
+
+
+