首頁>技術>

前言

elsa-vue(eleme simple admin)一款基於 element-ui 封裝 el-form,el-table 等元件,用於快速開發後臺管理頁面的元件庫。

開發初衷

由於公司業務需求,需要大量重構新建多個後端管理系統。對於任何一個後管系統來說都充斥著 大量的列表和表單頁,雖然 2021 了,可以找到各種開源 程式碼生成器,但放到現實中,會被各種因素影響的難以推行,甚至還不如自己重寫。

那必然要解決這樣的問題:如何讓團隊成員快速完成頁面開發,拿出更多的時間對接後端介面。

elsa-vue 就是在這樣的環境下誕生的,由於專案元件庫為 element-ui,就將常用的 el-form 和 el-table 程式碼進行二次封裝,儘可能的配置化,使我們能只關注 config.js 檔案,而不需要在邏輯中投入更多時間。

下面是 elsa-vue 的思維導圖:

不足和展望

說來慚愧 vue3 正式版都發布了小半年到了 v3.0.5,element-ui 也搖身變成了 element-plus,但我依舊還停留在 vue2 裡。

對於 elsa-vue 也沒有支援更多的 element-ui 元件,目前也只是停留在表單和列表。

但總要有希望,一方面在公司業務系統中繼續提煉可在 elsa-vue 的元件;另一方面,會開始 vue3 的專案實踐,以及開始 elsa3-vue 的設計開發。

下面開始示例常用的用法。

elsa-table配置化的列表

首先比如這樣的列表頁,用 element-table 元件如何實現?

<el-table :data="dataSource">  <el-table-column prop="date" label="日期" width="100"> </el-table-column>  <el-table-column prop="name" label="姓名" width="180"> </el-table-column>  <el-table-column prop="address" label="地址"> </el-table-column></el-table>

來看看使用 elsa-table 元件的程式碼:

<elsa-table :columns="columns" :dataSource="dataSource"> </elsa-table>
// data.columnsexport default [  { label: '日期', align: 'left', prop: 'date', width: '100' },  { label: '姓名', align: 'center', prop: 'name', width: '180' },  { label: '地址', align: 'left', prop: 'address' }]

是不是很簡單?雖然額外多了一個描述 columns 屬性的檔案,但這只是為了業務 vue 檔案更簡潔。

我們可以不用 el-table-column 子元件來進行列資訊的描述。想象下,一個十幾個欄位的列表將會使得 template 多龐大?

程式碼示例對比:

這就是 elsa-vue 的核心特點:配置化。

支援分頁配置

通常列表頁都需要一個分頁元件,你需要額外配置 el-pagination 元件,這會使得你的程式碼變成這樣:

<el-table :data="dataSource" style="width: 100%">  <el-table-column prop="date" label="日期" width="100"> </el-table-column>  <el-table-column prop="name" label="姓名" width="180"> </el-table-column>  <el-table-column prop="address" label="地址"> </el-table-column></el-table><el-pagination  @size-change="sizeChange"  @current-change="handleCurrentChange"  :current-page="currentChange"  :page-sizes="[10, 20, 30, 50]"  :page-size="pagination.pageSize"  layout="total, sizes, prev, pager, next, jumper"  :total="pagination.total"></el-pagination>

就這個小 demo 而言,模板已經 14 行之多,想象下實際開發中會有多少程式碼量?

而我們的 el-table 依舊簡潔:

<elsa-table v-loading="loading" :columns="columns" :dataSource="dataSource" :pagination="pagination"></elsa-table>

對於分頁屬性只需要增加對於的 data.pagination 定義即可:

export default {  data() {    return {      pagination: {        pageSize: 10,        currentPage: 1,        total: 0,        currentChange: (currentPage) => {},        sizeChange: (pageSize) => {},      },      //...    };  },}
支援 el-table 配置

和以前用 el-table 完全一樣,只是把 el-table-columns 的配置挪到了單獨的配置檔案中,並以 columns 進行描述。

這裡列舉常用的一些示例:

elsa-form配置化的表單

elsa-formelsa-table 一樣,都採用維護獨立的配置 js 檔案用來代替原先 el-form-item 的描述模板,這裡不過多展開對比。

比如要展示這樣的頁面:

最終我們的表單檔案將是這樣:

<elsa-form ref="myFormRef" :config="fields" :model="model" labelWidth="auto" label-suffix=":">  <template slot="nameCheck">    <el-button type="primary" size="small" style="margin-left:10px;">校驗</el-button>  </template>  <el-row type="flex" justify="center">    <el-button @click="submit" type="primary">提交</el-button>    <el-button @click="reset" type="warning" style="margin-left:10px;">重置</el-button>  </el-row></elsa-form>

對應的 fields model 如下:

import { fields } from './data/basicConfig'export default {  data() {    return {      fields,      model: {        name: '',        password: '',        company: [],        desc: '',        end: '',        skill: ''      }    }  },}

你應該已經熟悉了這樣的“套路”。值得一提的,我在 elsa-form 的內嵌模板中添加了表單操作按鈕,他們將作為預設 slot 展示在表單底部。

自定義佈局 layout

除了原先 el-form inline 的單行佈局外,elsa-form 提供了 layout 屬性,內部使用 el-row/col 為佈局提供更多自定義可能。

對於上圖的佈局,你只需要新增 layout 屬性,並按照如下示例即可快速實現。

<elsa-form ref="myFormRef" :config="fields" :layout="layout" :model="model" labelWidth="auto" label-suffix=":">
表單校驗 validate 和重置 reset

原先 el-form 的校驗,和重置方法提供的入參不適合我們業務的實際需要:

比如:

validate 除了報錯資訊外,還需要當前表單 model 的資料物件resetFields 能支援個別欄位的重置,而非所有欄位

這裡做了二次封裝,重新規劃了引數:

業務需求

將圍繞 field 配置檔案展開,並給出對應配置示例。

禁用+顯示/隱藏

未輸入使用者名稱,年齡無法填寫(disabled)

年齡輸入大於 18 歲時,顯示身份證輸入框

select 的延遲載入和資料控制

根據前後端,動態控制展示下拉框選項;並且下拉框資料為非同步載入得到。

select tags 多選模式級聯查詢(省市區)時間控制元件rules 校驗規則field 所支援特性

目前支援 input、select、checkbox、update 等常用 el 表單元件,部分並做了封裝。未來會新增其他表單元件,及豐富目前元件功能。特性功能如下:

總結

目前 elsa-vue 已投入公司內部專案使用,滿足日常需求,如果有各類問題可以 issue 給我,同時我會根據實際場景給出更多的使用範例,供剛接觸 vue 的同學參考。

github 地址(內含 examples):https://github.com/eminoda/elsa

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JDK 16 即將釋出,看完這些新特性,我感覺已經學不動了