@iswangh/element-plus-kit-form 0.2.0 → 0.2.1
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.
- package/README.md +101 -1
- package/dist/FormItem.vue.d.ts +6 -9
- package/dist/FormItem.vue.d.ts.map +1 -1
- package/dist/config/comp.d.ts +1 -5
- package/dist/config/comp.d.ts.map +1 -1
- package/dist/config/form-item.d.ts +6 -0
- package/dist/config/form-item.d.ts.map +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +700 -670
- package/dist/style.css +1 -1
- package/dist/types/comp.d.ts +29 -29
- package/dist/types/el.d.ts +3 -0
- package/dist/types/form-item.d.ts +12 -7
- package/dist/types/scope.d.ts +30 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -95,6 +95,23 @@ import '@iswangh/element-plus-kit-form/style.css'
|
|
|
95
95
|
| cancel | 取消按钮点击事件 | - |
|
|
96
96
|
| expand | 展开状态变化事件 | `(value: boolean)` |
|
|
97
97
|
|
|
98
|
+
**可配置化事件**:
|
|
99
|
+
- 除了在 `WForm` 标签上监听事件,还可以在 `formItems` 配置对象的 `compProps` 中定义事件处理器
|
|
100
|
+
- 事件名以 `on` 开头(如 `onBlur`、`onFocus`、`onInput` 等),直接接收原始事件参数(不需要 `extendedParams`)
|
|
101
|
+
- 可配置化事件优先级高于 `WForm` 标签上的事件,如果同时定义了可配置化事件和标签事件,会优先使用可配置化事件
|
|
102
|
+
- 示例:
|
|
103
|
+
```typescript
|
|
104
|
+
{
|
|
105
|
+
prop: 'username',
|
|
106
|
+
compType: 'input',
|
|
107
|
+
compProps: {
|
|
108
|
+
onBlur: (event: FocusEvent) => {
|
|
109
|
+
console.log('onBlur 事件:', event)
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
98
115
|
### Slots
|
|
99
116
|
|
|
100
117
|
| 插槽名 | 说明 | 作用域参数 |
|
|
@@ -104,6 +121,28 @@ import '@iswangh/element-plus-kit-form/style.css'
|
|
|
104
121
|
| `{prop}-{slotName}` | 动态组件插槽,如 `username-prefix`、`email-suffix` | `FormItemSlotScope` |
|
|
105
122
|
| `expand-toggle` | 展开/折叠按钮插槽,用于自定义按钮 | `{ expanded: boolean, toggle: (value?: boolean) => void }` |
|
|
106
123
|
|
|
124
|
+
**可配置化插槽**:
|
|
125
|
+
- 除了使用模板插槽,还可以在 `formItems` 配置对象中直接定义插槽
|
|
126
|
+
- **FormItem 插槽**:在配置对象的 `slots` 字段中定义,用于自定义 `el-form-item` 的插槽(如 `label`、`error` 等)
|
|
127
|
+
- **动态组件插槽**:在 `compProps.slots` 字段中定义,用于自定义动态组件的插槽(如 `prefix`、`suffix` 等)
|
|
128
|
+
- 可配置化插槽优先级高于模板插槽,如果同时定义了可配置化插槽和模板插槽,会优先使用可配置化插槽
|
|
129
|
+
- 插槽函数使用 `h()` 函数创建 VNode,接收 `FormItemSlotScope` 参数
|
|
130
|
+
- 示例:
|
|
131
|
+
```typescript
|
|
132
|
+
{
|
|
133
|
+
prop: 'username',
|
|
134
|
+
compType: 'input',
|
|
135
|
+
slots: {
|
|
136
|
+
label: props => h('span', {}, props.formItem.label),
|
|
137
|
+
},
|
|
138
|
+
compProps: {
|
|
139
|
+
slots: {
|
|
140
|
+
prefix: () => h(User),
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
107
146
|
### FormItem 配置
|
|
108
147
|
|
|
109
148
|
#### 基础配置
|
|
@@ -267,7 +306,7 @@ const formItems: FormItems = [
|
|
|
267
306
|
|
|
268
307
|
### 自定义插槽
|
|
269
308
|
|
|
270
|
-
|
|
309
|
+
使用模板插槽自定义表单项内容:
|
|
271
310
|
|
|
272
311
|
```vue
|
|
273
312
|
<template>
|
|
@@ -279,6 +318,39 @@ const formItems: FormItems = [
|
|
|
279
318
|
</template>
|
|
280
319
|
```
|
|
281
320
|
|
|
321
|
+
### 可配置化插槽
|
|
322
|
+
|
|
323
|
+
除了使用模板插槽,还可以在 `formItems` 配置对象中直接定义插槽:
|
|
324
|
+
|
|
325
|
+
```typescript
|
|
326
|
+
import { h } from 'vue'
|
|
327
|
+
import { User } from '@element-plus/icons-vue'
|
|
328
|
+
|
|
329
|
+
const formItems: FormItems = [
|
|
330
|
+
{
|
|
331
|
+
prop: 'username',
|
|
332
|
+
label: '用户名',
|
|
333
|
+
compType: 'input',
|
|
334
|
+
// FormItem 插槽配置
|
|
335
|
+
slots: {
|
|
336
|
+
label: props => h('span', { class: 'flex items-center gap-1' }, [
|
|
337
|
+
h('span', props.formItem.label),
|
|
338
|
+
h('span', { class: 'text-red-500' }, '*'),
|
|
339
|
+
]),
|
|
340
|
+
},
|
|
341
|
+
// 动态组件插槽配置
|
|
342
|
+
compProps: {
|
|
343
|
+
placeholder: '请输入用户名',
|
|
344
|
+
slots: {
|
|
345
|
+
prefix: () => h(User, { class: 'text-gray-400' }),
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
]
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**优先级**:可配置化插槽优先级高于模板插槽,如果同时定义了可配置化插槽和模板插槽,会优先使用可配置化插槽。
|
|
353
|
+
|
|
282
354
|
### 表单验证
|
|
283
355
|
|
|
284
356
|
```typescript
|
|
@@ -297,6 +369,8 @@ const formItems: FormItems = [
|
|
|
297
369
|
|
|
298
370
|
### 监听事件
|
|
299
371
|
|
|
372
|
+
在 `WForm` 标签上监听事件:
|
|
373
|
+
|
|
300
374
|
```vue
|
|
301
375
|
<template>
|
|
302
376
|
<WForm
|
|
@@ -318,6 +392,32 @@ const onSubmit = () => {
|
|
|
318
392
|
</script>
|
|
319
393
|
```
|
|
320
394
|
|
|
395
|
+
### 可配置化事件
|
|
396
|
+
|
|
397
|
+
除了在 `WForm` 标签上监听事件,还可以在 `formItems` 配置对象中直接定义事件处理器:
|
|
398
|
+
|
|
399
|
+
```typescript
|
|
400
|
+
const formItems: FormItems = [
|
|
401
|
+
{
|
|
402
|
+
prop: 'username',
|
|
403
|
+
label: '用户名',
|
|
404
|
+
compType: 'input',
|
|
405
|
+
compProps: {
|
|
406
|
+
placeholder: '请输入用户名',
|
|
407
|
+
// 动态组件的事件在 compProps 中定义
|
|
408
|
+
onBlur: (event: FocusEvent) => {
|
|
409
|
+
console.log('onBlur 事件:', event)
|
|
410
|
+
},
|
|
411
|
+
onFocus: (event: FocusEvent) => {
|
|
412
|
+
console.log('onFocus 事件:', event)
|
|
413
|
+
},
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
]
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**优先级**:可配置化事件优先级高于 `WForm` 标签上的事件,如果同时定义了可配置化事件和标签事件,会优先使用可配置化事件。
|
|
420
|
+
|
|
321
421
|
### 展开/折叠功能
|
|
322
422
|
|
|
323
423
|
表单支持展开/折叠功能,可以控制表单项的显示和隐藏,适用于字段较多的表单场景。
|
package/dist/FormItem.vue.d.ts
CHANGED
|
@@ -6,9 +6,8 @@ interface ProcessedSlot {
|
|
|
6
6
|
slotFn: Slot;
|
|
7
7
|
}
|
|
8
8
|
interface FormSlots {
|
|
9
|
-
formItemSlots: ProcessedSlot[]
|
|
10
|
-
|
|
11
|
-
customComponentSlots: Map<string, ProcessedSlot[]>;
|
|
9
|
+
formItemSlots: Map<string, ProcessedSlot[]>;
|
|
10
|
+
dynamicCompSlots: Map<string, ProcessedSlot[]>;
|
|
12
11
|
}
|
|
13
12
|
interface Props {
|
|
14
13
|
formItem: FormItem;
|
|
@@ -24,16 +23,14 @@ type __VLS_PublicProps = {
|
|
|
24
23
|
declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_PublicProps>, {
|
|
25
24
|
formData: () => {};
|
|
26
25
|
formSlots: () => {
|
|
27
|
-
formItemSlots:
|
|
28
|
-
|
|
29
|
-
customComponentSlots: Map<any, any>;
|
|
26
|
+
formItemSlots: Map<any, any>;
|
|
27
|
+
dynamicCompSlots: Map<any, any>;
|
|
30
28
|
};
|
|
31
29
|
}>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_PublicProps>, {
|
|
32
30
|
formData: () => {};
|
|
33
31
|
formSlots: () => {
|
|
34
|
-
formItemSlots:
|
|
35
|
-
|
|
36
|
-
customComponentSlots: Map<any, any>;
|
|
32
|
+
formItemSlots: Map<any, any>;
|
|
33
|
+
dynamicCompSlots: Map<any, any>;
|
|
37
34
|
};
|
|
38
35
|
}>>> & Readonly<{}>, {
|
|
39
36
|
formData: Record<string, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormItem.vue.d.ts","sourceRoot":"","sources":["../src/FormItem.vue"],"names":[],"mappings":"AACA;
|
|
1
|
+
{"version":3,"file":"FormItem.vue.d.ts","sourceRoot":"","sources":["../src/FormItem.vue"],"names":[],"mappings":"AACA;AAkaA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAA6D,MAAM,SAAS,CAAA;AAOlG,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,IAAI,CAAA;CACb;AAED,UAAU,SAAS;IACjB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAC3C,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;CAC/C;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAA;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAQD,KAAK,WAAW,GAAG,KAAK,CAAC;AAkWzB,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,GAAG,CAAC;CAChB,GAAG,WAAW,CAAC;;;;;;;;;;;;;;cA/WH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;eAElB,SAAS;;AAwfvB,wBAUG;AAEH,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI;KAC9B,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAC7C,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;KAAC,CAAC,GAC5C,CAAC,CAAC,CAAC,CAAC;CACP,CAAC;AACF,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,uBAAuB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAC9D;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CACzD,CAAC;AACF,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
|
package/dist/config/comp.d.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { FormItem } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* 需要从 FormItem 中排除的自定义属性键名
|
|
4
|
-
* 这些属性不会传递给 el-form-item 组件
|
|
5
|
-
*/
|
|
6
|
-
export declare const FORM_ITEM_EXCLUDED_KEYS: readonly ["compType", "compProps", "vIf", "vShow"];
|
|
7
2
|
/**
|
|
8
3
|
* 拓展的组件映射
|
|
9
4
|
* 导出以便在类型文件中使用 typeof 提取类型
|
|
@@ -31,6 +26,7 @@ export declare const COMP_DEFAULT_CONFIG: {
|
|
|
31
26
|
getDefaults(formItem: FormItem): {
|
|
32
27
|
[x: string]: any;
|
|
33
28
|
options?: any[] | import('../types').OptionsLoader | import('../types').OptionsConfig | undefined;
|
|
29
|
+
slots?: import('../types').CompSlotsConfig<import('../types').FormItemComp> | undefined;
|
|
34
30
|
};
|
|
35
31
|
/**
|
|
36
32
|
* 判断组件类型
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comp.d.ts","sourceRoot":"","sources":["../../src/config/comp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC;;;GAGG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"comp.d.ts","sourceRoot":"","sources":["../../src/config/comp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC;;;GAGG;AACH,eAAO,MAAM,eAAe;;CAA6B,CAAA;AA+BzD;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAwD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE1G;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;0BACmB,QAAQ;;;;;IAe9B;;OAEG;sBACe,MAAM;IAoBxB;;OAEG;kCAC2B,QAAQ,QAAQ,MAAM;IAkBpD;;OAEG;6BACsB,QAAQ,QAAQ,MAAM;CAYhD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-item.d.ts","sourceRoot":"","sources":["../../src/config/form-item.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,6DAA8D,CAAA"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default } from './Form.vue';
|
|
2
2
|
export { default as WForm } from './Form.vue';
|
|
3
|
-
export type { FormActionConfig, FormItemEventExtendedParams, FormItems } from './types';
|
|
3
|
+
export type { FormActionConfig, FormItemEventExtendedParams, FormItems, FormItemSlotScope } from './types';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,2CAA2C,CAAA;AAClD,OAAO,gDAAgD,CAAA;AAEvD,OAAO,0CAA0C,CAAA;AACjD,OAAO,0CAA0C,CAAA;AAEjD,OAAO,6CAA6C,CAAA;AAEpD,OAAO,2CAA2C,CAAA;AAKlD,OAAO,4CAA4C,CAAA;AACnD,OAAO,mDAAmD,CAAA;AAC1D,OAAO,gDAAgD,CAAA;AACvD,OAAO,mDAAmD,CAAA;AAC1D,OAAO,8CAA8C,CAAA;AAErD,OAAO,6CAA6C,CAAA;AACpD,OAAO,gDAAgD,CAAA;AACvD,OAAO,+CAA+C,CAAA;AACtD,OAAO,kDAAkD,CAAA;AAEzD,OAAO,kDAAkD,CAAA;AACzD,OAAO,wDAAwD,CAAA;AAC/D,OAAO,kDAAkD,CAAA;AACzD,OAAO,kDAAkD,CAAA;AAEzD,OAAO,qDAAqD,CAAA;AAC5D,OAAO,kDAAkD,CAAA;AACzD,OAAO,6CAA6C,CAAA;AACpD,OAAO,6CAA6C,CAAA;AACpD,OAAO,2CAA2C,CAAA;AAClD,OAAO,mDAAmD,CAAA;AAC1D,OAAO,yDAAyD,CAAA;AAChE,OAAO,+CAA+C,CAAA;AAEtD,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAE7C,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,2CAA2C,CAAA;AAClD,OAAO,gDAAgD,CAAA;AAEvD,OAAO,0CAA0C,CAAA;AACjD,OAAO,0CAA0C,CAAA;AAEjD,OAAO,6CAA6C,CAAA;AAEpD,OAAO,2CAA2C,CAAA;AAKlD,OAAO,4CAA4C,CAAA;AACnD,OAAO,mDAAmD,CAAA;AAC1D,OAAO,gDAAgD,CAAA;AACvD,OAAO,mDAAmD,CAAA;AAC1D,OAAO,8CAA8C,CAAA;AAErD,OAAO,6CAA6C,CAAA;AACpD,OAAO,gDAAgD,CAAA;AACvD,OAAO,+CAA+C,CAAA;AACtD,OAAO,kDAAkD,CAAA;AAEzD,OAAO,kDAAkD,CAAA;AACzD,OAAO,wDAAwD,CAAA;AAC/D,OAAO,kDAAkD,CAAA;AACzD,OAAO,kDAAkD,CAAA;AAEzD,OAAO,qDAAqD,CAAA;AAC5D,OAAO,kDAAkD,CAAA;AACzD,OAAO,6CAA6C,CAAA;AACpD,OAAO,6CAA6C,CAAA;AACpD,OAAO,2CAA2C,CAAA;AAClD,OAAO,mDAAmD,CAAA;AAC1D,OAAO,yDAAyD,CAAA;AAChE,OAAO,+CAA+C,CAAA;AAEtD,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAE7C,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
|