名稱及修飾詞 | 類型 | 預設值 | 約束 | 說明 |
---|---|---|---|---|
items.sync | Array | required: true | 資料來源 | |
columns.sync | Array | (見columns欄位定義) | required: true | |
validator: (columns) => columns.every((column) => column.key) | 欄位定義 | |||
(見columns欄位定義) | ||||
displayingColumnKeys.sync | Array | columns.filter(col => col.visible).map(col => col.key) | 目前顯示欄位的識別鍵陣列 | |
rowKey | String | 'id' | 資料列識別鍵(通常為主鍵PK) | |
selected.sync | Array | [] | 已勾選的資料列識別鍵 | |
searchTerm.sync | String | '' | 搜尋關鍵詞 | |
searchFilter.sync | Object | columns.filter(col => col.visible).reduce((prev, curr) => ({...prev, [curr.key]: null}), {}) | 搜尋篩選欄位物件 | |
ex: { columnKeyA: 'keyASearchTerm', columnKeyB: 'keyBSearchTerm' } | ||||
filtering.sync | Object | { ignoreCase: true, logicOperation: 'and' } | 篩選資訊物件 | |
ignoreCase: 搜尋比對時忽略大小寫 | ||||
logicOperation: 所有搜尋條件的邏輯運算模式(or, and) | ||||
sorting.sync | Object | { key: '', direction: 'asc' } | 排序資訊物件 | |
key: 排序欄位屬性鍵 | ||||
direction: 排序方向(asc, desc) | ||||
paging.sync | Object | { page: 1, itemsPerPage: 100 } | 分頁資訊物件 | |
page: 頁碼 | ||||
itemsPerPage: 每頁幾筆(小於等於0者不分頁) | ||||
paginator.sync | Object | { showFirst: false, showPrev: true, showPrevGrp: true, showPages: true, showNextGrp: true, showNext: true, showLast: false, pageLinks: 5 } | 分頁器資訊物件 | |
showFirst: 顯示首頁連結 | ||||
showPrev: 顯示上一頁連結 | ||||
showPrevGrp: 顯示上一頁群連結 | ||||
showPages: 顯示頁碼連結 | ||||
showNextGrp: 顯示下一頁群連結 | ||||
showNext: 顯示下一頁連結 | ||||
showLast: 顯示末頁連結 | ||||
pageLinks: 頁碼連結數量 | ||||
itemsPerPageOptions.sync | Array | [10, 25, 50, 100] | (options) => options.every((option) => !isNaN(option)) | 每頁幾筆下拉選單選項 |
serverTotalItems | Number | undefined | 伺服器資料總筆數,有提供時以伺服器端搜尋、排序、分頁(request事件處理) | |
showToolbar | Boolean | true | 是否顯示工具列(新增、搜尋) | |
showCreate | Boolean | true | 是否顯示新增按鈕 | |
showSearch | Boolean | true | 是否顯示搜尋框 | |
showMenubar | Boolean | true | 是否顯示選單列(刪除勾選、匯出、每頁幾筆、顯示欄位) | |
showDestroy | Boolean | true | 是否顯示刪除勾選按鈕 | |
showExport | Boolean | true | 是否顯示匯出下拉選單 | |
showItemsPerPage | Boolean | true | 是否顯示每頁幾筆下拉選單 | |
showDisplayingColumns | Boolean | true | 是否顯示顯示欄位下拉選單 | |
showPagebar | Boolean | true | 是否顯示分頁列(分頁器、分頁資訊) | |
showPaginator | Boolean | true | 是否顯示分頁器 | |
showPageInfo | Boolean | true | 是否顯示分頁資訊 | |
pagebarPosition | String | 'top' | 'top', 'bottom' | 分頁列位置 |
toolbarClass | String, Object, Array | undefined | 工具列樣式類別 | |
toolbarStyle | Object, Array | undefined | 工具列樣式 | |
menubarClass | String, Object, Array | undefined | 選單列樣式類別 | |
menubarStyle | Object, Array | undefined | 選單列樣式 | |
pagebarClass | String, Object, Array | undefined | 分頁列樣式類別 | |
pagebarStyle | Object, Array | undefined | 分頁列樣式 | |
exportExcel | Function | undefined | 自訂匯出Excal函式 | |
exportPdf | Function | undefined | 自訂匯出Pdf函式 | |
exportName | String | 'export_data' | 自訂匯出預設檔案名稱 | |
exportColumnKeys | Array | columns.filter(col => col.visible).map(col => col.key) | 匯出欄位的識別鍵陣列 | |
showSelection | Boolean | true | 是否顯示資料列選取方塊 | |
selectionsThClass | String, Object, Array | undefined | 資料列選取方塊表頭樣式類別 | |
selectionsThStyle | Object, Array | undefined | 資料列選取方塊表頭樣式 | |
selectionsTdClass | String, Object, Array | undefined | 資料列選取方塊儲存格樣式類別 | |
selectionsTdStyle | Object, Array | undefined | 資料列選取方塊儲存格樣式 | |
showActions | Boolean | true | 是否顯示資料列操作動作儲存格 | |
actionsThClass | String, Object, Array | undefined | 資料列操作動作表頭樣式類別 | |
actionsThStyle | Object, Array | undefined | 資料列操作動作表頭樣式 | |
actionsTdClass | String, Object, Array | undefined | 資料列操作動作儲存格樣式類別 | |
actionsTdStyle | Object, Array | undefined | 資料列操作動作儲存格樣式 | |
showRead | Boolean | true | 是否顯示資料列檢視按鈕 | |
showUpdate | Boolean | true | 是否顯示資料列編輯按鈕 | |
showDelete | Boolean | true | 是否顯示資料列刪除按鈕 | |
emptyText | String | '查無資料!' | 查無資料訊息文字 | |
inlineEditItem.sync | Object | null | 行內編輯項目 | |
smallTable | Boolean | false | 是否為小型表格(按鈕樣式類別加上btn-sm,表單控制項樣式類別加上form-control-sm,表格樣式類別加上table-sm) | |
tableClass | String, Object, Array | undefined | 表格樣式類別 | |
tableStyle | Object, Array | undefined | 表格樣式 | |
bordered | Boolean | true | 表格是否加上table-bordered樣式類別 | |
striped | Boolean | true | 表格是否加上table-striped樣式類別 | |
hover | Boolean | true | 表格是否加上table-hover樣式類別 | |
cloneMode | String | 'shallowcopy' | 'nocopy', 'shallowcopy', 'deepcopy' | 物件克隆模式(不拷貝、淺拷貝、深拷貝) |
事件 | 處理函式原型 | 說明 |
---|---|---|
request | @request="({ searchTerm, searchFilter, filtering, sorting, paging }) => onRequest({ searchTerm, searchFilter, filtering, sorting, paging })" | |
事件參數: | ||
searchTerm: 搜尋關鍵詞 | ||
searchFilter: 搜尋篩選欄位物件 | ||
filtering: 篩選資訊物件 | ||
sorting: 排序資訊物件 | ||
paging: 分頁資訊物件 | 觸發伺服器請求時發出 | |
範例: | ||
async onRequest({ searchTerm, searchFilter, filtering, sorting, paging }) { | ||
console.log('onRequest'); | ||
const { data } = await list({ | ||
params: { | ||
searchTerm, | ||
searchFilter, | ||
filteringIgnoreCase: filtering.ignoreCase, | ||
sortingKey: sorting.key, | ||
sortingDirection: sorting.direction, | ||
pagingPage: paging.page, | ||
pagingItemsPerPage: paging.itemsPerPage | ||
} | ||
}); | ||
//console.log(data); | ||
this.serverTotalItems = data.serverTotalItems; | ||
this.items = data.items; |
//this.searchTerm = searchTerm; //this.searchFilter = searchFilter; //this.filtering = filtering; //this.sorting = sorting; //this.paging = paging; } | | create-item | @create-item="(item, itemIndex) => onCreateItem(item, itemIndex)" 事件參數: item: 資料來源項目 itemIndex: 新增資料來源的索引位置 | 於新增資料來源項目時觸發 ex: async onCreateItem(item, index) { this.items.splice(index, 0, item); this.inlineEditItem = Object.assign({}, item); } | | destroy-items | @destroy-items="(selected) => onDestroyItems(selected)" 事件參數: selected: 已勾選的資料列識別鍵 | 於刪除勾選時觸發 | | change-filtering | @change-filtering="({ searchTerm, searchFilter }) => onChangeFiltering({ searchTerm, searchFilter })" 事件參數: searchTerm: 搜尋關鍵詞 searchFilter: 搜尋篩選欄位物件 | 於篩選時觸發 | | change-sorting | @change-sorting="({ key, direction }) => onChangeSorting({ key, direction })" 事件參數: key: 排序欄位屬性鍵 direction: 排序方向(asc, desc) | 於排序時觸發 | | change-paging | @change-paging="({ page, itemsPerPage }) => onChangePaging({ page, itemsPerPage })" 事件參數: page: 頁碼 itemsPerPage: 每頁幾筆(小於等於0者不分頁) | 於分頁時觸發 | | validate-item-failed | @validate-item-failed="({ errors, item }) => onValidateItemFailed({ errors, item })" 事件參數: { errors, item } errors: 錯誤資訊物件({ key: (欄位識別鍵), errors: (錯誤訊息陣列), errMsg: (以分隔符號串接之錯誤訊息) }) item: 行內編輯項目 | 於驗證行內編輯項目失敗時觸發 | | save-create-item | @save-create-item="(item) => onSaveCreateItem(item)" 事件參數: item: 行內編輯項目 | 於儲存新增行內編輯項目時觸發(已通過驗證) | | save-update-item | @save-update-item="(item) => onSaveUpdateItem(item)" 事件參數: item: 行內編輯項目 | 於儲存編輯行內編輯項目時觸發(已通過驗證) | | cancel-item | @cancel-item="(item) => onCancelItem(item)" 事件參數: item: 行內編輯項目 | 於取消行內編輯項目時觸發 | | read-item | @read-item="(item) => onReadItem(item)" 事件參數: item: 資料來源項目 | 於檢視資料來源項目時觸發 | | update-item | @update-item="(item) => onUpdateItem(item)" 事件參數: item: 資料來源項目 | 於編輯資料來源項目時觸發 | | delete-item | @delete-item="(item) => onDeleteItem(item)" 事件參數: item: 資料來源項目 | 於刪除資料來源項目時觸發 |
名稱 | slotProps | 說明 |
---|---|---|
toolbar-left-before | compData: $data | 工具列左側前方的插槽 |
toolbar-left-after | compData: $data | 工具列左側後方的插槽 |
toolbar-right-before | compData: $data | 工具列右側前方的插槽 |
toolbar-right-after | compData: $data | 工具列右側後方的插槽 |
menubar-left-before | compData: $data | 選單列左側前方的插槽 |
menubar-left-after | compData: $data | 選單列左側後方的插槽 |
menubar-right-before | compData: $data | 選單列右側前方的插槽 |
menubar-right-after | compData: $data | 選單列右側後方的插槽 |
pagebar-left-before | compData: $data | 分頁列左側前方的插槽 |
pagebar-left-after | compData: $data | 分頁列左側後方的插槽 |
pagebar-right-before | compData: $data | 分頁列右側前方的插槽 |
pagebar-right-after | compData: $data | 分頁列右側後方的插槽 |
edit-[columnKey] | item: 行內編輯項目 | |
column: 欄位定義 | 欄位的編輯模式插槽 | |
item-[columnKey] | item: 資料來源項目 | |
column: 欄位定義 | 欄位的顯示模式插槽 |
方法函式原型 | 參數 | 回傳值 | 說明 |
---|---|---|---|
doFilter(searchTerm, searchFilter) | searchTerm: 搜尋關鍵詞 | ||
searchFilter: 搜尋篩選欄位物件 | 執行篩選 | ||
doSort(key, direction) | key: 排序欄位屬性鍵 | ||
direction: 排序方向(asc, desc) | 執行排序 | ||
doPage(page, itemsPerPage) | page: 頁碼 | ||
itemsPerPage: 每頁幾筆(小於等於0者不分頁) | 執行分頁 | ||
getExportParams() | 匯出參數 | ||
{ exportItems, exportColumns } | 取得匯出參數 | ||
exportItems: 匯出資料來源 | |||
exportColumns: 匯出欄位({ key, header }) | |||
doExportExcel() | 匯出Excel | ||
doExportPdf() | 匯出Pdf | ||
getProcessedItems() | 已處理資料來源 | 取得已處理資料來源(已篩選、已排序) | |
getPagedItems() | 已處理並分頁後的資料來源 | 已處理並分頁後的資料來源(已篩選、已排序、已分頁) | |
validateInlineEditItem() | 是否通過驗證 | 驗證行內編輯項目 | |
clearErrors() | 清除錯誤訊息 | ||
getErrors() | 錯誤資訊物件 | ||
{ key, errors, errMsg } | |||
key: (欄位識別鍵) | |||
errors: (錯誤訊息陣列) | |||
errMsg: (以分隔符號串接之錯誤訊息) | 取得錯誤資訊物件 |
| --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- |
| --- | --- | --- |
// 預設輸入控制項資料類型
const defaultControlTypes = {
[String]: 'input',
[Number]: 'input',
[Boolean]: 'checkbox',
[Array]: 'checkboxlist',
[Date]: 'input'
};
// 適用資料類型
const controlAllowedDataTypes = {
input: [String, Number, Date],
select: [String, Number],
radiobuttonlist: [String, Number],
checkbox: [Boolean, String, Number],
checkboxlist: [Array],
textarea: [String]
};