| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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<string, any[]> = {}
- fieldList.value.forEach(field => {
- const type = field.type || 'other'
- if (!groups[type]) {
- groups[type] = []
- }
- groups[type].push(field)
- })
- return groups
- })
- return {
- fieldList,
- fieldGroups
- }
- }
|