From 7615bbf3b77567deb682fa9dcc387070d2801416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Thu, 10 Aug 2023 19:39:10 +0900 Subject: [PATCH] shoppingmallv2 init... --- app/Config/Constants.php | 3 +- app/Config/Routes.php | 5 + app/Controllers/EcommerceController.php | 35 ---- app/Controllers/Front/PaymentController.php | 93 +++++++++ app/Database/shoppingmall.sql | 2 +- app/Helpers/Order_helper.php | 16 +- app/Helpers/Payment_helper.php | 196 ++++++++++++++++++ app/Language/ko/Payment.php | 31 +++ app/Language/ko/User.php | 2 +- app/Views/front/payment/card.php | 26 +++ app/Views/front/payment/index.php | 34 +++ .../layouts/front/left_menu/leftmenu_11.php | 5 +- .../layouts/front/left_menu/leftmenu_12.php | 5 +- .../layouts/front/left_menu/leftmenu_22.php | 16 ++ .../layouts/front/left_menu/leftmenu_3.php | 4 +- .../layouts/front/left_menu/leftmenu_4.php | 4 +- .../layouts/front/left_menu/leftmenu_5.php | 4 +- .../layouts/front/left_menu/leftmenu_6.php | 4 +- .../layouts/front/left_menu/leftmenu_8.php | 4 +- .../layouts/front/left_menu/leftmenu_9.php | 4 +- public/css/front/payment.css | 45 ++++ 21 files changed, 474 insertions(+), 64 deletions(-) create mode 100644 app/Controllers/Front/PaymentController.php create mode 100644 app/Helpers/Payment_helper.php create mode 100644 app/Language/ko/Payment.php create mode 100644 app/Views/front/payment/card.php create mode 100644 app/Views/front/payment/index.php create mode 100644 app/Views/layouts/front/left_menu/leftmenu_22.php create mode 100644 public/css/front/payment.css diff --git a/app/Config/Constants.php b/app/Config/Constants.php index be560aa..990977b 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -230,7 +230,8 @@ define('AUDIOS', [ //Default값 정의 define('DEFAULTS', [ 'ORDER_CATEGORY' => getenv('default.order_category') ?: 11, - 'USER_CATEGORY' => getenv('default.user_category') ?: 12, + 'PAYMENT_CATEGORY' => getenv('default.payment_category') ?: 12, + 'USER_CATEGORY' => getenv('default.user_category') ?: 22, 'ROLE' => getenv('default.role') ?: "guest", 'STATUS' => getenv('default.status') ?: "use", 'EMPTY' => getenv('default.empty') ?: "", diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 1c89602..68349ad 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -165,6 +165,11 @@ $routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($rou $routes->get('', 'OrderController::index'); $routes->get('view/(:uuid)', 'OrderController::view/$1'); }); + $routes->group('payment', ['namespace' => 'App\Controllers\Front', 'filter' => 'authFilter:user'], static function ($routes) { + $routes->get('', 'PaymentController::index'); + $routes->get('card/(:uuid)', 'PaymentController::card_form/$1'); + $routes->post('card/(:uuid)', 'PaymentController::card/$1'); + }); }); /* * -------------------------------------------------------------------- diff --git a/app/Controllers/EcommerceController.php b/app/Controllers/EcommerceController.php index 5855cab..a20613b 100644 --- a/app/Controllers/EcommerceController.php +++ b/app/Controllers/EcommerceController.php @@ -183,39 +183,4 @@ class EcommerceController extends Controller $this->_session->setFlashdata("return_message", $msg); } } - - //결제(uid -> order_uid) - public function payment($uid) - { - $msg = ""; - try { - $this->_viewDatas['fields'] = ["product_uid", "quantity", "price"]; - $this->_viewDatas['fieldRules'] = $this->getOrderModel()->getFieldRules($this->_viewDatas['fields']); - //Transaction 시작 - $this->getOrderModel()->transStart(); - //Transaction Commit - $this->getOrderModel()->transComplete(); - $entity = new PaymentEntity(); - $msg = sprintf( - "%s\n 상품명:%s\n 상품갯수:%s개, 구매금액:%s원\n 장바구니에 담았습니다.", - $this->_viewDatas['title'], - $entity->getTitle(), - $entity->quantity, - number_format($entity->price) - ); - return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL'])); - } catch (\Exception $e) { - //Transaction Rollback - $this->getOrderModel()->transRollback(); - log_message("error", $e->getMessage()); - $msg = sprintf( - "%s에서 다음 오류로 인해 장바구니에 담기를 실패하였습니다.\n%s", - $this->_viewDatas['title'], - $e->getMessage() - ); - return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL'])); - } finally { - $this->_session->setFlashdata("return_message", $msg); - } - } } diff --git a/app/Controllers/Front/PaymentController.php b/app/Controllers/Front/PaymentController.php new file mode 100644 index 0000000..37019ca --- /dev/null +++ b/app/Controllers/Front/PaymentController.php @@ -0,0 +1,93 @@ +_model = new PaymentModel($this->getFields()); + parent::initController($request, $response, $logger); + $this->_viewPath .= strtolower($this->_model->getClassName()); + //Default 회원정보 Category + $this->_category = DEFAULTS['PAYMENT_CATEGORY']; + $this->isRole('index'); + } + + final public function getFields(string $action = ""): array + { + switch ($action) { + case 'insert': + return ["TID", "ORDERNO", "AMOUNT", "QUOTA", "ACCEPTNO", "ACCEPTDATE", "RESULTCODE", "created_at"]; + break; + case "index": + case "excel": + case "view": + return ["ORDERNO", "AMOUNT", "QUOTA", "ACCEPTNO", "ACCEPTDATE", "RESULTCODE", "created_at"]; + break; + default: + return []; + break; + } + } + final public function getFieldFilters(): array + { + return []; + } + final public function getFieldBatchFilters(): array + { + return []; + } + + //추가기능 + //결제(uid -> order_uid) + private function card_init() + { + $this->_viewDatas['fields'] = [ + "card_quota", "card_number", "card_expiration", "card_email", "card_mobile" + ]; + $this->_viewDatas['fieldRules'] = [ + 'card_quota' => 'required|in_list[00,01]', + 'card_number' => 'required|regex_match[/^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}/]', + 'card_expiration' => 'required|regex_match[/^[1-12]{2}-[0-9]{4}/]', + 'card_email' => 'required|valid_email', + 'card_mobile' => 'required|regex_match[/^^[0-9]{3}-[0-9]{4}-[0-9]{4}/]', + ]; + $this->_viewDatas['fieldFilters'] = ['card_quota']; + $this->_viewDatas['fieldFormOptions']['card_quota'] = lang($this->_model->getClassName() . '.CARD_QUOTA'); + } + public function card_form($uid) + { + try { + $this->card_init(); + helper(['form']); + $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; + $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']); + return view($this->_viewPath . '/card', ['viewDatas' => $this->_viewDatas]); + } catch (\Exception $e) { + log_message("error", $e->getMessage()); + return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with('return_message', $e->getMessage()); + } + } + protected function card_validate() + { + //fieldData Rule 검사 + if (!$this->validate($this->_viewDatas['fieldRules'])) { + throw new \Exception("결제정보의 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); + } + //fieldData 적용 + $this->_viewDatas['fieldDatas'] = array(); + foreach ($this->_viewDatas['fields'] as $field) { + $this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field); + } + } + protected function card_process() + { + return $this->_model->create($this->_viewDatas['fieldDatas']); + } +} diff --git a/app/Database/shoppingmall.sql b/app/Database/shoppingmall.sql index 43c58ad..520cb75 100644 --- a/app/Database/shoppingmall.sql +++ b/app/Database/shoppingmall.sql @@ -158,7 +158,7 @@ CREATE TABLE shoppingmall.tw_order ( DROP TABLE IF EXISTS shoppingmall.tw_payment; CREATE TABLE shoppingmall.tw_payment ( uid int(10) UNSIGNED NOT NULL AUTO_INCREMENT, - TID varchar(20) NOT NULL COMMENT 'PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)' + TID varchar(20) NOT NULL COMMENT 'PG사 결제 거래고유번호 (전표출력 및 결제취소에 사용됩니다)', ORDERNO varchar(50) NOT NULL COMMENT '주문번호', AMOUNT int(10) UNSIGNED NOT NULL COMMENT '결제 된 금액', QUOTA varchar(2) NOT NULL COMMENT '카드 할부결제시 할부기간 (00:일시불, 01:1개월)', diff --git a/app/Helpers/Order_helper.php b/app/Helpers/Order_helper.php index affa005..1adede1 100644 --- a/app/Helpers/Order_helper.php +++ b/app/Helpers/Order_helper.php @@ -125,7 +125,7 @@ function getFieldIndex_Row_OrderHelper($field, $entity, array $viewDatas): strin case 'status': if ($value == DEFAULTS['STATUS']) { return anchor( - '/front/ecommerce/payment' . $entity->getPrimaryKey(), + '/front/payment/card/' . $entity->getPrimaryKey(), $viewDatas['fieldFormOptions'][$field][$value], ["class" => "btn btn-sm btn-primary btn-circle", "style" => "color:white", "target" => "_self"] ); @@ -156,18 +156,10 @@ function getFieldIndex_Row_OrderHelper_Admin($field, $entity, array $viewDatas): ) ); break; + case 'status': + return getFieldView_OrderHelper($field, $entity, $viewDatas); + break; default: - //관리자도 수정할수 없게 하기위해 - // if (in_array($field, $viewDatas['fieldFilters'])) { - // $attributes["onChange"] = sprintf( - // 'location.href="%s/toggle/%s/%s?%s="+this.options[this.selectedIndex].value', - // current_url(), - // $entity->getPrimaryKey(), - // $field, - // $field - // ); - // return getFieldForm_OrderHelper($field, $entity->$field, $viewDatas, $attributes); - // } return getFieldIndex_Row_OrderHelper($field, $entity, $viewDatas); break; } diff --git a/app/Helpers/Payment_helper.php b/app/Helpers/Payment_helper.php new file mode 100644 index 0000000..16d12ec --- /dev/null +++ b/app/Helpers/Payment_helper.php @@ -0,0 +1,196 @@ +%s", implode(" ", $attributes), lang("{$viewDatas['className']}.label.{$field}")); + break; + } +} +//header.php에서 getFieldForm_Helper사용 +function getFieldForm_PaymentHelper($field, $value, array $viewDatas, array $attributes = array()) +{ + $value = $value ?: DEFAULTS['EMPTY']; + switch ($field) { + case 'product_uid': + case 'user_uid': + $viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]]; + return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, [...$attributes, 'class' => "select-field"]); + // // return form_multiselect($field, $fieldFormOptions[$field], is_array($value) ? [...$value] : [$value], [...$attributes]); + // foreach ($viewDatas['fieldFormOptions'][$field] as $key => $label) { + // $checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, explode(DEFAULTS["DELIMITER_ROLE"], $value))) . $label; + // } + // return implode(" ", $checkboxs); + break; + case 'title': + case 'name': + return form_input($field, $value, ["placeholder" => "예)", "style" => "width:60%; ::placeholder{ color:silver; opacity: 1; }"]); + break; + case 'passwd': + return sprintf( + "%s %s %s", + form_password($field, DEFAULTS['EMPTY']), + lang("{$viewDatas['className']}.label.confirmpassword"), + form_password('confirmpassword', DEFAULTS['EMPTY']), + ); + break; + case 'content': + case 'head': + case 'tail': + return form_textarea($field, html_entity_decode($value), ['class' => 'editor', 'rows' => '20', 'cols' => '100']); + break; + case 'upload_file': + case 'board_file': + return form_upload($field); + break; + case 'view_cnt': + return form_input($field, $value, ['type' => 'number']); + break; + case "status": + $viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]]; + return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, $attributes); + break; + case 'updated_at': + case 'created_at': + return form_input($field, $value, ['class' => 'calender']); + break; + case 'card_quota': + $viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]]; + return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, $attributes); + break; + case 'card_number': + return sprintf( + "%s-%s-%s-%s", + form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]), + form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]), + form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]), + form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]) + ); + break; + case 'card_expiration': + $months = []; + for ($i = 1; $i <= 12; $i++) { + $months[$i] = "{$i}월"; + } + $start = date('Y'); + $end = date('Y', strtotime(date("Y") . ' + 10 year')); + $years = []; + for ($i = $start; $i <= $end; $i++) { + $years[$i] = "{$i}년"; + } + return sprintf( + "%s월 %s년", + form_dropdown("{$field}[]", $months, DEFAULTS['EMPTY']), + form_dropdown("{$field}[]", $years, DEFAULTS['EMPTY']), + ); + break; + default: + return form_input($field, $value); + break; + } +} // + +function getFieldView_PaymentHelper($field, $entity, array $viewDatas) +{ + $value = $entity->$field ?: DEFAULTS['EMPTY']; + switch ($field) { + case 'cost': + case 'price': + case 'sale': + return number_format(!$value ? 0 : $value) . "원"; + break; + case 'stock': + case 'view_cnt': + return number_format(!$value ? 0 : $value); + break; + case 'content': + return html_entity_decode($value); + break; + case 'updated_at': + case 'created_at': + return $value ? str_split($value, 10)[0] : ""; + break; + default: + return in_array($field, $viewDatas['fieldFilters']) && $value ? $viewDatas['fieldFormOptions'][$field][$value] : $value; + break; + } +} // + +function getFieldFilter_PaymentHelper($field, $value, array $viewDatas) +{ + $viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]]; + return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, ['class' => "select-field"]); +} // + +function getFieldIndex_Column_PaymentHelper($field, array $viewDatas) +{ + $label = lang("{$viewDatas['className']}.label.{$field}"); + $label = $field == $viewDatas['order_field'] ? sprintf('%s ', $label, $viewDatas['order_value'] == 'ASC' ? "up" : "down") : $label; + $value = $viewDatas['order_value'] == 'DESC' ? "ASC" : "DESC"; + return anchor(current_url() . "?order_field={$field}&order_value={$value}", $label); +} // + +//Front용 +function getFieldIndex_Row_PaymentHelper($field, $entity, array $viewDatas): string +{ + $value = $entity->$field ?: DEFAULTS['EMPTY']; + switch ($field) { + case 'title': + case 'name': + return sprintf( + "
%s : %s
%s
", + lang("{$viewDatas['className']}.label.uid"), + $entity->getPaymentHint(), + anchor( + current_url() . '/view/' . $entity->getPrimaryKey() . '?category=' . $viewDatas['category']->getPrimaryKey(), + $value, + ["target" => "_self"] + ) + ); + break; + case 'status': + if ($value == DEFAULTS['STATUS']) { + return anchor( + '/front/payment/card/' . $entity->getPrimaryKey(), + $viewDatas['fieldFormOptions'][$field][$value], + ["class" => "btn btn-sm btn-primary btn-circle", "style" => "color:white", "target" => "_self"] + ); + } else { + return getFieldView_PaymentHelper($field, $entity, $viewDatas); + } + break; + default: + return getFieldView_PaymentHelper($field, $entity, $viewDatas); + break; + } +} // +//Admin용 +function getFieldIndex_Row_PaymentHelper_Admin($field, $entity, array $viewDatas): string +{ + $value = $entity->$field ?: DEFAULTS['EMPTY']; + switch ($field) { + case 'title': + case 'name': + return sprintf( + "
%s : %s
%s
", + lang("{$viewDatas['className']}.label.uid"), + $entity->getPrimaryKey(), + anchor( + current_url() . '/view/' . $entity->getPrimaryKey(), + $value, + ["target" => "_self"] + ) + ); + break; + case 'status': + return getFieldView_PaymentHelper($field, $entity, $viewDatas); + break; + default: + return getFieldIndex_Row_PaymentHelper($field, $entity, $viewDatas); + break; + } +} // \ No newline at end of file diff --git a/app/Language/ko/Payment.php b/app/Language/ko/Payment.php new file mode 100644 index 0000000..8a67a91 --- /dev/null +++ b/app/Language/ko/Payment.php @@ -0,0 +1,31 @@ + "결제 정보", + 'label' => [ + 'uid' => "결제ID", + 'TID' => "PG거래번호", + 'ORDERNO' => "주문번호", + 'AMOUNT' => "결제금액", + 'QUOTA' => "카드할부", + 'ACCEPTNO' => "승인번호", + 'ACCEPTDATE' => "승인일시", + 'RESULTCODE' => "결과코드", + 'RESULTMSG' => "결과메세지", + 'ETC1' => "결제입력값", + 'ETC2' => "결제입력값", + 'ETC3' => "결제입력값", + 'ETC4' => "결제입력값", + 'ETC5' => "결제입력값", + 'updated_at' => "수정일", + 'created_at' => "작성일", + 'card_quota' => '카드할부', + 'card_number' => '카드번호', + 'card_expiration' => '유효기간', + 'card_email' => '이메일', + 'card_mobile' => '휴대폰(인증용)', + ], + "CARD_QUOTA" => [ + "00" => "일시불", + "01" => "1개월", + ] +]; diff --git a/app/Language/ko/User.php b/app/Language/ko/User.php index 4b17714..d138478 100644 --- a/app/Language/ko/User.php +++ b/app/Language/ko/User.php @@ -13,7 +13,7 @@ return [ 'confirmpassword' => '암호확인', 'email' => '메일', 'phone' => '연락처', - 'mobile' => '핸드폰', + 'mobile' => '휴대폰', 'role' => '권한', 'name' => '이름', 'status' => '상태', diff --git a/app/Views/front/payment/card.php b/app/Views/front/payment/card.php new file mode 100644 index 0000000..7ff582b --- /dev/null +++ b/app/Views/front/payment/card.php @@ -0,0 +1,26 @@ +extend('layouts/front') ?> +section('content') ?> + +
+
head) ?>
+
상품정보표시
+
오더정보표시
+ + + + + + + + + + + +
+ + +
"btn btn-outline btn-primary")); ?>
+ +
tail) ?>
+
+endSection() ?> \ No newline at end of file diff --git a/app/Views/front/payment/index.php b/app/Views/front/payment/index.php new file mode 100644 index 0000000..702a947 --- /dev/null +++ b/app/Views/front/payment/index.php @@ -0,0 +1,34 @@ +extend('layouts/front') ?> +section('content') ?> + +
+
head) ?>
+
+ include('templates/front/index_head') ?> +
+ + + + + + + + + + + status != DEFAULTS['STATUS'] ? 'class="table-danger" rowcolor="red"' : 'rowcolor="red"' ?> onClick="indexRowCheckBoxToggle(this)"> + + + + + + + + +
번호
+ +
+
+
tail) ?>
+
+endSection() ?> \ No newline at end of file diff --git a/app/Views/layouts/front/left_menu/leftmenu_11.php b/app/Views/layouts/front/left_menu/leftmenu_11.php index 2864377..b3d4bf0 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_11.php +++ b/app/Views/layouts/front/left_menu/leftmenu_11.php @@ -7,7 +7,10 @@ 주문정보
- 사용자정보 + 결제정보 +
+
+ 사용자정보
diff --git a/app/Views/layouts/front/left_menu/leftmenu_12.php b/app/Views/layouts/front/left_menu/leftmenu_12.php index 105abf0..7376c87 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_12.php +++ b/app/Views/layouts/front/left_menu/leftmenu_12.php @@ -7,7 +7,10 @@ 주문정보
- 사용자정보 + 결제정보 +
+
+ 사용자정보
diff --git a/app/Views/layouts/front/left_menu/leftmenu_22.php b/app/Views/layouts/front/left_menu/leftmenu_22.php new file mode 100644 index 0000000..0473319 --- /dev/null +++ b/app/Views/layouts/front/left_menu/leftmenu_22.php @@ -0,0 +1,16 @@ + +
+
-
+
개인정보
+
+
+ 주문정보 +
+
+ 결제정보 +
+
+ 사용자정보 +
+ + diff --git a/app/Views/layouts/front/left_menu/leftmenu_3.php b/app/Views/layouts/front/left_menu/leftmenu_3.php index bc1284b..a2f2ad3 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_3.php +++ b/app/Views/layouts/front/left_menu/leftmenu_3.php @@ -1,4 +1,4 @@ - +
-
Support
@@ -10,4 +10,4 @@ 자료실
- + diff --git a/app/Views/layouts/front/left_menu/leftmenu_4.php b/app/Views/layouts/front/left_menu/leftmenu_4.php index 30ca7f8..2d6e199 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_4.php +++ b/app/Views/layouts/front/left_menu/leftmenu_4.php @@ -1,4 +1,4 @@ - +
-
Support
@@ -10,4 +10,4 @@ 자료실
- + diff --git a/app/Views/layouts/front/left_menu/leftmenu_5.php b/app/Views/layouts/front/left_menu/leftmenu_5.php index c51e5c0..9b89af7 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_5.php +++ b/app/Views/layouts/front/left_menu/leftmenu_5.php @@ -1,4 +1,4 @@ - +
-
네트워크
@@ -10,4 +10,4 @@ 판매
- + diff --git a/app/Views/layouts/front/left_menu/leftmenu_6.php b/app/Views/layouts/front/left_menu/leftmenu_6.php index 8fd3f48..88f252e 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_6.php +++ b/app/Views/layouts/front/left_menu/leftmenu_6.php @@ -1,4 +1,4 @@ - +
-
네트워크
@@ -10,4 +10,4 @@ 판매
- + diff --git a/app/Views/layouts/front/left_menu/leftmenu_8.php b/app/Views/layouts/front/left_menu/leftmenu_8.php index 1f955ee..118f558 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_8.php +++ b/app/Views/layouts/front/left_menu/leftmenu_8.php @@ -1,4 +1,4 @@ - +
-
서버
@@ -10,4 +10,4 @@ 판매
- + diff --git a/app/Views/layouts/front/left_menu/leftmenu_9.php b/app/Views/layouts/front/left_menu/leftmenu_9.php index 0261bb8..aa66289 100644 --- a/app/Views/layouts/front/left_menu/leftmenu_9.php +++ b/app/Views/layouts/front/left_menu/leftmenu_9.php @@ -1,4 +1,4 @@ - +
-
서버
@@ -10,4 +10,4 @@ 판매
- + diff --git a/public/css/front/payment.css b/public/css/front/payment.css new file mode 100644 index 0000000..1c4c23a --- /dev/null +++ b/public/css/front/payment.css @@ -0,0 +1,45 @@ +.padding{ + padding:5rem !important; + margin-left:300px; +} +.card { + margin-bottom: 1.5rem; +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid #c8ced3; + border-radius: .25rem; +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-header { + padding: .75rem 1.25rem; + margin-bottom: 0; + background-color: #f0f3f5; + border-bottom: 1px solid #c8ced3; +} + +.card-body { + flex: 1 1 auto; + padding: 1.25rem; +} + +.form-control:focus { + color: #5c6873; + background-color: #fff; + border-color: #c8ced3 !important; + outline: 0; + box-shadow: 0 0 0 #F44336; +} \ No newline at end of file