정산달력

This commit is contained in:
focp212@naver.com
2025-09-18 19:06:38 +09:00
parent 44aa613609
commit c1e6e4247f
3 changed files with 114 additions and 60 deletions

View File

@@ -0,0 +1,85 @@
import moment from 'moment';
import { SettlementDays, SettlementStatus } from '../model/types';
export interface CalendarGridProps {
yearMonth: string;
settlementDays: Array<SettlementDays | undefined>
};
export const CalendarGrid = ({
yearMonth,
settlementDays
}: CalendarGridProps) => {
const checkData = (val: number) => {
let rs: SettlementStatus | undefined;
for(let i=0;i<settlementDays.length;i++){
let date = moment(settlementDays[i]?.settlementDate).date();
if(val === date){
rs = settlementDays[i]?.settlementStatus;
break;
}
}
return rs;
};
const makeCalendarDate = () => {
let startDay = moment(yearMonth).startOf('month').day();
let lastDate = moment(yearMonth).endOf('month').date();
let lastYearMonth = moment(yearMonth).subtract(1, 'month').format('YYYY-MM');
let lastYearMonthLastDate = moment(lastYearMonth).endOf('month').date();
let lastOthersCnt = (7 - ((startDay + lastDate) % 7));
let rs = [];
for(let i=0;i<startDay;i++){
rs.push(
<div className="day other">{ (lastYearMonthLastDate - startDay + i + 1) }</div>
);
}
for(let i=1;i<=lastDate;i++){
let ck = checkData(i);
if(ck === SettlementStatus.SCHEDULED){
rs.push(
<div className="day scheduled">{ i }</div>
);
}
else if(ck === SettlementStatus.COMPLETED){
rs.push(
<div className="day complete">{ i }</div>
);
}
else{
rs.push(
<div className="day">{ i }</div>
);
}
}
for(let i=0;i<lastOthersCnt;i++){
rs.push(
<div className="day other">{ (i + 1) }</div>
);
}
return rs;
}
return (
<>
<div className="calendar-grid">
<div className="weekdays">
<div className="weekday sun"></div>
<div className="weekday"></div>
<div className="weekday"></div>
<div className="weekday"></div>
<div className="weekday"></div>
<div className="weekday"></div>
<div className="weekday sat"></div>
</div>
<div className="days">
{ makeCalendarDate() }
</div>
</div>
</>
)
};