// 添加藏品页面 - 支持 AI 识别/手工录入 import React, { useState, useRef } from 'react' import { APP_VERSION } from '../config/version' const API_BASE = localStorage.getItem('API_BASE') || '' const numberCategoryOptions = [{value:'无2347',label:'无2347'},{value:'无347',label:'无347'},{value:'无247',label:'无247'},{value:'无47',label:'无47'},{value:'带7号',label:'带7号'},{value:'带4号',label:'带4号'},{value:'其他',label:'其他'}]; // 字段转换函数 const convertField = (obj) => { const map = { id: 'f99_90_id', userId: 'f99_91_user_id', name: 'f01_01_name', code: 'f01_02_code', category: 'f01_03_category', status: 'f01_04_status', remark: 'f01_05_remark', prefixSerial: 'f02_10_prefix_serial', version: 'f02_11_version', packaging: 'f02_12_packaging', rarity: 'f02_13_rarity', isGraded: 'f03_20_is_graded', gradingCompany: 'f03_21_grading_company', gradingScore: 'f03_22_grading_score', threeStar: 'f03_23_three_star', specialMark: 'f04_30_special_mark', serialFeature: 'f04_31_serial_feature', numberCategory: 'f02_14_number_category', issuer: 'f04_32_issuer', issueYear: 'f04_33_issue_year', material: 'f04_34_material', denomination: 'f04_35_denomination', issueQuantity: 'f04_36_issue_quantity', costPrice: 'f05_40_cost_price', targetPrice: 'f05_41_target_price', goalPrice: 'f05_42_goal_price', repairFee: 'f05_43_repair_fee', gradingFee: 'f05_44_grading_fee', purpose: 'f06_50_purpose' } const result = {} const numberFields = ['costPrice', 'targetPrice', 'goalPrice', 'repairFee', 'gradingFee'] for (const key in obj) { let value = obj[key] if (value === '' || value === null) value = null else if (numberFields.includes(key)) { value = parseFloat(value) if (isNaN(value)) value = null } result[map[key] || key] = value } return result } // 通用 Input 组件 const Input = ({ form, handleChange, label, field, type = 'text', options = null }) => { const onChange = (e) => { const value = e.target.value if (type === 'number' && value !== '') { const num = parseFloat(value) handleChange(field, isNaN(num) ? '' : num) } else handleChange(field, value) } return (