• Stars
    star
    486
  • Rank 90,527 (Top 2 %)
  • Language Vue
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🥘Base on element-ui, makes crud easily

el-data-table

Build Status NPM Download NPM Version NPM License PRs Welcome Automated Release Notes by gren

Auto requesting by axios, supports pagination, tree data structure, custom search, custom operation column, which makes rest api easily👏

The table uses @femessage/el-form-renderer to render form.

中文文档

Table of Contents

Introduction

CRUD

el-data-table is created to solve business problems, so CRUD logic is set inside.
For example, to develop user api, suppose its relative path like this:

/api/v1/users

The restful CRUD api should be:

  • Retrieve
GET /api/v1/users?page=1&size=10

default data structure

{
  "code":0,
  "msg":"ok",
  "payload":{
    "content":[], // dataPath
    "totalElements":2, // totalPath
  }
}

You can customize dataPath/totalPath.

If hasPagination=false, default dataPath is payload

  • Create
POST / api / v1 / users
  • Update
PUT /api/v1/users/:id
  • Delete
DELETE /api/v1/users/:id

Then only need to use the following code to complete CRUD functions

<template>
  <el-data-table v-bind="tableConfig"></el-data-table>
</template>
<script>
export default {
  data() {
    return {
      tableConfig: {
        url: '/example/users',
        columns: [
          {
            prop: 'name',
            label: '用户名'
          }
        ],
        searchForm: [
          {
            type: 'input',
            id: 'name',
            label: '用户名',
            el: {
              placeholder: '请输入'
            }
          }
        ],
        form: [
          {
            type: 'input',
            id: 'name',
            label: '用户名',
            el: {
              placeholder: '请输入'
            },
            rules: [
              {
                required: true,
                message: '请输入用户名',
                trigger: 'blur'
              }
            ]
          }
        ]
      }
    }
  }
}
</script>

The results are as follows:

  • Retrieve

  • Create

  • Update

  • Delete

Back to Top

Data Driven

Moving the content of the template to the script means that the template can be reduced and js can be extracted to another file to reuse. At the same time, the data in js is actually a piece of json, this means code generation tool can help.



9.jpeg

Back to Top

Why

Why do you create el-data-table based on el-table of element-ui?

I often hear the following sounds:

  1. el-table can cover most scenarios without extended requirements
  2. wrap up so many things, it's heavy and high coupling
  3. bound with too many business logic, it's not flexible; business logic should handle by developers

First of all, I have to say, el-table is really flexible, but when implementing paging requests, only el-table is not enough, and the el-pagination component needs to be combined. Most of the content of paging processing is repeated. Without a high level business component, we get duplicate code everywhere.

In fact, in the admin or dashboard web app, there are many CRUD operations, using restful API. It is possible to use only one url to make a component to complete CRUD functions.

Secondly, many experienced developers think that components are the more flexible the better.

However, for the "newbees" who lack of experience, they are not familiar with common business scenarios. Some basic operations, like form validation, space filtering, adding loading, exception handling, they may forget, which result in bugs.

For front-line business developers, in the face of endless developing task, in fact, they don't want to deal with repeated business logic. they just want to free their hands and get off work early.

In such situation, el-data-table was born.

Back to Top

Feature

  • Use configuration to call restful api to complete CRUD functions
  • Support table display tree structure data
  • Bound with pagination logic
  • Support custom column buttons, and custom operation functions
  • Support saving query on url, which can resotre search status after history.go(-1) or location.reload()

Back to Top

Links

Back to Top

Install

Encourage using Yarn to install

yarn add @femessage/el-data-table

Back to Top

Quick Start

Global Register Component

This is for minification reason: in this way building your app, webpack or other bundler just bundle the dependencies into one vendor for all pages which using this component, instead of one vendor for one page

import Vue from 'vue'
// register component and loading directive
import ElDataTable from '@femessage/el-data-table'
import ElFormRenderer from '@femessage/el-form-renderer'
import {
  Button,
  Dialog,
  Form,
  FormItem,
  Loading,
  Pagination,
  Table,
  TableColumn,
  Message,
  MessageBox
} from 'element-ui'
Vue.use(Button)
Vue.use(Dialog)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Loading.directive)
Vue.use(Pagination)
Vue.use(Table)
Vue.use(TableColumn)
Vue.component('el-form-renderer', ElFormRenderer)
Vue.component('el-data-table', ElDataTable)
// to show confirm before delete
Vue.prototype.$confirm = MessageBox.confirm
// show tips
Vue.prototype.$message = Message
// if the table component cannot access `this.$axios`, it cannot send request
import axios from 'axios'
Vue.prototype.$axios = axios

Template

<template>
  <el-data-table></el-data-table>
</template>

Back to Top

Reference

Back to Top

Contributing

For those who are interested in contributing to this project, such as:

  • report a bug
  • request new feature
  • fix a bug
  • implement a new feature

Please refer to our contributing guide.

Back to Top

Contributors

Thanks goes to these wonderful people (emoji key):


levy

💻 👀 📖 🚇 🤔

Donald Shen

💻 ⚠️ 📖

MiffyCooper

💻 📖

Huanfeng Chen

💻

EVILLT

💻 🐛

Alvin

💻 🐛

Han

💻 🐛 📖

kunzhijia

💻 🔧 💡

Edgar

💻 🐛

Barretem

💻

阿禹。

📖

lujunwei

💻

cjf

🐛 💻

Jack-rainbow

🐛

ColMugX

💻

snowlocked

💻 📖

Sponge

🐛 💻

4Ark

💻 📖

Htongbing

💻

PPPenny

💻

PopupDialog

🐛

Jogiter

💻

yolofit

🐛

huazaili

🐛

This project follows the all-contributors specification. Contributions of any kind welcome!

License

MIT

Back to Top

More Repositories

1

el-form-renderer

🎩A data-driven dynamic and complex form solution
JavaScript
231
star
2

nuxt-micro-frontend

🎳Nuxt module for micro-frontend solution
JavaScript
121
star
3

log-viewer

💻View terminal logs in browser
JavaScript
110
star
4

v-gantt

📊Gantt chart
Vue
101
star
5

dique

🐦移动端语雀,你的掌上知识库
Dart
70
star
6

v-img

📸Use webp and lazyload images
JavaScript
48
star
7

hire

🤝 Join us
JavaScript
47
star
8

create-nuxt-app

⚡️Create deepexi style nuxt app in seconds
JavaScript
44
star
9

el-data-tree

🌴Base on element-ui, makes tree component crud easily
Vue
29
star
10

update-popup

💬Display an update message at right bottom
JavaScript
24
star
11

upload-to-ali

☁️Upload to ali-oss easily
Vue
21
star
12

v-editor

📝Write md or rich text easily
JavaScript
21
star
13

data-list

📜Load more list items easily
Vue
16
star
14

el-select-area

🇨🇳Chinese area select component(including Taiwan、Hongkong、Macao)
JavaScript
15
star
15

blog

📖团队博客
JavaScript
13
star
16

app-download

build your app's download page easily
JavaScript
9
star
17

excel-it

⬇️import/export excel easily
JavaScript
9
star
18

el-semver-input

🖊Semantic version input component
Vue
8
star
19

img-preview

🖼Preview your img  easily
JavaScript
7
star
20

dockerize-cli

🐳 Dockerize your web project in one minute
JavaScript
4
star
21

direct-mail

📧Send DirectMail with Node.js
JavaScript
4
star
22

serverless-nestjs-starter

🚀 serverless + nestjs + postgres
TypeScript
1
star
23

nuxt-jest-puppeteer

JavaScript
1
star
24

release-script

🖨Process FEMessage's release stuff
Shell
1
star
25

el-number-range

🔢Number range input component
JavaScript
1
star