diff --git a/plm-api/src/controllers/app/common/common.controller.js b/plm-api/src/controllers/app/common/common.controller.js index ee51309..83a1c1c 100644 --- a/plm-api/src/controllers/app/common/common.controller.js +++ b/plm-api/src/controllers/app/common/common.controller.js @@ -149,4 +149,15 @@ router.get("/select-options", async (req, res, next) => { } }); +// 부모 코드명을 받아서 하위 자식들을 조회하는 엔드포인트 +router.get("/code-select-options", async (req, res, next) => { + try { + const { parentCodeName } = req.query; + const options = await CommonService.getCodeSelectOptionsByParentName(parentCodeName); + res.json(options); + } catch (error) { + next(error); + } +}); + module.exports = router; \ No newline at end of file diff --git a/plm-api/src/services/common.service.js b/plm-api/src/services/common.service.js index 0b3cdfa..0df203e 100644 --- a/plm-api/src/services/common.service.js +++ b/plm-api/src/services/common.service.js @@ -1,4 +1,4 @@ -const { MenuInfo, CommCode, ProductGroup, sequelize } = require("../models"); // sequelize 임포트 추가 +const { MenuInfo, CommCode, sequelize } = require("../models"); // sequelize 임포트 추가 const { Op } = require("sequelize"); @@ -237,6 +237,36 @@ const getSelectOptions = async (modelName, orderField = 'name') => { throw error; } }; + +// 부모 코드명을 받아서 하위 자식들을 조회하는 함수 +const getCodeSelectOptionsByParentName = async (parentCodeName) => { + try { + // 부모 코드명을 사용하여 부모 코드의 ID를 찾음 + const parentCode = await CommCode.findOne({ + where: { code_name: parentCodeName }, + raw: true, + }); + + if (!parentCode) { + throw new Error('Parent code not found'); + } + + // 부모 코드의 ID를 사용하여 자식 코드를 조회 + const options = await CommCode.findAll({ + where: { parent_code_id: parentCode.id }, + order: [['code_name', 'ASC']], + raw: true, + }); + + return { + success: true, + data: options, + }; + } catch (error) { + throw error; + } +}; + //////========================================공통코드==============================================////// module.exports = { @@ -248,6 +278,6 @@ module.exports = { saveCode, deleteCode, toggleCodeActive, - getProductGroups, getSelectOptions, // getSelectOptions 함수 추가 + getCodeSelectOptionsByParentName, // getCodeSelectOptionsByParentName 함수 추가 }; \ No newline at end of file diff --git a/plm-app/src/app/(admin)/common/product/components/ProductForm.tsx b/plm-app/src/app/(admin)/common/product/components/ProductForm.tsx index 9947266..b45183e 100644 --- a/plm-app/src/app/(admin)/common/product/components/ProductForm.tsx +++ b/plm-app/src/app/(admin)/common/product/components/ProductForm.tsx @@ -37,6 +37,7 @@ export const ProductForm: React.FC = ({ }); const [productGroups, setProductGroups] = useState([]); + const [codeOptions, setCodeOptions] = useState([]); useEffect(() => { const fetchSelectOptions = async (modelName, orderField) => { @@ -51,7 +52,20 @@ export const ProductForm: React.FC = ({ } }; + const fetchCodeSelectOptions = async (parentCodeName) => { + try { + const response = await api.get("/api/v1/app/common/code-select-options", { + params: { parentCodeName }, + }); + console.log("Fetched code select options:", response.data.data); // 디버깅 로그 추가 + setCodeOptions(response.data.data); + } catch (error) { + console.error("Failed to fetch code select options:", error); + } + }; + fetchSelectOptions("ProductGroup", "product_group_name"); + fetchCodeSelectOptions("화폐단위"); // parentCodeName을 실제 부모 코드명으로 대체 }, []); return ( @@ -84,7 +98,35 @@ export const ProductForm: React.FC = ({ )} /> - + + ( + + 코드 옵션 + + + + + + )} + /> +