yumechi-no-kuni/src/client/app/common/views/widgets/calendar.vue

203 lines
4.4 KiB
Vue
Raw Normal View History

2018-02-14 21:36:42 -06:00
<template>
<div class="mkw-calendar" :data-special="special" :data-mobile="platform == 'mobile'">
2019-02-15 00:35:52 -06:00
<ui-container :naked="props.design == 1" :show-header="false">
2018-05-17 19:40:57 -05:00
<div class="mkw-calendar--body">
<div class="calendar" :data-is-holiday="isHoliday">
<p class="month-and-year">
<span class="year">{{ this.$t('year').split('{}')[0] }}{{ year }}{{ this.$t('year').split('{}')[1] }}</span>
<span class="month">{{ this.$t('month').split('{}')[0] }}{{ month }}{{ this.$t('month').split('{}')[1] }}</span>
2018-05-17 19:40:57 -05:00
</p>
<p class="day">{{ this.$t('day').split('{}')[0] }}{{ day }}{{ this.$t('day').split('{}')[1] }}</p>
2018-08-01 16:58:15 -05:00
<p class="week-day">{{ weekDay }}</p>
2018-02-14 21:36:42 -06:00
</div>
2018-05-17 19:40:57 -05:00
<div class="info">
<div>
<p>{{ $t('today') }}<b>{{ dayP.toFixed(1) }}%</b></p>
2018-05-17 19:40:57 -05:00
<div class="meter">
<div class="val" :style="{ width: `${dayP}%` }"></div>
</div>
</div>
<div>
<p>{{ $t('this-month') }}<b>{{ monthP.toFixed(1) }}%</b></p>
2018-05-17 19:40:57 -05:00
<div class="meter">
<div class="val" :style="{ width: `${monthP}%` }"></div>
</div>
</div>
<div>
<p>{{ $t('this-year') }}<b>{{ yearP.toFixed(1) }}%</b></p>
2018-05-17 19:40:57 -05:00
<div class="meter">
<div class="val" :style="{ width: `${yearP}%` }"></div>
</div>
</div>
2018-02-14 21:36:42 -06:00
</div>
</div>
2019-02-15 00:35:52 -06:00
</ui-container>
2018-02-14 21:36:42 -06:00
</div>
</template>
<script lang="ts">
2018-02-24 09:18:09 -06:00
import define from '../../../common/define-widget';
import i18n from '../../../i18n';
2018-02-14 21:36:42 -06:00
export default define({
name: 'calendar',
2018-02-21 00:30:03 -06:00
props: () => ({
2018-02-14 21:36:42 -06:00
design: 0
2018-02-21 00:30:03 -06:00
})
2018-02-14 21:36:42 -06:00
}).extend({
i18n: i18n('common/views/widgets/calendar.vue'),
2018-02-14 21:36:42 -06:00
data() {
return {
now: new Date(),
year: null,
month: null,
day: null,
weekDay: null,
yearP: null,
dayP: null,
monthP: null,
isHoliday: null,
special: null,
clock: null
};
},
created() {
this.tick();
this.clock = setInterval(this.tick, 1000);
},
beforeDestroy() {
clearInterval(this.clock);
},
methods: {
func() {
if (this.platform == 'mobile') return;
2018-02-14 21:36:42 -06:00
if (this.props.design == 2) {
this.props.design = 0;
} else {
this.props.design++;
}
2018-04-29 03:17:15 -05:00
this.save();
2018-02-14 21:36:42 -06:00
},
tick() {
const now = new Date();
const nd = now.getDate();
const nm = now.getMonth();
const ny = now.getFullYear();
this.year = ny;
this.month = nm + 1;
this.day = nd;
2018-08-01 16:58:15 -05:00
this.weekDay = [
this.$t('@.weekday.sunday'),
this.$t('@.weekday.monday'),
this.$t('@.weekday.tuesday'),
this.$t('@.weekday.wednesday'),
this.$t('@.weekday.thursday'),
this.$t('@.weekday.friday'),
this.$t('@.weekday.saturday')
2018-08-01 16:58:15 -05:00
][now.getDay()];
2018-02-14 21:36:42 -06:00
const dayNumer = now.getTime() - new Date(ny, nm, nd).getTime();
const dayDenom = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/;
const monthNumer = now.getTime() - new Date(ny, nm, 1).getTime();
const monthDenom = new Date(ny, nm + 1, 1).getTime() - new Date(ny, nm, 1).getTime();
const yearNumer = now.getTime() - new Date(ny, 0, 1).getTime();
const yearDenom = new Date(ny + 1, 0, 1).getTime() - new Date(ny, 0, 1).getTime();
this.dayP = dayNumer / dayDenom * 100;
this.monthP = monthNumer / monthDenom * 100;
this.yearP = yearNumer / yearDenom * 100;
this.isHoliday = now.getDay() == 0 || now.getDay() == 6;
this.special =
nm == 0 && nd == 1 ? 'on-new-years-day' :
false;
}
}
});
</script>
<style lang="stylus" scoped>
2018-09-28 05:59:19 -05:00
.mkw-calendar
2018-02-14 21:36:42 -06:00
&[data-special='on-new-years-day']
border-color #ef95a0
2018-05-17 19:40:57 -05:00
.mkw-calendar--body
padding 16px 0
2018-09-27 02:49:18 -05:00
color var(--calendarDay)
2018-02-14 21:36:42 -06:00
2018-05-17 19:40:57 -05:00
&:after
content ""
display block
clear both
2018-02-14 21:36:42 -06:00
2018-05-17 19:40:57 -05:00
> .calendar
float left
width 60%
text-align center
2018-02-14 21:36:42 -06:00
2018-05-17 19:40:57 -05:00
&[data-is-holiday]
> .day
color #ef95a0
2018-02-14 21:36:42 -06:00
> p
2018-05-17 19:40:57 -05:00
margin 0
2018-02-14 21:36:42 -06:00
line-height 18px
2018-05-17 19:40:57 -05:00
font-size 14px
2018-02-14 21:36:42 -06:00
2018-05-17 19:40:57 -05:00
> span
margin 0 4px
2018-02-14 21:36:42 -06:00
2018-05-17 19:40:57 -05:00
> .day
margin 10px 0
line-height 32px
font-size 28px
> .info
display block
float left
width 40%
padding 0 16px 0 0
> div
margin-bottom 8px
&:last-child
margin-bottom 4px
> p
margin 0 0 2px 0
font-size 12px
line-height 18px
2018-09-28 05:59:19 -05:00
color var(--text)
opacity 0.8
2018-05-17 19:40:57 -05:00
> b
margin-left 2px
> .meter
width 100%
overflow hidden
2018-09-28 05:59:19 -05:00
background var(--materBg)
2018-05-17 19:40:57 -05:00
border-radius 8px
> .val
height 4px
2018-09-26 06:19:35 -05:00
background var(--primary)
2018-07-18 10:13:58 -05:00
transition width .3s cubic-bezier(0.23, 1, 0.32, 1)
2018-05-17 19:40:57 -05:00
&:nth-child(1)
> .meter > .val
background #f7796c
&:nth-child(2)
> .meter > .val
background #a1de41
&:nth-child(3)
> .meter > .val
background #41ddde
2018-02-14 21:36:42 -06:00
</style>