layout.html 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  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. <!-- formvalidation CSS -->
  173. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='formvalidation/css/formValidation.min.css') }}">
  174. <!-- JimV -->
  175. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/icons.css') }}">
  176. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/host-table.css') }}">
  177. <!-- JS Core -->
  178. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-core.js') }}"></script>
  179. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-ui-widget.js') }}"></script>
  180. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-ui-mouse.js') }}"></script>
  181. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-ui-position.js') }}"></script>
  182. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/modernizr.js') }}"></script>
  183. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-cookie.js') }}"></script>
  184. <script type="text/javascript" src="{{ url_for('static', filename='js-core-min/jquery-cookie.js') }}"></script>
  185. <script type="text/javascript">
  186. function alter_success(message) {
  187. $('#alert-success-tip').text(message);
  188. $('#alert-success-tip').css('display', 'block');
  189. setTimeout(function () {
  190. $('#alert-success-tip').css('display', 'none');
  191. }, 3000);
  192. }
  193. function alter_warning(message) {
  194. $('#alert-warning-tip').text(message);
  195. $('#alert-warning-tip').css('display', 'block');
  196. setTimeout(function () {
  197. $('#alert-warning-tip').css('display', 'none');
  198. }, 3000);
  199. }
  200. function alter_danger(message) {
  201. $('#alert-danger-tip').text(message);
  202. $('#alert-danger-tip').css('display', 'block');
  203. setTimeout(function () {
  204. $('#alert-danger-tip').css('display', 'none');
  205. }, 3000);
  206. }
  207. function logout() {
  208. $.ajax({
  209. url: '/api/user/_sign_out',
  210. type: 'GET',
  211. dataType: 'json',
  212. error: function () {
  213. alter_danger('注销失败!');
  214. },
  215. success : function(data, textStatus, xhr) {
  216. window.location.href="/";
  217. }
  218. })
  219. }
  220. </script>
  221. {% endblock head %}
  222. </head>
  223. <body>
  224. <div id="sb-site" style="height: 100%;">
  225. <!--<div id="loading">
  226. <div class="spinner">
  227. <div class="bounce1"></div>
  228. <div class="bounce2"></div>
  229. <div class="bounce3"></div>
  230. </div>
  231. </div>-->
  232. {% block body %}
  233. <div id="page-wrapper">
  234. <div id="page-header" class="font-inverse" style="background-color: rgba(2, 117, 216, 0.88)!important;">
  235. <div id="header-logo" class="logo-bg">
  236. <a href="/" class="logo-content-big" title="JimV" style="font-family: Baskerville; font-size: 60px; color: #fff; text-decoration: none;">
  237. JimV
  238. </a>
  239. <a id="close-sidebar" href="#" title="Close sidebar">
  240. <i class="glyph-icon icon-angle-left"></i>
  241. </a>
  242. </div>
  243. <div id="header-nav-left">
  244. <div class="user-account-btn dropdown">
  245. <a href="#" title="Admin" class="user-profile clearfix" data-toggle="dropdown">
  246. <img width="28" src="{{ url_for('static', filename='avatar/Burung-Pelatuk_144x144.png') }}" alt="Avatar">
  247. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</span>
  248. <i class="glyph-icon icon-angle-down"></i>
  249. </a>
  250. <div class="dropdown-menu float-left">
  251. <div class="box-xs">
  252. <div class="login-box clearfix">
  253. <div class="user-img">
  254. <a href="#" title="" class="change-img">Change photo</a>
  255. <img src="{{ url_for('static', filename='avatar/Burung-Pelatuk_144x144.png') }}" alt="Avatar">
  256. </div>
  257. <div class="user-info">
  258. <span>
  259. Admin
  260. <i>管理员</i>
  261. </span>
  262. </div>
  263. </div>
  264. <div class="divider"></div>
  265. <ul class="reset-ul mrg5B" style="text-align: center;">
  266. <li>
  267. <a href="{{ url_for('v_misc.change_password') }}">
  268. 修改密码
  269. </a>
  270. </li>
  271. </ul>
  272. <div class="pad5A button-pane button-pane-alt text-center">
  273. <a href="#" class="btn display-block font-normal btn-danger" onclick="logout();">
  274. <i class="glyph-icon icon-power-off"></i>
  275. 安全退出
  276. </a>
  277. </div>
  278. </div>
  279. </div>
  280. </div>
  281. </div><!-- #header-nav-left -->
  282. <div id="header-nav-right">
  283. <a class="header-btn" id="logout-btn" href="#" title="安全退出" onclick="logout();">
  284. <i class="glyph-icon icon-power-off"></i>
  285. </a>
  286. </div><!-- #header-nav-right -->
  287. </div><!-- #page-header -->
  288. {% block page_sidebar %}
  289. <div id="page-sidebar" style="margin-top: 20px;">
  290. <div class="scroll-sidebar">
  291. <ul id="sidebar-menu" data-spy="affix" data-offset-top="10">
  292. <li class="header"><span>虚拟化管理平台</span></li>
  293. <li>
  294. <a href="{{ url_for('v_dashboard.show') }}" title="Dashboard">
  295. <i class="glyph-icon icon-linecons-shop"></i>
  296. <span>Dashboard</span>
  297. </a>
  298. </li>
  299. <li>
  300. <a href="#" title="虚拟机">
  301. <i class="glyph-icon icon-linecons-cloud"></i>
  302. <span>虚拟机</span>
  303. </a>
  304. <div class="sidebar-submenu">
  305. <ul>
  306. <li><a href="{{ url_for('v_guests.show') }}" title="虚拟机实例列表"><span>实例</span></a></li>
  307. <li><a href="{{ url_for('v_guests.show_guests_boot_jobs') }}" title="虚拟机启动作业列表"><span>启动作业</span></a></li>
  308. </ul>
  309. </div><!-- .sidebar-submenu -->
  310. </li>
  311. <li>
  312. <a href="{{ url_for('v_disks.show') }}" title="磁盘实例列表">
  313. <i class="glyph-icon icon-hdd-o"></i>
  314. <span>磁盘</span>
  315. </a>
  316. </li>
  317. <li>
  318. <a href="{{ url_for('v_hosts.show') }}" title="计算节点列表">
  319. <i class="glyph-icon icon-linecons-desktop"></i>
  320. <span>计算节点</span>
  321. </a>
  322. </li>
  323. <li>
  324. <a href="{{ url_for('v_logs.show') }}" title="JimV 虚拟化平台日志">
  325. <i class="glyph-icon icon-linecons-eye"></i>
  326. <span>平台日志</span>
  327. </a>
  328. </li>
  329. <li>
  330. <a href="{{ url_for('v_os_templates.show') }}" title="虚拟机模板列表">
  331. <i class="glyph-icon icon-linecons-inbox"></i>
  332. <span>虚拟机模板</span>
  333. </a>
  334. </li>
  335. <li>
  336. <a href="#" title="虚拟机启动作业">
  337. <i class="glyph-icon icon-linecons-paper-plane"></i>
  338. <span>启动作业</span>
  339. </a>
  340. <div class="sidebar-submenu">
  341. <ul>
  342. <li><a href="{{ url_for('v_boot_jobs.show') }}" title="启动作业列表"><span>启动作业</span></a></li>
  343. <li><a href="{{ url_for('v_operate_rules.show') }}" title="启动作业操作细则"><span>启动作业操作细则</span></a></li>
  344. </ul>
  345. </div><!-- .sidebar-submenu -->
  346. </li>
  347. <li>
  348. <a href="{{ url_for('v_config.show') }}" title="JimV 虚拟化平台系统配置">
  349. <i class="glyph-icon icon-linecons-cog"></i>
  350. <span>系统配置</span>
  351. </a>
  352. </li>
  353. </ul><!-- #sidebar-menu -->
  354. </div><!-- #scroll-sidebar -->
  355. </div><!-- #page-sidebar -->
  356. {% endblock page_sidebar %}
  357. <div id="page-content-wrapper">
  358. <div id="alert-success-tip" class="alert alert-success alert-top">
  359. </div>
  360. <div id="alert-warning-tip" class="alert alert-warning alert-top">
  361. </div>
  362. <div id="alert-danger-tip" class="alert alert-danger alert-top">
  363. </div>
  364. <div id="page-content">
  365. <div class="container">
  366. {% block content %}{% endblock %}
  367. </div>
  368. </div>
  369. </div>
  370. </div>
  371. {% endblock body %}
  372. <!-- WIDGETS -->
  373. <script type="text/javascript" src="{{ url_for('static', filename='tether/js/tether.js') }}"></script>
  374. <script type="text/javascript" src="{{ url_for('static', filename='bootstrap/js/bootstrap.min.js') }}"></script>
  375. <script type="text/javascript" src="{{ url_for('static', filename='bootstrap/js/affix.js') }}"></script>
  376. <!-- <script type="text/javascript" src="{{ url_for('static', filename='bootstrap/js/bootstrap-tooltip.js') }}"></script> -->
  377. <!-- Bootstrap Dropdown -->
  378. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/dropdown/dropdown.js') }}"></script> -->
  379. <!-- Bootstrap Tooltip -->
  380. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/tooltip/tooltip.js') }}"></script> -->
  381. <!-- Bootstrap Popover -->
  382. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/popover/popover.js') }}"></script> -->
  383. <!-- Bootstrap Progress Bar -->
  384. <script type="text/javascript" src="{{ url_for('static', filename='widgets/progressbar/progressbar.js') }}"></script>
  385. <!-- Bootstrap Buttons -->
  386. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/button/button.js') }}"></script> -->
  387. <!-- Bootstrap Collapse -->
  388. <!-- <script type="text/javascript" src="{{ url_for('static', filename='widgets/collapse/collapse.js') }}"></script> -->
  389. <!-- Superclick -->
  390. <script type="text/javascript" src="{{ url_for('static', filename='widgets/superclick/superclick.js') }}"></script>
  391. <!-- Input switch alternate -->
  392. <script type="text/javascript" src="{{ url_for('static', filename='widgets/input-switch/inputswitch-alt.js') }}"></script>
  393. <!-- Bootstrap Wizard -->
  394. <!--<script type="text/javascript" src="{{ url_for('static', filename='widgets/wizard/wizard.js') }}"></script>
  395. <script type="text/javascript" src="{{ url_for('static', filename='widgets/wizard/wizard-demo.js') }}"></script>-->
  396. <!-- Boostrap Tabs -->
  397. <!--<script type="text/javascript" src="{{ url_for('static', filename='widgets/tabs/tabs.js') }}"></script>-->
  398. <!-- Slim scroll -->
  399. <script type="text/javascript" src="{{ url_for('static', filename='widgets/slimscroll/slimscroll.js') }}"></script>
  400. <!-- Slidebars -->
  401. <script type="text/javascript" src="{{ url_for('static', filename='widgets/slidebars/slidebars.js') }}"></script>
  402. <script type="text/javascript" src="{{ url_for('static', filename='widgets/slidebars/slidebars-demo.js') }}"></script>
  403. <!-- PieGage -->
  404. <script type="text/javascript" src="{{ url_for('static', filename='widgets/charts/piegage/piegage.js') }}"></script>
  405. <script type="text/javascript" src="{{ url_for('static', filename='widgets/charts/piegage/piegage-demo.js') }}"></script>
  406. <!-- Screenfull -->
  407. <script type="text/javascript" src="{{ url_for('static', filename='widgets/screenfull/screenfull.js') }}"></script>
  408. <!-- Content box -->
  409. <script type="text/javascript" src="{{ url_for('static', filename='widgets/content-box/contentbox.js') }}"></script>
  410. <!-- Overlay -->
  411. <script type="text/javascript" src="{{ url_for('static', filename='widgets/overlay/overlay.js') }}"></script>
  412. <!-- Widgets init for demo -->
  413. <script type="text/javascript" src="{{ url_for('static', filename='js-init/widgets-init.js') }}"></script>
  414. <!-- Theme layout -->
  415. <script type="text/javascript" src="{{ url_for('static', filename='themes/admin/layout.js') }}"></script>
  416. <!-- Theme switcher -->
  417. <script type="text/javascript" src="{{ url_for('static', filename='widgets/theme-switcher/themeswitcher.js') }}"></script>
  418. <!-- Chosen -->
  419. <script type="text/javascript" src="{{ url_for('static', filename='widgets/chosen/chosen.js') }}"></script>
  420. <script type="text/javascript" src="{{ url_for('static', filename='widgets/chosen/chosen-demo.js') }}"></script>
  421. <!-- Touchspin -->
  422. <script type="text/javascript" src="{{ url_for('static', filename='widgets/touchspin/touchspin.js') }}"></script>
  423. <script type="text/javascript" src="{{ url_for('static', filename='js-core/echarts.min.js') }}"></script>
  424. <script type="text/javascript" src="{{ url_for('static', filename='js-core/date_format.js') }}"></script>
  425. <!-- Latest compiled and minified JavaScript -->
  426. <script type="text/javascript" src="{{ url_for('static', filename='bootstrap-select/js/bootstrap-select.min.js') }}"></script>
  427. <!-- (Optional) Latest compiled and minified JavaScript translation files -->
  428. <!--<script type="text/javascript" src="{{ url_for('static', filename='bootstrap-select/js/i18n/defaults-zh_CN.min.js') }}"></script>-->
  429. <!-- smartwizard JavaScript -->
  430. <script type="text/javascript" src="{{ url_for('static', filename='smartwizard/js/jquery.smartWizard.min.js') }}"></script>
  431. <!-- formvalidation JavaScript -->
  432. <script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/formValidation.min.js') }}"></script>
  433. <script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/framework/bootstrap4.min.js') }}"></script>
  434. <!--<script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/formValidation.popular.min.js') }}"></script>-->
  435. <script type="text/javascript" src="{{ url_for('static', filename='formvalidation/js/language/zh_CN.js') }}"></script>
  436. <!-- JS-URL -->
  437. <script type="text/javascript" src="{{ url_for('static', filename='js-core/url.js') }}"></script>
  438. <!-- JimV -->
  439. <script type="text/javascript" src="{{ url_for('static', filename='utils.js') }}"></script>
  440. </div>
  441. </body>
  442. </html>