import { computed, } from 'vue' import { useI18n } from 'vue-i18n' /** * 订单字段处理 Composable * 将 detailData 中的字段数据转换为分组列表,支持缓存数据立即渲染 */ export function useOrderFields(detailData: any) { const { t } = useI18n() /** 1️⃣ 字段解析(一维数组) */ const fieldList = computed(() => { const dt = detailData.value if (!dt || !dt.fieldDtos || !Array.isArray(dt.fieldDtos)) { return [] } return [...dt.fieldDtos] .sort((a, b) => (a.sorting || 0) - (b.sorting || 0)) .map(item => { const key = Object.keys(dt).find( k => k.toLowerCase() === item.fieldName.toLowerCase() ) const i18nKey = `global.fieldName.${item.fieldName}.fieldTitle` let name = t(i18nKey) if (name === i18nKey) { name = item.fieldName } let value = key ? dt[key] : item.fixedValue if ( item.fieldType === 'select' && key && !['transferType', 'payoutMethod'].includes(key) ) { value = dt[key + 'Value'] || value } if (item.fieldName === 'transferAmount' && dt.payoutCurrency) { value = `${value} ${dt.payoutCurrency}` } return { name, value: value ?? '', type: item.fieldUserType || 'other', fieldName: item.fieldName, fieldType: item.fieldType, options: item.options || null } }) }) /** 2️⃣ 分组字段(按类型分组) */ const fieldGroups = computed(() => { const groups: Record = {} fieldList.value.forEach(field => { const type = field.type || 'other' if (!groups[type]) { groups[type] = [] } groups[type].push(field) }) return groups }) return { fieldList, fieldGroups } }