element-ui form表單二次封裝

組件代碼



<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)用組件

<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>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栓票,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子威沫,更是在濱河造成了極大的恐慌,老刑警劉巖脂凶,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敲街,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機摆尝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門温艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堕汞,你說我怎么就攤上這事勺爱。” “怎么了讯检?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵琐鲁,是天一觀的道長。 經(jīng)常有香客問我人灼,道長围段,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任挡毅,我火速辦了婚禮蒜撮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跪呈。我一直安慰自己段磨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布耗绿。 她就那樣靜靜地躺著苹支,像睡著了一般。 火紅的嫁衣襯著肌膚如雪误阻。 梳的紋絲不亂的頭發(fā)上债蜜,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音究反,去河邊找鬼寻定。 笑死,一個胖子當(dāng)著我的面吹牛精耐,可吹牛的內(nèi)容都是我干的狼速。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卦停,長吁一口氣:“原來是場噩夢啊……” “哼向胡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惊完,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤僵芹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后小槐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拇派,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攀痊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桐腌。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苟径,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躬审,我是刑警寧澤棘街,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站承边,受9級特大地震影響遭殉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜博助,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一险污、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧富岳,春花似錦蛔糯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萝喘,卻和暖如春淮逻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阁簸。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工爬早, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人启妹。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓筛严,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翅溺。 傳聞我的和親對象是個殘疾皇子脑漫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355