import type { SelectProps } from 'antd/lib/select'; import React from 'react'; /** * 实体选择器的骨架。 * * 各业务模块的实体选择器(线体、车间、物料、供应商……)此前是逐个复制出来的: * 取数、防抖、受控值、下拉即查、labelInValue、弹窗表格列,每份各写一遍, * 真正不同的只有请求函数、提示语和表格列。骨架收在这里,各模块只填自己的那几项。 * * 骨架不认识任何业务契约:请求函数由调用方传入,不引用任何生成服务客户端。 * * @author nokecy */ /** 取数入参:与后端分页查询约定一致。 */ export interface EntitySelectQuery { Filter?: string; SkipCount?: number; MaxResultCount?: number; Sorting?: string; } export interface EntitySelectConfig { /** 取数函数,通常是生成服务客户端里的 XxxGetListAsync。 */ request: (query: EntitySelectQuery) => Promise; /** 非标准查询接口按自身候选范围解析已选项名称。@author nokecy */ resolveSelected?: (values: any[]) => Promise; /** 未选择时的提示语。 */ placeholder: string; /** 弹窗内表格的列定义。 */ columnDefs: any[]; /** 下拉项与回填值取哪个字段。传字符串则固定;不传则由 useCode 在 code 与 id 之间切换。 */ valueField?: string; /** 回填标签取哪个字段。不传则不向 DialogSelect 声明,沿用其自身默认。 */ labelField?: string; /** 弹窗宽度,不传则用 DialogSelect 的默认值。 */ modalWidth?: number; /** 单页取数条数,默认 300。 */ pageSize?: number; /** useCode 的默认值,默认 true(以编码而非主键作为值)。 */ useCodeByDefault?: boolean; /** 搜索关键字如何拼成后端过滤表达式,默认按 name 或 code 模糊匹配。返回 undefined 表示不带过滤条件。 */ buildFilter?: (keyword: string) => string | undefined; /** 下拉项显示文本,默认「编码 - 名称」。 */ renderOptionLabel?: (item: any) => React.ReactNode; /** 下拉项需要额外属性时的逃生舱:整项自渲染,优先于 renderOptionLabel。 */ renderOption?: (item: any, valueField: string) => React.ReactNode; /** 联动回调的 prop 名,如 onWorkLineSelect。声明后组件支持 enableLinkage。 */ linkagePropName?: string; /** 选择窗口里使用的表格组件,不传则用 AgGridPlus;宿主可注入自己封装过的表格基座。 */ gridComponent?: React.ComponentType; } export interface EntitySelectProps extends SelectProps { /** 以编码而非主键作为选中值。 */ useCode?: boolean; /** 选中后把整条记录回调给使用方,需配置 linkagePropName。 */ enableLinkage?: boolean; } declare const createEntitySelect: (config: EntitySelectConfig) => React.ForwardRefExoticComponent & React.RefAttributes>; export { createEntitySelect }; export default createEntitySelect;