Automation init...2
This commit is contained in:
parent
1e1fc335de
commit
7dbedfc67d
4
.gitignore
vendored
4
.gitignore
vendored
@ -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
|
||||
@ -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") ?: '<img src="/images/auth/google_login_button.png"/>',
|
||||
'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" => '<img src="/images/common/top_skype.png" alt="스카이프">',
|
||||
"id" => ''
|
||||
],
|
||||
"discord" => [
|
||||
"url" => "https://discord.gg/k6nQg84N",
|
||||
"icon" => '<img src="/images/common/discord.png" alt="디스코드">',
|
||||
"id" => ''
|
||||
],
|
||||
"telegram" => [
|
||||
"url" => "https://t.me/daemonidc",
|
||||
"icon" => '<img src="/images/common/telegram.png" alt="텔레그램">',
|
||||
"id" => '@daemonidc'
|
||||
],
|
||||
"kakaotalk" => [
|
||||
"url" => "https://t.me/daemonidc",
|
||||
"icon" => '<img src="/images/common/kakaotalk.png" alt="카카오톡">',
|
||||
"id" => ''
|
||||
]
|
||||
]);
|
||||
|
||||
//아이콘 및 Sound관련
|
||||
define('ICONS', [
|
||||
'LOGO' => '<img src="/images/logo/android-icon-48x48.png">',
|
||||
'LOGIN' => '<i class="bi bi-shield-check"></i>',
|
||||
'LOGOUT' => '<i class="bi bi-sign-stop-fill"></i>',
|
||||
'LOCK' => '<i class="bi bi-shield-lock"></i>',
|
||||
'NEW' => '<i class="bi bi-database-add"></i>',
|
||||
'REPLY' => '<i class="bi bi-arrow-return-right"></i>',
|
||||
'DELETE' => '<i class="bi bi-trash"></i>',
|
||||
'RELOAD' => '<i class="bi bi-repeat"></i>',
|
||||
'SETUP' => '<i class="bi bi-gear"></i>',
|
||||
'FLAG' => '<i class="bi bi-send"></i>',
|
||||
'SEARCH' => '<i class="bi bi-search"></i>',
|
||||
'EXCEL' => '<img src="/images/common/excel.png"/>',
|
||||
'HOME' => '<i class="bi bi-house-door-fill"></i>',
|
||||
'PLAY' => '<i class="bi bi-play-fill"></i>',
|
||||
'CART' => '<i class="bi bi-cart4"></i>',
|
||||
'CARD' => '<i class="bi bi-credit-card"></i>',
|
||||
'DEPOSIT' => '<i class="bi bi-cash-coin"></i>',
|
||||
'UP' => '<i class="bi bi-arrow-up"></i>',
|
||||
'DOWN' => '<i class="bi bi-arrow-down"></i>',
|
||||
'LEFT' => '<i class="bi bi-arrow-left"></i>',
|
||||
'RIGHT' => '<i class="bi bi-arrow-right"></i>',
|
||||
'IMAGE_FILE' => '<i class="bi bi-file-earmark-image"></i>',
|
||||
'GOOGLE' => '<i class="fa-brands fa-google"></i>',
|
||||
]);
|
||||
|
||||
define('TOP_BANNER', [
|
||||
'default' => '<img src="/images/banner/sub_visual1.jpg"/>',
|
||||
'aboutus' => '<img src="/images/banner/sub_visual1.jpg"/>',
|
||||
'member' => '<img src="/images/banner/sub_visual1.jpg"/>',
|
||||
'hosting' => '<img src="/images/banner/sub_visual2.jpg"/>',
|
||||
'serverdevice' => '<img src="/images/banner/sub_visual3.jpg"/>',
|
||||
'service' => '<img src="/images/banner/sub_visual3.jpg"/>',
|
||||
'support' => '<img src="/images/banner/sub_visual4.jpg"/>',
|
||||
]);
|
||||
|
||||
define('AUDIOS', [
|
||||
'Alram_GetEmail' => '<object width=0 height=0 data="/sound/jarvis_email.mp3" type="audio/mpeg"></object>',
|
||||
]);
|
||||
|
||||
define('KEYWORD', '일본IDC 일본서버 일본 서버 일본호스팅 서버호스팅 디도스 공격 해외 호스팅 DDOS 방어 ddos 의뢰 디도스 보안 일본 단독서버 가상서버');
|
||||
define('LAYOUTS', [
|
||||
'empty' => [
|
||||
'path' => 'layouts' . DIRECTORY_SEPARATOR . 'empty',
|
||||
'stylesheets' => [
|
||||
'<link rel="icon" href="/favicon.ico">',
|
||||
'<link href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">',
|
||||
'<link rel="stylesheet" href="/css/style.css" />',
|
||||
],
|
||||
'javascripts' => [
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>',
|
||||
]
|
||||
],
|
||||
'front' => [
|
||||
'title' => KEYWORD,
|
||||
'path' => 'layouts' . DIRECTORY_SEPARATOR . 'front',
|
||||
//'topmenus' => ['aboutus', 'hosting', 'serverdevice', 'service', 'support'],
|
||||
'topmenus' => ['aboutus', 'hosting', 'service', 'support'],
|
||||
'metas' => [
|
||||
'<meta charset="utf-8">',
|
||||
'<meta http-equiv="X-UA-Compatible" content="IE=Edge">',
|
||||
'<meta name="viewport" id="viewport" content="width=1280">',
|
||||
'<meta name="subject" content="Daemon IDC">',
|
||||
'<meta name="description" content="' . KEYWORD . '">',
|
||||
'<meta name="keywords" content="' . KEYWORD . '">',
|
||||
'<meta property="og:type" content="website">',
|
||||
'<meta property="og:title" content="Daemon IDC">',
|
||||
'<meta property="og:description" content="' . KEYWORD . '">',
|
||||
],
|
||||
'stylesheets' => [
|
||||
'<link rel="canonical" href="https://daemonidc.com/" />',
|
||||
'<link rel="icon" href="/favicon.ico">',
|
||||
'<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">',
|
||||
'<link href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">',
|
||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">',
|
||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />',
|
||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css" />',
|
||||
'<link rel="stylesheet" href="/css/style.css" />',
|
||||
],
|
||||
'javascripts' => [
|
||||
'<script src="//cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>',
|
||||
'<script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>',
|
||||
'<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>',
|
||||
'<script src="/vendors/tinymce/tinymce/tinymce.js" referrerpolicy="origin"></script>',
|
||||
],
|
||||
],
|
||||
'admin' => [
|
||||
'title' => '관리자화면',
|
||||
'path' => 'layouts' . DIRECTORY_SEPARATOR . 'admin',
|
||||
'stylesheets' => [
|
||||
'<link rel="icon" href="/favicon.ico">',
|
||||
'<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">',
|
||||
'<link href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">',
|
||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">',
|
||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />',
|
||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css" />',
|
||||
'<link rel="stylesheet" href="/css/style.css" />',
|
||||
],
|
||||
'javascripts' => [
|
||||
'<script src="//cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>',
|
||||
'<script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>',
|
||||
'<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>',
|
||||
'<script src="/vendors/tinymce/tinymce/tinymce.js" referrerpolicy="origin"></script>',
|
||||
]
|
||||
],
|
||||
]);
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
49
app/Entities/SNSUserEntity.php
Normal file
49
app/Entities/SNSUserEntity.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entities;
|
||||
|
||||
use App\Entities\CommonEntity;
|
||||
|
||||
class SNSUserEntity extends CommonEntity
|
||||
{
|
||||
public function __toString(): string
|
||||
{
|
||||
return "{$this->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;
|
||||
}
|
||||
}
|
||||
49
app/Entities/UserEntity.php
Normal file
49
app/Entities/UserEntity.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entities;
|
||||
|
||||
use App\Entities\CommonEntity;
|
||||
|
||||
class UserEntity extends CommonEntity
|
||||
{
|
||||
public function __toString(): string
|
||||
{
|
||||
return "{$this->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;
|
||||
}
|
||||
}
|
||||
58
app/Libraries/Auth/AuthLibrary.php
Normal file
58
app/Libraries/Auth/AuthLibrary.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries\Adapter\Auth;
|
||||
|
||||
use App\Entities\UserEntity;
|
||||
use App\Models\UserModel;
|
||||
use App\Models\SNSUserModel;
|
||||
|
||||
// 참고:https://github.com/SyntaxPhoenix/iloclient
|
||||
abstract class AuthLibrary
|
||||
{
|
||||
private $_userModel = null;
|
||||
private $_snsUserModel = null;
|
||||
protected $_session = null;
|
||||
protected function __construct()
|
||||
{
|
||||
$this->_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;
|
||||
}
|
||||
}
|
||||
111
app/Libraries/Auth/GoogleLibrary.php
Normal file
111
app/Libraries/Auth/GoogleLibrary.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries\Auth;
|
||||
|
||||
use App\Entities\SNSUserEntity;
|
||||
use App\Entities\UserEntity;
|
||||
use App\Libraries\Adapter\Auth\AuthLibrary;
|
||||
use App\Libraries\MySocket\GoogleLibrary as MySocketLibrary;
|
||||
|
||||
class GoogleLibrary extends AuthLibrary
|
||||
{
|
||||
private $_mySocket = null;
|
||||
private $_site = "GOOGLE";
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function getMySocket(): MySocketLibrary
|
||||
{
|
||||
if ($this->_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("관리자에게 문의하시기 바랍니다.<BR>{$e->getMessage()}");
|
||||
// }
|
||||
}
|
||||
}
|
||||
34
app/Libraries/Auth/LocalLibrary.php
Normal file
34
app/Libraries/Auth/LocalLibrary.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries\Auth;
|
||||
|
||||
use App\Entities\UserEntity;
|
||||
use App\Libraries\Adapter\Auth\AuthLibrary;
|
||||
|
||||
class LocalLibrary extends AuthLibrary
|
||||
{
|
||||
public function __construct(string $site, $debug = false)
|
||||
{
|
||||
parent::__construct($site, $debug);
|
||||
}
|
||||
|
||||
public function getAuthButton()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
public function execute(): UserEntity
|
||||
{
|
||||
return new UserEntity();
|
||||
// $formDatas = $this->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);;
|
||||
}
|
||||
}
|
||||
59
app/Libraries/MySocket/GoogleLibrary.php
Normal file
59
app/Libraries/MySocket/GoogleLibrary.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries\MySocket;
|
||||
|
||||
class GoogleLibrary extends WebLibrary
|
||||
{
|
||||
private $_client = null;
|
||||
private $_session = null;
|
||||
private $_access_code = "";
|
||||
public function __construct(string $host)
|
||||
{
|
||||
parent::__construct($host);
|
||||
$this->_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"));
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -33,8 +33,8 @@ class FileLibrary extends MyStorageLibrary
|
||||
case "video":
|
||||
$mediaTag = sprintf(
|
||||
"<video alt=\"%s\" controls autoplay>
|
||||
<source src=\"/%s/%s/%s\" type=\"%s\">
|
||||
Your browser does not support the video tag.
|
||||
<source src=\"/%s/%s/%s\" type=\"%s\">
|
||||
Your browser does not support the video tag.
|
||||
</video>",
|
||||
$entity->getTitle(),
|
||||
$this->getUploadPath(),
|
||||
|
||||
74
app/Models/SNSUserModel.php
Normal file
74
app/Models/SNSUserModel.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Entities\SNSUSerEntity;
|
||||
use App\Models\CommonModel;
|
||||
|
||||
class SNSUserModel extends CommonModel
|
||||
{
|
||||
protected $table = 'sns_users';
|
||||
protected $primaryKey = 'uid';
|
||||
protected $returnType = SNSUSerEntity::class;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$fields = ["id", "passwd", "name", "email", "level", "point", "status"];
|
||||
parent::__construct($fields);
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
return 'name';
|
||||
}
|
||||
public function getFieldRule(string $field, array $rules): array
|
||||
{
|
||||
switch ($field) {
|
||||
case "id":
|
||||
case "passwd":
|
||||
case $this->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);
|
||||
}
|
||||
}
|
||||
74
app/Models/UserModel.php
Normal file
74
app/Models/UserModel.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Entities\UserEntity;
|
||||
use App\Models\CommonModel;
|
||||
|
||||
class UserModel extends CommonModel
|
||||
{
|
||||
protected $table = 'users';
|
||||
protected $primaryKey = 'uid';
|
||||
protected $returnType = UserEntity::class;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$fields = ["id", "passwd", "name", "email", "level", "point", "status"];
|
||||
parent::__construct($fields);
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
return 'name';
|
||||
}
|
||||
public function getFieldRule(string $field, array $rules): array
|
||||
{
|
||||
switch ($field) {
|
||||
case "id":
|
||||
case "passwd":
|
||||
case $this->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);
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
53
public/css/admin.css
Normal file
53
public/css/admin.css
Normal file
@ -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; */
|
||||
}
|
||||
95
public/css/admin/content.css
Normal file
95
public/css/admin/content.css
Normal file
@ -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;
|
||||
}
|
||||
20
public/css/admin/left_menu.css
Normal file
20
public/css/admin/left_menu.css
Normal file
@ -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;
|
||||
}
|
||||
17
public/css/admin/member_link.css
Normal file
17
public/css/admin/member_link.css
Normal file
@ -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;
|
||||
}
|
||||
29
public/css/common/copyright.css
Normal file
29
public/css/common/copyright.css
Normal file
@ -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;
|
||||
}
|
||||
60
public/css/common/left_menu.css
Normal file
60
public/css/common/left_menu.css
Normal file
@ -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;
|
||||
}
|
||||
46
public/css/common/login.css
Normal file
46
public/css/common/login.css
Normal file
@ -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');
|
||||
} */
|
||||
50
public/css/common/login_v1.css
Normal file
50
public/css/common/login_v1.css
Normal file
@ -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');
|
||||
} */
|
||||
74
public/css/common/top_menu.css
Normal file
74
public/css/common/top_menu.css
Normal file
@ -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;
|
||||
}
|
||||
24
public/css/common/top_navigator.css
Normal file
24
public/css/common/top_navigator.css
Normal file
@ -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;
|
||||
}
|
||||
14
public/css/empty.css
Normal file
14
public/css/empty.css
Normal file
@ -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;
|
||||
}
|
||||
54
public/css/front.css
Normal file
54
public/css/front.css
Normal file
@ -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; */
|
||||
}
|
||||
18
public/css/front/billing.css
Normal file
18
public/css/front/billing.css
Normal file
@ -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%;
|
||||
}
|
||||
96
public/css/front/content.css
Normal file
96
public/css/front/content.css
Normal file
@ -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;
|
||||
}
|
||||
50
public/css/front/order.css
Normal file
50
public/css/front/order.css
Normal file
@ -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;
|
||||
}
|
||||
69
public/css/front/sitepage.css
Normal file
69
public/css/front/sitepage.css
Normal file
@ -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;}
|
||||
*/
|
||||
209
public/css/main.css
Normal file
209
public/css/main.css
Normal file
@ -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;}
|
||||
96
public/css/main/content.css
Normal file
96
public/css/main/content.css
Normal file
@ -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;
|
||||
}
|
||||
33
public/css/style.css
Normal file
33
public/css/style.css
Normal file
@ -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; }
|
||||
104
public/js/admin.js
Normal file
104
public/js/admin.js
Normal file
@ -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('<div id="toTop"><i class="fa fa-angle-double-up fa-4x"></i></div>');
|
||||
$("#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('<div id="toBottom"><i class="fa fa-angle-double-down fa-4x"></i></div>');
|
||||
$("#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<currencies.length; i+2){
|
||||
try {
|
||||
is_NumericType(currencies[i].value)//값이 숫자형식인지 판단
|
||||
} catch(err) {
|
||||
alert(err.message);
|
||||
currencies[i].focus();
|
||||
return false;
|
||||
}
|
||||
total_currency += parseInt(currencies[i].value);
|
||||
currencies[i].parentElement.innerHTML=currencies[i].value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")+'원';
|
||||
}
|
||||
obj.parentElement.innerHTML=total_currency.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")+'원'
|
||||
return true;
|
||||
}
|
||||
|
||||
//해당하는 클래스의 내용을 메모리에 Copy
|
||||
async function getElementsByClassNameCopyToClipboard(className)
|
||||
{
|
||||
var x = document.getElementsByClassName(className);
|
||||
var textToCopy = '';
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
textToCopy += x[i].textContent+'\n';
|
||||
}
|
||||
|
||||
await navigator.clipboard.writeText(textToCopy)
|
||||
.then(() => { alert("복사가 완료되었습니다."); })
|
||||
.catch(err => { console.log('복사가 오류', err); })
|
||||
}
|
||||
14
public/js/admin/side_menu.js
Normal file
14
public/js/admin/side_menu.js
Normal file
@ -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
|
||||
6
public/js/empty.js
Normal file
6
public/js/empty.js
Normal file
@ -0,0 +1,6 @@
|
||||
/* ------------------------------------------------------------
|
||||
* Name : front.js
|
||||
* Desc : Front Javascrip
|
||||
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
|
||||
* Updated :
|
||||
------------------------------------------------------------ */
|
||||
93
public/js/front.js
Normal file
93
public/js/front.js
Normal file
@ -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<currencies.length; i+2){
|
||||
try {
|
||||
is_NumericType(currencies[i].value)//값이 숫자형식인지 판단
|
||||
} catch(err) {
|
||||
alert(err.message);
|
||||
currencies[i].focus();
|
||||
return false;
|
||||
}
|
||||
total_currency += parseInt(currencies[i].value);
|
||||
currencies[i].parentElement.innerHTML=currencies[i].value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")+'원';
|
||||
}
|
||||
obj.parentElement.innerHTML=total_currency.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")+'원'
|
||||
return true;
|
||||
}
|
||||
93
public/js/main.js
Normal file
93
public/js/main.js
Normal file
@ -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<currencies.length; i+2){
|
||||
try {
|
||||
is_NumericType(currencies[i].value)//값이 숫자형식인지 판단
|
||||
} catch(err) {
|
||||
alert(err.message);
|
||||
currencies[i].focus();
|
||||
return false;
|
||||
}
|
||||
total_currency += parseInt(currencies[i].value);
|
||||
currencies[i].parentElement.innerHTML=currencies[i].value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")+'원';
|
||||
}
|
||||
obj.parentElement.innerHTML=total_currency.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")+'원'
|
||||
return true;
|
||||
}
|
||||
54
public/js/popup.js
Normal file
54
public/js/popup.js
Normal file
@ -0,0 +1,54 @@
|
||||
function openWin( winName ) {
|
||||
var blnCookie = getCookie( winName );
|
||||
var obj = eval( "window." + winName );
|
||||
if( !blnCookie ) {
|
||||
obj.style.display = "block";
|
||||
}
|
||||
}
|
||||
|
||||
function closeWin(winName, expiredays) {
|
||||
setCookie( winName, "done" , expiredays);
|
||||
var obj = eval( "window." + winName );
|
||||
obj.style.display = "none";
|
||||
}
|
||||
function closeWinAt00(winName, expiredays) {
|
||||
setCookieAt00( winName, "done" , expiredays);
|
||||
var obj = eval( "window." + winName );
|
||||
obj.style.display = "none";
|
||||
}
|
||||
|
||||
function getCookie( name ) {
|
||||
var nameOfCookie = name + "=";
|
||||
var x = 0;
|
||||
while ( x <= document.cookie.length )
|
||||
{
|
||||
var y = (x+nameOfCookie.length);
|
||||
if ( document.cookie.substring( x, y ) == nameOfCookie ) {
|
||||
if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 )
|
||||
endOfCookie = document.cookie.length;
|
||||
return unescape( document.cookie.substring( y, endOfCookie ) );
|
||||
}
|
||||
x = document.cookie.indexOf( " ", x ) + 1;
|
||||
if ( x == 0 )
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
function setCookie( name, value, expiredays ) {
|
||||
var todayDate = new Date();
|
||||
todayDate.setDate( todayDate.getDate() + expiredays );
|
||||
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
|
||||
}
|
||||
|
||||
function setCookieAt00( name, value, expiredays ) {
|
||||
var todayDate = new Date();
|
||||
todayDate = new Date(parseInt(todayDate.getTime() / 86400000) * 86400000 + 54000000);
|
||||
if ( todayDate > new Date() )
|
||||
{
|
||||
expiredays = expiredays - 1;
|
||||
}
|
||||
todayDate.setDate( todayDate.getDate() + expiredays );
|
||||
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
|
||||
}
|
||||
11
writable/excel/index.html
Normal file
11
writable/excel/index.html
Normal file
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user