zoukankan      html  css  js  c++  java
  • vxe-grid数据代理

    vxe-grid高级表格:是一个包含表单、工具栏、vxe-table基础表格、分页等全功能的组件
    数据代理:

    1. 通过配置 proxy-config 启用数据代理将不需要再主动发送请求,由表格代理增删改查的相关调用逻辑,只需要配好了对应的接口即可自动渲染
    2. 通过配置 pager-config参数开启分页功能,分页情况下默认读取响应结果中的 page.total 和 result 熟悉。可以通过 props 修改

    相关DEMO入口

    数据代理 的基本使用

    仅使用 ajax 中的 query 进行查询数据,启用数据代理后,表格会主动发起请求。
    可通过 this.$refs.xGrid.comitProxy('query') 进行表格刷新

    <template>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
    </template>
    
    <script>
    export default {
      data() {
        return {
          gridOptions: {
    	// 数据代理配置
    	proxyConfig: {
    	  ajax: { 
    	    // 数据查询
    	    query: ({ options, page, sort, filters }) => {
    	      return fetch('url', { method: "GET"}).then(response => response.data)							
    	    }
    	  }
            },
    	// columns 
    	columns: [
    	  { type: 'seq',  60 },
    	  { field: 'name', title: '名称' },
    	  { filed: 'nickname', title: '昵称' }
    	]
          }
        }
      }
    }
    </script>
    

    封装 vxe-grid 数据代理

    通过设置全局数据代理拦截方法实现,vxe-grid 数据代理。封装了查询、删除、保存请求

    import XEUtils from 'xe-utils'
    import VXETable from 'vxe-table'
    import axios from 'axios'
    
    VXETable.setup({
      grid: {
        proxyConfig: {
          // 查询
          beforeQuery ({ options, page, sort, filters }) {
            // 处理排序条件
            let formData = {
              sort: sort.property,
              order: sort.order
            }
            // 处理筛选条件
            filters.forEach(({ property, values }) => {
              formData[property] = values.join(',')
            })
            let ajaxOpts = Object.assign({ method: 'get', params: formData }, XEUtils.isString(options) ? { url: options } : options)
            if (page) {
              ajaxOpts.url = XEUtils.template(ajaxOpts.url, { page })
            }
            return axios(ajaxOpts).then(response => response.data)
          },
          // 删除
          beforeDelete ({ options, body }) {
            let ajaxOpts = Object.assign({ method: 'post', data: body }, XEUtils.isString(options) ? { url: options } : options)
            return axios(ajaxOpts).then(response => response.data)
          },
          // 保存
          beforeSave ({ options, body }) {
            let ajaxOpts = Object.assign({ method: 'post', data: body }, XEUtils.isString(options) ? { url: options } : options)
            return axios(ajaxOpts).then(response => response.data)
          }
        }
      }
    })
    

    通过配置快速渲染一个全功能的表格

    <vxe-grid v-bind="gridOptions"></vxe-grid>
    
    export default {
    	data () {
    		return {
    			gridOptions: {
    				// 配置列信息
    				columns: [
    					{ type: 'seq', title: "序号",  60 },
    					{ field: 'name', title: '姓名', editRender: { name: 'input'} }
    				],
    				// 配置分页信息
    				pageConfig: {
    					total: 0,
                    	currentPage: 1,
                    	pageSize: 10,
                    	layouts: ['PrevJump', 'PrevPage', 'JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total'],
                    	pageSizes: [10,15,20,50,100]
    				},
    				// 配置数据代理
    				proxyConfig: {
    					// 启用动态序号代理,每一页的序号会根据当前页数变化
    					seq: true, 
    					// 启用排序代理,当点击排序时会自动触发 query 行为
    					sort: true,
    					// 启用筛选代理,当点击筛选时会自动触发 query 行为
    					filter: true,
    					// 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为
    					form: true,
    					// 对应响应结果 { result: [], page: { total: 100 } }
    					props: {
                            result: 'result', // 配置响应结果列表字段
                            total: 'page.total' // 配置响应结果总页数字段
                        },
                        ajax: {
                            query: {
                              url: '/api/user/page/list/{{page.pageSize}}/{{page.currentPage}}'
                            },
                            delete: {
                              url: '/api/user/delete'
                            },
                            save: {
                              url: '/api/user/save'
                            }
                            // 还可以自定义更多参数
                            // save: {
                            //	url: '/api/user/save',
                            //	method: 'post',
                            //	headers: { 'x-token': 'xxoo' }
                            //}
                        } 
    				},
    				// 配置工具栏
                    toolbar: {
                        buttons: [
                          { code: 'insert_actived', name: 'Add' },
                          { code: 'delete_selection', name: 'Delete' },
                          { code: 'save', name: 'Save' }
                        ],
                        refresh: true, // 是否显示刷新按钮
                        custom: true // 是否显示自定义列设置按钮
                    } 
    			}
    		}
    	}
    }
    
  • 相关阅读:
    python 全局变量与局部变量
    Python 百分号字符串拼接
    Python集合的基本操作
    sorted by value in dict python
    gVim vundle
    vim config
    vim move the cursor in a long sentence
    步步为营-37-自动生成数据库连接字符串
    步步为营-36-ADO.Net简介
    步步为营-35-SQL语言基础
  • 原文地址:https://www.cnblogs.com/yuxi2018/p/15109840.html
Copyright © 2011-2022 走看看