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

<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>