feat(web): EntitySelect 关联选择器 — 远程搜索 + 级联过滤

- 新增 EntitySelect 组件,支持远程搜索和级联过滤
- PluginCRUDPage 表单渲染新增 entity_select widget 支持
- 通过 ref_entity/ref_label_field 配置关联实体
- 通过 cascade_from/cascade_filter 实现级联过滤
This commit is contained in:
iven
2026-04-17 10:56:17 +08:00
parent 5b2ae16ffb
commit e2e58d3a00
2 changed files with 100 additions and 0 deletions

View File

@@ -33,6 +33,7 @@ import {
deletePluginData,
type PluginDataListOptions,
} from '../api/pluginData';
import EntitySelect from '../components/EntitySelect';
import {
getPluginSchema,
type PluginFieldSchema,
@@ -336,6 +337,25 @@ export default function PluginCRUDPage({
);
case 'textarea':
return <TextArea rows={3} />;
case 'entity_select':
return (
<EntitySelect
pluginId={pluginId}
entity={field.ref_entity!}
labelField={field.ref_label_field || 'name'}
searchFields={field.ref_search_fields}
value={formValues[field.name] as string | undefined}
onChange={(v) => form.setFieldValue(field.name, v)}
cascadeFrom={field.cascade_from}
cascadeFilter={field.cascade_filter}
cascadeValue={
field.cascade_from
? (formValues[field.cascade_from] as string | undefined)
: undefined
}
placeholder={field.display_name}
/>
);
default:
return <Input />;
}