You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整ABP框架动态生成的编辑表单字段顺序?

问题描述

我通过JS使用ABP框架生成了如下DataTable:

var dataTable = _$itemSerialsTable.DataTable({            
    paging: true,            
    serverSide: true,            
    processing: true,            
    listAction: {                
        ajaxFunction: _itemSerialsService.getAll,                
        inputFilter: function () {                    
            return {                                            
            };                
        }            
    },            
    columnDefs: [                
        {                    
            className: 'control responsive',                    
            orderable: false,                    
            render: function () {                        
                return '';                    
            },                    
            targets: 0                
        },                
        {                    
            targets: 1,                    
            data: "itemSerial.index",                    
            name: "index"                
        },                
        {                    
            targets: 2,                    
            data: "itemSerial.itemPartNumber",                    
            name: "itemFk.partNumber",                
        },                
        {                    
            targets: 3,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                        
                //if (row.itemSerial.tagType == 'Barcode')                        
                return `<label onclick="openModal(${row.itemSerial.id}, ${row.itemSerial.itemId})">${row.itemSerial.serialValue}</label>`;                        
                //else                        
                //    return `<label>${row.itemSerial.itemRfidTag}</label>`;                    
            },                
        },                
        {                    
            targets: 4,                    
            data: "itemSerial.itemRfidTag",                    
            name: "itemRfidTag"                
        },                
        {                    
            targets: 5,                    
            data: "itemSerial.tagType",                    
            name: "itemFk.tagType"                
        },                
        {                    
            targets: 6,                    
            data: "itemSerial.description",                    
            name: "description"                
        },                
        {                    
            targets: 7,                    
            data: "itemSerial.owner",                    
            name: "ownerId"                
        },                
        {                    
            targets: 8,                    
            data: "itemSerial.receivingDate",                    
            name: "receivingDate"                
        },                
        {                    
            targets: 9,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data) {                        
                return app.localize(data.itemSerial.statusName)                    
            }                
        },                
        {                    
            targets: 10,                    
            data: "itemSerial.locationClassificationName",                    
            name: "locationClassificationId",                    
            render: function (data, type, row) {                        
                return `<label title="${row.locationClassificationFullPath}" data-row-id="${row.locationClassificationId}">${row.itemSerial.locationClassificationName}</label>`;                    
            },                
        },                
        {                    
            targets: 11,                    
            data: "itemSerial.originalCost",                    
            name: "originalCost"                
        },                
        {                    
            targets: 12,                    
            data: "itemSerial.inServiceDate",                    
            name: "inServiceDate"                
        },                
        //{                
        //    targets: 12,                
        //    data: "itemSerial.warrantyStartDate",                
        //    name: "warrantyStartDate"                
        //},                
        //{                
        //    targets: 13,                
        //    data: "itemSerial.warrantyEndDate",                
        //    name: "warrantyEndDate"                
        //},                
        {                    
            targets: 13,                    
            data: "itemSerial.department",                    
            name: "departmentId"                
        },                
        {                    
            targets: 14,                    
            data: "itemSerial.entityName",                    
            name: "entityId"                
        },                
        {                    
            targets: 15,                    
            data: "itemSerial.vendorName",                    
            name: "vendorId"                
        },                
        {                    
            targets: 16,                    
            data: "itemSerial.depreciationMethod",                    
            name: "itemFk.depreciationMethod"                
        },                
        {                    
            targets: 17,                    
            data: "itemSerial.depreciationPercentage",                    
            name: "itemFk.depreciationPercentage"                
        },                
        {                    
            targets: 18,                    
            data: "itemSerial.usefulLife",                    
            name: "itemFk.usefulLife"                
        },                
        {                    
            targets: 19,                    
            data: "itemSerial.depreciationPeriod",                    
            name: "itemFk.depreciationPeriod"                
        },                
        {                    
            targets: 20,                    
            data: "itemSerial.salvageValue",                    
            name: "itemFk.salvageValue"                
        },                
        {                    
            targets: 21,                    
            data: "itemSerial.startDepreciationValue",                    
            name: "itemFk.depreciationValue"                
        },                
        {                    
            targets: 22,                    
            data: "itemSerial.assetAccount",                    
            name: "itemFk.assetAccount"                
        },                
        {                    
            targets: 23,                    
            data: "itemSerial.accumelatedDepreciationAccount",                    
            name: "itemFk.accumelatedDepreciationAccount"                
        },                
        {                    
            targets: 24,                    
            data: "itemSerial.netBookValue",                    
            name: "netBookValue"                
        },                
        {                    
            targets: 25,                    
            data: "itemSerial.disposalReference",                    
            name: "disposalReference"                
        },                
        {                    
            targets: 26,                    
            data: "itemSerial.disposalMethod",                    
            name: "disposalMethod"                
        },                
        {                    
            targets: 27,                    
            data: "itemSerial.disposalDate",                    
            name: "disposalDate"                
        },                
        {                    
            targets: 28,                    
            data: "itemSerial.actualSalvageValue",                    
            name: "actualSalvageValue"                
        },                
        {                    
            targets: 29,                    
            data: "itemSerial",                    
            render: function (itemSerial) {                        
                if (!itemSerial.image) {                            
                    return '';                        
                }                        
                return `<a href="/File/DownloadBinaryFile?id=${itemSerial.image}" target="_blank">${itemSerial.imageFileName}</a>`;                    
            }                
        },                
        //{                
        //    targets: 31,                
        //    data: "item",                
        //    render: function (itemSerial) {                
        //        if (!itemSerial.itemImprovementPlan) {                
        //            return '';                
        //        }                
        //        return `<a href="/File/DownloadBinaryFile?id=${itemSerial.itemImprovementPlan}" target="_blank">${itemSerial.itemImrovementImageFileName}</a>`;                
        //    }                
        //},                
        {                    
            targets: 30,                    
            data: "itemSerial.notes",                    
            name: "notes"                
        },                
        {                    
            targets: 31,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                        
                return `<label>${row.countingType}</label>`;                    
            },                
        },                
        {                    
            targets: 32,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                        
                return `<label>${row.rfidTagType}</label>`;                    
            },                
        },                
        {                    
            targets: 33,                    
            data: "locationClassificationFullPath",                    
            name: "locationClassificationFullPath",                    
            render: function (data, type, row) {                        
                return `<label >${row.locationClassificationFullPath}</label>`;                    
            },                
        },                
        {                    
            targets: 34,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.effectiveDate}</label>`;                    
            },                
        },                
        {                    
            targets: 35,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.effectiveDateType}</label>`;                    
            },                
        },                
        {                    
            targets: 36,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.depreciationExpense}</label>`;                    
            },                
        },                
        {                    
            targets: 37,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.reason}</label>`;                    
            },                
        },                
        {                    
            targets: 38,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.filed1}</label>`;                    
            },                
        },                
        {                    
            targets: 39,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.filed2}</label>`;                    
            },                
        },                
        {                    
            targets: 40,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.filed3}</label>`;                    
            },                
        },                
        {                    
            targets: 41,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.locationGroup}</label>`;                    
            },                
        },                
        {                    
            targets: 42,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.purchaseDate}</label>`;                    
            },                
        },                
        {                    
            targets: 43,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.disposalField1}</label>`;                    
            },                
        },                
        {                    
            targets: 44,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.disposalField2}</label>`;                    
            },                
        },                
        {                    
            targets: 45,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.disposalField3}</label>`;                    
            },                
        },                
        {                    
            targets: 46,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.disposalNotes}</label>`;                    
            },                
        },                
        {                    
            targets: 47,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.openingNetbookValue}</label>`;                    
            },                
        },                
        {                    
            targets: 48,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.usefulLifeValue}</label>`;                    
            },                
        },                
        {                    
            targets: 49,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.isCalculateDeprecition}</label>`;                    
            },                
        },                
        {                    
            targets: 50,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                                                
                return `<label>${row.itemSerial.auditUser}</label>`;                    
            },                
        },                
        {                    
            targets: 51,                    
            data: null,                    
            defaultContent: '',                    
            render: function (data, type, row) {                        
                return `<label>${row.itemSerial.itemId}</label>`;                    
            },                
        },            
    ]        
});

点击+图标后,会打开ABP动态生成的编辑表单,请问能否调整该表单的字段顺序?

解决方案

当然可以调整ABP动态表单的字段顺序,具体实现方式取决于你使用的ABP版本和UI框架:

1. MVC/Razor Pages 场景(ABP MVC 模板)

如果是基于MVC的项目,动态表单的字段顺序由DTO类的[Display]特性的Order属性控制:

public class ItemSerialCreateDto
{
    [Display(Name = "SerialValue", Order = 1)]
    public string SerialValue { get; set; }

    [Display(Name = "ItemPartNumber", Order = 2)]
    public string ItemPartNumber { get; set; }

    // 其他字段按需求设置Order值,数值越小越靠前
}

ABP会根据Order属性的值自动排序表单字段,无需修改前端代码。

2. Angular/React 场景(ABP Angular/React 模板)

方式一:修改表单组件的字段顺序

如果是手动生成的表单组件,直接调整模板中表单字段的渲染顺序即可。比如在Angular的create-component.html中:

<form [formGroup]="form">
  <input formControlName="serialValue" />
  <input formControlName="itemPartNumber" />
  <!-- 按需求调整字段的先后顺序 -->
</form>

方式二:配置动态表单的字段顺序(使用ABP动态表单组件)

如果使用ABP的动态表单(比如abp-dynamic-form),可以通过fields属性指定字段顺序:

// 在组件类中定义字段顺序
fields = [
  { name: 'serialValue', displayName: 'Serial Value' },
  { name: 'itemPartNumber', displayName: 'Item Part Number' },
  // 其他字段按需求排序
];

然后在模板中传入:

<abp-dynamic-form [fields]="fields" [form]="form"></abp-dynamic-form>

3. 通用注意事项

  • 如果你的项目是ABP商业版,还可以通过模块零(Module Zero)的表单配置功能在后台可视化调整字段顺序,无需修改代码。
  • 确保DTO类的字段和前端表单的字段名称对应,避免出现字段不匹配的情况。

内容的提问来源于stack exchange,提问作者user123456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 19:14:51