Skip to content

Câu chữ

Câu chữ là một phần của giao diện: cùng một hành động mà mỗi màn hình gọi một tên thì người dùng phải đoán. Trang này chốt giọng văn, nhãn chuẩn và định dạng dữ liệu cho mọi app Tasco. Nhãn trong bảng dưới trùng với nhãn component của core đang dùng — màn hình mới giữ đúng các nhãn này.

Giọng văn

  • Tiếng Việt có dấu, câu ngắn, chủ động. "Không lưu được đơn hàng." thay vì "Việc lưu đơn hàng đã không thành công."
  • Gọi người dùng là "bạn" khi cần nói trực tiếp: "Bạn không có quyền truy cập trang này."
  • Từ Việt thông dụng trước tiếng Anh: Lọc (không Filter), Xuất (không Export), Đặt lại (không Reset). Giữ từ đã quen và không có từ thay thế gọn: OTP, Email, Excel, PDF.
  • Chỉ viết hoa chữ đầu: "Tạo đơn hàng", không "Tạo Đơn Hàng". Sidebar hiển thị chữ hoa là do CSS — nhãn trong cấu hình vẫn viết thường.
  • Dấu thanh đặt thống nhất theo cách core đang dùng: Xoá, Huỷ, Tuỳ chọn, Hoà.
  • Không chấm câu ở nhãn nút, tiêu đề, mục menu, nhãn ô nhập. Có chấm câu ở thông báo và mô tả là câu đầy đủ.

Nhãn nút

Động từ đứng đầu; thêm đối tượng khi trên màn hình có nhiều đối tượng: "Lưu", "Tạo đơn", "Xoá đơn hàng".

Hành độngNhãnTránh
Tạo bản ghi (toolbar bảng)Thêm mớiAdd, Tạo mới Đơn Hàng
Tạo bản ghi (đầu trang)Tạo + tên đối tượng, vd "Tạo đơn"Thêm
Lưu formLưuSave, Submit
Bỏ thao tác đang làmHuỷCancel, Thoát
Đóng cửa sổ chỉ để xemĐóngHuỷ
Xác nhận hộp thoạiĐộng từ của hành động, vd "Xoá đơn"; mặc định "Đồng ý"OK, Có
LọcLọcFilter
Áp dụng bộ lọc trong drawerÁp dụngOK
Đưa bản nháp về ban đầuĐặt lạiReset, Làm lại
Bỏ mọi điều kiện lọcXoá tất cảClear
Lưu thiết lập bảngLưu lại
Tải dữ liệu mớiTải lạiRefresh, Làm mới
Xuất dữ liệuXuất dữ liệu, Xuất ExcelExport
Nhập từ fileNhập từ fileImport
Chạy lại sau lỗiThử lại
Về trang chủVề trang chủHome
Đăng nhập, đăng xuấtĐăng nhập, Đăng xuấtLogin, Logout

Hộp thoại xác nhận

Chỉ hỏi lại với hành động không hoàn tác được hoặc tốn kém (xoá, huỷ đơn, gửi duyệt). Hành động đổi lại được thì làm luôn và báo kết quả.

PhầnQuy tắcVí dụ
Tiêu đềCâu hỏi nêu hành động và đối tượngXoá đơn hàng DH-0001?
Nội dungHệ quả người dùng cần biết trước khi quyết địnhĐơn sẽ bị xoá vĩnh viễn và không khôi phục được.
Nút xác nhậnLặp lại động từ; kiểu danger nếu phá huỷXoá đơn
Nút huỷHuỷHuỷ
ts
const ok = await confirm({
  title: 'Xoá đơn hàng DH-0001?',
  content: 'Đơn sẽ bị xoá vĩnh viễn và không khôi phục được.',
  okText: 'Xoá đơn',
  danger: true,
})

Xem useConfirm.

Thông báo thành công

Thì hoàn thành, nêu đúng đối tượng, một câu: "Đã lưu đơn hàng.", "Đã xoá DH-0001.", "Đã gửi duyệt 3 đơn." Không viết "Thành công!" hay "Thao tác thành công" — người dùng không biết cái gì đã xong.

Thao tác thấy ngay kết quả trên màn hình (bảng đã có dòng mới) vẫn nên báo một câu ngắn, vì thay đổi có thể nằm ngoài vùng đang nhìn.

Thông báo lỗi

  • Nói chuyện gì xảy ra và làm gì tiếp: "Không lưu được đơn hàng. Kiểm tra kết nối mạng rồi thử lại."
  • Không đổ lỗi cho người dùng ("Bạn đã nhập sai") và không hiện mã kỹ thuật trần ("Error 500", undefined).
  • Thông báo của backend hiện nguyên văn cho người dùng, nên route BFF và backend viết thông báo tiếng Việt dành cho người dùng cuối, không phải cho lập trình viên.
  • Lỗi ô nhập là câu mệnh lệnh ngắn, nói cách sửa: "Nhập tên khách hàng", "Số điện thoại gồm 10 chữ số".
  • Không có quyền không phải lỗi: "Bạn không có quyền xem công nợ của khách hàng."

Trạng thái rỗng

Một câu giải thích vì sao rỗng, kèm lời mời phù hợp — xem Rỗng, đang tải, lỗi, không có quyền.

Định dạng dữ liệu

LoạiĐịnh dạngVí dụ
NgàyDD/MM/YYYY16/09/2026
Ngày giờDD/MM/YYYY HH:mm, 24 giờ16/09/2026 14:05
Khoảng ngàyDD/MM/YYYY – DD/MM/YYYY; thiếu một đầu thì "Từ …", "Đến …"01/09/2026 – 30/09/2026
TiềnDấu chấm ngăn nghìn, ký hiệu sau số12.500.000 ₫
SốDấu chấm ngăn nghìn, dấu phẩy thập phân1.234,5
Phần trămDấu phẩy thập phân, % liền số12,5%
Số lớn rút gọnViết đủ đơn vị1,3 tỷ ₫
Mã chứng từGiữ nguyên như hệ thống nguồnDH-0001
Tổng số dòng của bảngTổng số dòng NTổng số dòng 128

Cách tạo:

  • Tiền, số, phần trăm: Intl.NumberFormat('vi-VN', …) có sẵn trong trình duyệt. Số rút gọn dùng compactDisplay: 'long' — bản ngắn ra "1,3 Tr", dễ đọc nhầm.
  • Ngày: Intl.DateTimeFormat('vi-VN', { day: '2-digit', month: '2-digit', year: 'numeric' }). Ngày giờ ghép ngày rồi giờ, vì định dạng ngày giờ mặc định của vi-VN đặt giờ trước.
  • Ô chọn ngày: CDatePicker format="DD/MM/YYYY" kèm value-format="YYYY-MM-DD" để giá trị gửi backend vẫn là chuẩn ISO — giống bộ lọc ngày của CTable.
  • Ô nhập tiền: CInputCurrency tự định dạng 1.234.567,89 khi gõ, trả về số.
  • Ô nhập phần trăm: CInputPercent nhận dấu phẩy hoặc dấu chấm khi gõ, hiển thị 12,5, model là chuỗi "12.5". Ô có sẵn dấu % nên nhãn không ghi thêm "(%)".
  • Căn lề: cột tiền, số, phần trăm trong bảng canh phải; cột ngày canh trái.

Nhãn ô nhập và placeholder

  • Nhãn là danh từ, không chấm câu: "Khách hàng", "Ngày giao".
  • Placeholder chỉ để gợi ý định dạng hoặc ví dụ ("vd 0912 345 678"), không lặp lại nhãn và không thay cho nhãn — placeholder biến mất khi người dùng bắt đầu gõ.
  • Trường bắt buộc đánh dấu bằng required của form (dấu *), không viết "(bắt buộc)" vào nhãn.

Liên quan