npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

obj-table-plus

v2.4.0

Published

基于vxe-table3.x的快速构建表格组件,支持jsx+render函数自定义渲染

Downloads

13

Readme

https://www.npmjs.com/package/obj-table-plus

文档地址 https://objstudio.github.io/docs/

从1.0.10版本起,tabelCols不再需要配置id,如果配置了也会被组件内部生成的id所替换 从1.1.0版本起,tabelCols不再区分diy字段,将vxe原生的type与组件的type进行合并。

一、快速上手

0、通过npm安装

npm install obj-table-plus --save

1、引入组件并注册

import Vue from 'vue'
//引入必要的vxe-table 具体配置请查看官方文档
import 'xe-utils'
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
Vue.use(VXETable)
//引入必要的elementUI 具体配置请查看官方文档
import ElementUI from 'element-ui'; 
Vue.use(ElementUI);

import objTablePlus from 'obj-table-plus';
Vue.use(objTablePlus);

如果要使用jsx功能,请在babel.config.js中配置

//Babel 7+. Babel 6 支持, 使用vuejs/babel-plugin-transform-vue-jsx
//Vue 3支持使用@ant-design-vue/babel-plugin-jsx
module.exports = {
    //presets中的插件用于配置语法,仅支持vue2.6
    presets: [
        //脚手架集成jsx增强语法
        '@vue/cli-plugin-babel/preset',
        [
            //支持jsx
            '@vue/babel-preset-jsx',
            { 
                'injectH': false 
            }
        ]
    ]
}

项目依赖

//vue2官方表示:npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props --save
"@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
"@vue/babel-preset-jsx": "^1.2.4"

2、添加表格组件必要参数如下:

(1) tableData:[
  {userId:"233",userName:"小明",userGender:"男",userAge:18},
  ...
  // 树型 其他的看文档中有关于tableData的参数 https://xuliangzhan_admin.gitee.io/vxe-table
  {userId:"234",userName:"小红",userGender:"女",userAge:19,children:[{...}]},
]
(2) tabelCols:[
    { id: "8", field: "createNumber",title:"生产批号", width: 120 },
    { id: "2", field: "patternCreateTime",title:"款号", width: 150 },
    ...
    // 具体参考文档中的 <vxe-column/> 属性
]
*(3)tableProp 参考文档中关于<vxe-table/> 的属性
*(4)tableEvent {click:this.funcA,tap:this.funcB} 具体事件参中的<vxe-table/> 的事件

示例代码:

  1. 朴素表格——极致简单的表格

    <template>
    <obj-table-plus
                    ref="oTable"
                    @query="queryList"
                    v-model="tableData"
                    :tableCols="tableCols"
                    >
        </obj-table-plus>
    </template>
    <script>
        export default{
            data(){
                return {
                    //表格数据
                    tableData:[],
                    //定义表格结构
                    tableCols:[
                        { id: "1", field: "name",title:"姓名", width: 120 },
                        { id: "2", field: "age",title:"年龄", width: 120 },
                        { id: "3", field: "gender",title:"性别", width: 120 },
                        { id: "4", field: "phone",title:"联系电话", width: 120 }
                    ]
                }
            },
            methods:{
                queryList(pageNo,pageSize){
                    request(pageNo,pageSize)
                        .then(res=>{
                        this.$refs.oTable.complete(res.list,res.total/*此处要传入一个数据量总数*/);
                    })
                        .catch(err=>{
                        this.$refs.oTable.complete(false);
                    })
                }
            }
        }
    </script>
  2. 自定义表格——携带自定义参数、jsx语法

    <template>
    <obj-table-plus
                    ref="oTable"
                    @query="queryList"
                    v-model="tableData"
                    :tableCols="tableCols"
                    :tableProp="tableProp"
                    :tableEvent="tableEvent"
                    >
        </obj-table-plus>
    </template>
    <script>
        export default{
            data(){
                return {
                    //表格数据
                    tableData:[],
                    //定义表格结构
                    tableCols:[
                        { id: "1", field: "name",title:"姓名", width: 120 },
                        { id: "2", field: "age",title:"年龄", width: 120 },
                        { id: "3", field: "gender",title:"性别", width: 120 },
                        { id: "4", field: "phone",title:"联系电话", width: 120 },
                        //自定义表格内容
                        {
                            id:"5",
                            field:"status",
                            title:"状态",
                            diy:true,//启用自定义渲染
                            type:"jsx",//类型是jsx渲染
                            render:({row})=>{
                                return (
                                	<el-button type={row.status==0?'danger':'primary'}>{row.status==0?'异常':'正常'}</el-button>
                                )
                            }
                        }
                    ],
                    //表格参数
                    tableProp:{
                        "auto-resize": true,
                        border: true,
                        "row-id": "id",
                        //带多选
                        "checkbox-config": { labelField: "", checkRowKeys: [10053, 23666] },
                        "max-height": "400px",
                        "highlight-current-row": true,
                        "show-overflow": true,
                    },
                    //表格事件
                    tableEvent:{
                        "checkbox-change": this.selectChangeEvent,
                    }
                }
            },
            methods:{
                queryList(pageNo,pageSize){
                    request(pageNo,pageSize)
                        .then(res=>{
                        this.$refs.oTable.complete(res.list,res.total/*此处要传入一个数据量总数*/);
                    })
                        .catch(err=>{
                        this.$refs.oTable.complete(false);
                    })
                },
                selectChangeEvent(e){
                    // TODO...选中事件
                }
            }
        }
    </script>
  3. 多级表格

    <template>
    <obj-table-plus
                    ref="oTable"
                    @query="queryList"
                    v-model="tableData"
                    :tableCols="tableCols"
                    :tableProp="tableProp"
                    :tableEvent="tableEvent"
                    >
        </obj-table-plus>
    </template>
    <script>
        export default{
            data(){
                return {
                    //表格数据
                    tableData:[],
                    //定义表格结构
                    tableCols:[
                        { id: "1", field: "name",title:"姓名", width: 120 },
                        { id: "2", field: "age",title:"年龄", width: 120 },
                        { id: "3", field: "gender",title:"性别", width: 120 },
                        { id: "4", field: "phone",title:"联系电话", width: 120 },
                        {id:"5",
                         field:"location",
                         title:"所在地区",
                         childTableCols:[
                            {id:"51",field:"province",title:"省份"},
                            {id:"52",field:"city",title:"城市"},
                            {id:"53",field:"area",title:"区"},
                          ]
                        }
                    ],
                    //表格参数
                    tableProp:{
                        "auto-resize": true,
                        border: true,
                        "row-id": "id",
                        //带多选
                        "checkbox-config": { labelField: "", checkRowKeys: [10053, 23666] },
                        "max-height": "400px",
                        "highlight-current-row": true,
                        "show-overflow": true,
                    },
                    //表格事件
                    tableEvent:{
                        "checkbox-change": this.selectChangeEvent,
                    }
                }
            },
            methods:{
                queryList(pageNo,pageSize){
                    request(pageNo,pageSize)
                        .then(res=>{
                        /*注意:这边的list要对应上children才可以正确渲染
                        具体参考vxe-table文档https://vxetable.cn/v3/#/table/grid/group*/
                        this.$refs.oTable.complete(res.list,res.total/*此处要传入一个数据量总数*/);
                    })
                        .catch(err=>{
                        this.$refs.oTable.complete(false);
                    })
                },
                selectChangeEvent(e){
                    // TODO...选中事件
                }
            }
        }
    </script>

3、表格可选参数/插槽

(1)tableHandles 基于elementUI的表格操作按钮
(2)slot insert 表格上插槽 一般用于插入一个表单来进行检索

4、全局配置

在src目录下创建config文件夹,再config文件夹下创建obj-table.config.js作为配置文件,可以根据不同的项目自定义默认配置

module.exports={
    //对应tableProp的默认值
    'table-prop':{
        "auto-resize": true,
        border: true,
        "row-id": "id",
        //带多选
        "checkbox-config": { labelField: "", checkRowKeys: [10053, 23666] },
        "highlight-current-row": true,
        "show-overflow": true,
        "tree-config": { children: "children" },
    },
    //工具栏配置
    'toolbar-prop':{custom:true},
    //是否自动查询
    'enable-auto-query':false,
    //是否分页
    'is-pagination':false
}

二、Props

| 参数 | 说明 | 类型 | 默认值 | 可选值 | | ------------ | ------------ | ------------- | ------ | ------ | | tableData | 表格内容数据 | Array | [] | | | tableCols | 表格列的配置 | Array | [] | | | tableProp | 表格配置项 | Object | {} | | | tableEvent | 表格事件配置 | Object | {} | | | toolbarProp | 工具栏配置 | Object | {} | | | toolbarEvent | 工具栏事件 | Object | {} | | | isPagination | 是否分页 | Boolean | true | false |

三 、Method

| 方法名 | 说明 | 参数 | | ------ | -------- | -------------------------------- | | query | 请求参数 | 返回一个分页信息 pageNo,pageSize | | | | | | | | |

四、模板示例

敬请期待。。。

🎉 结束语

👋 我们需要你的贡献

我们深知它还有非常大的完善空间,所以我们始终欢迎你的贡献。

👣 如何贡献

可以通过提交 Issue 和 PR 的方式对「obj-table-plus」做出贡献或是提出需求,更详尽的步骤可以参考贡献指南

创业路上的荆棘

第一章:梦想起航

在一个平静的小镇上,林枫是个普通的年轻人。他一直怀揣着创业的梦想,希望有一天能够改变自己的命运,为家乡带来繁荣。每天,他在家中的小书房里研究市场,学习各种商业知识。他的目标是创办一家科技公司,专注于智能家居设备。

一天,林枫决定不再等待,便把自己的想法告诉了他的好友李明。李明是个技术天才,听了林枫的计划后,他眼中闪烁着兴奋的光芒:“我早就想做点什么了,就算失败了,也比现在强!”

第二章:起步困难

两人凑了点钱,租了一间简陋的办公室,开始了他们的创业之旅。然而,创业的道路并不像他们想象中那样平坦。他们遇到了第一个难题:资金不足。他们所有的积蓄很快就花光了,办公室的租金和设备的费用让他们捉襟见肘。

为了筹集资金,林枫和李明决定找投资人。可是,一个接一个的投资人都对他们的项目不感兴趣,甚至有人直言不讳地说:“你们的想法太天真了,这个市场早已被巨头们垄断,你们根本没有机会。”

第三章:迎难而上

面对巨大的压力和不断的挫折,林枫并没有放弃。他每天工作到深夜,不断优化他们的产品设计。他相信,只要他们的产品足够优秀,就一定能打动投资人。

就在这时,一个意外的机会出现了。林枫在一次创业者聚会上结识了一位成功的企业家张总。张总对智能家居设备非常感兴趣,听了林枫的介绍后,他愿意给他们一次展示的机会。

第四章:关键时刻

展示的那一天,林枫和李明紧张得手心冒汗。他们准备了数月的努力就在这一刻。然而,演示过程中突然出现了技术故障,设备无法正常运作。张总皱起了眉头,似乎失去了兴趣。

林枫深吸了一口气,他不能让机会就这样溜走。他走上前去,冷静地解释了设备的原理,并且诚恳地道歉:“这只是暂时的问题,我们会马上解决它。请给我们一点时间,我们一定会让您满意。”

张总看着林枫坚定的眼神,点了点头:“好,我给你们一周的时间。”

第五章:峰回路转

林枫和李明连夜加班,终于在一周内解决了所有问题。再次展示时,设备完美地运行了。张总满意地点点头:“我看到了你们的潜力,我决定投资你们。”

有了资金支持,林枫和李明的公司迅速发展起来。虽然前进的道路依然充满挑战,但他们已经不再畏惧。正如林枫常说的:“创业之路注定艰难,但只要我们不放弃,就一定能看到希望的曙光。”

第六章:未来可期

在经历了无数次的失败和挫折后,林枫和李明终于迎来了成功。他们的智能家居设备逐渐占据市场,并且获得了用户的一致好评。他们不仅实现了自己的梦想,也为家乡带来了新的希望。

林枫站在新办公室的窗前,看着远处的天空,心中充满了感慨:“这只是开始,未来的路还很长。无论遇到多少困难,我们都会继续前行。”

随着时间的推移,林枫和李明的公司不断壮大,成为了行业中的佼佼者。他们的故事也激励了无数年轻人,让更多人勇敢追逐自己的梦想。正如林枫所说:“只要心中有梦想,脚下的路就会一直延伸。”