Time.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <input v-model="innerValue" autocomplete="off" type="time" :readonly="readonly" />
  3. </template>
  4. <script>
  5. export default {
  6. // eslint-disable-next-line
  7. name: 'Time',
  8. props:{
  9. 'modelValue':
  10. {
  11. type: String,
  12. default: '',
  13. },
  14. 'readonly':{
  15. type: Boolean,
  16. default: false,
  17. },
  18. },
  19. emits: ['update:modelValue', 'on-value-change'],
  20. data: function(){
  21. return{
  22. innerValue : '',
  23. };
  24. },
  25. watch:{
  26. modelValue: {
  27. handler(newValue, oldValue){ // eslint-disable-line
  28. if(newValue != null && newValue != ''){
  29. this.innerValue = this.getTimeValue(newValue);
  30. }else{
  31. this.innerValue = newValue;
  32. }
  33. },
  34. immediate: true,
  35. },
  36. innerValue: function(newValue, oldValue){ // eslint-disable-line
  37. // 向外部发送事件通知
  38. let newValue1 = '';
  39. if(newValue == null || newValue == ''){
  40. newValue1 = newValue;
  41. }else{
  42. newValue1 = newValue + ':00';
  43. }
  44. console.log('time has been changed:', newValue1);
  45. this.$emit('update:modelValue', newValue1);
  46. this.$emit('on-value-change', newValue1);
  47. },
  48. },
  49. methods: {
  50. getTimeValue: function(value){
  51. if(value != null && value.length == 8){
  52. return value.substring(0, 5);
  53. }else{
  54. return value;
  55. }
  56. },
  57. },
  58. };
  59. </script>