perf: unify entities

This commit is contained in:
Junyan Qin
2025-05-08 18:09:52 +08:00
parent ef6be4dfd9
commit e74de068ea
19 changed files with 400 additions and 632 deletions
@@ -1,18 +1,18 @@
// import { Form, Input, InputNumber, Select, Switch } from 'antd';
import {
DynamicFormItemType,
IDynamicFormItemConfig,
} from '@/app/home/components/dynamic-form/DynamicFormItemConfig';
IDynamicFormItemSchema,
} from '@/app/infra/entities/form/dynamic';
import { Input } from "@/components/ui/input"
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Checkbox } from "@/components/ui/checkbox"
import { ControllerRenderProps } from "react-hook-form";
import { Button } from "@/components/ui/button";
export default function DynamicFormItemComponent({
config,
field,
}: {
config: IDynamicFormItemConfig;
config: IDynamicFormItemSchema;
field: ControllerRenderProps<any, any>;
}) {
switch (config.type) {
@@ -39,21 +39,37 @@ export default function DynamicFormItemComponent({
case DynamicFormItemType.STRING_ARRAY:
return (
<Select
value={field.value}
onValueChange={field.onChange}
>
<SelectTrigger>
<SelectValue placeholder="请选择" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
{/* 这里需要根据实际情况添加选项 */}
<SelectItem value="option1">1</SelectItem>
<SelectItem value="option2">2</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
<div className="space-y-2">
{field.value.map((item: string, index: number) => (
<div key={index} className="flex gap-2">
<Input
value={item}
onChange={(e) => {
const newValue = [...field.value];
newValue[index] = e.target.value;
field.onChange(newValue);
}}
/>
<Button
variant="destructive"
onClick={() => {
const newValue = field.value.filter((_: string, i: number) => i !== index);
field.onChange(newValue);
}}
>
</Button>
</div>
))}
<Button
variant="outline"
onClick={() => {
field.onChange([...field.value, '']);
}}
>
</Button>
</div>
);
case DynamicFormItemType.SELECT:
@@ -67,9 +83,11 @@ export default function DynamicFormItemComponent({
</SelectTrigger>
<SelectContent>
<SelectGroup>
{/* 这里需要根据实际情况添加选项 */}
<SelectItem value="option1">1</SelectItem>
<SelectItem value="option2">2</SelectItem>
{config.options?.map((option) => (
<SelectItem key={option.name} value={option.name}>
{option.label.zh_CN}
</SelectItem>
))}
</SelectGroup>
</SelectContent>
</Select>