| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import { computed, } from 'vue'
- import { useI18n } from 'vue-i18n'
- import useCardStore from '@/stores/use-card-store';
- /**
- * 订单字段处理 Composable
- * 将 detailData 中的字段数据转换为分组列表,支持缓存数据立即渲染
- */
- export function useOrderFields(detailData: any) {
- const { t } = useI18n()
- const cardStore = useCardStore()
- /** 1️⃣ 字段解析(一维数组) */
- const fieldList = computed(() => {
- const dt = detailData.value
- if (!dt) {
- return []
- }
- // 检查 dt 是否已经加载了数据(通过检查是否有属性)
- const hasData = Object.keys(dt).length > 0
- if (!hasData) {
- // console.log('数据尚未加载,返回空数组');
- return []
- }
- // fieldDtos 存在且不为空数组时使用 fieldDtos
- if (dt.fieldDtos && Array.isArray(dt.fieldDtos) && dt.fieldDtos.length > 0) {
- // console.log('使用 fieldDtos 分支,数量:', dt.fieldDtos.length);
- 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
- }
- })
- }
- // 使用 globalFieldParams
- // console.log('使用 globalFieldParams 分支');
- // console.log('globalFieldParams:', cardStore.globalFieldParams);
- return cardStore.globalFieldParams
- .map((item: any) => {
- const key = Object.keys(dt).find(
- k => k === item.fieldName
- )
- const i18nKey = `global.fieldName.${item.fieldName}.fieldTitle`
- let name = t(i18nKey)
- if (name === i18nKey) {
- name = item.fieldName
- }
- let value = key ? dt[key] : ''
- 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
- }
- })
- .filter(field => {
- // 过滤掉 value 为空的字段
- const val = field.value
- return val !== '' && val !== null && val !== undefined
- })
- })
- /** 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
- }
- }
|