import { reactive } from 'vue' import { serverApi, requestPayload, buildParameter, ObjectInterface } from '../../script/index' class Paging { el: ObjectInterface nodeKey: string constructor (el: ObjectInterface, nodeKey: string) { this.queryTreeChild = this.queryTreeChild.bind(this) this.el = el this.nodeKey = nodeKey // console.log(el) } toggleLoad (type: string, list: ObjectInterface[]) { // 添加或者删除按钮 是否是加载更多 if (type === 'add') { list.push({ [this.nodeKey]: 'load' }) } else { list.pop() } } clickMore (data: ObjectInterface, node: ObjectInterface) { // 点击加载更多按钮 if (data[this.nodeKey] === 'load') { // 如果点击的是加载更多的按钮 this.toggleLoad('pop', node.parent.loadList) node.parent.params.pageNum ? node.parent.params.pageNum++ : node.parent.params.offset += node.parent.params.limit this.queryTreeChild(node.parent, {}, this.el.loadCurrentApi.api, true, true, node.parent.reqType) } } setNode (node: ObjectInterface, params: ObjectInterface, pageObj: ObjectInterface) { // 设置node参数 if (!node.params) { node.params = Object.assign(pageObj, params) } return Object.assign(node.params, params) } setIsPage (node: ObjectInterface, params: ObjectInterface, type: string, isPage: boolean) { // 设置分页 if (!isPage) return params let handleParams = {} if (!node.reqType) { node.reqType = type } handleParams = requestPayload(this.setNode(node, params, { pageSize: 100, pageNum: 1 })) return handleParams } handleBack (node: ObjectInterface, res: ObjectInterface, isLeaf: boolean) { // 处理返回数据 if (res instanceof Array) { node.resolve(res || []) } else { let list = res.list || res.content || res.data let page = node.params.pageNum || (node.params.offset + node.params.limit) let totalPage = res.totalPage || res.totalElements if (!node.loadList) node.loadList = [] node.loadList.push(...list) if (page < totalPage) { this.toggleLoad('add', node.loadList) } if (isLeaf) { node.loadList.forEach((t: ObjectInterface) => { t.leaf = true }) } node.resolve(node.loadList) } } queryTreeChild (node: ObjectInterface, params: ObjectInterface, api: ObjectInterface, isPage = false, isLeaf = true, type = 'pay') { // 当前node节点 自定义参数 接口 是否分页 是否最后一级 请求方式 this.el.loadCurrentApi.api = api // 当前请求接口 serverApi({ params: this.setIsPage(node, params, type, isPage), interface: api, success: (data: ObjectInterface) => { this.handleBack(node, data, isLeaf) } }) } } export default reactive(Paging)