• vbootvben框架实现vxetable筛选渲染filterrender(高级用法)


    vboot-vben框架实现vxe-table筛选渲染(高级用法)

    以【文本筛选】为例,其他筛选同理’

    一、业务页面index.vue

    <template>
        <vxe-table
              border
              height="400"
              :data="tableData">
              <vxe-column type="seq" width="60"></vxe-column>
              <vxe-column field="name" title="文本筛选" :filters="[{data: null}]" :filter-render="{name: 'FilterInput'}"></vxe-column>
              <vxe-column field="role" title="实现条件的筛选" ></vxe-column>
              <vxe-column field="age" title="实现内容的筛选" ></vxe-column>
              <vxe-column field="address" title="实现复杂的筛选" ></vxe-column>
            </vxe-table>
    </template>
    
    
    <script type="ts">
        import { defineComponent, ref } from 'vue'
    
        export default defineComponent({
            setup  () {
                const tableData = ref([
                    { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: '28', address: 'Shenzhen' },
                    { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: '22', address: 'Guangzhou' },
                    { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: '32', address: 'Shanghai' },
                    { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: '23', address: 'Shenzhen' },
                    { id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: '30', address: 'Shanghai' },
                    { id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: '21', address: 'Shenzhen' },
                    { id: 10007, name: 'Test7', role: 'Test', sex: 'Man', age: '29', address: 'Shenzhen' },
                    { id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: '35', address: 'Shenzhen' }
                ])
    
                return {
                    tableData
                }
            }
        })
    </script>

    二、文本筛选模板文件:FilterInput.vue,全路径为:comps/vxe/Filters/FilterInput.vue,(其他模板文件也放在此路径)代码如下:

    <template>
        <div class="my-filter-input">
            <vxe-input type="text" v-model="demo1.option.data" placeholder="支持回车筛选" @keyup="keyupEvent" @input="changeOptionEvent"></vxe-input>
        </div>
    </template>
    
    <script lang="ts">
        import { defineComponent, PropType, reactive } from 'vue'
        import { VxeInputEvents, VxeGlobalRendererHandles } from 'vxe-table'
        export default defineComponent({
            name: 'FilterInput',
            props: {
                params: Object as PropType<VxeGlobalRendererHandles.RenderFilterParams>
            },
            setup (props) {
                const demo1 = reactive({
                    option: null as any
                })
                const load = () => {
                const { params } = props
                if (params) {
                    const { column } = params
                    const option = column.filters[0]
                    demo1.option = option
                }
                }
                const changeOptionEvent = () => {
                    const { params } = props
                    const { option } = demo1
                    if (params && option) {
                        const { $panel } = params
                        const checked = !!option.data
                        $panel.changeOption(null, checked, option)
                    }
                }
                const keyupEvent: VxeInputEvents.Keyup = ({ $event }) => {
                    const { params } = props
                    if (params) {
                        const { $panel } = params
                        if ($event.keyCode === 13) {
                            $panel.confirmFilter($event)
                        }
                    }
                }
                load()
                return {
                    demo1,
                    changeOptionEvent,
                    keyupEvent
                }
            }
        })
    </script>
    
    <style scoped>
        .my-filter-input {
            padding: 10px;
        }
    </style>

    三、全局配置 comps/vxe/index.tsx  (***注意原文件扩展名为ts要改为tsx***)

    此文件实际是main.ts中 setupVxe(app)调用的关于vxe的全局配置文件,加入如下代码:

    import FilterInput from '/@/comps/vxe/Filters/FilterInput.vue';
    
    
    
    
    
    // 创建一个简单的输入框筛选
    VXETable.renderer.add('FilterInput', {
        // 筛选模板
        renderFilter (renderOpts, params) {
            return [<FilterInput params={ params }></FilterInput>]
        },
        // 重置数据方法
        filterResetMethod (params) {
            const { options } = params
            options.forEach((option) => {
                option.data = ''
            })
        },
        // 重置筛选复原方法(当未点击确认时,该选项将被恢复为默认值)
        filterRecoverMethod ({ option }) {
            option.data = ''
        },
        // 筛选方法
        filterMethod (params) {
            const { option, row, column } = params
            const { data } = option
            const cellValue = row[column.property]
            if (cellValue) {
                return cellValue.indexOf(data) > -1
            }
            return false
        }
    })

    其他筛选方法同理,

    四、main.js中VXETable.setup中的配置参数改为false,所有列是否使用服务端筛选,如果设置为 true 则不会对数据进行处理

    filterConfig: {
            remote: false,//所有列是否使用服务端筛选,如果设置为 true 则不会对数据进行处理
            // filterMethod: null
    },

    好了,这样就可以用了

  • 相关阅读:
    FLINK基础(87): DS算子与窗口(1)简介
    Flink实例(三十九):状态管理(十)配置checkpoint
    FLINK基础(112): DS算子与窗口(23)多流转换算子(7)Broadcasting
    Flink实例(三十七):状态管理(八)自定义操作符状态(三)广播状态(Broadcast state)(一) KeyedBroadcastProcessFunction
    Flink实例(三十六):状态管理(七)自定义操作符状态(二)union list state
    关闭firecracker
    Creating Custom rootfs and kernel Images
    Build a single-app rootfs for Firecracker MicroVMs
    由浅入深CrosVM(一)—— 如何在Ubuntu中搭建CrosVM
    Making a Custom MicroVM for AWS Firecracker!
  • 原文地址:https://www.cnblogs.com/wishit/p/16334244.html
Copyright © 2020-2023  润新知