disks.html 7.3 KB

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