TimePicker.vue (1576B)
1 <template> 2 <div style="display: flex;"> 3 <input type="number" @input="update('number', $event)" :value="number"/> 4 <select @input="update('scalar', $event)" :value="scalar"> 5 <option v-for="u in units" 6 :key="u.unit" 7 :value="u.scalar" 8 :selected="scalar === u.scalar"> 9 {{u.unit}} 10 </option> 11 </select> 12 </div> 13 </template> 14 15 <script> 16 export default { 17 name: "TimePicker", 18 props: { 19 value: Object 20 }, 21 data() { 22 return { 23 number: this.value.number, 24 scalar: this.value.scalar, 25 units: [ 26 { "unit": "weeks", "scalar": 604800000 }, 27 { "unit": "days", "scalar": 86400000 }, 28 { "unit": "hours", "scalar": 3600000 }, 29 { "unit": "minutes", "scalar": 60000 }, 30 { "unit": "seconds", "scalar": 1000 }, 31 { "unit": "none", "scalar": 0 }, 32 ] 33 } 34 }, 35 watch: { 36 value: { 37 immediate: true, 38 handler(val) { 39 this.number = val.number; 40 this.scalar = val.scalar; 41 } 42 } 43 }, 44 methods: { 45 update(prop, e) { 46 const newValue = this.value; 47 newValue[prop] = e.target.value; 48 this.$emit("input", newValue); 49 }, 50 51 } 52 } 53 </script>