You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.4 KiB
JavaScript

// 分页,分页几乎每个列表页面都会存在,代码的重合度很高,所以提出来了
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 }