Merge branch 'next' of groeger-clan.duckdns.org:newgeruecht-vue into next
This commit is contained in:
		
						commit
						c05877fa46
					
				| 
						 | 
					@ -3,82 +3,158 @@
 | 
				
			||||||
    filled
 | 
					    filled
 | 
				
			||||||
    :readonly="readonly"
 | 
					    :readonly="readonly"
 | 
				
			||||||
    :label="label"
 | 
					    :label="label"
 | 
				
			||||||
    :value="getDate()"
 | 
					    :value="getDateTime()"
 | 
				
			||||||
    placeholder="YYYY-MM-DD"
 | 
					    :placeholder="placeholder"
 | 
				
			||||||
    v-on:input="dateChanged"
 | 
					    v-on:input="dateChanged"
 | 
				
			||||||
    :rules="[isDate]"
 | 
					    :rules="rules"
 | 
				
			||||||
  >
 | 
					  >
 | 
				
			||||||
    <template v-slot:append>
 | 
					    <template v-slot:append>
 | 
				
			||||||
      <q-icon
 | 
					      <q-icon name="event" class="cursor-pointer" v-if="type == 'date' || type == 'datetime'">
 | 
				
			||||||
        name="event"
 | 
					        <q-popup-proxy ref="qDateProxy" transition-show="scale" transition-hide="scale">
 | 
				
			||||||
        class="cursor-pointer"
 | 
					          <q-date :value="getDate()" mask="YYYY-MM-DD" v-on:input="dateChanged">
 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        <q-popup-proxy
 | 
					 | 
				
			||||||
          ref="qDateProxy"
 | 
					 | 
				
			||||||
          transition-show="scale"
 | 
					 | 
				
			||||||
          transition-hide="scale"
 | 
					 | 
				
			||||||
        >
 | 
					 | 
				
			||||||
          <q-date
 | 
					 | 
				
			||||||
            :value="getDate()"
 | 
					 | 
				
			||||||
            mask="YYYY-MM-DD"
 | 
					 | 
				
			||||||
            v-on:input="dateChanged"
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            <div class="row items-center justify-end">
 | 
					            <div class="row items-center justify-end">
 | 
				
			||||||
              <q-btn
 | 
					              <q-btn v-close-popup label="Schließen" color="primary" flat />
 | 
				
			||||||
                v-close-popup
 | 
					 | 
				
			||||||
                label="Schließen"
 | 
					 | 
				
			||||||
                color="primary"
 | 
					 | 
				
			||||||
                flat
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </q-date>
 | 
					          </q-date>
 | 
				
			||||||
        </q-popup-proxy>
 | 
					        </q-popup-proxy>
 | 
				
			||||||
      </q-icon>
 | 
					      </q-icon>
 | 
				
			||||||
 | 
					      <q-icon
 | 
				
			||||||
 | 
					        name="mdi-clock-outline"
 | 
				
			||||||
 | 
					        class="cursor-pointer"
 | 
				
			||||||
 | 
					        v-if="type == 'time' || type == 'datetime'"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <q-popup-proxy ref="qTimeProxy" transition-show="scale" transition-hide="scale">
 | 
				
			||||||
 | 
					          <q-time :value="getTime()" mask="HH:mm" v-on:input="timeChanged">
 | 
				
			||||||
 | 
					            <div class="row items-center justify-end">
 | 
				
			||||||
 | 
					              <q-btn v-close-popup label="Schließen" color="primary" flat />
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </q-time>
 | 
				
			||||||
 | 
					        </q-popup-proxy>
 | 
				
			||||||
 | 
					      </q-icon>
 | 
				
			||||||
    </template>
 | 
					    </template>
 | 
				
			||||||
  </q-input>
 | 
					  </q-input>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import { defineComponent } from '@vue/composition-api';
 | 
					import { computed, defineComponent, ref } from '@vue/composition-api';
 | 
				
			||||||
import { date } from 'quasar';
 | 
					import { date } from 'quasar';
 | 
				
			||||||
interface Props {
 | 
					interface Props {
 | 
				
			||||||
  value?: Date;
 | 
					  value?: Date;
 | 
				
			||||||
  label?: string;
 | 
					  label?: string;
 | 
				
			||||||
  readonly: boolean;
 | 
					  readonly: boolean;
 | 
				
			||||||
 | 
					  type: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default defineComponent({
 | 
					export default defineComponent({
 | 
				
			||||||
  name: 'IsoDateInput',
 | 
					  name: 'IsoDateInput',
 | 
				
			||||||
  props: {
 | 
					  props: {
 | 
				
			||||||
    value: {
 | 
					    value: {
 | 
				
			||||||
      required: true,
 | 
					      required: true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    label: {},
 | 
					    label: {},
 | 
				
			||||||
    readonly: {
 | 
					    readonly: {
 | 
				
			||||||
      default: false,
 | 
					      default: false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    type: {
 | 
				
			||||||
 | 
					      default: 'date',
 | 
				
			||||||
 | 
					      validator: function(value: string) {
 | 
				
			||||||
 | 
					        return ['date', 'time', 'datetime'].indexOf(value) !== -1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  setup(props: Props, { emit }) {
 | 
					  setup(props: Props, { emit }: { emit: any }) {
 | 
				
			||||||
 | 
					    function getDateTime() {
 | 
				
			||||||
 | 
					      if (props.value) {
 | 
				
			||||||
 | 
					        switch (props.type) {
 | 
				
			||||||
 | 
					          case 'date':
 | 
				
			||||||
 | 
					            return getDate();
 | 
				
			||||||
 | 
					          case 'time':
 | 
				
			||||||
 | 
					            return getTime();
 | 
				
			||||||
 | 
					          case 'datetime':
 | 
				
			||||||
 | 
					            return `${getDate()} ${getTime()}`;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getDate() {
 | 
					    function getDate() {
 | 
				
			||||||
      if (props.value) {
 | 
					      if (props.value) {
 | 
				
			||||||
        return date.formatDate(props.value, 'YYYY-MM-DD');
 | 
					        return date.formatDate(props.value, 'YYYY-MM-DD');
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      return '';
 | 
					      return '';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    function getTime() {
 | 
				
			||||||
 | 
					      if (props.value) {
 | 
				
			||||||
 | 
					        return date.formatDate(props.value, 'HH:mm');
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return '';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const _date = ref('');
 | 
				
			||||||
 | 
					    const _time = ref('');
 | 
				
			||||||
 | 
					    const placeholder = computed(() => {
 | 
				
			||||||
 | 
					      switch (props.type) {
 | 
				
			||||||
 | 
					        case 'date':
 | 
				
			||||||
 | 
					          return 'YYYY-MM-DD';
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case 'time':
 | 
				
			||||||
 | 
					          return 'HH:mm';
 | 
				
			||||||
 | 
					        case 'datetime':
 | 
				
			||||||
 | 
					          return 'YYYY-MM-DD HH:mm';
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function dateChanged(dateString: string) {
 | 
					    function dateChanged(dateString: string) {
 | 
				
			||||||
      emit('input', new Date(dateString));
 | 
					      _date.value = dateString;
 | 
				
			||||||
 | 
					      console.log('dateChanged', new Date(`${_date.value} ${_time.value}`));
 | 
				
			||||||
 | 
					      // eslint-disable-next-line @typescript-eslint/no-unsafe-call
 | 
				
			||||||
 | 
					      emit('input', new Date(`${_date.value} ${_time.value}`));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function timeChanged(timeString: string) {
 | 
				
			||||||
 | 
					      _time.value = timeString;
 | 
				
			||||||
 | 
					      if (_date.value == '') {
 | 
				
			||||||
 | 
					        _date.value = date.formatDate(new Date(), 'YYYY-MM-DD');
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      console.log('timeChanged', new Date(`${_date.value} ${_time.value}`));
 | 
				
			||||||
 | 
					      // eslint-disable-next-line @typescript-eslint/no-unsafe-call
 | 
				
			||||||
 | 
					      emit('input', new Date(`${_date.value} ${_time.value}`));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function isDate(val: string) {
 | 
					    function isDate(val: string) {
 | 
				
			||||||
      return !val || /^\d{4}-\d\d-\d\d$/.test(val) || 'Datum ist nicht gültig.';
 | 
					      return !val || /^\d{4}-\d\d-\d\d$/.test(val) || 'Datum ist nicht gültig.';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function isTime(val: string) {
 | 
				
			||||||
 | 
					      return !val || /^\d\d:\d\d$/.test(val) || 'Zeit ist nicht gültig.';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function isDateTime(val: string) {
 | 
				
			||||||
 | 
					      return !val || /^\d{4}-\d\d-\d\d \d\d:\d\d$/.test(val) || 'Datum und Zeit ist nicht gültig.';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const rules = computed(() => {
 | 
				
			||||||
 | 
					      switch (props.type) {
 | 
				
			||||||
 | 
					        case 'date':
 | 
				
			||||||
 | 
					          return [isDate];
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case 'time':
 | 
				
			||||||
 | 
					          return [isTime];
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        case 'datetime':
 | 
				
			||||||
 | 
					          return [isDateTime];
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      getDate,
 | 
					      getDate,
 | 
				
			||||||
 | 
					      getTime,
 | 
				
			||||||
 | 
					      getDateTime,
 | 
				
			||||||
      dateChanged,
 | 
					      dateChanged,
 | 
				
			||||||
      isDate,
 | 
					      rules,
 | 
				
			||||||
 | 
					      timeChanged,
 | 
				
			||||||
 | 
					      placeholder
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  },
 | 
					  }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue