layout.html 31 KB

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