mirror of
https://github.com/getrebuild/rebuild.git
synced 2025-09-07 07:09:57 +08:00
Enhance REP operator handling in advanced filter
This commit is contained in:
parent
0b7bca398f
commit
032442e736
2 changed files with 13 additions and 6 deletions
|
@ -263,7 +263,7 @@ public class AdvFilterParser extends SetUser {
|
|||
String field = item.getString("field");
|
||||
if (field.startsWith("&")) field = field.replace("&", NAME_FIELD_PREFIX); // fix: _$unthy
|
||||
|
||||
final boolean hasNameFlag = field.startsWith(NAME_FIELD_PREFIX);
|
||||
boolean hasNameFlag = field.startsWith(NAME_FIELD_PREFIX);
|
||||
if (hasNameFlag) field = field.substring(1);
|
||||
|
||||
Field lastFieldMeta = VF_ACU.equals(field)
|
||||
|
@ -274,6 +274,12 @@ public class AdvFilterParser extends SetUser {
|
|||
return null;
|
||||
}
|
||||
|
||||
String op = item.getString("op");
|
||||
// 引用字段`重复`特殊处理
|
||||
if (hasNameFlag && ParseHelper.REP.equalsIgnoreCase(op)) {
|
||||
hasNameFlag = false;
|
||||
}
|
||||
|
||||
DisplayType dt = EasyMetaFactory.getDisplayType(lastFieldMeta);
|
||||
if (dt == DisplayType.CLASSIFICATION || (dt == DisplayType.PICKLIST && hasNameFlag) /* 快速查询 */) {
|
||||
field = NAME_FIELD_PREFIX + field;
|
||||
|
@ -295,7 +301,7 @@ public class AdvFilterParser extends SetUser {
|
|||
final boolean isN2NUsers = dt == DisplayType.N2NREFERENCE
|
||||
&& lastFieldMeta.getReferenceEntity().getEntityCode() == EntityHelper.User;
|
||||
|
||||
String op = item.getString("op");
|
||||
|
||||
// v3.9 区间兼容
|
||||
if (ParseHelper.BW.equals(op)) {
|
||||
String valueBegin = item.getString("value");
|
||||
|
@ -645,9 +651,10 @@ public class AdvFilterParser extends SetUser {
|
|||
StringUtils.join(value.split("\\|"), "', '"));
|
||||
} else if (ParseHelper.REP.equalsIgnoreCase(op)) {
|
||||
// `in`
|
||||
int count = NumberUtils.toInt(value, 1);
|
||||
value = MessageFormat.format(
|
||||
"( select {0} from {1} group by {0} having (count({0}) > {2}) )",
|
||||
field, rootEntity.getName(), String.valueOf(NumberUtils.toInt(value, 1)));
|
||||
"( select {0} from {1} group by {0} having (count({0}) {2} {3}) )",
|
||||
field, rootEntity.getName(), count < 1 ? "=" : ">", Math.max(count, 1));
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(value)) {
|
||||
|
|
|
@ -442,8 +442,8 @@ class FilterItem extends React.Component {
|
|||
op = ['IN', 'NIN']
|
||||
}
|
||||
|
||||
// v3.6-b4,v3.7
|
||||
if (['TEXT', 'PHONE', 'EMAIL', 'URL', 'DATE', 'DATETIME', 'TIME'].includes(fieldType)) op.push('REP')
|
||||
// v3.6-b4, v3.7, v4.2
|
||||
if (['TEXT', 'PHONE', 'EMAIL', 'URL', 'DATE', 'DATETIME', 'TIME', 'REFERENCE', 'ANYREFERENCE'].includes(fieldType)) op.push('REP')
|
||||
|
||||
if (this.isApprovalState()) op = ['IN', 'NIN']
|
||||
else if (this.state.field === VF_ACU) op = ['IN', 'SFU', 'SFB', 'SFT'] // v3.7 准备废弃
|
||||
|
|
Loading…
Add table
Reference in a new issue