new
Some checks failed
Close Pull Request / main (pull_request_target) Has been cancelled

This commit is contained in:
yangsh
2025-12-09 17:28:31 +09:00
parent f5eb8d4788
commit 735120f1cb
378 changed files with 24267 additions and 9248 deletions

View File

@@ -0,0 +1,137 @@
<?php
namespace App\Controllers\manage;
use App\Controllers\BaseController;
use App\Models\manage\DeptModel;
class Dept extends BaseController
{
private $deptModel;
public function __construct()
{
$this->deptModel = new DeptModel();
}
public function dept(): string
{
return view("pages/manage/dept/lists");
}
// 총괄팀장 페이지
public function getchkuser(): string
{
return view("pages/manage/dept/users");
}
public function getDeptList()
{
$start = (int) $this->request->getGet('start') ?: 0;
$end = (int) $this->request->getGet('length') ?: 10;
$data = [
'srchDepth' => $this->request->getGet('srchDepth') ?: '',
'srcDeptNm' => $this->request->getGet('srcDeptNm') ?: '',
'srcDeptHead' => $this->request->getGet('srcDeptHead') ?: '',
'useYn' => $this->request->getGet('useYn') ?: '',
];
$totalCount = $this->deptModel->getTotalCount($data);
$datas = $this->deptModel->getDeptList($start, $end, $data);
return $this->response->setJSON(body: [
'recordsTotal' => $totalCount,
'recordsFiltered' => $totalCount,
'data' => $datas,
]);
}
// 유저목록 조회
public function getUserList()
{
$start = (int) $this->request->getGet('start') ?: 0;
$end = (int) $this->request->getGet('length') ?: 10;
$totalCount = $this->deptModel->getUserCount();
$datas = $this->deptModel->getUserList($start, $end);
return $this->response->setJSON(body: [
'recordsTotal' => $totalCount,
'recordsFiltered' => $totalCount,
'data' => $datas,
]);
}
// 상위조직 조회
public function getPdept()
{
$datas = $this->deptModel->getPdept();
return $this->response->setJSON(body: [
'data' => $datas,
]);
}
// 조직정보 저장
public function saveDept()
{
try {
$type = $this->request->getPost('type');
if ($type == "create") {
$data = [
$this->request->getPost("addPdept"), // 상위조직
$this->request->getPost("addDeptNm"), // 조직명칭
$this->request->getPost("addDeptDesc"), // 부서설명
$this->request->getPost("addDeptHead"), // 총괄팀장
$this->request->getPost(index: "addUseYn"), // 사용여부
$this->request->getPost(index: "addDepth"), // 조직구분
session('usr_sq'),
session('usr_sq'),
];
// INSERT departments
$this->deptModel->insertDept($data);
} else if ($type == "update") {
$data = [
$this->request->getPost("pdept_sq"),
$this->request->getPost("addDeptNm"), // 조직명칭
$this->request->getPost("addDeptDesc"), // 부서설명
$this->request->getPost("addDeptHead"), // 총괄팀장
$this->request->getPost("addUseYn"), // 사용여부
$this->request->getPost("addDepth"), // 조직구분
session('usr_sq'),
$this->request->getPost("dept_sq"),
];
// UPDATE departments
$this->deptModel->updateDept($data);
}
return $this->response->setJSON([
'code' => '0',
'msg' => 'success'
]);
} catch (\Exception $e) {
return $this->response->setJSON([
'code' => '9',
'msg' => $e->getMessage(),
]);
}
}
}

View File

@@ -0,0 +1,56 @@
<?php
namespace App\Controllers\manage;
use App\Controllers\BaseController;
use App\Models\manage\LoginLogModel;
class LoginLog extends BaseController
{
private $logModel;
public function __construct()
{
$this->logModel = new LoginLogModel();
}
public function lists()
{
return view("pages/manage/log/lists");
}
public function getLogList()
{
$start = (int) $this->request->getGet('start') ?: 0;
$end = (int) $this->request->getGet('length') ?: 10;
$data = [
'srchTxt' => $this->request->getGet('search[value]') ?: '',
];
$totalCount = $this->logModel->getTotalCount($data);
$datas = $this->logModel->getLoginLogList($start, $end, $data);
return $this->response->setJSON(body: [
'recordsTotal' => $totalCount,
'recordsFiltered' => $totalCount,
'data' => $datas,
]);
}
public function excel()
{
$data = [
'srchTxt' => $this->request->getGet('search[value]') ?: '',
];
$datas = $this->logModel->getExcelDownList($data);
return $this->response->setJSON(body: [
'data' => $datas,
]);
}
}

View File

@@ -0,0 +1,225 @@
<?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");
}
// 메뉴목록조회
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,
]);
}
// private function buildTree(array $items, $parentId = 'ROOT', int $level = 0): array
// {
// $branch = [];
// $lft = 1;
// foreach ($items as $k => $item) {
// // 현재 parentId의 자식인지 확인
// if ($item['mnu_pid'] === $parentId) {
// $item['lft'] = $lft;
// if ($item['mnu_tp'] === 'R') {
// $item['isLeaf'] = false;
// $item['rgt'] = 1 + (63 * 2 + 1);
// } else if ($item['mnu_tp'] === 'D') {
// $item['level'] = 1;
// $item['menu_tp'] = 'D';
// $item['menu_tp_nm'] = '디렉토리';
// $item['iconCls'] = 'ui-icon-folder-open';
// $subCnt = 0;
// foreach ($items as $item2):
// if (strpos($item2['mnu_id'], $item['mnu_id'] . '.') === 0) {
// $subCnt++;
// }
// endforeach;
// $item['rgt'] = $lft + ($subCnt * 2) + 1;
// if ($subCnt === 0) {
// $item['isLeaf'] = true;
// } else {
// $item['isLeaf'] = false;
// }
// } else if ($item['mnu_tp'] == 'P') {
// $item['level'] = 2;
// $item['menu_tp'] = 'R';
// $item['menu_tp_nm'] = '화면';
// $item['iconCls'] = 'ui-icon-document';
// }
// // else {
// // // 예: 루트 R 같은 경우
// // $item['menu_tp'] = $item['mnu_tp'];
// // $item['menu_tp_nm'] = ($item['mnu_tp'] === 'R') ? '루트' : '메뉴';
// // $item['iconCls'] = 'ui-icon-home';
// // }
// // 자식 찾기 (⚠️ 여기 반드시 $this->buildTree)
// // $children = $this->buildTree($items, $item['mnu_id'], $level + 1);
// // if (!empty($children)) {
// // // 자식 정렬 (view_odr → mnu_id 순)
// // usort($children, function ($a, $b) {
// // $ao = $a['view_odr'] ?? 0;
// // $bo = $b['view_odr'] ?? 0;
// // if ($ao == $bo) {
// // return strcmp($a['mnu_id'], $b['mnu_id']);
// // }
// // return $ao <=> $bo;
// // });
// // $item['children'] = $children;
// // }
// $branch[] = $item;
// }
// $lft++;
// }
// // 현재 레벨도 정렬 (view_odr → mnu_id 순)
// usort($branch, function ($a, $b) {
// $ao = $a['view_odr'] ?? 0;
// $bo = $b['view_odr'] ?? 0;
// if ($ao == $bo) {
// return strcmp($a['mnu_id'], $b['mnu_id']);
// }
// return $ao <=> $bo;
// });
// return $branch;
// }
}

View File

@@ -0,0 +1,115 @@
<?php
namespace App\Controllers\manage;
use App\Controllers\BaseController;
use App\Models\manage\PhoneModel;
class Phone extends BaseController
{
private $phoneModel;
public function __construct()
{
$this->phoneModel = new PhoneModel();
}
public function lists(): string
{
$codes = $this->phoneModel->getCodes();
return view("pages/manage/phone/lists", ['code' => $codes]);
}
// 전화확인 목록조회
public function getDuplPhoneList()
{
$start = (int) $this->request->getGet('start') ?: 0;
$end = (int) $this->request->getGet('length') ?: 10;
$data = [
'srchTxt' => $this->request->getGet('search[value]') ?: '',
];
$totalCount = $this->phoneModel->getTotalCount($data);
$datas = $this->phoneModel->getDuplPhoneList($start, $end, $data);
return $this->response->setJSON(body: [
'recordsTotal' => $totalCount,
'recordsFiltered' => $totalCount,
'data' => $datas,
]);
}
// 전화정보 저장
public function savePhone()
{
try {
if ($this->validPhone($this->request->getPost('phone_number'))) {
return $this->response->setJSON([
'code' => '1',
'msg' => '유효하지 않은 연락처'
]);
}
$type = $this->request->getPost('type');
$data = [
$this->request->getPost('phone_number'), // 연락처
$this->request->getPost('use_yn'),
$this->request->getPost('s_date'),
$this->request->getPost('e_date'),
$this->request->getPost('address'),
$this->request->getPost('owner'),
$this->request->getPost('applicant'),
$this->request->getPost('relation'),
$this->request->getPost('cpid'),
$this->request->getPost(index: 'memo'),
session('usr_id'),
];
if ($type === "create") {
// INSERT dupl_phone_list
$this->phoneModel->insertDuplPhone($data);
} else if ($type === "update") {
array_push($data, $this->request->getPost("phone_number"));
// UPDATE dupl_phone_list
$this->phoneModel->updateDuplPhone($data);
}
return $this->response->setJSON([
'code' => '0',
'msg' => 'success'
]);
} catch (\Exception $e) {
return $this->response->setJSON([
'code' => '9',
'msg' => $e->getMessage(),
]);
}
}
// 연락처 유효성검사
private function validPhone($phone)
{
if (preg_match('/^01[0-9]-?\d{3,4}-?\d{4}$/', $phone)) {
return true;
} else {
return false;
}
}
}

View File

@@ -0,0 +1,183 @@
<?php
namespace App\Controllers\manage;
use App\Controllers\BaseController;
use App\Models\manage\UserModel;
class User extends BaseController
{
private $userModel;
public function __construct()
{
$this->userModel = new UserModel();
}
public function user(): string
{
$userLevel = $this->userModel->getUserLevel();
$bonbuList = $this->userModel->getBonbuList();
$teamList = $this->userModel->getTeamList();
$deptCode = $this->userModel->getDeptCode();
return view("pages/manage/user/lists", [
'userLevel' => $userLevel,
'bonbuList' => $bonbuList,
'teamList' => $teamList,
'deptCode' => $deptCode,
]);
}
public function getUserList()
{
$start = (int) $this->request->getGet('start') ?: 0;
$end = (int) $this->request->getGet('length') ?: 10;
$data = [
'srchLevel' => $this->request->getGet('srchLevel') ?: '',
'srchBonbu' => $this->request->getGet('srchBonbu') ?: '',
'srchTeam' => $this->request->getGet('srchTeam') ?: '',
'useYn' => $this->request->getGet('useYn') ?: '',
'srchType' => $this->request->getGet('srchType') ?: '',
'srchTxt' => $this->request->getGet('srchTxt') ?: '',
];
$totalCount = $this->userModel->getTotalCount($data);
$datas = $this->userModel->getUserList($start, $end, $data);
return $this->response->setJSON(body: [
'recordsTotal' => $totalCount,
'recordsFiltered' => $totalCount,
'data' => $datas,
]);
}
// 유저정보저장
public function saveUser()
{
try {
$type = $this->request->getPost('type');
if ($type == 'create') {
$data = [
$this->request->getPost('addUserId'), // 아이디
$this->request->getPost('addUserPswd') ?: '', // 비밀번호
$this->request->getPost('addUserDept'), // 소속조직
$this->request->getPost('addUserNm'), // 이름
$this->request->getPost('addUserLevel'), // 등급
$this->request->getPost('addUserPosition'), // 직급
$this->request->getPost('addUserTel1') ?: '', // 연락처
$this->request->getPost('addUserTel2') ?: '', // 연락처2
$this->request->getPost('addUserAddr1'), // 주소
$this->request->getPost('addUserAddr2'), // 상세주소
session('usr_sq'), // 저장유저
$this->request->getPost('addUseYn'), // 사용여부
$this->request->getPost('addSmsYn'), // SMS 인증여부
];
// INSERT users
$this->userModel->insertUser($data);
} else if ($type == 'update') {
$addUserPswd = trim($this->request->getPost('addUserPswd') ?? '');
$usrSq = $this->request->getPost('usr_sq'); // hidden으로 넘어오는 PK라고 가정
$data = [
$this->request->getPost('addUserNm'), // usr_nm
$this->request->getPost('addUserDept'), // dept_sq
$this->request->getPost('addUserLevel'), // usr_level
$this->request->getPost('addUserPosition'), // usr_position
$this->request->getPost('addUserTel1') ?: '', // usr_tel1
$this->request->getPost('addUserTel2') ?: '', // usr_tel2
$this->request->getPost('addUserAddr1'), // usr_addr1
$this->request->getPost('addUserAddr2'), // usr_addr2
session('usr_sq'), // update_usr
$this->request->getPost('addUseYn'), // use_yn
$this->request->getPost('addSmsYn'), // sms_auth_yn
];
// 비번/PK 같이 넘김
$this->userModel->updateUser($data, $addUserPswd, $usrSq);
}
return $this->response->setJSON([
'code' => '0',
'msg' => 'success'
]);
} catch (\Exception $e) {
return $this->response->setJSON([
'code' => '9',
'msg' => $e->getMessage(),
]);
}
}
// 유저 삭제
public function removeuser()
{
try {
$data = [
session('usr_sq'),
$this->request->getPost('usr_sq')
];
$this->userModel->removeUser($data);
return $this->response->setJSON([
'code' => '0',
'msg' => 'success'
]);
} catch (\Exception $e) {
return $this->response->setJSON([
'code' => '9',
'msg' => $e->getMessage(),
]);
}
}
// 엑셀다운로드
public function excel()
{
try {
$data = [
'srchLevel' => $this->request->getGet('srchLevl') ?: '',
'srchBonbu' => $this->request->getGet('srchBonbu') ?: '',
'srchTeam' => $this->request->getGet('srchTeam') ?: '',
'useYn' => $this->request->getGet('useYn') ?: '',
'srchType' => $this->request->getGet('srchType') ?: '',
'srchTxt' => $this->request->getGet('srchTxt') ?: '',
'addSmsYn' => $this->request->getPost('addSmsYn'),
];
$datas = $this->userModel->getExcelUserList($data);
return $this->response->setJSON(body: [
'data' => $datas,
]);
} catch (\Exception $e) {
$e->getPrevious()->getTraceAsString();
}
}
}