TicketsInput.vue 1.71 KB
<template>
  <div class="container">
    <div
      v-for="(item, index) in tickets"
      :key="index"
    >
      <span v-if="disabled">
        {{ tickets[index] }}
      </span>
      <el-input
        v-else
        v-model.trim="tickets[index]"
        :placeholder="placeholder"
        :clearable="clearable"
        :disabled="disabled"
        :style="{ width: disabled ? '100%' : '70%' }"
        class="add-input"
      />
      <el-button
        v-if="!disabled && index === 0"
        type="text"
        class="button"
        @click="push"
      >
        新增
      </el-button>
      <el-button
        v-if="index !== 0 && !disabled"
        type="text"
        class="button"
        @click="remove(index)"
      >
        删除
      </el-button>
    </div>
  </div>
</template>

<script>
export default {
  name: 'TicketsInput',
  props: {
    value: {
      type: Array,
      default: () => ['']
    },
    placeholder: {
      type: String,
      default: null
    },
    clearable: {
      type: Boolean
    },
    disabled: {
      type: Boolean
    }
  },
  data() {
    return {
      tickets: ['']
    }
  },
  watch: {
    value: {
      immediate: true,
      deep: true,
      handler(val) {
        if (val && val.length > 0) {
          this.tickets = val
        }
      }
    },
    tickets: {
      immediate: true,
      deep: true,
      handler(val) {
        if (val) {
          this.$emit('input', val)
        }
      }
    }
  },
  methods: {
    push() {
      this.tickets.push('')
    },
    remove(index) {
      this.tickets.splice(index, 1)
    }
  }
}
</script>

<style scoped lang="scss">
.container {
  .button {
    margin-left: 10px;
  }

  .add-input {
    margin-bottom: 8px;
  }
}

</style>