改造ElementUI穿梭框

最近吮炕,在做公司項(xiàng)目過程中,遇到了一個(gè)小需求醉锄,就是給客戶選擇套餐的某一種屬性的時(shí)候乏悄,有些屬性是有數(shù)值的,開始想用table去做但是太low恳不,因?yàn)轫?xiàng)目是用vuejs作為前端技術(shù)檩小,element作為輔助ui,所以就想用element-ui的穿梭框來完成這樣一件事情烟勋。

image

但是规求,穿梭框的功能有限,所以想到自己來改造一下他卵惦。先去github上看一下element的源碼:https://github.com/ElemeFE/element

進(jìn)入目錄 element/packages/transfer/src阻肿,把里面的兩個(gè)文件拷貝出來,先解讀一下源碼沮尿,其實(shí)穿梭框中可定制的地方可以很多丛塌,看你的腦洞有多大,我根據(jù)需求,給每一項(xiàng)添加一個(gè)計(jì)數(shù)器赴邻,首先什么樣的數(shù)據(jù)需要計(jì)數(shù)器印衔,

改造 transfer-panel

在transfer-panel.vue設(shè)定來幾個(gè)屬性:isNumber,Number乍楚,minNumber当编,maxNumber,tooltip徒溪,isShowInput,panelWidth金顿。

Script

props: {
      data: {
        type: Array,
        default() {
          return [];
        }
      },
      isShowInput:false,
      panelWidth:{
          type:Number,
          default(){
              return 200
          }
      },
      renderContent: Function,
      placeholder: String,
      title: String,
      filterable: Boolean,
      format: Object,
      filterMethod: Function,
      defaultChecked: Array,
      props: Object
    }
computed:{

      isNumberProp(){

        return this.props.isNumber || 'isNumber';

      },

      NumberProp(){

        return this.props.Number || 'Number';

      },

      MinNumberProp(){

        return this.props.usedMin || 'usedMin'

      },

      MaxNumberProp(){

        return this.props.usedMax || 'usedMax'

      },

      tooltipProp(){

        return this.props.tooltip || 'tooltip';

      },

}

Template

<el-checkbox-group
        v-model="checked"
        v-show="!hasNoMatch && data.length > 0"
        :class="{ 'is-filterable': filterable }"
        class="el-transfer-panel__list">
        <el-checkbox
          class="el-transfer-panel__item"
          :label="item[keyProp]"
          :disabled="item[disabledProp]"
          :key="item[keyProp]"
          v-for="item in filteredData">
          <option-content :option="item"></option-content>
          <el-tooltip v-if="item[isNumberProp] && isShowInput"  class="item" effect="dark" :content="item[labelProp]+'('+item[tooltipProp]+')'" placement="top">
           <el-input-number class="fr m-r-5" v-model="item[NumberProp]" size="small" style="width:100px!important" controls-position="right" :min="item[MinNumberProp]" :max="item[MaxNumberProp]" :label="item[tooltipProp]"></el-input-number>
          </el-tooltip>
        </el-checkbox>
      </el-checkbox-group>

屬性描述臊泌,其余屬性繼承ElmentUI的穿梭框

http://element-cn.eleme.io/#/zh-CN/component/transfer

屬性 描述
isNumber 是否為數(shù)值類型
Number 數(shù)值,v-model綁定
minNumber 最小值
maxNumber 最大值
tooltip 提示框內(nèi)容
isShowInput 是否顯示計(jì)數(shù)器input
panelWidht 寬度

改造 Index.vue

Script

props:{
      panelWidth: Number,
      isShowLeftInput: Boolean,
      isShowRightInput: Boolean,
}

Template

<div class="el-transfer">
    <transfer-panel
      v-bind="$props"
      :data="sourceData"
      :title="titles[0]"
      :panelWidth="panelWidth"
      :isShowInput="isShowLeftInput"
      :default-checked="leftDefaultChecked"
      :placeholder="filterPlaceholder"
      @checked-change="onSourceCheckedChange">
      <slot name="left-footer"></slot>
    </transfer-panel>
    <div class="el-transfer__buttons">
      <el-button
        type="primary"
        :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']"
        @click.native="addToLeft"
        :disabled="rightChecked.length === 0">
        <i class="el-icon-arrow-left"></i>
        <span v-if="buttonTexts[0] !== undefined">{{ buttonTexts[0] }}</span>
      </el-button>
      <el-button
        type="primary"
        :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']"
        @click.native="addToRight"
        :disabled="leftChecked.length === 0">
        <span v-if="buttonTexts[1] !== undefined">{{ buttonTexts[1] }}</span>
        <i class="el-icon-arrow-right"></i>
      </el-button>
    </div>
    <transfer-panel
      v-bind="$props"
      :data="targetData"
      :title="titles[1]"
      :panelWidth="panelWidth"
      :isShowInput="isShowRightInput"
      :default-checked="rightDefaultChecked"
      :placeholder="filterPlaceholder"
      @checked-change="onTargetCheckedChange">
      <slot name="right-footer"></slot>
    </transfer-panel>

屬性描述

屬性 類型 描述
panelWidht Number 寬度
isShowLeftInput Boolean 是否顯示左側(cè)計(jì)數(shù)器
isShowRightInput Boolean 是否顯示右側(cè)計(jì)數(shù)器

使用

import CusTransfer from "@/components/customer/Transfer/index"
<cus-transfer 
        v-model="selectedElements" 
        :data="elements" 
        :titles="['備選', '已選']" 
        :panelWidth="300" 
        :isShowLeftInput="false" 
        :isShowRightInput="true">
</cus-transfer>

效果

image.png

image.png

好了揍拆,大概就這么一個(gè)思路渠概,希望能幫到你們,第一次寫博文嫂拴,不喜勿噴啊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末播揪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筒狠,更是在濱河造成了極大的恐慌猪狈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辩恼,死亡現(xiàn)場(chǎng)離奇詭異雇庙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灶伊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門疆前,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人聘萨,你說我怎么就攤上這事竹椒。” “怎么了米辐?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵胸完,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我儡循,道長(zhǎng)舶吗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任择膝,我火速辦了婚禮誓琼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己腹侣,他們只是感情好叔收,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著傲隶,像睡著了一般饺律。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跺株,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天复濒,我揣著相機(jī)與錄音,去河邊找鬼乒省。 笑死巧颈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袖扛。 我是一名探鬼主播砸泛,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蛆封!你這毒婦竟也來了唇礁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤惨篱,失蹤者是張志新(化名)和其女友劉穎盏筐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妒蛇,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡机断,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绣夺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吏奸。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陶耍,靈堂內(nèi)的尸體忽然破棺而出奋蔚,到底是詐尸還是另有隱情,我是刑警寧澤烈钞,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布泊碑,位于F島的核電站,受9級(jí)特大地震影響毯欣,放射性物質(zhì)發(fā)生泄漏馒过。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一酗钞、第九天 我趴在偏房一處隱蔽的房頂上張望腹忽。 院中可真熱鬧来累,春花似錦、人聲如沸窘奏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽着裹。三九已至领猾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骇扇,已是汗流浹背摔竿。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匠题,地道東北人拯坟。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像韭山,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冷溃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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