element-ui 二次封裝form表單

element-ui 開發(fā)一個后臺管理系統(tǒng)篷就,記錄開發(fā)過程中封裝form表單仍劈,方便查閱

searchForm 組件

在components 中新建一個Form文件夾辖众,在新建一個searchForm 組件用來放代碼

<template>
<el-form :size="size" inline :label-width="labelWidth">
        <el-form-item v-for='item in searchForm' :label="item.label" :key='item.prop'>
            <!-- 輸入框 -->
            <el-input clearable v-if="item.type==='Input'" v-model="searchData[item.prop]" :size="size" :placeholder="item.placeholder" :style="{width: item.width}"></el-input>
            <!-- 下拉框 -->
            <el-select clearable v-if="item.type==='Select'" :placeholder="item.placeholder" v-model="searchData[item.prop]" :style="{width: item.width}" :size="size" @change="item.change(searchData[item.prop])">
                <el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
            </el-select>
            <!-- 單選 -->
            <el-radio-group v-if="item.type==='Radio'" v-model="searchData[item.prop]">
                <el-radio v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio>
            </el-radio-group>
            <!-- 單選按鈕 -->
            <el-radio-group v-if="item.type==='RadioButton'" v-model="searchData[item.prop]" @change="item.change && item.change(searchData[item.prop])">
                <el-radio-button v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio-button>
            </el-radio-group>
            <!-- 復(fù)選框 -->
            <el-checkbox-group v-if="item.type==='Checkbox'" :style="{width: item.width}" v-model="searchData[item.prop]" >
                <el-checkbox v-for="ch in item.checkboxs" :label="ch.value" :key="ch.value">{{ch.label}}</el-checkbox>
            </el-checkbox-group>
            <!-- 日期 -->
            <el-date-picker v-if="item.type==='Date'" :placeholder="item.placeholder" v-model="searchData[item.prop]"></el-date-picker>
            <!-- 時間 -->
            <el-time-select v-if="item.type==='Time'" v-model="searchData[item.prop]" type=''></el-time-select>
            <!-- 日期時間 -->
            <el-date-picker v-if="item.type==='DateTime'" type='datetime' v-model="searchData[item.prop]" :disabled="item.disable && item.disable(searchData[item.prop])"></el-date-picker>
            <!-- 滑塊 -->
            <!-- <el-slider v-if="item.type==='Slider'" v-model="searchData[item.prop]"></el-slider> -->
            <!-- 開關(guān) -->
            <el-switch v-if="item.type==='Switch'" v-model="searchData[item.prop]" ></el-switch>
        </el-form-item>
        <div style="display: inline-block" v-if='isHandle'>
            <el-form-item v-for='item in searchHandle' :key="item.label">
                <el-button :type="item.type" :size="item.size || size" @click='item.handle()'>{{item.label}}</el-button>
            </el-form-item>
        </div>
        
    </el-form>
    <!-- <el-form inline v-if='isHandle'>
        <el-form-item v-for='item in searchHandle' :key="item.label">
            <el-button :type="item.type" :size="item.size || size" @click='item.handle()'>{{item.label}}</el-button>
        </el-form-item>
    </el-form> -->
</template>
<script>
export default {
    props:{
        isHandle:{
            type:Boolean,
            default:true
        },
        labelWidth:{
            type:String,
            default:'100px'
        },
        size:{
            type:String,
            default:'medium'
        },
        searchForm:{
            type:Array,
            default:[]
        },
        searchHandle:{
            type:Array,
            default:()=>[]
        },
        searchData:{
            type:Object,
            default:{}
        }
    },
    data () {
        return {
        };
    },

}

</script>

調(diào)用

在組件中調(diào)用:

<template>
    <div>
        <search-form 
            size='medium'
            labelWidth = '60px' 
            :searchData = "searchData"
            :searchForm = "searchForm"
            :searchHandle="searchHandle"
        >
        </search-form>
    </div>
</template>

<script>
import SearchForm from '@/components/common/Form/searchForm'

let sexs=[{label:'男',value:'M'},{label:'女',value:'F'}]
let sexProps={label:'label',value:'value'}
let intersts=[{label:'羽毛球',value:'badminton'},{label:'籃球',value:'basketball'},{label:'足球',value:'football'},{label:'兵乓球',value:'pong'}]
let interstProps={label:'label',value:'value'}
export default {
    components: {
        SearchForm,
    },
    data() {
        return {
            searchData:{
                name:null,
                age:null,
                sex:null,
                date: '',
                interst: []
            },
            searchForm:[
                {type:'Input',label:'姓名:',prop:'name',width:'180px',placeholder:'請輸入姓名'},
                {type:'Input',label:'年齡',prop:'age',width:'180px',placeholder:'請輸入年齡'},
                {type:'Date',label:'日期',prop:'date',width:'180px',placeholder:'請選擇日期'},
                {type:'Select',label:'性別',prop:'sex',width:'120px',options:sexs,props:sexProps,change:row=>'',placeholder:'請選擇性別'},
                {type:'Checkbox',label:'愛好',prop:'interst',checkboxs:intersts,props:interstProps}
            ],
            searchHandle:[
                {label:'查詢',type:'primary',handle:()=>this.searchHandleForm()},
                {label:'重置',type:'primary',handle:()=>''}
            ],

            // 表單驗證
            editRules: {
                name: [{requied: true, message: '請輸入姓名', trigger: 'blur'}]
            }
        }
    },
    methods: {
        searchHandleForm() {
            console.log('searchHandle')
        },
    }
}
</script>

主要是利用數(shù)據(jù)去渲染需要的表單

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兴蒸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌细办,老刑警劉巖橙凳,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笑撞,居然都是意外死亡岛啸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門茴肥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坚踩,“玉大人,你說我怎么就攤上這事炉爆《楹纾” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵芬首,是天一觀的道長赴捞。 經(jīng)常有香客問我,道長郁稍,這世上最難降的妖魔是什么赦政? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮耀怜,結(jié)果婚禮上恢着,老公的妹妹穿的比我還像新娘。我一直安慰自己财破,他們只是感情好掰派,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著左痢,像睡著了一般靡羡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俊性,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天略步,我揣著相機(jī)與錄音,去河邊找鬼定页。 笑死趟薄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的典徊。 我是一名探鬼主播杭煎,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恩够,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岔帽?” 一聲冷哼從身側(cè)響起玫鸟,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犀勒,沒想到半個月后屎飘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贾费,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年钦购,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褂萧。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡押桃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出导犹,到底是詐尸還是另有隱情唱凯,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布谎痢,位于F島的核電站磕昼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏节猿。R本人自食惡果不足惜票从,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滨嘱。 院中可真熱鬧峰鄙,春花似錦、人聲如沸太雨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囊扳。三九已至煤墙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宪拥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工铣减, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留她君,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓葫哗,卻偏偏與公主長得像缔刹,于是被迫代替她去往敵國和親球涛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • React中沒有類似Angular那樣的雙向數(shù)據(jù)綁定,在做一些表單復(fù)雜的后臺類頁面時鸟廓,監(jiān)聽从祝、賦值、傳遞引谜、校驗時編碼...
    tedyuen777閱讀 9,869評論 1 23
  • 3. JSX JSX是對JavaScript語言的一個擴(kuò)展語法牍陌, 用于生產(chǎn)React“元素”,建議在描述UI的時候...
    pixels閱讀 2,827評論 0 24
  • 前言: 在日常使用vue開發(fā)WEB項目中员咽,經(jīng)常會有提交表單的需求毒涧。我們可以使用 iview 或者 element ...
    ZhengJX閱讀 12,810評論 0 6
  • 【二郎神】邀茶28 當(dāng)代/二擺 流芳品,雅俗共贝室、時光輕荏契讲。慢煮嫩芽君逢有請,聽唐宋滑频、舍觀煙沈捡偏。溫盞輕吟閑月夜,...
    二擺閱讀 474評論 1 10
  • 前天一到家误趴,吃東西洗澡收拾東西霹琼,然后我就睡覺了。實在是太累了凉当,從晚上9點一覺到早上6點枣申,好久好久沒有睡過這樣的整覺...
    文小曉閱讀 229評論 0 0