"use client" import { useState } from "react" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Switch } from "@/components/ui/switch" import { ArrowRight, Plus, Save, Trash2 } from "lucide-react" interface FieldMapping { id: string sourceField: string targetField: string dataType: string required: boolean transformation: string } export function DataMappingConfig() { // 模拟数据 const [mappings, setMappings] = useState([ { id: "1", sourceField: "phone", targetField: "phoneNumber", dataType: "string", required: true, transformation: "formatPhoneNumber", }, { id: "2", sourceField: "id_card", targetField: "identityNumber", dataType: "string", required: true, transformation: "mask", }, { id: "3", sourceField: "imei", targetField: "deviceImei", dataType: "string", required: false, transformation: "none", }, { id: "4", sourceField: "address", targetField: "userAddress", dataType: "string", required: false, transformation: "none", }, { id: "5", sourceField: "name", targetField: "fullName", dataType: "string", required: true, transformation: "none", }, { id: "6", sourceField: "register_time", targetField: "registrationDate", dataType: "datetime", required: true, transformation: "parseDateTime", }, { id: "7", sourceField: "last_login", targetField: "lastActiveTime", dataType: "datetime", required: false, transformation: "parseDateTime", }, ]) const addNewMapping = () => { const newMapping: FieldMapping = { id: `new-${Date.now()}`, sourceField: "", targetField: "", dataType: "string", required: false, transformation: "none", } setMappings([...mappings, newMapping]) } const updateMapping = (id: string, field: keyof FieldMapping, value: any) => { setMappings(mappings.map((mapping) => (mapping.id === id ? { ...mapping, [field]: value } : mapping))) } const deleteMapping = (id: string) => { setMappings(mappings.filter((mapping) => mapping.id !== id)) } return (

字段映射配置

源字段 目标字段 数据类型 必填 转换方式 操作 {mappings.map((mapping) => ( updateMapping(mapping.id, "sourceField", e.target.value)} placeholder="源字段名" /> updateMapping(mapping.id, "targetField", e.target.value)} placeholder="目标字段名" />
updateMapping(mapping.id, "required", checked)} />
))}
) }