mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-19 17:24:26 +08:00
add toggle calendar and time picker button
This commit is contained in:
@@ -4,37 +4,46 @@
|
|||||||
<f7-toolbar>
|
<f7-toolbar>
|
||||||
<div class="swipe-handler"></div>
|
<div class="swipe-handler"></div>
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<f7-link :text="$t('Now')" @click="setCurrentTime"></f7-link>
|
<f7-link :text="switchButtonTitle" @click="switchMode"></f7-link>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<f7-link :text="$t('Done')" @click="confirm"></f7-link>
|
<f7-link :text="$t('Done')" @click="confirm"></f7-link>
|
||||||
</div>
|
</div>
|
||||||
</f7-toolbar>
|
</f7-toolbar>
|
||||||
<f7-page-content>
|
<f7-page-content class="padding-bottom">
|
||||||
<vue-date-picker inline enable-seconds auto-apply
|
<div class="block block-outline no-margin no-padding">
|
||||||
ref="datetimepicker"
|
<vue-date-picker inline enable-seconds auto-apply
|
||||||
month-name-format="long"
|
ref="datetimepicker"
|
||||||
six-weeks="center"
|
month-name-format="long"
|
||||||
class="justify-content-center"
|
six-weeks="center"
|
||||||
:enable-time-picker="false"
|
class="justify-content-center"
|
||||||
:clearable="false"
|
:enable-time-picker="false"
|
||||||
:dark="isDarkMode"
|
:clearable="false"
|
||||||
:week-start="firstDayOfWeek"
|
:dark="isDarkMode"
|
||||||
:year-range="yearRange"
|
:week-start="firstDayOfWeek"
|
||||||
:day-names="dayNames"
|
:year-range="yearRange"
|
||||||
:year-first="isYearFirst"
|
:day-names="dayNames"
|
||||||
v-model="dateTime">
|
:year-first="isYearFirst"
|
||||||
<template #month="{ text }">
|
v-model="dateTime"
|
||||||
{{ getMonthShortName(text) }}
|
v-show="mode === 'date'">
|
||||||
</template>
|
<template #month="{ text }">
|
||||||
<template #month-overlay-value="{ text }">
|
{{ getMonthShortName(text) }}
|
||||||
{{ getMonthShortName(text) }}
|
</template>
|
||||||
</template>
|
<template #month-overlay-value="{ text }">
|
||||||
</vue-date-picker>
|
{{ getMonthShortName(text) }}
|
||||||
<div class="block block-outline no-margin no-padding padding-vertical-half">
|
</template>
|
||||||
|
</vue-date-picker>
|
||||||
|
</div>
|
||||||
|
<div class="block block-outline no-margin no-padding padding-vertical-half" v-show="mode === 'time'">
|
||||||
<div id="time-picker-container" class="time-picker-container"></div>
|
<div id="time-picker-container" class="time-picker-container"></div>
|
||||||
</div>
|
</div>
|
||||||
<input id="time-picker-input" style="display: none" type="text" readonly="readonly"/>
|
<input id="time-picker-input" style="display: none" type="text" readonly="readonly"/>
|
||||||
|
<div class="margin-top text-align-center">
|
||||||
|
<div class="display-flex padding-horizontal justify-content-space-between">
|
||||||
|
<div class="align-self-center">{{ displayTime }}</div>
|
||||||
|
<f7-button fill :text="$t('Now')" @click="setCurrentTime"></f7-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</f7-page-content>
|
</f7-page-content>
|
||||||
</f7-sheet>
|
</f7-sheet>
|
||||||
</template>
|
</template>
|
||||||
@@ -49,10 +58,13 @@ import {
|
|||||||
getCurrentUnixTime,
|
getCurrentUnixTime,
|
||||||
getCurrentDateTime,
|
getCurrentDateTime,
|
||||||
getUnixTime,
|
getUnixTime,
|
||||||
|
getBrowserTimezoneOffsetMinutes,
|
||||||
getLocalDatetimeFromUnixTime,
|
getLocalDatetimeFromUnixTime,
|
||||||
|
getActualUnixTimeForStore,
|
||||||
|
getTimezoneOffsetMinutes,
|
||||||
getYear,
|
getYear,
|
||||||
getTimeValues,
|
getTimeValues,
|
||||||
setTimeValuesToDate
|
getCombinedDateAndTimeValues
|
||||||
} from '@/lib/datetime.js';
|
} from '@/lib/datetime.js';
|
||||||
import { createInlinePicker } from '@/lib/ui.mobile.js';
|
import { createInlinePicker } from '@/lib/ui.mobile.js';
|
||||||
|
|
||||||
@@ -82,6 +94,7 @@ export default {
|
|||||||
const datetime = getLocalDatetimeFromUnixTime(value);
|
const datetime = getLocalDatetimeFromUnixTime(value);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
mode: 'time',
|
||||||
yearRange: [
|
yearRange: [
|
||||||
2000,
|
2000,
|
||||||
getYear(getCurrentDateTime()) + 1
|
getYear(getCurrentDateTime()) + 1
|
||||||
@@ -103,6 +116,16 @@ export default {
|
|||||||
},
|
},
|
||||||
isYearFirst() {
|
isYearFirst() {
|
||||||
return this.$locale.isLongDateMonthAfterYear(this.userStore);
|
return this.$locale.isLongDateMonthAfterYear(this.userStore);
|
||||||
|
},
|
||||||
|
displayTime() {
|
||||||
|
return this.$locale.formatUnixTimeToLongDateTime(this.userStore, getActualUnixTimeForStore(getUnixTime(this.dateTime), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||||
|
},
|
||||||
|
switchButtonTitle() {
|
||||||
|
if (this.mode === 'time') {
|
||||||
|
return this.$t('Date');
|
||||||
|
} else {
|
||||||
|
return this.$t('Time');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeUnmount() {
|
beforeUnmount() {
|
||||||
@@ -114,6 +137,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
onSheetOpen() {
|
onSheetOpen() {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
self.mode = 'time';
|
||||||
|
|
||||||
if (self.modelValue) {
|
if (self.modelValue) {
|
||||||
self.dateTime = getLocalDatetimeFromUnixTime(self.modelValue);
|
self.dateTime = getLocalDatetimeFromUnixTime(self.modelValue);
|
||||||
@@ -126,11 +150,13 @@ export default {
|
|||||||
self.getTimePickerColumns(), self.timeValues, {
|
self.getTimePickerColumns(), self.timeValues, {
|
||||||
change(picker, values) {
|
change(picker, values) {
|
||||||
self.timeValues = values;
|
self.timeValues = values;
|
||||||
setTimeValuesToDate(self.dateTime, self.timeValues, self.is24Hour, self.isMeridiemIndicatorFirst);
|
self.dateTime = getCombinedDateAndTimeValues(self.dateTime, self.timeValues, self.is24Hour, self.isMeridiemIndicatorFirst);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
self.timePickerHolder.setValue(self.timeValues);
|
self.$nextTick(() => {
|
||||||
|
self.timePickerHolder.setValue(self.timeValues);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
self.$refs.datetimepicker.switchView('calendar');
|
self.$refs.datetimepicker.switchView('calendar');
|
||||||
@@ -138,6 +164,13 @@ export default {
|
|||||||
onSheetClosed() {
|
onSheetClosed() {
|
||||||
this.$emit('update:show', false);
|
this.$emit('update:show', false);
|
||||||
},
|
},
|
||||||
|
switchMode() {
|
||||||
|
if (this.mode === 'time') {
|
||||||
|
this.mode = 'date';
|
||||||
|
} else {
|
||||||
|
this.mode = 'time';
|
||||||
|
}
|
||||||
|
},
|
||||||
setCurrentTime() {
|
setCurrentTime() {
|
||||||
this.dateTime = getLocalDatetimeFromUnixTime(getCurrentUnixTime());
|
this.dateTime = getLocalDatetimeFromUnixTime(getCurrentUnixTime());
|
||||||
this.timeValues = this.getTimeValues(this.dateTime);
|
this.timeValues = this.getTimeValues(this.dateTime);
|
||||||
|
|||||||
+7
-4
@@ -461,7 +461,8 @@ export function getTimeValues(date, is24Hour, isMeridiemIndicatorFirst) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setTimeValuesToDate(date, timeValues, is24Hour, isMeridiemIndicatorFirst) {
|
export function getCombinedDateAndTimeValues(date, timeValues, is24Hour, isMeridiemIndicatorFirst) {
|
||||||
|
let newDateTime = new Date(date.valueOf());
|
||||||
let hours = 0;
|
let hours = 0;
|
||||||
let minutes = 0;
|
let minutes = 0;
|
||||||
let seconds = 0;
|
let seconds = 0;
|
||||||
@@ -494,9 +495,11 @@ export function setTimeValuesToDate(date, timeValues, is24Hour, isMeridiemIndica
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
date.setHours(hours);
|
newDateTime.setHours(hours);
|
||||||
date.setMinutes(minutes);
|
newDateTime.setMinutes(minutes);
|
||||||
date.setSeconds(seconds);
|
newDateTime.setSeconds(seconds);
|
||||||
|
|
||||||
|
return newDateTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isDateRangeMatchFullYears(minTime, maxTime) {
|
export function isDateRangeMatchFullYears(minTime, maxTime) {
|
||||||
|
|||||||
Reference in New Issue
Block a user