refactor
This commit is contained in:
85
utils/field-utils.js
Normal file
85
utils/field-utils.js
Normal file
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* 字段处理工具函数模块
|
||||
* 提供字段类型判断、选项排序、系统字段处理等工具函数
|
||||
*/
|
||||
|
||||
import {
|
||||
FIELD_TYPES,
|
||||
OPTION_SORTABLE_TYPES,
|
||||
LOOKUP_COPY_SUPPORTED_TYPES
|
||||
} from './constants.js';
|
||||
|
||||
/**
|
||||
* 排序字段选项,根据索引值进行升序排序
|
||||
* @param {Object} field - 字段对象
|
||||
* @returns {Array} 按索引排序后的选项标签数组
|
||||
*/
|
||||
export const sortFieldOptions = (field) => {
|
||||
if (!field.options) return [];
|
||||
return Object.values(field.options)
|
||||
.sort((a, b) => Number(a.index) - Number(b.index))
|
||||
.map(option => option.label);
|
||||
};
|
||||
|
||||
/**
|
||||
* 检查字段类型是否支持选项排序
|
||||
* @param {string} fieldType - 字段类型
|
||||
* @returns {boolean} 是否支持选项排序
|
||||
*/
|
||||
export const shouldSortOptions = (fieldType) => OPTION_SORTABLE_TYPES.includes(fieldType);
|
||||
|
||||
/**
|
||||
* 标记查找复制字段
|
||||
* @param {Array} fields - 要处理的字段数组
|
||||
*/
|
||||
export const markLookupCopies = (fields) => {
|
||||
fields.forEach(field => {
|
||||
// 检查字段是否有查找设置
|
||||
if (field.lookup?.fieldMappings) {
|
||||
field.lookup.fieldMappings.forEach(mapping => {
|
||||
// 在字段数组中找到对应的目标字段并标记为查找复制
|
||||
const targetField = fields.find(f =>
|
||||
LOOKUP_COPY_SUPPORTED_TYPES.includes(f.type) && f.code === mapping.field
|
||||
);
|
||||
if (targetField) {
|
||||
targetField.isLookupCopy = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const FieldTypeChecker = {
|
||||
isCategory: field => field.type === FIELD_TYPES.CATEGORY,
|
||||
isCheckBox: field => field.type === FIELD_TYPES.CHECK_BOX,
|
||||
isCreatedTime: field => field.type === FIELD_TYPES.CREATED_TIME,
|
||||
isCreator: field => field.type === FIELD_TYPES.CREATOR,
|
||||
isDate: field => field.type === FIELD_TYPES.DATE,
|
||||
isDatetime: field => field.type === FIELD_TYPES.DATETIME,
|
||||
isDropDown: field => field.type === FIELD_TYPES.DROP_DOWN,
|
||||
isFile: field => field.type === FIELD_TYPES.FILE,
|
||||
isGroup: field => field.type === FIELD_TYPES.GROUP,
|
||||
isGroupSelect: field => field.type === FIELD_TYPES.GROUP_SELECT,
|
||||
isInGroup: field => 'group' in field,
|
||||
isInSubtable: field => 'table' in field,
|
||||
isLink: field => field.type === FIELD_TYPES.LINK,
|
||||
isLookup: field => 'lookup' in field,
|
||||
isLookupCopy: field => field.isLookupCopy === true,
|
||||
isModifier: field => field.type === FIELD_TYPES.MODIFIER,
|
||||
isMultiLineText: field => field.type === FIELD_TYPES.MULTI_LINE_TEXT,
|
||||
isMultiSelect: field => field.type === FIELD_TYPES.MULTI_SELECT,
|
||||
isNotInSubtable: field => !('table' in field),
|
||||
isNumber: field => field.type === FIELD_TYPES.NUMBER,
|
||||
isOrganizationSelect: field => field.type === FIELD_TYPES.ORGANIZATION_SELECT,
|
||||
isRadioButton: field => field.type === FIELD_TYPES.RADIO_BUTTON,
|
||||
isRecordNumber: field => field.type === FIELD_TYPES.RECORD_NUMBER,
|
||||
isReferenceTable: field => field.type === FIELD_TYPES.REFERENCE_TABLE,
|
||||
isRichText: field => field.type === FIELD_TYPES.RICH_TEXT,
|
||||
isSingleLineText: field => field.type === FIELD_TYPES.SINGLE_LINE_TEXT,
|
||||
isStatus: field => field.type === FIELD_TYPES.STATUS,
|
||||
isStatusAssignee: field => field.type === FIELD_TYPES.STATUS_ASSIGNEE,
|
||||
isSubtable: field => field.type === FIELD_TYPES.SUBTABLE,
|
||||
isTime: field => field.type === FIELD_TYPES.TIME,
|
||||
isUpdatedTime: field => field.type === FIELD_TYPES.UPDATED_TIME,
|
||||
isUserSelect: field => field.type === FIELD_TYPES.USER_SELECT,
|
||||
};
|
||||
Reference in New Issue
Block a user