diff --git a/packages/renderless/src/form/index.ts b/packages/renderless/src/form/index.ts index 6b84db2d4c..75a514e38f 100644 --- a/packages/renderless/src/form/index.ts +++ b/packages/renderless/src/form/index.ts @@ -180,7 +180,10 @@ export const validate = } if (typeof callback === 'function' && ++count === state.fields.length) { - callback(valid, invalidFields, invalidFieldArr) + // 排序 + const sortField = sortFields(state.fields, invalidFields) + const sortFieldArr = sortFields(state.fields, invalidFieldArr) + callback(valid, sortField, sortFieldArr) } }) }) @@ -190,6 +193,23 @@ export const validate = } } +const sortFields = (fileds, val) => { + const arrField = fileds.map((item) => item.prop) + if (Object.prototype.toString.call(val) === '[object Object]') { + const keys = Object.keys(val) + const sortKeys = keys.sort((a, b) => arrField.indexOf(a) - arrField.indexOf(b)) + const sortedObject = sortKeys.reduce((acc, key) => { + acc[key] = val[key] + return acc + }, {}) + return sortedObject + } + if (Array.isArray(val)) { + val.sort((x, y) => arrField.indexOf(x) - arrField.indexOf(y)) + return val + } +} + export const validateField = (state: IFormRenderlessParams['state']) => (props, cb): void => {