mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-09-14 16:21:15 +08:00
70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
import { defineComponent } from 'vue';
|
|
import { createNamespace } from '../utils';
|
|
import { t, bem } from './utils';
|
|
|
|
const [name] = createNamespace('calendar-header');
|
|
|
|
export default defineComponent({
|
|
name,
|
|
|
|
props: {
|
|
title: String,
|
|
subtitle: String,
|
|
showTitle: Boolean,
|
|
showSubtitle: Boolean,
|
|
firstDayOfWeek: Number,
|
|
},
|
|
|
|
emits: ['click-subtitle'],
|
|
|
|
setup(props, { slots, emit }) {
|
|
const renderTitle = () => {
|
|
if (props.showTitle) {
|
|
const text = props.title || t('title');
|
|
const title = slots.title ? slots.title() : text;
|
|
return <div class={bem('header-title')}>{title}</div>;
|
|
}
|
|
};
|
|
|
|
const onClickSubtitle = (event: MouseEvent) => {
|
|
emit('click-subtitle', event);
|
|
};
|
|
|
|
const renderSubtitle = () => {
|
|
if (props.showSubtitle) {
|
|
const title = slots.subtitle ? slots.subtitle() : props.subtitle;
|
|
return (
|
|
<div class={bem('header-subtitle')} onClick={onClickSubtitle}>
|
|
{title}
|
|
</div>
|
|
);
|
|
}
|
|
};
|
|
|
|
const renderWeekDays = () => {
|
|
const { firstDayOfWeek } = props;
|
|
const weekdays = t('weekdays');
|
|
const renderWeekDays = [
|
|
...weekdays.slice(firstDayOfWeek, 7),
|
|
...weekdays.slice(0, firstDayOfWeek),
|
|
];
|
|
|
|
return (
|
|
<div class={bem('weekdays')}>
|
|
{renderWeekDays.map((text) => (
|
|
<span class={bem('weekday')}>{text}</span>
|
|
))}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
return () => (
|
|
<div class={bem('header')}>
|
|
{renderTitle()}
|
|
{renderSubtitle()}
|
|
{renderWeekDays()}
|
|
</div>
|
|
);
|
|
},
|
|
});
|