|
|
// 分页,分页几乎每个列表页面都会存在,代码的重合度很高,所以提出来了
|
|
|
const pageMixins = {
|
|
|
data () {
|
|
|
return {
|
|
|
// 当前页
|
|
|
current: 1,
|
|
|
// 每页大小
|
|
|
size: 10,
|
|
|
// 总页数
|
|
|
totalPage: 0,
|
|
|
// 总数据条数
|
|
|
totalCount: 0,
|
|
|
prevText: '',
|
|
|
nextText: '',
|
|
|
// 排序相关
|
|
|
sortForm: {
|
|
|
/**
|
|
|
* key: 字段名称
|
|
|
* value: descending 、ascending、''
|
|
|
*/
|
|
|
sortFieldMap: {},
|
|
|
// 定义排序字段的排序,如果不支持多个字段同时排序,可以传入一个即可
|
|
|
sortFieldOrderList: [],
|
|
|
// 缓存列和类名信息,方便后面清空排序字段信息
|
|
|
columnCacheMap: {}
|
|
|
},
|
|
|
// 允许多字段排序
|
|
|
enableMultiFieldOrder: false,
|
|
|
sortFieldHeaderTipMap: {}
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
'sortForm.sortFieldMap': {
|
|
|
handler (sortFieldMap, oldV) {
|
|
|
for (const columnName in sortFieldMap) {
|
|
|
const order = sortFieldMap[columnName]
|
|
|
if (!order) {
|
|
|
this.$set(this.sortFieldHeaderTipMap, columnName, '点击升序')
|
|
|
} else if (order === 'ascending') {
|
|
|
this.$set(this.sortFieldHeaderTipMap, columnName, '点击降序')
|
|
|
} else if (order === 'descending') {
|
|
|
this.$set(this.sortFieldHeaderTipMap, columnName, '取消排序')
|
|
|
} else {
|
|
|
this.$set(this.sortFieldHeaderTipMap, columnName, '点击升序')
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
deep: true
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
/**
|
|
|
* 初始化排序信息
|
|
|
* @param sortFieldOrderList 排序字段的优先级
|
|
|
* @param defaultSortFieldMap 默认排序字段信息 descending: 降序,ascending:升序
|
|
|
*/
|
|
|
initSortField (sortFieldOrderList = [], defaultSortFieldMap = {}) {
|
|
|
if (defaultSortFieldMap) {
|
|
|
for (const field in defaultSortFieldMap) {
|
|
|
const order = defaultSortFieldMap[field]
|
|
|
this.$set(this.sortForm.sortFieldMap, field, order)
|
|
|
}
|
|
|
}
|
|
|
for (let i = 0; i < sortFieldOrderList.length; i++) {
|
|
|
const field = sortFieldOrderList[i]
|
|
|
const order = this.sortForm.sortFieldMap[field]
|
|
|
if (!order) {
|
|
|
// 解决未设置默认排序值字段提示为空
|
|
|
this.$set(this.sortForm.sortFieldMap, field, '')
|
|
|
}
|
|
|
}
|
|
|
this.sortForm.sortFieldOrderList = sortFieldOrderList
|
|
|
},
|
|
|
// 排序状态记录并激活,否则和页面上的排序对不上
|
|
|
sortStyle ({ row, column, rowIndex, columnIndex }) {
|
|
|
const sortColumnOrder = this.sortForm.sortFieldMap[column.property]
|
|
|
if (sortColumnOrder) {
|
|
|
column.order = sortColumnOrder
|
|
|
}
|
|
|
this.sortForm.columnCacheMap[column.property] = column
|
|
|
},
|
|
|
// 对应表格的 @sort-change 事件,当用户改变了排序的状态时触发
|
|
|
reSort (column) {
|
|
|
if (!this.enableMultiFieldOrder) {
|
|
|
// 不允许多个字段同时排序,清空之前的排序信息
|
|
|
for (const field in this.sortForm.columnCacheMap) {
|
|
|
const column = this.sortForm.columnCacheMap[field]
|
|
|
column.order = ''
|
|
|
}
|
|
|
for (const field in this.sortForm.sortFieldMap) {
|
|
|
this.sortForm.sortFieldMap[field] = ''
|
|
|
}
|
|
|
}
|
|
|
this.$set(this.sortForm.sortFieldMap, column.prop, column.order)
|
|
|
this.reSearch()
|
|
|
},
|
|
|
reSearch () {
|
|
|
this.current = 1
|
|
|
this.getDataList()
|
|
|
},
|
|
|
getDataList () {
|
|
|
console.error('你应该重写getDataList方法')
|
|
|
},
|
|
|
// 每页大小改变触发
|
|
|
sizeChangeHandle (val) {
|
|
|
this.size = val
|
|
|
this.current = 1
|
|
|
this.getDataList()
|
|
|
},
|
|
|
// 当前页数改变
|
|
|
currentChangeHandle (val) {
|
|
|
this.current = val
|
|
|
this.getDataList()
|
|
|
const bsScrollbarEl = document.querySelector('.bs-scrollbar') || {}
|
|
|
const tableBodyWrapperEl = document.querySelector('.el-table__body-wrapper') || {}
|
|
|
this.$nextTick(() => {
|
|
|
if (bsScrollbarEl) {
|
|
|
// 类名bs-scrollbar的元素滚动到顶部
|
|
|
bsScrollbarEl.scrollTop = 0
|
|
|
}
|
|
|
if (tableBodyWrapperEl) {
|
|
|
// 表格滚动到顶部
|
|
|
tableBodyWrapperEl.scrollTop = 0
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
getSortForm () {
|
|
|
return {
|
|
|
sortFieldMap: this.sortForm.sortFieldMap,
|
|
|
sortFieldOrderList: this.sortForm.sortFieldOrderList
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
export { pageMixins }
|