From 5369def63fd7a20c3c4893f31ffbfefeebee6cc1 Mon Sep 17 00:00:00 2001 From: "choi.jh" Date: Tue, 16 Sep 2025 14:43:09 +0900 Subject: [PATCH] dbmsv2 init...1 --- app/Cells/Equipment/ServerPartCell.php | 33 ++++---- app/Config/Constants.php | 2 +- app/Controllers/CommonController.php | 3 +- app/Entities/Equipment/ServerPartEntity.php | 8 -- app/Helpers/CommonHelper.php | 7 +- app/Helpers/Customer/AccountHelper.php | 3 +- app/Helpers/Customer/ClientHelper.php | 3 +- app/Helpers/Customer/CouponHelper.php | 3 +- app/Helpers/Customer/PaymentHelper.php | 3 +- app/Helpers/Customer/PointHelper.php | 3 +- app/Helpers/Customer/ServiceHelper.php | 3 +- app/Helpers/Equipment/ServerHelper.php | 3 +- app/Helpers/Equipment/ServerPartHelper.php | 77 ++++++++++--------- app/Helpers/Equipment/SwitchHelper.php | 2 +- app/Helpers/HomeHelper.php | 3 +- app/Helpers/MyLogHelper.php | 3 +- app/Services/Equipment/ServerPartService.php | 2 +- app/Views/admin/server/index.php | 7 +- app/Views/admin/server/view.php | 2 +- app/Views/admin/service/index.php | 35 +-------- app/Views/admin/service/view.php | 2 +- app/Views/admin/welcome/new_service.php | 12 +-- app/Views/cells/serverpart/part_detail.php | 43 +++++++++-- app/Views/cells/serverpart/part_server.php | 5 -- app/Views/cells/serverpart/part_service.php | 9 --- .../cells/serverpart/partlist_server.php | 23 ++++++ .../cells/serverpart/partlist_service.php | 23 ++++++ app/Views/cells/service/detail.php | 2 +- public/js/admin/clipboard.js | 30 ++++++++ 29 files changed, 204 insertions(+), 150 deletions(-) delete mode 100644 app/Views/cells/serverpart/part_server.php delete mode 100644 app/Views/cells/serverpart/part_service.php create mode 100644 app/Views/cells/serverpart/partlist_server.php create mode 100644 app/Views/cells/serverpart/partlist_service.php create mode 100644 public/js/admin/clipboard.js diff --git a/app/Cells/Equipment/ServerPartCell.php b/app/Cells/Equipment/ServerPartCell.php index b0e2023..15ae8ba 100644 --- a/app/Cells/Equipment/ServerPartCell.php +++ b/app/Cells/Equipment/ServerPartCell.php @@ -30,21 +30,22 @@ class ServerPartCell extends EquipmentCell $this->getService()->setFormFilters(); $this->getService()->setFormRules(); $this->getService()->setFormOptions(); + if (!array_key_exists('serverinfo_uid', $params)) { + return "서버정보를 정의하셔야합니다."; + } + if (!array_key_exists('types', $params)) { + return "부품정보 형태(Types) 리스트를 정의하셔야합니다."; + } + //서버정보 + $serverEntity = $this->getServerService()->getEntity($params['serverinfo_uid']); + if (!$serverEntity instanceof ServerEntity) { + return "[{$params['serverinfo_uid']}]의 서버정보를 확인할수없습니다.."; + } + //PartType별 Entities $entities = []; - $serverEntity = null; - if (array_key_exists('serverinfo_uid', $params)) { - //서버정보 - $serverEntity = $this->getServerService()->getEntity($params['serverinfo_uid']); - if ($serverEntity instanceof ServerEntity) { - //서버파트정보 - $serverPartEntities = $this->getService()->getEntities(['serverinfo_uid' => $serverEntity->getPK(),]); - foreach ($serverPartEntities as $entity) { - if (!array_key_exists($entity->getType(), $entities)) { - $entities[$entity->getType()] = []; - } - $entities[$entity->getType()][] = $entity; - } - } + foreach ($params['types'] as $type) { + $entities[$type] = []; + $entities[$type][] = $this->getService()->getEntities(['serverinfo_uid' => $serverEntity->getPK(), 'type' => $type]); } $template = array_key_exists('template', $params) ? $params['template'] : __FUNCTION__; return view('cells/serverpart/' . $template, [ @@ -52,9 +53,9 @@ class ServerPartCell extends EquipmentCell 'control' => $this->getService()->getControlDatas(), 'service' => $this->getService(), 'serverinfo_uid' => $params['serverinfo_uid'], - 'entities' => $entities, - 'serverEntity' => $serverEntity, 'types' => $params['types'], + 'serverEntity' => $serverEntity, + 'entities' => $entities, ], ]); } diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 27de9f7..19d1695 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -396,7 +396,7 @@ define("SERVERPART", [ "CNT_RANGE" => array_combine(range(1, 10), range(1, 10)), "SERVER_PARTTYPES" => ['CPU', 'RAM', 'DISK'], "SERVICE_PARTTYPES" => ['SWITCH', 'IP', 'OS', 'SOFTWARE', 'CS'], - "PARTTYPES" => ['CPU', 'RAM', 'DISK', 'OS', 'DB', 'SOFTWARE', 'SWITCH', 'IP', 'CS'], + "ALL_PARTTYPES" => ['CPU', 'RAM', 'DISK', 'OS', 'DB', 'SOFTWARE', 'SWITCH', 'IP', 'CS'], ]); //결제 관련 define("PAYMENT", [ diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php index 995cc1d..0e6d748 100644 --- a/app/Controllers/CommonController.php +++ b/app/Controllers/CommonController.php @@ -520,8 +520,7 @@ abstract class CommonController extends BaseController $this->entities = $this->index_process(); return $this->getResultSuccess(); } catch (\Exception $e) { - return $e->getMessage(); - // return $this->getResultFail($e->getMessage()); + return $this->getResultFail($e->getMessage()); } } //OUPUT Document 관련 diff --git a/app/Entities/Equipment/ServerPartEntity.php b/app/Entities/Equipment/ServerPartEntity.php index 707bfd5..368233b 100644 --- a/app/Entities/Equipment/ServerPartEntity.php +++ b/app/Entities/Equipment/ServerPartEntity.php @@ -17,14 +17,6 @@ class ServerPartEntity extends EquipmentEntity { return $this->attributes['partEntity'] ?? null; } - public function getTitle(): string - { - return $this->getPartEntity() !== null ? sprintf( - "%s%s", - $this->getBilling() === "" ? "" : ($this->getBilling() === PAYMENT['BILLING']["ONETIME"] ? ICONS['ONETIME'] : ($this->getBilling() === PAYMENT['BILLING']["MONTH"] ? ICONS['MONTH'] : "")), - $this->getPartEntity()->getTitle() - ) : ""; - } public function getPrice(): int { return $this->getPartEntity() !== null ? $this->getPartEntity()->getPrice() : 0; diff --git a/app/Helpers/CommonHelper.php b/app/Helpers/CommonHelper.php index 42ec149..7eb8b21 100644 --- a/app/Helpers/CommonHelper.php +++ b/app/Helpers/CommonHelper.php @@ -323,7 +323,7 @@ class CommonHelper case 'role': $roles = []; foreach (explode(DEFAULTS["DELIMITER_ROLE"], $value) as $key) { - $roles[] = $viewDatas['control']['field_optons'][$field][$key]->getTitle() ?? ""; + $roles[] = $viewDatas['control']['field_optons'][$field][$key] ?? ""; } $value = implode(" , ", $roles); break; @@ -362,14 +362,13 @@ class CommonHelper ); $value = $this->getFieldForm($field, $value, $viewDatas, $extras); } else { - $value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) ? $viewDatas['control']['field_optons'][$field][$value]->getTitle() : ""; + $value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) ? $viewDatas['control']['field_optons'][$field][$value] : ""; } } break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Customer/AccountHelper.php b/app/Helpers/Customer/AccountHelper.php index eff223c..6e579d7 100644 --- a/app/Helpers/Customer/AccountHelper.php +++ b/app/Helpers/Customer/AccountHelper.php @@ -21,8 +21,7 @@ class AccountHelper extends CustomerHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Customer/ClientHelper.php b/app/Helpers/Customer/ClientHelper.php index b83a2bd..19a75c7 100644 --- a/app/Helpers/Customer/ClientHelper.php +++ b/app/Helpers/Customer/ClientHelper.php @@ -65,8 +65,7 @@ class ClientHelper extends CustomerHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } // diff --git a/app/Helpers/Customer/CouponHelper.php b/app/Helpers/Customer/CouponHelper.php index 0c9fcdc..5a4ec55 100644 --- a/app/Helpers/Customer/CouponHelper.php +++ b/app/Helpers/Customer/CouponHelper.php @@ -21,8 +21,7 @@ class CouponHelper extends CustomerHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Customer/PaymentHelper.php b/app/Helpers/Customer/PaymentHelper.php index f807079..542501e 100644 --- a/app/Helpers/Customer/PaymentHelper.php +++ b/app/Helpers/Customer/PaymentHelper.php @@ -32,8 +32,7 @@ class PaymentHelper extends CustomerHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Customer/PointHelper.php b/app/Helpers/Customer/PointHelper.php index 9f37d50..a951d08 100644 --- a/app/Helpers/Customer/PointHelper.php +++ b/app/Helpers/Customer/PointHelper.php @@ -22,8 +22,7 @@ class PointHelper extends CustomerHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Customer/ServiceHelper.php b/app/Helpers/Customer/ServiceHelper.php index 012eab0..40795b0 100644 --- a/app/Helpers/Customer/ServiceHelper.php +++ b/app/Helpers/Customer/ServiceHelper.php @@ -55,8 +55,7 @@ class ServiceHelper extends CustomerHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Equipment/ServerHelper.php b/app/Helpers/Equipment/ServerHelper.php index a886662..fad7400 100644 --- a/app/Helpers/Equipment/ServerHelper.php +++ b/app/Helpers/Equipment/ServerHelper.php @@ -49,8 +49,7 @@ class ServerHelper extends EquipmentHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Equipment/ServerPartHelper.php b/app/Helpers/Equipment/ServerPartHelper.php index 9043111..1f6c606 100644 --- a/app/Helpers/Equipment/ServerPartHelper.php +++ b/app/Helpers/Equipment/ServerPartHelper.php @@ -25,11 +25,29 @@ class ServerPartHelper extends EquipmentHelper case 'DB': case 'OS': case 'SOFTWARE': + foreach ($viewDatas['control']['field_optons'][$field] as $option_key => $option_value) { + $isSelected = $option_key == $value ? ' selected' : ''; + $isDisabled = ""; + $attribute = ""; + $label = ""; + if ($option_value instanceof CommonEntity) { + if (in_array($viewDatas['control']['action'], ['create_form', 'index'])) { + if ($option_value->getStatus() != $option_value::DEFAULT_STATUS) + $html = " disabled"; + } + $label = $option_value->getStatus() != $option_value::DEFAULT_STATUS ? "X." : ""; + $label .= $option_value->getCustomTitle(); + } else { + $label = $option_value; + } + $html .= sprintf("", $option_key, $isSelected, $isDisabled, $attribute, $label); + } + break; case 'part_uid': - // dd($viewDatas['control']); - $type = array_key_exists('type', $viewDatas['control']['form_datas']) ? $viewDatas['control']['form_datas']['type'] : 'CPU'; - // dd($viewDatas['control']['field_optons'][$field]); - foreach ($viewDatas['control']['field_optons'][$field][$type] as $option_key => $option_value) { + if (!array_key_exists('type', $viewDatas['control']['form_datas']) || !$viewDatas['control']['form_datas']['type']) { + throw new \Exception(__METHOD__ . "에서 오류발생: Type가 정의되지 않았습니다."); + } + foreach ($viewDatas['control']['field_optons'][$field][$viewDatas['control']['form_datas']['type']] as $option_key => $option_value) { $isSelected = $option_key == $value ? ' selected' : ''; $isDisabled = ""; $attribute = ""; @@ -65,10 +83,6 @@ class ServerPartHelper extends EquipmentHelper case 'DB': case 'OS': case 'SOFTWARE': - case 'part_uid': - // if ($value === null && array_key_exists('entity', $viewDatas)) { - // $value = $viewDatas['entity']->getServerEntity()->getPK(); - // } $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; $extras['onChange'] = "document.querySelector('input[name=\'amount\']').value = this.options[this.selectedIndex].getAttribute('data-price')"; $attributes = ['data-type' => 'getType', 'data-price' => 'getPrice']; @@ -92,40 +106,33 @@ class ServerPartHelper extends EquipmentHelper case 'SWITCH': case 'IP': case 'CS': - case 'part_uid': - if (!array_key_exists($field, $viewDatas['entities'])) { - return ""; + //파트 Entity + $title = $viewDatas['entity']->getPartEntity()->getTitle(); + $title .= $viewDatas['entity']->getCnt() > 1 ? "*" . $viewDatas['entity']->getCnt() . "개" : ""; + $title .= $viewDatas['entity']->getExtra() !== "" ? "[" . $viewDatas['entity']->getExtra() . "]" : ""; + if (array_key_exists('return', $extras) && $extras['return'] == 'onlyText') { + $value = $title; + } else { + $billing = $viewDatas['entity']->getBilling() === "" ? "" : ($viewDatas['entity']->getBilling() === PAYMENT['BILLING']["ONETIME"] ? ICONS['ONETIME'] : ($viewDatas['entity']->getBilling() === PAYMENT['BILLING']["MONTH"] ? ICONS['MONTH'] : "")); + $value = form_label( + $billing . $title, + $field, + [ + "data-src" => "/admin/equipment/serverpart/modify/{$viewDatas['entity']->getPK()}?type={$viewDatas['entity']->getType()}&ActionTemplate=popup", + "data-bs-toggle" => "modal", + "data-bs-target" => "#index_action_form", + "class" => "btn btn-sm btn-outline btn-circle", + "target" => "_self", + ] + ); } - $temps = []; - foreach ($viewDatas['entities'][$field] as $entity) { - $title = $entity->getTitle(); - $title .= $entity->getCnt() > 1 ? "*" . $entity->getCnt() . "개" : ""; - $title .= $entity->getExtra() !== "" ? "/" . $entity->getExtra() : ""; - if (array_key_exists('return_type', $extras) && $extras['return_type'] === 'text') { - $temps[] = $title; - } else { - $temps[] = form_label( - $title, - $field, - [ - "data-src" => "/admin/equipment/serverpart/modify/{$entity->getPK()}?type={$entity->getType()}&ActionTemplate=popup", - "data-bs-toggle" => "modal", - "data-bs-target" => "#index_action_form", - "class" => "btn btn-sm btn-outline btn-circle", - "target" => "_self" - ] - ); - } - } - $value = implode(",", $temps); break; default: $value = parent::getFieldView($field, $value, $viewDatas, $extras); break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/Equipment/SwitchHelper.php b/app/Helpers/Equipment/SwitchHelper.php index 4a1a1fc..d99d501 100644 --- a/app/Helpers/Equipment/SwitchHelper.php +++ b/app/Helpers/Equipment/SwitchHelper.php @@ -19,7 +19,7 @@ class SwitchHelper extends EquipmentHelper if (!$this->getMyAuth()->isAccessRole(['security'])) { $action = $viewDatas['entity']->getCode(); } else { - $action = parent::getListButton($action, $label ? $label : $viewDatas['entity']->getCode(), $viewDatas, $extras); + $action = parent::getListButton($action, $viewDatas['entity']->getCode(), $viewDatas, $extras); } break; default: diff --git a/app/Helpers/HomeHelper.php b/app/Helpers/HomeHelper.php index ed516ff..38fb1da 100644 --- a/app/Helpers/HomeHelper.php +++ b/app/Helpers/HomeHelper.php @@ -26,8 +26,7 @@ class HomeHelper extends CommonHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Helpers/MyLogHelper.php b/app/Helpers/MyLogHelper.php index 699fb40..5f22b3c 100644 --- a/app/Helpers/MyLogHelper.php +++ b/app/Helpers/MyLogHelper.php @@ -28,8 +28,7 @@ class MyLogHelper extends CommonHelper break; } if (is_array($value)) { - echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"; - exit; + throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다"); } return $value; } diff --git a/app/Services/Equipment/ServerPartService.php b/app/Services/Equipment/ServerPartService.php index 093ad87..976aca1 100644 --- a/app/Services/Equipment/ServerPartService.php +++ b/app/Services/Equipment/ServerPartService.php @@ -123,7 +123,7 @@ class ServerPartService extends EquipmentService switch ($field) { case 'part_uid': $partOptions = []; - foreach (SERVERPART['PARTTYPES'] as $partType) { + foreach (SERVERPART['ALL_PARTTYPES'] as $partType) { switch ($partType) { case 'CPU': case 'RAM': diff --git a/app/Views/admin/server/index.php b/app/Views/admin/server/index.php index b020f9e..49b6b1a 100644 --- a/app/Views/admin/server/index.php +++ b/app/Views/admin/server/index.php @@ -42,7 +42,9 @@ getHelper()->getListLabel('type', lang("{$viewDatas['class_path']}.label.type"), $viewDatas) ?>/ getHelper()->getListLabel('title', lang("{$viewDatas['class_path']}.label.title"), $viewDatas) ?> - 부품정보 + + 부품정보
All COPY
+ getHelper()->getListLabel('price', lang("{$viewDatas['class_path']}.label.price"), $viewDatas) ?> @@ -76,7 +78,7 @@ $entity->getPK(), 'types' => SERVERPART['SERVER_PARTTYPES'], - 'template' => 'part_server' + 'template' => 'partlist_server' ]) ?> @@ -110,4 +112,5 @@
include(LAYOUTS[$viewDatas['layout']]['path'] . '/bottom'); ?>
+ endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/server/view.php b/app/Views/admin/server/view.php index 24ab460..2c00fa6 100644 --- a/app/Views/admin/server/view.php +++ b/app/Views/admin/server/view.php @@ -26,7 +26,7 @@ $viewDatas['entity']->getPK(), - 'types' => SERVERPART['PARTTYPES'] + 'types' => SERVERPART['ALL_PARTTYPES'] ]) ?>> diff --git a/app/Views/admin/service/index.php b/app/Views/admin/service/index.php index 5b60cd6..3ec00cf 100644 --- a/app/Views/admin/service/index.php +++ b/app/Views/admin/service/index.php @@ -86,7 +86,7 @@ $entity->getServerEntity()->getPK(), 'types' => SERVERPART['SERVICE_PARTTYPES'], - 'template' => 'part_service' + 'template' => 'partlist_service' ]) ?> @@ -120,36 +120,5 @@
include(LAYOUTS[$viewDatas['layout']]['path'] . '/bottom'); ?>
- + endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/service/view.php b/app/Views/admin/service/view.php index 9249e3b..366f240 100644 --- a/app/Views/admin/service/view.php +++ b/app/Views/admin/service/view.php @@ -24,7 +24,7 @@ $viewDatas['entity']->getServerEntity()->getPK(), - 'types' => SERVERPART['PARTTYPES'] + 'types' => SERVERPART['ALL_PARTTYPES'] ]) ?> diff --git a/app/Views/admin/welcome/new_service.php b/app/Views/admin/welcome/new_service.php index 387f5ac..3dff60e 100644 --- a/app/Views/admin/welcome/new_service.php +++ b/app/Views/admin/welcome/new_service.php @@ -14,8 +14,10 @@ 서비스코드 업체명 구분 - 장비번호 - 스위치정보 / IP정보 / CS정보 + + 장비번호 / 스위치정보 / IP정보 / CS정보 +
All COPY
+ 등록자 @@ -26,11 +28,10 @@ getCode() ?> getHelper()->getFieldView('clientinfo_uid', $entity->getClientInfoUID(), $viewDatas) ?> getHelper()->getFieldView('type', $entity->getType(), $viewDatas) ?> - getHelper()->getFieldView('serveripinfo_uid', $entity->getServerEntity()->getCode(), $viewDatas) ?> $entity->getServerEntity()->getPK(), 'types' => SERVERPART['SERVICE_PARTTYPES'], - 'template' => 'part_service' + 'template' => 'partlist_service' ]) ?> getHelper()->getFieldView('user_uid', $entity->getUserUID(), $viewDatas) ?> @@ -38,4 +39,5 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/app/Views/cells/serverpart/part_detail.php b/app/Views/cells/serverpart/part_detail.php index 2dd50ef..4a0cf45 100644 --- a/app/Views/cells/serverpart/part_detail.php +++ b/app/Views/cells/serverpart/part_detail.php @@ -1,11 +1,40 @@ -
getHelper()->getFieldView('CPU', "", $serverPartCellDatas) ?>
-
getHelper()->getFieldView('RAM', "", $serverPartCellDatas) ?>
-
getHelper()->getFieldView('DISK', "", $serverPartCellDatas) ?>
+ + + + +
getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?>
+ + + +   -
getHelper()->getFieldView('OS', "", $serverPartCellDatas) ?>
-
getHelper()->getFieldView('SOFTWARE', "", $serverPartCellDatas) ?>
+ + + + +
getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?>
+ + + +   -getHelper()->getFieldView('IP', "", $serverPartCellDatas) ?> -getHelper()->getFieldView('CS', "", $serverPartCellDatas) ?> \ No newline at end of file + + + + +
getHelper()->getFieldView('IP', $entity->getPK(), $serverPartCellDatas) ?>
+ + +   + + + + + +
getHelper()->getFieldView('CS', $entity->getPK(), $serverPartCellDatas) ?>
+ + +   + \ No newline at end of file diff --git a/app/Views/cells/serverpart/part_server.php b/app/Views/cells/serverpart/part_server.php deleted file mode 100644 index cfc07ce..0000000 --- a/app/Views/cells/serverpart/part_server.php +++ /dev/null @@ -1,5 +0,0 @@ - - - getHelper()->getListButton($type, '', $serverPartCellDatas) . $serverPartCellDatas['service']->getHelper()->getFieldView($type, "", $serverPartCellDatas) ?> - - \ No newline at end of file diff --git a/app/Views/cells/serverpart/part_service.php b/app/Views/cells/serverpart/part_service.php deleted file mode 100644 index 0a90203..0000000 --- a/app/Views/cells/serverpart/part_service.php +++ /dev/null @@ -1,9 +0,0 @@ -getCode()] ?> - - getHelper()->getFieldView($type, '', $serverPartCellDatas, ['return_type' => 'text']); ?> - getHelper()->getListButton($type, '', $serverPartCellDatas) ?> - getHelper()->getFieldView($type, '', $serverPartCellDatas) ?> - - - -
COPY
\ No newline at end of file diff --git a/app/Views/cells/serverpart/partlist_server.php b/app/Views/cells/serverpart/partlist_server.php new file mode 100644 index 0000000..5ac1112 --- /dev/null +++ b/app/Views/cells/serverpart/partlist_server.php @@ -0,0 +1,23 @@ + + + + + + + + getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?> + getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas, ['return' => 'onlyText']) ?> + + + + + $datas): ?> + getHelper()->getListButton($type, '', $serverPartCellDatas) . implode(",", $datas) ?> + + + + $datas): ?> + + + +
COPY
\ No newline at end of file diff --git a/app/Views/cells/serverpart/partlist_service.php b/app/Views/cells/serverpart/partlist_service.php new file mode 100644 index 0000000..d5f9ad2 --- /dev/null +++ b/app/Views/cells/serverpart/partlist_service.php @@ -0,0 +1,23 @@ + + + + + + + + getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?> + getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas, ['return' => 'onlyText']) ?> + + + +getCode()] ?> + $datas): ?> + getHelper()->getListButton($type, '', $serverPartCellDatas) . implode(",", $datas) ?> + + +getCode()] ?> + $datas): ?> + + + +
COPY
\ No newline at end of file diff --git a/app/Views/cells/service/detail.php b/app/Views/cells/service/detail.php index 73e1374..a8331e0 100644 --- a/app/Views/cells/service/detail.php +++ b/app/Views/cells/service/detail.php @@ -32,7 +32,7 @@ $entity->getServerEntity()->getPK(), - 'types' => SERVERPART['SERVICE_PARTTYPES'], + 'types' => SERVERPART['ALL_PARTTYPES'], 'template' => 'part_detail' ]) ?> diff --git a/public/js/admin/clipboard.js b/public/js/admin/clipboard.js new file mode 100644 index 0000000..a1d6bc8 --- /dev/null +++ b/public/js/admin/clipboard.js @@ -0,0 +1,30 @@ +function copyServerPartToClipboard(text) { + try { + if (navigator.clipboard && navigator.clipboard.writeText) { + // HTTPS 환경 + navigator.clipboard.writeText(text) + .then(() => alert(text + "\n 복사되었습니다.")) + .catch(err => alert("실패: " + err)); + } else { + // HTTP 환경 fallback + const temp = document.createElement("textarea"); + temp.value = text; + document.body.appendChild(temp); + temp.select(); + document.execCommand("copy"); + document.body.removeChild(temp); + alert(text + "\n 복사되었습니다."); + } + } catch (err) { + alert("복사 실패: " + err); + } +} + +function copyServerPartsToClipboard() { + // 모든 .serverparts div에서 text-data 속성값 수집 + const elements = document.querySelectorAll(".serverparts"); + const texts = Array.from(elements).map(el => el.getAttribute("text-data") || ""); + // console.log(texts); + const combined = texts.join("\n"); + copyServerPartToClipboard(combined); +} \ No newline at end of file