Bỏ qua, đến nội dung

@digiforce-nc/plugin-number-format-field

Plugin field định dạng số — bổ sung kiểu field hiển thị số theo format tùy chỉnh (tiền tệ, phần trăm, số thập phân, mã đơn hàng).

Plugin này làm gì?

Số 1234567.89 có thể cần hiển thị khác nhau: 1,234,567.89 (tiền USD), 1.234.567,89 (tiền VND format), 1234567.89%, hoặc ORD-001234567. Plugin đăng ký field type mới cho phép cấu hình format hiển thị số linh hoạt.

Cơ chế hoạt động

Tính năng chính

#Tính năngMô tả
1Locale-aware formatTự động định dạng theo locale (en-US, vi-VN) qua Intl.NumberFormat
2Precision controlCấu hình độ chính xác thập phân (1, 1.0, 1.00, ..., 1.00000)
3Thousand separatorDấu phân cách hàng nghìn tự động theo locale
4Percent modeHiển thị dạng phần trăm — lưu 0.5, hiển thị 50%
5ValidationMin/Max, Integer/Odd/Even, Regular expression
6Pretty format toggleBật/tắt định dạng đẹp qua checkbox

Kiến trúc Plugin

Plugin chỉ hoạt động phía client — server plugin trống (không có collection hay action). Toàn bộ logic nằm ở:

Thành phầnMô tả
FormatNumberFieldInterfaceInterface cho field Number — đăng ký vào group basic, order 7
FormatPercentFieldInterfaceInterface cho field Percent — đăng ký vào group basic, order 8
InputNumberComponent input số với formatter/parser locale-aware
PercentComponent phần trăm — nhân/chia 100 tự động
ReadPrettyComponent hiển thị (read-only) với định dạng
NumberFormatProviderProvider đăng ký các interface vào hệ thống
getNumberFormatter()Utility tạo formatter/parser từ locale và step

Database type hỗ trợ

TypeMô tả
doubleSố thực dấu phẩy động (mặc định cho Number)
floatSố thực độ chính xác đơn (mặc định cho Percent)
decimalSố thập phân chính xác cao

Dependencies

PackageVai trò
@digiforce-nc/clientClient UI framework — field registry
@digiforce-nc/serverServer framework (peer, không dùng trực tiếp)
@formily/reactForm library — connect, mapReadPretty
@rc-component/mini-decimalUtility lấy precision từ step value
Intl.NumberFormatAPI trình duyệt — format số theo locale

Lưu ý triển khai

  • Dữ liệu lưu trong DB luôn là raw number — format chỉ khi hiển thị
  • Sort và filter hoạt động trên raw number, không bị ảnh hưởng bởi format
  • Locale đọc từ localStorage.getItem('DIGIFORCE_LOCALE'), mặc định en-US
  • Percent field lưu dạng decimal (0.156 → hiển thị 15.6%)

Mục lục chi tiết