diff --git a/.gitignore b/.gitignore index c5535ee..0b851ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ #codeigniter4 composer.lock /vendor/ +public/vendors/ +public/tinymce_uploads .env writable/caceh/* @@ -13,3 +15,5 @@ writable/uploads/* !writable/uploads/index.html writable/debugbar/* !writable/debugbar/index.html +writable/excel/* +!writable/excel/index.html \ No newline at end of file diff --git a/app/Config/Constants.php b/app/Config/Constants.php index fc99b67..973884e 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -95,12 +95,12 @@ define('EVENT_PRIORITY_HIGH', 10); //Default값 정의 define('DEFAULTS', [ - 'ROLE' => getenv('default.role') ?: "guest", - 'STATUS' => getenv('default.status') ?: "use", - 'EMPTY' => getenv('default.empty') ?: "", - 'PERPAGE' => getenv('default.perpage') ?: 20, - 'DELIMITER_FILE' => getenv('default.delimiter.file') ?: "||", - 'DELIMITER_ROLE' => getenv('default.delimiter.role') ?: ",", + 'ROLE' => "guest", + 'STATUS' => "use", + 'EMPTY' => "", + 'PERPAGE' => 20, + 'DELIMITER_FILE' => "||", + 'DELIMITER_ROLE' => ",", ]); //URL define('URLS', [ @@ -108,25 +108,160 @@ define('URLS', [ 'SIGNUP' => '/user/signup', 'LOGOUT' => '/user/logout', ]); +//회원ROLE +define('ROLES', [ + 'guest', + 'user', + 'vip', + 'manager', + 'cloudflare', + 'director', + 'master', +]); //SESSION 관련 -define('SESSION', [ - 'NAMES' => ['RETURN_URL' => "return_url", 'ISLOGIN' => "islogined", 'AUTH' => 'auth', 'CART' => 'cart'], +define('SESSION_NAMES', [ + 'RETURN_URL' => "return_url", + 'ISLOGIN' => "islogined", + 'AUTH' => 'auth', ]); //인증 관련 -define('AUTH', [ - 'ROLES' => ['guest', 'user', 'vip', 'manager', 'cloudflare', 'director', 'master'], - 'FIELDS' => ['ID' => 'id', 'TITLE' => 'title', 'ROLE' => 'role'], - 'AUTH_ADAPTERS' => [ - 'Local' => [ - 'DEBUG' => getenv("auth.loca.debug") ?: false, - ], - 'Google' => [ - 'DEBUG' => getenv("auth.google.debug") ?: false, - 'ICON' => getenv("auth.google.icon") ?: '', - 'CLIENT_ID' => getenv("auth.google.client.id"), - 'CLIENT_KEY' => getenv("auth.google.client.key"), - 'CALLBACK_URL' => getenv("auth.google.client.callback_url"), - 'TOKEN_NAME' => getenv('auth.google.client.token_name') ?: "access_token", - ], +define('AUTH_FIELDS', [ + 'ID' => 'id', + 'TITLE' => 'title', + 'ROLE' => 'role' +]); + +define("MESSENGERS", [ + "skype" => [ + "url" => "https://join.skype.com/invite/uKUgXfZThSQC", + "icon" => '스카이프', + "id" => '' + ], + "discord" => [ + "url" => "https://discord.gg/k6nQg84N", + "icon" => '디스코드', + "id" => '' + ], + "telegram" => [ + "url" => "https://t.me/daemonidc", + "icon" => '텔레그램', + "id" => '@daemonidc' + ], + "kakaotalk" => [ + "url" => "https://t.me/daemonidc", + "icon" => '카카오톡', + "id" => '' ] ]); + +//아이콘 및 Sound관련 +define('ICONS', [ + 'LOGO' => '', + 'LOGIN' => '', + 'LOGOUT' => '', + 'LOCK' => '', + 'NEW' => '', + 'REPLY' => '', + 'DELETE' => '', + 'RELOAD' => '', + 'SETUP' => '', + 'FLAG' => '', + 'SEARCH' => '', + 'EXCEL' => '', + 'HOME' => '', + 'PLAY' => '', + 'CART' => '', + 'CARD' => '', + 'DEPOSIT' => '', + 'UP' => '', + 'DOWN' => '', + 'LEFT' => '', + 'RIGHT' => '', + 'IMAGE_FILE' => '', + 'GOOGLE' => '', +]); + +define('TOP_BANNER', [ + 'default' => '', + 'aboutus' => '', + 'member' => '', + 'hosting' => '', + 'serverdevice' => '', + 'service' => '', + 'support' => '', +]); + +define('AUDIOS', [ + 'Alram_GetEmail' => '', +]); + +define('KEYWORD', '일본IDC 일본서버 일본 서버 일본호스팅 서버호스팅 디도스 공격 해외 호스팅 DDOS 방어 ddos 의뢰 디도스 보안 일본 단독서버 가상서버'); +define('LAYOUTS', [ + 'empty' => [ + 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'empty', + 'stylesheets' => [ + '', + '', + '', + ], + 'javascripts' => [ + '', + ] + ], + 'front' => [ + 'title' => KEYWORD, + 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'front', + //'topmenus' => ['aboutus', 'hosting', 'serverdevice', 'service', 'support'], + 'topmenus' => ['aboutus', 'hosting', 'service', 'support'], + 'metas' => [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + ], + 'stylesheets' => [ + '', + '', + '', + '', + '', + '', + '', + '', + '', + ], + 'javascripts' => [ + '', + '', + '', + '', + '', + ], + ], + 'admin' => [ + 'title' => '관리자화면', + 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'admin', + 'stylesheets' => [ + '', + '', + '', + '', + '', + '', + '', + '', + ], + 'javascripts' => [ + '', + '', + '', + '', + '', + ] + ], +]); diff --git a/app/Controllers/Mangboard/Admin/UserController.php b/app/Controllers/Mangboard/Admin/UserController.php index eb83a32..880c432 100644 --- a/app/Controllers/Mangboard/Admin/UserController.php +++ b/app/Controllers/Mangboard/Admin/UserController.php @@ -15,10 +15,7 @@ class UserController extends CommonController use AuthTrait; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { - // Do Not Edit This Line parent::initController($request, $response, $logger); - // Preload any models, libraries, etc, here. - // E.g.: $this->session = \Config\Services::session(); $this->session = $this->login_check(); } diff --git a/app/Entities/SNSUserEntity.php b/app/Entities/SNSUserEntity.php new file mode 100644 index 0000000..0771c09 --- /dev/null +++ b/app/Entities/SNSUserEntity.php @@ -0,0 +1,49 @@ +getPK()}:{$this->getID()}:{$this->getTitle()},{$this->getLevel()}/{$this->getPoint()}"; + } + public function getTitle(): string + { + return $this->attributes['_name']; + } + public function setTitle(string $title): void + { + $this->attributes['name'] = $title; + } + //Common Function + + public function getPK(): int + { + return $this->attributes['uid']; + } + public function getID(): string + { + return $this->attributes['id']; + } + public function getPoint(): int + { + return $this->attributes['point']; + } + public function setPoint(int $point): void + { + + $this->attributes['point'] = $point; + } + + public function getLevel(): int + { + return $this->attributes['level']; + } + public function setLevel(int $value): void + { + $this->attributes['level'] = $value; + } +} diff --git a/app/Entities/UserEntity.php b/app/Entities/UserEntity.php new file mode 100644 index 0000000..6db8108 --- /dev/null +++ b/app/Entities/UserEntity.php @@ -0,0 +1,49 @@ +getPK()}:{$this->getID()}:{$this->getTitle()},{$this->getLevel()}/{$this->getPoint()}"; + } + public function getTitle(): string + { + return $this->attributes['_name']; + } + public function setTitle(string $title): void + { + $this->attributes['name'] = $title; + } + //Common Function + + public function getPK(): int + { + return $this->attributes['uid']; + } + public function getID(): string + { + return $this->attributes['id']; + } + public function getPoint(): int + { + return $this->attributes['point']; + } + public function setPoint(int $point): void + { + + $this->attributes['point'] = $point; + } + + public function getLevel(): int + { + return $this->attributes['level']; + } + public function setLevel(int $value): void + { + $this->attributes['level'] = $value; + } +} diff --git a/app/Libraries/Auth/AuthLibrary.php b/app/Libraries/Auth/AuthLibrary.php new file mode 100644 index 0000000..ffbeda2 --- /dev/null +++ b/app/Libraries/Auth/AuthLibrary.php @@ -0,0 +1,58 @@ +_session = \Config\Services::session(); + } + abstract public function getAuthButton(); + abstract public function execute(): UserEntity; + + final protected function getUserModel(): UserModel + { + if (is_null($this->_userModel)) { + $this->_userModel = new UserModel(); + } + return $this->_userModel; + } + + final protected function getUserSNSModel(): SNSUSerModel + { + if (is_null($this->_snsUserModel)) { + $this->_snsUserModel = new SNSUserModel(); + } + return $this->_snsUserModel; + } + + protected function setSession_process(UserEntity $entity): UserEntity + { + $this->_session->set(SESSION_NAMES['ISLOGIN'], true); + $auths = []; + foreach (array_values(AUTH_FIELDS) as $field) { + switch ($field) { + case 'id': + $auths[$field] = $entity->getPK(); + break; + case 'title': + $auths[$field] = $entity->getTitle(); + break; + case 'role': + $auths[$field] = $entity->$field; + break; + } + } + $this->_session->set(SESSION_NAMES['AUTH'], $auths); + return $entity; + } +} diff --git a/app/Libraries/Auth/GoogleLibrary.php b/app/Libraries/Auth/GoogleLibrary.php new file mode 100644 index 0000000..5609a11 --- /dev/null +++ b/app/Libraries/Auth/GoogleLibrary.php @@ -0,0 +1,111 @@ +_mySocket === null) { + $this->_mySocket = new MySocketLibrary(getenv('yamap.host.url')); + } + return $this->_mySocket; + } + + public function getAuthButton() + { + $button = ""; + if (!$this->getMySocket()->getAccessToken()) { + $button = anchor( + $this->getMySocket()->getClient()->createAuthUrl(), + ICONS['GOOGLE'], + ["target" => "_self"] + ); + } + return $button; + } + public function execute(): UserEntity + { + return new UserEntity(); + // try { + // //Google 접근 권한 설정. + // $this->getMySocket()->setAccessToken(); + // //Google 서비스 설정 + // //$service = new \Google\Service\Oauth2($this->getMySocket()); + // $service = new \Google\Service\Oauth2($this->getMySocket()); + // $result = $service->userinfo->get(); + // log_message("debug", var_export($result, true)); + // // throw new \Exception(__METHOD__ . "에서 데이터 처리 필요"); + // // DEBUG - 2023-07-13 12:54:51 --> \Google\Service\Oauth2\Userinfo::__set_state(array( + // // 'internal_gapi_mappings' => + // // array ( + // // 'familyName' => 'family_name', + // // 'givenName' => 'given_name', + // // 'verifiedEmail' => 'verified_email', + // // ), + // // 'modelData' => + // // array ( + // // 'verified_email' => true, + // // 'given_name' => '이름', + // // 'family_name' => '성', + // // ), + // // 'processed' => + // // array ( + // // ), + // // 'email' => 'twsdfsew342s@gmail.com', + // // 'familyName' => '성', + // // 'gender' => NULL, + // // 'givenName' => '이름', + // // 'hd' => NULL, + // // 'id' => '103667492432234234236838324', + // // 'link' => NULL, + // // 'locale' => 'ko', + // // 'name' => '성이름', + // // 'picture' => 'https://lh3.googleusercontent.com/a/AAcHTteFSgefsdfsdRJBkJA2tBEmg4PQrvI1Ta_5IXu5=s96-c', + // // 'verifiedEmail' => true, + // // )) + // //조건에 해당하는 이미 등록된 사용자가 있는지 검사 + // $snsEntity = null; + // try { + // $snsEntity = $this->getUserSNSModel()->asObject(SNSUSerEntity::class)->where( + // array("site" => $this->_site, "id" => $result['id']) + // )->first(); + // } catch (\Exception $e) { + // $snsEntity = new SNSUSerEntity([ + // 'site' => $this->_site, + // 'id' => $result['id'], + // 'name' => $result['name'], + // 'email' => $result['email'], + // 'detail' => json_encode($result), + // 'status' => 'standby', + // ]); + // $snsEntity = $this->getUserSNSModel()->create($snsEntity); + // } + // //상태가 use(승인완료)가 아니라면 + // if ($snsEntity->status !== DEFAULTS['STATUS']) { + // throw new \Exception("{$this->_site}}의{$result['email']}:{$result['name']}님은 " . $snsEntity->status . "입니다"); + // } + // //user_id가 연결되어있지 않았다면 + // if (!$snsEntity->getID()) { + // throw new \Exception("{$this->_site}의{$result['email']}:{$result['name']}님은 아직 사용자 지정이 되지 않았습니다. "); + // } + // //인증된 사용자 정보를 가져온후 로그인처리 + // $entity = $this->getUserModel()->getEntityByID($snsEntity->getID()); + // return $this->setSession_process($entity);; + // } catch (\Exception $e) { + // throw new \Exception("관리자에게 문의하시기 바랍니다.
{$e->getMessage()}"); + // } + } +} diff --git a/app/Libraries/Auth/LocalLibrary.php b/app/Libraries/Auth/LocalLibrary.php new file mode 100644 index 0000000..c423a81 --- /dev/null +++ b/app/Libraries/Auth/LocalLibrary.php @@ -0,0 +1,34 @@ +getFormDatas(); + // if (!isset($formDatas['id']) || !$formDatas['id'] || !isset($formDatas['passwd']) || !$formDatas['passwd']) { + // throw new \Exception("ID 나 암호의 값이 없습니다."); + // } + // $entity = $this->getUserModel()->getEntity(['id' => $formDatas['id'], 'status' => DEFAULTS['STATUS']]); + // if (!password_verify($formDatas['passwd'], $entity->passwd)) { + // throw new \Exception("암호가 맞지않습니다."); + // } + // //Session에 인증정보 설정 + // return $this->setSession_process($entity);; + } +} diff --git a/app/Libraries/MySocket/GoogleLibrary.php b/app/Libraries/MySocket/GoogleLibrary.php new file mode 100644 index 0000000..0a77b3b --- /dev/null +++ b/app/Libraries/MySocket/GoogleLibrary.php @@ -0,0 +1,59 @@ +_session = \Config\Services::session(); + } + + public function getClient() + { + if (is_null($this->_client)) { + // $this->_client = new \Google_Client(); + $this->_client = new \GuzzleHttp\Client(); + $this->_client->setClientId(getenv("google.client.id")); + $this->_client->setClientSecret(getenv("google.client.key")); + $this->_client->setRedirectUri(base_url() . getenv("google.client.callback_url")); + $this->_client->addScope('email'); + $this->_client->addScope('profile'); + } + return $this->_client; + } + + public function getAccessCode(): string + { + if ($this->_access_code === "") { + throw new \Exception("access_code가 지정되지 않았습니다."); + } + return $this->_access_code; + } + public function setAccessCode(string $access_code) + { + $this->_access_code = $access_code; + } + + public function setAccessToken() + { + //2.토큰정보 가져오기 + $tokenInfo = $this->getClient()->fetchAccessTokenWithAuthCode($this->getAccessCode()); + if (isset($tokenInfo['error'])) { + throw new \Exception($tokenInfo['error']); + } + $token = $tokenInfo[getenv("google.client.token_name")]; + //3. Google Service에 접근하기위해 Access Token을 설정 + $this->getClient()->setAccessToken($token); + //4. Google에 로그인이 했으므로 세션에 Token값 설정 + $this->_session->set(getenv("google.client.token_name"), $token); + } + public function getAccessToken(): ?string + { + return $this->_session->get(getenv("google.client.token_name")); + } +} diff --git a/app/Libraries/MySocket/MySocketLibrary.php b/app/Libraries/MySocket/MySocketLibrary.php index 9dbe570..fdb2311 100644 --- a/app/Libraries/MySocket/MySocketLibrary.php +++ b/app/Libraries/MySocket/MySocketLibrary.php @@ -4,10 +4,17 @@ namespace App\Libraries\MySocket; use App\Libraries\CommonLibrary; -class MySocketLibrary extends CommonLibrary +abstract class MySocketLibrary extends CommonLibrary { - public function __construct() + private $_host = null; + protected function __construct(string $host) { parent::__construct(); + $this->_host = $host; + } + abstract public function getClient(); + final protected function getHost(): string + { + return $this->_host; } } diff --git a/app/Libraries/MySocket/WebLibrary.php b/app/Libraries/MySocket/WebLibrary.php index 281e600..77563a2 100644 --- a/app/Libraries/MySocket/WebLibrary.php +++ b/app/Libraries/MySocket/WebLibrary.php @@ -9,22 +9,17 @@ class WebLibrary extends MySocketLibrary { private $_client = null; private $_cookieJar = null; - private $_host = null; + public function __construct(string $host) { - parent::__construct(); - $this->_host = $host; + parent::__construct($host); } - final protected function getHost(): string - { - return $this->_host; - } - final protected function getClient(): Client + public function getClient() { if ($this->_client === null) { - $this->_client = new Client(['verify' => false]); + $this->_client = new Client(['verify' => getenv("socket.web.ssl.verify") == "true" ? true : false]); } return $this->_client; } diff --git a/app/Libraries/MyStorage/FileLibrary.php b/app/Libraries/MyStorage/FileLibrary.php index 7dee383..82df807 100644 --- a/app/Libraries/MyStorage/FileLibrary.php +++ b/app/Libraries/MyStorage/FileLibrary.php @@ -33,8 +33,8 @@ class FileLibrary extends MyStorageLibrary case "video": $mediaTag = sprintf( "", $entity->getTitle(), $this->getUploadPath(), diff --git a/app/Models/SNSUserModel.php b/app/Models/SNSUserModel.php new file mode 100644 index 0000000..611b487 --- /dev/null +++ b/app/Models/SNSUserModel.php @@ -0,0 +1,74 @@ +getTitleField(): + $rules[$field] = "required|trim|string"; + break; + case "status": + $rules[$field] = "if_exist|trim|string"; + break; + case "email": + $rules[$field] = "if_exist|trim|valid_email"; + break; + case "level": + case "point": + $rules[$field] = "if_exist|numeric"; + break; + default: + $rules = parent::getFieldRule($field, $rules); + break; + } + return $rules; + } + + public function getEntityByPK(int $uid): null|SNSUSerEntity + { + $this->where($this->getPKField(), $uid); + return $this->getEntity(); + } + public function getEntityByID(string $id): null|SNSUSerEntity + { + $this->where('user_id', $id); + return $this->getEntity(); + } + + //create용 + public function create(SNSUSerEntity $entity): SNSUSerEntity + { + $entity = $this->create_process($entity); + //GID값이 PK랑 같은 값 전달 후 Entity 수정 + $entity->gid = $entity->getPK(); + $this->setFields(["gid"]); + return $this->modify_process($entity); + } + + //modify용 + public function modify(SNSUSerEntity $entity): SNSUSerEntity + { + return $this->modify_process($entity); + } +} diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php new file mode 100644 index 0000000..483caed --- /dev/null +++ b/app/Models/UserModel.php @@ -0,0 +1,74 @@ +getTitleField(): + $rules[$field] = "required|trim|string"; + break; + case "status": + $rules[$field] = "if_exist|trim|string"; + break; + case "email": + $rules[$field] = "if_exist|trim|valid_email"; + break; + case "level": + case "point": + $rules[$field] = "if_exist|numeric"; + break; + default: + $rules = parent::getFieldRule($field, $rules); + break; + } + return $rules; + } + + public function getEntityByPK(int $uid): null|UserEntity + { + $this->where($this->getPKField(), $uid); + return $this->getEntity(); + } + public function getEntityByID(string $id): null|UserEntity + { + $this->where('user_id', $id); + return $this->getEntity(); + } + + //create용 + public function create(UserEntity $entity): UserEntity + { + $entity = $this->create_process($entity); + //GID값이 PK랑 같은 값 전달 후 Entity 수정 + $entity->gid = $entity->getPK(); + $this->setFields(["gid"]); + return $this->modify_process($entity); + } + + //modify용 + public function modify(UserEntity $entity): UserEntity + { + return $this->modify_process($entity); + } +} diff --git a/app/Traits/AuthTrait.php b/app/Traits/AuthTrait.php index dbad88f..3bd6d2a 100644 --- a/app/Traits/AuthTrait.php +++ b/app/Traits/AuthTrait.php @@ -7,12 +7,12 @@ trait AuthTrait public function login_check(): array { //사용자 기본 Role 지정 - $session[SESSION['NAMES']['ISLOGIN']] = false; + $session[SESSION_NAMES['ISLOGIN']] = false; $session['currentRoles'] = [DEFAULTS["ROLE"]]; - if (\Config\Services::session()->get(SESSION['NAMES']['ISLOGIN'])) { - $session[SESSION['NAMES']['ISLOGIN']] = true; - $session['auth'] = $this->_session->get(SESSION['NAMES']['AUTH']); - $currentRoles = explode(DEFAULTS['DELIMITER_ROLE'], $session['auth'][AUTH['FIELDS']['ROLE']]); + if (\Config\Services::session()->get(SESSION_NAMES['ISLOGIN'])) { + $session[SESSION_NAMES['ISLOGIN']] = true; + $session['auth'] = $this->_session->get(SESSION_NAMES['AUTH']); + $currentRoles = explode(DEFAULTS['DELIMITER_ROLE'], $session['auth'][AUTH_FIELDS['ROLE']]); $session['currentRoles'] = is_array($currentRoles) ? $currentRoles : [DEFAULTS["ROLE"]]; } return $session; diff --git a/public/css/admin.css b/public/css/admin.css new file mode 100644 index 0000000..8080efb --- /dev/null +++ b/public/css/admin.css @@ -0,0 +1,53 @@ +/* ------------------------------------------------------------ + * Name : admin.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + * { + margin:0px; + padding:0px; + border:0px; + font-size:14px; + font: Arial; +} + +/* #head{ + border:1px solid blue; +} */ +#tail{ + text-align:center; + /* border:1px solid green; */ +} +#layout { + width:100%; + /* border:1px solid blue; */ +} + +#layout #body{ + padding-left:10px; + /* border:1px solid red; */ +} + +#layout #body nav.header{ + /*content 상단라인*/ + padding-top:40px; + border-bottom:1px solid silver; +} +#layout #body nav.header nav h4.title{ + font-size:26px; + font-weight:bold; +} +#layout #body nav.header nav span.flow{ + color: gray; +} +#layout #body div.footer + /*content 하단라인*/{ + height:20px; + /* border-top:0px; + border-left:1px solid silver; + border-bottom:1px solid silver; + border-right:1px solid silver; + border-radius: 0px 0px 10px 10px; + background-color:white; */ +} \ No newline at end of file diff --git a/public/css/admin/content.css b/public/css/admin/content.css new file mode 100644 index 0000000..71fa4f9 --- /dev/null +++ b/public/css/admin/content.css @@ -0,0 +1,95 @@ +div#content{ + color:black; + padding-top:20px; + margin-bottom:40px; + /* border-left:1px solid silver; + border-right:1px solid silver; */ +} +/* div#content div.top{ + border:1px solid red; +} */ + +/*페이지정보*/ +div#content div.top nav span.pageinfo{ + font-weight:bold; +} +/*검색*/ +div#content div.top nav input[type=text]{ + width:200px; + height:40px; + border-radius:0px !important; + /* border:1px solid red; */ +} +/*검색submit*/ +div#content div.top nav input[type=submit]{ + font-size:12px; + font-weight:bold; + width:80px; + height:40px; + color:white; + border-radius:0px !important; + background-color:#555555; + /* border:1px solid red; */ +} +/*Excel Icon*/ +div#content div.top nav a{ + border-radius:0px !important; + /* border:1px solid red; */ +} + +/* Table 부분 */ +div#content table { + width:100%; + /* overflow-x: auto; + padding-top:5px; + padding-bottom:5px; */ +} + +/* insert,update,reply,view Form Page 관련 전용*/ +div#content table.form tbody tr td.label{ + width:10%; + text-align:right; + padding-right:20px; + background-color:#e8ebe9; +} +div#content table.form tbody tr td.column{ + height:27px; + text-align:left; + padding-left:20px; +} +/* insert,update,reply,view Form Page 관련 전용*/ + +/* 상품 리스트 전용 */ +div#content table.product tr:first-child { + border-top:2px solid black; + border-bottom:1px solid silver; +} +/* 상품 리스트 전용 */ + +div#content table thead th{ + white-space: nowrap; + padding-top:15px; + padding-bottom:15px; + font-size: 16px; + font-weight:bold; + border-top:2px solid black; + border-bottom:1px solid silver; + background-color:#F5F5F5; + /* border:1px solid silver; */ +} + +div#content div.bottom { + padding-top:15px; + text-align:center; +} +div#content div.bottom ul.pagination { + margin-top:20px; +} +div#content div.bottom ul.pagination li.page-item a{ + border:0px; + border-radius:0px !important; + background-color:#e8ebe9; +} +div#content div.bottom ul.pagination li.active a{ + background-color:gray; +} \ No newline at end of file diff --git a/public/css/admin/left_menu.css b/public/css/admin/left_menu.css new file mode 100644 index 0000000..3b75ace --- /dev/null +++ b/public/css/admin/left_menu.css @@ -0,0 +1,20 @@ +div#left_menu{ + position:fixed; + z-index:100; + width:160px; + border:1px solid silver; +} + +div#left_menu div.accordion { + /* display:none; */ + background-color: white; +} +div#left_menu div.accordion div.accordion-item:hover { + background-color: #e7e7e7; +} +div#left_menu div.accordion div.accordion-item a{ + padding-left:10px; +} +div#left_menu div.accordion div.accordion-collapse a{ + padding-left:30px; +} \ No newline at end of file diff --git a/public/css/admin/member_link.css b/public/css/admin/member_link.css new file mode 100644 index 0000000..38ed839 --- /dev/null +++ b/public/css/admin/member_link.css @@ -0,0 +1,17 @@ +nav.top_menu ul.member-link{ + /* border:1px solid red; */ + color:#3a37f3; + padding-right:20px; +} + +nav.top_menu ul.member-link a{ + color:#3a37f3; +} + +nav.top_menu ul.member-link ul.dropdown-menu li:hover{ + background-color: #eaeaea; +} + +nav.top_menu ul.member-link ul.dropdown-menu li a{ + padding-left:10px; +} \ No newline at end of file diff --git a/public/css/common/copyright.css b/public/css/common/copyright.css new file mode 100644 index 0000000..45a4a77 --- /dev/null +++ b/public/css/common/copyright.css @@ -0,0 +1,29 @@ +div#copyright{ + width:100%; + height:300px; + padding-top:30px; + padding-bottom:30px; + background-color:#2d2e2e; + color:white; +} + +div#copyright div#content_bottom{ + color:white; + text-align:left; + /* border-left:1px solid silver; + border-right:1px solid silver; */ +} + +div#copyright div#content_bottom .item{ + padding-top:5px; + padding-left:5px; + padding-right:5px; + border-top:1px solid silver; + border-left:1px solid silver; + border-right:1px solid silver; +} + +div#copyright div#content_bottom div.company_info{ + padding:10px; + border:1px solid silver; +} diff --git a/public/css/common/left_menu.css b/public/css/common/left_menu.css new file mode 100644 index 0000000..30bb035 --- /dev/null +++ b/public/css/common/left_menu.css @@ -0,0 +1,60 @@ +div#left_menu{ + /* position:fixed; + z-index:100; */ + width:200px; + background-color:white; +} + +div#left_menu div.parent { + font-size:24px; + font-weight:bold; + height:170px; + padding-top:30px; + background-color: #eeeeee; + border:1px solid silver; + text-align:center; +} +div#left_menu div.parent div.title{ + color:#26417D; +} +div#left_menu div.parent div{ + font-size:24px; +} + +/* leftmenu bar */ +div#left_menu div.sibling { + padding-top:15px; + text-align:left; + padding-left:20px; + height:60px; + border-bottom:1px solid silver; +} +div#left_menu div.active { + background-color:#26417D; +} +div#left_menu div.sibling a{ + text-decoration: none; + color:black; + font-size:18px; +} +div#left_menu div.sibling span.play{ + float:right; + color:white; + padding-top:5px; + padding-right:15px; +} +div#left_menu div.active { + background-color:#26417D; +} +div#left_menu div.active a{ + color:white; +} +div#left_menu div.sibling:hover { + background-color:#26417D; +} +div#left_menu div.sibling:hover a,div.active{ + color:white; +} +div#left_menu div.sibling:hover span.play{ + color:white; +} \ No newline at end of file diff --git a/public/css/common/login.css b/public/css/common/login.css new file mode 100644 index 0000000..c35ee0d --- /dev/null +++ b/public/css/common/login.css @@ -0,0 +1,46 @@ +/* ------------------------------------------------------------ +* Name : admin.css +* Desc : Admin StyleSheet +* Created : 2016/9/11 Tri-aBility by Junheum,Choi +* Updated : +------------------------------------------------------------ */ +div.login{ + width: 799px; + height: 283px; + margin-top:30px; + margin-left:120px; + padding-top:155px; + background-image: url('/images/common/adminbg.png'); +} +div.login form{ + margin-left:300px; + /* border: 1px solid red; */ +} + +div.login form table { + width:300px; + /* border: 1px solid red; */ +} + +div.login form table td { + text-align: center; + color:white; + padding-right:5px; + /* border: 1px solid blue; */ +} +div.login form table td.column { + height: 27px; +} + +div.login form table td.login_bottom{ + padding-top:20px; +} +div.login form table td.login_bottom a{ + color:white; +} + +/* div.login form table input[type=submit]{ + width: 57px; + height: 60px; + background: url('/images/common/btn_login.png'); +} */ \ No newline at end of file diff --git a/public/css/common/login_v1.css b/public/css/common/login_v1.css new file mode 100644 index 0000000..8eb0668 --- /dev/null +++ b/public/css/common/login_v1.css @@ -0,0 +1,50 @@ +/* ------------------------------------------------------------ +* Name : admin.css +* Desc : Admin StyleSheet +* Created : 2016/9/11 Tri-aBility by Junheum,Choi +* Updated : +------------------------------------------------------------ */ + +div#content a { + color:black; +} + +div#content div.login{ + width: 509px; + margin-top:30px; +} + +div#content div.login form { + padding-top:20px; + border:1px solid silver; +} + +div#content div.login form div.label_column{ + text-align:right; + /* border:1px solid red; */ +} + +div#content div.login form label.col-form-label{ + font-size:18px; + font-weight:bold; + /* border:1px solid red; */ +} + +div#content div.login form input[type=text],input[type=password]{ + text-align:left; + height:35px; + width:250px; + border:1px solid silver; +} + +div#content div.login_bottom{ + padding-top:20px; + padding-bottom:20px; + text-align:center; +} + +/* div#content div.login form table input[type=submit]{ + width: 57px; + height: 60px; + background: url('/images/common/btn_login.png'); +} */ \ No newline at end of file diff --git a/public/css/common/top_menu.css b/public/css/common/top_menu.css new file mode 100644 index 0000000..de2808b --- /dev/null +++ b/public/css/common/top_menu.css @@ -0,0 +1,74 @@ + +#top_menu{ + width:1280px; + /* border:1px solid red; */ +} +#top_menu a:hover{ + text-decoration:none; +} +/* #top_menu nav.nav,ul.nav{ + border:1px solid red; +} */ +#top_menu a.navbar-brand{ + font-size:24px; + font-weight:bold; +} + +/* 메뉴바그룹 상단글자*/ +#top_menu div.dropdown-center ul.navbar-nav a#navbarDarkDropdownMenuLink{ + font-size:18px; + font-weight:bold; + /* border:1px solid silver; */ +} + +/* 메뉴바그룹 */ +#top_menu div.dropdown-center ul.navbar-nav li.dropdown { + width:150px; + text-align:center; + /* border:1px solid red; */ +} +/* 메뉴바그룹 hover했을시 */ +#top_menu div.dropdown-center ul.navbar-nav li.dropdown:hover a#navbarDarkDropdownMenuLink{ + color:#26417D; +} +#top_menu div.dropdown-center ul.navbar-nav li.dropdown:hover ul.dropdown-menu{ + /* margin-top:15px; */ + display: block; + /* 라운드없애기 */ + border-radius:0px !important; + padding-bottom:0px; + border:0px; + /* border:1px solid silver; */ +} + +/* 메뉴바 */ +#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li{ + height:60px; + padding-top:15px; + border-bottom:1px solid silver; +} +#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li a{ + width:150px; + font-size:16px; + font-weight:bold; + text-align:center; + text-decoration:none; +} +#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li.active{ + background-color:#26417D; + /* border:1px solid red; */ +} +#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li.active a{ + color:white; + background-color:#26417D; + /* border:1px solid red; */ +} +/* 메뉴바 over했을시*/ +#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li:hover{ + background-color:#26417D; + /* border:1px solid red; */ +} +#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li:hover a{ + color:white; + background-color:#26417D; +} \ No newline at end of file diff --git a/public/css/common/top_navigator.css b/public/css/common/top_navigator.css new file mode 100644 index 0000000..ab9cd34 --- /dev/null +++ b/public/css/common/top_navigator.css @@ -0,0 +1,24 @@ +#top_navigator{ + padding-top:20px; + padding-bottom:20px; + background-color:#eeeeee +} + +#top_navigator ul.justify-content-center div.navigator_center span{ + padding-left:5px; + padding-right:5px; +} +#top_navigator ul.justify-content-center div.navigator_center span strong{ + color:#26417D; + font-weight: bold; +} + +#top_navigator ul.justify-content-center div.navigator_center span strong{ + color:#26417D; + font-weight: bold; +} + +#top_navigator ul.justify-content-end li.cart a{ + font-size:18px; + font-weight: 500; +} diff --git a/public/css/empty.css b/public/css/empty.css new file mode 100644 index 0000000..2decc0b --- /dev/null +++ b/public/css/empty.css @@ -0,0 +1,14 @@ +/* ------------------------------------------------------------ + * Name : admin.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + + * { + margin:0px; + padding:0px; + border:0px; + font-size:14px; + font: Arial; +} diff --git a/public/css/front.css b/public/css/front.css new file mode 100644 index 0000000..469f91a --- /dev/null +++ b/public/css/front.css @@ -0,0 +1,54 @@ +/* ------------------------------------------------------------ + * Name : admin.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + * { + margin:0px; + padding:0px; + border:0px; + font-size:14px; + font: Arial; +} + +/* #head{ + border:1px solid blue; +} */ +#tail{ + text-align:center; + /* border:1px solid green; */ +} +#layout { + width:1280px; + /* border:1px solid blue; */ +} + +#layout #body{ + padding-left:10px; + /* border:1px solid red; */ +} + +#layout #body nav.header{ + /*content 상단라인*/ + padding-top:40px; + margin-left:30px; + border-bottom:1px solid silver; +} +#layout #body nav.header nav h4.title{ + font-size:26px; + font-weight:bold; +} +#layout #body nav.header nav span.flow{ + color: gray; +} +#layout #body div.footer + /*content 하단라인*/{ + height:20px; + /* border-top:0px; + border-left:1px solid silver; + border-bottom:1px solid silver; + border-right:1px solid silver; + border-radius: 0px 0px 10px 10px; + background-color:white; */ +} \ No newline at end of file diff --git a/public/css/front/billing.css b/public/css/front/billing.css new file mode 100644 index 0000000..b796a9d --- /dev/null +++ b/public/css/front/billing.css @@ -0,0 +1,18 @@ +/* ------------------------------------------------------------ +* Name : admin.css +* Desc : Admin StyleSheet +* Created : 2016/9/11 Tri-aBility by Junheum,Choi +* Updated : +------------------------------------------------------------ */ +table#billing td { + text-align: center; + color:white; + padding-right:5px; + /* border: 1px solid blue; */ +} +table#billing td { + height: 27px; +} +table#billing td.label { + width: 15%; +} \ No newline at end of file diff --git a/public/css/front/content.css b/public/css/front/content.css new file mode 100644 index 0000000..6c6f850 --- /dev/null +++ b/public/css/front/content.css @@ -0,0 +1,96 @@ +div#content{ + color:black; + padding-top:20px; + padding-left:30px; + margin-bottom:40px; + /* border-left:1px solid silver; + border-right:1px solid silver; */ +} +/* div#content div.top{ + border:1px solid red; +} */ + +/*페이지정보*/ +div#content div.top nav span.pageinfo{ + font-weight:bold; +} +/*검색*/ +div#content div.top nav input[type=text]{ + width:200px; + height:40px; + border-radius:0px !important; + /* border:1px solid red; */ +} +/*검색submit*/ +div#content div.top nav input[type=submit]{ + font-size:12px; + font-weight:bold; + width:80px; + height:40px; + color:white; + border-radius:0px !important; + background-color:#555555; + /* border:1px solid red; */ +} +/*Excel Icon*/ +div#content div.top nav a{ + border-radius:0px !important; + /* border:1px solid red; */ +} + +/* Table 부분 */ +div#content table { + width:100%; + /* overflow-x: auto; + padding-top:5px; + padding-bottom:5px; */ +} + +/* insert,update,reply,view Form Page 관련 전용*/ +div#content table.form tbody tr td.label{ + width:10%; + text-align:right; + padding-right:20px; + background-color:#e8ebe9; +} +div#content table.form tbody tr td.column{ + height:27px; + text-align:left; + padding-left:20px; +} +/* insert,update,reply,view Form Page 관련 전용*/ + +/* 상품 리스트 전용 */ +div#content table.product tr:first-child { + border-top:2px solid black; + border-bottom:1px solid silver; +} +/* 상품 리스트 전용 */ + +div#content table thead th{ + white-space: nowrap; + padding-top:15px; + padding-bottom:15px; + font-size: 16px; + font-weight:bold; + border-top:2px solid black; + border-bottom:1px solid silver; + background-color:#F5F5F5; + /* border:1px solid silver; */ +} + +div#content div.bottom { + padding-top:15px; + text-align:center; +} +div#content div.bottom ul.pagination { + margin-top:20px; +} +div#content div.bottom ul.pagination li.page-item a{ + border:0px; + border-radius:0px !important; + background-color:#e8ebe9; +} +div#content div.bottom ul.pagination li.active a{ + background-color:gray; +} \ No newline at end of file diff --git a/public/css/front/order.css b/public/css/front/order.css new file mode 100644 index 0000000..7a72ab8 --- /dev/null +++ b/public/css/front/order.css @@ -0,0 +1,50 @@ +/* ------------------------------------------------------------ +* Name : admin.css +* Desc : Admin StyleSheet +* Created : 2016/9/11 Tri-aBility by Junheum,Choi +* Updated : +------------------------------------------------------------ */ +div#order { + position:relative; + margin:0px; + padding:0px; + /* border:1px solid red; */ +} +div#order div.orderbox { + /* position:fixed; */ + width:200px; + padding:5px; + border:1px solid gray; +} +div#order div.orderbox div.title{ + font-size:18px; + font-weight: 600; + border-bottom:2px solid gray; +} + +div#order div.orderbox div.item{ + padding-bottom:5px; + /* border:1px solid red; */ +} +div#order div.orderbox div.item span.label{ + color: gray; +} +div#order div.orderbox div.item span.value{ + float:right; +} +div#order div.orderbox div.total{ + padding-top:10px; + border-top:2px solid gray; +} +div#order div.orderbox div.total span.label{ + color: gray; +} +div#order div.orderbox div.total span.value{ + float:right; + font-size:18px; + font-weight: 800; +} +div#order div.orderbox div.submit{ + padding-top:10px; + text-align:center; +} \ No newline at end of file diff --git a/public/css/front/sitepage.css b/public/css/front/sitepage.css new file mode 100644 index 0000000..73df0c5 --- /dev/null +++ b/public/css/front/sitepage.css @@ -0,0 +1,69 @@ +@charset "utf-8"; +/* doc.css는 디자인페이지 스타일을 정의합니다. */ + +.greeting {margin:0 -25px;} +.greeting:after {content:"";display:block;clear:both;} +.greeting .col {float:left; width:50%; padding:0 25px; box-sizing:border-box; text-align:justify; letter-spacing:-.40px;} + + +.company {position:relative; text-align:center; font-size:22px; line-height:1.4em; color:#2c2c2c; font-weight:300; padding-bottom:75px; margin-bottom:10px;} +.company strong {color:#30539f; font-weight:500} +.company:after {content:"";position:absolute; bottom:10px; left:50%; width:1px; height:46px; background:#ddd;} + +.com-cnt {border:1px solid #ededed;} +.com-cnt:after {content:" "; display:block; clear:both;} +.com-cnt .col {float:left; width:33.333%; height:278px; position:relative;} +.com-cnt .col.bg1 {background:url('/images/sub/com_icon1.png') 50% 41px no-repeat;} +.com-cnt .col.bg2 {background:#f8f9fb url('/images/sub/com_icon2.png') 50% 31px no-repeat;} +.com-cnt .col.bg3 {background:url('/images/sub/com_icon3.png') 50% 33px no-repeat;} +.com-cnt .col:first-child:after {display:none;} +.com-cnt .col:after {content:"";position:absolute; top:0; left:0; width:1px; height:100%; background:#ededed;} +.com-cnt .col dl {padding-top:145px; text-align:center;} +.com-cnt .col dl dt {color:#284685; font-size:18px; line-height:1.4em; font-weight:500; margin-bottom:10px;} +.com-cnt .col dl dd {font-size:15px; line-height:1.4em; text-align:left; padding-left:76px;} + + +.app-cnt:after {content:" "; display:block; clear:both;} +.app-cnt .col {float:left; width:275px; height:130px; position:relative; box-sizing:border-box;} +.app-cnt .col.inquiry {width:345px} +.app-cnt .col:first-child:after {display:none;} +.app-cnt .col:after {content:"";position:absolute; top:0; left:0; width:1px; height:100%; background:#ededed;} +.app-cnt .col .box {width:100%; height:130px;position:relative; display:table;} +.app-cnt .col .icon {position:absolute; top:0; left:0; width:107px; height:107px; background:url('../images/sub/sub2_1_icon.gif') 0 50% no-repeat;} +.app-cnt .col .info {padding-left:130px; font-size:15px; line-height:1.6em; height:130px;position:relative; vertical-align:middle; display:table-cell; letter-spacing:-.30px;} +.app-cnt .col.type2 .info {padding-left:48px; font-size:16px;} +.app-cnt .col.type2 dl dt {color:#284685; font-size:18px; line-height:1.4em; font-weight:500; margin-bottom:5px;} +.app-cnt .col.type2 dl dt img {vertical-align:middle; padding-left:5px;} + +.product-cnt {margin-bottom:70px; text-align:center;} +.product-cnt:last-child {margin-bottom:0} +.product-cnt p {line-height:0} +.product-cnt .col {position:relative; vertical-align:top; display:inline-block; width:420px; margin:-61px 10px 0 10px;} +.pro-title.type1 {background-color:#41adde} +.pro-title.type2 {background-color:#0280c9} +.pro-title.type3 {background-color:#284685} +.pro-title {font-size:20px; line-height:61px;color:#fff; font-weight:500; text-align:center;background-image:url('../images/sub/sub2_2_tit.png'); background-repeat:no-repeat; background-position:100% 0;} +.table01 table {width:100%; border-collapse:collapse; border-spacing:0px;} +.table01 table tbody th {padding:12px 10px; height:35px; font-size:16px; font-weight:500; line-height:22px; color:#4d4d4d; border-bottom:1px dotted #d6d6d6; background:#f6fafc;} +.table01 table tbody td {padding:12px 20px; color:#2c2c2c; font-size:16px; line-height:22px; border-bottom:1px dotted #d6d6d6;} +.table01 strong {font-weight:500} + +.box-cnt {border:1px solid #e0e0e0; border-radius:10px; padding:38px 27px; margin-bottom:50px;} +.box-cnt:last-child {margin-bottom:0} +.box-cnt .title {background:#f6f6f6; font-size:20px; line-height:1.4em; color:#2c2c2c; padding:5px 0 5px 18px; font-weight:500; margin-bottom:15px;} +.box-cnt .cnt {padding-left:18px; font-size:17px; line-height:1.6em; font-weight:200} +.box-cnt .cnt dl dt {position:relative; color:#2e3192; font-size:18px; line-height:1.4em; font-weight:500; padding-left:18px;} +.box-cnt .cnt dl dt:after {content:"";position:absolute;top:50%; margin-top:-2px; left:0; width:10px; height:5px; background:#2e3192; border-radius:2px;} +.box-cnt .cnt dl dd {text-indent:-10px; padding-left:10px; letter-spacing:-.30px;} + +/* +.sitemap:after {content:" "; display:block; clear:both;} +.sitemap dl {float:left; display:inline; width:225px; margin:0 0 30px 80px;} +.sitemap dl.first {margin-left:0} +.sitemap dl dt {padding:10px 0; text-align:center; font-size:16px; font-weight:500; color:#fff; margin:0 0 5px 0; background:#737373;border-top-left-radius:20px; border-bottom-right-radius:20px;} +.sitemap dl dd {line-height:40px; border-bottom:1px solid #eee; font-weight:300; text-indent:-12px; padding-left:13px;} +.sitemap dl dd a {display:block; padding:8px 0 8px 15px; font-size:15px; line-height:20px;} +.sitemap dl dd a:hover {color:#f1592a} +.sitemap dl dd ul {padding:2px 0 20px;} +.sitemap dl dd ul li a {background:none; color:#f1592a; font-size:12px; line-height:20px; padding:0 0 0 20px;} +*/ diff --git a/public/css/main.css b/public/css/main.css new file mode 100644 index 0000000..e583aed --- /dev/null +++ b/public/css/main.css @@ -0,0 +1,209 @@ +/* ------------------------------------------------------------ + * Name : admin.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + * { + margin:0px; + padding:0px; + border:0px; + font-size:14px; + font: Arial; +} + +/* #head{ + border:1px solid blue; +} */ +#tail{ + text-align:center; + /* border:1px solid green; */ +} +#layout { + width:1280px; + /* border:1px solid blue; */ +} + +#layout #body{ + padding-left:10px; + /* border:1px solid red; */ +} + +#layout #body nav.header{ + /*content 상단라인*/ + padding-top:40px; + margin-left:30px; + border-bottom:1px solid silver; +} +#layout #body nav.header nav h4.title{ + font-size:26px; + font-weight:bold; +} +#layout #body nav.header nav span.flow{ + color: gray; +} +#layout #body div.footer + /*content 하단라인*/{ + height:20px; + /* border-top:0px; + border-left:1px solid silver; + border-bottom:1px solid silver; + border-right:1px solid silver; + border-radius: 0px 0px 10px 10px; + background-color:white; */ +} + +/* reset */ +html {overflow-y:scroll;} +body,p,h1,h2,h3,h4,h5,h6,ul,ol,li,dl,dt,dd,table,th,td,form,fieldset,legend,input,textarea,button,select,figure,figcaption{margin:0;padding:0} +body,input,textarea,select,button,table{font-family:'Noto Sans KR', helvetica,sans-serif;font-size:16px;letter-spacing:-0.2px;line-height:1.7em;color:#505050;word-break:keep-all; -webkit-text-size-adjust:none;} +img{border:0} +ul,ol{list-style:none} +fieldset{border:none} +fieldset legend {position:absolute;visibility:hidden;overflow:hidden;width:0;height:0;margin:0;padding:0;font:0/0 Arial;} +button{cursor:pointer} +header,hgroup,article,nav,footer,figure,figcaption,canvas,section,time{display:block} +hr {clear:both;display:none;} +li img, dd img {vertical-align:top;} +*html body img {margin:none; padding:none;} /*for IE 6*/ +* {max-height: 1000000px;} + +a{ + color:#5d5d5d; + text-decoration:none; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +a:hover, +a:active{ + color:#000; + text-decoration:none; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +::-webkit-input-placeholder {color:#999;} +:-moz-placeholder {color:#999;} +::-moz-placeholder {color:#999;} +:-ms-input-placeholder {color:#999;} +:placeholder-shown {color:#999;} + +table caption {visibility:hidden; overflow:hidden; width:0; height:0; margin:0; padding:0; font:0/0 Arial;} +input[type="radio"], input[type="checkbox"] {vertical-align:middle !important; margin:-2px 3px 0 0 !important; background:transparent;} +input,select {vertical-align:middle; background:#fff;} + + +/* user class */ +h1,h2,h3,h4,h5,h6,strong,th,.bold{font-weight:500;} +.clear{clear:both;} +.clearfix:after {content:" "; display:block; clear:both;} +.hide {position:absolute;visibility:hidden;overflow:hidden;width:0;height:0;margin:0;padding:0;font:0/0 Arial;} +.pointer {cursor:pointer;} +.input {height:35px; padding:0 0 0 10px; font-size:15px; line-height:33px; border:1px solid #ddd; box-sizing:border-box;} +.textarea {padding:10px; font-size:15px; line-height:33px; border:1px solid #ddd; resize:none; overflow:auto; box-sizing:border-box;} +.select {height:35px; padding:0 0 0 10px; font-size:15px; border:1px solid #ddd; box-sizing:border-box;} + +.mgb2 {margin-bottom:2px !important;} +.mgb3 {margin-bottom:3px !important;} +.mgb4 {margin-bottom:4px !important;} +.mgb5 {margin-bottom:5px !important;} +.mgb6 {margin-bottom:6px !important;} +.mgb7 {margin-bottom:7px !important;} +.mgb8 {margin-bottom:8px !important;} +.mgb9 {margin-bottom:9px !important;} +.mgb10 {margin-bottom:10px !important;} +.mgb15 {margin-bottom:15px !important;} +.mgb20 {margin-bottom:20px !important;} +.mgb25 {margin-bottom:25px !important;} +.mgb30 {margin-bottom:30px !important;} +.mgb35 {margin-bottom:35px !important;} +.mgb40 {margin-bottom:40px !important;} +.mgb45 {margin-bottom:45px !important;} +.mgb50 {margin-bottom:50px !important;} +.mgb60 {margin-bottom:60px !important;} +.mgb70 {margin-bottom:70px !important;} +.mgb75 {margin-bottom:75px !important;} +.mgb90 {margin-bottom:90px !important;} + +.fl {float:left;} +.fr {float:right;} + +.space-center {text-align:center !important;} +.space-right {text-align:right !important;} +.space-left {text-align:left !important;} + +.text-blue {color:#284685} +.text-red {color:#b4260b} +.text-gray {color:#999} +.text-black {color:#000} + + +.line-through {text-decoration:line-through;} + +.main-bnr {width:1200px; position:relative; margin:-120px auto 60px; z-index:12} +.main-bnr ul:after {content:" "; display:block; clear:both;} +.main-bnr ul li {float:left; width:33.333%; height:180px; background-repeat:no-repeat; background-position:40px 50%;} +.main-bnr ul li.bg1 {background-color:#41adde; background-image:url('/images/main/icon1.png');} +.main-bnr ul li.bg2 {background-color:#0280c9; background-image:url('/images/main/icon2.png');} +.main-bnr ul li.bg3 {background-color:#30539f; background-image:url('/images/main/icon3.png');} +.main-bnr ul li .info {padding-left:180px; display:table; height:180px; color:#fff} +.main-bnr ul li .info dl {width:100%; display:table-cell; vertical-align:middle;} +.main-bnr ul li .info dl dt {font-size:18px; line-height:1.7em; font-weight:500; margin-bottom:10px;} +.main-bnr ul li .info dl dd {font-size:15px; line-height:1.7em;} + +.main-bnr2 {width:1200px; position:relative; margin:20px auto 60px; z-index:12;} +.main-bnr2 ul:after {content:" "; display:block; clear:both;} +.main-bnr2 ul li {float:left; width:33.333%; height:180px; background-repeat:no-repeat; background-position:40px 50%;} +.main-bnr2 ul li.bg1 {background-color:#41adde; background-image:url('/images/main/icon1.png');} +.main-bnr2 ul li.bg2 {background-color:#0280c9; background-image:url('/images/main/icon2.png');} +.main-bnr2 ul li.bg3 {background-color:#30539f; background-image:url('/images/main/icon3.png');} +.main-bnr2 ul li .info {padding-left:180px; display:table; width:100%; height:180px; color:#fff;} +.main-bnr2 ul li .info dl {width:100%; display:table-cell; vertical-align:middle;} +.main-bnr2 ul li .info dl dt {font-size:24px; line-height:1.7em; font-weight:500; margin-bottom:10px;} +.main-bnr2 ul li .info dl dd {font-size:15px; line-height:1.7em;} +.main-bnr2 ul li .info dl dd a{color:white;} +.main-bnr2 ul li .info dl dd span{float:right; padding-right:20px;} + +.main-title {text-align:center; margin-bottom:40px;} +.main-title h2 {font-size:28px; line-height:1.6em; font-weight:700; color:#333;} +.main-title p {color:#656565; font-size:17px;line-height:1.6em;} + +.main-price {margin:0 -10px 80px; overflow:hidden;} +.main-price:after{content:"";display:block;clear:both;} +.main-price .col {float:left; width:50%; padding:0 10px; box-sizing:border-box; margin-bottom:20px;} +.main-price .col:nth-child(2n+1) {clear:left;} +.main-table.type2 table thead th {background:#0280c9} +.main-table table {width:100%; border-collapse:collapse; border-spacing:0px;} +.main-table table thead th {padding:9px 10px; height:35px; font-size:22px; font-weight:500; line-height:22px; color:#fff; background:#30539f} +.main-table table tbody th {padding:9px 10px; height:35px; font-size:16px; font-weight:500; line-height:22px; color:#333; border-bottom:1px solid #d6d6d6; background:#eaeef4;} +.main-table table tbody td {padding:9px 20px; color:#2c2c2c; font-size:16px; line-height:22px; border-bottom:1px solid #d6d6d6; background:#f8f8f8} +.main-table table tbody th.none,.main-table table tbody td.none {border-bottom:0} +.main-table .f-back {background-color:#e62b2b; color:#fff; } +.main-table strong {font-weight:500} + +.main-service {background:url('/images/main/bg_bnr.jpg') 50% 0 no-repeat; width:100%; height:330px;} +.main-service .col {float:left; width:50%; height:330px; display:table; text-align:center;} +.main-service .col .link {width:600px; height:330px; display:table-cell; vertical-align:middle; color:#fff;} +.main-service .col .link dl dt {font-size:30px; line-height:1.4em; font-weight:500; margin-bottom:5px;} +.main-service .col .link dl dd {font-size:17px; line-height:1.4em; margin-bottom:20px;} +.main-service .col .link .more {font-size:15px; line-height:1.4em; opacity:.8} +.main-service .col .link .more .arrow {margin:0 3px;position:relative;border: solid #ddd;border-width: 0 2px 2px 0;transform: rotate(-45deg);display: inline-block;padding: 3px;} +.main-service .col a {display:block;} + +.main-notice {background:#f5f5f5; padding:60px 0;} +.main-notice .title {float:left; width:511px; height:276px; color:#fff; background:url('/images/main/bg_notice.gif') 0 0 no-repeat;} +.main-notice .title dl {padding:50px} +.main-notice .title dl dt {font-size:32px; line-height:1.4em; font-weight:500; margin-bottom:5px;} +.main-notice .title dl dd {font-size:16px; line-height:1.4em; color:#cbcfd9;} +.main-notice .list {float:left; width:688px; height:276px; background:#fff; border:1px solid #ddd; border-left:0; box-sizing:border-box;} +.main-notice .list ul {padding:15px 40px 0;} +.main-notice .list ul li {line-height:49px; height:49px; border-bottom:1px solid silver; position:relative;} +.main-notice .list ul li:last-child {border-bottom:0} +.main-notice .list ul li a {display:inline-block; font-size:16px; font-weight:bold; width:500px; height:49px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis; } +.main-notice .list span {position:absolute; top:0; right:0; font-size:14px; color:#959595;} \ No newline at end of file diff --git a/public/css/main/content.css b/public/css/main/content.css new file mode 100644 index 0000000..6c6f850 --- /dev/null +++ b/public/css/main/content.css @@ -0,0 +1,96 @@ +div#content{ + color:black; + padding-top:20px; + padding-left:30px; + margin-bottom:40px; + /* border-left:1px solid silver; + border-right:1px solid silver; */ +} +/* div#content div.top{ + border:1px solid red; +} */ + +/*페이지정보*/ +div#content div.top nav span.pageinfo{ + font-weight:bold; +} +/*검색*/ +div#content div.top nav input[type=text]{ + width:200px; + height:40px; + border-radius:0px !important; + /* border:1px solid red; */ +} +/*검색submit*/ +div#content div.top nav input[type=submit]{ + font-size:12px; + font-weight:bold; + width:80px; + height:40px; + color:white; + border-radius:0px !important; + background-color:#555555; + /* border:1px solid red; */ +} +/*Excel Icon*/ +div#content div.top nav a{ + border-radius:0px !important; + /* border:1px solid red; */ +} + +/* Table 부분 */ +div#content table { + width:100%; + /* overflow-x: auto; + padding-top:5px; + padding-bottom:5px; */ +} + +/* insert,update,reply,view Form Page 관련 전용*/ +div#content table.form tbody tr td.label{ + width:10%; + text-align:right; + padding-right:20px; + background-color:#e8ebe9; +} +div#content table.form tbody tr td.column{ + height:27px; + text-align:left; + padding-left:20px; +} +/* insert,update,reply,view Form Page 관련 전용*/ + +/* 상품 리스트 전용 */ +div#content table.product tr:first-child { + border-top:2px solid black; + border-bottom:1px solid silver; +} +/* 상품 리스트 전용 */ + +div#content table thead th{ + white-space: nowrap; + padding-top:15px; + padding-bottom:15px; + font-size: 16px; + font-weight:bold; + border-top:2px solid black; + border-bottom:1px solid silver; + background-color:#F5F5F5; + /* border:1px solid silver; */ +} + +div#content div.bottom { + padding-top:15px; + text-align:center; +} +div#content div.bottom ul.pagination { + margin-top:20px; +} +div#content div.bottom ul.pagination li.page-item a{ + border:0px; + border-radius:0px !important; + background-color:#e8ebe9; +} +div#content div.bottom ul.pagination li.active a{ + background-color:gray; +} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..8b0ccdd --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,33 @@ +/* ------------------------------------------------------------ + * Name : admin.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ +@charset "utf-8"; + +body { + background-color: white; +} + +/* user class */ +h1,h2,h3,h4,h5,h6,strong,th,.bold{font-weight:500;} + +input[type=text],input[type=password]{ + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} +select,textarea,button { + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} +a:link { text-decoration: none; } +a:visited { text-decoration: none; } +a:hover { text-decoration: underline; } +a:active { text-decoration: underline; } \ No newline at end of file diff --git a/public/js/admin.js b/public/js/admin.js new file mode 100644 index 0000000..ec32e90 --- /dev/null +++ b/public/js/admin.js @@ -0,0 +1,104 @@ +/* ------------------------------------------------------------ + * Name : admin.js + * Desc : Admin Javascrip + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ +function trim(str){ + return this.replace(/(^\s*)|(\s*$)/gi, ""); +} + +//오른쪽에 위 화살표 방향버튼용 +/*$(document).ready(function(){ + $('body').append('
'); + $("#toTop").bind("click", function () {$("body").animate({ scrollTop: 0 }, 200);}); + $(window).scroll(function () { + if ($(this).scrollTop() != 0) { + $('#toTop').fadeIn(); + } else { + $('#toTop').fadeOut(); + } + }); +}); +//오른쪽에 위 화살표 방향버튼용 +//오른쪽에 아래 화살표 방향버튼용 +$(document).ready(function(){ + $('body').append('
'); + $("#toBottom").bind("click", function () {$("body").animate({ scrollTop: 200000 }, 200);}); + $(window).scroll(function () { + if ($(this).scrollTop() != 0) { + $('#toBottom').fadeIn(); + } else { + $('#toBottom').fadeIn(); + } + }); +});*/ +//오른쪽에 아래 화살표 방향버튼용 + +function is_NumericKey(evt,obj){ + var charCode = (evt.which) ? evt.which : event.keyCode; + switch(charCode){ + case 48://0 + case 49://1 + case 50://2 + case 51://3 + case 52://4 + case 53://5 + case 54://6 + case 55://7 + case 56://8 + case 57://9 + case 96://KeyPad:0 + case 97://KeyPad:1 + case 98://KeyPad:2 + case 99://KeyPad:3 + case 100://KeyPad:4 + case 101://KeyPad:5 + case 102://KeyPad:6 + case 103://KeyPad:7 + case 104://KeyPad:8 + case 105://KeyPad:9 + break; + default: + alert('숫자만 가능합니다['+charCode+']'); + obj.value = obj.value.substring(0,obj.value.length-1); + break; + } +} +function is_NumericType(data){ + if(!data.match(/^[0-9]+$/)){ + throw (new Error('숫자가 아닌값['+data+']이 있습니다')); + } + return true; +}// +function change_CurrencyFormat(obj,currencies){ + //var currencies = document.getElementsByClassName("currency"); + var total_currency = 0; + for(i=0; i { alert("복사가 완료되었습니다."); }) + .catch(err => { console.log('복사가 오류', err); }) +} \ No newline at end of file diff --git a/public/js/admin/side_menu.js b/public/js/admin/side_menu.js new file mode 100644 index 0000000..a592c6f --- /dev/null +++ b/public/js/admin/side_menu.js @@ -0,0 +1,14 @@ +function sideMenuToggle (menu_id){ + var accordion = $(".accordion")[0]; + alert(accordion.clientWidth); + if (accordion.clientWidth == 0){ + accordion.style.display = "block"; + $("#"+menu_id).css({ "width": '200px' }) + $("#button"+menu_id).html("메뉴닫기"); + } + else { + accordion.style.display = "none"; + $("#"+menu_id).css({"width":'28px'}) + $("#button"+menu_id).html("메뉴열기"); + } +}//toggleMenu \ No newline at end of file diff --git a/public/js/empty.js b/public/js/empty.js new file mode 100644 index 0000000..f973e71 --- /dev/null +++ b/public/js/empty.js @@ -0,0 +1,6 @@ +/* ------------------------------------------------------------ + * Name : front.js + * Desc : Front Javascrip + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ diff --git a/public/js/front.js b/public/js/front.js new file mode 100644 index 0000000..6bea8a4 --- /dev/null +++ b/public/js/front.js @@ -0,0 +1,93 @@ +/* ------------------------------------------------------------ + * Name : front.js + * Desc : Front Javascrip + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + +function trim(str){ + return this.replace(/(^\s*)|(\s*$)/gi, ""); +}// + +function bookmarksite(title,url) { + if (window.sidebar) // firefox + window.sidebar.addPanel(title, url, ""); + else if(window.opera && window.print){ // opera + var elem = document.createElement('a'); + elem.setAttribute('href',url); + elem.setAttribute('title',title); + elem.setAttribute('rel','sidebar'); + elem.click(); + } + else if(document.all) // ie + window.external.AddFavorite(url, title); +}// + +function captcha_refresh(refresh_url) { + $.ajax({ + type: 'POST', + url: refresh_url, + success: function(data, status, xhr){ + if(data) + $('#captcha_span').html(data); + }, + error: function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR.responseText); + console.log(textStatus+'=>'+errorThrown); + } + });//ajax +}// + +function is_NumericKey(evt,obj){ + var charCode = (evt.which) ? evt.which : event.keyCode; + switch(charCode){ + case 48://0 + case 49://1 + case 50://2 + case 51://3 + case 52://4 + case 53://5 + case 54://6 + case 55://7 + case 56://8 + case 57://9 + case 96://KeyPad:0 + case 97://KeyPad:1 + case 98://KeyPad:2 + case 99://KeyPad:3 + case 100://KeyPad:4 + case 101://KeyPad:5 + case 102://KeyPad:6 + case 103://KeyPad:7 + case 104://KeyPad:8 + case 105://KeyPad:9 + break; + default: + alert('숫자만 가능합니다['+charCode+']'); + obj.value = obj.value.substring(0,obj.value.length-1); + break; + } +} +function is_NumericType(data){ + if(!data.match(/^[0-9]+$/)){ + throw (new Error('숫자가 아닌값['+data+']이 있습니다')); + } + return true; +}// +function change_CurrencyFormat(obj,currencies){ + //var currencies = document.getElementsByClassName("currency"); + var total_currency = 0; + for(i=0; i'+errorThrown); + } + });//ajax +}// + +function is_NumericKey(evt,obj){ + var charCode = (evt.which) ? evt.which : event.keyCode; + switch(charCode){ + case 48://0 + case 49://1 + case 50://2 + case 51://3 + case 52://4 + case 53://5 + case 54://6 + case 55://7 + case 56://8 + case 57://9 + case 96://KeyPad:0 + case 97://KeyPad:1 + case 98://KeyPad:2 + case 99://KeyPad:3 + case 100://KeyPad:4 + case 101://KeyPad:5 + case 102://KeyPad:6 + case 103://KeyPad:7 + case 104://KeyPad:8 + case 105://KeyPad:9 + break; + default: + alert('숫자만 가능합니다['+charCode+']'); + obj.value = obj.value.substring(0,obj.value.length-1); + break; + } +} +function is_NumericType(data){ + if(!data.match(/^[0-9]+$/)){ + throw (new Error('숫자가 아닌값['+data+']이 있습니다')); + } + return true; +}// +function change_CurrencyFormat(obj,currencies){ + //var currencies = document.getElementsByClassName("currency"); + var total_currency = 0; + for(i=0; i new Date() ) + { + expiredays = expiredays - 1; + } + todayDate.setDate( todayDate.getDate() + expiredays ); + document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";" +} \ No newline at end of file diff --git a/writable/excel/index.html b/writable/excel/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/excel/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + +