layout.html 31 KB

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