import { LightningElement, api, track } from 'lwc';
|
|
const dateTableConfig_init = {
|
// 如果存在,则用于行选择的复选框列将被隐藏。
|
hideCheckboxColumn: false,
|
// 指定未排序列的默认排序方向。有效选项包括“ asc”和“ desc”。默认值为“ asc”,用于按升序排序。
|
defaultSortDirection: 'asc',
|
// 指定排序方向。使用onsort事件处理程序对数据进行排序。有效选项包括“ asc”和“ desc”。
|
sortDirection: 'asc',
|
// 控制排序顺序的列字段名。使用onsort事件处理程序对数据进行排序
|
sortedBy: undefined,
|
// 是否后台接口排序
|
sortInterfaces: true,
|
// 搜索列
|
searchColumns: [],
|
// 搜索条件
|
listQuery: {
|
page: 1,
|
limit: 10,
|
sort: "",
|
sortOrder: "",
|
search: ""
|
},
|
// 分页
|
page: {
|
currentPage: 1,
|
total: 0,
|
pageSize: 10
|
},
|
|
}
|
|
export default class BasicDatatable extends LightningElement {
|
@api name;
|
@api idkey = "Id";
|
@api miniheight = "min-height: 250px";
|
@api options = {};
|
// 数据集
|
@api tableData = [];
|
@api tableIsLoding = false;
|
|
connectedCallback(){
|
this.initJzDataTable(this.options);
|
}
|
|
@track dataTableConfig = dateTableConfig_init;
|
|
initJzDataTable(init){
|
let searchParams = {};
|
for(let obj of init.searchColumns){
|
if(obj.value) searchParams[obj.name] = obj.value;
|
}
|
this.refreshDataTable(init);
|
}
|
|
@api
|
refreshDataTable(init){
|
init = init || {};
|
// 定义搜索参数变量
|
let listQuery = {};
|
// 获取搜索信息 将搜索信息放入搜索变量中
|
listQuery = {search: init.searchParams ? encodeURI(JSON.stringify(init.searchParams), 'utf-8') : this.dataTableConfig.listQuery.search};
|
// 获取当前分页信息 将分页信息放入搜索条件中
|
let page = init.page || this.dataTableConfig.page;
|
listQuery = {...listQuery, page: page.currentPage, pageLimit: page.pageSize};
|
// 将排序信息放入搜索条件中
|
listQuery = {...listQuery, sortPlus: init.sortedBy || this.dataTableConfig.sortedBy, sortOrder: init.sortDirection || this.dataTableConfig.sortDirection };
|
// 执行搜索获取数据
|
// let data = await fetchDataHelper(listQuery);
|
const getTableDataEvent = new CustomEvent('gettabledata', {
|
detail: {listQuery: listQuery}
|
});
|
this.dispatchEvent(getTableDataEvent);
|
|
// 将数据返回给表格中
|
this.dataTableConfig = {...this.dataTableConfig, ...init, listQuery: listQuery, page: page};
|
}
|
|
// 点击排序
|
onHandleSort(event) {
|
const { fieldName: sortedBy, sortDirection } = event.detail;
|
if(this.dataTableConfig.sortInterfaces){
|
this.refreshDataTable({sortDirection,sortedBy});
|
} else {
|
const cloneData = [...this.tableData];
|
|
cloneData.sort(this.sortBy(sortedBy, sortDirection === 'asc' ? 1 : -1));
|
this.tableData = cloneData;
|
this.dataTableConfig.sortDirection = sortDirection;
|
this.dataTableConfig.sortedBy = sortedBy;
|
}
|
}
|
|
sortBy(field, reverse, primer) {
|
const key = primer
|
? function(x) {
|
return primer(x[field]);
|
}
|
: function(x) {
|
return x[field];
|
};
|
|
return function(a, b) {
|
a = key(a);
|
b = key(b);
|
return reverse * ((a > b) - (b > a));
|
};
|
}
|
|
get dataPlus(){
|
return this.tableData;
|
}
|
|
get isLoading(){
|
return this.tableIsLoding;
|
}
|
|
selecttionPlus(event){
|
const getSearchParamsEvent = new CustomEvent('rowselection', {
|
detail: {rows:event.detail.selectedRows}
|
});
|
this.dispatchEvent(getSearchParamsEvent);
|
}
|
handleSave(event)
|
{
|
const getSearchParamsEvent = new CustomEvent('save', {
|
detail: {rows:event.detail.draftValues}
|
});
|
this.dispatchEvent(getSearchParamsEvent);
|
}
|
|
}
|