zy-react-library 1.2.38 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,20 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicCascaderProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ value: string;
6
+ label: string;
7
+ children: Data[];
8
+ }
9
+
4
10
  /**
5
11
  * 组件属性
6
12
  */
7
- export interface AreaCascaderProps extends Omit<BasicCascaderProps, "options" | "placeholder" | "nameKey" | "idKey" | "childrenKey"> {
8
-
13
+ export interface AreaCascaderProps extends Omit<BasicCascaderProps, "options" | "placeholder" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
14
+ /** 获取父级节点 */
15
+ onGetNodePaths?: (nodes: Data[]) => void;
16
+ /** 获取数据 */
17
+ onGetData?: (data: Data[], processedData: Data[]) => void;
9
18
  }
10
19
 
11
20
  /**
@@ -1,10 +1,17 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicCascaderProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ dictValue: string;
6
+ dictLabel: string;
7
+ children: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 组件属性
6
13
  */
7
- export interface DictionaryCascaderProps extends Omit<BasicCascaderProps, "options" | "nameKey" | "idKey" | "childrenKey"> {
14
+ export interface DictionaryCascaderProps extends Omit<BasicCascaderProps, "options" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
8
15
  /** appKey,默认 DICTIONARY_APP_KEY_ENUM.DEFAULT(0bb989ecada5470c87635018ece9f327) */
9
16
  appKey?: string;
10
17
  /** 要获取的字典 */
@@ -13,6 +20,10 @@ export interface DictionaryCascaderProps extends Omit<BasicCascaderProps, "optio
13
20
  nameKey?: string;
14
21
  /** 树形数据 value 字段,默认 dictValue */
15
22
  idKey?: string;
23
+ /** 获取父级节点 */
24
+ onGetNodePaths?: (nodes: Data[]) => void;
25
+ /** 获取数据 */
26
+ onGetData?: (data: Data[], processedData: Data[]) => void;
16
27
  }
17
28
 
18
29
  /**
@@ -1,11 +1,20 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicCascaderProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ dict_value: string;
6
+ dict_label: string;
7
+ childrenList: Data[];
8
+ }
9
+
4
10
  /**
5
11
  * 组件属性
6
12
  */
7
- export interface IndustryCascaderProps extends Omit<BasicCascaderProps, "options" | "placeholder" | "nameKey" | "idKey" | "childrenKey"> {
8
-
13
+ export interface IndustryCascaderProps extends Omit<BasicCascaderProps, "options" | "placeholder" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
14
+ /** 获取父级节点 */
15
+ onGetNodePaths?: (nodes: Data[]) => void;
16
+ /** 获取数据 */
17
+ onGetData?: (data: Data[], processedData: Data[]) => void;
9
18
  }
10
19
 
11
20
  /**
@@ -1,17 +1,23 @@
1
1
  import type { FormInstance, FormProps } from "antd/es/form";
2
2
  import type { Gutter } from "antd/es/grid/row";
3
- import type { Store } from "rc-field-form/lib/interface";
4
- import type { FC, ReactNode } from "react";
3
+ import type { ReactElement, ReactNode } from "react";
5
4
  import type { FormOption } from "./FormItemsRenderer";
6
5
 
6
+ /**
7
+ * 深度部分类型,将所有嵌套属性都变为可选
8
+ */
9
+ export type DeepPartial<T> = T extends object
10
+ ? { [P in keyof T]?: DeepPartial<T[P]> }
11
+ : T;
12
+
7
13
  /**
8
14
  * FormBuilder 组件属性
9
15
  */
10
- export interface FormBuilderProps extends Omit<FormProps, "form"> {
16
+ export interface FormBuilderProps<Values = any> extends Omit<FormProps, "form" | "onFinish"> {
11
17
  /** 表单初始值 */
12
- values?: Store;
18
+ values?: DeepPartial<Values>;
13
19
  /** 表单配置项数组 */
14
- options: FormOption[];
20
+ options: FormOption<Values>[];
15
21
  /** 栅格间距,默认 24 */
16
22
  gutter?: Gutter | [Gutter, Gutter];
17
23
  /** 占据栅格列数,默认 12 */
@@ -35,15 +41,21 @@ export interface FormBuilderProps extends Omit<FormProps, "form"> {
35
41
  /** 是否处于加载状态,默认 false */
36
42
  loading?: boolean;
37
43
  /** 表单实例(通过 Form.useForm() 创建) */
38
- form: FormInstance;
44
+ form: FormInstance<Values>;
45
+ /** 表单提交时的回调函数 */
46
+ onFinish?: (values: Values) => void;
39
47
  }
40
48
 
41
49
  /**
42
50
  * 表单构建器组件
43
51
  */
44
- declare const FormBuilder: FC<FormBuilderProps> & {
52
+ type FormBuilderComponent = {
45
53
  useForm: typeof import("antd").Form.useForm;
46
54
  useWatch: typeof import("antd").Form.useWatch;
55
+ } & {
56
+ <Values = any>(props: FormBuilderProps<Values>): ReactElement;
47
57
  };
48
58
 
59
+ declare const FormBuilder: FormBuilderComponent;
60
+
49
61
  export default FormBuilder;
@@ -2,13 +2,10 @@ import type { ColProps } from "antd/es/col";
2
2
  import type { FormItemProps, Rule } from "antd/es/form";
3
3
  import type { FormListFieldData } from "antd/es/form/FormList";
4
4
  import type { Gutter } from "antd/es/grid/row";
5
- import type { Store } from "rc-field-form/lib/interface";
6
- import type { FC, ReactNode } from "react";
5
+ import type { NamePath, Store } from "rc-field-form/lib/interface";
6
+ import type { ReactElement, ReactNode } from "react";
7
7
  import type { FORM_ITEM_RENDER_TYPE_MAP } from "../../enum/formItemRender";
8
8
 
9
- /** 表单项 name */
10
- export type FormFieldName = string | number | (string | number)[];
11
-
12
9
  /**
13
10
  * 选择项数据类型
14
11
  */
@@ -61,7 +58,7 @@ export interface FormListUniqueProps {
61
58
  /** 删除按钮的文本,默认 '删除' */
62
59
  removeButtonText?: string;
63
60
  /** 表单配置项 */
64
- options: (field: FormListFieldData, fieldIndex: number, operations: FormListOperations) => FormOption[];
61
+ options: (field: FormListFieldData, fieldIndex: number, operations: FormListOperations) => FormListOption[];
65
62
  /** 点击新增按钮时的默认值 */
66
63
  addDefaultValue?: Store;
67
64
  /** 点击新增按钮时插入的索引位置 */
@@ -76,74 +73,74 @@ type WhenTrue<Condition extends boolean, T> = Condition extends true ? never : T
76
73
  /**
77
74
  * 表单配置项属性类型辅助工具
78
75
  */
79
- type FormOptionProperty<O extends boolean, C extends boolean, T> = WhenTrue<O, WhenTrue<C, T>>;
76
+ type FormOptionProperty<IsOnlyForLabel extends boolean, IsCustomizeRender extends boolean, T> = WhenTrue<IsOnlyForLabel, WhenTrue<IsCustomizeRender, T>>;
80
77
 
81
78
  /**
82
79
  * 表单配置项公共字段
83
80
  */
84
- export interface FormOptionBase<O extends boolean = false, C extends boolean = false> {
81
+ export interface FormOptionBase<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> {
85
82
  /** React 需要的 key,如果传递了唯一的 name,则不需要 */
86
83
  key?: string;
87
84
  /** 表单项字段名 */
88
- name?: FormFieldName;
85
+ name?: Name;
89
86
  /** 表单项标签 */
90
87
  label?: ReactNode;
91
88
  /** 占据栅格列数,默认 12 */
92
- span?: WhenTrue<O, number | string>;
89
+ span?: WhenTrue<IsOnlyForLabel, number | string>;
93
90
  /** 是否必填,默认 true,支持函数动态计算 */
94
- required?: FormOptionProperty<O, C, boolean | ((formValues: Store) => boolean)>;
91
+ required?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, boolean | ((formValues: Values) => boolean)>;
95
92
  /** 验证规则 */
96
- rules?: FormOptionProperty<O, C, Rule | Rule[]>;
93
+ rules?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, Rule | Rule[]>;
97
94
  /** 是否使用字符验证限制 */
98
- useConstraints?: FormOptionProperty<O, C, boolean>;
95
+ useConstraints?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, boolean>;
99
96
  /** 占位符文本,默认会根据传入的 render 类型自动判断(请选择、请输入)和 label 组合 */
100
- placeholder?: FormOptionProperty<O, C, ReactNode>;
97
+ placeholder?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, ReactNode>;
101
98
  /** 提示信息,传入将在 label 右侧生成图标展示 tooltip */
102
- tip?: FormOptionProperty<O, C, ReactNode>;
99
+ tip?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, ReactNode>;
103
100
  /** 是否隐藏,默认 false,支持函数动态计算 */
104
- hidden?: WhenTrue<O, boolean | ((formValues: Store) => boolean)>;
101
+ hidden?: WhenTrue<IsOnlyForLabel, boolean | ((formValues: Values) => boolean)>;
105
102
  /** 是否自定义渲染,完全交给外部控制渲染,默认 false */
106
- customizeRender?: C;
103
+ customizeRender?: IsCustomizeRender;
107
104
  /** 传递给 Form.Item 的属性,支持函数动态计算 */
108
- formItemProps?: FormOptionProperty<O, C, FormItemProps | ((formValues: Store) => FormItemProps)>;
105
+ formItemProps?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, FormItemProps | ((formValues: Values) => FormItemProps)>;
109
106
  /** label 栅格配置,默认直接使用外层的 labelCol,如果 span 等于 24,是外层的 labelCol.span 一半 */
110
- labelCol?: FormOptionProperty<O, C, ColProps>;
107
+ labelCol?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, ColProps>;
111
108
  /** wrapper 栅格配置,默认 24 - labelCol.span */
112
- wrapperCol?: FormOptionProperty<O, C, ColProps>;
109
+ wrapperCol?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, ColProps>;
113
110
  /** 是否应该更新(用于表单联动) */
114
- shouldUpdate?: FormOptionProperty<O, C, boolean | ((prevValues: Store, nextValues: Store, info: { source?: string }) => boolean)>;
111
+ shouldUpdate?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, boolean | ((prevValues: Values, nextValues: Values, info: { source?: string }) => boolean)>;
115
112
  /** 依赖字段(用于表单联动) */
116
- dependencies?: FormOptionProperty<O, C, FormFieldName[]>;
113
+ dependencies?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, Name[]>;
117
114
  /** 是否仅用于保存标签,不渲染到页面上,只在表单中保存数据,默认 false */
118
- onlyForLabel?: O;
115
+ onlyForLabel?: IsOnlyForLabel;
119
116
  }
120
117
 
121
118
  /**
122
119
  * 按 render 类型区分的表单项
123
120
  */
124
- export type FormOptionByRender<R extends keyof FORM_ITEM_RENDER_TYPE_MAP, O extends boolean = false, C extends boolean = false> = FormOptionBase<O, C> & {
121
+ export type FormOptionByRender<RenderType extends keyof FORM_ITEM_RENDER_TYPE_MAP, Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender, Name> & {
125
122
  /** 渲染类型(写字面量时 componentProps 会按该类型推导) */
126
- render: R;
123
+ render: RenderType;
127
124
  /** 传递给表单控件的属性,类型由 render 决定 */
128
- componentProps?: FormOptionProperty<O, C, FORM_ITEM_RENDER_TYPE_MAP[R] | ((formValues: Store) => FORM_ITEM_RENDER_TYPE_MAP[R])>;
125
+ componentProps?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, FORM_ITEM_RENDER_TYPE_MAP[RenderType] | ((formValues: Values) => FORM_ITEM_RENDER_TYPE_MAP[RenderType])>;
129
126
  /** 选项数据(用于 select、radio、checkbox) */
130
- items?: FormOptionProperty<O, C, R extends "select" | "radio" | "checkbox" ? OptionItem[] : never>;
127
+ items?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, RenderType extends "select" | "radio" | "checkbox" ? OptionItem[] : never>;
131
128
  /** 字段键配置 */
132
- itemsField?: FormOptionProperty<O, C, R extends "select" | "radio" | "checkbox" ? ItemsFieldConfig : never>;
129
+ itemsField?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, RenderType extends "select" | "radio" | "checkbox" ? ItemsFieldConfig : never>;
133
130
  /** checkbox 的栅格数量,如果不传入不使用栅格,传入才使用 */
134
- checkboxCol?: FormOptionProperty<O, C, R extends "checkbox" ? number : never>;
131
+ checkboxCol?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, RenderType extends "checkbox" ? number : never>;
135
132
  /** Form.List 独有的属性 */
136
- formListUniqueProps?: FormOptionProperty<O, C, R extends "formList" ? FormListUniqueProps | ((formValues: Store) => FormListUniqueProps) : never>;
133
+ formListUniqueProps?: FormOptionProperty<IsOnlyForLabel, IsCustomizeRender, RenderType extends "formList" ? FormListUniqueProps | ((formValues: Values) => FormListUniqueProps) : never>;
137
134
  };
138
135
 
139
136
  /**
140
137
  * 不写 render 或 render 为 input 时的表单项(默认按输入框)
141
138
  */
142
- export type FormOptionDefault<O extends boolean = false, C extends boolean = false> = FormOptionBase<O, C> & {
139
+ export type FormOptionDefault<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender, Name> & {
143
140
  /** 渲染类型,默认 input */
144
141
  render?: "input" | undefined;
145
142
  /** 传递给 Input 的属性 */
146
- componentProps?: FORM_ITEM_RENDER_TYPE_MAP["input"] | ((formValues: Store) => FORM_ITEM_RENDER_TYPE_MAP["input"]);
143
+ componentProps?: FORM_ITEM_RENDER_TYPE_MAP["input"] | ((formValues: Values) => FORM_ITEM_RENDER_TYPE_MAP["input"]);
147
144
  /** 选项数据(用于 select、radio、checkbox),input 时不需要 */
148
145
  items?: never;
149
146
  /** 字段键配置,input 时不需要 */
@@ -157,7 +154,7 @@ export type FormOptionDefault<O extends boolean = false, C extends boolean = fal
157
154
  /**
158
155
  * 自定义渲染时的表单项(render 为 ReactNode 时使用)
159
156
  */
160
- export type FormOptionCustomRender<O extends boolean = false, C extends boolean = false> = FormOptionBase<O, C> & {
157
+ export type FormOptionCustomRender<Values = any, IsOnlyForLabel extends boolean = false, IsCustomizeRender extends boolean = false, Name = NamePath<Values>> = FormOptionBase<Values, IsOnlyForLabel, IsCustomizeRender, Name> & {
161
158
  /** 渲染类型,默认 ReactNode */
162
159
  render: ReactNode;
163
160
  /** 传递给表单控件的属性,自定义渲染时不需要 */
@@ -173,25 +170,39 @@ export type FormOptionCustomRender<O extends boolean = false, C extends boolean
173
170
  };
174
171
 
175
172
  /**
176
- * 表单配置项
173
+ * 表单配置项(普通表单项)
174
+ */
175
+ export type FormOption<Values = any>
176
+ = | FormOptionDefault<Values, false, false>
177
+ | FormOptionDefault<Values, false, true>
178
+ | FormOptionDefault<Values, true, false>
179
+ | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, false, false> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
180
+ | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, false, true> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
181
+ | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, true, false> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
182
+ | FormOptionCustomRender<Values, false, false>
183
+ | FormOptionCustomRender<Values, false, true>
184
+ | FormOptionCustomRender<Values, true, false>;
185
+
186
+ /**
187
+ * Form.List 子项表单配置项(使用 [number, NamePath] 作为 name 类型)
177
188
  */
178
- export type FormOption
179
- = | FormOptionDefault<false, false>
180
- | FormOptionDefault<false, true>
181
- | FormOptionDefault<true, false>
182
- | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, false, false> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
183
- | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, false, true> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
184
- | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, true, false> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
185
- | FormOptionCustomRender<false, false>
186
- | FormOptionCustomRender<false, true>
187
- | FormOptionCustomRender<true, false>;
189
+ export type FormListOption<Values = any>
190
+ = | FormOptionDefault<Values, false, false, [number, NamePath<Values>]>
191
+ | FormOptionDefault<Values, false, true, [number, NamePath<Values>]>
192
+ | FormOptionDefault<Values, true, false, [number, NamePath<Values>]>
193
+ | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, false, false, [number, NamePath<Values>]> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
194
+ | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, false, true, [number, NamePath<Values>]> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
195
+ | { [K in keyof FORM_ITEM_RENDER_TYPE_MAP]: FormOptionByRender<K, Values, true, false, [number, NamePath<Values>]> }[keyof FORM_ITEM_RENDER_TYPE_MAP]
196
+ | FormOptionCustomRender<Values, false, false, [number, NamePath<Values>]>
197
+ | FormOptionCustomRender<Values, false, true, [number, NamePath<Values>]>
198
+ | FormOptionCustomRender<Values, true, false, [number, NamePath<Values>]>;
188
199
 
189
200
  /**
190
201
  * FormItemsRenderer 组件属性
191
202
  */
192
- export interface FormItemsRendererProps {
203
+ export interface FormItemsRendererProps<Values = any> {
193
204
  /** 表单配置项数组 */
194
- options: FormOption[];
205
+ options: FormOption<Values>[];
195
206
  /** 默认栅格占据列数,默认 12 */
196
207
  span?: number;
197
208
  /** 是否折叠(仅显示前3项),默认 false */
@@ -199,7 +210,7 @@ export interface FormItemsRendererProps {
199
210
  /** 自动生成必填规则,默认 true */
200
211
  useAutoGenerateRequired?: boolean;
201
212
  /** 初始值,用于在表单未初始化时提供默认值 */
202
- initialValues?: Store;
213
+ initialValues?: Values;
203
214
  /** 栅格间距,继承自 FormBuilder */
204
215
  gutter?: Gutter | [Gutter, Gutter];
205
216
  /** label 栅格配置,继承自 FormBuilder */
@@ -209,6 +220,6 @@ export interface FormItemsRendererProps {
209
220
  /**
210
221
  * 表单项渲染器组件
211
222
  */
212
- declare const FormItemsRenderer: FC<FormItemsRendererProps>;
223
+ declare const FormItemsRenderer: <Values = any>(props: FormItemsRendererProps<Values>) => ReactElement;
213
224
 
214
225
  export default FormItemsRenderer;
@@ -1 +1 @@
1
- import{InfoCircleOutlined as e}from"@ant-design/icons";import{Input as r,DatePicker as t,Form as n,Col as l,Divider as s,Row as a,Button as o,Checkbox as d,Radio as i,Select as u,InputNumber as p,Tooltip as c}from"antd";import m from"dayjs";import{FORM_ITEM_RENDER_ENUM as h}from"../../enum/formItemRender/index.js";import{jsx as y,Fragment as E,jsxs as b}from"react/jsx-runtime";const{TextArea:T}=r,{RangePicker:f}=t,I=({options:I,labelCol:v,gutter:A=24,span:R=12,collapse:Y=!1,useAutoGenerateRequired:D=!0,initialValues:C})=>{const N=n.useFormInstance(),w=()=>{const e=N.getFieldsValue();return 0===Object.keys(e).length&&C?C:e},P=e=>"function"==typeof e.componentProps?e.componentProps(w()):e.componentProps||{},U=e=>{const r="function"==typeof e.formItemProps?e.formItemProps(w()):e.formItemProps||{};return[h.DATE,h.DATE_MONTH,h.DATE_YEAR,h.DATETIME].includes(e.render)&&(r.getValueFromEvent=(e,r)=>r,r.getValueProps=e=>({value:e?m(e):void 0})),[h.DATE_WEEK].includes(e.render)&&(r.getValueFromEvent=(e,r)=>r,r.getValueProps=e=>({value:e?m(e,"YYYY-wo"):void 0})),[h.DATE_RANGE,h.DATETIME_RANGE].includes(e.render)&&(r.getValueFromEvent=(e,r)=>r,r.getValueProps=e=>({value:Array.isArray(e)?e.map(e=>e?m(e):void 0):void 0})),r},M=e=>"function"==typeof e?e(w()):e??!0,x=e=>{if(e.render===h.DIVIDER)return[];const r=[];switch(e.render||h.INPUT){case h.INPUT:!1!==e.useConstraints&&r.push({max:50,message:"最多输入50字符"});break;case h.TEXTAREA:!1!==e.useConstraints&&r.push({max:500,message:"最多输入500字符"});break;case h.INPUT_NUMBER:case h.NUMBER:!1!==e.useConstraints&&r.push({pattern:/^(\d+)(\.\d{1,2})?$/,message:"请输入正确的数字,最多保留两位小数"}),!1!==e.useConstraints&&r.push({validator:(e,r)=>r&&Math.abs(Number.parseFloat(r))>999999999?Promise.reject("输入数值超出安全范围"):Promise.resolve()});break;case h.INTEGER:!1!==e.useConstraints&&r.push({pattern:/^(\d+)$/,message:"请输入正确的整数"}),!1!==e.useConstraints&&r.push({validator:(e,r)=>r&&Math.abs(Number.parseFloat(r))>999999999?Promise.reject("输入数值超出安全范围"):Promise.resolve()})}if(!D)return e.rules?Array.isArray(e.rules)?[...e.rules,...r]:[e.rules,...r]:r;if(M(e.required)){const t=!e.render||[h.INPUT,h.TEXTAREA,h.INPUT_NUMBER,h.NUMBER,h.INTEGER].includes(e.render);return r.push({required:!0,message:`${t?"请输入":"请选择"}${e.label}`}),e.rules&&(Array.isArray(e.rules)?r.push(...e.rules):r.push(e.rules)),r}return e.rules?Array.isArray(e.rules)?[...e.rules,...r]:[e.rules,...r]:r},g=e=>e.key||e.name,B=e=>{const r=e.render===h.DIVIDER?24:e.span??R,t=e.labelCol??(24===r?{span:v.span/2}:v);return{span:r,labelCol:t,wrapperCol:e.wrapperCol??{span:24-t.span}}},_=(e,r)=>({value:e[r.valueKey],label:"function"==typeof r.labelKey?r.labelKey(e):e[r.labelKey],disabled:e.disabled}),k=e=>{const n=P(e),s=(e=>({valueKey:e?.itemsField?.valueKey||"bianma",labelKey:e?.itemsField?.labelKey||"name"}))(e),o=e.render||h.INPUT,c=e.placeholder||`请${[h.INPUT,h.TEXTAREA,h.INPUT_NUMBER,h.NUMBER,h.INTEGER].includes(o)?"输入":"选择"}${e.label}`;switch(o){case h.INPUT:return y(r,{placeholder:c,maxLength:!1!==e.useConstraints?50:9999,...n});case h.TEXTAREA:return y(T,{placeholder:c,maxLength:!1!==e.useConstraints?500:9999,showCount:!0,rows:3,...n});case h.INPUT_NUMBER:case h.NUMBER:case h.INTEGER:return y(p,{placeholder:c,style:{width:"100%"},...n});case h.SELECT:return y(u,{placeholder:c,showSearch:!0,allowClear:!0,optionFilterProp:"children",...n,children:(e.items||[]).map(e=>{const{value:r,label:t,disabled:n}=_(e,s);return y(u.Option,{value:r,disabled:n,children:t},r)})});case h.RADIO:return y(i.Group,{...n,children:(e.items||[]).map(e=>{const{value:r,label:t,disabled:n}=_(e,s);return y(i,{value:r,disabled:n,children:t},r)})});case h.CHECKBOX:return y(d.Group,{...n,children:e.checkboxCol?y(a,{children:(e.items||[]).map(r=>{const{value:t,label:n,disabled:a}=_(r,s);return y(l,{span:e.checkboxCol,children:y(d,{value:t,disabled:a,children:n})},t)})}):(e.items||[]).map(e=>{const{value:r,label:t,disabled:n}=_(e,s);return y(d,{value:r,disabled:n,children:t},r)})});case h.DATE:return y(t,{placeholder:c,format:"YYYY-MM-DD",style:{width:"100%"},...n});case h.DATE_MONTH:return y(t,{picker:"month",placeholder:c,format:"YYYY-MM",style:{width:"100%"},...n});case h.DATE_YEAR:return y(t,{picker:"year",placeholder:c,format:"YYYY",style:{width:"100%"},...n});case h.DATE_WEEK:return y(t,{picker:"week",placeholder:c,format:"YYYY-wo",style:{width:"100%"},...n});case h.DATE_RANGE:return y(f,{placeholder:[`请选择开始${e.label}`,`请选择结束${e.label}`],format:"YYYY-MM-DD",style:{width:"100%"},...n});case h.DATETIME:return y(t,{showTime:!0,placeholder:c,format:"YYYY-MM-DD HH:mm:ss",style:{width:"100%"},...n});case h.DATETIME_RANGE:return y(f,{showTime:!0,placeholder:[`请选择开始${e.label}`,`请选择结束${e.label}`],format:"YYYY-MM-DD HH:mm:ss",style:{width:"100%"},...n});case h.DIVIDER:return null;default:return o}},V=r=>r.tip?b(E,{children:[r.label,y(c,{title:r.tip,children:y(e,{style:{marginLeft:4,fontSize:12}})})]}):r.label,F=({option:e,style:r,col:t,index:s})=>{const a=U(e);return delete a.dependencies,delete a.shouldUpdate,("function"==typeof(o=e.hidden)?o(w()):o)?null:y(l,{span:t.span,style:r,children:y(n.Item,{name:e.name,label:V(e),rules:x(e),labelCol:t.labelCol,wrapperCol:t.wrapperCol,preserve:!1,...a,children:k(e)})},g(e)||s);var o},$=({option:e,style:r,col:t,index:a})=>{const o=P(e);return e.customizeRender?y(l,{span:t.span,style:r,children:e.render},g(e)||a):e.onlyForLabel?y(n.Item,{name:e.name,noStyle:!0,preserve:!1,children:y("input",{type:"hidden"})},g(e)||a):e.render===h.DIVIDER?y(l,{span:t.span,style:r,children:y(s,{orientation:"left",...o,children:e.label})},g(e)||a):null};return y(E,{children:I.map((e,r)=>{const t=B(e),s=(e=>Y&&e>=3?{display:"none"}:void 0)(r),d=U(e);return $({option:e,style:s,col:t,index:r})||(e.render===h.FORM_LIST?((e,r,t,s)=>{const d=(e=>{const r={showAddButton:!0,showRemoveButton:!0,addButtonText:"添加",removeButtonText:"删除",options:[],addDefaultValue:{},addInsertIndex:void 0};return"function"==typeof e.formListUniqueProps?{...r,...e.formListUniqueProps(w())}:{...r,...e.formListUniqueProps||{}}})(e),i=P(e);return y(l,{span:t.span,style:s,children:y(n.List,{name:e.name,...i,children:(e,{add:r,remove:t,move:i})=>y(E,{children:e.map((e,u)=>{const p=((e,r,t,n,l,s)=>"function"==typeof e?e(r,t,{field:r,fieldIndex:t,add:n,remove:l,move:s}):e??[])(d.options,e,u,r,t,i);return y(a,{gutter:A,children:p.map((a,i)=>{const c=B(a),m=U(a);delete m.dependencies,delete m.shouldUpdate;const h={option:a,style:s,col:c,index:`${u}_${i}`};return $(h)||(i===p.length-1?y(l,{span:c.span,style:s,children:y(n.Item,{label:V(a),labelCol:c.labelCol,wrapperCol:c.wrapperCol,preserve:!1,required:M(a.required),...m,children:b("div",{style:{display:"flex",gap:10,alignItems:"center",justifyContent:"space-between"},children:[y("div",{style:{flex:1},children:y(n.Item,{noStyle:!0,rules:x(a),name:a.name,children:k(a)})}),u>=1?d.showRemoveButton&&y(o,{type:"primary",danger:!0,onClick:()=>t(e.name),children:d.removeButtonText}):d.showAddButton&&y(o,{type:"primary",onClick:()=>r(d.addDefaultValue,d.addInsertIndex),children:d.addButtonText})]})})},g(a)||i):F(h))})},e.key)})})})},g(e)||r)})(e,r,t,s):(e.shouldUpdate??e.dependencies)||(d.shouldUpdate??d.dependencies)?((e,r,t,l)=>{const s=U(e);return y(n.Item,{noStyle:!0,preserve:!1,shouldUpdate:e.shouldUpdate??s.shouldUpdate,dependencies:e.dependencies??s.dependencies,children:()=>F({option:e,style:t,col:l,index:r})},g(e)||r)})(e,r,s,t):F({option:e,style:s,col:t,index:r}))})})};I.displayName="FormItemsRenderer";export{I as default};
1
+ import{InfoCircleOutlined as e}from"@ant-design/icons";import{Input as r,DatePicker as n,Form as t,Col as l,Divider as s,Row as a,Button as o,Checkbox as d,Radio as i,Select as u,InputNumber as p,Tooltip as c}from"antd";import m from"dayjs";import{FORM_ITEM_RENDER_ENUM as h}from"../../enum/formItemRender/index.js";import{jsx as y,Fragment as E,jsxs as f}from"react/jsx-runtime";const{TextArea:T}=r,{RangePicker:b}=n,I=({options:I,labelCol:v,gutter:A=24,span:R=12,collapse:Y=!1,useAutoGenerateRequired:D=!0,initialValues:C})=>{const N=t.useFormInstance(),w=()=>{const e=N.getFieldsValue();return 0===Object.keys(e).length&&C?C:e},M=e=>"function"==typeof e.componentProps?e.componentProps(w()):e.componentProps||{},P=e=>{const r="function"==typeof e.formItemProps?e.formItemProps(w()):e.formItemProps||{};return[h.DATE,h.DATE_MONTH,h.DATE_YEAR,h.DATETIME].includes(e.render)&&(r.getValueFromEvent=(e,r)=>r,r.getValueProps=e=>({value:e?m(e):void 0})),[h.DATE_WEEK].includes(e.render)&&(r.getValueFromEvent=(e,r)=>r,r.getValueProps=e=>({value:e?m(e,"YYYY-wo"):void 0})),[h.DATE_RANGE,h.DATETIME_RANGE].includes(e.render)&&(r.getValueFromEvent=(e,r)=>r,r.getValueProps=e=>({value:Array.isArray(e)?e.map(e=>e?m(e):void 0):void 0})),r},U=e=>"function"==typeof e?e(w()):e??!0,x=e=>{if(e.render===h.DIVIDER)return[];const r=[];switch(e.render||h.INPUT){case h.INPUT:!1!==e.useConstraints&&r.push({max:50,message:"最多输入50字符"});break;case h.TEXTAREA:!1!==e.useConstraints&&r.push({max:500,message:"最多输入500字符"});break;case h.INPUT_NUMBER:case h.NUMBER:!1!==e.useConstraints&&r.push({pattern:/^(\d+)(\.\d{1,2})?$/,message:"请输入正确的数字,最多保留两位小数"}),!1!==e.useConstraints&&r.push({validator:(e,r)=>r&&Math.abs(Number.parseFloat(r))>999999999?Promise.reject("输入数值超出安全范围"):Promise.resolve()});break;case h.INTEGER:!1!==e.useConstraints&&r.push({pattern:/^(\d+)$/,message:"请输入正确的整数"}),!1!==e.useConstraints&&r.push({validator:(e,r)=>r&&Math.abs(Number.parseFloat(r))>999999999?Promise.reject("输入数值超出安全范围"):Promise.resolve()})}if(!D)return e.rules?Array.isArray(e.rules)?[...e.rules,...r]:[e.rules,...r]:r;if(U(e.required)){const n=!e.render||[h.INPUT,h.TEXTAREA,h.INPUT_NUMBER,h.NUMBER,h.INTEGER].includes(e.render);return r.push({required:!0,message:`${n?"请输入":"请选择"}${e.label}`}),e.rules&&(Array.isArray(e.rules)?r.push(...e.rules):r.push(e.rules)),r}return e.rules?Array.isArray(e.rules)?[...e.rules,...r]:[e.rules,...r]:r},g=e=>e.key||e.name,_=e=>{const r=e.render===h.DIVIDER?24:e.span??R,n=e.labelCol??(24===r?{span:v.span/2}:v);return{span:r,labelCol:n,wrapperCol:e.wrapperCol??{span:24-n.span}}},B=e=>"function"==typeof e?e(w()):e??!1,F=(e,r)=>({value:e[r.valueKey],label:"function"==typeof r.labelKey?r.labelKey(e):e[r.labelKey],disabled:e.disabled}),k=e=>{const t=M(e),s=(e=>({valueKey:e?.itemsField?.valueKey||"bianma",labelKey:e?.itemsField?.labelKey||"name"}))(e),o=e.render??h.INPUT,c=e.placeholder??`请${[h.INPUT,h.TEXTAREA,h.INPUT_NUMBER,h.NUMBER,h.INTEGER].includes(o)?"输入":"选择"}${e.label}`;switch(o){case h.INPUT:return y(r,{placeholder:c,maxLength:!1!==e.useConstraints?50:9999,...t});case h.TEXTAREA:return y(T,{placeholder:c,maxLength:!1!==e.useConstraints?500:9999,showCount:!0,rows:3,...t});case h.INPUT_NUMBER:case h.NUMBER:case h.INTEGER:return y(p,{placeholder:c,style:{width:"100%"},...t});case h.SELECT:return y(u,{placeholder:c,showSearch:!0,allowClear:!0,optionFilterProp:"children",...t,children:(e.items||[]).map(e=>{const{value:r,label:n,disabled:t}=F(e,s);return y(u.Option,{value:r,disabled:t,children:n},r)})});case h.RADIO:return y(i.Group,{...t,children:(e.items||[]).map(e=>{const{value:r,label:n,disabled:t}=F(e,s);return y(i,{value:r,disabled:t,children:n},r)})});case h.CHECKBOX:return y(d.Group,{...t,children:e.checkboxCol?y(a,{children:(e.items||[]).map(r=>{const{value:n,label:t,disabled:a}=F(r,s);return y(l,{span:e.checkboxCol,children:y(d,{value:n,disabled:a,children:t})},n)})}):(e.items||[]).map(e=>{const{value:r,label:n,disabled:t}=F(e,s);return y(d,{value:r,disabled:t,children:n},r)})});case h.DATE:return y(n,{placeholder:c,format:"YYYY-MM-DD",style:{width:"100%"},...t});case h.DATE_MONTH:return y(n,{picker:"month",placeholder:c,format:"YYYY-MM",style:{width:"100%"},...t});case h.DATE_YEAR:return y(n,{picker:"year",placeholder:c,format:"YYYY",style:{width:"100%"},...t});case h.DATE_WEEK:return y(n,{picker:"week",placeholder:c,format:"YYYY-wo",style:{width:"100%"},...t});case h.DATE_RANGE:return y(b,{placeholder:[`请选择开始${e.label}`,`请选择结束${e.label}`],format:"YYYY-MM-DD",style:{width:"100%"},...t});case h.DATETIME:return y(n,{showTime:!0,placeholder:c,format:"YYYY-MM-DD HH:mm:ss",style:{width:"100%"},...t});case h.DATETIME_RANGE:return y(b,{showTime:!0,placeholder:[`请选择开始${e.label}`,`请选择结束${e.label}`],format:"YYYY-MM-DD HH:mm:ss",style:{width:"100%"},...t});case h.DIVIDER:return null;default:return o}},L=r=>r.tip?f(E,{children:[r.label,y(c,{title:r.tip,children:y(e,{style:{marginLeft:4,fontSize:12}})})]}):r.label,V=({option:e,style:r,col:n,index:s})=>{const a=P(e);return delete a.dependencies,delete a.shouldUpdate,B(e.hidden)?null:y(l,{span:n.span,style:r,children:y(t.Item,{name:e.name,label:L(e),rules:x(e),labelCol:n.labelCol,wrapperCol:n.wrapperCol,preserve:!1,required:" "!==L(e)&&U(e.required),colon:" "!==L(e),...a,children:k(e)})},g(e)||s)},$=({option:e,style:r,col:n,index:a})=>{const o=M(e);return e.customizeRender?y(l,{span:n.span,style:r,children:e.render},g(e)||a):e.onlyForLabel?y(t.Item,{name:e.name,noStyle:!0,preserve:!1,children:y("input",{type:"hidden"})},g(e)||a):e.render===h.DIVIDER?y(l,{span:n.span,style:r,children:y(s,{orientation:"left",...o,children:e.label})},g(e)||a):null},G=({option:e,index:r,col:n,style:s})=>{const d=(e=>{const r={showAddButton:!0,showRemoveButton:!0,addButtonText:"添加",removeButtonText:"删除",options:[],addDefaultValue:{},addInsertIndex:void 0};return"function"==typeof e.formListUniqueProps?{...r,...e.formListUniqueProps(w())}:{...r,...e.formListUniqueProps||{}}})(e),i=M(e);return y(l,{span:n.span,style:s,children:y(t.List,{name:e.name,...i,children:(e,{add:r,remove:n,move:i})=>y(E,{children:e.map((e,u)=>{const p=((e,r,n,t,l,s)=>"function"==typeof e?e(r,n,{field:r,fieldIndex:n,add:t,remove:l,move:s}):e??[])(d.options,e,u,r,n,i);return y(a,{gutter:A,children:p.map((a,i)=>{if(B(a.hidden))return null;const c=_(a),m=P(a),E={option:a,style:s,col:c,index:`${u}_${i}`},T=$(E);if(T)return T;if(a.render===h.FORM_LIST)return G(E);const b=e=>!B(e.hidden)&&!e.onlyForLabel,I=p[i+1],v=I&&I.render===h.FORM_LIST,A=I&&!b(I);return i===(()=>{for(let e=p.length-1;e>=0;e--){const r=p[e];if(r.render===h.FORM_LIST)return e;if(b(r))return e}return-1})()||v||A?(delete m.dependencies,delete m.shouldUpdate,y(l,{span:c.span,style:s,children:y(t.Item,{label:L(a),labelCol:c.labelCol,wrapperCol:c.wrapperCol,preserve:!1,required:" "!==L(a)&&U(a.required),colon:" "!==L(a),...m,children:f("div",{style:{display:"flex",gap:10,alignItems:"center",justifyContent:"space-between"},children:[y("div",{style:{flex:1},children:y(t.Item,{noStyle:!0,rules:x(a),name:a.name,children:k(a)})}),u>=1?d.showRemoveButton&&y(o,{type:"primary",danger:!0,onClick:()=>n(e.name),children:d.removeButtonText}):d.showAddButton&&y(o,{type:"primary",onClick:()=>r(d.addDefaultValue,d.addInsertIndex),children:d.addButtonText})]})})},g(a)||i)):V(E)})},e.key)})})})},g(e)||r)};return y(E,{children:I.map((e,r)=>{const n=_(e),l=(e=>Y&&e>=3?{display:"none"}:void 0)(r),s=P(e),a={option:e,style:l,col:n,index:r};return $(a)||(e.render===h.FORM_LIST?G(a):(e.shouldUpdate??e.dependencies)||(s.shouldUpdate??s.dependencies)?(({option:e,index:r,style:n,col:l})=>{const s=P(e);return y(t.Item,{noStyle:!0,preserve:!1,shouldUpdate:e.shouldUpdate??s.shouldUpdate,dependencies:e.dependencies??s.dependencies,children:()=>V({option:e,style:n,col:l,index:r})},g(e)||r)})(a):V(a))})})};I.displayName="FormItemsRenderer";export{I as default};
@@ -1,3 +1,6 @@
1
+ import type { FormOption } from "./FormItemsRenderer";
1
2
  import FormBuilder from "./FormBuilder";
2
3
 
4
+ export type { FormOption };
5
+
3
6
  export default FormBuilder;
@@ -1,11 +1,21 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicLeftTreeProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ value: string;
6
+ label: string;
7
+ children: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 组件属性
6
13
  */
7
- export interface AreaLeftTreeProps extends Omit<BasicLeftTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey"> {
8
-
14
+ export interface AreaLeftTreeProps extends Omit<BasicLeftTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
15
+ /** 获取父级节点 */
16
+ onGetNodePaths?: (nodes: Data[]) => void;
17
+ /** 获取数据 */
18
+ onGetData?: (data: Data[], processedData: Data[]) => void;
9
19
  }
10
20
 
11
21
  /**
@@ -2,14 +2,25 @@ import type { FC } from "react";
2
2
  import type { DepartmentSelectTreeProps } from "../../../SelectTree/Department/Gwj";
3
3
  import type { BasicLeftTreeProps } from "../../Basic";
4
4
 
5
+ interface Data {
6
+ id: string;
7
+ name: string;
8
+ childrenList: Data[];
9
+ [key: string]: any;
10
+ }
11
+
5
12
  /**
6
13
  * 组件属性
7
14
  */
8
- export interface DepartmentLeftTreeProps extends Omit<BasicLeftTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey"> {
15
+ export interface DepartmentLeftTreeProps extends Omit<BasicLeftTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
9
16
  /** 请求参数 */
10
17
  params?: DepartmentSelectTreeProps["params"];
11
18
  /** 查询的企业类型 */
12
19
  searchType?: DepartmentSelectTreeProps["searchType"];
20
+ /** 获取父级节点 */
21
+ onGetNodePaths?: (nodes: Data[]) => void;
22
+ /** 获取数据 */
23
+ onGetData?: (data: Data[], processedData: Data[]) => void;
13
24
  }
14
25
 
15
26
  /**
@@ -1,10 +1,17 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicLeftTreeProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ dictValue: string;
6
+ dictLabel: string;
7
+ children: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 组件属性
6
13
  */
7
- export interface DictionaryLeftTreeProps extends Omit<BasicLeftTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey"> {
14
+ export interface DictionaryLeftTreeProps extends Omit<BasicLeftTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
8
15
  /** appKey,默认 DICTIONARY_APP_KEY_ENUM.DEFAULT(0bb989ecada5470c87635018ece9f327) */
9
16
  appKey?: string;
10
17
  /** 要获取的字典 */
@@ -13,6 +20,10 @@ export interface DictionaryLeftTreeProps extends Omit<BasicLeftTreeProps, "treeD
13
20
  nameKey?: string;
14
21
  /** 树形数据 value 字段,默认 dictValue */
15
22
  idKey?: string;
23
+ /** 获取父级节点 */
24
+ onGetNodePaths?: (nodes: Data[]) => void;
25
+ /** 获取数据 */
26
+ onGetData?: (data: Data[], processedData: Data[]) => void;
16
27
  }
17
28
 
18
29
  /**
@@ -25,7 +25,7 @@ export interface PageProps {
25
25
  /** 额外底部操作按钮组 */
26
26
  extraActionButtons?: ReactNode;
27
27
  /** 内容区域 */
28
- children?: ReactNode | (() => ReactNode);
28
+ children: ReactNode | (() => ReactNode);
29
29
  }
30
30
 
31
31
  /** 页面布局组件 */
@@ -1,22 +1,24 @@
1
1
  import type { FormInstance, FormProps } from "antd/es/form";
2
- import type { Store } from "rc-field-form/lib/interface";
3
- import type { FC, ReactNode } from "react";
4
- import type { FormOption } from "../FormBuilder/FormItemsRenderer";
2
+ import type { ReactElement, ReactNode } from "react";
3
+ import type { FormOption } from "../FormBuilder";
4
+ import type { DeepPartial } from "../FormBuilder/FormBuilder";
5
+
6
+ export type { FormOption };
5
7
 
6
8
  /**
7
9
  * Search 组件属性
8
10
  */
9
- export interface SearchProps extends Omit<FormProps, "form" | "onFinish"> {
11
+ export interface SearchProps<Values = any> extends Omit<FormProps, "form" | "onFinish" | "onReset"> {
10
12
  /** 表单配置项数组 */
11
- options: FormOption[];
13
+ options: FormOption<Values>[];
12
14
  /** 表单值 */
13
- values?: Store;
15
+ values?: DeepPartial<Values>;
14
16
  /** 搜索和重置都会触发的回调 */
15
- onFinish?: (values: Store, type: "submit" | "reset") => void;
17
+ onFinish?: (values: Values, type: "submit" | "reset") => void;
16
18
  /** 搜索回调 */
17
- onSubmit?: (values: Store) => void;
19
+ onSubmit?: (values: Values) => void;
18
20
  /** 重置回调 */
19
- onReset?: (values: Store) => void;
21
+ onReset?: (values: Values) => void;
20
22
  /** 搜索按钮文本,默认"搜索" */
21
23
  searchText?: string;
22
24
  /** 重置按钮文本,默认"重置" */
@@ -28,16 +30,20 @@ export interface SearchProps extends Omit<FormProps, "form" | "onFinish"> {
28
30
  /** 额外的底部按钮组 */
29
31
  extraButtons?: ReactNode;
30
32
  /** 表单实例(通过 Form.useForm() 创建) */
31
- form: FormInstance;
33
+ form: FormInstance<Values>;
32
34
  }
33
35
 
34
36
  /**
35
37
  * 搜索表单组件
36
38
  * 支持自动展开/收起功能,当表单项超过4个时显示展开/收起按钮
37
39
  */
38
- declare const Search: FC<SearchProps> & {
40
+ type SearchComponent = {
39
41
  useForm: typeof import("antd").Form.useForm;
40
42
  useWatch: typeof import("antd").Form.useWatch;
43
+ } & {
44
+ <Values = any>(props: SearchProps<Values>): ReactElement;
41
45
  };
42
46
 
47
+ declare const Search: SearchComponent;
48
+
43
49
  export default Search;
@@ -1,10 +1,16 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ dictValue: string;
6
+ dictLabel: string;
7
+ [key: string]: any;
8
+ }
9
+
4
10
  /**
5
11
  * 组件属性
6
12
  */
7
- export interface DictionarySelectProps extends Omit<BasicSelectProps, "data" | "nameKey" | "idKey"> {
13
+ export interface DictionarySelectProps extends Omit<BasicSelectProps, "data" | "nameKey" | "idKey" | "onGetOption" | "onGetData"> {
8
14
  /** appKey,默认 DICTIONARY_APP_KEY_ENUM.DEFAULT(0bb989ecada5470c87635018ece9f327) */
9
15
  appKey?: string;
10
16
  /** 要获取的字典 */
@@ -13,6 +19,10 @@ export interface DictionarySelectProps extends Omit<BasicSelectProps, "data" | "
13
19
  nameKey?: string;
14
20
  /** 树形数据 value 字段,默认 dictValue */
15
21
  idKey?: string;
22
+ /** 获取选中的项 */
23
+ onGetOption?: (option: Data | Data[]) => void;
24
+ /** 获取数据 */
25
+ onGetData?: (data: Data[]) => void;
16
26
  }
17
27
 
18
28
  /**
@@ -1,6 +1,20 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectProps } from "../../Basic";
3
3
 
4
+ interface Data {
5
+ id: string;
6
+ name: string;
7
+ corpinfoId: string;
8
+ corpinfoName: string;
9
+ departmentId: string;
10
+ departmentName: string;
11
+ postId: string;
12
+ postName: string;
13
+ userId: string;
14
+ username: string;
15
+ [key: string]: any;
16
+ }
17
+
4
18
  /**
5
19
  * 请求参数
6
20
  */
@@ -31,7 +45,7 @@ export interface ExtraParams {
31
45
  /**
32
46
  * 组件属性
33
47
  */
34
- export interface PersonnelSelectProps extends Omit<BasicSelectProps, "data" | "placeholder" | "nameKey" | "idKey"> {
48
+ export interface PersonnelSelectProps extends Omit<BasicSelectProps, "data" | "placeholder" | "nameKey" | "idKey" | "onGetOption" | "onGetData"> {
35
49
  /** 请求参数 */
36
50
  params?: Params;
37
51
  /** 占位符,默认"人员" */
@@ -44,6 +58,10 @@ export interface PersonnelSelectProps extends Omit<BasicSelectProps, "data" | "p
44
58
  isNeedDepartmentId?: boolean;
45
59
  /** 额外请求参数 */
46
60
  extraParams?: ExtraParams;
61
+ /** 获取选中的项 */
62
+ onGetOption?: (option: Data | Data[]) => void;
63
+ /** 获取数据 */
64
+ onGetData?: (data: Data[]) => void;
47
65
  }
48
66
 
49
67
  /**
@@ -1,11 +1,20 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectTreeProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ value: string;
6
+ label: string;
7
+ children: Data[];
8
+ }
9
+
4
10
  /**
5
11
  * 组件属性
6
12
  */
7
- export interface AreaSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "placeholder" | "nameKey" | "idKey" | "childrenKey"> {
8
-
13
+ export interface AreaSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "placeholder" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
14
+ /** 获取父级节点 */
15
+ onGetNodePaths?: (nodes: Data[]) => void;
16
+ /** 获取数据 */
17
+ onGetData?: (data: Data[], processedData: Data[]) => void;
9
18
  }
10
19
 
11
20
  /**
@@ -1,6 +1,13 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectTreeProps } from "../../Basic";
3
3
 
4
+ interface Data {
5
+ id: string;
6
+ name: string;
7
+ childrenList: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 企业类型枚举(用于 inType)
6
13
  */
@@ -28,7 +35,7 @@ export interface Params {
28
35
  /**
29
36
  * 组件属性
30
37
  */
31
- export interface DepartmentSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "placeholder" | "nameKey" | "idKey" | "childrenKey"> {
38
+ export interface DepartmentSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "placeholder" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
32
39
  /** 请求参数 */
33
40
  params?: Params;
34
41
  /** 占位符,默认"部门" */
@@ -39,6 +46,10 @@ export interface DepartmentSelectTreeProps extends Omit<BasicSelectTreeProps, "t
39
46
  isNeedParentId?: boolean;
40
47
  /** 查询的企业类型,默认current,current 接收 eqCorpinfoId 或者 eqParentId,all 不接受任何参数,inType 接收 inType 或者 enterpriseType */
41
48
  searchType?: "current" | "all" | "inType";
49
+ /** 获取父级节点 */
50
+ onGetNodePaths?: (nodes: Data[]) => void;
51
+ /** 获取数据 */
52
+ onGetData?: (data: Data[], processedData: Data[]) => void;
42
53
  }
43
54
 
44
55
  /**
@@ -1,10 +1,17 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectTreeProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ dictValue: string;
6
+ dictLabel: string;
7
+ children: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 组件属性
6
13
  */
7
- export interface DictionarySelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey"> {
14
+ export interface DictionarySelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
8
15
  /** appKey,默认 DICTIONARY_APP_KEY_ENUM.DEFAULT(0bb989ecada5470c87635018ece9f327) */
9
16
  appKey?: string;
10
17
  /** 要获取的字典 */
@@ -13,6 +20,10 @@ export interface DictionarySelectTreeProps extends Omit<BasicSelectTreeProps, "t
13
20
  nameKey?: string;
14
21
  /** 树形数据 value 字段,默认 dictValue */
15
22
  idKey?: string;
23
+ /** 获取父级节点 */
24
+ onGetNodePaths?: (nodes: Data[]) => void;
25
+ /** 获取数据 */
26
+ onGetData?: (data: Data[], processedData: Data[]) => void;
16
27
  }
17
28
 
18
29
  /**
@@ -1,16 +1,27 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectTreeProps } from "../../Basic";
3
3
 
4
+ interface Data {
5
+ dictValue: string;
6
+ dictLabel: string;
7
+ children: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 组件属性
6
13
  */
7
- export interface HiddenLevelSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "level"> {
14
+ export interface HiddenLevelSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "level" | "onGetNodePaths" | "onGetData"> {
8
15
  /** 是否显示忽略隐患,默认 true */
9
16
  isShowNeglect?: boolean;
10
17
  /** 是否显示较大隐患,默认 true */
11
18
  isShowLarger?: boolean;
12
19
  /** 是否显示重大隐患,默认 true */
13
20
  isShowMajor?: boolean;
21
+ /** 获取父级节点 */
22
+ onGetNodePaths?: (nodes: Data[]) => void;
23
+ /** 获取数据 */
24
+ onGetData?: (data: Data[], processedData: Data[]) => void;
14
25
  }
15
26
 
16
27
  /**
@@ -1,6 +1,13 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectTreeProps } from "../../Basic";
3
3
 
4
+ interface Data {
5
+ hiddenregionId: string;
6
+ hiddenregion: string;
7
+ children: Data[];
8
+ [key: string]: any;
9
+ }
10
+
4
11
  /**
5
12
  * 请求参数
6
13
  */
@@ -12,11 +19,15 @@ export interface Params {
12
19
  /**
13
20
  * 组件属性
14
21
  */
15
- export interface HiddenPartSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey"> {
22
+ export interface HiddenPartSelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
16
23
  /** 请求参数 */
17
24
  params?: Params;
18
25
  /** 是否需要企业id,默认 false */
19
26
  isNeedCorpInfoId?: boolean;
27
+ /** 获取父级节点 */
28
+ onGetNodePaths?: (nodes: Data[]) => void;
29
+ /** 获取数据 */
30
+ onGetData?: (data: Data[], processedData: Data[]) => void;
20
31
  }
21
32
 
22
33
  /**
@@ -1,11 +1,20 @@
1
1
  import type { FC } from "react";
2
2
  import type { BasicSelectTreeProps } from "../Basic";
3
3
 
4
+ interface Data {
5
+ dict_value: string;
6
+ dict_label: string;
7
+ childrenList: Data[];
8
+ }
9
+
4
10
  /**
5
11
  * 组件属性
6
12
  */
7
- export interface IndustrySelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "placeholder" | "nameKey" | "idKey" | "childrenKey"> {
8
-
13
+ export interface IndustrySelectTreeProps extends Omit<BasicSelectTreeProps, "treeData" | "placeholder" | "nameKey" | "idKey" | "childrenKey" | "onGetNodePaths" | "onGetData"> {
14
+ /** 获取父级节点 */
15
+ onGetNodePaths?: (nodes: Data[]) => void;
16
+ /** 获取数据 */
17
+ onGetData?: (data: Data[], processedData: Data[]) => void;
9
18
  }
10
19
 
11
20
  /**
@@ -18,6 +18,8 @@ export type TableProps<DataSource, U, ValueType> = Omit<AntdTableProps, "columns
18
18
  align?: "left" | "right" | "center";
19
19
  /** 超过宽度是否自动省略,默认 true */
20
20
  ellipsis?: boolean;
21
+ /** 表格高度,默认自适应 */
22
+ height?: number;
21
23
  };
22
24
 
23
25
  /**
@@ -1 +1 @@
1
- import{ProTable as e}from"@ant-design/pro-components";import t from"dayjs";import{useState as o,useEffect as n,useMemo as r}from"react";import{throttle as s}from"throttle-debounce";import{useAntdResizableHeader as a}from"use-antd-resizable-header";import{getDataType as i,getIndexColumn as l}from"../../utils/index.js";import"use-antd-resizable-header/dist/style.css";import"./index.less";import{jsx as c}from"react/jsx-runtime";const d="tableLocalStorageLastCleanup";function m(e){const t=process.env?.app?.basename,o=decodeURIComponent(window.location.pathname),n="Undefined"===i(e)?"":`#{${e}}`;return{size:`${t}#${o}${n}#size`,resizable:`${t}#${o}${n}#resizable`,columnState:`${t}#${o}${n}#columnState`}}function u(i){const{columns:u=[],showIndexColumn:p=!0,ellipsis:b=!0,align:f="center",indexColumnFixed:g="left",rowKey:h="id",storeIndex:y,disabledResizer:S=!1,...w}=i,z=process.env.app.antd["ant-prefix"],$=`.${z||"ant"}-table`,x=`${$}-wrapper`,v=`${$}-body`,[C,I]=o((R=y,window.localStorage.getItem(m(R).size)||"default"));var R;const[_,E]=o(0),K=m(y),N=!S,{components:T,resizableColumns:W,tableWidth:j,resetColumns:k}=a({columns:u,columnsState:{persistenceKey:K.resizable,persistenceType:"localStorage"}}),q=s(50,()=>{try{const e=document.querySelector(x),t=document.querySelector(v),o=document.querySelector(".page-layout-footer"),n=o?o.offsetHeight:0;if(t&&e){const o=e.getBoundingClientRect(),r=t.getBoundingClientRect(),s=o.bottom-r.bottom;E(innerHeight-r.top-s-(window.__IN_BASE__?38:22)-n)}}catch(e){window.console.error(e)}});n(()=>{let e,o;return N&&(e=new MutationObserver(e=>e.forEach(()=>q())),o=new ResizeObserver(e=>e.forEach(()=>q())),setTimeout(()=>q(),500),o.observe(document.body),e.observe(document.body,{subtree:!0,childList:!0})),function(){const e=t(),o=localStorage.getItem(d),n=o?t(o):null;if(!n||e.diff(n,"day")>=10){const t=[];for(let e=0;e<localStorage.length;e++){const o=localStorage.key(e);o&&(o.endsWith("#columnState")||o.endsWith("#size")||o.endsWith("#resizable"))&&t.push(o)}t.forEach(e=>{localStorage.removeItem(e)}),localStorage.setItem(d,e.toISOString())}}(),()=>{e&&o&&N&&(o.unobserve(document.body),e.disconnect(document.body))}},[]),n(()=>{!function(e,t){window.localStorage.setItem(m(t).size,e)}(C,y)},[C]);const B=r(()=>(()=>{const e=[...W];p&&e.unshift({...l(i.pagination),fixed:g});const t=e=>({align:f,ellipsis:b,...e,...e.children?{children:e.children.map(t)}:{}});return e.map(t)})(),[W,p,f,b,g,i.pagination]);return c("div",{className:"table-layout card-layout",children:c(e,{ghost:!0,search:!1,scroll:{x:j,y:N?_:void 0},options:{reload:!1,fullScreen:!0,setting:{checkedReset:!0,extra:c("a",{className:`${z}-pro-table-column-setting-action-rest-button`,onClick:k,children:"重置列宽"})}},components:T,columnsState:{persistenceKey:K.columnState,persistenceType:"localStorage"},onSizeChange:I,columns:B,bordered:!0,size:"small",rowKey:h,...w})})}u.displayName="Table";export{u as default};
1
+ import{ProTable as e}from"@ant-design/pro-components";import t from"dayjs";import{useState as o,useEffect as n,useMemo as r}from"react";import{throttle as s}from"throttle-debounce";import{useAntdResizableHeader as a}from"use-antd-resizable-header";import{getDataType as i,getIndexColumn as l}from"../../utils/index.js";import"use-antd-resizable-header/dist/style.css";import"./index.less";import{jsx as c}from"react/jsx-runtime";const d="tableLocalStorageLastCleanup";function m(e){const t=process.env?.app?.basename,o=decodeURIComponent(window.location.pathname),n="Undefined"===i(e)?"":`#{${e}}`;return{size:`${t}#${o}${n}#size`,resizable:`${t}#${o}${n}#resizable`,columnState:`${t}#${o}${n}#columnState`}}function u(i){const{columns:u=[],showIndexColumn:p=!0,ellipsis:b=!0,align:g="center",indexColumnFixed:f="left",rowKey:h="id",storeIndex:y,disabledResizer:S=!1,height:w,...z}=i,$=process.env.app.antd["ant-prefix"],x=`.${$||"ant"}-table`,v=`${x}-wrapper`,C=`${x}-body`,[I,R]=o((_=y,window.localStorage.getItem(m(_).size)||"default"));var _;const[E,K]=o(0),N=m(y),T=!S,{components:W,resizableColumns:j,tableWidth:k,resetColumns:q}=a({columns:u,columnsState:{persistenceKey:N.resizable,persistenceType:"localStorage"}}),B=s(50,()=>{try{const e=document.querySelector(v),t=document.querySelector(C),o=document.querySelector(".page-layout-footer"),n=o?o.offsetHeight:0;if(t&&e){const o=e.getBoundingClientRect(),r=t.getBoundingClientRect(),s=o.bottom-r.bottom;K(innerHeight-r.top-s-(window.__IN_BASE__?38:22)-n)}}catch(e){window.console.error(e)}});n(()=>{let e,o;return T&&(e=new MutationObserver(e=>e.forEach(()=>B())),o=new ResizeObserver(e=>e.forEach(()=>B())),setTimeout(()=>B(),500),o.observe(document.body),e.observe(document.body,{subtree:!0,childList:!0})),function(){const e=t(),o=localStorage.getItem(d),n=o?t(o):null;if(!n||e.diff(n,"day")>=10){const t=[];for(let e=0;e<localStorage.length;e++){const o=localStorage.key(e);o&&(o.endsWith("#columnState")||o.endsWith("#size")||o.endsWith("#resizable"))&&t.push(o)}t.forEach(e=>{localStorage.removeItem(e)}),localStorage.setItem(d,e.toISOString())}}(),()=>{e&&o&&T&&(o.unobserve(document.body),e.disconnect(document.body))}},[]),n(()=>{!function(e,t){window.localStorage.setItem(m(t).size,e)}(I,y)},[I]);const L=r(()=>(()=>{const e=[...j];p&&e.unshift({...l(i.pagination),fixed:f});const t=e=>({align:g,ellipsis:b,...e,...e.children?{children:e.children.map(t)}:{}});return e.map(t)})(),[j,p,g,b,f,i.pagination]);return c("div",{className:"table-layout card-layout",children:c(e,{ghost:!0,search:!1,scroll:{x:k,y:w||(T?E:void 0)},options:{reload:!1,fullScreen:!0,setting:{checkedReset:!0,extra:c("a",{className:`${$}-pro-table-column-setting-action-rest-button`,onClick:q,children:"重置列宽"})}},components:W,columnsState:{persistenceKey:N.columnState,persistenceType:"localStorage"},onSizeChange:R,columns:L,bordered:!0,size:"small",rowKey:h,...z})})}u.displayName="Table";export{u as default};
@@ -1,4 +1,18 @@
1
- export type getUserInfoFunction = () => Promise<Record<string, any>>;
1
+ interface Data {
2
+ corpinfoId: string;
3
+ corpinfoName: string;
4
+ departmentId: string;
5
+ departmentName: string;
6
+ id: string;
7
+ name: string;
8
+ postId: string;
9
+ postName: string;
10
+ userId: string;
11
+ username: string;
12
+ [key: string]: any;
13
+ }
14
+
15
+ export type getUserInfoFunction = () => Promise<Data>;
2
16
 
3
17
  /**
4
18
  * 获取用户信息
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zy-react-library",
3
3
  "private": false,
4
- "version": "1.2.38",
4
+ "version": "1.3.0",
5
5
  "type": "module",
6
6
  "description": "",
7
7
  "author": "LiuJiaNan",