disks.html 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <div class="ts-content">
  2. <div class="ts-container is-padded">
  3. <div id="disk-list">
  4. <div class="ts-box ts-content disk-info">
  5. <span class="ts-icon is-spinning is-circle-notch-icon"></span>
  6. <span class="has-start-padded-small" i18n>
  7. Loading...
  8. </span>
  9. </div>
  10. </div>
  11. <div class="ts-wrap is-end-aligned">
  12. <button id="refresh_disk_list_btn" class="ts-button is-start-icon has-top-spaced-large" >
  13. <span class="ts-icon is-rotate-icon"></span>
  14. <span i18n>
  15. Refresh
  16. // 重新整理
  17. </button>
  18. </div>
  19. </div>
  20. </div>
  21. <script>
  22. function humanFileSize(size) {
  23. var i = size == 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024));
  24. return +((size / Math.pow(1024, i)).toFixed(1)) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];
  25. }
  26. $("#refresh_disk_list_btn").click(function(){
  27. $("#disk-list").html("");
  28. loadDiskInfo();
  29. msgbox(i18nc('disk_info_refreshed'));
  30. });
  31. function loadDiskInfo(){
  32. $.get("./api/info/list", function(data){
  33. if (data) {
  34. var disks = data;
  35. var diskList = $("#disk-list");
  36. diskList.empty();
  37. for (var i = 0; i < disks.length; i++) {
  38. let disk = disks[i];
  39. let partitionDOM = "";
  40. let partitionTabs = "";
  41. //Render the partition tabs
  42. for (var j = 0; j < disk.partitions.length; j++) {
  43. let partition = disk.partitions[j];
  44. partitionTabs += `<a class="item ${j==0?"is-active":""}" data-tab="diskinfo_partition_${partition.name}">${partition.name}</a>`;
  45. }
  46. //Render the partition dom elements
  47. for (var j = 0; j < disk.partitions.length; j++) {
  48. let partition = disk.partitions[j];
  49. partitionDOM += `<div id="diskinfo_partition_${partition.name}" class="ts-box has-top-spaced-small">
  50. <div class="ts-content">
  51. <div class="ts-header">${partition.name}</div>
  52. <div class="ts-grid mobile:is-stacked">
  53. <div class="column is-fluid">
  54. <div class="ts-text is-description has-top-spaced-small">
  55. UUID: ${partition.uuid} <br>
  56. PartUUID: ${partition.partuuid} <br>
  57. PartLabel: ${partition.partlabel} <br>
  58. Path: ${partition.path} <br>
  59. Block Size: ${partition.blocksize} <br>
  60. Block Type: ${partition.blocktype} <br>
  61. File System Type: ${partition.fstype} <br>
  62. Mount Point: ${partition.mountpoint==undefined?"":partition.mountpoint} <br>
  63. </div>
  64. </div>
  65. <div class="column is-6-wide">
  66. <div class="ts-wrap is-middle-aligned has-top-spaced-small">
  67. <div class="ts-gauge is-small is-circular">
  68. <div class="bar" style="--value: ${parseInt(partition.used / partition.size * 100)}">
  69. <div class="text">${parseInt(partition.used / partition.size * 100)}%</div>
  70. </div>
  71. </div>
  72. <div>
  73. <div class="ts-text is-bold" i18n>
  74. Used Space
  75. // 已使用空間
  76. </div>
  77. ${humanFileSize(partition.used)} / ${humanFileSize(partition.size)}
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>`;
  84. }
  85. $(diskList).append(`<div class="ts-box ts-content has-top-spaced-small disk-info">
  86. <div class="ts-grid mobile:is-stacked">
  87. <div class="column is-fluid">
  88. <div class="ts-item">
  89. <div class="ts-header">${disk.model}</div>
  90. <div class="ts-text is-description has-top-spaced-small">
  91. ${disk.identifier}
  92. </div>
  93. <span>/dev/${disk.name}</span>
  94. </div>
  95. </div>
  96. <div class="column is-6-wide">
  97. <div class="ts-wrap is-middle-aligned has-top-spaced-small">
  98. <div class="ts-gauge is-small is-circular">
  99. <div class="bar" style="--value: ${parseInt(disk.used / disk.size * 100)}">
  100. <div class="text">${parseInt(disk.used / disk.size * 100)}%</div>
  101. </div>
  102. </div>
  103. <div>
  104. <div class="ts-text is-bold" i18n>
  105. Total Space Used
  106. // 總空間使用率
  107. </div>
  108. ${humanFileSize(disk.used)} / ${humanFileSize(disk.size)}
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. <div class="has-top-spaced-big">
  114. <div class="ts-tab is-segmented">
  115. ${partitionTabs}
  116. </div>
  117. ${partitionDOM}
  118. </div>
  119. </div>`);
  120. }
  121. relocale();
  122. } else {
  123. console.error("Failed to load disk info: " + data.message);
  124. }
  125. });
  126. }
  127. loadDiskInfo();
  128. </script>