Files
confirms/app/Controllers/Manage/Menu.php
2025-12-31 15:11:40 +09:00

168 lines
4.9 KiB
PHP

<?php
namespace App\Controllers\manage;
use App\Controllers\BaseController;
use App\Models\manage\MenuModel;
class Menu extends BaseController
{
private $menuModel;
public function __construct()
{
$this->menuModel = new MenuModel();
}
public function lists(): string
{
return view("pages/manage/menu/lists", $this->data);
}
// 메뉴목록조회
public function getMenuList()
{
$params = [];
$total = $this->menuModel->getTotalCount();
$datas = $this->menuModel->getMenuList($params);
$lft = 1;
if (!empty($datas)) {
foreach ($datas as $k => $v) {
$menuTp = $v['mnu_tp'];
$menuCd = $v['mnu_id'];
$menuPid = $v['mnu_pid'];
// lft
$datas[$k]['lft'] = $lft;
// ROOT vs 나머지 level 계산 (지금처럼 코드 길이 쓰고 싶으면 기존 로직 유지 가능)
if ($menuPid === 'ROOT') {
$datas[$k]['level'] = "0";
$datas[$k]['parentLv'] = "";
$datas[$k]['expanded'] = true;
} else {
// 예: "M" 제거 후 길이 기반
$levelStr = str_replace('M', '', $menuCd);
$len = strlen($levelStr);
if ($len === 1 || $len === 2)
$datas[$k]['level'] = "1";
else
$datas[$k]['level'] = "2"; // 필요시 더 세분화
}
// 아이콘
switch ($menuTp) {
case "A":
$datas[$k]['iconCls'] = "ui-icon-play";
break;
case "P":
$datas[$k]['iconCls'] = "ui-icon-document";
break;
case "D":
$datas[$k]['iconCls'] = "ui-icon-folder-open";
break;
}
if ($menuTp === 'A') {
// 액션
$datas[$k]['isLeaf'] = true;
$datas[$k]['rgt'] = $lft + 1;
$lft++;
} elseif ($menuTp === 'P') {
// 화면: 내 자식은 mnu_pid == 내 mnu_id
$subCnt = 0;
foreach ($datas as $v2) {
if ($v2['mnu_pid'] === $menuCd) {
$subCnt++;
}
}
$datas[$k]['rgt'] = $lft + ($subCnt * 2) + 1;
if ($subCnt === 0) {
$datas[$k]['isLeaf'] = true;
$lft++;
} else {
$datas[$k]['isLeaf'] = false;
}
} elseif ($menuTp === 'D') {
// 디렉토리: 코드 prefix 로 자식/후손 판단 (자바와 동일)
$subCnt = 0;
foreach ($datas as $v2) {
$subMenuCd = $v2['mnu_id'];
if (strpos($subMenuCd, $menuCd) === 0) {
$subCnt++;
}
}
$datas[$k]['rgt'] = $lft + ($subCnt * 2) + 1;
if ($subCnt === 0) {
$datas[$k]['isLeaf'] = true;
$lft++;
} else {
$datas[$k]['isLeaf'] = false;
}
} elseif ($menuTp === 'R') {
// 루트
$datas[$k]['isLeaf'] = false;
$datas[$k]['rgt'] = 1 + ($total * 2) + 1;
}
$lft++;
}
}
// $datas = $this->buildTree($datas);
return $this->response->setJSON(body: [
'total' => $total,
'rows' => $datas,
]);
}
// 메뉴정보저장
public function saveMenu()
{
try {
$data = [
'mnu_pid' => $this->request->getPost('mnu_pid'),
'mnu_id' => $this->request->getPost('mnu_id'),
'mnu_nm' => $this->request->getPost('mnu_nm'),
'mnu_url' => $this->request->getPost('mnu_url'),
'mnu_tp' => $this->request->getPost('mnu_tp'),
'view_odr' => $this->request->getPost('view_odr'),
'use_yn' => $this->request->getPost('use_yn'),
'usr_sq' => session('usr_sq'),
];
// INSERT UPDATE menu
$this->menuModel->saveMenu($data);
return $this->response->setJSON([
'code' => '0',
'msg' => 'success'
]);
} catch (\Exception $e) {
return $this->response->setJSON([
'code' => '9',
'msg' => $e->getMessage(),
]);
}
}
}