mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 16:54:25 +08:00
support pasting date time into the date-time picker on the desktop version
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
:label="label"
|
:label="label"
|
||||||
:menu-props="{ contentClass: 'date-time-select-menu' }"
|
:menu-props="{ contentClass: 'date-time-select-menu' }"
|
||||||
v-model="dateTime"
|
v-model="dateTime"
|
||||||
|
@paste="onPaste"
|
||||||
>
|
>
|
||||||
<template #selection>
|
<template #selection>
|
||||||
<span class="text-truncate cursor-pointer">{{ displayTime }}</span>
|
<span class="text-truncate cursor-pointer">{{ displayTime }}</span>
|
||||||
@@ -86,14 +87,19 @@ import { type TimePickerValue, useDateTimeSelectionBase } from '@/components/bas
|
|||||||
|
|
||||||
import { ThemeType } from '@/core/theme.ts';
|
import { ThemeType } from '@/core/theme.ts';
|
||||||
import { NumeralSystem } from '@/core/numeral.ts';
|
import { NumeralSystem } from '@/core/numeral.ts';
|
||||||
import { MeridiemIndicator } from '@/core/datetime.ts';
|
import {
|
||||||
|
MeridiemIndicator,
|
||||||
|
KnownDateTimeFormat
|
||||||
|
} from '@/core/datetime.ts';
|
||||||
import {
|
import {
|
||||||
getHourIn12HourFormat,
|
getHourIn12HourFormat,
|
||||||
getTimezoneOffsetMinutes,
|
getTimezoneOffsetMinutes,
|
||||||
getBrowserTimezoneOffsetMinutes,
|
getBrowserTimezoneOffsetMinutes,
|
||||||
getLocalDatetimeFromUnixTime,
|
getLocalDatetimeFromUnixTime,
|
||||||
getActualUnixTimeForStore,
|
|
||||||
getUnixTimeFromLocalDatetime,
|
getUnixTimeFromLocalDatetime,
|
||||||
|
getActualUnixTimeForStore,
|
||||||
|
getDummyUnixTimeForLocalUsage,
|
||||||
|
parseDateTimeFromKnownDateTimeFormat,
|
||||||
getAMOrPM,
|
getAMOrPM,
|
||||||
getCombinedDateAndTimeValues
|
getCombinedDateAndTimeValues
|
||||||
} from '@/lib/datetime.ts';
|
} from '@/lib/datetime.ts';
|
||||||
@@ -221,6 +227,29 @@ function toggleMeridiemIndicator(): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onPaste(event: ClipboardEvent): void {
|
||||||
|
if (!event.clipboardData || props.readonly || props.disabled) {
|
||||||
|
event.preventDefault();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const text = event.clipboardData.getData('Text');
|
||||||
|
|
||||||
|
if (!text) {
|
||||||
|
event.preventDefault();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const formats = KnownDateTimeFormat.detect(text);
|
||||||
|
|
||||||
|
if (!formats || formats.length !== 1) {
|
||||||
|
event.preventDefault();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dateTime.value = getLocalDatetimeFromUnixTime(getDummyUnixTimeForLocalUsage(parseDateTimeFromKnownDateTimeFormat(text, formats[0] as KnownDateTimeFormat).getUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||||
|
}
|
||||||
|
|
||||||
function onFocused(input: VAutocomplete | null | undefined, focused: boolean): void {
|
function onFocused(input: VAutocomplete | null | undefined, focused: boolean): void {
|
||||||
if (input && focused) {
|
if (input && focused) {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import {
|
|||||||
YearMonthDayUnixTime,
|
YearMonthDayUnixTime,
|
||||||
WeekDay,
|
WeekDay,
|
||||||
MeridiemIndicator,
|
MeridiemIndicator,
|
||||||
|
KnownDateTimeFormat,
|
||||||
DateRangeScene,
|
DateRangeScene,
|
||||||
DateRange,
|
DateRange,
|
||||||
LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE
|
LANGUAGE_DEFAULT_DATE_TIME_FORMAT_VALUE
|
||||||
@@ -557,6 +558,10 @@ export function parseDateTimeFromUnixTime(unixTime: number, utcOffset?: number,
|
|||||||
return MomentDateTime.of(moment.unix(unixTime));
|
return MomentDateTime.of(moment.unix(unixTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function parseDateTimeFromKnownDateTimeFormat(dateTime: string, format: KnownDateTimeFormat): DateTime {
|
||||||
|
return MomentDateTime.of(moment(dateTime, format.format));
|
||||||
|
}
|
||||||
|
|
||||||
export function formatUnixTime(unixTime: number, format: string, options: DateTimeFormatOptions, utcOffset?: number, currentUtcOffset?: number): string {
|
export function formatUnixTime(unixTime: number, format: string, options: DateTimeFormatOptions, utcOffset?: number, currentUtcOffset?: number): string {
|
||||||
return parseDateTimeFromUnixTime(unixTime, utcOffset, currentUtcOffset).format(format, options);
|
return parseDateTimeFromUnixTime(unixTime, utcOffset, currentUtcOffset).format(format, options);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user