| 名稱及修飾詞 | 類型 | 預設值 | 約束 | 說明 |
|---|---|---|---|---|
| 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]
};