在DataEase上支持服务端分页功能(下)

二、前端服务端分页刷新

        前端调用分页接口时,只需要传入chart_id及page即可,pageSize不需要传递,该参数在设计页面设置好后存储在后台数据库中,并以json对象的形式存在,在后端的getPageData实现时通过解析ChartViewDTO对象中的customAtrr属性获得tablePageSize的值,resultMode则是返回ChartViewDTO对象中的resultMode,该值是设计页面设置后存入数据库中的。

frontend 修改文件及代码如下:

1.frontend/src/api/link/index.js(接口定义)

#增加ViewPageInfo接口,在原viewInfo接口的基础上增加了pageNo参数,而分页大小参数则在backend的
getPageData接口实现中从仪表板设计页面的参数对象中解析,这与通常的服务端分页直接从客户端传递分页大小是有差别的。

export function viewPageInfo(id, panelId, data, pageNo) {
  return request({
    url: 'api/link/viewPageDetail/' + id + '/' + panelId + '/' + pageNo,
    method: 'post',
    hideMsg: true,
    data
  })
}

2.frontend/src/api/panel/panel.js(panel接口定义)

#仪表板展示页及详情页面调用的分页接口

export function viewPageData(id, panelId, data, pageNo) {
  return request({
    url: '/chart/view/getPageData/' + id + '/' + panelId + '/' + pageNo,
    method: 'post',
    hideMsg: true,
    data
  })
}

3.frontend/src/api/chart/chart.js(chart接口定义)

#设计页面调用的分页接口

export function ajaxGetPageDataOnly(id, panelId, data, pageNo = 1) {
  return request({
    url: '/chart/view/getPageData/' + id + '/' + panelId + '/' + pageNo,
    method: 'post',
    loading: true,
    hideMsg: true,
    data
  })
}

4.frontend/src/views/chart/view/ChartEdit.vue(chart编辑组件)

#引入定义的分页接口

import { ajaxGetPageDataOnly, post } from '@/api/chart/chart'

#引入事件bus,在点击分页时触发getPageData和getData事件去获取分页数据

import eventBus from '@/components/canvas/utils/eventBus'

#在生命周期函数created中注册getData事件,用于调用vm的getData方法

created() {
    // this.get(this.$store.state.chart.viewId);
    // this.initAreas()
    eventBus.$on('getData', e => {
      console.log('$on getData', e)
      this.getData(e.id, e.page)
    })
  },

#在生命周期函数beforeDestory中销毁getData事件,避免重复调用

beforeDestroy() {
    eventBus.$off('getData')
  },


#calcData(getData, trigger, needRefreshGroup = false, switchType = false) 修改为:
calcData(getData, trigger, needRefreshGroup = false, switchType = false, pageNo = 1) 

#post('/chart/view/calcData/' + this.panelInfo.id, { 修改为:
post('/chart/view/calcPageData/' + this.panelInfo.id + '/' + pageNo, {

#getData(id) { 修改为:
getData(id, page = 1)

#ajaxGetDataOnly(id, this.panelInfo.id, { 修改为:
ajaxGetPageDataOnly(id, this.panelInfo.id, {

#}).then(response => { 修改为:
}, page).then(response => {

5.frontend/src/components/canvas/custom-component/UserView.vue(设计及展示页面组件)

#引入新增的分页接口

import { viewPageData } from '@/api/panel/panel'
import { viewPageInfo } from '@/api/link'

#在created函数中增加getPageData注册,该调用来自两个地方,一个是frontend/src/views/chart/components/ChartComponentS2.vue
另外一个是frontend/src/views/chart/components/table/TableNormal.vue
这里使用click_from进行区分

eventBus.$on('getPageData', e => {
      console.log('$on getPageData', e)
      this.getData(e.id, false, e.page)
      if (e.click_from && e.click_from ==='tableNormal') {
        this.openChartDetailsDialog() //在点击TableNormal中的分页时,将数据到传递UserViewDialog中的TableNormal上
      }
    })

#在beforeDestroy中销毁注册

beforeDestroy() {
    eventBus.$off('getPageData')
  },

#getData(id, cache = true) { 修改为:
getData(id, cache = true, page = 1) {

#let method = viewData 修改为:
let method = viewPageData

#method = viewInfo 修改为:
method = viewPageInfo

#method(id, this.panelInfo.id, requestInfo).then(response => { 修改为:
method(id, this.panelInfo.id, requestInfo, page).then(response => {

6.frontend/src/views/chart/components/ChartComponentS2.vue(设计及展示页面表格组件)

#<span>{{ (chart.data && chart.data.tableRow)?chart.data.tableRow.length:0 }}</span> 修改为:

<span>{{ currentPage.show }}</span>

#引入事件bus

import eventBus from '@/components/canvas/utils/eventBus'

#增加设计页面设置的显示模式resultMode判断(该参数来自于后台数据库配置,在请求获得分页数据时返回)设置数据总数

if (this.chart.resultMode === 'all') {
    this.currentPage.show = this.chart.resultCount
} else {
    #以下为原来的代码,保留
    this.currentPage.show = datas.length
    const pageStart = (this.currentPage.page - 1) * this.currentPage.pageSize
    const pageEnd = pageStart + this.currentPage.pageSize
    datas = datas.slice(pageStart, pageEnd)
}

#在点击分页时,触发getPageData和getData事件,并传入id及page(pageNo)参数
pageClick(val) {
    this.currentPage.page = val
    console.log('pageNo:',val)
    if (this.chart.resultMode === 'all') {
        eventBus.$emit('getPageData', { id: this.chart.id, page: val })
        eventBus.$emit('getData', { id: this.chart.id, page: val })
      }
}

7.frontend/src/views/chart/components/table/TableNormal.vue(详情页面表格组件)

#<span>{{ (chart.data && chart.data.tableRow)?chart.data.tableRow.length:0 }}</span> 修改为:

<span>{{ currentPage.show }}</span>

#增加设计页面设置的显示模式resultMode判断(该参数来自于后台数据库配置,在请求获得分页数据时返回)设置数据总数
if (this.chart.resultMode === 'all') {
   this.currentPage.show = this.chart.resultCount
} else {


#点击分页时触发getPageData事件

pageClick(val) {
   this.currentPage.page = val
   if (this.chart.resultMode === 'all') {
      eventBus.$emit('getPageData', { id: this.chart.id, page: val, click_from: 'tableNormal'})
      }
      this.init()
 },

        至此,在DataEase v1.8.0上增加服务端分页的功能(mysql、dorisdb)完成了,其它数据库的支持需要自行实现。


分享给大家,祝大家520快乐!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值