JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.js"></script>
<div id="app">
  <div class="select-block">
    <v-select
      v-model="single"
      :options="items"
      label="single value"
    ></v-select>
    <pre>{{ JSON.stringify(single) }}</pre>
  </div>
  <div class="select-block">
    <v-select
      v-model="multiple"
      :options="items"
      :multiple="true"
      label="multiple values"
    ></v-select>
    <pre>{{ JSON.stringify(multiple) }}</pre>
  </div>
</div>

CSS

.select-block {
  margin: 10px;
  padding: 10px;
  border: 1px solid silver;
}

JavaScript

Vue.component('v-select', {
  props: [ 'label', 'value', 'options', 'multiple' ],
  template: `
<label>
  {{ label }}
  <select v-model="innerValue" :multiple="multiple">
    <option disabled value="" v-text="placeholder"></option>
    <option v-for="n in options">{{ n }}</option>
  </select>
</label>`,
  computed: {
    placeholder() {
      return `Выберите ${this.multiple ? 'несколько значений' : 'одно значение'}`;
    },
    innerValue: {
      get() {
        const v = this.value;
        return this.multiple || this.options.includes(v) ? v : '';
      },
      set(val) {
        this.$emit('input', val);
      },
    },
  },
});

new Vue({
  el: '#app',
  data: {
    items: [ 'hello, world!!', 'fuck the world', 'fuck everything' ],
    single: null,
    multiple: [],
  },
});