정산달력

This commit is contained in:
focp212@naver.com
2025-09-18 19:43:09 +09:00
parent c1e6e4247f
commit e795e3343d
3 changed files with 64 additions and 23 deletions

View File

@@ -14,10 +14,20 @@ export const CalendarAmountRow = ({
const makeTitle = () => { const makeTitle = () => {
let rs = []; let rs = [];
if(settlementStatus === SettlementStatus.SCHEDULED){ if(settlementStatus === SettlementStatus.SCHEDULED){
rs.push(<span className="scheduled"></span>) rs.push(
<span
key='amount-label-scheduled'
className="scheduled"
></span>
);
} }
else if(settlementStatus === SettlementStatus.COMPLETED){ else if(settlementStatus === SettlementStatus.COMPLETED){
rs.push(<span className="complete"></span>) rs.push(
<span
key='amount-label-complete'
className="complete"
></span>
);
} }
return rs; return rs;
}; };

View File

@@ -127,7 +127,8 @@ export const CalendarWrap = () => {
<CalendarGrid <CalendarGrid
yearMonth={ yearMonth } yearMonth={ yearMonth }
settlementDays={ [...scheduledList, ...completedList] } scheduledList={ scheduledList }
completedList={ completedList }
></CalendarGrid> ></CalendarGrid>
<div className="settlement-list"> <div className="settlement-list">

View File

@@ -1,26 +1,38 @@
import moment from 'moment'; import moment from 'moment';
import { SettlementDays, SettlementStatus } from '../model/types'; import { SettlementDays, SettlementStatus } from '../model/types';
import { useEffect, useState } from 'react';
export interface CalendarGridProps { export interface CalendarGridProps {
yearMonth: string; yearMonth: string;
settlementDays: Array<SettlementDays | undefined> scheduledList: Array<SettlementDays | undefined>;
completedList: Array<SettlementDays | undefined>;
}; };
export const CalendarGrid = ({ export const CalendarGrid = ({
yearMonth, yearMonth,
settlementDays scheduledList,
completedList,
}: CalendarGridProps) => { }: CalendarGridProps) => {
const checkData = (val: number) => { const [scheduledDateList, setScheduledDateList] = useState<Array<number>>();
let rs: SettlementStatus | undefined; const [completedDateList, setCompletedDateList] = useState<Array<number>>();
for(let i=0;i<settlementDays.length;i++){ const [assembled, setAssembled] = useState<boolean>(false);
let date = moment(settlementDays[i]?.settlementDate).date();
if(val === date){ const assembleDate = () => {
rs = settlementDays[i]?.settlementStatus; let rsScheduledDate = [];
break; let rsCompletedList = [];
} for(let i=0;i<scheduledList.length;i++){
let date = moment(scheduledList[i]?.settlementDate).date();
rsScheduledDate.push(date);
} }
return rs; for(let i=0;i<completedList.length;i++){
let date = moment(completedList[i]?.settlementDate).date();
rsCompletedList.push(date);
}
setScheduledDateList(rsScheduledDate);
setCompletedDateList(rsCompletedList);
setAssembled(true);
}; };
const makeCalendarDate = () => { const makeCalendarDate = () => {
@@ -34,36 +46,54 @@ export const CalendarGrid = ({
let rs = []; let rs = [];
for(let i=0;i<startDay;i++){ for(let i=0;i<startDay;i++){
rs.push( rs.push(
<div className="day other">{ (lastYearMonthLastDate - startDay + i + 1) }</div> <div
key={ `key-day-item=other-prev-${i}` }
className="day other"
>{ (lastYearMonthLastDate - startDay + i + 1) }</div>
); );
} }
for(let i=1;i<=lastDate;i++){ for(let i=1;i<=lastDate;i++){
let ck = checkData(i); if(scheduledDateList?.includes(i)){
if(ck === SettlementStatus.SCHEDULED){
rs.push( rs.push(
<div className="day scheduled">{ i }</div> <div
key={ `key-day-item-${i}` }
className="day scheduled"
>{ i }</div>
); );
} }
else if(ck === SettlementStatus.COMPLETED){ else if(completedDateList?.includes(i)){
rs.push( rs.push(
<div className="day complete">{ i }</div> <div
key={ `key-day-item-${i}` }
className="day complete"
>{ i }</div>
); );
} }
else{ else{
rs.push( rs.push(
<div className="day">{ i }</div> <div
key={ `key-day-item-${i}` }
className="day"
>{ i }</div>
); );
} }
} }
for(let i=0;i<lastOthersCnt;i++){ for(let i=0;i<lastOthersCnt;i++){
rs.push( rs.push(
<div className="day other">{ (i + 1) }</div> <div
key={ `key-day-item-other-next-${i}` }
className="day other"
>{ (i + 1) }</div>
); );
} }
return rs; return rs;
} }
useEffect(() => {
assembleDate();
}, [yearMonth])
return ( return (
<> <>
<div className="calendar-grid"> <div className="calendar-grid">
@@ -77,7 +107,7 @@ export const CalendarGrid = ({
<div className="weekday sat"></div> <div className="weekday sat"></div>
</div> </div>
<div className="days"> <div className="days">
{ makeCalendarDate() } { !!assembled && makeCalendarDate() }
</div> </div>
</div> </div>
</> </>