refactor: 使用 Label 组件替换原生 label 元素,并在 DecodeResultPaper 中引入 Input 组件

This commit is contained in:
雨霖铃
2026-06-10 08:15:09 +08:00
parent 355a94d116
commit 1f9288f780
5 changed files with 32 additions and 29 deletions
@@ -6,6 +6,7 @@
import { useState, useCallback } from 'react';
import { useI18n } from '@/utils/chromeI18n';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Switch } from '@/components/ui/switch';
import { Badge } from '@/components/ui/badge';
import { getGeneratorById } from '@/lib/generators';
@@ -110,9 +111,9 @@ export default function FieldEditor({ field, onChange, allFieldNames = [] }: Fie
<div className="space-y-4">
<div className="space-y-2">
<div className="flex items-center justify-between">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_fieldName')}
</label>
</Label>
<span className="text-xs text-muted-foreground">{field.name.length}/20</span>
</div>
<Input
@@ -127,9 +128,9 @@ export default function FieldEditor({ field, onChange, allFieldNames = [] }: Fie
<div className="space-y-2">
<div className="flex items-center justify-between">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_fieldDescription')}
</label>
</Label>
<span className="text-xs text-muted-foreground">
{(field.description || '').length}/50
</span>
@@ -147,9 +148,9 @@ export default function FieldEditor({ field, onChange, allFieldNames = [] }: Fie
{/* 必填/选填配置 */}
<div className="space-y-3">
<div className="flex items-center justify-between">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_required')}
</label>
</Label>
<Switch checked={field.required} onCheckedChange={handleRequiredChange} />
</div>
@@ -198,26 +199,26 @@ export default function FieldEditor({ field, onChange, allFieldNames = [] }: Fie
{/* 唯一性约束 */}
<div className="flex items-center justify-between">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_uniqueConstraint')}
</label>
</Label>
<Switch checked={field.unique} onCheckedChange={handleUniqueChange} />
</div>
{/* 生成器选择 */}
<div className="space-y-2">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_generator')}
</label>
</Label>
<GeneratorSelector selectedId={field.generatorId} onChange={handleGeneratorChange} />
</div>
{/* 生成器参数配置 */}
{generator && (
<div className="space-y-2">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_generatorParams')}
</label>
</Label>
<GeneratorConfig
generator={generator}
params={field.params}
@@ -5,6 +5,7 @@
import { useI18n } from '@/utils/chromeI18n';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
interface GenerateOptionsProps {
count: number;
@@ -32,9 +33,9 @@ export default function GenerateOptions({
<div className="space-y-4">
{/* 生成数量 */}
<div className="space-y-2">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_count')}
</label>
</Label>
<div className="flex flex-wrap gap-2">
{COUNT_PRESETS.map((preset) => (
<button
@@ -67,9 +68,9 @@ export default function GenerateOptions({
{/* 数据格式 */}
<div className="space-y-2">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{t('testDataGenerator_format')}
</label>
</Label>
<div className="flex gap-2">
{FORMAT_OPTIONS.map((option) => (
<button
@@ -4,6 +4,7 @@
*/
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Switch } from '@/components/ui/switch';
import {
Select,
@@ -39,10 +40,10 @@ export default function GeneratorConfig({ generator, params, onChange }: Generat
<div className="space-y-4 p-3 rounded-lg bg-muted/30">
{generator.params.map((param) => (
<div key={param.key} className="space-y-2">
<label className="text-sm font-medium text-foreground">
<Label className="text-sm font-medium text-foreground">
{param.label}
{param.required && <span className="text-destructive ml-1">*</span>}
</label>
</Label>
{param.description && (
<p className="text-xs text-muted-foreground">{param.description}</p>
)}