layout.html 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. {% block head %}
  5. <style>
  6. /* Loading Spinner */
  7. .spinner{margin:0;width:70px;height:18px;margin:-35px 0 0 -9px;position:absolute;top:50%;left:50%;text-align:center}.spinner > div{width:18px;height:18px;background-color:#333;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.spinner .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.spinner .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes bouncedelay{0%,80%,100%{-webkit-transform:scale(0.0)}40%{-webkit-transform:scale(1.0)}}@keyframes bouncedelay{0%,80%,100%{transform:scale(0.0);-webkit-transform:scale(0.0)}40%{transform:scale(1.0);-webkit-transform:scale(1.0)}}
  8. .affix {
  9. top: 10px;
  10. position: sticky;
  11. }
  12. .affix-top {
  13. }
  14. .affix-bottom {
  15. }
  16. .alert-top {
  17. display: none;
  18. position: fixed !important;
  19. float: right !important;
  20. right: 0 !important;
  21. z-index: 9999 !important;
  22. margin-right: 30px !important;
  23. padding-top: .5rem !important;
  24. padding-bottom: .5rem !important;
  25. }
  26. .panel-gray {
  27. -webkit-filter:grayscale(100%);
  28. -moz-filter:grayscale(100%);
  29. -ms-filter:grayscale(100%);
  30. -o-filter:grayscale(100%);
  31. filter:grayscale(100%);
  32. filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
  33. }
  34. .dropdown-menu {
  35. min-width: 100% !important;
  36. }
  37. @font-face {
  38. font-family: 'Baskerville';
  39. src: url('/static/fonts/Baskerville/Baskerville-Italic.eot');
  40. src: url('/static/fonts/Baskerville/Baskerville-Italic.eot?#iefix') format('embedded-opentype'),
  41. url('/static/fonts/Baskerville/Baskerville-Italic.woff2') format('woff2'),
  42. url('/static/fonts/Baskerville/Baskerville-Italic.woff') format('woff'),
  43. url('/static/fonts/Baskerville/Baskerville-Italic.ttf') format('truetype'),
  44. url('/static/fonts/Baskerville/Baskerville-Italic.svg#Baskerville-Italic') format('svg');
  45. font-weight: normal;
  46. font-style: italic;
  47. }
  48. .a-disabled {
  49. color: #5e6c73 !important;
  50. opacity: 0.5;
  51. cursor: default;
  52. pointer-events: none;
  53. }
  54. select {
  55. padding: 0 0 !important;
  56. }
  57. option {
  58. font-weight: normal;
  59. display: block;
  60. white-space: pre;
  61. min-height: 1.2em;
  62. padding: 0 2px 1px;
  63. }
  64. </style>
  65. <meta charset="UTF-8">
  66. <!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
  67. <title>JimV</title>
  68. <meta name="description" content="">
  69. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes">
  70. <!-- Favicons -->
  71. <link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ url_for('static', filename='images/icons/JimV-icon_144X144.png') }}">
  72. <link rel="apple-touch-icon-precomposed" sizes="114x114" href="{{ url_for('static', filename='images/icons/JimV-icon_114X114.png') }}">
  73. <link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{ url_for('static', filename='images/icons/JimV-icon_72X72.png') }}">
  74. <link rel="apple-touch-icon-precomposed" href="{{ url_for('static', filename='images/icons/JimV-icon_57X57.png') }}">
  75. <link rel="shortcut icon" href="{{ url_for('static', filename='images/icons/JimV-icon_32X32.png') }}">
  76. <link rel="Bookmark" href="favicon.ico">
  77. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/css/bootstrap.min.css') }}">
  78. <!-- HELPERS -->
  79. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/animate.css') }}">
  80. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/backgrounds.css') }}">
  81. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/boilerplate.css') }}">
  82. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/border-radius.css') }}">
  83. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/grid.css') }}">
  84. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/page-transitions.css') }}">
  85. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/spacing.css') }}">
  86. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/typography.css') }}">
  87. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/utils.css') }}">
  88. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/colors.css') }}">
  89. <!-- ELEMENTS -->
  90. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/badges.css') }}">
  91. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/buttons.css') }}">
  92. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/content-box.css') }}">
  93. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/dashboard-box.css') }}">
  94. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/forms.css') }}">
  95. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/images.css') }}">
  96. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/info-box.css') }}">
  97. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/invoice.css') }}">
  98. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/loading-indicators.css') }}">
  99. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/menus.css') }}">
  100. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/panel-box.css') }}">
  101. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/response-messages.css') }}">
  102. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/responsive-tables.css') }}">
  103. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/ribbon.css') }}">
  104. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/social-box.css') }}">
  105. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/tables.css') }}">
  106. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/tile-box.css') }}">
  107. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='elements/timeline.css') }}">
  108. <!-- ICONS -->
  109. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons/whhg-font/css/whhg.css') }}">
  110. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons-min/fontawesome/fontawesome.css') }}">
  111. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons-min/linecons/linecons.css') }}">
  112. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons-min/spinnericon/spinnericon.css') }}">
  113. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons/iconic/iconic.css') }}">
  114. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons/elusive/elusive.css') }}">
  115. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons/meteocons/meteocons.css') }}">
  116. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='icons/typicons/typicons.css') }}">
  117. <!-- Components theme -->
  118. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='themes/components/default.css') }}">
  119. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='themes/components/border-radius.css') }}">
  120. <!-- WIDGETS -->
  121. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/accordion-ui/accordion.css') }}">
  122. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/calendar/calendar.css') }}">
  123. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/carousel/carousel.css') }}">
  124. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/charts/justgage/justgage.css') }}">
  125. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/charts/morris/morris.css') }}">
  126. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/charts/piegage/piegage.css') }}">
  127. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/charts/xcharts/xcharts.css') }}">
  128. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/chosen/chosen.css') }}">
  129. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/colorpicker/colorpicker.css') }}">
  130. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/datatable/datatable.css') }}">
  131. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/datepicker/datepicker.css') }}">
  132. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/datepicker-ui/datepicker.css') }}">
  133. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/daterangepicker/daterangepicker.css') }}">
  134. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/dialog/dialog.css') }}">
  135. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/dropdown/dropdown.css') }}">
  136. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/dropzone/dropzone.css') }}">
  137. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/file-input/fileinput.css') }}">
  138. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/input-switch/inputswitch.css') }}">
  139. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/input-switch/inputswitch-alt.css') }}">
  140. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/ionrangeslider/ionrangeslider.css') }}">
  141. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/ionrangeslider/sprite-skin-modern.css') }}">
  142. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/jcrop/jcrop.css') }}">
  143. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/jgrowl-notifications/jgrowl.css') }}">
  144. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/loading-bar/loadingbar.css') }}">
  145. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/maps/vector-maps/vectormaps.css') }}">
  146. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/markdown/markdown.css') }}">
  147. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/modal/modal.css') }}">
  148. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/multi-upload/fileupload.css') }}">
  149. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/nestable/nestable.css') }}">
  150. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/noty-notifications/noty.css') }}">
  151. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/popover/popover.css') }}">
  152. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/pretty-photo/prettyphoto.css') }}">
  153. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/progressbar/progressbar.css') }}">
  154. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/range-slider/rangeslider.css') }}">
  155. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/slidebars/slidebars.css') }}">
  156. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/slider-ui/slider.css') }}">
  157. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/summernote-wysiwyg/summernote-wysiwyg.css') }}">
  158. <!--<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/tabs-ui/tabs.css') }}">-->
  159. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/theme-switcher/themeswitcher.css') }}">
  160. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/timepicker/timepicker.css') }}">
  161. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/tocify/tocify.css') }}">
  162. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/tooltip/tooltip.css') }}">
  163. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/touchspin/touchspin.css') }}">
  164. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/uniform/uniform.css') }}">
  165. <!--<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/wizard/wizard.css') }}">-->
  166. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widgets/xeditable/xeditable.css') }}">
  167. <!-- SNIPPETS -->
  168. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/chat.css') }}">
  169. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/files-box.css') }}">
  170. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/login-box.css') }}">
  171. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/notification-box.css') }}">
  172. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/progress-box.css') }}">
  173. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/todo.css') }}">
  174. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/user-profile.css') }}">
  175. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='snippets/mobile-navigation.css') }}">
  176. <!-- APPLICATIONS -->
  177. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='applications/mailbox.css') }}">
  178. <!-- Admin theme -->
  179. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='themes/admin/layout.css') }}">
  180. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='themes/admin/color-schemes/default.css') }}">
  181. <!-- Admin responsive -->
  182. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/responsive-elements.css') }}">
  183. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='helpers/admin-responsive.css') }}">
  184. <!-- Latest compiled and minified CSS -->
  185. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap-select/css/bootstrap-select.min.css') }}">
  186. <!-- smartwizard CSS -->
  187. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='smartwizard/css/smart_wizard.min.css') }}">
  188. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='smartwizard/css/smart_wizard_theme_arrows.min.css') }}">
  189. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='smartwizard/css/smart_wizard_theme_circles.min.css') }}">
  190. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='smartwizard/css/smart_wizard_theme_dots.min.css') }}">
  191. <!-- formvalidation CSS -->
  192. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='formvalidation/css/formValidation.min.css') }}">
  193. <!-- Multi-select CSS -->
  194. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='multi-select/css/multi-select.css') }}">
  195. <!-- JimV -->
  196. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/icons.css') }}">
  197. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/host-table.css') }}">
  198. <!-- JS Core -->
  199. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-core.js') }}"></script>
  200. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-ui-widget.js') }}"></script>
  201. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-ui-mouse.js') }}"></script>
  202. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-ui-position.js') }}"></script>
  203. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/modernizr.js') }}"></script>
  204. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-cookie.js') }}"></script>
  205. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-cookie.js') }}"></script>
  206. <script type="text/javascript">
  207. function alter_success(message) {
  208. $('#alert-success-tip').text(message);
  209. $('#alert-success-tip').css('display', 'block');
  210. setTimeout(function () {
  211. $('#alert-success-tip').css('display', 'none');
  212. }, 3000);
  213. }
  214. function alter_warning(message) {
  215. $('#alert-warning-tip').text(message);
  216. $('#alert-warning-tip').css('display', 'block');
  217. setTimeout(function () {
  218. $('#alert-warning-tip').css('display', 'none');
  219. }, 3000);
  220. }
  221. function alter_danger(message) {
  222. $('#alert-danger-tip').text(message);
  223. $('#alert-danger-tip').css('display', 'block');
  224. setTimeout(function () {
  225. $('#alert-danger-tip').css('display', 'none');
  226. }, 3000);
  227. }
  228. function logout() {
  229. $.ajax({
  230. url: '/api/user/_sign_out',
  231. type: 'GET',
  232. dataType: 'json',
  233. error: function () {
  234. alter_danger('注销失败!');
  235. },
  236. success : function(data, textStatus, xhr) {
  237. window.location.href="/";
  238. }
  239. })
  240. }
  241. </script>
  242. {% endblock head %}
  243. </head>
  244. <body>
  245. <div id="sb-site" style="height: 100%;">
  246. <!--<div id="loading">
  247. <div class="spinner">
  248. <div class="bounce1"></div>
  249. <div class="bounce2"></div>
  250. <div class="bounce3"></div>
  251. </div>
  252. </div>-->
  253. {% block body %}
  254. <div id="page-wrapper">
  255. <div id="page-header" class="font-inverse" style="background-color: rgba(2, 117, 216, 0.88)!important;">
  256. <div id="header-logo" class="logo-bg">
  257. <a href="/" class="logo-content-big" title="JimV" style="font-family: Baskerville; font-size: 60px; color: #fff; text-decoration: none;">
  258. JimV
  259. </a>
  260. <a id="close-sidebar" href="#" title="Close sidebar">
  261. <i class="glyph-icon icon-angle-left"></i>
  262. </a>
  263. </div>
  264. <div id="header-nav-left">
  265. <div class="user-account-btn dropdown">
  266. <a href="#" title="Admin" class="user-profile clearfix" data-toggle="dropdown">
  267. <img width="28" src="{{ url_for('static', filename='avatar/Burung-Pelatuk_144x144.png') }}" alt="Avatar">
  268. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</span>
  269. <i class="glyph-icon icon-angle-down"></i>
  270. </a>
  271. <div class="dropdown-menu float-left">
  272. <div class="box-xs">
  273. <div class="login-box clearfix">
  274. <div class="user-img">
  275. <a href="#" title="" class="change-img">Change photo</a>
  276. <img src="{{ url_for('static', filename='avatar/Burung-Pelatuk_144x144.png') }}" alt="Avatar">
  277. </div>
  278. <div class="user-info">
  279. <span>
  280. Admin
  281. <i>管理员</i>
  282. </span>
  283. </div>
  284. </div>
  285. <div class="divider"></div>
  286. <ul class="reset-ul mrg5B" style="text-align: center;">
  287. <li>
  288. <a href="{{ url_for('v_misc.change_password') }}">
  289. 修改密码
  290. </a>
  291. </li>
  292. </ul>
  293. <div class="pad5A button-pane button-pane-alt text-center">
  294. <a href="#" class="btn display-block font-normal btn-danger" onclick="logout();">
  295. <i class="glyph-icon icon-power-off"></i>
  296. 安全退出
  297. </a>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. </div><!-- #header-nav-left -->
  303. <div id="header-nav-right">
  304. <a class="header-btn" id="logout-btn" href="#" title="安全退出" onclick="logout();">
  305. <i class="glyph-icon icon-power-off"></i>
  306. </a>
  307. </div><!-- #header-nav-right -->
  308. </div><!-- #page-header -->
  309. {% block page_sidebar %}
  310. <div id="page-sidebar" style="margin-top: 20px;">
  311. <div class="scroll-sidebar">
  312. <ul id="sidebar-menu" data-spy="affix" data-offset-top="10">
  313. <li class="header"><span>虚拟化管理平台</span></li>
  314. <li>
  315. <a href="{{ url_for('v_dashboard.show') }}" title="Dashboard">
  316. <i class="glyph-icon icon-linecons-shop"></i>
  317. <span>Dashboard</span>
  318. </a>
  319. </li>
  320. <li>
  321. <a href="{{ url_for('v_guests.show') }}" title="虚拟机实例">
  322. <i class="glyph-icon icon-linecons-cloud"></i>
  323. <span>虚拟机实例</span>
  324. </a>
  325. </li>
  326. <li>
  327. <a href="{{ url_for('v_disks.show') }}" title="磁盘实例列表">
  328. <i class="glyph-icon icon-hdd-o"></i>
  329. <span>磁盘</span>
  330. </a>
  331. </li>
  332. <li>
  333. <a href="{{ url_for('v_hosts.show') }}" title="计算节点列表">
  334. <i class="glyph-icon icon-linecons-desktop"></i>
  335. <span>计算节点</span>
  336. </a>
  337. </li>
  338. <li>
  339. <a href="{{ url_for('v_logs.show') }}" title="JimV 虚拟化平台日志">
  340. <i class="glyph-icon icon-linecons-eye"></i>
  341. <span>平台日志</span>
  342. </a>
  343. </li>
  344. <li>
  345. <a href="{{ url_for('v_snapshots.show') }}" title="虚拟机实例快照列表">
  346. <i class="glyph-icon icon-linecons-camera"></i>
  347. <span>实例快照</span>
  348. </a>
  349. </li>
  350. <li>
  351. <a href="{{ url_for('v_os_templates_image.show') }}" title="虚拟机模板镜像列表">
  352. <i class="glyph-icon icon-linecons-inbox"></i>
  353. <span>模板镜像</span>
  354. </a>
  355. </li>
  356. <li>
  357. <a href="{{ url_for('v_ssh_keys.show') }}" title="SSH Keys">
  358. <i class="glyph-icon icon-linecons-key"></i>
  359. <span>SSH Keys</span>
  360. </a>
  361. </li>
  362. <li>
  363. <a href="{{ url_for('v_config.show') }}" title="JimV 虚拟化平台系统配置">
  364. <i class="glyph-icon icon-linecons-cog"></i>
  365. <span>系统配置</span>
  366. </a>
  367. </li>
  368. </ul><!-- #sidebar-menu -->
  369. </div><!-- #scroll-sidebar -->
  370. </div><!-- #page-sidebar -->
  371. {% endblock page_sidebar %}
  372. <div id="page-content-wrapper">
  373. <div id="alert-success-tip" class="alert alert-success alert-top">
  374. </div>
  375. <div id="alert-warning-tip" class="alert alert-warning alert-top">
  376. </div>
  377. <div id="alert-danger-tip" class="alert alert-danger alert-top">
  378. </div>
  379. <div id="page-content">
  380. <div class="container">
  381. {% block content %}{% endblock %}
  382. </div>
  383. </div>
  384. </div>
  385. </div>
  386. {% endblock body %}
  387. <!-- WIDGETS -->
  388. <script type="text/javascript" src="{{ url_for('static', filename='tether/js/tether.js') }}"></script>
  389. <script type="text/javascript" src="{{ url_for('static', filename='bootstrap/js/bootstrap.min.js') }}"></script>
  390. <script type="text/javascript" src="{{ url_for('static', filename='bootstrap/js/affix.js') }}"></script>
  391. <!-- <script type="text/javascript" src="{{ url_for('static', filename='bootstrap/js/bootstrap-tooltip.js') }}"></script> -->
  392. <!-- Bootstrap Dropdown -->
  393. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/dropdown/dropdown.js') }}"></script> -->
  394. <!-- Bootstrap Tooltip -->
  395. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/tooltip/tooltip.js') }}"></script> -->
  396. <!-- Bootstrap Popover -->
  397. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/popover/popover.js') }}"></script> -->
  398. <!-- Bootstrap Progress Bar -->
  399. <script type="text/javascript" src="{{ url_for('static', filename='widgets/progressbar/progressbar.js') }}"></script>
  400. <!-- Bootstrap Buttons -->
  401. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/button/button.js') }}"></script> -->
  402. <!-- Bootstrap Collapse -->
  403. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/collapse/collapse.js') }}"></script> -->
  404. <!-- Superclick -->
  405. <script type="text/javascript" src="{{ url_for('static', filename='widgets/superclick/superclick.js') }}"></script>
  406. <!-- Input switch alternate -->
  407. <script type="text/javascript" src="{{ url_for('static', filename='widgets/input-switch/inputswitch-alt.js') }}"></script>
  408. <script type="text/javascript" src="{{ url_for('static', filename='widgets/ionrangeslider/ionrangeslider.js') }}"></script>
  409. <!-- Bootstrap Wizard -->
  410. <!--<script type="text/javascript" src="{{ url_for('static', filename='widgets/wizard/wizard.js') }}"></script>
  411. <script type="text/javascript" src="{{ url_for('static', filename='widgets/wizard/wizard-demo.js') }}"></script>-->
  412. <!-- Boostrap Tabs -->
  413. <!--<script type="text/javascript" src="{{ url_for('static', filename='widgets/tabs/tabs.js') }}"></script>-->
  414. <!-- Slim scroll -->
  415. <script type="text/javascript" src="{{ url_for('static', filename='widgets/slimscroll/slimscroll.js') }}"></script>
  416. <!-- Slidebars -->
  417. <script type="text/javascript" src="{{ url_for('static', filename='widgets/slidebars/slidebars.js') }}"></script>
  418. <script type="text/javascript" src="{{ url_for('static', filename='widgets/slidebars/slidebars-demo.js') }}"></script>
  419. <!-- PieGage -->
  420. <script type="text/javascript" src="{{ url_for('static', filename='widgets/charts/piegage/piegage.js') }}"></script>
  421. <script type="text/javascript" src="{{ url_for('static', filename='widgets/charts/piegage/piegage-demo.js') }}"></script>
  422. <!-- Screenfull -->
  423. <script type="text/javascript" src="{{ url_for('static', filename='widgets/screenfull/screenfull.js') }}"></script>
  424. <!-- Content box -->
  425. <script type="text/javascript" src="{{ url_for('static', filename='widgets/content-box/contentbox.js') }}"></script>
  426. <!-- Overlay -->
  427. <script type="text/javascript" src="{{ url_for('static', filename='widgets/overlay/overlay.js') }}"></script>
  428. <!-- Widgets init for demo -->
  429. <script type="text/javascript" src="{{ url_for('static', filename='js-init/widgets-init.js') }}"></script>
  430. <!-- Theme layout -->
  431. <script type="text/javascript" src="{{ url_for('static', filename='themes/admin/layout.js') }}"></script>
  432. <!-- Theme switcher -->
  433. <script type="text/javascript" src="{{ url_for('static', filename='widgets/theme-switcher/themeswitcher.js') }}"></script>
  434. <!-- Chosen -->
  435. <script type="text/javascript" src="{{ url_for('static', filename='widgets/chosen/chosen.js') }}"></script>
  436. <script type="text/javascript" src="{{ url_for('static', filename='widgets/chosen/chosen-demo.js') }}"></script>
  437. <!-- Touchspin -->
  438. <script type="text/javascript" src="{{ url_for('static', filename='widgets/touchspin/touchspin.js') }}"></script>
  439. <script type="text/javascript" src="{{ url_for('static', filename='js-core/echarts.min.js') }}"></script>
  440. <script type="text/javascript" src="{{ url_for('static', filename='js-core/date_format.js') }}"></script>
  441. <!-- Latest compiled and minified JavaScript -->
  442. <script type="text/javascript" src="{{ url_for('static', filename='bootstrap-select/js/bootstrap-select.min.js') }}"></script>
  443. <!-- (Optional) Latest compiled and minified JavaScript translation files -->
  444. <!--<script type="text/javascript" src="{{ url_for('static', filename='bootstrap-select/js/i18n/defaults-zh_CN.min.js') }}"></script>-->
  445. <!-- smartwizard JavaScript -->
  446. <script type="text/javascript" src="{{ url_for('static', filename='smartwizard/js/jquery.smartWizard.min.js') }}"></script>
  447. <!-- formvalidation JavaScript -->
  448. <script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/formValidation.min.js') }}"></script>
  449. <script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/framework/bootstrap4.min.js') }}"></script>
  450. <!--<script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/formValidation.popular.min.js') }}"></script>-->
  451. <script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/language/zh_CN.js') }}"></script>
  452. <!-- Multi-select -->
  453. <script type="text/javascript" src="{{ url_for('static', filename='multi-select/js/jquery.multi-select.js') }}"></script>
  454. <!-- Quicksearch -->
  455. <script type="text/javascript" src="{{ url_for('static', filename='js-core/jquery.quicksearch.js') }}"></script>
  456. <!-- jsPlumb -->
  457. <script type="text/javascript" src="{{ url_for('static', filename='jsplumb/jsplumb.min.js') }}"></script>
  458. <!-- JS-URL -->
  459. <script type="text/javascript" src="{{ url_for('static', filename='js-core/url.js') }}"></script>
  460. <!-- JimV -->
  461. <script type="text/javascript" src="{{ url_for('static', filename='utils.js') }}"></script>
  462. </div>
  463. </body>
  464. </html>