@kne/form-creator 0.1.2 → 0.1.4

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 CHANGED
@@ -34,7 +34,7 @@ npm i --save @kne/form-creator
34
34
 
35
35
  - 配置式表单搭建(全屏)
36
36
  - 通过字段列表添加/编辑/排序字段,右侧实时预览 form-info 渲染结果,并导出 Schema JSON
37
- - _FormCreator(@kne/current-lib_form-creator)[import * as _FormCreator from "@kne/form-creator"],_JsonView(@kne/json-view)[import * as _JsonView from "@kne/json-view"],(@kne/json-view/dist/index.css)[import "@kne/json-view/dist/index.css"],antd(antd)[import antd from "antd"],_FormInfo(@kne/form-info)[import * as _FormInfo from "@kne/form-info"]
37
+ - _FormCreator(@kne/current-lib_form-creator)[import * as _FormCreator from "@kne/form-creator"],(@kne/current-lib_form-creator/dist/index.css)[import "@kne/form-creator/dist/index.css"],_JsonView(@kne/json-view)[import * as _JsonView from "@kne/json-view"],(@kne/json-view/dist/index.css)[import "@kne/json-view/dist/index.css"],antd(antd)[import antd from "antd"],_FormInfo(@kne/form-info)[import * as _FormInfo from "@kne/form-info"]
38
38
 
39
39
  ```jsx
40
40
  const {default: FormCreator, defaultSchema, createBlock, createField, createStep} = _FormCreator;
@@ -265,7 +265,7 @@ render(<BaseExample />);
265
265
 
266
266
  - Schema 直接渲染表单
267
267
  - 传入已有 Schema,用 SchemaRenderer 直接展示可提交表单(运行时,不经过编辑器)
268
- - _FormCreator(@kne/current-lib_form-creator)[import * as _FormCreator from "@kne/form-creator"],_JsonView(@kne/json-view)[import * as _JsonView from "@kne/json-view"],(@kne/json-view/dist/index.css)[import "@kne/json-view/dist/index.css"],antd(antd)[import antd from "antd"]
268
+ - _FormCreator(@kne/current-lib_form-creator)[import * as _FormCreator from "@kne/form-creator"],(@kne/current-lib_form-creator/dist/index.css)[import "@kne/form-creator/dist/index.css"],_JsonView(@kne/json-view)[import * as _JsonView from "@kne/json-view"],(@kne/json-view/dist/index.css)[import "@kne/json-view/dist/index.css"],antd(antd)[import antd from "antd"]
269
269
 
270
270
  ```jsx
271
271
  const { SchemaRenderer, createBlock, createField } = _FormCreator;
@@ -366,99 +366,89 @@ render(<SchemaRenderExample />);
366
366
  ```
367
367
 
368
368
  - 扩展组件与校验规则
369
- - 通过 registerField 扩展填写项,通过 preset + registerRulePreset 扩展运行时校验与规则勾选面板
370
- - _FormCreator(@kne/current-lib_form-creator)[import * as _FormCreator from "@kne/form-creator"],_ReactFormAntd(@kne/react-form-antd)[import * as _ReactFormAntd from "@kne/react-form-antd"],_JsonView(@kne/json-view)[import * as _JsonView from "@kne/json-view"],(@kne/json-view/dist/index.css)[import "@kne/json-view/dist/index.css"],antd(antd)[import antd from "antd"]
369
+ - 通过 preset({ rules, fields }) 一次扩展运行时校验、规则勾选面板与自定义填写项
370
+ - _FormCreator(@kne/current-lib_form-creator)[import * as _FormCreator from "@kne/form-creator"],(@kne/current-lib_form-creator/dist/index.css)[import "@kne/form-creator/dist/index.css"],_ReactFormAntd(@kne/react-form-antd)[import * as _ReactFormAntd from "@kne/react-form-antd"],_JsonView(@kne/json-view)[import * as _JsonView from "@kne/json-view"],(@kne/json-view/dist/index.css)[import "@kne/json-view/dist/index.css"],antd(antd)[import antd from "antd"]
371
371
 
372
372
  ```jsx
373
- const {
374
- default: FormCreator,
375
- registerField,
376
- registerRulePreset,
377
- defaultSchema,
378
- createBlock,
379
- createField
380
- } = _FormCreator;
381
- const { Rate, Slider, preset, RULES } = _ReactFormAntd;
373
+ const { default: FormCreator, preset, defaultSchema, createBlock, createField } = _FormCreator;
374
+ const { Rate, Slider } = _ReactFormAntd;
382
375
  const { default: JsonView } = _JsonView;
383
376
  const { useState } = React;
384
377
  const { Alert, Typography, Space } = antd;
385
378
  const { Text, Paragraph } = Typography;
386
379
 
387
- // 1) react-form-antd preset 注册运行时校验规则
380
+ // 一次 preset:运行时校验 + 编辑器规则面板 + 扩展填写项
388
381
  preset({
389
- rules: Object.assign({}, RULES, {
390
- // 身份证号(简化示例)
382
+ rules: {
391
383
  ID_CARD: {
384
+ label: '身份证格式',
392
385
  reg: /^\d{17}[\dXx]$/,
393
386
  message: '%s格式不正确'
394
387
  },
395
- // 评分至少 3 星
396
- RATE_MIN: value => {
397
- const score = Number(value) || 0;
398
- return {
399
- result: score >= 3,
400
- errMsg: score >= 3 ? '' : '评分至少 3 星'
401
- };
388
+ RATE_MIN: {
389
+ label: '评分至少3星',
390
+ validator: value => {
391
+ const score = Number(value) || 0;
392
+ return {
393
+ result: score >= 3,
394
+ errMsg: score >= 3 ? '' : '评分至少 3 星'
395
+ };
396
+ }
402
397
  }
403
- })
404
- });
405
-
406
- // 2) 同步注册到 form-creator 规则勾选面板
407
- registerRulePreset({ value: 'ID_CARD', label: '身份证格式' });
408
- registerRulePreset({ value: 'RATE_MIN', label: '评分至少3星' });
409
-
410
- // 3) 扩展自定义填写项:用 propsSchema 声明可编辑的额外参数
411
- registerField('Rate', {
412
- label: '评分',
413
- groupName: '评价组件',
414
- component: Rate,
415
- defaultProps: { count: 5, allowHalf: false, allowClear: true },
416
- propsSchema: [
417
- {
418
- name: 'count',
419
- label: '星星总数',
420
- type: 'number',
421
- min: 1,
422
- max: 10,
423
- defaultValue: 5
424
- },
425
- {
426
- name: 'allowHalf',
427
- label: '允许半星',
428
- type: 'boolean',
429
- defaultValue: false
430
- },
431
- {
432
- name: 'allowClear',
433
- label: '允许清除',
434
- type: 'boolean',
435
- defaultValue: true
436
- }
437
- ]
438
- });
439
-
440
- registerField('Slider', {
441
- label: '滑块',
442
- component: Slider,
443
- defaultProps: { min: 0, max: 100, step: 1 },
444
- propsSchema: [
445
- { name: 'min', label: '最小值', type: 'number', defaultValue: 0 },
446
- { name: 'max', label: '最大值', type: 'number', defaultValue: 100 },
447
- { name: 'step', label: '步长', type: 'number', min: 0, defaultValue: 1 },
448
- {
449
- name: 'tooltipPlacement',
450
- label: '提示位置',
451
- type: 'select',
452
- defaultValue: 'top',
453
- options: [
454
- { label: '上', value: 'top' },
455
- { label: '下', value: 'bottom' },
456
- { label: '左', value: 'left' },
457
- { label: '右', value: 'right' }
398
+ },
399
+ fields: {
400
+ Rate: {
401
+ label: '评分',
402
+ groupName: '评价组件',
403
+ component: Rate,
404
+ defaultProps: { count: 5, allowHalf: false, allowClear: true },
405
+ propsSchema: [
406
+ {
407
+ name: 'count',
408
+ label: '星星总数',
409
+ type: 'number',
410
+ min: 1,
411
+ max: 10,
412
+ defaultValue: 5
413
+ },
414
+ {
415
+ name: 'allowHalf',
416
+ label: '允许半星',
417
+ type: 'boolean',
418
+ defaultValue: false
419
+ },
420
+ {
421
+ name: 'allowClear',
422
+ label: '允许清除',
423
+ type: 'boolean',
424
+ defaultValue: true
425
+ }
458
426
  ]
459
427
  },
460
- { name: 'dots', label: '显示刻度点', type: 'boolean', defaultValue: false }
461
- ]
428
+ Slider: {
429
+ label: '滑块',
430
+ component: Slider,
431
+ defaultProps: { min: 0, max: 100, step: 1 },
432
+ propsSchema: [
433
+ { name: 'min', label: '最小值', type: 'number', defaultValue: 0 },
434
+ { name: 'max', label: '最大值', type: 'number', defaultValue: 100 },
435
+ { name: 'step', label: '步长', type: 'number', min: 0, defaultValue: 1 },
436
+ {
437
+ name: 'tooltipPlacement',
438
+ label: '提示位置',
439
+ type: 'select',
440
+ defaultValue: 'top',
441
+ options: [
442
+ { label: '上', value: 'top' },
443
+ { label: '下', value: 'bottom' },
444
+ { label: '左', value: 'left' },
445
+ { label: '右', value: 'right' }
446
+ ]
447
+ },
448
+ { name: 'dots', label: '显示刻度点', type: 'boolean', defaultValue: false }
449
+ ]
450
+ }
451
+ }
462
452
  });
463
453
 
464
454
  const PresetExtendExample = () => {
@@ -467,7 +457,7 @@ const PresetExtendExample = () => {
467
457
  blocks: [
468
458
  createBlock('formInfo', {
469
459
  title: '扩展字段与校验',
470
- subtitle: '演示 registerField + preset rules + registerRulePreset',
460
+ subtitle: '演示 preset({ rules, fields }) 一次注册',
471
461
  column: 2,
472
462
  list: [
473
463
  createField({
@@ -507,13 +497,10 @@ const PresetExtendExample = () => {
507
497
  description={
508
498
  <div>
509
499
  <Paragraph style={{ marginBottom: 4 }}>
510
- 1. <Text code>{'preset({ rules })'}</Text>:注册运行时校验(@kne/react-form-antd
511
- </Paragraph>
512
- <Paragraph style={{ marginBottom: 4 }}>
513
- 2. <Text code>registerRulePreset</Text>:把规则挂到「填写规则」勾选面板
500
+ 调用 <Text code>{'preset({ rules, fields })'}</Text> 即可同时注册:运行时校验(@kne/react-form-antd)、编辑器「填写规则」勾选面板、扩展填写项类型。
514
501
  </Paragraph>
515
502
  <Paragraph style={{ marginBottom: 0 }}>
516
- 3. <Text code>registerField</Text>:扩展填写项;可用 <Text code>groupName</Text> 自定义分组,并用 <Text code>propsSchema</Text> 声明额外参数
503
+ 规则项在 <Text code>rules</Text> 中写 <Text code>label</Text> + 校验定义(<Text code>reg/message</Text> 或 <Text code>validator</Text>);字段在 <Text code>fields</Text> 中按 type 配置,支持 <Text code>groupName</Text> <Text code>propsSchema</Text>。
517
504
  </Paragraph>
518
505
  </div>
519
506
  }
@@ -661,27 +648,65 @@ import { Form, SubmitButton } from '@kne/form-info';
661
648
  #### 工具方法
662
649
 
663
650
  - `createBlock(kind)` / `createStep()` / `normalizeSchema(schema)`
664
- - `registerField(type, definition)` 扩展字段类型;可用 `groupName` 指定类型下拉分组,不传则归入「扩展字段」;用 `propsSchema` 声明额外参数(`string` / `number` / `boolean` / `select`)
665
- - `registerRulePreset({ value, label })` 扩展「填写规则」勾选面板中的规则项
651
+ - `preset({ rules, fields })` 一次注册扩展规则与填写项(推荐)
666
652
  - `parseRuleString(rule)` / `buildRuleString(config)` 校验规则字符串解析/组装
667
653
 
668
- #### 扩展组件与校验(示例见「扩展组件与校验规则」)
654
+ #### preset(推荐)
669
655
 
670
- 运行时校验由 `@kne/react-form-antd` 的 `preset({ rules })` 注册;勾选面板需同步调用 `registerRulePreset`,否则 Schema 里写了规则名但编辑器勾选不到。
656
+ 应用入口调用一次,同时完成:
671
657
 
672
- 扩展填写项时,用 `propsSchema` 声明可编辑的额外参数(写入字段 `props`),编辑器会按声明自动生成「填写项设置」表单:
658
+ 1. **运行时校验**:合并进 `@kne/react-form-antd` `RULES`
659
+ 2. **编辑器规则面板**:写入「填写规则」勾选列表
660
+ 3. **扩展填写项**:注册到字段类型 registry
661
+
662
+ 内置规则 `REQ` / `TEL` / `EMAIL` 已内置,无需重复配置;传入同名 key 可覆盖运行时规则并更新编辑器 label。
673
663
 
674
664
  ```js
675
- registerField('Rate', {
676
- label: '评分',
677
- groupName: '评价组件', // 自定义分组;不传则归入「扩展字段」
678
- component: Rate,
679
- defaultProps: { count: 5 },
680
- propsSchema: [
681
- { name: 'count', label: '星星总数', type: 'number', min: 1, max: 10, defaultValue: 5 }
682
- ]
665
+ import { preset } from '@kne/form-creator';
666
+ import { Rate, Slider } from '@kne/react-form-antd';
667
+
668
+ preset({
669
+ rules: {
670
+ ID_CARD: {
671
+ label: '身份证格式',
672
+ reg: /^\d{17}[\dXx]$/,
673
+ message: '%s格式不正确'
674
+ },
675
+ RATE_MIN: {
676
+ label: '评分至少3星',
677
+ validator: value => ({
678
+ result: Number(value) >= 3,
679
+ errMsg: Number(value) >= 3 ? '' : '评分至少 3 星'
680
+ })
681
+ }
682
+ },
683
+ fields: {
684
+ Rate: {
685
+ label: '评分',
686
+ groupName: '评价组件',
687
+ component: Rate,
688
+ defaultProps: { count: 5 },
689
+ propsSchema: [
690
+ { name: 'count', label: '星星总数', type: 'number', min: 1, max: 10, defaultValue: 5 }
691
+ ]
692
+ }
693
+ }
683
694
  });
695
+ ```
696
+
697
+ | 配置 | 类型 | 说明 |
698
+ |------|------|------|
699
+ | `rules` | `Record<string, RuleDef>` | key 为规则 token;`RuleDef` 含 `label` + `reg/message` 或 `validator` |
700
+ | `fields` | `Record<string, FieldDef>` | key 为字段 type,形状同 `registerField` 第二参数 |
684
701
 
702
+ #### 高级用法(一般请用 preset)
703
+
704
+ - `registerField(type, definition)` 单独扩展字段类型
705
+ - `registerRulePreset({ value, label })` 单独扩展规则勾选项
706
+
707
+ 扩展填写项时,用 `propsSchema` 声明可编辑的额外参数(写入字段 `props`),编辑器会按声明自动生成「填写项设置」表单:
708
+
709
+ ```js
685
710
  registerField('Slider', {
686
711
  label: '滑块',
687
712
  component: Slider,
@@ -705,6 +730,10 @@ registerField('Slider', {
705
730
  });
706
731
  ```
707
732
 
733
+ #### 扩展组件与校验(示例见「扩展组件与校验规则」)
734
+
735
+ 使用 `preset({ rules, fields })` 即可,无需再单独调用 `registerField` / `registerRulePreset` / react-form-antd 的 `preset`。
736
+
708
737
  `propsSchema` 项约定:
709
738
 
710
739
  | 字段 | 说明 |