@ebuilding/form 2.1.3 → 2.1.5

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.
@@ -1526,25 +1526,34 @@ class DeonNzFieldNumber extends FieldType {
1526
1526
  get password() {
1527
1527
  return this.props?.["password"] === true;
1528
1528
  }
1529
- //<input nz-input [formControl]="formControl" [type]="'text'" [formlyAttributes]="field" />
1530
1529
  constructor() {
1531
1530
  super();
1532
1531
  }
1533
1532
  ngOnInit() { }
1534
- /**
1535
- * 防止 nz-input-number 的 formatter 报错(如 toFixed 报错)
1536
- */
1537
1533
  formatNumber = (value) => {
1538
- const val = Number(value);
1539
- return isNaN(val) ? '' : val.toFixed(this.precision);
1534
+ if (value === null || value === undefined || value === '')
1535
+ return '';
1536
+ return String(value); // 不要 format,小数位留给 blur 处理
1540
1537
  };
1541
- /**
1542
- * 解析输入值为数字,NaN 返回 0
1543
- */
1544
1538
  parseNumber = (value) => {
1545
1539
  const parsed = parseFloat(value);
1546
- return isNaN(parsed) ? 0 : parsed;
1540
+ return isNaN(parsed) ? null : parsed;
1547
1541
  };
1542
+ onFormatPrecision() {
1543
+ let value = this.formControl.value;
1544
+ // 空值直接跳过,不格式化
1545
+ if (value === null || value === undefined || value === '')
1546
+ return;
1547
+ // 强制转成数字
1548
+ const num = Number(value);
1549
+ if (isNaN(num))
1550
+ return;
1551
+ // 设置精度
1552
+ const fixed = num.toFixed(this.precision);
1553
+ // ⚠ 注意:toFixed 返回 string,但 formControl 可能希望是 number
1554
+ // 所以统一再转 number 避免下游报错
1555
+ this.formControl.setValue(this.precision > 0 ? Number(fixed) : parseInt(fixed), { emitEvent: false });
1556
+ }
1548
1557
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DeonNzFieldNumber, deps: [], target: i0.ɵɵFactoryTarget.Component });
1549
1558
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DeonNzFieldNumber, isStandalone: true, selector: "deon-nz-field-number", usesInheritance: true, ngImport: i0, template: `
1550
1559
  <ng-container *ngIf="!password; else tmpPwd">
@@ -1558,6 +1567,7 @@ class DeonNzFieldNumber extends FieldType {
1558
1567
  [nzStep]="0"
1559
1568
  [nzFormatter]="formatNumber"
1560
1569
  [nzParser]="parseNumber"
1570
+ (nzBlur)="onFormatPrecision()"
1561
1571
  ></nz-input-number>
1562
1572
  </nz-input-group>
1563
1573
  </ng-container>
@@ -1570,6 +1580,7 @@ class DeonNzFieldNumber extends FieldType {
1570
1580
  [nzStep]="precision == 0 ? 1 : 0.1"
1571
1581
  [nzFormatter]="formatNumber"
1572
1582
  [nzParser]="parseNumber"
1583
+ (nzBlur)="onFormatPrecision()"
1573
1584
  ></nz-input-number>
1574
1585
  </ng-template>
1575
1586
  </ng-container>
@@ -1593,6 +1604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
1593
1604
  [nzStep]="0"
1594
1605
  [nzFormatter]="formatNumber"
1595
1606
  [nzParser]="parseNumber"
1607
+ (nzBlur)="onFormatPrecision()"
1596
1608
  ></nz-input-number>
1597
1609
  </nz-input-group>
1598
1610
  </ng-container>
@@ -1605,6 +1617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
1605
1617
  [nzStep]="precision == 0 ? 1 : 0.1"
1606
1618
  [nzFormatter]="formatNumber"
1607
1619
  [nzParser]="parseNumber"
1620
+ (nzBlur)="onFormatPrecision()"
1608
1621
  ></nz-input-number>
1609
1622
  </ng-template>
1610
1623
  </ng-container>