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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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