VUE 實現 Studio 管理後臺(十三):按鈕點選輸入控制元件,input 輸入框系列

idlewater發表於2020-03-09

按鈕點選輸入,是一個非常簡單的控制元件,20分鐘就能完成的一個控制元件。先看效果:

根據以前的設定,通過json資料動態生成這兩個按鈕,示例中這兩個按鈕對應的json程式碼:

 {
        label:'標題',
        value:'h2',
        defaultValue:'h2',
        inputName:'RxButtonSelect',
        props:{
          canClear:false,
          list:{
            h1:'H1',
            h2:'H2',
            h3:'H3',
            h4:'H4',
            h5:'H5',
            h6:'H6',
          },
        },
      },
      {
        label:'Border',
        value:'left',
        defaultValue:'left',
        inputName:'RxButtonSelect',
        props:{
          canClear:true,
          list:{
            top:'上',
            right:'右',
            bottom:'下',
            left:'左',
          },
        },
      },

RxInputRow會把這個資料轉化成上面的按鈕。
按鈕實現程式碼:

<template>
  <div class="rx-button-select">
    <div class="clear-button"
      v-if="canClear"
      @click="clear"
    >×</div>
    <div class="select-button"
      v-for = "(name, value) in list"
      :class = "inputValue === value ? 'selected' : ''"
      @click = "itemClick(value)"
      v-html = "name"
    >
    </div>
  </div>
</template>

<script>
export default {
  name: 'RxButtonSelect',
  props:{
    value:{ default:'' }, 
    canClear:{ default:false }, 
    list:{ default:{} },
  },

  computed:{
    inputValue: {
      get:function() {
        return this.value;
      },
      set:function(val) {
        this.$emit('input', val);
      },
    },
  },

  data () {
    return {
    }
  },

  methods: {
    clear(event){
      this.inputValue = ''
    },

    itemClick(value){
      this.inputValue = value
    },
  },
}
</script>

<style>
.rx-button-select{
  display: flex;
  flex-flow: row;
  flex-wrap: wrap;
  align-items: center;
}

.rx-button-select .clear-button{
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  background: rgba(255,255,255,0.1);
  border-radius: 3px;
  margin:1px;
  font-size: 16px;
  cursor: pointer;
}

.rx-button-select .select-button{
  display: flex;
  align-items: center;
  justify-content: center;
  height: 24px;
  padding: 0 5px;
  background: rgba(255, 255, 255, 0.15);
  border-radius: 3px;
  margin:1px;
  font-size: 12px;
  cursor: pointer;
}

.rx-button-select .select-button.selected{
  background: rgba(255, 255, 255, 0.07);
}
</style>

canClear屬性用與指示按鈕,是否可以清空數值。
之前的文章中沒提的是,按鈕的顏色變化,是通過給按鈕設定白色半透明背景實現的,這樣只要主題背景是深顏色,就會有同樣的效果,不會出現色系衝突。

渲染按鈕的時候,使用了v-html,如果想給按鈕加圖示,直接在list裡放入圖示程式碼,如:javascript left:"<i class='fas fa-file'></i>"
效果如下:

詳細程式碼,請參考https://github.com/vularsoft/studio-ui

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章