Với bối cảnh thực tế của ngành dệt may B2B, mình sẽ không cố gắng nhồi nhiều thông tin lên tem, mà ưu tiên nguyên tắc:
Tem mẫu chỉ nên chứa những thông tin giúp khách hàng nhận diện mẫu ngay trong 2–3 giây.
Các thông tin kỹ thuật chi tiết nên để sau QR Code.
Mình hoàn toàn đồng ý, việc sử dụng chung logic (Single Source of Truth) giữa React và Canvas là cách tốt nhất để tránh sai lệch dữ liệu hiển thị.
- Tạo hàm dùng chung (fabric-sample-qr.utils.ts):
- Đã tách hàm
buildFabricLabelSpecs(catalog). Hàm này chịu trách nhiệm lấy dữ liệu từcatalogvà trả về một object đồng nhất:{ code, name, specs, footer }.
- Đã tách hàm
- Cập nhật component QRFabricLabel:
- Thay vì nhận các prop lắt nhắt như
composition,width,gsm, component này giờ chỉ cần nhận chuỗispecsđã được định dạng sẵn vàfooter.
- Thay vì nhận các prop lắt nhắt như
- Cập nhật hàm vẽ Canvas (drawTagToCanvas):
- Xóa bỏ logic tự tính toán
specsPartsbên trong Canvas. - Thay vào đó gọi
buildFabricLabelSpecs(catalog)và vẽ dựa trên các trường của object trả về.
- Xóa bỏ logic tự tính toán
- Kết nối tại Modal (FabricSampleQRModal):
- Gọi
const labelData = buildFabricLabelSpecs(catalog)một lần duy nhất. - Dữ liệu này được truyền chung cho
QRFabricLabel(hiển thị trên màn hình in) và đồng thời hàmdrawTagToCanvascũng chạy cùng một logic (khi nhấn Tải Ảnh).
- Gọi
Sự thay đổi này đảm bảo trong tương lai, nếu cần bổ sung hoặc thay đổi thông tin in trên tem (ví dụ: thêm màu sắc, ID cuộn), bạn chỉ cần sửa ở duy nhất hàm buildFabricLabelSpecs, cả giao diện xem trước và ảnh tải về đều sẽ tự động đồng bộ.