├── .DS_Store ├── README.md ├── assets ├── css │ ├── AdminLTE.css │ ├── AdminLTE.min.css │ ├── bootstrap.min.css │ ├── font-awesome.min.css │ ├── ionicons.min.css │ └── skins │ │ ├── _all-skins.css │ │ ├── _all-skins.min.css │ │ ├── skin-black-light.css │ │ ├── skin-black-light.min.css │ │ ├── skin-black.css │ │ ├── skin-black.min.css │ │ ├── skin-blue-light.css │ │ ├── skin-blue-light.min.css │ │ ├── skin-blue.css │ │ ├── skin-blue.min.css │ │ ├── skin-green-light.css │ │ ├── skin-green-light.min.css │ │ ├── skin-green.css │ │ ├── skin-green.min.css │ │ ├── skin-purple-light.css │ │ ├── skin-purple-light.min.css │ │ ├── skin-purple.css │ │ ├── skin-purple.min.css │ │ ├── skin-red-light.css │ │ ├── skin-red-light.min.css │ │ ├── skin-red.css │ │ ├── skin-red.min.css │ │ ├── skin-yellow-light.css │ │ ├── skin-yellow-light.min.css │ │ ├── skin-yellow.css │ │ └── skin-yellow.min.css ├── img │ ├── avatar.png │ ├── avatar04.png │ ├── avatar2.png │ ├── avatar3.png │ ├── avatar5.png │ ├── boxed-bg.jpg │ ├── boxed-bg.png │ ├── credit │ │ ├── american-express.png │ │ ├── cirrus.png │ │ ├── mastercard.png │ │ ├── mestro.png │ │ ├── paypal.png │ │ ├── paypal2.png │ │ └── visa.png │ ├── default-50x50.gif │ ├── icons.png │ ├── photo1.png │ ├── photo2.png │ ├── photo3.jpg │ ├── photo4.jpg │ ├── user1-128x128.jpg │ ├── user2-160x160.jpg │ ├── user3-128x128.jpg │ ├── user4-128x128.jpg │ ├── user5-128x128.jpg │ ├── user6-128x128.jpg │ ├── user7-128x128.jpg │ └── user8-128x128.jpg └── js │ ├── app.js │ ├── app.min.js │ ├── bootstrap.min.js │ ├── demo.js │ ├── jquery-1.10.2.min.js │ └── pages │ ├── dashboard.js │ └── dashboard2.js ├── composer.json ├── composer.lock └── src ├── Admin ├── Action.php ├── AdminController.php ├── AdminServiceProvider.php ├── AuthController.php ├── Blueprint.php ├── Controller.php ├── Controllers │ ├── RoleController.php │ └── UserController.php ├── Field.php ├── Middleware.php ├── Migrate.php ├── MigrationCreator.php ├── Model.php ├── Models │ ├── Menu.php │ ├── Permission.php │ ├── Role.php │ └── User.php ├── Mundle.php ├── Relation.php └── Route.php ├── commands ├── CreateAdminUserCommand.php ├── MenuCommand.php ├── MigrateCommand.php ├── PermissionCommand.php └── SetupCommand.php ├── migrations └── 2016_06_15_000000_create_users_table.php ├── stubs ├── column.stub └── migration.stub └── views ├── add.blade.php ├── edit.blade.php ├── header.blade.php ├── layout.blade.php ├── list.blade.php └── login.blade.php /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/.DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # awesome-admin 2 | A admin framework of laravel 3 | 4 | [中文版README](https://github.com/friparia/awesome-admin/blob/master/README.chs.md) 5 | 6 | ## Feature 7 | 8 | * Auto generated migrations 9 | * Auto generated admin control panel 10 | * Clearly written model actions 11 | * One action can use in restful api and admin control panel 12 | * Role based permission control included 13 | * Absolutely compatible with Laravel and your previous codes or project 14 | 15 | ## Requirement 16 | 17 | * Laravel 5 18 | 19 | ## Installation 20 | 21 | First, add a line in the section of `require` in `composer.json` file: 22 | 23 | "friparia/admin": "dev-master" 24 | 25 | and run `composer install`, or, you can execute the following command: 26 | 27 | composer require "friparia/admin:dev-master" 28 | 29 | Then, add a line of service provider in `config/app.php`: 30 | 31 | Friparia\Admin\AdminServiceProvider::class, 32 | 33 | In public directory run: 34 | 35 | bower install admin-lte 36 | 37 | -------------------------------------------------------------------------------- /assets/css/skins/skin-black-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Black 3 | * ----------- 4 | */ 5 | /* skin-black navbar */ 6 | .skin-black-light .main-header { 7 | -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); 8 | box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); 9 | } 10 | .skin-black-light .main-header .navbar-toggle { 11 | color: #333; 12 | } 13 | .skin-black-light .main-header .navbar-brand { 14 | color: #333; 15 | border-right: 1px solid #eee; 16 | } 17 | .skin-black-light .main-header > .navbar { 18 | background-color: #ffffff; 19 | } 20 | .skin-black-light .main-header > .navbar .nav > li > a { 21 | color: #333333; 22 | } 23 | .skin-black-light .main-header > .navbar .nav > li > a:hover, 24 | .skin-black-light .main-header > .navbar .nav > li > a:active, 25 | .skin-black-light .main-header > .navbar .nav > li > a:focus, 26 | .skin-black-light .main-header > .navbar .nav .open > a, 27 | .skin-black-light .main-header > .navbar .nav .open > a:hover, 28 | .skin-black-light .main-header > .navbar .nav .open > a:focus, 29 | .skin-black-light .main-header > .navbar .nav > .active > a { 30 | background: #ffffff; 31 | color: #999999; 32 | } 33 | .skin-black-light .main-header > .navbar .sidebar-toggle { 34 | color: #333333; 35 | } 36 | .skin-black-light .main-header > .navbar .sidebar-toggle:hover { 37 | color: #999999; 38 | background: #ffffff; 39 | } 40 | .skin-black-light .main-header > .navbar > .sidebar-toggle { 41 | color: #333; 42 | border-right: 1px solid #eee; 43 | } 44 | .skin-black-light .main-header > .navbar .navbar-nav > li > a { 45 | border-right: 1px solid #eee; 46 | } 47 | .skin-black-light .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a, 48 | .skin-black-light .main-header > .navbar .navbar-right > li > a { 49 | border-left: 1px solid #eee; 50 | border-right-width: 0; 51 | } 52 | .skin-black-light .main-header > .logo { 53 | background-color: #ffffff; 54 | color: #333333; 55 | border-bottom: 0 solid transparent; 56 | border-right: 1px solid #eee; 57 | } 58 | .skin-black-light .main-header > .logo:hover { 59 | background-color: #fcfcfc; 60 | } 61 | @media (max-width: 767px) { 62 | .skin-black-light .main-header > .logo { 63 | background-color: #222222; 64 | color: #ffffff; 65 | border-bottom: 0 solid transparent; 66 | border-right: none; 67 | } 68 | .skin-black-light .main-header > .logo:hover { 69 | background-color: #1f1f1f; 70 | } 71 | } 72 | .skin-black-light .main-header li.user-header { 73 | background-color: #222; 74 | } 75 | .skin-black-light .content-header { 76 | background: transparent; 77 | box-shadow: none; 78 | } 79 | .skin-black-light .wrapper, 80 | .skin-black-light .main-sidebar, 81 | .skin-black-light .left-side { 82 | background-color: #f9fafc; 83 | } 84 | .skin-black-light .content-wrapper, 85 | .skin-black-light .main-footer { 86 | border-left: 1px solid #d2d6de; 87 | } 88 | .skin-black-light .user-panel > .info, 89 | .skin-black-light .user-panel > .info > a { 90 | color: #444444; 91 | } 92 | .skin-black-light .sidebar-menu > li { 93 | -webkit-transition: border-left-color 0.3s ease; 94 | -o-transition: border-left-color 0.3s ease; 95 | transition: border-left-color 0.3s ease; 96 | } 97 | .skin-black-light .sidebar-menu > li.header { 98 | color: #848484; 99 | background: #f9fafc; 100 | } 101 | .skin-black-light .sidebar-menu > li > a { 102 | border-left: 3px solid transparent; 103 | font-weight: 600; 104 | } 105 | .skin-black-light .sidebar-menu > li:hover > a, 106 | .skin-black-light .sidebar-menu > li.active > a { 107 | color: #000000; 108 | background: #f4f4f5; 109 | } 110 | .skin-black-light .sidebar-menu > li.active { 111 | border-left-color: #ffffff; 112 | } 113 | .skin-black-light .sidebar-menu > li.active > a { 114 | font-weight: 600; 115 | } 116 | .skin-black-light .sidebar-menu > li > .treeview-menu { 117 | background: #f4f4f5; 118 | } 119 | .skin-black-light .sidebar a { 120 | color: #444444; 121 | } 122 | .skin-black-light .sidebar a:hover { 123 | text-decoration: none; 124 | } 125 | .skin-black-light .treeview-menu > li > a { 126 | color: #777777; 127 | } 128 | .skin-black-light .treeview-menu > li.active > a, 129 | .skin-black-light .treeview-menu > li > a:hover { 130 | color: #000000; 131 | } 132 | .skin-black-light .treeview-menu > li.active > a { 133 | font-weight: 600; 134 | } 135 | .skin-black-light .sidebar-form { 136 | border-radius: 3px; 137 | border: 1px solid #d2d6de; 138 | margin: 10px 10px; 139 | } 140 | .skin-black-light .sidebar-form input[type="text"], 141 | .skin-black-light .sidebar-form .btn { 142 | box-shadow: none; 143 | background-color: #fff; 144 | border: 1px solid transparent; 145 | height: 35px; 146 | -webkit-transition: all 0.3s ease-in-out; 147 | -o-transition: all 0.3s ease-in-out; 148 | transition: all 0.3s ease-in-out; 149 | } 150 | .skin-black-light .sidebar-form input[type="text"] { 151 | color: #666; 152 | border-top-left-radius: 2px; 153 | border-top-right-radius: 0; 154 | border-bottom-right-radius: 0; 155 | border-bottom-left-radius: 2px; 156 | } 157 | .skin-black-light .sidebar-form input[type="text"]:focus, 158 | .skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 159 | background-color: #fff; 160 | color: #666; 161 | } 162 | .skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 163 | border-left-color: #fff; 164 | } 165 | .skin-black-light .sidebar-form .btn { 166 | color: #999; 167 | border-top-left-radius: 0; 168 | border-top-right-radius: 2px; 169 | border-bottom-right-radius: 2px; 170 | border-bottom-left-radius: 0; 171 | } 172 | @media (min-width: 768px) { 173 | .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { 174 | border-left: 1px solid #d2d6de; 175 | } 176 | } 177 | -------------------------------------------------------------------------------- /assets/css/skins/skin-black-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar{background-color:#fff}.skin-black-light .main-header>.navbar .nav>li>a{color:#333}.skin-black-light .main-header>.navbar .nav>li>a:hover,.skin-black-light .main-header>.navbar .nav>li>a:active,.skin-black-light .main-header>.navbar .nav>li>a:focus,.skin-black-light .main-header>.navbar .nav .open>a,.skin-black-light .main-header>.navbar .nav .open>a:hover,.skin-black-light .main-header>.navbar .nav .open>a:focus,.skin-black-light .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header>.navbar .sidebar-toggle{color:#333}.skin-black-light .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .content-wrapper,.skin-black-light .main-footer{border-left:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .treeview-menu>li>a{color:#777}.skin-black-light .treeview-menu>li.active>a,.skin-black-light .treeview-menu>li>a:hover{color:#000}.skin-black-light .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /assets/css/skins/skin-black.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Black 3 | * ----------- 4 | */ 5 | /* skin-black navbar */ 6 | .skin-black .main-header { 7 | -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); 8 | box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); 9 | } 10 | .skin-black .main-header .navbar-toggle { 11 | color: #333; 12 | } 13 | .skin-black .main-header .navbar-brand { 14 | color: #333; 15 | border-right: 1px solid #eee; 16 | } 17 | .skin-black .main-header > .navbar { 18 | background-color: #ffffff; 19 | } 20 | .skin-black .main-header > .navbar .nav > li > a { 21 | color: #333333; 22 | } 23 | .skin-black .main-header > .navbar .nav > li > a:hover, 24 | .skin-black .main-header > .navbar .nav > li > a:active, 25 | .skin-black .main-header > .navbar .nav > li > a:focus, 26 | .skin-black .main-header > .navbar .nav .open > a, 27 | .skin-black .main-header > .navbar .nav .open > a:hover, 28 | .skin-black .main-header > .navbar .nav .open > a:focus, 29 | .skin-black .main-header > .navbar .nav > .active > a { 30 | background: #ffffff; 31 | color: #999999; 32 | } 33 | .skin-black .main-header > .navbar .sidebar-toggle { 34 | color: #333333; 35 | } 36 | .skin-black .main-header > .navbar .sidebar-toggle:hover { 37 | color: #999999; 38 | background: #ffffff; 39 | } 40 | .skin-black .main-header > .navbar > .sidebar-toggle { 41 | color: #333; 42 | border-right: 1px solid #eee; 43 | } 44 | .skin-black .main-header > .navbar .navbar-nav > li > a { 45 | border-right: 1px solid #eee; 46 | } 47 | .skin-black .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a, 48 | .skin-black .main-header > .navbar .navbar-right > li > a { 49 | border-left: 1px solid #eee; 50 | border-right-width: 0; 51 | } 52 | .skin-black .main-header > .logo { 53 | background-color: #ffffff; 54 | color: #333333; 55 | border-bottom: 0 solid transparent; 56 | border-right: 1px solid #eee; 57 | } 58 | .skin-black .main-header > .logo:hover { 59 | background-color: #fcfcfc; 60 | } 61 | @media (max-width: 767px) { 62 | .skin-black .main-header > .logo { 63 | background-color: #222222; 64 | color: #ffffff; 65 | border-bottom: 0 solid transparent; 66 | border-right: none; 67 | } 68 | .skin-black .main-header > .logo:hover { 69 | background-color: #1f1f1f; 70 | } 71 | } 72 | .skin-black .main-header li.user-header { 73 | background-color: #222; 74 | } 75 | .skin-black .content-header { 76 | background: transparent; 77 | box-shadow: none; 78 | } 79 | .skin-black .wrapper, 80 | .skin-black .main-sidebar, 81 | .skin-black .left-side { 82 | background-color: #222d32; 83 | } 84 | .skin-black .user-panel > .info, 85 | .skin-black .user-panel > .info > a { 86 | color: #fff; 87 | } 88 | .skin-black .sidebar-menu > li.header { 89 | color: #4b646f; 90 | background: #1a2226; 91 | } 92 | .skin-black .sidebar-menu > li > a { 93 | border-left: 3px solid transparent; 94 | } 95 | .skin-black .sidebar-menu > li:hover > a, 96 | .skin-black .sidebar-menu > li.active > a { 97 | color: #ffffff; 98 | background: #1e282c; 99 | border-left-color: #ffffff; 100 | } 101 | .skin-black .sidebar-menu > li > .treeview-menu { 102 | margin: 0 1px; 103 | background: #2c3b41; 104 | } 105 | .skin-black .sidebar a { 106 | color: #b8c7ce; 107 | } 108 | .skin-black .sidebar a:hover { 109 | text-decoration: none; 110 | } 111 | .skin-black .treeview-menu > li > a { 112 | color: #8aa4af; 113 | } 114 | .skin-black .treeview-menu > li.active > a, 115 | .skin-black .treeview-menu > li > a:hover { 116 | color: #ffffff; 117 | } 118 | .skin-black .sidebar-form { 119 | border-radius: 3px; 120 | border: 1px solid #374850; 121 | margin: 10px 10px; 122 | } 123 | .skin-black .sidebar-form input[type="text"], 124 | .skin-black .sidebar-form .btn { 125 | box-shadow: none; 126 | background-color: #374850; 127 | border: 1px solid transparent; 128 | height: 35px; 129 | -webkit-transition: all 0.3s ease-in-out; 130 | -o-transition: all 0.3s ease-in-out; 131 | transition: all 0.3s ease-in-out; 132 | } 133 | .skin-black .sidebar-form input[type="text"] { 134 | color: #666; 135 | border-top-left-radius: 2px; 136 | border-top-right-radius: 0; 137 | border-bottom-right-radius: 0; 138 | border-bottom-left-radius: 2px; 139 | } 140 | .skin-black .sidebar-form input[type="text"]:focus, 141 | .skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 142 | background-color: #fff; 143 | color: #666; 144 | } 145 | .skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 146 | border-left-color: #fff; 147 | } 148 | .skin-black .sidebar-form .btn { 149 | color: #999; 150 | border-top-left-radius: 0; 151 | border-top-right-radius: 2px; 152 | border-bottom-right-radius: 2px; 153 | border-bottom-left-radius: 0; 154 | } 155 | .skin-black .pace .pace-progress { 156 | background: #222; 157 | } 158 | .skin-black .pace .pace-activity { 159 | border-top-color: #222; 160 | border-left-color: #222; 161 | } 162 | -------------------------------------------------------------------------------- /assets/css/skins/skin-black.min.css: -------------------------------------------------------------------------------- 1 | .skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar{background-color:#fff}.skin-black .main-header>.navbar .nav>li>a{color:#333}.skin-black .main-header>.navbar .nav>li>a:hover,.skin-black .main-header>.navbar .nav>li>a:active,.skin-black .main-header>.navbar .nav>li>a:focus,.skin-black .main-header>.navbar .nav .open>a,.skin-black .main-header>.navbar .nav .open>a:hover,.skin-black .main-header>.navbar .nav .open>a:focus,.skin-black .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header>.navbar .sidebar-toggle{color:#333}.skin-black .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222} -------------------------------------------------------------------------------- /assets/css/skins/skin-blue-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Blue 3 | * ---------- 4 | */ 5 | .skin-blue-light .main-header .navbar { 6 | background-color: #3c8dbc; 7 | } 8 | .skin-blue-light .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-blue-light .main-header .navbar .nav > li > a:hover, 12 | .skin-blue-light .main-header .navbar .nav > li > a:active, 13 | .skin-blue-light .main-header .navbar .nav > li > a:focus, 14 | .skin-blue-light .main-header .navbar .nav .open > a, 15 | .skin-blue-light .main-header .navbar .nav .open > a:hover, 16 | .skin-blue-light .main-header .navbar .nav .open > a:focus, 17 | .skin-blue-light .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-blue-light .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-blue-light .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-blue-light .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-blue-light .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #367fa9; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-blue-light .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-blue-light .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-blue-light .main-header .navbar .dropdown-menu li a:hover { 42 | background: #367fa9; 43 | } 44 | } 45 | .skin-blue-light .main-header .logo { 46 | background-color: #3c8dbc; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-blue-light .main-header .logo:hover { 51 | background-color: #3b8ab8; 52 | } 53 | .skin-blue-light .main-header li.user-header { 54 | background-color: #3c8dbc; 55 | } 56 | .skin-blue-light .content-header { 57 | background: transparent; 58 | } 59 | .skin-blue-light .wrapper, 60 | .skin-blue-light .main-sidebar, 61 | .skin-blue-light .left-side { 62 | background-color: #f9fafc; 63 | } 64 | .skin-blue-light .content-wrapper, 65 | .skin-blue-light .main-footer { 66 | border-left: 1px solid #d2d6de; 67 | } 68 | .skin-blue-light .user-panel > .info, 69 | .skin-blue-light .user-panel > .info > a { 70 | color: #444444; 71 | } 72 | .skin-blue-light .sidebar-menu > li { 73 | -webkit-transition: border-left-color 0.3s ease; 74 | -o-transition: border-left-color 0.3s ease; 75 | transition: border-left-color 0.3s ease; 76 | } 77 | .skin-blue-light .sidebar-menu > li.header { 78 | color: #848484; 79 | background: #f9fafc; 80 | } 81 | .skin-blue-light .sidebar-menu > li > a { 82 | border-left: 3px solid transparent; 83 | font-weight: 600; 84 | } 85 | .skin-blue-light .sidebar-menu > li:hover > a, 86 | .skin-blue-light .sidebar-menu > li.active > a { 87 | color: #000000; 88 | background: #f4f4f5; 89 | } 90 | .skin-blue-light .sidebar-menu > li.active { 91 | border-left-color: #3c8dbc; 92 | } 93 | .skin-blue-light .sidebar-menu > li.active > a { 94 | font-weight: 600; 95 | } 96 | .skin-blue-light .sidebar-menu > li > .treeview-menu { 97 | background: #f4f4f5; 98 | } 99 | .skin-blue-light .sidebar a { 100 | color: #444444; 101 | } 102 | .skin-blue-light .sidebar a:hover { 103 | text-decoration: none; 104 | } 105 | .skin-blue-light .treeview-menu > li > a { 106 | color: #777777; 107 | } 108 | .skin-blue-light .treeview-menu > li.active > a, 109 | .skin-blue-light .treeview-menu > li > a:hover { 110 | color: #000000; 111 | } 112 | .skin-blue-light .treeview-menu > li.active > a { 113 | font-weight: 600; 114 | } 115 | .skin-blue-light .sidebar-form { 116 | border-radius: 3px; 117 | border: 1px solid #d2d6de; 118 | margin: 10px 10px; 119 | } 120 | .skin-blue-light .sidebar-form input[type="text"], 121 | .skin-blue-light .sidebar-form .btn { 122 | box-shadow: none; 123 | background-color: #fff; 124 | border: 1px solid transparent; 125 | height: 35px; 126 | -webkit-transition: all 0.3s ease-in-out; 127 | -o-transition: all 0.3s ease-in-out; 128 | transition: all 0.3s ease-in-out; 129 | } 130 | .skin-blue-light .sidebar-form input[type="text"] { 131 | color: #666; 132 | border-top-left-radius: 2px; 133 | border-top-right-radius: 0; 134 | border-bottom-right-radius: 0; 135 | border-bottom-left-radius: 2px; 136 | } 137 | .skin-blue-light .sidebar-form input[type="text"]:focus, 138 | .skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 139 | background-color: #fff; 140 | color: #666; 141 | } 142 | .skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 143 | border-left-color: #fff; 144 | } 145 | .skin-blue-light .sidebar-form .btn { 146 | color: #999; 147 | border-top-left-radius: 0; 148 | border-top-right-radius: 2px; 149 | border-bottom-right-radius: 2px; 150 | border-bottom-left-radius: 0; 151 | } 152 | @media (min-width: 768px) { 153 | .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { 154 | border-left: 1px solid #d2d6de; 155 | } 156 | } 157 | .skin-blue-light .main-footer { 158 | border-top-color: #d2d6de; 159 | } 160 | .skin-blue.layout-top-nav .main-header > .logo { 161 | background-color: #3c8dbc; 162 | color: #ffffff; 163 | border-bottom: 0 solid transparent; 164 | } 165 | .skin-blue.layout-top-nav .main-header > .logo:hover { 166 | background-color: #3b8ab8; 167 | } 168 | -------------------------------------------------------------------------------- /assets/css/skins/skin-blue-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .content-wrapper,.skin-blue-light .main-footer{border-left:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .treeview-menu>li>a{color:#777}.skin-blue-light .treeview-menu>li.active>a,.skin-blue-light .treeview-menu>li>a:hover{color:#000}.skin-blue-light .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} -------------------------------------------------------------------------------- /assets/css/skins/skin-blue.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Blue 3 | * ---------- 4 | */ 5 | .skin-blue .main-header .navbar { 6 | background-color: #3c8dbc; 7 | } 8 | .skin-blue .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-blue .main-header .navbar .nav > li > a:hover, 12 | .skin-blue .main-header .navbar .nav > li > a:active, 13 | .skin-blue .main-header .navbar .nav > li > a:focus, 14 | .skin-blue .main-header .navbar .nav .open > a, 15 | .skin-blue .main-header .navbar .nav .open > a:hover, 16 | .skin-blue .main-header .navbar .nav .open > a:focus, 17 | .skin-blue .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-blue .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-blue .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-blue .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-blue .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #367fa9; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-blue .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-blue .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-blue .main-header .navbar .dropdown-menu li a:hover { 42 | background: #367fa9; 43 | } 44 | } 45 | .skin-blue .main-header .logo { 46 | background-color: #367fa9; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-blue .main-header .logo:hover { 51 | background-color: #357ca5; 52 | } 53 | .skin-blue .main-header li.user-header { 54 | background-color: #3c8dbc; 55 | } 56 | .skin-blue .content-header { 57 | background: transparent; 58 | } 59 | .skin-blue .wrapper, 60 | .skin-blue .main-sidebar, 61 | .skin-blue .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-blue .user-panel > .info, 65 | .skin-blue .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-blue .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-blue .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-blue .sidebar-menu > li:hover > a, 76 | .skin-blue .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #3c8dbc; 80 | } 81 | .skin-blue .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-blue .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-blue .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-blue .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-blue .treeview-menu > li.active > a, 95 | .skin-blue .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-blue .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-blue .sidebar-form input[type="text"], 104 | .skin-blue .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | -webkit-transition: all 0.3s ease-in-out; 110 | -o-transition: all 0.3s ease-in-out; 111 | transition: all 0.3s ease-in-out; 112 | } 113 | .skin-blue .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-blue .sidebar-form input[type="text"]:focus, 121 | .skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-blue .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | .skin-blue.layout-top-nav .main-header > .logo { 136 | background-color: #3c8dbc; 137 | color: #ffffff; 138 | border-bottom: 0 solid transparent; 139 | } 140 | .skin-blue.layout-top-nav .main-header > .logo:hover { 141 | background-color: #3b8ab8; 142 | } 143 | -------------------------------------------------------------------------------- /assets/css/skins/skin-blue.min.css: -------------------------------------------------------------------------------- 1 | .skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} -------------------------------------------------------------------------------- /assets/css/skins/skin-green-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Green 3 | * ----------- 4 | */ 5 | .skin-green-light .main-header .navbar { 6 | background-color: #00a65a; 7 | } 8 | .skin-green-light .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-green-light .main-header .navbar .nav > li > a:hover, 12 | .skin-green-light .main-header .navbar .nav > li > a:active, 13 | .skin-green-light .main-header .navbar .nav > li > a:focus, 14 | .skin-green-light .main-header .navbar .nav .open > a, 15 | .skin-green-light .main-header .navbar .nav .open > a:hover, 16 | .skin-green-light .main-header .navbar .nav .open > a:focus, 17 | .skin-green-light .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-green-light .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-green-light .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-green-light .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-green-light .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #008d4c; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-green-light .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-green-light .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-green-light .main-header .navbar .dropdown-menu li a:hover { 42 | background: #008d4c; 43 | } 44 | } 45 | .skin-green-light .main-header .logo { 46 | background-color: #00a65a; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-green-light .main-header .logo:hover { 51 | background-color: #00a157; 52 | } 53 | .skin-green-light .main-header li.user-header { 54 | background-color: #00a65a; 55 | } 56 | .skin-green-light .content-header { 57 | background: transparent; 58 | } 59 | .skin-green-light .wrapper, 60 | .skin-green-light .main-sidebar, 61 | .skin-green-light .left-side { 62 | background-color: #f9fafc; 63 | } 64 | .skin-green-light .content-wrapper, 65 | .skin-green-light .main-footer { 66 | border-left: 1px solid #d2d6de; 67 | } 68 | .skin-green-light .user-panel > .info, 69 | .skin-green-light .user-panel > .info > a { 70 | color: #444444; 71 | } 72 | .skin-green-light .sidebar-menu > li { 73 | -webkit-transition: border-left-color 0.3s ease; 74 | -o-transition: border-left-color 0.3s ease; 75 | transition: border-left-color 0.3s ease; 76 | } 77 | .skin-green-light .sidebar-menu > li.header { 78 | color: #848484; 79 | background: #f9fafc; 80 | } 81 | .skin-green-light .sidebar-menu > li > a { 82 | border-left: 3px solid transparent; 83 | font-weight: 600; 84 | } 85 | .skin-green-light .sidebar-menu > li:hover > a, 86 | .skin-green-light .sidebar-menu > li.active > a { 87 | color: #000000; 88 | background: #f4f4f5; 89 | } 90 | .skin-green-light .sidebar-menu > li.active { 91 | border-left-color: #00a65a; 92 | } 93 | .skin-green-light .sidebar-menu > li.active > a { 94 | font-weight: 600; 95 | } 96 | .skin-green-light .sidebar-menu > li > .treeview-menu { 97 | background: #f4f4f5; 98 | } 99 | .skin-green-light .sidebar a { 100 | color: #444444; 101 | } 102 | .skin-green-light .sidebar a:hover { 103 | text-decoration: none; 104 | } 105 | .skin-green-light .treeview-menu > li > a { 106 | color: #777777; 107 | } 108 | .skin-green-light .treeview-menu > li.active > a, 109 | .skin-green-light .treeview-menu > li > a:hover { 110 | color: #000000; 111 | } 112 | .skin-green-light .treeview-menu > li.active > a { 113 | font-weight: 600; 114 | } 115 | .skin-green-light .sidebar-form { 116 | border-radius: 3px; 117 | border: 1px solid #d2d6de; 118 | margin: 10px 10px; 119 | } 120 | .skin-green-light .sidebar-form input[type="text"], 121 | .skin-green-light .sidebar-form .btn { 122 | box-shadow: none; 123 | background-color: #fff; 124 | border: 1px solid transparent; 125 | height: 35px; 126 | -webkit-transition: all 0.3s ease-in-out; 127 | -o-transition: all 0.3s ease-in-out; 128 | transition: all 0.3s ease-in-out; 129 | } 130 | .skin-green-light .sidebar-form input[type="text"] { 131 | color: #666; 132 | border-top-left-radius: 2px; 133 | border-top-right-radius: 0; 134 | border-bottom-right-radius: 0; 135 | border-bottom-left-radius: 2px; 136 | } 137 | .skin-green-light .sidebar-form input[type="text"]:focus, 138 | .skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 139 | background-color: #fff; 140 | color: #666; 141 | } 142 | .skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 143 | border-left-color: #fff; 144 | } 145 | .skin-green-light .sidebar-form .btn { 146 | color: #999; 147 | border-top-left-radius: 0; 148 | border-top-right-radius: 2px; 149 | border-bottom-right-radius: 2px; 150 | border-bottom-left-radius: 0; 151 | } 152 | @media (min-width: 768px) { 153 | .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { 154 | border-left: 1px solid #d2d6de; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /assets/css/skins/skin-green-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .content-wrapper,.skin-green-light .main-footer{border-left:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .treeview-menu>li>a{color:#777}.skin-green-light .treeview-menu>li.active>a,.skin-green-light .treeview-menu>li>a:hover{color:#000}.skin-green-light .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /assets/css/skins/skin-green.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Green 3 | * ----------- 4 | */ 5 | .skin-green .main-header .navbar { 6 | background-color: #00a65a; 7 | } 8 | .skin-green .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-green .main-header .navbar .nav > li > a:hover, 12 | .skin-green .main-header .navbar .nav > li > a:active, 13 | .skin-green .main-header .navbar .nav > li > a:focus, 14 | .skin-green .main-header .navbar .nav .open > a, 15 | .skin-green .main-header .navbar .nav .open > a:hover, 16 | .skin-green .main-header .navbar .nav .open > a:focus, 17 | .skin-green .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-green .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-green .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-green .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-green .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #008d4c; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-green .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-green .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-green .main-header .navbar .dropdown-menu li a:hover { 42 | background: #008d4c; 43 | } 44 | } 45 | .skin-green .main-header .logo { 46 | background-color: #008d4c; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-green .main-header .logo:hover { 51 | background-color: #008749; 52 | } 53 | .skin-green .main-header li.user-header { 54 | background-color: #00a65a; 55 | } 56 | .skin-green .content-header { 57 | background: transparent; 58 | } 59 | .skin-green .wrapper, 60 | .skin-green .main-sidebar, 61 | .skin-green .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-green .user-panel > .info, 65 | .skin-green .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-green .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-green .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-green .sidebar-menu > li:hover > a, 76 | .skin-green .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #00a65a; 80 | } 81 | .skin-green .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-green .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-green .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-green .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-green .treeview-menu > li.active > a, 95 | .skin-green .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-green .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-green .sidebar-form input[type="text"], 104 | .skin-green .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | -webkit-transition: all 0.3s ease-in-out; 110 | -o-transition: all 0.3s ease-in-out; 111 | transition: all 0.3s ease-in-out; 112 | } 113 | .skin-green .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-green .sidebar-form input[type="text"]:focus, 121 | .skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-green .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /assets/css/skins/skin-green.min.css: -------------------------------------------------------------------------------- 1 | .skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /assets/css/skins/skin-purple-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Purple 3 | * ------------ 4 | */ 5 | .skin-purple-light .main-header .navbar { 6 | background-color: #605ca8; 7 | } 8 | .skin-purple-light .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-purple-light .main-header .navbar .nav > li > a:hover, 12 | .skin-purple-light .main-header .navbar .nav > li > a:active, 13 | .skin-purple-light .main-header .navbar .nav > li > a:focus, 14 | .skin-purple-light .main-header .navbar .nav .open > a, 15 | .skin-purple-light .main-header .navbar .nav .open > a:hover, 16 | .skin-purple-light .main-header .navbar .nav .open > a:focus, 17 | .skin-purple-light .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-purple-light .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-purple-light .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-purple-light .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-purple-light .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #555299; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-purple-light .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-purple-light .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-purple-light .main-header .navbar .dropdown-menu li a:hover { 42 | background: #555299; 43 | } 44 | } 45 | .skin-purple-light .main-header .logo { 46 | background-color: #605ca8; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-purple-light .main-header .logo:hover { 51 | background-color: #5d59a6; 52 | } 53 | .skin-purple-light .main-header li.user-header { 54 | background-color: #605ca8; 55 | } 56 | .skin-purple-light .content-header { 57 | background: transparent; 58 | } 59 | .skin-purple-light .wrapper, 60 | .skin-purple-light .main-sidebar, 61 | .skin-purple-light .left-side { 62 | background-color: #f9fafc; 63 | } 64 | .skin-purple-light .content-wrapper, 65 | .skin-purple-light .main-footer { 66 | border-left: 1px solid #d2d6de; 67 | } 68 | .skin-purple-light .user-panel > .info, 69 | .skin-purple-light .user-panel > .info > a { 70 | color: #444444; 71 | } 72 | .skin-purple-light .sidebar-menu > li { 73 | -webkit-transition: border-left-color 0.3s ease; 74 | -o-transition: border-left-color 0.3s ease; 75 | transition: border-left-color 0.3s ease; 76 | } 77 | .skin-purple-light .sidebar-menu > li.header { 78 | color: #848484; 79 | background: #f9fafc; 80 | } 81 | .skin-purple-light .sidebar-menu > li > a { 82 | border-left: 3px solid transparent; 83 | font-weight: 600; 84 | } 85 | .skin-purple-light .sidebar-menu > li:hover > a, 86 | .skin-purple-light .sidebar-menu > li.active > a { 87 | color: #000000; 88 | background: #f4f4f5; 89 | } 90 | .skin-purple-light .sidebar-menu > li.active { 91 | border-left-color: #605ca8; 92 | } 93 | .skin-purple-light .sidebar-menu > li.active > a { 94 | font-weight: 600; 95 | } 96 | .skin-purple-light .sidebar-menu > li > .treeview-menu { 97 | background: #f4f4f5; 98 | } 99 | .skin-purple-light .sidebar a { 100 | color: #444444; 101 | } 102 | .skin-purple-light .sidebar a:hover { 103 | text-decoration: none; 104 | } 105 | .skin-purple-light .treeview-menu > li > a { 106 | color: #777777; 107 | } 108 | .skin-purple-light .treeview-menu > li.active > a, 109 | .skin-purple-light .treeview-menu > li > a:hover { 110 | color: #000000; 111 | } 112 | .skin-purple-light .treeview-menu > li.active > a { 113 | font-weight: 600; 114 | } 115 | .skin-purple-light .sidebar-form { 116 | border-radius: 3px; 117 | border: 1px solid #d2d6de; 118 | margin: 10px 10px; 119 | } 120 | .skin-purple-light .sidebar-form input[type="text"], 121 | .skin-purple-light .sidebar-form .btn { 122 | box-shadow: none; 123 | background-color: #fff; 124 | border: 1px solid transparent; 125 | height: 35px; 126 | -webkit-transition: all 0.3s ease-in-out; 127 | -o-transition: all 0.3s ease-in-out; 128 | transition: all 0.3s ease-in-out; 129 | } 130 | .skin-purple-light .sidebar-form input[type="text"] { 131 | color: #666; 132 | border-top-left-radius: 2px; 133 | border-top-right-radius: 0; 134 | border-bottom-right-radius: 0; 135 | border-bottom-left-radius: 2px; 136 | } 137 | .skin-purple-light .sidebar-form input[type="text"]:focus, 138 | .skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 139 | background-color: #fff; 140 | color: #666; 141 | } 142 | .skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 143 | border-left-color: #fff; 144 | } 145 | .skin-purple-light .sidebar-form .btn { 146 | color: #999; 147 | border-top-left-radius: 0; 148 | border-top-right-radius: 2px; 149 | border-bottom-right-radius: 2px; 150 | border-bottom-left-radius: 0; 151 | } 152 | @media (min-width: 768px) { 153 | .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { 154 | border-left: 1px solid #d2d6de; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /assets/css/skins/skin-purple-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .content-wrapper,.skin-purple-light .main-footer{border-left:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .treeview-menu>li>a{color:#777}.skin-purple-light .treeview-menu>li.active>a,.skin-purple-light .treeview-menu>li>a:hover{color:#000}.skin-purple-light .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /assets/css/skins/skin-purple.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Purple 3 | * ------------ 4 | */ 5 | .skin-purple .main-header .navbar { 6 | background-color: #605ca8; 7 | } 8 | .skin-purple .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-purple .main-header .navbar .nav > li > a:hover, 12 | .skin-purple .main-header .navbar .nav > li > a:active, 13 | .skin-purple .main-header .navbar .nav > li > a:focus, 14 | .skin-purple .main-header .navbar .nav .open > a, 15 | .skin-purple .main-header .navbar .nav .open > a:hover, 16 | .skin-purple .main-header .navbar .nav .open > a:focus, 17 | .skin-purple .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-purple .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-purple .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-purple .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-purple .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #555299; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-purple .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-purple .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-purple .main-header .navbar .dropdown-menu li a:hover { 42 | background: #555299; 43 | } 44 | } 45 | .skin-purple .main-header .logo { 46 | background-color: #555299; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-purple .main-header .logo:hover { 51 | background-color: #545096; 52 | } 53 | .skin-purple .main-header li.user-header { 54 | background-color: #605ca8; 55 | } 56 | .skin-purple .content-header { 57 | background: transparent; 58 | } 59 | .skin-purple .wrapper, 60 | .skin-purple .main-sidebar, 61 | .skin-purple .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-purple .user-panel > .info, 65 | .skin-purple .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-purple .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-purple .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-purple .sidebar-menu > li:hover > a, 76 | .skin-purple .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #605ca8; 80 | } 81 | .skin-purple .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-purple .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-purple .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-purple .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-purple .treeview-menu > li.active > a, 95 | .skin-purple .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-purple .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-purple .sidebar-form input[type="text"], 104 | .skin-purple .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | -webkit-transition: all 0.3s ease-in-out; 110 | -o-transition: all 0.3s ease-in-out; 111 | transition: all 0.3s ease-in-out; 112 | } 113 | .skin-purple .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-purple .sidebar-form input[type="text"]:focus, 121 | .skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-purple .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /assets/css/skins/skin-purple.min.css: -------------------------------------------------------------------------------- 1 | .skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /assets/css/skins/skin-red-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Red 3 | * --------- 4 | */ 5 | .skin-red-light .main-header .navbar { 6 | background-color: #dd4b39; 7 | } 8 | .skin-red-light .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-red-light .main-header .navbar .nav > li > a:hover, 12 | .skin-red-light .main-header .navbar .nav > li > a:active, 13 | .skin-red-light .main-header .navbar .nav > li > a:focus, 14 | .skin-red-light .main-header .navbar .nav .open > a, 15 | .skin-red-light .main-header .navbar .nav .open > a:hover, 16 | .skin-red-light .main-header .navbar .nav .open > a:focus, 17 | .skin-red-light .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-red-light .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-red-light .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-red-light .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-red-light .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #d73925; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-red-light .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-red-light .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-red-light .main-header .navbar .dropdown-menu li a:hover { 42 | background: #d73925; 43 | } 44 | } 45 | .skin-red-light .main-header .logo { 46 | background-color: #dd4b39; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-red-light .main-header .logo:hover { 51 | background-color: #dc4735; 52 | } 53 | .skin-red-light .main-header li.user-header { 54 | background-color: #dd4b39; 55 | } 56 | .skin-red-light .content-header { 57 | background: transparent; 58 | } 59 | .skin-red-light .wrapper, 60 | .skin-red-light .main-sidebar, 61 | .skin-red-light .left-side { 62 | background-color: #f9fafc; 63 | } 64 | .skin-red-light .content-wrapper, 65 | .skin-red-light .main-footer { 66 | border-left: 1px solid #d2d6de; 67 | } 68 | .skin-red-light .user-panel > .info, 69 | .skin-red-light .user-panel > .info > a { 70 | color: #444444; 71 | } 72 | .skin-red-light .sidebar-menu > li { 73 | -webkit-transition: border-left-color 0.3s ease; 74 | -o-transition: border-left-color 0.3s ease; 75 | transition: border-left-color 0.3s ease; 76 | } 77 | .skin-red-light .sidebar-menu > li.header { 78 | color: #848484; 79 | background: #f9fafc; 80 | } 81 | .skin-red-light .sidebar-menu > li > a { 82 | border-left: 3px solid transparent; 83 | font-weight: 600; 84 | } 85 | .skin-red-light .sidebar-menu > li:hover > a, 86 | .skin-red-light .sidebar-menu > li.active > a { 87 | color: #000000; 88 | background: #f4f4f5; 89 | } 90 | .skin-red-light .sidebar-menu > li.active { 91 | border-left-color: #dd4b39; 92 | } 93 | .skin-red-light .sidebar-menu > li.active > a { 94 | font-weight: 600; 95 | } 96 | .skin-red-light .sidebar-menu > li > .treeview-menu { 97 | background: #f4f4f5; 98 | } 99 | .skin-red-light .sidebar a { 100 | color: #444444; 101 | } 102 | .skin-red-light .sidebar a:hover { 103 | text-decoration: none; 104 | } 105 | .skin-red-light .treeview-menu > li > a { 106 | color: #777777; 107 | } 108 | .skin-red-light .treeview-menu > li.active > a, 109 | .skin-red-light .treeview-menu > li > a:hover { 110 | color: #000000; 111 | } 112 | .skin-red-light .treeview-menu > li.active > a { 113 | font-weight: 600; 114 | } 115 | .skin-red-light .sidebar-form { 116 | border-radius: 3px; 117 | border: 1px solid #d2d6de; 118 | margin: 10px 10px; 119 | } 120 | .skin-red-light .sidebar-form input[type="text"], 121 | .skin-red-light .sidebar-form .btn { 122 | box-shadow: none; 123 | background-color: #fff; 124 | border: 1px solid transparent; 125 | height: 35px; 126 | -webkit-transition: all 0.3s ease-in-out; 127 | -o-transition: all 0.3s ease-in-out; 128 | transition: all 0.3s ease-in-out; 129 | } 130 | .skin-red-light .sidebar-form input[type="text"] { 131 | color: #666; 132 | border-top-left-radius: 2px; 133 | border-top-right-radius: 0; 134 | border-bottom-right-radius: 0; 135 | border-bottom-left-radius: 2px; 136 | } 137 | .skin-red-light .sidebar-form input[type="text"]:focus, 138 | .skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 139 | background-color: #fff; 140 | color: #666; 141 | } 142 | .skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 143 | border-left-color: #fff; 144 | } 145 | .skin-red-light .sidebar-form .btn { 146 | color: #999; 147 | border-top-left-radius: 0; 148 | border-top-right-radius: 2px; 149 | border-bottom-right-radius: 2px; 150 | border-bottom-left-radius: 0; 151 | } 152 | @media (min-width: 768px) { 153 | .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { 154 | border-left: 1px solid #d2d6de; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /assets/css/skins/skin-red-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .content-wrapper,.skin-red-light .main-footer{border-left:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .treeview-menu>li>a{color:#777}.skin-red-light .treeview-menu>li.active>a,.skin-red-light .treeview-menu>li>a:hover{color:#000}.skin-red-light .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /assets/css/skins/skin-red.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Red 3 | * --------- 4 | */ 5 | .skin-red .main-header .navbar { 6 | background-color: #dd4b39; 7 | } 8 | .skin-red .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-red .main-header .navbar .nav > li > a:hover, 12 | .skin-red .main-header .navbar .nav > li > a:active, 13 | .skin-red .main-header .navbar .nav > li > a:focus, 14 | .skin-red .main-header .navbar .nav .open > a, 15 | .skin-red .main-header .navbar .nav .open > a:hover, 16 | .skin-red .main-header .navbar .nav .open > a:focus, 17 | .skin-red .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-red .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-red .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-red .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-red .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #d73925; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-red .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-red .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-red .main-header .navbar .dropdown-menu li a:hover { 42 | background: #d73925; 43 | } 44 | } 45 | .skin-red .main-header .logo { 46 | background-color: #d73925; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-red .main-header .logo:hover { 51 | background-color: #d33724; 52 | } 53 | .skin-red .main-header li.user-header { 54 | background-color: #dd4b39; 55 | } 56 | .skin-red .content-header { 57 | background: transparent; 58 | } 59 | .skin-red .wrapper, 60 | .skin-red .main-sidebar, 61 | .skin-red .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-red .user-panel > .info, 65 | .skin-red .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-red .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-red .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-red .sidebar-menu > li:hover > a, 76 | .skin-red .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #dd4b39; 80 | } 81 | .skin-red .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-red .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-red .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-red .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-red .treeview-menu > li.active > a, 95 | .skin-red .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-red .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-red .sidebar-form input[type="text"], 104 | .skin-red .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | -webkit-transition: all 0.3s ease-in-out; 110 | -o-transition: all 0.3s ease-in-out; 111 | transition: all 0.3s ease-in-out; 112 | } 113 | .skin-red .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-red .sidebar-form input[type="text"]:focus, 121 | .skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-red .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /assets/css/skins/skin-red.min.css: -------------------------------------------------------------------------------- 1 | .skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /assets/css/skins/skin-yellow-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Yellow 3 | * ------------ 4 | */ 5 | .skin-yellow-light .main-header .navbar { 6 | background-color: #f39c12; 7 | } 8 | .skin-yellow-light .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-yellow-light .main-header .navbar .nav > li > a:hover, 12 | .skin-yellow-light .main-header .navbar .nav > li > a:active, 13 | .skin-yellow-light .main-header .navbar .nav > li > a:focus, 14 | .skin-yellow-light .main-header .navbar .nav .open > a, 15 | .skin-yellow-light .main-header .navbar .nav .open > a:hover, 16 | .skin-yellow-light .main-header .navbar .nav .open > a:focus, 17 | .skin-yellow-light .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-yellow-light .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-yellow-light .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-yellow-light .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-yellow-light .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #e08e0b; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-yellow-light .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-yellow-light .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover { 42 | background: #e08e0b; 43 | } 44 | } 45 | .skin-yellow-light .main-header .logo { 46 | background-color: #f39c12; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-yellow-light .main-header .logo:hover { 51 | background-color: #f39a0d; 52 | } 53 | .skin-yellow-light .main-header li.user-header { 54 | background-color: #f39c12; 55 | } 56 | .skin-yellow-light .content-header { 57 | background: transparent; 58 | } 59 | .skin-yellow-light .wrapper, 60 | .skin-yellow-light .main-sidebar, 61 | .skin-yellow-light .left-side { 62 | background-color: #f9fafc; 63 | } 64 | .skin-yellow-light .content-wrapper, 65 | .skin-yellow-light .main-footer { 66 | border-left: 1px solid #d2d6de; 67 | } 68 | .skin-yellow-light .user-panel > .info, 69 | .skin-yellow-light .user-panel > .info > a { 70 | color: #444444; 71 | } 72 | .skin-yellow-light .sidebar-menu > li { 73 | -webkit-transition: border-left-color 0.3s ease; 74 | -o-transition: border-left-color 0.3s ease; 75 | transition: border-left-color 0.3s ease; 76 | } 77 | .skin-yellow-light .sidebar-menu > li.header { 78 | color: #848484; 79 | background: #f9fafc; 80 | } 81 | .skin-yellow-light .sidebar-menu > li > a { 82 | border-left: 3px solid transparent; 83 | font-weight: 600; 84 | } 85 | .skin-yellow-light .sidebar-menu > li:hover > a, 86 | .skin-yellow-light .sidebar-menu > li.active > a { 87 | color: #000000; 88 | background: #f4f4f5; 89 | } 90 | .skin-yellow-light .sidebar-menu > li.active { 91 | border-left-color: #f39c12; 92 | } 93 | .skin-yellow-light .sidebar-menu > li.active > a { 94 | font-weight: 600; 95 | } 96 | .skin-yellow-light .sidebar-menu > li > .treeview-menu { 97 | background: #f4f4f5; 98 | } 99 | .skin-yellow-light .sidebar a { 100 | color: #444444; 101 | } 102 | .skin-yellow-light .sidebar a:hover { 103 | text-decoration: none; 104 | } 105 | .skin-yellow-light .treeview-menu > li > a { 106 | color: #777777; 107 | } 108 | .skin-yellow-light .treeview-menu > li.active > a, 109 | .skin-yellow-light .treeview-menu > li > a:hover { 110 | color: #000000; 111 | } 112 | .skin-yellow-light .treeview-menu > li.active > a { 113 | font-weight: 600; 114 | } 115 | .skin-yellow-light .sidebar-form { 116 | border-radius: 3px; 117 | border: 1px solid #d2d6de; 118 | margin: 10px 10px; 119 | } 120 | .skin-yellow-light .sidebar-form input[type="text"], 121 | .skin-yellow-light .sidebar-form .btn { 122 | box-shadow: none; 123 | background-color: #fff; 124 | border: 1px solid transparent; 125 | height: 35px; 126 | -webkit-transition: all 0.3s ease-in-out; 127 | -o-transition: all 0.3s ease-in-out; 128 | transition: all 0.3s ease-in-out; 129 | } 130 | .skin-yellow-light .sidebar-form input[type="text"] { 131 | color: #666; 132 | border-top-left-radius: 2px; 133 | border-top-right-radius: 0; 134 | border-bottom-right-radius: 0; 135 | border-bottom-left-radius: 2px; 136 | } 137 | .skin-yellow-light .sidebar-form input[type="text"]:focus, 138 | .skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 139 | background-color: #fff; 140 | color: #666; 141 | } 142 | .skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 143 | border-left-color: #fff; 144 | } 145 | .skin-yellow-light .sidebar-form .btn { 146 | color: #999; 147 | border-top-left-radius: 0; 148 | border-top-right-radius: 2px; 149 | border-bottom-right-radius: 2px; 150 | border-bottom-left-radius: 0; 151 | } 152 | @media (min-width: 768px) { 153 | .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { 154 | border-left: 1px solid #d2d6de; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /assets/css/skins/skin-yellow-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .content-wrapper,.skin-yellow-light .main-footer{border-left:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .treeview-menu>li>a{color:#777}.skin-yellow-light .treeview-menu>li.active>a,.skin-yellow-light .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /assets/css/skins/skin-yellow.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Yellow 3 | * ------------ 4 | */ 5 | .skin-yellow .main-header .navbar { 6 | background-color: #f39c12; 7 | } 8 | .skin-yellow .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-yellow .main-header .navbar .nav > li > a:hover, 12 | .skin-yellow .main-header .navbar .nav > li > a:active, 13 | .skin-yellow .main-header .navbar .nav > li > a:focus, 14 | .skin-yellow .main-header .navbar .nav .open > a, 15 | .skin-yellow .main-header .navbar .nav .open > a:hover, 16 | .skin-yellow .main-header .navbar .nav .open > a:focus, 17 | .skin-yellow .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-yellow .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-yellow .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-yellow .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-yellow .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #e08e0b; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-yellow .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-yellow .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-yellow .main-header .navbar .dropdown-menu li a:hover { 42 | background: #e08e0b; 43 | } 44 | } 45 | .skin-yellow .main-header .logo { 46 | background-color: #e08e0b; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-yellow .main-header .logo:hover { 51 | background-color: #db8b0b; 52 | } 53 | .skin-yellow .main-header li.user-header { 54 | background-color: #f39c12; 55 | } 56 | .skin-yellow .content-header { 57 | background: transparent; 58 | } 59 | .skin-yellow .wrapper, 60 | .skin-yellow .main-sidebar, 61 | .skin-yellow .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-yellow .user-panel > .info, 65 | .skin-yellow .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-yellow .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-yellow .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-yellow .sidebar-menu > li:hover > a, 76 | .skin-yellow .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #f39c12; 80 | } 81 | .skin-yellow .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-yellow .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-yellow .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-yellow .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-yellow .treeview-menu > li.active > a, 95 | .skin-yellow .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-yellow .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-yellow .sidebar-form input[type="text"], 104 | .skin-yellow .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | -webkit-transition: all 0.3s ease-in-out; 110 | -o-transition: all 0.3s ease-in-out; 111 | transition: all 0.3s ease-in-out; 112 | } 113 | .skin-yellow .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-yellow .sidebar-form input[type="text"]:focus, 121 | .skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-yellow .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /assets/css/skins/skin-yellow.min.css: -------------------------------------------------------------------------------- 1 | .skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /assets/img/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/avatar.png -------------------------------------------------------------------------------- /assets/img/avatar04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/avatar04.png -------------------------------------------------------------------------------- /assets/img/avatar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/avatar2.png -------------------------------------------------------------------------------- /assets/img/avatar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/avatar3.png -------------------------------------------------------------------------------- /assets/img/avatar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/avatar5.png -------------------------------------------------------------------------------- /assets/img/boxed-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/boxed-bg.jpg -------------------------------------------------------------------------------- /assets/img/boxed-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/boxed-bg.png -------------------------------------------------------------------------------- /assets/img/credit/american-express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/american-express.png -------------------------------------------------------------------------------- /assets/img/credit/cirrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/cirrus.png -------------------------------------------------------------------------------- /assets/img/credit/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/mastercard.png -------------------------------------------------------------------------------- /assets/img/credit/mestro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/mestro.png -------------------------------------------------------------------------------- /assets/img/credit/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/paypal.png -------------------------------------------------------------------------------- /assets/img/credit/paypal2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/paypal2.png -------------------------------------------------------------------------------- /assets/img/credit/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/credit/visa.png -------------------------------------------------------------------------------- /assets/img/default-50x50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/default-50x50.gif -------------------------------------------------------------------------------- /assets/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/icons.png -------------------------------------------------------------------------------- /assets/img/photo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/photo1.png -------------------------------------------------------------------------------- /assets/img/photo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/photo2.png -------------------------------------------------------------------------------- /assets/img/photo3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/photo3.jpg -------------------------------------------------------------------------------- /assets/img/photo4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/photo4.jpg -------------------------------------------------------------------------------- /assets/img/user1-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user1-128x128.jpg -------------------------------------------------------------------------------- /assets/img/user2-160x160.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user2-160x160.jpg -------------------------------------------------------------------------------- /assets/img/user3-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user3-128x128.jpg -------------------------------------------------------------------------------- /assets/img/user4-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user4-128x128.jpg -------------------------------------------------------------------------------- /assets/img/user5-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user5-128x128.jpg -------------------------------------------------------------------------------- /assets/img/user6-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user6-128x128.jpg -------------------------------------------------------------------------------- /assets/img/user7-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user7-128x128.jpg -------------------------------------------------------------------------------- /assets/img/user8-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukamarin/admin-laravel/721e24bc28ffcd942c9d078997b65067fa3d0578/assets/img/user8-128x128.jpg -------------------------------------------------------------------------------- /assets/js/app.min.js: -------------------------------------------------------------------------------- 1 | /*! AdminLTE app.js 2 | * ================ 3 | * Main JS application file for AdminLTE v2. This file 4 | * should be included in all pages. It controls some layout 5 | * options and implements exclusive AdminLTE plugins. 6 | * 7 | * @Author Almsaeed Studio 8 | * @Support 9 | * @Email 10 | * @version 2.3.3 11 | * @license MIT 12 | */ 13 | function _init(){"use strict";$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){var a=$(".main-header").outerHeight()+$(".main-footer").outerHeight(),b=$(window).height(),c=$(".sidebar").height();if($("body").hasClass("fixed"))$(".content-wrapper, .right-side").css("min-height",b-$(".main-footer").outerHeight());else{var d;b>=c?($(".content-wrapper, .right-side").css("min-height",b-a),d=b-a):($(".content-wrapper, .right-side").css("min-height",c),d=c);var e=$($.AdminLTE.options.controlSidebarOptions.selector);"undefined"!=typeof e&&e.height()>d&&$(".content-wrapper, .right-side").css("min-height",e.height())}},fixSidebar:function(){return $("body").hasClass("fixed")?("undefined"==typeof $.fn.slimScroll&&window.console&&window.console.error("Error: the fixed layout requires the slimscroll plugin!"),void($.AdminLTE.options.sidebarSlimScroll&&"undefined"!=typeof $.fn.slimScroll&&($(".sidebar").slimScroll({destroy:!0}).height("auto"),$(".sidebar").slimscroll({height:$(window).height()-$(".main-header").height()+"px",color:"rgba(0,0,0,0.2)",size:"3px"})))):void("undefined"!=typeof $.fn.slimScroll&&$(".sidebar").slimScroll({destroy:!0}).height("auto"))}},$.AdminLTE.pushMenu={activate:function(a){var b=$.AdminLTE.options.screenSizes;$(document).on("click",a,function(a){a.preventDefault(),$(window).width()>b.sm-1?$("body").hasClass("sidebar-collapse")?$("body").removeClass("sidebar-collapse").trigger("expanded.pushMenu"):$("body").addClass("sidebar-collapse").trigger("collapsed.pushMenu"):$("body").hasClass("sidebar-open")?$("body").removeClass("sidebar-open").removeClass("sidebar-collapse").trigger("collapsed.pushMenu"):$("body").addClass("sidebar-open").trigger("expanded.pushMenu")}),$(".content-wrapper").click(function(){$(window).width()<=b.sm-1&&$("body").hasClass("sidebar-open")&&$("body").removeClass("sidebar-open")}),($.AdminLTE.options.sidebarExpandOnHover||$("body").hasClass("fixed")&&$("body").hasClass("sidebar-mini"))&&this.expandOnHover()},expandOnHover:function(){var a=this,b=$.AdminLTE.options.screenSizes.sm-1;$(".main-sidebar").hover(function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-collapse")&&$(window).width()>b&&a.expand()},function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-expanded-on-hover")&&$(window).width()>b&&a.collapse()})},expand:function(){$("body").removeClass("sidebar-collapse").addClass("sidebar-expanded-on-hover")},collapse:function(){$("body").hasClass("sidebar-expanded-on-hover")&&$("body").removeClass("sidebar-expanded-on-hover").addClass("sidebar-collapse")}},$.AdminLTE.tree=function(a){var b=this,c=$.AdminLTE.options.animationSpeed;$(document).on("click",a+" li a",function(a){var d=$(this),e=d.next();if(e.is(".treeview-menu")&&e.is(":visible")&&!$("body").hasClass("sidebar-collapse"))e.slideUp(c,function(){e.removeClass("menu-open")}),e.parent("li").removeClass("active");else if(e.is(".treeview-menu")&&!e.is(":visible")){var f=d.parents("ul").first(),g=f.find("ul:visible").slideUp(c);g.removeClass("menu-open");var h=d.parent("li");e.slideDown(c,function(){e.addClass("menu-open"),f.find("li.active").removeClass("active"),h.addClass("active"),b.layout.fix()})}e.is(".treeview-menu")&&a.preventDefault()})},$.AdminLTE.controlSidebar={activate:function(){var a=this,b=$.AdminLTE.options.controlSidebarOptions,c=$(b.selector),d=$(b.toggleBtnSelector);d.on("click",function(d){d.preventDefault(),c.hasClass("control-sidebar-open")||$("body").hasClass("control-sidebar-open")?a.close(c,b.slide):a.open(c,b.slide)});var e=$(".control-sidebar-bg");a._fix(e),$("body").hasClass("fixed")?a._fixForFixed(c):$(".content-wrapper, .right-side").height() .box-body, > .box-footer, > form >.box-body, > form > .box-footer");c.hasClass("collapsed-box")?(a.children(":first").removeClass(b.icons.open).addClass(b.icons.collapse),d.slideDown(b.animationSpeed,function(){c.removeClass("collapsed-box")})):(a.children(":first").removeClass(b.icons.collapse).addClass(b.icons.open),d.slideUp(b.animationSpeed,function(){c.addClass("collapsed-box")}))},remove:function(a){var b=a.parents(".box").first();b.slideUp(this.animationSpeed)}}}if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");$.AdminLTE={},$.AdminLTE.options={navbarMenuSlimscroll:!0,navbarMenuSlimscrollWidth:"3px",navbarMenuHeight:"200px",animationSpeed:500,sidebarToggleSelector:"[data-toggle='offcanvas']",sidebarPushMenu:!0,sidebarSlimScroll:!0,sidebarExpandOnHover:!1,enableBoxRefresh:!0,enableBSToppltip:!0,BSTooltipSelector:"[data-toggle='tooltip']",enableFastclick:!0,enableControlSidebar:!0,controlSidebarOptions:{toggleBtnSelector:"[data-toggle='control-sidebar']",selector:".control-sidebar",slide:!0},enableBoxWidget:!0,boxWidgetOptions:{boxWidgetIcons:{collapse:"fa-minus",open:"fa-plus",remove:"fa-times"},boxWidgetSelectors:{remove:'[data-widget="remove"]',collapse:'[data-widget="collapse"]'}},directChat:{enable:!0,contactToggleSelector:'[data-widget="chat-pane-toggle"]'},colors:{lightBlue:"#3c8dbc",red:"#f56954",green:"#00a65a",aqua:"#00c0ef",yellow:"#f39c12",blue:"#0073b7",navy:"#001F3F",teal:"#39CCCC",olive:"#3D9970",lime:"#01FF70",orange:"#FF851B",fuchsia:"#F012BE",purple:"#8E24AA",maroon:"#D81B60",black:"#222222",gray:"#d2d6de"},screenSizes:{xs:480,sm:768,md:992,lg:1200}},$(function(){"use strict";$("body").removeClass("hold-transition"),"undefined"!=typeof AdminLTEOptions&&$.extend(!0,$.AdminLTE.options,AdminLTEOptions);var a=$.AdminLTE.options;_init(),$.AdminLTE.layout.activate(),$.AdminLTE.tree(".sidebar"),a.enableControlSidebar&&$.AdminLTE.controlSidebar.activate(),a.navbarMenuSlimscroll&&"undefined"!=typeof $.fn.slimscroll&&$(".navbar .menu").slimscroll({height:a.navbarMenuHeight,alwaysVisible:!1,size:a.navbarMenuSlimscrollWidth}).css("width","100%"),a.sidebarPushMenu&&$.AdminLTE.pushMenu.activate(a.sidebarToggleSelector),a.enableBSToppltip&&$("body").tooltip({selector:a.BSTooltipSelector}),a.enableBoxWidget&&$.AdminLTE.boxWidget.activate(),a.enableFastclick&&"undefined"!=typeof FastClick&&FastClick.attach(document.body),a.directChat.enable&&$(document).on("click",a.directChat.contactToggleSelector,function(){var a=$(this).parents(".direct-chat").first();a.toggleClass("direct-chat-contacts-open")}),$('.btn-group[data-toggle="btn-toggle"]').each(function(){var a=$(this);$(this).find(".btn").on("click",function(b){a.find(".btn.active").removeClass("active"),$(this).addClass("active"),b.preventDefault()})})}),function(a){"use strict";a.fn.boxRefresh=function(b){function c(a){a.append(f),e.onLoadStart.call(a)}function d(a){a.find(f).remove(),e.onLoadDone.call(a)}var e=a.extend({trigger:".refresh-btn",source:"",onLoadStart:function(a){return a},onLoadDone:function(a){return a}},b),f=a('
');return this.each(function(){if(""===e.source)return void(window.console&&window.console.log("Please specify a source first - boxRefresh()"));var b=a(this),f=b.find(e.trigger).first();f.on("click",function(a){a.preventDefault(),c(b),b.find(".box-body").load(e.source,function(){d(b)})})})}}(jQuery),function(a){"use strict";a.fn.activateBox=function(){a.AdminLTE.boxWidget.activate(this)},a.fn.toggleBox=function(){var b=a(a.AdminLTE.boxWidget.selectors.collapse,this);a.AdminLTE.boxWidget.collapse(b)},a.fn.removeBox=function(){var b=a(a.AdminLTE.boxWidget.selectors.remove,this);a.AdminLTE.boxWidget.remove(b)}}(jQuery),function(a){"use strict";a.fn.todolist=function(b){var c=a.extend({onCheck:function(a){return a},onUncheck:function(a){return a}},b);return this.each(function(){"undefined"!=typeof a.fn.iCheck?(a("input",this).on("ifChecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onCheck.call(b)}),a("input",this).on("ifUnchecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onUncheck.call(b)})):a("input",this).on("change",function(){var b=a(this).parents("li").first();b.toggleClass("done"),a("input",b).is(":checked")?c.onCheck.call(b):c.onUncheck.call(b)})})}}(jQuery); -------------------------------------------------------------------------------- /assets/js/pages/dashboard.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Author: Abdullah A Almsaeed 3 | * Date: 4 Jan 2014 4 | * Description: 5 | * This is a demo file used only for the main dashboard (index.html) 6 | **/ 7 | 8 | $(function () { 9 | 10 | "use strict"; 11 | 12 | //Make the dashboard widgets sortable Using jquery UI 13 | $(".connectedSortable").sortable({ 14 | placeholder: "sort-highlight", 15 | connectWith: ".connectedSortable", 16 | handle: ".box-header, .nav-tabs", 17 | forcePlaceholderSize: true, 18 | zIndex: 999999 19 | }); 20 | $(".connectedSortable .box-header, .connectedSortable .nav-tabs-custom").css("cursor", "move"); 21 | 22 | //jQuery UI sortable for the todo list 23 | $(".todo-list").sortable({ 24 | placeholder: "sort-highlight", 25 | handle: ".handle", 26 | forcePlaceholderSize: true, 27 | zIndex: 999999 28 | }); 29 | 30 | //bootstrap WYSIHTML5 - text editor 31 | $(".textarea").wysihtml5(); 32 | 33 | $('.daterange').daterangepicker({ 34 | ranges: { 35 | 'Today': [moment(), moment()], 36 | 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], 37 | 'Last 7 Days': [moment().subtract(6, 'days'), moment()], 38 | 'Last 30 Days': [moment().subtract(29, 'days'), moment()], 39 | 'This Month': [moment().startOf('month'), moment().endOf('month')], 40 | 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] 41 | }, 42 | startDate: moment().subtract(29, 'days'), 43 | endDate: moment() 44 | }, function (start, end) { 45 | window.alert("You chose: " + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); 46 | }); 47 | 48 | /* jQueryKnob */ 49 | $(".knob").knob(); 50 | 51 | //jvectormap data 52 | var visitorsData = { 53 | "US": 398, //USA 54 | "SA": 400, //Saudi Arabia 55 | "CA": 1000, //Canada 56 | "DE": 500, //Germany 57 | "FR": 760, //France 58 | "CN": 300, //China 59 | "AU": 700, //Australia 60 | "BR": 600, //Brazil 61 | "IN": 800, //India 62 | "GB": 320, //Great Britain 63 | "RU": 3000 //Russia 64 | }; 65 | //World map by jvectormap 66 | $('#world-map').vectorMap({ 67 | map: 'world_mill_en', 68 | backgroundColor: "transparent", 69 | regionStyle: { 70 | initial: { 71 | fill: '#e4e4e4', 72 | "fill-opacity": 1, 73 | stroke: 'none', 74 | "stroke-width": 0, 75 | "stroke-opacity": 1 76 | } 77 | }, 78 | series: { 79 | regions: [{ 80 | values: visitorsData, 81 | scale: ["#92c1dc", "#ebf4f9"], 82 | normalizeFunction: 'polynomial' 83 | }] 84 | }, 85 | onRegionLabelShow: function (e, el, code) { 86 | if (typeof visitorsData[code] != "undefined") 87 | el.html(el.html() + ': ' + visitorsData[code] + ' new visitors'); 88 | } 89 | }); 90 | 91 | //Sparkline charts 92 | var myvalues = [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021]; 93 | $('#sparkline-1').sparkline(myvalues, { 94 | type: 'line', 95 | lineColor: '#92c1dc', 96 | fillColor: "#ebf4f9", 97 | height: '50', 98 | width: '80' 99 | }); 100 | myvalues = [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921]; 101 | $('#sparkline-2').sparkline(myvalues, { 102 | type: 'line', 103 | lineColor: '#92c1dc', 104 | fillColor: "#ebf4f9", 105 | height: '50', 106 | width: '80' 107 | }); 108 | myvalues = [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21]; 109 | $('#sparkline-3').sparkline(myvalues, { 110 | type: 'line', 111 | lineColor: '#92c1dc', 112 | fillColor: "#ebf4f9", 113 | height: '50', 114 | width: '80' 115 | }); 116 | 117 | //The Calender 118 | $("#calendar").datepicker(); 119 | 120 | //SLIMSCROLL FOR CHAT WIDGET 121 | $('#chat-box').slimScroll({ 122 | height: '250px' 123 | }); 124 | 125 | /* Morris.js Charts */ 126 | // Sales chart 127 | var area = new Morris.Area({ 128 | element: 'revenue-chart', 129 | resize: true, 130 | data: [ 131 | {y: '2011 Q1', item1: 2666, item2: 2666}, 132 | {y: '2011 Q2', item1: 2778, item2: 2294}, 133 | {y: '2011 Q3', item1: 4912, item2: 1969}, 134 | {y: '2011 Q4', item1: 3767, item2: 3597}, 135 | {y: '2012 Q1', item1: 6810, item2: 1914}, 136 | {y: '2012 Q2', item1: 5670, item2: 4293}, 137 | {y: '2012 Q3', item1: 4820, item2: 3795}, 138 | {y: '2012 Q4', item1: 15073, item2: 5967}, 139 | {y: '2013 Q1', item1: 10687, item2: 4460}, 140 | {y: '2013 Q2', item1: 8432, item2: 5713} 141 | ], 142 | xkey: 'y', 143 | ykeys: ['item1', 'item2'], 144 | labels: ['Item 1', 'Item 2'], 145 | lineColors: ['#a0d0e0', '#3c8dbc'], 146 | hideHover: 'auto' 147 | }); 148 | var line = new Morris.Line({ 149 | element: 'line-chart', 150 | resize: true, 151 | data: [ 152 | {y: '2011 Q1', item1: 2666}, 153 | {y: '2011 Q2', item1: 2778}, 154 | {y: '2011 Q3', item1: 4912}, 155 | {y: '2011 Q4', item1: 3767}, 156 | {y: '2012 Q1', item1: 6810}, 157 | {y: '2012 Q2', item1: 5670}, 158 | {y: '2012 Q3', item1: 4820}, 159 | {y: '2012 Q4', item1: 15073}, 160 | {y: '2013 Q1', item1: 10687}, 161 | {y: '2013 Q2', item1: 8432} 162 | ], 163 | xkey: 'y', 164 | ykeys: ['item1'], 165 | labels: ['Item 1'], 166 | lineColors: ['#efefef'], 167 | lineWidth: 2, 168 | hideHover: 'auto', 169 | gridTextColor: "#fff", 170 | gridStrokeWidth: 0.4, 171 | pointSize: 4, 172 | pointStrokeColors: ["#efefef"], 173 | gridLineColor: "#efefef", 174 | gridTextFamily: "Open Sans", 175 | gridTextSize: 10 176 | }); 177 | 178 | //Donut Chart 179 | var donut = new Morris.Donut({ 180 | element: 'sales-chart', 181 | resize: true, 182 | colors: ["#3c8dbc", "#f56954", "#00a65a"], 183 | data: [ 184 | {label: "Download Sales", value: 12}, 185 | {label: "In-Store Sales", value: 30}, 186 | {label: "Mail-Order Sales", value: 20} 187 | ], 188 | hideHover: 'auto' 189 | }); 190 | 191 | //Fix for charts under tabs 192 | $('.box ul.nav a').on('shown.bs.tab', function () { 193 | area.redraw(); 194 | donut.redraw(); 195 | line.redraw(); 196 | }); 197 | 198 | /* The todo list plugin */ 199 | $(".todo-list").todolist({ 200 | onCheck: function (ele) { 201 | window.console.log("The element has been checked"); 202 | return ele; 203 | }, 204 | onUncheck: function (ele) { 205 | window.console.log("The element has been unchecked"); 206 | return ele; 207 | } 208 | }); 209 | 210 | }); 211 | -------------------------------------------------------------------------------- /assets/js/pages/dashboard2.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | 'use strict'; 4 | 5 | /* ChartJS 6 | * ------- 7 | * Here we will create a few charts using ChartJS 8 | */ 9 | 10 | //----------------------- 11 | //- MONTHLY SALES CHART - 12 | //----------------------- 13 | 14 | // Get context with jQuery - using jQuery's .get() method. 15 | var salesChartCanvas = $("#salesChart").get(0).getContext("2d"); 16 | // This will get the first returned node in the jQuery collection. 17 | var salesChart = new Chart(salesChartCanvas); 18 | 19 | var salesChartData = { 20 | labels: ["January", "February", "March", "April", "May", "June", "July"], 21 | datasets: [ 22 | { 23 | label: "Electronics", 24 | fillColor: "rgb(210, 214, 222)", 25 | strokeColor: "rgb(210, 214, 222)", 26 | pointColor: "rgb(210, 214, 222)", 27 | pointStrokeColor: "#c1c7d1", 28 | pointHighlightFill: "#fff", 29 | pointHighlightStroke: "rgb(220,220,220)", 30 | data: [65, 59, 80, 81, 56, 55, 40] 31 | }, 32 | { 33 | label: "Digital Goods", 34 | fillColor: "rgba(60,141,188,0.9)", 35 | strokeColor: "rgba(60,141,188,0.8)", 36 | pointColor: "#3b8bba", 37 | pointStrokeColor: "rgba(60,141,188,1)", 38 | pointHighlightFill: "#fff", 39 | pointHighlightStroke: "rgba(60,141,188,1)", 40 | data: [28, 48, 40, 19, 86, 27, 90] 41 | } 42 | ] 43 | }; 44 | 45 | var salesChartOptions = { 46 | //Boolean - If we should show the scale at all 47 | showScale: true, 48 | //Boolean - Whether grid lines are shown across the chart 49 | scaleShowGridLines: false, 50 | //String - Colour of the grid lines 51 | scaleGridLineColor: "rgba(0,0,0,.05)", 52 | //Number - Width of the grid lines 53 | scaleGridLineWidth: 1, 54 | //Boolean - Whether to show horizontal lines (except X axis) 55 | scaleShowHorizontalLines: true, 56 | //Boolean - Whether to show vertical lines (except Y axis) 57 | scaleShowVerticalLines: true, 58 | //Boolean - Whether the line is curved between points 59 | bezierCurve: true, 60 | //Number - Tension of the bezier curve between points 61 | bezierCurveTension: 0.3, 62 | //Boolean - Whether to show a dot for each point 63 | pointDot: false, 64 | //Number - Radius of each point dot in pixels 65 | pointDotRadius: 4, 66 | //Number - Pixel width of point dot stroke 67 | pointDotStrokeWidth: 1, 68 | //Number - amount extra to add to the radius to cater for hit detection outside the drawn point 69 | pointHitDetectionRadius: 20, 70 | //Boolean - Whether to show a stroke for datasets 71 | datasetStroke: true, 72 | //Number - Pixel width of dataset stroke 73 | datasetStrokeWidth: 2, 74 | //Boolean - Whether to fill the dataset with a color 75 | datasetFill: true, 76 | //String - A legend template 77 | legendTemplate: "
    -legend\"><% for (var i=0; i
  • \"><%=datasets[i].label%>
  • <%}%>
", 78 | //Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container 79 | maintainAspectRatio: true, 80 | //Boolean - whether to make the chart responsive to window resizing 81 | responsive: true 82 | }; 83 | 84 | //Create the line chart 85 | salesChart.Line(salesChartData, salesChartOptions); 86 | 87 | //--------------------------- 88 | //- END MONTHLY SALES CHART - 89 | //--------------------------- 90 | 91 | //------------- 92 | //- PIE CHART - 93 | //------------- 94 | // Get context with jQuery - using jQuery's .get() method. 95 | var pieChartCanvas = $("#pieChart").get(0).getContext("2d"); 96 | var pieChart = new Chart(pieChartCanvas); 97 | var PieData = [ 98 | { 99 | value: 700, 100 | color: "#f56954", 101 | highlight: "#f56954", 102 | label: "Chrome" 103 | }, 104 | { 105 | value: 500, 106 | color: "#00a65a", 107 | highlight: "#00a65a", 108 | label: "IE" 109 | }, 110 | { 111 | value: 400, 112 | color: "#f39c12", 113 | highlight: "#f39c12", 114 | label: "FireFox" 115 | }, 116 | { 117 | value: 600, 118 | color: "#00c0ef", 119 | highlight: "#00c0ef", 120 | label: "Safari" 121 | }, 122 | { 123 | value: 300, 124 | color: "#3c8dbc", 125 | highlight: "#3c8dbc", 126 | label: "Opera" 127 | }, 128 | { 129 | value: 100, 130 | color: "#d2d6de", 131 | highlight: "#d2d6de", 132 | label: "Navigator" 133 | } 134 | ]; 135 | var pieOptions = { 136 | //Boolean - Whether we should show a stroke on each segment 137 | segmentShowStroke: true, 138 | //String - The colour of each segment stroke 139 | segmentStrokeColor: "#fff", 140 | //Number - The width of each segment stroke 141 | segmentStrokeWidth: 1, 142 | //Number - The percentage of the chart that we cut out of the middle 143 | percentageInnerCutout: 50, // This is 0 for Pie charts 144 | //Number - Amount of animation steps 145 | animationSteps: 100, 146 | //String - Animation easing effect 147 | animationEasing: "easeOutBounce", 148 | //Boolean - Whether we animate the rotation of the Doughnut 149 | animateRotate: true, 150 | //Boolean - Whether we animate scaling the Doughnut from the centre 151 | animateScale: false, 152 | //Boolean - whether to make the chart responsive to window resizing 153 | responsive: true, 154 | // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container 155 | maintainAspectRatio: false, 156 | //String - A legend template 157 | legendTemplate: "
    -legend\"><% for (var i=0; i
  • \"><%if(segments[i].label){%><%=segments[i].label%><%}%>
  • <%}%>
", 158 | //String - A tooltip template 159 | tooltipTemplate: "<%=value %> <%=label%> users" 160 | }; 161 | //Create pie or douhnut chart 162 | // You can switch between pie and douhnut using the method below. 163 | pieChart.Doughnut(PieData, pieOptions); 164 | //----------------- 165 | //- END PIE CHART - 166 | //----------------- 167 | 168 | /* jVector Maps 169 | * ------------ 170 | * Create a world map with markers 171 | */ 172 | $('#world-map-markers').vectorMap({ 173 | map: 'world_mill_en', 174 | normalizeFunction: 'polynomial', 175 | hoverOpacity: 0.7, 176 | hoverColor: false, 177 | backgroundColor: 'transparent', 178 | regionStyle: { 179 | initial: { 180 | fill: 'rgba(210, 214, 222, 1)', 181 | "fill-opacity": 1, 182 | stroke: 'none', 183 | "stroke-width": 0, 184 | "stroke-opacity": 1 185 | }, 186 | hover: { 187 | "fill-opacity": 0.7, 188 | cursor: 'pointer' 189 | }, 190 | selected: { 191 | fill: 'yellow' 192 | }, 193 | selectedHover: {} 194 | }, 195 | markerStyle: { 196 | initial: { 197 | fill: '#00a65a', 198 | stroke: '#111' 199 | } 200 | }, 201 | markers: [ 202 | {latLng: [41.90, 12.45], name: 'Vatican City'}, 203 | {latLng: [43.73, 7.41], name: 'Monaco'}, 204 | {latLng: [-0.52, 166.93], name: 'Nauru'}, 205 | {latLng: [-8.51, 179.21], name: 'Tuvalu'}, 206 | {latLng: [43.93, 12.46], name: 'San Marino'}, 207 | {latLng: [47.14, 9.52], name: 'Liechtenstein'}, 208 | {latLng: [7.11, 171.06], name: 'Marshall Islands'}, 209 | {latLng: [17.3, -62.73], name: 'Saint Kitts and Nevis'}, 210 | {latLng: [3.2, 73.22], name: 'Maldives'}, 211 | {latLng: [35.88, 14.5], name: 'Malta'}, 212 | {latLng: [12.05, -61.75], name: 'Grenada'}, 213 | {latLng: [13.16, -61.23], name: 'Saint Vincent and the Grenadines'}, 214 | {latLng: [13.16, -59.55], name: 'Barbados'}, 215 | {latLng: [17.11, -61.85], name: 'Antigua and Barbuda'}, 216 | {latLng: [-4.61, 55.45], name: 'Seychelles'}, 217 | {latLng: [7.35, 134.46], name: 'Palau'}, 218 | {latLng: [42.5, 1.51], name: 'Andorra'}, 219 | {latLng: [14.01, -60.98], name: 'Saint Lucia'}, 220 | {latLng: [6.91, 158.18], name: 'Federated States of Micronesia'}, 221 | {latLng: [1.3, 103.8], name: 'Singapore'}, 222 | {latLng: [1.46, 173.03], name: 'Kiribati'}, 223 | {latLng: [-21.13, -175.2], name: 'Tonga'}, 224 | {latLng: [15.3, -61.38], name: 'Dominica'}, 225 | {latLng: [-20.2, 57.5], name: 'Mauritius'}, 226 | {latLng: [26.02, 50.55], name: 'Bahrain'}, 227 | {latLng: [0.33, 6.73], name: 'São Tomé and Príncipe'} 228 | ] 229 | }); 230 | 231 | /* SPARKLINE CHARTS 232 | * ---------------- 233 | * Create a inline charts with spark line 234 | */ 235 | 236 | //----------------- 237 | //- SPARKLINE BAR - 238 | //----------------- 239 | $('.sparkbar').each(function () { 240 | var $this = $(this); 241 | $this.sparkline('html', { 242 | type: 'bar', 243 | height: $this.data('height') ? $this.data('height') : '30', 244 | barColor: $this.data('color') 245 | }); 246 | }); 247 | 248 | //----------------- 249 | //- SPARKLINE PIE - 250 | //----------------- 251 | $('.sparkpie').each(function () { 252 | var $this = $(this); 253 | $this.sparkline('html', { 254 | type: 'pie', 255 | height: $this.data('height') ? $this.data('height') : '90', 256 | sliceColors: $this.data('color') 257 | }); 258 | }); 259 | 260 | //------------------ 261 | //- SPARKLINE LINE - 262 | //------------------ 263 | $('.sparkline').each(function () { 264 | var $this = $(this); 265 | $this.sparkline('html', { 266 | type: 'line', 267 | height: $this.data('height') ? $this.data('height') : '90', 268 | width: '100%', 269 | lineColor: $this.data('linecolor'), 270 | fillColor: $this.data('fillcolor'), 271 | spotColor: $this.data('spotcolor') 272 | }); 273 | }); 274 | }); 275 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "friparia/admin", 3 | "description": "customized mvc to build admin easily", 4 | "authors": [ 5 | { 6 | "name": "friparia", 7 | "email": "friparia@gmail.com" 8 | } 9 | ], 10 | "autoload": { 11 | "classmap": [ 12 | "src/commands" 13 | ], 14 | "psr-4": { 15 | "Friparia\\Admin\\": "src/Admin" 16 | } 17 | }, 18 | "minimum-stability": "dev" 19 | } 20 | -------------------------------------------------------------------------------- /src/Admin/Action.php: -------------------------------------------------------------------------------- 1 | _type = $type; 14 | $this->_name = $name; 15 | } 16 | 17 | public function __call($method, $parameters){ 18 | $name = "_".$method; 19 | $this->$name = count($parameters) > 0 ? $parameters[0] : true; 20 | return $this; 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/Admin/AdminController.php: -------------------------------------------------------------------------------- 1 | middlewareGroup('admin', [ 19 | \Friparia\Admin\Middleware::class, 20 | ]); 21 | $this->loadViewsFrom(__DIR__.'/../views', 'admin'); 22 | $this->publishes([ 23 | __DIR__.'/../views' => resource_path('views/friparia/admin'), 24 | __DIR__.'/../../assets' => public_path(''), 25 | ]); 26 | // $this->publishes([ 27 | // __DIR__.'/../database/migrations/' => database_path('migrations'), 28 | // ]); 29 | } 30 | 31 | /** 32 | * Register the application services. 33 | * 34 | * @return void 35 | */ 36 | public function register() 37 | { 38 | $config = $this->app['config']['auth']; 39 | $config["providers"]['users']['model'] = "\\Friparia\\Admin\\Models\\User"; 40 | $this->app['config']->set('auth', $config); 41 | $this->commands([ 42 | MigrateCommand::class, 43 | CreateAdminUserCommand::class, 44 | SetupCommand::class, 45 | MenuCommand::class, 46 | PermissionCommand::class, 47 | ]); 48 | } 49 | } 50 | 51 | -------------------------------------------------------------------------------- /src/Admin/AuthController.php: -------------------------------------------------------------------------------- 1 | input('name'); 20 | $password = $request->input('password'); 21 | if (Auth::attempt(['name' => $name, 'password' => $password])) { 22 | return redirect("/admin/"); 23 | } 24 | return redirect("/admin/auth/login")->withInput()->with('error', "用户名或密码错误"); 25 | } 26 | 27 | public function logout(Request $request){ 28 | Auth::logout(); 29 | return redirect("/admin/auth/login")->withInput()->with('error', "注销成功!"); 30 | } 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/Admin/Blueprint.php: -------------------------------------------------------------------------------- 1 | relations[$name] = $relation; 14 | return $relation; 15 | } 16 | 17 | public function getRelations(){ 18 | return $this->relations; 19 | } 20 | 21 | } 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/Admin/Controller.php: -------------------------------------------------------------------------------- 1 | '创建', 26 | 'update' => '编辑', 27 | 'delete' => '删除', 28 | ]; 29 | } 30 | public function admin(Request $request, $action, $id = null) 31 | { 32 | $instance = $this->initInstance($id); 33 | if(in_array($action, array_keys($this->logActions())) && $instance->getTitle() != ""){ 34 | Log::add($instance->getTitle().$this->logActions()[$action]); 35 | } 36 | if(in_array($action, $this->actions)){ 37 | if(is_null($id)){ 38 | return $this->$action(); 39 | }else{ 40 | return $this->$action($id); 41 | } 42 | } 43 | if(is_null($instance)){ 44 | $request->session()->flash("error", "结果不存在"); 45 | return response()->json(); 46 | }else{ 47 | if(!in_array($action, $instance->getAllActions())){ 48 | $request->session()->flash("error", '方法不存在'); 49 | return response()->json(); 50 | } 51 | 52 | if(in_array($action, $instance->getModalActions())){ 53 | $controller = "\\".get_called_class(); 54 | $model_name = Str::snake(class_basename($this->model)); 55 | $view = "admin::".$action; 56 | if(view()->exists($model_name.".".$action)){ 57 | $view = $model_name.".".$action; 58 | } 59 | return view($view)->with('instance', $instance)->with('controller', $controller);; 60 | } 61 | $attributes = []; 62 | if(in_array($action, ['create', 'update'])){ 63 | foreach($instance->getEditableColumns() as $column){ 64 | $name = $column->name; 65 | if($instance->getExtendedName($name) != ""){ 66 | $name = $instance->getExtendedName($name); 67 | } 68 | $value = $request->input($name); 69 | if($column->type == 'boolean'){ 70 | $value = $value == "on"; 71 | } 72 | if($column->type == 'extended'){ 73 | if(!is_array($instance->getExtendedType($column->name))){ 74 | if($action == 'create'){ 75 | $value = null; 76 | }else{ 77 | if ($request->hasFile($column->name)) { 78 | $request->file($column->name)->move(public_path('upload/').$instance->getFileStoragePath($column->name), $instance->getFileStorageName($column->name)); 79 | $value = $instance->getFileUrl($column->name); 80 | }else{ 81 | $value = null; 82 | } 83 | } 84 | } 85 | } 86 | if(!is_null($value)){ 87 | $attributes[$name] = $value; 88 | $instance->{$name} = $value; 89 | } 90 | } 91 | $validator = Validator::make($attributes, $instance->getRules(), $instance->getValidatorMessages()); 92 | $validator->after(function($validator) use ($instance){ 93 | foreach ($instance->getCustomValidatorCallback() as $callback) { 94 | if (!$callback()) { 95 | //TODO 96 | } 97 | } 98 | }); 99 | if($validator->fails()){ 100 | $request->session()->flash("error", $validator->errors()->first()); 101 | return response()->json(); 102 | } 103 | } 104 | if($action == 'create'){ 105 | $instance = $instance->$action($attributes); 106 | foreach($instance->getExtendedColumns() as $column){ 107 | if(!is_array($instance->getExtendedType($column->name))){ 108 | if ($request->hasFile($column->name)) { 109 | $request->file($column->name)->move(public_path('upload/').$instance->getFileStoragePath($column->name), $instance->getFileStorageName($column->name)); 110 | $instance->{$column->name} = $instance->getFileUrl($column->name); 111 | } 112 | } 113 | } 114 | $instance->save(); 115 | }else{ 116 | $instance->$action(); 117 | } 118 | 119 | } 120 | $request->session()->flash("success", '操作成功'); 121 | return response()->json(); 122 | } 123 | 124 | public function adminList(Request $request) 125 | { 126 | $data = $instance = $this->initInstance(); 127 | $query = []; 128 | $filter = []; 129 | $columns = []; 130 | foreach($instance->getAllColumns() as $column){ 131 | $columns[] = $column->name; 132 | } 133 | foreach($request->input() as $key => $value){ 134 | if(in_array($key, $instance->getExtended())){ 135 | if($value != ""){ 136 | $data = $instance->filter($key, $value, $data); 137 | } 138 | }else{ 139 | if(in_array($key, $columns) && $value != '*'){ 140 | $data = $data->where($key, 'LIKE', "%".$value."%"); 141 | } 142 | } 143 | $query[$key] = $value; 144 | } 145 | $data = $data->orderBy('id', 'desc')->paginate(20); 146 | $controller = "\\".get_called_class(); 147 | return view('admin::list', compact('data', 'instance', 'controller', 'query')); 148 | } 149 | 150 | public function adminShow($id) 151 | { 152 | } 153 | 154 | 155 | public function api(Request $request, $action, $id = null){ 156 | $function = strtolower($request->method()).ucfirst(camel_case($action)); 157 | if(method_exists($this, $function)){ 158 | if(is_null($id)){ 159 | return response()->json($this->$function()); 160 | }else{ 161 | return response()->json($this->$function($id)); 162 | } 163 | } 164 | // 165 | $instance = $this->initInstance($id); 166 | if(is_null($instance)){ 167 | return response()->json(['status' => false, 'msg' => "Item Not Found"]); 168 | }else{ 169 | $validator = Validator::make($request->all(), $instance->getRules(), $instance->getValidatorMessages()); 170 | $validator->after(function($validator) use ($instance){ 171 | foreach ($instance->getCustomValidatorCallback() as $callback) { 172 | if (!$callback()) { 173 | //TODO 174 | } 175 | } 176 | }); 177 | if($validator->fails()){ 178 | return response()->json(['status' => false, 'msg' => $validator->errors()]); 179 | } 180 | if(!in_array($action, $instance->getAllActions())){ 181 | return response()->json(['status' => false, 'msg' => 'Action Not Found']); 182 | } 183 | 184 | $attributes = []; 185 | foreach($instance->getEditableColumns() as $column){ 186 | $value = $request->input($column->name); 187 | if(!is_null($value)){ 188 | $attributes[$column->name] = $value; 189 | $instance->{$column->name} = $value; 190 | } 191 | } 192 | if($action == 'create'){ 193 | $result = ['status' => true, 'item' => $instance->$action($attributes)]; 194 | }else{ 195 | if($return = $instance->$action()){ 196 | $result = array_merge(['status' => true], $return); 197 | } 198 | } 199 | 200 | } 201 | return response()->json($result); 202 | } 203 | 204 | public function apiList() 205 | { 206 | $instance = $this->initInstance(); 207 | return $instance->all(); 208 | } 209 | 210 | public function apiShow($id){ 211 | $instance = $this->initInstance($id); 212 | if(is_null($instance)){ 213 | $result = ['status' => false, 'msg' => '你查找的对象不存在']; 214 | }else{ 215 | $result = ['status' => true, 'item' => $instance->toArray()]; 216 | } 217 | return response()->json($result); 218 | } 219 | 220 | protected function initInstance($id = null){ 221 | $model = $this->model; 222 | if(is_null($id)){ 223 | $instance = new $model([]); 224 | }else{ 225 | $instance = $model::find($id); 226 | } 227 | return $instance; 228 | } 229 | 230 | public function batch($action){ 231 | } 232 | 233 | 234 | } 235 | -------------------------------------------------------------------------------- /src/Admin/Controllers/RoleController.php: -------------------------------------------------------------------------------- 1 | flash("error", "请输入名称"); 17 | return response()->json(); 18 | } 19 | $role->name = $input['name']; 20 | $role->save(); 21 | if(isset($input['permission'])){ 22 | $data = []; 23 | foreach($input['permission'] as $key => $value){ 24 | if($value == 'on'){ 25 | $data[] = $key; 26 | } 27 | } 28 | $role->permission()->sync($data); 29 | }else{ 30 | $role->permission()->sync([]); 31 | } 32 | $role->save(); 33 | \Request::session()->flash("success", '操作成功'); 34 | return response()->json(); 35 | } 36 | 37 | public function create(){ 38 | $input = \Request::input(); 39 | $role = new Role; 40 | if(!isset($input['name'])){ 41 | \Request::session()->flash("error", "请输入名称"); 42 | return response()->json(); 43 | } 44 | $role->name = $input['name']; 45 | $role->save(); 46 | if(isset($input['permission'])){ 47 | $data = []; 48 | foreach($input['permission'] as $key => $value){ 49 | if($value == 'on'){ 50 | $data[] = $key; 51 | } 52 | } 53 | $role->permission()->attach($data); 54 | } 55 | $role->save(); 56 | \Request::session()->flash("success", '操作成功'); 57 | return response()->json(); 58 | 59 | } 60 | } 61 | 62 | -------------------------------------------------------------------------------- /src/Admin/Controllers/UserController.php: -------------------------------------------------------------------------------- 1 | flash("error", "请输入员工姓名"); 18 | return response()->json(); 19 | } 20 | if(!isset($input['password']) || !isset($input['confirm_password'])){ 21 | }else{ 22 | if($input['password'] != $input['confirm_password']){ 23 | \Request::session()->flash("error", "两次密码输入不同"); 24 | return response()->json(); 25 | }else{ 26 | if($input['password'] != ""){ 27 | $user->password = \Hash::make($input['password']); 28 | } 29 | } 30 | } 31 | if(isset($input['cellphone'])){ 32 | $user->cellphone = $input['cellphone']; 33 | } 34 | $user->cname = $input['cname']; 35 | $user->save(); 36 | if(isset($input['role'])){ 37 | $data = []; 38 | foreach($input['role'] as $key => $value){ 39 | if($value == 'on'){ 40 | $data[] = $key; 41 | } 42 | } 43 | $user->role()->sync($data); 44 | }else{ 45 | $user->role()->sync([]); 46 | } 47 | $user->save(); 48 | \Request::session()->flash("success", '操作成功'); 49 | return response()->json(); 50 | } 51 | 52 | public function create(){ 53 | $input = \Request::input(); 54 | $user = new User; 55 | if(!isset($input['name'])){ 56 | \Request::session()->flash("error", "请输入用户名"); 57 | return response()->json(); 58 | } 59 | if(!isset($input['cname'])){ 60 | \Request::session()->flash("error", "请输入员工姓名"); 61 | return response()->json(); 62 | } 63 | if(!isset($input['password']) || !isset($input['confirm_password'])){ 64 | \Request::session()->flash("error", "请输入员工密码"); 65 | return response()->json(); 66 | } 67 | if($input['password'] != $input['confirm_password']){ 68 | \Request::session()->flash("error", "两次密码输入不同"); 69 | return response()->json(); 70 | } 71 | if(isset($input['cellphone'])){ 72 | $user->cellphone = $input['cellphone']; 73 | } 74 | $user->name = $input['name']; 75 | $user->cname = $input['cname']; 76 | $user->password = \Hash::make($input['password']); 77 | $user->save(); 78 | if(isset($input['role'])){ 79 | $data = []; 80 | foreach($input['role'] as $key => $value){ 81 | if($value == 'on'){ 82 | $data[] = $key; 83 | } 84 | } 85 | $user->role()->sync($data); 86 | }else{ 87 | $user->role()->sync([]); 88 | } 89 | $user->save(); 90 | \Request::session()->flash("success", '操作成功'); 91 | return response()->json(); 92 | } 93 | } 94 | 95 | 96 | -------------------------------------------------------------------------------- /src/Admin/Field.php: -------------------------------------------------------------------------------- 1 | _type = $type; 14 | $this->_name = $name; 15 | } 16 | 17 | public function __call($method, $parameters){ 18 | $name = "_".$method; 19 | $this->$name = count($parameters) > 0 ? $parameters[0] : true; 20 | return $this; 21 | } 22 | 23 | public function getMigrationDescription(){ 24 | $parameters = []; 25 | $types = [ 26 | 'bigIncrements', 27 | 'bigInteger', 28 | 'binary', 29 | 'boolean', 30 | 'char', 31 | 'date', 32 | 'dateTime', 33 | 'dateTimeTz', 34 | 'decimal', 35 | 'double', 36 | 'enum', 37 | 'float', 38 | 'integer', 39 | 'ipAddress', 40 | 'json', 41 | 'jsonb', 42 | 'longText', 43 | 'macAddress', 44 | 'mediumInteger', 45 | 'mediumText', 46 | 'morphs', 47 | 'smallInteger', 48 | 'string', 49 | 'text', 50 | 'time', 51 | 'timeTz', 52 | 'tinyInteger', 53 | 'timestamp', 54 | 'timestampTz', 55 | 'uuid', 56 | ]; 57 | if(in_array($this->_type, $types)){ 58 | $method = $this->_type; 59 | return [$method, $this->_name, $parameters]; 60 | } 61 | return false; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/Admin/Middleware.php: -------------------------------------------------------------------------------- 1 | route('admin.login')->with('error', '请登录!'); 21 | } 22 | 23 | 24 | } -------------------------------------------------------------------------------- /src/Admin/Migrate.php: -------------------------------------------------------------------------------- 1 | model = new $model; 21 | } 22 | 23 | /** 24 | * 25 | */ 26 | public function migrate() 27 | { 28 | $connection = DB::connection(); 29 | $connection->useDefaultSchemaGrammar(); 30 | foreach($this->model->getManyToManyRelation() as $relation){ 31 | $blueprint = new Blueprint($relation['table']); 32 | $blueprint->increments("id"); 33 | $blueprint->integer($relation['foreignKey']); 34 | $blueprint->integer($relation['otherKey']); 35 | $blueprint->create(); 36 | $blueprint->build($connection, $connection->getSchemaGrammar()); 37 | } 38 | $this->model->getFields()->create(); 39 | $this->model->getFields()->build($connection, $connection->getSchemaGrammar()); 40 | 41 | } 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/Admin/MigrationCreator.php: -------------------------------------------------------------------------------- 1 | _model = $model; 12 | parent::__construct(new Filesystem()); 13 | } 14 | 15 | protected function getStub($table, $create){ 16 | return $this->files->get(__DIR__.'/../stubs/migration.stub'); 17 | } 18 | 19 | protected function populateStub($name, $stub, $table){ 20 | $stub = parent::populateStub($name, $stub, $table); 21 | $columns = []; 22 | foreach($this->_model->getFields() as $field){ 23 | if($description = $field->getMigrationDescription()){ 24 | list($method, $name, $parameters) = $description; 25 | $columns[] = $this->populateColumnStub($method, $name, $parameters); 26 | } 27 | } 28 | $stub = str_replace('DummyColumns', implode("", $columns), $stub); 29 | return $stub; 30 | } 31 | 32 | protected function populateColumnStub($method, $name, $parameters){ 33 | $stub = $this->files->get(__DIR__.'/../stubs/column.stub'); 34 | $stub = str_replace('DummyMethod', $method, $stub); 35 | $stub = str_replace('DummyName', $name, $stub); 36 | if(empty($parameters)){ 37 | $stub = str_replace('DummyParameters', "", $stub); 38 | }else{ 39 | $parameters = implode(", ", $parameters); 40 | $stub = str_replace('DummyParameters', ", ".$parameters, $stub); 41 | } 42 | return $stub; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Admin/Model.php: -------------------------------------------------------------------------------- 1 | [ 60 | 'type' => 'modal', 61 | 'color' => 'blue', 62 | 'description' => '修改', 63 | ], 64 | 'add' => [ 65 | 'type' => 'modal', 66 | 'single' => true, 67 | 'each' => false, 68 | 'color' => 'green', 69 | 'icon' => 'add', 70 | 'description' => '添加', 71 | ], 72 | 'switch_is_top' => [ 73 | 'type' => 'extend', 74 | ], 75 | 'switch_is_cooper' => [ 76 | 'type' => 'extend', 77 | ], 78 | ]; 79 | protected function construct(){ 80 | /////// 81 | //$this->fields->timestamps(); 82 | //$this->fields->softDeletes(); 83 | /////// 84 | $this->fields->string('name')->description('商户名称'); 85 | $this->fields->enum('type',['sport','entertainment','travel','food','other'])->description('商户类型')->values([ 86 | 'sport' => '运动', 87 | 'entertainment' => '娱乐', 88 | 'travel' => '旅行', 89 | 'food' => '美食', 90 | 'other' => '其他', 91 | ]); 92 | $this->fields->boolean('is_top')->description('置顶'); 93 | $this->fields->boolean('is_cooper')->description('合作'); 94 | $this->fields->relation('district')->belongsTo('App\Models\District')->description("区县"); 95 | } 96 | */ 97 | 98 | public function __construct($attributes = []) 99 | { 100 | parent::__construct($attributes); 101 | $this->configure(); 102 | $this->_name = Str::snake(class_basename($this)); 103 | // $this->fields = new Blueprint($this->getTable()); 104 | } 105 | 106 | protected function configure(){ 107 | } 108 | 109 | protected function addField($type, $name){ 110 | $field = new Field($type, $name); 111 | $fields = $this->_fields; 112 | $fields[] = $field; 113 | $this->_fields = $fields; 114 | return $field; 115 | } 116 | 117 | protected function addAction($type, $name){ 118 | $action = new Action($type, $name); 119 | $actions = $this->_actions; 120 | $actions[] = $action; 121 | $this->_actions = $actions; 122 | return $action; 123 | } 124 | 125 | public function createMigrationFile(){ 126 | $creator = new MigrationCreator($this); 127 | $path = database_path().'/migrations'; 128 | $creator->create($this->_name, $path, $this->getTable()); 129 | } 130 | 131 | 132 | public function getFields() 133 | { 134 | return $this->_fields; 135 | } 136 | 137 | /** 138 | public function getRelations() 139 | { 140 | return $this->fields->getRelations(); 141 | } 142 | 143 | 144 | public function getManyToManyRelation(){ 145 | $relations = []; 146 | foreach($this->getRelations() as $relation){ 147 | if($relation['type'] == Relation::MANY_TO_MANY){ 148 | $relations[] = $relation; 149 | } 150 | } 151 | return $relations; 152 | } 153 | 154 | //need reconstruct 155 | public function getColumns1() 156 | { 157 | $cols = $this->fields->getColumns(); 158 | $relatedKey = []; 159 | foreach($this->getRelations() as $relation){ 160 | if($relation->type == Relation::BELONGS_TO){ 161 | $relatedKey[] = $relation->foreignKey; 162 | } 163 | } 164 | $columns = []; 165 | foreach($cols as $column){ 166 | if(!in_array($column->name, $relatedKey)){ 167 | $columns[] = $column; 168 | } 169 | } 170 | 171 | foreach($this->extended as $extended){ 172 | if(!$description = $this->getColumnDescription($extended)){ 173 | $description = $extended; 174 | } 175 | $columns[] = new Fluent([ 176 | 'name' => $extended, 177 | 'type' => 'extended', 178 | 'description' => $description 179 | ]); 180 | } 181 | return $columns; 182 | } 183 | public function getAllColumns() 184 | { 185 | return $this->fields->getColumns(); 186 | } 187 | 188 | public function getColumnDescription($column){ 189 | $description = $this->getColumn($column)->description; 190 | if(isset($description)){ 191 | return $description; 192 | } 193 | return $column; 194 | } 195 | 196 | public function getListableColumns(){ 197 | $columns = []; 198 | 199 | $this->unlistable[] = 'id'; 200 | foreach($this->getColumns() as $column){ 201 | if(!in_array($column['name'], $this->unlistable)){ 202 | $columns[] = $column; 203 | } 204 | } 205 | return $columns; 206 | } 207 | 208 | public function getExtendedType($name){ 209 | return false; 210 | } 211 | 212 | public function getExtendedName($name){ 213 | return ""; 214 | } 215 | 216 | public function getExtendedColumns(){ 217 | $columns = []; 218 | foreach($this->extended as $extended){ 219 | if(!$description = $this->getColumnDescription($extended)){ 220 | $description = $extended; 221 | } 222 | $columns[] = new Fluent([ 223 | 'name' => $extended, 224 | 'type' => 'extended', 225 | 'description' => $description 226 | ]); 227 | } 228 | return $columns; 229 | 230 | } 231 | 232 | public function getFilterableColumns(){ 233 | $columns = []; 234 | foreach($this->getColumns() as $column){ 235 | if(in_array($column['name'], $this->filterable)){ 236 | $columns[] = $column; 237 | } 238 | } 239 | return $columns; 240 | } 241 | 242 | public function getSearchableColumns(){ 243 | $columns = []; 244 | foreach($this->getColumns() as $column){ 245 | if(in_array($column['name'], $this->searchable)){ 246 | $columns[] = $column; 247 | } 248 | } 249 | return $columns; 250 | } 251 | 252 | public function getShowableColumns(){} 253 | 254 | public function getEditableColumns(){ 255 | $columns = []; 256 | foreach($this->getColumns() as $column){ 257 | $name = $column->name; 258 | if(!in_array($name, $this->uneditable) && $name != 'id'){ 259 | $columns[] = $column; 260 | } 261 | } 262 | return $columns; 263 | } 264 | 265 | protected function getColumn($name){ 266 | foreach($this->getColumns() as $column){ 267 | if($column->get('name') == $name){ 268 | return $column; 269 | } 270 | } 271 | } 272 | 273 | public function getValue($name){ 274 | $column = $this->getColumn($name); 275 | if($column->type == 'enum'){ 276 | return $column->values[$this->$name]; 277 | } 278 | if($column->type == 'boolean'){ 279 | return ['0' => '否', '1' => '是'][$this->$name]; 280 | } 281 | return $this->$name; 282 | } 283 | 284 | public function getRawValue($name){ 285 | return $this->$name; 286 | } 287 | 288 | public function getAllActions(){ 289 | return array_merge(['create', 'update', 'delete'], array_keys($this->actions)); 290 | } 291 | 292 | public function getEachActions(){ 293 | $actions = []; 294 | foreach($this->actions as $action => $value){ 295 | if(isset($value['each'])){ 296 | if($value['each']){ 297 | $actions[$action] = $value; 298 | } 299 | }elseif($value['type'] != 'extend'){ 300 | $actions[$action] = $value; 301 | } 302 | } 303 | return $actions; 304 | } 305 | 306 | public function getModalActions(){ 307 | $actions = []; 308 | foreach($this->actions as $action => $value){ 309 | if(isset($value['type']) && $value['type'] == "modal"){ 310 | $actions[] = $action; 311 | } 312 | } 313 | return $actions; 314 | } 315 | 316 | public function getLeftActions(){ 317 | $actions = []; 318 | foreach($this->actions as $action => $value){ 319 | if(isset($value['type']) && $value['type'] == "left"){ 320 | $actions[$action] = $value; 321 | } 322 | } 323 | return $actions; 324 | } 325 | public function getBatchActions(){ 326 | return []; 327 | } 328 | 329 | public function getSingleActions(){ 330 | $actions = []; 331 | foreach($this->actions as $action => $value){ 332 | if(isset($value['single'])){ 333 | if($value['single']){ 334 | $actions[$action] = $value; 335 | } 336 | } 337 | } 338 | return $actions; 339 | } 340 | 341 | public function getValueGroups($column){ 342 | $data = []; 343 | if(!in_array($column, $this->extended)){ 344 | $type = $this->getColumn($column)->type; 345 | foreach(self::all()->groupBy($column) as $key => $item){ 346 | if($type == 'enum'){ 347 | $value = $this->getColumn($column)->values[$key]; 348 | }elseif($type == 'boolean'){ 349 | $value = ['0' => '否', '1' => '是'][$key]; 350 | }else{ 351 | $value = $item[0][$column]; 352 | } 353 | $data[$key] = $value; 354 | } 355 | }else{ 356 | $data = $this->getExtendedValueGroups($column); 357 | } 358 | return $data; 359 | } 360 | 361 | public function getExtendedValueGroups($column){ 362 | return []; 363 | } 364 | 365 | public function canFilterColumn($column){ 366 | if(in_array($column, $this->filterable)){ 367 | return true; 368 | } 369 | return false; 370 | } 371 | 372 | public function getExtended(){ 373 | return $this->extended; 374 | } 375 | 376 | public function filter($key, $value, $data){ 377 | return $data; 378 | } 379 | 380 | public function canListColumn($column){} 381 | 382 | public function canShowColumn($column){} 383 | 384 | public function canCreateColumn($column){} 385 | 386 | public function canEditColumn($column){} 387 | 388 | public function isSwitchable($column){ 389 | if(in_array($column, $this->switchable)){ 390 | return true; 391 | } 392 | return false; 393 | } 394 | 395 | static public function search($q){} 396 | 397 | public function getRules(){ 398 | return []; 399 | } 400 | 401 | public function getValidatorMessages(){ 402 | return []; 403 | } 404 | 405 | public function getCustomValidatorCallback(){ 406 | return []; 407 | } 408 | 409 | 410 | public function newFromBuilder($attributes = [], $connection = null){ 411 | $model = parent::newFromBuilder($attributes, $connection); 412 | foreach($this->fields->getRelations() as $key => $relation) { 413 | if ($relation['type'] == Relation::BELONGS_TO) { 414 | $relation = $model->belongsTo($relation['related'], $relation['foreignKey'], $relation['otherKey']); 415 | $model->$key = $relation->getResults(); 416 | $model->setRelation($key, $relation); 417 | }else if ($relation['type'] == Relation::MANY_TO_MANY || $relation['type'] == Relation::BELONGS_TO_MANY) { 418 | $relation = $model->belongsToMany($relation['related'], $relation['table'], $relation['foreignKey'], $relation['otherKey']); 419 | $model->$key = $relation->getResults(); 420 | $model->setRelation($key, $relation); 421 | }else if ($relation['type'] == Relation::HAS_MANY){ 422 | $relation = $model->hasMany($relation['related'], $relation['foreignKey'], $relation['localKey']); 423 | $model->$key = $relation->getResults(); 424 | $model->setRelation($key, $relation); 425 | }else if ($relation['type'] == Relation::HAS_ONE){ 426 | $relation = $model->hasOne($relation['related'], $relation['foreignKey'], $relation['localKey']); 427 | $model->$key = $relation->getResults(); 428 | $model->setRelation($key, $relation); 429 | } 430 | } 431 | return $model; 432 | } 433 | 434 | 435 | public function getDirty(){ 436 | $dirty = parent::getDirty(); 437 | foreach(array_keys($this->relations) as $relation){ 438 | unset($dirty[$relation]); 439 | } 440 | 441 | return $dirty; 442 | } 443 | 444 | public function toArray(){ 445 | $attributes = $this->attributesToArray(); 446 | $arr = array_merge($attributes, $this->relationsToArray()); 447 | foreach($this->relations as $key => $relation){ 448 | unset($arr[$key]); 449 | } 450 | return $arr; 451 | } 452 | 453 | public function getTitle(){ 454 | return $this->title; 455 | } 456 | 457 | public function getFileStoragePath($name){ 458 | return 'img/'.$name.''; 459 | } 460 | 461 | public function getFileStorageName($name){ 462 | return $this->id; 463 | } 464 | 465 | public function getFileUrl($name){ 466 | return asset('upload/'.$this->getFileStoragePath($name).'/'.$this->getFileStorageName($name)); 467 | } 468 | */ 469 | 470 | } 471 | -------------------------------------------------------------------------------- /src/Admin/Models/Menu.php: -------------------------------------------------------------------------------- 1 | fields->integer('pid'); 22 | $this->fields->string('name'); 23 | $this->fields->string('url')->nullable(); 24 | $this->fields->integer('weight'); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/Admin/Models/Permission.php: -------------------------------------------------------------------------------- 1 | fields->string('name')->unique(); 7 | $this->fields->string('description')->nullable(); 8 | $this->fields->timestamps(); 9 | $this->fields->relation('role')->belongsToMany('Friparia\\Admin\\Models\\Role'); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Admin/Models/Role.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'type' => 'modal', 11 | 'color' => 'blue', 12 | 'description' => '修改', 13 | ], 14 | 'add' => [ 15 | 'type' => 'modal', 16 | 'single' => true, 17 | 'each' => false, 18 | 'color' => 'green', 19 | 'icon' => 'add', 20 | 'description' => '添加', 21 | ], 22 | ]; 23 | protected function construct(){ 24 | $this->fields->string('name')->unique()->description("名称"); 25 | $this->fields->string('description')->nullable(); 26 | $this->fields->timestamps(); 27 | $this->fields->relation('user')->belongsToMany('Friparia\\Admin\\Models\\User'); 28 | // $this->fields->relation('permission')->hasManyToMany('Friparia\\Admin\\Models\\Permission'); 29 | } 30 | 31 | public function permission(){ 32 | return $this->belongsToMany('Friparia\\Admin\\Models\\Permission'); 33 | } 34 | 35 | public function hasPermission($permission_name){ 36 | foreach($this->permission as $permission){ 37 | if($permission->name == $permission_name){ 38 | return true; 39 | } 40 | } 41 | return false; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/Admin/Models/User.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'type' => 'modal', 19 | 'color' => 'blue', 20 | 'description' => '修改', 21 | ], 22 | 'add' => [ 23 | 'type' => 'modal', 24 | 'single' => true, 25 | 'each' => false, 26 | 'color' => 'green', 27 | 'icon' => 'add', 28 | 'description' => '添加', 29 | ], 30 | ]; 31 | protected $extended = ['group']; 32 | protected function construct(){ 33 | $this->fields->string('name')->description("账号"); 34 | $this->fields->string('cname')->description("姓名"); 35 | $this->fields->string('cellphone')->description("电话"); 36 | $this->fields->string('password'); 37 | $this->fields->boolean('is_admin')->default(false); 38 | $this->fields->timestamps(); 39 | $this->fields->rememberToken(); 40 | } 41 | 42 | public function role(){ 43 | return $this->belongsToMany('Friparia\\Admin\\Models\\Role'); 44 | } 45 | 46 | public function getColumnDescription($name){ 47 | if($name == 'group'){ 48 | return "用户组"; 49 | } 50 | return parent::getColumnDescription($name); 51 | } 52 | 53 | public function getValue($name){ 54 | if($name == 'group'){ 55 | $data = []; 56 | foreach($this->role as $role){ 57 | $data[] = $role->name; 58 | } 59 | return implode(',', $data); 60 | } 61 | 62 | return parent::getValue($name); 63 | } 64 | 65 | public function hasPermission($permission_name){ 66 | if($this->is_admin){ 67 | return true; 68 | } 69 | if(!count(Permission::where('name', $permission_name)->get())){ 70 | return true; 71 | }; 72 | foreach($this->role as $role){ 73 | if($role->hasPermission($permission_name)){ 74 | return true; 75 | } 76 | } 77 | return false; 78 | } 79 | 80 | public function hasRole($role_id){ 81 | foreach($this->role as $role){ 82 | if($role->id == $role_id){ 83 | return true; 84 | } 85 | } 86 | return false; 87 | } 88 | 89 | public function canVisit($url){ 90 | $segments = explode('?', $url); 91 | $uri = $segments[0]; 92 | return $this->hasPermission(implode('.', explode('/', $uri))); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/Admin/Mundle.php: -------------------------------------------------------------------------------- 1 | name = $name; 25 | $this->blueprint = $blueprint; 26 | } 27 | 28 | public function belongsTo($parent, $foreignKey = "", $otherKey = ""){ 29 | $this->related = $parent; 30 | if($foreignKey == ""){ 31 | $foreignKey = $this->name . "_id"; 32 | } 33 | if($otherKey == ""){ 34 | $otherKey = "id"; 35 | } 36 | $this->foreignKey = $foreignKey; 37 | $this->otherKey = $otherKey; 38 | $this->type = self::BELONGS_TO; 39 | $this->blueprint->integer($foreignKey); 40 | return $this; 41 | } 42 | 43 | public function hasOne($parent, $foreignKey = "", $localKey = ""){ 44 | $this->related = $parent; 45 | if($foreignKey == ""){ 46 | $foreignKey = $this->name . "_id"; 47 | } 48 | if($localKey == ""){ 49 | $localKey = "id"; 50 | } 51 | $this->foreignKey = $foreignKey; 52 | $this->localKey = $localKey; 53 | $this->type = self::HAS_ONE; 54 | return $this; 55 | } 56 | 57 | //'App\Comment', 'foreign_key', 'local_key' 58 | public function hasMany($parent, $foreignKey = "", $localKey = ""){ 59 | $this->related = $parent; 60 | if($foreignKey == ""){ 61 | $foreignKey = $this->name . "_id"; 62 | } 63 | if($localKey == ""){ 64 | $localKey = "id"; 65 | } 66 | $this->foreignKey = $foreignKey; 67 | $this->localKey = $localKey; 68 | $this->type = self::HAS_MANY; 69 | return $this; 70 | } 71 | 72 | //'App\Role', 'role_user', 'user_id', 'role_id' 73 | public function belongsToMany($related, $table = "", $foreignKey = "", $otherKey = ""){ 74 | $this->related = $related; 75 | $this->table = $this->getJoinTable($table); 76 | if($foreignKey == ""){ 77 | $foreignKey = Str::singular($this->blueprint->getTable()) . "_id"; 78 | } 79 | if($otherKey == ""){ 80 | $otherKey = Str::singular(class_basename($related)) . "_id"; 81 | } 82 | $this->foreignKey = $foreignKey; 83 | $this->otherKey = $otherKey; 84 | $this->type = self::BELONGS_TO_MANY; 85 | return $this; 86 | } 87 | 88 | //'App\Role', 'role_user', 'user_id', 'role_id' 89 | public function hasManyToMany($related, $table = "", $foreignKey = "", $otherKey = ""){ 90 | $this->related = $related; 91 | $this->table = $this->getJoinTable($table); 92 | if($foreignKey == ""){ 93 | $foreignKey = Str::singular($this->blueprint->getTable()) . "_id"; 94 | } 95 | if($otherKey == ""){ 96 | $otherKey = $this->name . "_id"; 97 | } 98 | $this->foreignKey = $foreignKey; 99 | $this->otherKey = $otherKey; 100 | $this->type = self::MANY_TO_MANY; 101 | return $this; 102 | } 103 | 104 | protected function getJoinTable($table = ""){ 105 | if($table == ""){ 106 | $arr = [Str::singular($this->blueprint->getTable()), $this->name]; 107 | sort($arr); 108 | $table = implode("_", $arr); 109 | } 110 | return $table; 111 | } 112 | 113 | 114 | public function __call($method, $parameters) 115 | { 116 | return parent::__call($method, $parameters); 117 | } 118 | 119 | } 120 | 121 | -------------------------------------------------------------------------------- /src/Admin/Route.php: -------------------------------------------------------------------------------- 1 | 'web'], function() use ($prefix, $name, $classname) { 18 | LaravelRoute::group(['middleware' => ['admin']], function () use ($prefix, $name, $classname) { 19 | LaravelRoute::get($prefix . '/', '\Friparia\Admin\AdminController@dashboard'); 20 | LaravelRoute::get($prefix.'/'.$name, $classname.'@adminList'); 21 | LaravelRoute::get($prefix.'/'.$name.'/show/{id}' , $classname.'@adminShow'); 22 | LaravelRoute::get($prefix . '/' . $name . '/{action}/{id?}', $classname . '@admin'); 23 | LaravelRoute::post($prefix . '/' . $name . '/{action}/{id?}', $classname . '@admin'); 24 | }); 25 | }); 26 | } 27 | 28 | public static function init($prefix = 'admin'){ 29 | Route::admin('Friparia\\Admin\\Models\\User', 'user', '\Friparia\Admin\Controllers\UserController'); 30 | Route::admin('Friparia\\Admin\\Models\\Role', 'role', '\Friparia\Admin\Controllers\RoleController'); 31 | LaravelRoute::group(['middleware' => 'web'], function() use ($prefix) { 32 | LaravelRoute::get($prefix.'/auth/login', '\Friparia\Admin\AuthController@login')->name('admin.login'); 33 | LaravelRoute::post($prefix.'/auth/login', '\Friparia\Admin\AuthController@dologin')->name('admin.dologin'); 34 | LaravelRoute::get($prefix.'/auth/logout', '\Friparia\Admin\AuthController@logout')->name('admin.logout'); 35 | }); 36 | } 37 | 38 | /** 39 | * @param $model 40 | * @param string $name 41 | * @param string $classname 42 | * @param string $prefix 43 | */ 44 | public static function api($model, $name = "", $classname = "", $prefix = 'api'){ 45 | if($name == "") { 46 | $name = Str::snake(class_basename($model)); 47 | } 48 | if($classname == "") { 49 | $classname = ucfirst(Str::camle($name . "Controller")); 50 | } 51 | LaravelRoute::get($prefix.'/'.$name, $classname.'@apiList'); 52 | LaravelRoute::get($prefix.'/'.$name.'/show/{id}' , $classname.'@apiShow'); 53 | LaravelRoute::get($prefix.'/'.$name.'/{action}/{id?}', $classname.'@api'); 54 | LaravelRoute::post($prefix.'/'.$name.'/{action}/{id?}', $classname.'@api'); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/commands/CreateAdminUserCommand.php: -------------------------------------------------------------------------------- 1 | argument('name'); 23 | $password = $this->secret("What is the password?"); 24 | $confirm = $this->secret("Please re-enter yout password"); 25 | if($password != $confirm){ 26 | $this->error("Please enter same password!"); 27 | } 28 | User::create(['name' => $name, 'password' => Hash::make($password), 'is_admin' => 1]); 29 | $this->line("create success!"); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/commands/MenuCommand.php: -------------------------------------------------------------------------------- 1 | argument('option'); 24 | if ($option == 'list') { 25 | if (Menu::count()) { 26 | $this->info("Name\tUrl"); 27 | } 28 | foreach (Menu::all() as $menu) { 29 | $this->info("{$menu->name}\t{$menu->url}"); 30 | } 31 | }elseif($option == 'create') { 32 | $name = $this->argument('name'); 33 | if ($name == "") { 34 | $this->error("please enter name"); 35 | } 36 | $pid = $this->ask("Please enter pid", 0); 37 | $url = $this->ask("Please enter url"); 38 | $menu = new Menu; 39 | $menu->pid = $pid; 40 | $menu->name = $name; 41 | $menu->url = $url; 42 | $menu->save(); 43 | }else{ 44 | $this->error("Invalid option, please enter list, create or delete"); 45 | } 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/commands/MigrateCommand.php: -------------------------------------------------------------------------------- 1 | confirm("Ready to migrate model")){ 22 | foreach($allFiles as $file){ 23 | $tokens = token_get_all(file_get_contents($file->getRealPath())); 24 | for($i = 0; $i < count($tokens); $i++){ 25 | if($tokens[$i][0] === T_CLASS){ 26 | for ($j = $i + 1; $j < count($tokens); $j++) { 27 | if ($tokens[$j] === '{') { 28 | $class = $tokens[$i+2][1]; 29 | } 30 | } 31 | } 32 | if($tokens[$i][0] === T_NAMESPACE){ 33 | $namespace = ""; 34 | for ($j = $i + 1; $j < count($tokens); $j++) { 35 | if ($tokens[$j + 1] === ';') { 36 | break; 37 | } 38 | $namespace .= ($tokens[$j + 1][1]); 39 | } 40 | } 41 | } 42 | if(in_array($namespace, ["App", "App\\Models"])){ 43 | $className = $namespace."\\".$class; 44 | $instance = new $className; 45 | if($instance instanceof Model){ 46 | $fields[$instance->getTable()] = $instance->getFields(); 47 | $migrate = new Migrate($className); 48 | $migrate->migrate(); 49 | $this->line("Migrate $className success!"); 50 | } 51 | } 52 | } 53 | } 54 | } 55 | } 56 | 57 | -------------------------------------------------------------------------------- /src/commands/PermissionCommand.php: -------------------------------------------------------------------------------- 1 | argument('option'); 16 | if ($option == 'list') { 17 | if (Permission::count()) { 18 | $this->info("Name\tDescription"); 19 | } 20 | foreach (Permission::all() as $permission) { 21 | $this->info("{$permission->name}\t{$permission->description}"); 22 | } 23 | }elseif($option == 'create') { 24 | $name = $this->argument('name'); 25 | if ($name == "") { 26 | $this->error("please enter name"); 27 | } 28 | $description = $this->ask("Please enter description"); 29 | $permission = new Permission; 30 | $permission->name = $name; 31 | $permission->description = $description; 32 | $permission->save(); 33 | }else{ 34 | $this->error("Invalid option, please enter list, create or delete"); 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/commands/SetupCommand.php: -------------------------------------------------------------------------------- 1 | migrate(); 22 | $migrate = new Migrate("Friparia\\Admin\\Models\\Role"); 23 | $migrate->migrate(); 24 | $migrate = new Migrate("Friparia\\Admin\\Models\\Permission"); 25 | $migrate->migrate(); 26 | $migrate = new Migrate("Friparia\\Admin\\Models\\Menu"); 27 | $migrate->migrate(); 28 | $this->line("create success!"); 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/migrations/2016_06_15_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('name'); 18 | $table->string('email')->unique(); 19 | $table->string('password'); 20 | $table->rememberToken(); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::drop('users'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/stubs/column.stub: -------------------------------------------------------------------------------- 1 | $table->DummyMethod('DummyName'DummyParameters); 2 | -------------------------------------------------------------------------------- /src/stubs/migration.stub: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->timestamps(); 18 | DummyColumns 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::drop('DummyTable'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/views/add.blade.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 添加 4 |
5 |
6 |
"create", "id" => $instance->id]) }}" method="POST"> 7 | @foreach ($instance->getEditableColumns() as $column) 8 |
9 | 10 | @if ($column->type == 'boolean') 11 |
12 | 13 | 14 |
15 | @elseif($column->type == 'enum') 16 | 21 | @elseif($column->type == 'extended') 22 | @if(is_array($instance->getExtendedType($column->name))) 23 | 28 | @else 29 | 30 | 31 | @endif 32 | @else 33 | 34 | @endif 35 |
36 | @endforeach 37 |
38 |
39 | 84 | 85 | -------------------------------------------------------------------------------- /src/views/edit.blade.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 修改 4 |
5 |
6 |
"update", "id" => $instance->id]) }}" method="POST"> 7 | @foreach ($instance->getEditableColumns() as $column) 8 |
9 | 10 | @if ($column->type == 'boolean') 11 |
12 | getRawValue($column->name)) checked @endif> 13 | 14 |
15 | @elseif($column->type == 'enum') 16 | 21 | @elseif($column->type == 'extended') 22 | @if(is_array($instance->getExtendedType($column->name))) 23 | 28 | @else 29 | 30 | 31 | @endif 32 | @else 33 | 34 | @endif 35 |
36 | @endforeach 37 |
38 |
39 | 82 | 83 | -------------------------------------------------------------------------------- /src/views/header.blade.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 149 |
150 | -------------------------------------------------------------------------------- /src/views/layout.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | @hasSection('title') 9 | @yield('title') 10 | @else 11 | {{ Config::get('admin.name') }} 12 | @endif 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 |
29 | @include('header') 30 | 31 | @include('sidebar') 32 | 33 |
34 |
35 |

36 | @hasSection('title') 37 | @yield('title') 38 | @else 39 | {{ Config::get('admin.name') }} 40 | @endif 41 |

42 | 43 | xxx xxx 44 | 45 |
46 |
47 | @yield('content') 48 |
49 |
50 | 51 | @include('footer') 52 | 53 | 54 | 68 |
69 | 87 |
88 | @if (session('error')) 89 |
90 |

{{ session('error') }}

91 |
92 | @endif 93 | @if (session('success')) 94 |
95 |

{{ session('success') }}

96 |
97 | @endif 98 |

99 | @hasSection('title') 100 | @yield('title') 101 | @else 102 | {{ Config::get('admin.name') }} 103 | @endif 104 |

105 |
106 | @yield('content') 107 |
108 |
109 |
110 | 111 |
112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /src/views/list.blade.php: -------------------------------------------------------------------------------- 1 | @extends('admin::layout') 2 | @section('title', $instance->getTitle()) 3 | @section('content') 4 |
5 |
6 | @foreach($instance->getLeftActions() as $action => $info) 7 | 8 | {{ $info['description'] or $action }} 9 | 10 | @endforeach 11 |
12 |
13 | 49 |
50 |
51 | 52 | 53 | 54 | @foreach($instance->getListableColumns() as $column) 55 | 67 | @endforeach 68 | @if(count($instance->getEachActions())) 69 | 72 | @endif 73 | 74 | 75 | @foreach($data as $item) 76 | 77 | @foreach($instance->getListableColumns() as $column) 78 | 88 | @endforeach 89 | @if(count($instance->getEachActions())) 90 | 109 | @endif 110 | 111 | @endforeach 112 |
56 | @if($instance->canFilterColumn($column->name)) 57 | 63 | @else 64 | {{ $instance->getColumnDescription($column->name) }} 65 | @endif 66 | 70 | 操作 71 |
79 | @if($instance->isSwitchable($column->name)) 80 |
81 | getRawValue($column->name)) checked @endif> 82 | 83 |
84 | @else 85 | {{ $item->getValue($column->name) }} 86 | @endif 87 |
91 | @foreach($instance->getEachActions() as $action => $info) 92 | @if ($info['type'] == 'url') 93 | @if(Auth::user()->canVisit($info['url'])) 94 | 98 | @endif 99 | @else 100 | @if(Auth::user()->canVisit(action($controller."@admin", ["action" => $action]))) 101 | 105 | @endif 106 | @endif 107 | @endforeach 108 |
113 | 124 | 168 | @endsection 169 | -------------------------------------------------------------------------------- /src/views/login.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 用户登陆 10 | 11 | 12 | 29 | 30 | 31 |
32 |
33 |

34 |
35 | 后台管理系统登陆 36 |
37 |

38 |
39 | {{ csrf_field() }} 40 |
41 |
42 |
43 | 44 | 45 |
46 |
47 |
48 |
49 | 50 | 51 |
52 |
53 | 54 |
55 | 56 | @if (session('error')) 57 |
{{ session('error') }}
58 | @endif 59 |
60 |
61 |
62 | 63 | 64 | 65 | --------------------------------------------------------------------------------