diff --git a/app/Helpers/Equipment/ServerPartHelper.php b/app/Helpers/Equipment/ServerPartHelper.php index 0d53954..7beb9ef 100644 --- a/app/Helpers/Equipment/ServerPartHelper.php +++ b/app/Helpers/Equipment/ServerPartHelper.php @@ -58,7 +58,7 @@ class ServerPartHelper extends EquipmentHelper } $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-price' => 'getPrice']; + $attributes = ['data-type' => 'getType', 'data-price' => 'getPrice']; $form = $this->form_dropdown_common($field, $value, $viewDatas, $extras, $attributes); break; default: diff --git a/app/Views/admin/serverpart/create_form.php b/app/Views/admin/serverpart/create_form.php new file mode 100644 index 0000000..034d36f --- /dev/null +++ b/app/Views/admin/serverpart/create_form.php @@ -0,0 +1,25 @@ +extend(LAYOUTS[$viewDatas['layout']]['path']) ?> +section('content') ?> + +getHelper()->alert($error) ?> +
+
include("templates/{$viewDatas['layout']}/form_content_top"); ?>
+ +
+ + + + + + + +
getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> + getHelper()->getFieldForm($field, old($field) ?? ($viewDatas['control']['form_datas'][$field] ?? null), $viewDatas) ?> + +
+
"btn btn-outline btn-primary")); ?>
+ +
+
include("templates/{$viewDatas['layout']}/form_content_bottom"); ?>
+
+endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/serverpart/modify_form.php b/app/Views/admin/serverpart/modify_form.php new file mode 100644 index 0000000..972209f --- /dev/null +++ b/app/Views/admin/serverpart/modify_form.php @@ -0,0 +1,24 @@ +extend(LAYOUTS[$viewDatas['layout']]['path']) ?> +section('content') ?> +getHelper()->alert($error) ?> +
+
include("templates/{$viewDatas['layout']}/form_content_top"); ?>
+ 'action_form', ...$viewDatas['forms']['attributes']], $viewDatas['forms']['hiddens']) ?> +
+ + + + + + + +
getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> + getHelper()->getFieldForm($field, old($field) ?? $viewDatas['entity']->$field ?? null, $viewDatas) ?> +
+
+
"btn btn-outline btn-primary"]) ?>
+ +
+
include("templates/{$viewDatas['layout']}/form_content_bottom"); ?>
+
+endSection() ?> \ No newline at end of file diff --git a/public/js/admin/serverpart.js b/public/js/admin/serverpart.js new file mode 100644 index 0000000..c7c9a12 --- /dev/null +++ b/public/js/admin/serverpart.js @@ -0,0 +1,31 @@ +const typeSelect = document.querySelector("select[name=type]"); +const partSelect = document.querySelector("select[name=part_uid]"); +const amountInput = document.querySelector("input[name=amount]"); + +// type 선택 시 part_uid 옵션 필터링 +typeSelect.addEventListener("change", function () { + let selectedType = this.value; + + for (let option of partSelect.options) { + if (option.value === "") { + option.style.display = ""; // "부품정보 선택"은 항상 표시 + continue; + } + if (!selectedType || option.dataset.type === selectedType) { + option.style.display = ""; + } else { + option.style.display = "none"; + } + } + + // 선택 초기화 + partSelect.value = ""; + amountInput.value = ""; +}); + +// part_uid 선택 시 amount 자동 반영 +partSelect.addEventListener("change", function () { + let selectedOption = this.options[this.selectedIndex]; + let price = selectedOption.getAttribute("data-price") || ""; + amountInput.value = price; +}); \ No newline at end of file