첫 커밋

This commit is contained in:
focp212@naver.com
2025-09-05 15:36:48 +09:00
commit 05238b04c1
825 changed files with 176358 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import {
BusinessMemberTabKeys,
BusinessMemberTabProps
} from '../model/types';
export const BusinessMemberTab = ({
activeTab
}: BusinessMemberTabProps) => {
const { navigate } = useNavigate();
const onClickToNavigation = (tab: BusinessMemberTabKeys) => {
if(activeTab !== tab){
if(tab === BusinessMemberTabKeys.Info){
navigate(PATHS.businessMember.info);
}
else if(tab === BusinessMemberTabKeys.RegistrationStatus){
navigate(PATHS.businessMember.registrationStatus);
}
}
};
return(
<>
<div className="subTab">
<button
className={`subtab-btn ${(activeTab === BusinessMemberTabKeys.Info)? 'active': ''}` }
onClick={ () => onClickToNavigation(BusinessMemberTabKeys.Info) }
> </button>
<button
className={`subtab-btn ${(activeTab === BusinessMemberTabKeys.RegistrationStatus)? 'active': ''}` }
onClick={ () => onClickToNavigation(BusinessMemberTabKeys.RegistrationStatus) }
></button>
</div>
</>
);
};

View File

@@ -0,0 +1,23 @@
import { useEffect, useState } from 'react';
import { IMAGE_ROOT } from '@/shared/constants/common';
import { InfoArrowProps } from '../model/types';
export const InfoArrow = ({ show }: InfoArrowProps) => {
const [altMsg, setAltMsg] = useState<'접기' | '펼치기'>('접기');
const [className, setClassName] = useState<string>('ic20 rot-180');
useEffect(() => {
setAltMsg((show)? '접기': '펼치기');
setClassName(`ic20 ${(show)? 'rot-180': ''}`);
}, [show]);
return (
<>
<img
className={ className }
src={ IMAGE_ROOT + '/select_arrow.svg' }
alt={ altMsg }
/>
</>
);
};

View File

@@ -0,0 +1,36 @@
import { InfoProps } from '../model/types';
export const InfoBasicInfo = ({
InfoBasicInfo
}: InfoProps) => {
return (
<>
<div className="section">
<div className="section-title"></div>
<ul className="kv-list">
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">123-45-16798</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
</ul>
</div>
</>
);
};

View File

@@ -0,0 +1,23 @@
import { InfoProps } from '../model/types';
export const InfoCompanyInfo = ({
InfoCompanyInfo
}: InfoProps) => {
return (
<>
<div className="section">
<ul className="kv-list">
<li className="kv-row">
<span className="k"></span>
<span className="v"> 217()</span>
</li>
<li className="kv-row">
<span className="k"> </span>
<span className="v">https://adm.dev-nicepay.co.kr:8011</span>
</li>
</ul>
</div>
</>
);
};

View File

@@ -0,0 +1,53 @@
import { motion } from 'framer-motion';
import { BusinessMemberInfoKeys, InfoProps } from '../model/types';
import { InfoArrow } from './info-arrow';
export const InfoContractManager = ({
infoContractManager,
show,
onClickToShowInfo
}: InfoProps) => {
const variants = {
hidden: { height: 0, padding: 0, display: 'none' },
visible: { height: 'auto', paddingTop: '12px', display: 'block' },
};
const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){
onClickToShowInfo(BusinessMemberInfoKeys.InfoContractManager);
}
};
return (
<>
<div className="section">
<div className="section-title"
onClick={ () => onClickToSetShowInfo() }
>
<InfoArrow show={ show }></InfoArrow>
</div>
<motion.ul
className="kv-list"
initial="hidden"
animate={ (show)? 'visible': 'hidden' }
variants={ variants }
transition={{ duration: 0.3 }}
>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k">010-1234-****</span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k">testkim@nicepay.co.kr</span>
<span className="v"></span>
</li>
</motion.ul>
</div>
</>
);
};

View File

@@ -0,0 +1,27 @@
import { InfoProps } from '../model/types';
export const InfoOwnerInfo = ({
InfoOwnerInfo
}: InfoProps) => {
return (
<>
<div className="section">
<ul className="kv-list">
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k"> </span>
<span className="v">010-1234-1234</span>
</li>
<li className="kv-row">
<span className="k"> </span>
<span className="v">testkim@nicepay.co.kr</span>
</li>
</ul>
</div>
</>
);
};

View File

@@ -0,0 +1,53 @@
import { motion } from 'framer-motion';
import { BusinessMemberInfoKeys, InfoProps } from '../model/types';
import { InfoArrow } from './info-arrow';
export const InfoSettlementAccount = ({
infoSettlementAccount,
show,
onClickToShowInfo
}: InfoProps) => {
const variants = {
hidden: { height: 0, padding: 0, display: 'none' },
visible: { height: 'auto', paddingTop: '12px', display: 'block' },
};
const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){
onClickToShowInfo(BusinessMemberInfoKeys.InfoSettlementAccount);
}
};
return (
<>
<div className="section">
<div className="section-title"
onClick={ () => onClickToSetShowInfo() }
>
<InfoArrow show={ show }></InfoArrow>
</div>
<motion.ul
className="kv-list"
initial="hidden"
animate={ (show)? 'visible': 'hidden' }
variants={ variants }
transition={{ duration: 0.3 }}
>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v">123-45-16798</span>
</li>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
</motion.ul>
</div>
</>
);
};

View File

@@ -0,0 +1,53 @@
import { motion } from 'framer-motion';
import { BusinessMemberInfoKeys, InfoProps } from '../model/types';
import { InfoArrow } from './info-arrow';
export const InfoSettlementManager = ({
infoSettlementManager,
show,
onClickToShowInfo
}: InfoProps) => {
const variants = {
hidden: { height: 0, padding: 0, display: 'none' },
visible: { height: 'auto', paddingTop: '12px', display: 'block' },
};
const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){
onClickToShowInfo(BusinessMemberInfoKeys.InfoSettlementManager);
}
};
return (
<>
<div className="section">
<div className="section-title"
onClick={ () => onClickToSetShowInfo() }
>
<InfoArrow show={ show }></InfoArrow>
</div>
<motion.ul
className="kv-list"
initial="hidden"
animate={ (show)? 'visible': 'hidden' }
variants={ variants }
transition={{ duration: 0.3 }}
>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k">010-1234-****</span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k">testkim@nicepay.co.kr</span>
<span className="v"></span>
</li>
</motion.ul>
</div>
</>
);
};

View File

@@ -0,0 +1,53 @@
import { motion } from 'framer-motion';
import { BusinessMemberInfoKeys, InfoProps } from '../model/types';
import { InfoArrow } from './info-arrow';
export const InfoTechnicalManager = ({
infoTechnicalManager,
show,
onClickToShowInfo
}: InfoProps) => {
const variants = {
hidden: { height: 0, padding: 0, display: 'none' },
visible: { height: 'auto', paddingTop: '12px', display: 'block' },
};
const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){
onClickToShowInfo(BusinessMemberInfoKeys.InfoTechnicalManager);
}
};
return (
<>
<div className="section">
<div className="section-title"
onClick={ () => onClickToSetShowInfo() }
>
<InfoArrow show={ show }></InfoArrow>
</div>
<motion.ul
className="kv-list"
initial="hidden"
animate={ (show)? 'visible': 'hidden' }
variants={ variants }
transition={{ duration: 0.3 }}
>
<li className="kv-row">
<span className="k"></span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k">010-1234-****</span>
<span className="v"></span>
</li>
<li className="kv-row">
<span className="k">testkim@nicepay.co.kr</span>
<span className="v"></span>
</li>
</motion.ul>
</div>
</>
);
};

View File

@@ -0,0 +1,121 @@
import { useEffect, useState } from 'react';
import { useBusinessMemberInfoMutation } from '../api/use-business-member-info-mutation';
import { InfoBasicInfo } from './info-basic-info';
import { InfoOwnerInfo } from './info-owner-info';
import { InfoCompanyInfo } from './info-company-info';
import { InfoContractManager } from './info-contract-manager';
import { InfoTechnicalManager } from './info-technical-manager';
import { InfoSettlementManager } from './info-settlement-manager';
import { InfoSettlementAccount } from './info-settlement-account';
import {
BusinessMemberInfoParams,
BusinessMemberInfoResponse,
InfoContractManagerProps,
InfoTechnicalManagerProps,
InfoSettlementManagerProps,
InfoSettlementAccountProps,
BusinessMemberInfoKeys
} from '../model/types';
export const InfoWrap = () => {
const [infoContractManager, setInfoContractManager] = useState<InfoContractManagerProps>();
const [infoTechnicalManager, setInfoTechnicalManager] = useState<InfoTechnicalManagerProps>();
const [infoSettlementManager, setInfoSettlementManager] = useState<InfoSettlementManagerProps>();
const [infoSettlementAccount, setInfoSettlementAccount] = useState<InfoSettlementAccountProps>();
const [showInfoContractManager, setShowInfoContractManager] = useState<boolean>(false);
const [showInfoTechnicalManager, setShowInfoTechnicalManager] = useState<boolean>(false);
const [showInfoSettlementManager, setShowInfoSettlementManager] = useState<boolean>(false);
const [showInfoSettlementAccount, setShowInfoSettlemenAccount] = useState<boolean>(false);
const { mutateAsync: businessMemberInfo } = useBusinessMemberInfoMutation();
const callInfo = () => {
let businessMemberInfoParams: BusinessMemberInfoParams = {
svcCd: 'st',
};
businessMemberInfo(businessMemberInfoParams).then((rs: BusinessMemberInfoResponse) => {
setInfoContractManager(rs.infoContractManager);
setInfoTechnicalManager(rs.infoTechnicalManager);
setInfoSettlementManager(rs.infoSettlementManager);
setInfoSettlementAccount(rs.infoSettlementAccount);
});
};
const onClickToShowInfo = (info: BusinessMemberInfoKeys) => {
if(info === BusinessMemberInfoKeys.InfoContractManager){
setShowInfoContractManager(!showInfoContractManager);
}
else if(info === BusinessMemberInfoKeys.InfoTechnicalManager){
setShowInfoTechnicalManager(!showInfoTechnicalManager);
}
else if(info === BusinessMemberInfoKeys.InfoSettlementManager){
setShowInfoSettlementManager(!showInfoSettlementManager);
}
else if(info === BusinessMemberInfoKeys.InfoSettlementAccount){
setShowInfoSettlemenAccount(!showInfoSettlementAccount);
}
};
useEffect(() => {
callInfo();
}, []);
return (
<>
<div className="input-wrapper top-select mt-30">
<select>
<option value="1">nicetest00g</option>
<option value="2">nicetest00g</option>
<option value="3">nicetest00g</option>
</select>
</div>
<div className="merchant-info">
<InfoBasicInfo></InfoBasicInfo>
<div className="info-divider mb-16"></div>
<InfoOwnerInfo></InfoOwnerInfo>
<div className="info-divider mb-16"></div>
<InfoCompanyInfo></InfoCompanyInfo>
<div className="info-divider mb-16"></div>
<InfoContractManager
infoContractManager={ infoContractManager }
show={ showInfoContractManager }
onClickToShowInfo={ (info) => onClickToShowInfo(info) }
></InfoContractManager>
<div className="info-divider mb-16"></div>
<InfoTechnicalManager
infoTechnicalManager={ infoTechnicalManager }
show={ showInfoTechnicalManager }
onClickToShowInfo={ (info) => onClickToShowInfo(info) }
></InfoTechnicalManager>
<div className="info-divider mb-16"></div>
<InfoSettlementManager
infoSettlementManager={ infoSettlementManager }
show={ showInfoSettlementManager }
onClickToShowInfo={ (info) => onClickToShowInfo(info) }
></InfoSettlementManager>
<div className="info-divider mb-16"></div>
<InfoSettlementAccount
infoSettlementManager={ infoSettlementAccount }
show={ showInfoSettlementAccount }
onClickToShowInfo={ (info) => onClickToShowInfo(info) }
></InfoSettlementAccount>
<div className="notice-bottom left-align">
<p className="notice-tip"> .<br/>PC .</p>
</div>
</div>
</>
);
};

View File

@@ -0,0 +1,8 @@
export const RegistrationStatusWrap = () => {
return (
<>
</>
);
};