Skip to content

Primitive — nhập liệu

Ô nhập của form. Import từ @tasco/ui, dùng như antdv.

ts
import {
  CInput, CTextarea, CInputNumber, CInputSearch,
  CSelect, CSelectOption, CCheckbox, CCheckboxGroup, CRadio, CRadioGroup, CSwitch,
  CDatePicker, CRangePicker, CTimePicker, CFormItem, CUpload,
} from '@tasco/ui'

Chọn đúng component

Dữ liệuComponentGhi chú
Chữ ngắnCInputallow-clear cho ô lọc
Chữ dàiCTextareaLuôn đặt :rows
Số đếmCInputNumber:min, :max; thêm style="width: 100%" trong form
TiềnCInputCurrencyModel là số
Phần trămCInputPercentModel là chuỗi
Chọn mộtCSelect + CSelectOptionshow-search khi trên 10 lựa chọn
Chọn nhiềuCSelect mode="multiple"
Hai trạng tháiCSwitchĐổi là áp dụng ngay
Nhiều lựa chọn độc lậpCCheckboxGroup
Một trong vài lựa chọn nhìn thấy hếtCRadioGroupTrên 5 lựa chọn thì dùng CSelect
NgàyCDatePicker
Khoảng ngàyCRangePicker
TệpCUploadGửi bằng FormData qua useApi

Ngày tháng

vue
<CDatePicker v-model:value="model.date" value-format="YYYY-MM-DD" />
<CRangePicker v-model:value="model.range" value-format="YYYY-MM-DD" />

Luôn khai value-format: không có nó, model là đối tượng dayjs và backend nhận được chuỗi khó đoán. YYYY-MM-DD là định dạng thống nhất của framework — xem Hợp đồng dữ liệu.

Giao diện hiển thị theo locale vi_VN mà layer đã áp. Tên tháng và thứ đến từ dayjs — dự án cần tiếng Việt cho phần đó thì nạp dayjs/locale/vi.

CFormItem

vue
<CFormItem label="Khách hàng" name="customer">
  <CInput v-model:value="model.customer" />
</CFormItem>

name phải trùng khoá trong modelrules, nếu không rule không chạy. Xem CForm.

Tải tệp

vue
<CUpload
  :max-count="1"
  :before-upload="() => false"
  @change="onFileChange"
>
  <CButton variant="outline">Chọn tệp</CButton>
</CUpload>

:before-upload="() => false" chặn antd tự gửi — dự án gửi qua useApi để request đi đúng đường BFF và có token:

ts
const form = new FormData()
form.append('file', file)
await api('/orders/import', { method: 'POST', body: form })

Lưu ý

  • Ô nhập trong form luôn có CFormItem với label — placeholder không thay được nhãn.
  • Đặt style="width: 100%" cho CInputNumber, CSelect, CDatePicker khi nằm trong form dọc, nếu không chúng co lại theo nội dung.
  • Danh sách lựa chọn dài thì tải từ backend và bật show-search, đừng render vài trăm CSelectOption.

Liên quan