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