UNPKG

condition-editor

Version:
311 lines (243 loc) 19.7 kB
# condition-editor [![NPM version](https://img.shields.io/npm/v/condition-editor.svg?style=flat)](https://npmjs.org/package/condition-editor) [![NPM downloads](http://img.shields.io/npm/dm/condition-editor.svg?style=flat)](https://npmjs.org/package/condition-editor) 在线条件编辑器 ## 使用教程 ### 安装 ```bash pnpm add condition-editor ## 或者 npm i condition-editor ``` ### 快速上手 ```tsx import { ConditionEditor, ConditionGroupInfo } from 'condition-editor'; export default () => { const handleChange = (value: ConditionGroupInfo) => { console.log('条件配置:', value); }; return ( <ConditionEditor onChange={handleChange} renderCondField={({ data, disabled }, onChange) => { return ( <input value={data?.value} onChange={(e) => { const val = e?.target?.value || ''; onChange({ ...data, value: val, }); }} disabled={disabled} style={{ width: '120px' }} placeholder="请输入" /> ); }} operators={[ { value: 'equal', label: '等于', }, { label: '不等于', value: 'notEqual', }, ]} /> ); }; ``` ## 🔨 API ### ConditionEditorProps | 属性 | 描述 | 类型 | 默认值 | 必须 | | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ---- | | disabled | 禁用 | `boolean` | - | 否 | | noCondContent | 禁用或只读状态下,没有条件展示内容 | `ReactNode` | - | 否 | | maxHeight | 最大高度 | `string\|number` | - | 否 | | additionText | 首层添加按钮文本 | `ReactNode` | "添加条件" | 否 | | additionProps | 首层添加按钮属性 | [ButtonProps](#https://4x.ant.design/components/button-cn/#API) | - | 否 | | relationText | 条件关联关系文本,对应[`RelationType.AND`, `RelationType.OR`]的展示文案 | `ReactNode[]` | ['并且','或者'] | 否 | | levelText | 条件级别关系文本,对应[`LevelType.Before`, `LevelType.After`, `LevelType.Child`, `LevelType.BeforeParent`, `LevelType.AfterParent`]的展示文案 | `ReactNode[]` | ['在上方插入条件','在下方插入条件','插入子级条件','在父级上方插入条件','在父级下方插入条件'] | 否 | | getContainer | 指定`编辑器`挂载的节点。默认渲染到 `body` 上 | `(() => HTMLElement) \| false \| HTMLElement` | `()=>document.body` | 否 | | onBeforeAddition | 新增条件前触发回调,可用于自定义新增项 | [onBeforeAddition](#onbeforeaddition) | - | 否 | | onAddition | 新增条件后触发回调 | [onAddition](#onaddition) | - | 否 | | onBeforeDelete | 删除条件前触发回调,返回`false`可用于取消删除 | [onBeforeDelete](#onbeforedelete) | - | 否 | | onDelete | 删除条件触发回调 | [onDelete](#ondelete) | - | 否 | | renderCondPrefix | 自定义渲染条件前缀文案,默认是`当` | [RenderCondFn](#rendercondfn) | - | 否 | | renderCondField | 自定义渲染过滤字段 | [RenderCondFn](#rendercondfn) | - | 否 | | renderCondOperator | 自定义渲染关联词字段 | [RenderCondFn](#rendercondfn) | - | 否 | | renderCondActions | 自定义渲染条件操作 | [RenderCondActionFn](#rendercondactionfn) | - | 否 | | operators | 自定义关联词可选项 | [OptionItem](#optionitem)[] | - | 否 | | renderCondValue | 自定义渲染过滤值 | [RenderCondFn](#rendercondfn) | - | 否 | | renderCondExtra | 自定义渲染条件后缀文案,默认是`时` | [RenderCondFn](#rendercondfn) | - | 否 | 除上述属性外,组件还支持 [`Antd - Card`](#https://4x.ant.design/components/card-cn/#API) 除`defaultValue``onChange`外的其他属性来扩展配置外层容器。 ### onDelete | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----- | ------ | ----------------------------------------- | ------ | ---- | | group | | [ConditionGroupInfo](#conditiongroupinfo) | - | 是 | | key | | `string` | - | 是 | | type | | [NodeType](#nodetype) | - | 是 | | `--` | 返回值 | `void` | - | 否 | ### onBeforeDelete | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----- | ------ | ----------------------------------------- | ------ | ---- | | group | | [ConditionGroupInfo](#conditiongroupinfo) | - | 是 | | info | | `info` | - | 是 | | type | | [NodeType](#nodetype) | - | 是 | | `--` | 返回值 | `Promise<boolean>`\|`boolean`\|`void` | - | 否 | ### info | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----- | ---- | -------- | ------ | ---- | | key | | `string` | - | 是 | | index | | `number` | - | 是 | ### onAddition | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----- | ------ | ----------------------------------------- | ------ | ---- | | group | | [ConditionGroupInfo](#conditiongroupinfo) | - | 是 | | key | | `string` | - | 是 | | type | | [LevelType](#leveltype) | - | 是 | | node | | [ConditionNodeInfo](#conditionnodeinfo) | - | 是 | | `--` | 返回值 | `void` | - | 否 | ### onBeforeAddition | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----- | ------ | ------------------------------------------------- | ------ | ---- | | group | | [ConditionGroupInfo](#conditiongroupinfo) | - | 是 | | key | | `string` | - | 是 | | type | | [LevelType](#leveltype) | - | 是 | | `--` | 返回值 | `Promise<NodeData \| false> \| NodeData \| false` | - | 否 | ### RenderCondActionFn | 属性 | 描述 | 类型 | 默认值 | 必须 | | ---------- | ------ | --------------------- | ------ | ---- | | defaultDom | | `JSX.Element[]` | - | 是 | | info | | `info` | - | 是 | | actions | | `ConditionActionType` | - | 是 | | `--` | 返回值 | `JSX.Element[]` | - | 否 | ### info | 属性 | 描述 | 类型 | 默认值 | 必须 | | --------------- | ---- | --------------------------------------- | ------ | ---- | | node | | [ConditionNodeInfo](#conditionnodeinfo) | - | 是 | | data | | [ConditionNodeData](#conditionnodedata) | - | 是 | | actionClassName | | `string` | - | 是 | ### ConditionActionType | 属性 | 描述 | 类型 | 默认值 | 必须 | | ------ | ---------- | -------- | ------ | ---- | | add | 添加条件项 | `add` | - | 是 | | delete | 删除条件项 | `delete` | - | 是 | ### delete | 属性 | 描述 | 类型 | 默认值 | 必须 | | ---- | ------ | ------ | ------ | ---- | | `--` | 返回值 | `void` | - | 否 | ### add | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----------- | ------ | --------------------------------------- | ------ | ---- | | type | | [LevelType](#leveltype) | - | 是 | | defaultData | | [ConditionNodeData](#conditionnodedata) | - | 否 | | `--` | 返回值 | `void` | - | 否 | ### RenderCondFn | 属性 | 描述 | 类型 | 默认值 | 必须 | | ------------ | --------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------ | ---- | | info | 节点信息 | `{ node: ConditionNodeInfo<NodeData>; data: NodeData; disabled: boolean; }` | - | 是 | | onChange | 节点数据变更回调 | `(data: NodeData) => void` | - | 是 | | getContainer | 指定`编辑器`挂载的节点。来自组件的`getContainer`配置,并转化为方法传递 | `() => HTMLElement` | - | 否 | | `--` | 返回值 | `ReactNode` | - | 否 | ### onChange | 属性 | 描述 | 类型 | 默认值 | 必须 | | ---- | ------ | --------------------------------------- | ------ | ---- | | data | | [ConditionNodeData](#conditionnodedata) | - | 是 | | `--` | 返回值 | `void` | - | 否 | ### info | 属性 | 描述 | 类型 | 默认值 | 必须 | | -------- | ---- | --------------------------------------- | ------ | ---- | | node | | [ConditionNodeInfo](#conditionnodeinfo) | - | 是 | | data | | [ConditionNodeData](#conditionnodedata) | - | 是 | | disabled | | `boolean` | - | 是 | ### ConditionItemProps | 属性 | 描述 | 类型 | 默认值 | 必须 | | --------- | ---------------- | -------------------------- | ------ | ---- | | actionRef | 初始化操作 | `React.MutableRefObject\|` | - | 否 | | onAdd | 新增节点点击触发 | `onAdd` | - | 否 | | onDelete | 删除节点点击触发 | `onDelete` | - | 否 | ### onDelete | 属性 | 描述 | 类型 | 默认值 | 必须 | | ---- | ------ | -------- | ------ | ---- | | key | | `string` | - | 是 | | `--` | 返回值 | `void` | - | 否 | ### onAdd | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----------- | ------ | --------------------------------------- | ------ | ---- | | key | | `string` | - | 是 | | type | | [LevelType](#leveltype) | - | 是 | | defaultData | | [ConditionNodeData](#conditionnodedata) | - | 否 | | `--` | 返回值 | `void` | - | 否 | ### ConditionGroupInfo | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----------- | ---- | ----------------------------------------- | ------ | ---- | | key | | `string` | - | 是 | | description | | `string` | - | 否 | | type | | `NodeType.Group` | - | 是 | | data | | [ConditionGroupData](#conditiongroupdata) | - | 是 | | children | | `[]` | - | 是 | ### ConditionNodeInfo | 属性 | 描述 | 类型 | 默认值 | 必须 | | ----------- | ---- | --------------------------------------- | ------ | ---- | | key | | `string` | - | 是 | | description | | `string` | - | 否 | | type | | `NodeType.Item` | - | 是 | | data | | [ConditionNodeData](#conditionnodedata) | - | 是 | ### ConditionGroupData | 属性 | 描述 | 类型 | 默认值 | 必须 | | -------- | ---- | ----------------------------- | ------ | ---- | | relation | | [RelationType](#relationtype) | - | 否 | ### ConditionNodeData | 属性 | 描述 | 类型 | 默认值 | 必须 | | --------- | ---- | -------- | ------ | ---- | | field | | `string` | - | 否 | | operator | | `string` | - | 否 | | value | | `any` | - | 否 | | valueType | | `string` | - | 否 | ### OptionItem | 属性 | 描述 | 类型 | 默认值 | 必须 | | -------- | -------- | ----------------- | ------ | ---- | | label | 选项文本 | `React.ReactNode` | - | 是 | | value | 选项值 | `string` | - | 是 | | disabled | 禁选 | `boolean` | - | 否 | | data | 其他属性 | `any` | - | 否 | ### ENUM LevelType | 枚举项 | 描述 | 枚举值 | | ---------------------- | ------------------ | -------------- | | LevelType.Before | 在上方插入条件 | `before` | | LevelType.After | 在下方插入条件 | `after` | | LevelType.Child | 插入子级条件 | `child` | | LevelType.BeforeParent | 在父级上方插入条件 | `beforeParent` | | LevelType.AfterParent | 在父级下方插入条件 | `afterParent` | ### ENUM NodeType | 枚举项 | 描述 | 枚举值 | | -------------- | ---------- | ------- | | NodeType.Item | 条件项类别 | `item` | | NodeType.Group | 条件组类别 | `group` | ### ENUM RelationType | 枚举项 | 描述 | 枚举值 | | ---------------- | ---- | ------ | | RelationType.AND | 并且 | `and` | | RelationType.OR | 或者 | `or` | ## 支持功能 - √ 支持层级创建条件 - √ 支持 `TypeScript` - √ 支持自定义条件各个部分内容 - √ 支持监听条件新增前后、删除前后事件 - √ 支持空结果 - √ 支持只读(结合描述) - √ 支持自定义条件项按钮 - √ 支持 `Antd` 框架 - √ 支持组件文案扩展 - √ 支持追加到节点前,节点后 - √ 支持创建父级的兄弟节点 - √ 支持自定义编辑器挂载`DOM`节点 - [x] 支持条件组删除 - [x] 支持同层级拖拽 - [x] 支持多套框架(`Antd-Vue``React-Vant` 等) ## LICENSE MIT