You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
4.3 KiB
TypeScript

import classnames from "classnames";
import Taro from "@tarojs/taro";
import dayjs, { Dayjs } from "dayjs";
import React from "react";
import { Text, View, Block, Image } from "@tarojs/components";
import { DatetimePicker, Popup } from "@antmjs/vantui";
import _ from "lodash";
import {
AtCalendarControllerProps,
AtCalendarControllerState,
} from "../../../../types/calendar";
import "./index.less";
let _currentDate = 0;
export default class AtCalendarController extends React.Component<any, any> {
public constructor(props: any) {
super(props);
this.state = {
showDatePicker: false,
selectDate: 0,
curDate: dayjs(this.props.currentDate).valueOf(),
tempDate: 0,
};
}
onChangeDate = (e) => {
e.stopPropagation();
};
onInput = (e) => {
_currentDate = e.detail;
};
onClickStop = (e) => {
e.stopPropagation();
};
onSelectDate = () => {
this.props.onSelectDate(_currentDate);
this.onPopupClose();
};
onPopupClose = () => {
this.setState({ showDatePicker: false });
};
onConfirm(e) {
console.log("confirm", e);
}
openDate = () => {
this.setState({
showDatePicker: true,
curDate: dayjs(this.props.currentDate).valueOf(),
});
};
public render(): JSX.Element {
const {
generateDate,
minDate,
maxDate,
monthFormat,
hideArrow,
currentDate,
} = this.props;
const dayjsDate: Dayjs = dayjs(generateDate);
const dayjsMinDate: Dayjs | boolean = !!minDate && dayjs(minDate);
const dayjsMaxDate: Dayjs | boolean = !!maxDate && dayjs(maxDate);
const isMinMonth: boolean =
dayjsMinDate && dayjsMinDate.startOf("month").isSame(dayjsDate);
const isMaxMonth: boolean =
dayjsMaxDate && dayjsMaxDate.startOf("month").isSame(dayjsDate);
const minDateValue: string = dayjsMinDate
? dayjsMinDate.format("YYYY-MM")
: "";
const maxDateValue: string = dayjsMaxDate
? dayjsMaxDate.format("YYYY-MM")
: "";
let { showDatePicker, curDate } = this.state;
_currentDate = curDate;
return (
<Block>
<View className="at-calendar__controller controller flex-justify-sb">
{hideArrow ? null : (
<View
className={classnames(
"controller__arrow controller__arrow--left",
{
"controller__arrow--disabled": isMinMonth,
}
)}
onClick={this.props.onPreMonth.bind(this, isMinMonth)}
/>
)}
<View className="calendar-top-date-btn">
<View
style="display: flex;align-items: center;"
onClick={this.openDate}
>
{/* <Text className="controller__info"></Text> */}
{/* <Text>{dayjsDate.format(monthFormat)}</Text> */}
<Text style={{ fontSize: "36rpx", fontWeight: "600" }}>
{dayjsDate.format("YYYY.MM.DD")}
</Text>
<View style="margin-left: 34rpx;">
<Image
src={require("../img/calendar.png")}
style="width:34rpx;height:34rpx;"
/>
</View>
</View>
</View>
<View></View>
</View>
<Popup
show={showDatePicker}
position="bottom"
// close-icon="/img/fr200/close.png"
round
onClick={this.onClickStop}
// onClose={this.onPopupClose}
>
<View className="toolbar">
<View className="toolbar_title">
<Text></Text>
<View
style="margin-left: 20rpx;color:#666;font-size: 34rpx"
className="at-icon at-icon-close popup-date-close"
onClick={this.onPopupClose}
></View>
</View>
<View className="select_box">
<View className="text"></View>
<View className="date">{currentDate}</View>
</View>
</View>
<DatetimePicker
type="date"
value={curDate}
maxDate={maxDate}
onInput={_.throttle(this.onInput.bind(this), 500)}
/>
<View className="btn_confirm" onClick={this.onSelectDate}>
</View>
</Popup>
</Block>
);
}
}