基于 Vue3 + Element-plus 表單 Form 組件二次封裝

項目信息

使用方法

  • 根目錄下執行 npm i vue3-xmw-form 命令
npm i vue3-xmw-form
  • 全局掛載組件
import { createApp } from 'vue'
import App from './App.vue'
import Xmwform from 'vue3-xmw-form'

createApp(App).use(Xmwform).mount('#app')
  • 在頁面上使用
<!-- template -->
<vue3-xmw-form
    :formData="formData"
    :formColumns="formColumns"
    :formRules="formRules"
    label-width="120px"
    ref="baseForm"
    >
    <!-- 大標題 -->
    <template v-slot:baseTitle>
        <h1>基于 Element-plus 封裝的表單組件</h1>
    </template>
    <!-- 操作按鈕 -->
    <template v-slot:Actions>
        <div style="text-align: center">
        <el-button type="primary" @click="onSubmit(baseForm)"
            >提交</el-button
        >
        <el-button @click="handlerReset">重置</el-button>
        </div>
    </template>
</vue3-xmw-form>

Form 屬性

除此之外支持所有 el-form 所有屬性

參數 說明 類型 默認值
formData 表單數據,雙向綁定(字段需與 prop 屬性一樣) Object -
formColumns 表單配置項,詳情見下方 Column 屬性 Array -
formRules 表單規則驗證,校驗規則請參考 rules Object -

Form 方法

表單組件已給 el-form 綁定 ref 并用 defineExpose 暴露出來,我們只需要在引入組件中綁定 ref,即可調用 el-form 的方法

<XmwForm :formData="formData" :formColumns="formColumns" :formRules="formRules" ref="baseForm"></XmwForm>

調用方式

const baseForm = ref<HTMLElement | null>(null)
baseForm.value.formRef.resetFields()

具體寫法可參考 Demo

Column 配置

參數 說明 類型 默認值
xType 表單類型,詳情見下方 xType 屬性 String -
slotName 插槽,開啟 slot 支持(開啟這個屬性,其它屬性無效) Boolean false
label el-form-item label 屬性 String -
prop el-form-item prop 屬性 String -
span 柵格占據的列數 Number -
offset 柵格左側的間隔格數 Number -
formItemOpts 支持 el-form-item 的所有屬性 Object -
$event 支持 xType 表單類型的所有事件,事件名需與 Element 組件事件名一樣 Function -

xType 表單類型

參數 類型 說明
Input 輸入框 支持 el-input 的所有屬性和事件
Autocomplete 自動補全輸入框 支持 el-autocomplete 的所有屬性和事件
Select 下拉框 支持 el-select 的所有屬性和事件
SelectV2 虛擬列表選擇器 支持 el-select-v2 的所有屬性和事件
DatePicker 日期時間選擇器 支持 el-date-picker 的所有屬性和事件
TimePicker 時間選擇器 支持 el-time-picker 的所有屬性和事件
TimeSelect 時間選擇 支持 el-time-select 的所有屬性和事件
InputNumber 數字輸入框 支持 el-input-number 的所有屬性和事件
Radio 單選框 支持 el-radio 的所有屬性和事件
Checkbox 多選框 支持 el-checkbox 的所有屬性和事件
Switch Switch 開關 支持 el-switch 的所有屬性和事件
Slider Slider 滑塊 支持 el-slider 的所有屬性和事件
Rate Rate 評分 支持 el-rate 的所有屬性和事件
Transfer 穿梭框 支持 el-transfer 的所有屬性和事件
Cascader 級聯框 支持 el-cascader 的所有屬性和事件
ColorPicker 顏色選擇器 支持 el-color-picker 的所有屬性和事件
Tree 樹形控件 支持 el-tree 的所有屬性和事件
TreeSelect 樹形選擇 支持 el-tree-select 的所有屬性和事件
TreeV2 虛擬化樹形控件 支持 el-tree-v2 的所有屬性和事件

存在的問題

  • 還沒找到辦法支持所有 xType 的所有方法,如果需要用到組件的方法,目前只能用 slotName 引入 Element 原生組件,有想法的伙伴可以交流一下
  • 由于獲取不到 el-tree 的方法,TreeTreeV2 組件目前還不能正確回顯和數據綁定
  • 目前已支持大部分的表單類型,還缺少一個 LasySelect 懶加載,帶有空封裝
  • 需要的伙伴可以在此基礎拓展

此項目不再維護,如需學習或者使用,可以把源碼拷貝到本地進行拓展。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容