3달간 수정 사항

This commit is contained in:
comicgum
2026-09-04 23:52:28 +09:00
parent d26eb50875
commit 4187407e96
110 changed files with 4439 additions and 2456 deletions
@@ -4,7 +4,7 @@ import Label from '@/components/form/Label2';
import Input from '@/components/form/input/InputField2';
import CtModal from "@/components/CtModal";
import { useMultiState } from "@/hooks/useMultiState";
import api, { formatBusinessNumber } from '@/lib/_AG';
import api, { formatBusinessNumber, isValidBusinessNumber } from '@/lib/_AG';
export interface BizGroupModalProps {
@@ -30,13 +30,17 @@ export default function AddModifyBizGroupModal({ multiState, onOk, isOpen, close
const handleClickAddOrModify = () => {
if (multiState.values.name == "") {
alert("그룹(사업자명)을 입력하셔야 합니다.");
alert("그룹(사업자)명을 입력하셔야 합니다.");
return;
}
//else if (multiState.values.biz_reg_num == "") {
// alert("사업자등록번호를 입력하셔야 합니다.");
// return;
//}
if (multiState.values.biz_reg_num != "" && !isValidBusinessNumber(multiState.values.biz_reg_num)) {
if (!confirm("잘못된 형식의 사업자등록번호입니다. 그래도 등록하시겠습니까?"))
return;
}
if (multiState.values.isModify) {
api.post('/api/modify-biz-group.do', multiState.values).then((resp) => {
@@ -96,7 +100,7 @@ export default function AddModifyBizGroupModal({ multiState, onOk, isOpen, close
className="max-w-[700px] p-6 lg:p-10"
>
<div>
<Label redPoint>()</Label>
<Label redPoint>()</Label>
<Input type="text" value={multiState.values.name} onChange={(e) => multiState.set("name", e.target.value)} />
</div>
<div>
@@ -9,7 +9,7 @@ import Input from '@/components/form/input/InputField2';
import DatePicker from '@/components/form/date-picker2';
import React, { Key } from "react";
import { useEffect, useState } from 'react';
import api, { convertDateTime3, formatBusinessNumber, useAuthStore } from '@/lib/_AG';
import api, { addDaysYMD, convertDateTime3, formatBusinessNumber, isValidBusinessNumber, todayYMD, useAuthStore } from '@/lib/_AG';
import { useModal } from "@/hooks/useModal";
import AddModifyBizGroupModal, { BizGroupModalProps } from './AddModifyBizGroupModal';
@@ -19,7 +19,7 @@ import CtTree, { CtTreeNode, expandAndSelectTreeNode, getAllNodeKeys, findParent
import { tree } from "next/dist/build/templates/app-page";
import { useRouter } from "next/router";
const SEARCH_LABEL_WIDTH = 24;
const SEARCH_LABEL_WIDTH_PX = 80;
// api component
@@ -126,22 +126,22 @@ export default function BizGroupContent({
}: BizGroupContentProps) {
const tokenPayload = useAuthStore((s) => s.tokenPayload); //Bruce, JWT
const {isOpen, openModal, closeModal} = useModal();
const { isOpen, openModal, closeModal } = useModal();
// tree part
const [treeData, setTreeData] = useState<CtTreeNode[]>(preloadTreeData ? preloadTreeData : []);
const [selectedTreeKeys, setSelectedTreeKeys] = useState<Key[]>(preloadTreeData ? [preloadTreeData[0].key as string] : []);
const [expandedTreeKeys, setExpandedTreeKeys] = useState<Key[]>(preloadTreeData ? getAllNodeKeys(preloadTreeData) : []);
const [ treeData, setTreeData ] = useState<CtTreeNode[]>(preloadTreeData ? preloadTreeData : []);
const [ selectedTreeKeys, setSelectedTreeKeys ] = useState<Key[]>(preloadTreeData ? [preloadTreeData[0].key as string] : []);
const [ expandedTreeKeys, setExpandedTreeKeys ] = useState<Key[]>(preloadTreeData ? getAllNodeKeys(preloadTreeData) : []);
// search fields
const [name, setName] = useState<string>("");
const [biz_reg_num, setBizRegNum] = useState<string>("");
const [date_start, setDateStart] = useState<string>("");
const [date_end, setDateEnd] = useState<string>("");
const [ name, setName ] = useState<string>("");
const [ biz_reg_num, setBizRegNum ] = useState<string>("");
const [ date_start, setDateStart ] = useState<string>();
const [ date_end, setDateEnd ] = useState<string>();
//
// form fields
const [formInfo, setFormInfo] = useState({name: "", biz_reg_num: "", email: "", phone: "", ceo: "", address: ""});
const [ formInfo, setFormInfo ] = useState({name: "", biz_reg_num: "", email: "", phone: "", ceo: "", address: ""});
const handleChangeFormInfo = (field: string, value?: string | number) => { setFormInfo(prev => ({ ...prev, [field]: value ?? "" })); };
// modal values
@@ -175,13 +175,17 @@ export default function BizGroupContent({
function reqModifyBizGroup(biz_group_id: Key) {
if (formInfo.name == "") {
alert("그룹(사업자명)을 입력하셔야 합니다.");
alert("그룹(사업자)명을 입력하셔야 합니다.");
return;
}
//else if (formInfo.biz_reg_num == "") {
// alert("사업자등록번호를 입력하셔야 합니다.");
// return;
//}
if (formInfo.biz_reg_num != "" && !isValidBusinessNumber(formInfo.biz_reg_num)) {
if (!confirm("잘못된 형식의 사업자등록번호입니다. 그래도 등록하시겠습니까?"))
return;
}
const params = {
biz_group_id: biz_group_id,
@@ -233,17 +237,17 @@ export default function BizGroupContent({
}
const handleClickSearch = () => {
if (tokenPayload?.permission == 1) {
if (tokenPayload?.permission == 0xffffffff) {
if (name == "" && biz_reg_num == "") {
alert("그룹(사업자명) 또는 사업자등록번호를 입력하셔야 합니다.");
alert("그룹(사업자)명 또는 사업자등록번호를 입력하셔야 합니다.");
return;
}
if (name != "" && name.length < 3) {
alert("그룹(사업자명)글자 이상 입력해야 합니다.");
if (name != "" && name.length < 2) {
alert("그룹(사업자)명은 글자 이상 입력해야 합니다.");
return;
}
if (biz_reg_num != "" && biz_reg_num.length < 3) {
alert("사업자등록번호는 글자 이상 입력해야 합니다.");
if (biz_reg_num != "" && biz_reg_num.length < 2) {
alert("사업자등록번호는 글자 이상 입력해야 합니다.");
return;
}
@@ -339,11 +343,11 @@ export default function BizGroupContent({
<ComponentCard title={title} titleIcon={titleIcon}>
<div className="space-y-3">
<div className="grid grid-cols-1 gap-3 sm:grid-cols-4">
<WithLabel label="그룹(사업자명)" label_width={SEARCH_LABEL_WIDTH}>
<Input type="text" placeholder="조회할 그룹(사업자명)을 입력하세요." value={name} onChange={(e) => setName(e.target.value)}
<WithLabel label="그룹(사업자)명" label_width={SEARCH_LABEL_WIDTH_PX}>
<Input type="text" placeholder="조회할 그룹(사업자)명을 입력하세요." value={name} onChange={(e) => setName(e.target.value)}
onKeyDown={(e) => {if (e.key === "Enter") handleClickSearch()}} />
</WithLabel>
<WithLabel label="사업자번호" label_width={SEARCH_LABEL_WIDTH}>
<WithLabel label="사업자번호" label_width={SEARCH_LABEL_WIDTH_PX}>
<Input type="text" placeholder="조회할 사업자번호를 입력하세요." value={biz_reg_num} onChange={(e) => handleChangeBizRegNum(e.target.value)}
onKeyDown={(e) => {if (e.key === "Enter") handleClickSearch()}} />
</WithLabel>
@@ -353,17 +357,19 @@ export default function BizGroupContent({
</div>
{/*
<div className="space-y-2 grid grid-cols-1 gap-3 sm:grid-cols-2">
<WithLabel label="등록일" label_width={SEARCH_LABEL_WIDTH}>
<div className="grid grid-cols-1 gap-3 sm:grid-cols-2">
<WithLabel label="등록일" label_width={50}>
<div className="grid grid-cols-2 gap-3 sm:grid-cols-2">
<DatePicker
id="date_start-picker"
placeholder="조회 시작일"
onChange={(dates, currentDateString) => { setDateStart(currentDateString); }}
defaultDate={date_start}
/>
<DatePicker
id="date_end-picker"
placeholder="조회 종료일"
onChange={(dates, currentDateString) => { setDateEnd(currentDateString); }}
defaultDate={date_end}
/>
</div>
</WithLabel>
@@ -399,9 +405,9 @@ export default function BizGroupContent({
</div>
</ComponentCard>
<div className="w-[380px]">
<div className="flex-1 space-y-6">
<div className="flex-1 space-y-4">
<div>
<Label>()</Label>
<Label>()</Label>
<Input type="text" value={formInfo.name} onChange={(e) => handleChangeFormInfo("name", e.target.value)} />
</div>
<div>