From ae53ef77b0d18445e209dab26f240459472d80da Mon Sep 17 00:00:00 2001 From: RB Date: Sat, 2 Dec 2023 09:36:32 +0800 Subject: [PATCH] =?UTF-8?q?enh:=20=E8=AE=B0=E5=BD=95=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E6=BA=90=E5=AD=97=E6=AE=B5=E6=94=AF=E6=8C=81ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/metadata/easymeta/EasyField.java | 2 +- .../rebuild/web/commons/MetadataGetting.java | 6 ++++-- .../rebuild/web/general/MetaFormatter.java | 20 +++++++++++++++++++ .../transform/TransformConfigController.java | 2 +- .../web/assets/js/metadata/auto-fillin.js | 15 +++----------- src/main/resources/web/assets/js/rb-forms.js | 8 ++++---- 6 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/rebuild/core/metadata/easymeta/EasyField.java b/src/main/java/com/rebuild/core/metadata/easymeta/EasyField.java index 7e875e979..e63463e3a 100644 --- a/src/main/java/com/rebuild/core/metadata/easymeta/EasyField.java +++ b/src/main/java/com/rebuild/core/metadata/easymeta/EasyField.java @@ -140,7 +140,7 @@ public Object exprDefaultValue() { /** * 转换返回值,输出用(默认实现为原值返回) * - * @param value 原值 + * @param value 原值,必须符合值类型 * @return * @see com.rebuild.core.support.general.FieldValueHelper */ diff --git a/src/main/java/com/rebuild/web/commons/MetadataGetting.java b/src/main/java/com/rebuild/web/commons/MetadataGetting.java index 1dc624e44..2d946e150 100644 --- a/src/main/java/com/rebuild/web/commons/MetadataGetting.java +++ b/src/main/java/com/rebuild/web/commons/MetadataGetting.java @@ -62,10 +62,12 @@ public List entities(HttpServletRequest request) { @GetMapping("fields") public JSON fields(HttpServletRequest request) { Entity entity = MetadataHelper.getEntity(getParameterNotNull(request, "entity")); - // 返回引用实体的字段 + // 返回引用实体的字段层级 int appendRefFields = getIntParameter(request, "deep", 0); + // 返回ID主键字段 + boolean forceWithId = getBoolParameter(request, "withid"); - return MetaFormatter.buildFieldsWithRefs(entity, appendRefFields, true, field -> { + return MetaFormatter.buildFieldsWithRefs(entity, appendRefFields, true, forceWithId, field -> { if (!field.isQueryable()) return true; if (field instanceof Field) { diff --git a/src/main/java/com/rebuild/web/general/MetaFormatter.java b/src/main/java/com/rebuild/web/general/MetaFormatter.java index 9e4bb02a5..efa183e7a 100644 --- a/src/main/java/com/rebuild/web/general/MetaFormatter.java +++ b/src/main/java/com/rebuild/web/general/MetaFormatter.java @@ -79,6 +79,7 @@ public static JSONObject buildRichField(EasyField field) { * @param deep * @param filter * @return + * @see #buildFieldsWithRefs(Entity, int, boolean, boolean, Predicate) */ public static JSONArray buildFieldsWithRefs(Entity entity, int deep, Predicate filter) { return buildFieldsWithRefs(entity, deep, false, filter); @@ -90,8 +91,23 @@ public static JSONArray buildFieldsWithRefs(Entity entity, int deep, Predicate filter) { + return buildFieldsWithRefs(entity, deep, riching, false, filter); + } + + /** + * 获取字段列表 + * + * @param entity + * @param deep 几级 + * @param riching + * @param forceWithId 带有主键ID + * @param filter + * @return + */ + public static JSONArray buildFieldsWithRefs(Entity entity, int deep, boolean riching, boolean forceWithId, Predicate filter) { JSONArray res = new JSONArray(); // 一级 @@ -101,6 +117,10 @@ public static JSONArray buildFieldsWithRefs(Entity entity, int deep, boolean ric res.add(buildField(easyField, null, riching)); } + if (forceWithId) { + res.add(buildField(EasyMetaFactory.valueOf(entity.getPrimaryField()), null, false)); + } + if (deep < 2) return res; List deep3Refs = new ArrayList<>(); diff --git a/src/main/java/com/rebuild/web/robot/transform/TransformConfigController.java b/src/main/java/com/rebuild/web/robot/transform/TransformConfigController.java index 50af32a34..3b0f47b20 100644 --- a/src/main/java/com/rebuild/web/robot/transform/TransformConfigController.java +++ b/src/main/java/com/rebuild/web/robot/transform/TransformConfigController.java @@ -157,7 +157,7 @@ private JSONObject buildEntity(Entity entity, boolean sourceType) { JSONArray fields; // 源 if (sourceType) { - fields = MetaFormatter.buildFieldsWithRefs(entity, 3, true, field -> { + fields = MetaFormatter.buildFieldsWithRefs(entity, 3, true, true, field -> { if (field instanceof EasyField) { EasyField easyField = (EasyField) field; int c = easyField.getDisplayType() == DisplayType.REFERENCE diff --git a/src/main/resources/web/assets/js/metadata/auto-fillin.js b/src/main/resources/web/assets/js/metadata/auto-fillin.js index a79f8fc3f..896ad7db0 100644 --- a/src/main/resources/web/assets/js/metadata/auto-fillin.js +++ b/src/main/resources/web/assets/js/metadata/auto-fillin.js @@ -177,18 +177,9 @@ class DlgRuleEdit extends RbFormHandler { this.__select2.push($s2target) // #2 - $.get(`/commons/metadata/fields?entity=${this.props.sourceEntity}&deep=2`, (res) => { - const _data = [] - res.data.forEach((item) => { - _data.push(item) - // v35 Last insert a ID - if (item.name === 'owningDept') { - _data.push({ name: `${wpc.referenceEntity}Id`, label: 'ID', type: 'REFERENCE', ref: [wpc.referenceEntity, 'ID'] }) - } - }) - - this.__sourceFieldsCache = _data - this.setState({ sourceFields: _data }, () => { + $.get(`/commons/metadata/fields?entity=${this.props.sourceEntity}&deep=2&withid=true`, (res) => { + this.__sourceFieldsCache = res.data + this.setState({ sourceFields: res.data }, () => { const $s2source = $(this._sourceField) .select2({ placeholder: $L('选择字段'), diff --git a/src/main/resources/web/assets/js/rb-forms.js b/src/main/resources/web/assets/js/rb-forms.js index f6419efc0..4b05e3760 100644 --- a/src/main/resources/web/assets/js/rb-forms.js +++ b/src/main/resources/web/assets/js/rb-forms.js @@ -261,7 +261,7 @@ class RbForm extends React.Component { for (let k in iv) { let val = iv[k] // array, object, simple - val = typeof val === 'object' ? val.id || val : val + val = val && typeof val === 'object' ? val.id || val : val this.__FormData[k] = { value: val, error: null } } } @@ -1803,7 +1803,7 @@ class RbFormPickList extends RbFormElement { } setValue(val) { - if (typeof val === 'object') val = val.id + if (val && typeof val === 'object') val = val.id this.__select2.val(val).trigger('change') } } @@ -2111,7 +2111,7 @@ class RbFormN2NReference extends RbFormReference { handleChange(e, checkValue) { let val = e.target.value - if (typeof val === 'object') val = val.join(',') + if (val && typeof val === 'object') val = val.join(',') this.setState({ value: val }, () => checkValue === true && this.checkValue()) } @@ -2733,7 +2733,7 @@ class RbFormTag extends RbFormElement { } setValue(val) { - if (typeof val === 'object') val = val.join('$$$$') + if (val && typeof val === 'object') val = val.join('$$$$') super.setValue(val) // fix: v3.4.4