You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
5.5 KiB
198 lines
5.5 KiB
<template>
|
|
<v-card outlined class="rounded-xl pl-3">
|
|
<v-card-title> {{ $t("Date") }} </v-card-title>
|
|
<v-card-subtitle>
|
|
<v-dialog v-model="dialog" @click:outside="closeDialog" width="500">
|
|
<template v-slot:activator="{ on, attrs }">
|
|
<v-btn
|
|
class="tw-text-complementary-1 tw-border-solid tw-border-[1px] tw-bg-[#FFFFFF] tw-border-complementary-1 tw-shadow-none remove-upper rounded-lg mt-5"
|
|
v-bind="attrs"
|
|
v-on="on"
|
|
>
|
|
{{ $t("Select date") }}
|
|
</v-btn>
|
|
</template>
|
|
|
|
<v-card class="rounded-xl pa-4" width="592" height="618">
|
|
<v-card-title>
|
|
<v-row no-gutters>
|
|
<v-col cols="4" class="d-flex justify-start">
|
|
<div class="ml-n3">{{ $t("Select Dates") }}</div>
|
|
</v-col>
|
|
<v-col
|
|
cols="8"
|
|
class="d-flex justify-end"
|
|
@click="dialog = false"
|
|
>
|
|
X
|
|
</v-col>
|
|
</v-row>
|
|
</v-card-title>
|
|
<v-row class="mt-10">
|
|
<v-col cols="4">
|
|
<v-btn
|
|
v-for="(btnText, idx) in btnList"
|
|
:key="idx"
|
|
width="100%"
|
|
text
|
|
class="remove-upper justify-start"
|
|
:class="{ 'primary--text': idx == selectBtn }"
|
|
@click="() => clickRange(idx)"
|
|
>
|
|
{{ $t(btnText) }}
|
|
</v-btn>
|
|
</v-col>
|
|
<v-col cols="8">
|
|
<!-- <v-date-picker v-model="dates" range full-width></v-date-picker> -->
|
|
<v-date-picker
|
|
:value="dates"
|
|
@input="setDates"
|
|
:locale="$i18n.locale"
|
|
range
|
|
full-width
|
|
></v-date-picker>
|
|
</v-col>
|
|
</v-row>
|
|
|
|
<v-card-text class="d-flex justify-end align-end mt-8">
|
|
<v-btn
|
|
text
|
|
class="remove-upper primary--text rouned-xl px-8"
|
|
@click="setClear([])"
|
|
>
|
|
{{ $t("Clear") }}
|
|
</v-btn>
|
|
<v-btn
|
|
text
|
|
class="remove-upper primary rounded-xl px-8"
|
|
@click="closeDialog"
|
|
>
|
|
{{ $t("Apply") }}
|
|
</v-btn>
|
|
</v-card-text>
|
|
</v-card>
|
|
</v-dialog>
|
|
</v-card-subtitle>
|
|
<v-card-text class="tw-text-complementary-1">
|
|
{{ $t("Select") }}:
|
|
{{
|
|
datesComputed.length == 0
|
|
? $t("All Time")
|
|
: datesComputed.length == 1
|
|
? datesComputed[0]
|
|
: datesComputed[0] + " ~ " + datesComputed[1]
|
|
}}
|
|
</v-card-text>
|
|
</v-card>
|
|
</template>
|
|
|
|
<script>
|
|
import { dateCardFormatDate } from "~/utils/assist";
|
|
|
|
export default {
|
|
props: {
|
|
modalChecked: {
|
|
type: Array,
|
|
default: () => [],
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
dates: [],
|
|
btnList: [
|
|
"Quick Ranges",
|
|
"This month",
|
|
"Next month",
|
|
"This year",
|
|
"Next year",
|
|
],
|
|
selectBtn: null,
|
|
dialog: false,
|
|
clear: false,
|
|
};
|
|
},
|
|
computed: {
|
|
datesComputed() {
|
|
return this.dates.sort();
|
|
},
|
|
},
|
|
mounted() {
|
|
if (this.modalChecked.length > 0) {
|
|
this.dates = [...this.modalChecked];
|
|
}
|
|
},
|
|
watch: {
|
|
dates(newDates, oldDates) {
|
|
if (this.dates.length == 2 || (this.clear && this.dates.length == 0)) {
|
|
this.$emit("selectDates", this.dates);
|
|
}
|
|
},
|
|
modalChecked: {
|
|
handler: function () {
|
|
this.$nextTick(() => {
|
|
if (this.modalChecked.length > 0) {
|
|
this.dates = [...this.modalChecked];
|
|
}
|
|
});
|
|
},
|
|
},
|
|
},
|
|
methods: {
|
|
setDates(dates) {
|
|
this.dates = dates;
|
|
this.clear = false;
|
|
},
|
|
setClear(dates) {
|
|
this.dates = dates;
|
|
this.clear = true;
|
|
},
|
|
closeDialog() {
|
|
this.dialog = !this.dialog;
|
|
this.$emit("update", this.datesComputed);
|
|
},
|
|
clickRange(idx) {
|
|
this.selectBtn = idx;
|
|
if (idx == 0) {
|
|
} else if (idx == 1) {
|
|
var thisMonthFirstDay = dateCardFormatDate(
|
|
new Date(new Date().getFullYear(), new Date().getMonth(), 1)
|
|
);
|
|
var thisMonthLastDay = dateCardFormatDate(
|
|
new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0)
|
|
);
|
|
this.setDates([]);
|
|
this.$nextTick(() => {
|
|
this.setDates([thisMonthFirstDay, thisMonthLastDay]);
|
|
});
|
|
} else if (idx == 2) {
|
|
var nextMonthFirstDay = dateCardFormatDate(
|
|
new Date(new Date().getFullYear(), new Date().getMonth() + 1, 1)
|
|
);
|
|
var nextMonthLastDay = dateCardFormatDate(
|
|
new Date(new Date().getFullYear(), new Date().getMonth() + 2, 0)
|
|
);
|
|
this.setDates([]);
|
|
this.$nextTick(() => {
|
|
this.setDates([nextMonthFirstDay, nextMonthLastDay]);
|
|
});
|
|
} else if (idx == 3) {
|
|
var thisYearFirstDay = new Date().getFullYear() + "-01-01";
|
|
var thisYearLastDay = new Date().getFullYear() + "-12-31";
|
|
this.setDates([]);
|
|
this.$nextTick(() => {
|
|
this.setDates([thisYearFirstDay, thisYearLastDay]);
|
|
});
|
|
} else if (idx == 4) {
|
|
var nextYearFirstDay = new Date().getFullYear() + 1 + "-01-01";
|
|
var nextYearLastDay = new Date().getFullYear() + 1 + "-12-31";
|
|
this.setDates([]);
|
|
this.$nextTick(() => {
|
|
this.setDates([nextYearFirstDay, nextYearLastDay]);
|
|
});
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style></style>
|