attr-extraction-revised.html 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. {% load static %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Attribute Extraction</title>
  8. <link rel="stylesheet" href="{% static './css/adminlte.css' %}">
  9. <link rel="stylesheet" href="{% static 'css/attr-extraction-revised.css' %}">
  10. </head>
  11. <body>
  12. {% include 'header.html' %}
  13. {% include 'sidebar.html' %}
  14. <main class="container">
  15. <header class="hero">
  16. <div class="title">
  17. <div class="title-logo" aria-hidden="true">
  18. <svg width="26" height="26" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
  19. <path d="M3 12l7-7v5h4V5l7 7-7 7v-5h-4v5l-7-7z" fill="#fff"/>
  20. </svg>
  21. </div>
  22. <div>
  23. <h1>⚒️ Attribute Extraction</h1>
  24. <div class="sub">Upload products, select attributes, and compare AI vs. existing values.</div>
  25. </div>
  26. </div>
  27. <div class="actions">
  28. <button id="uploadOpen" class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#uploadModal">Upload</button>
  29. <button id="btnReset" class="btn btn-ghost">Reset</button>
  30. <button id="btnSubmit" class="btn btn-success">Extract</button>
  31. </div>
  32. </header>
  33. <section class="card">
  34. <div class="card-header api-header-flex">
  35. <h2>API Summary</h2>
  36. <div class="download-section">
  37. <button id="downloadResultBtn" class="btn btn-secondary">Download</button>
  38. </div>
  39. </div>
  40. <div id="api-summary" class="card-body" style="display:none;">
  41. <div class="summary">
  42. <div class="stat"><div class="label">Total products</div><div id="statTotal" class="value">0</div></div>
  43. <div class="stat"><div class="label">Successful</div><div id="statOk" class="value">0</div></div>
  44. <div class="stat"><div class="label">Failed</div><div id="statKo" class="value">0</div></div>
  45. </div>
  46. </div>
  47. </section>
  48. <section class="card">
  49. <div class="card-header">
  50. <h2>Product Inventory</h2>
  51. <div class="toolbar">
  52. <div class="seg" role="tablist" aria-label="Layout switcher">
  53. <button id="btnTable" class="active" role="tab" aria-selected="true">Table</button>
  54. <button id="btnCards" role="tab" aria-selected="false">Cards</button>
  55. </div>
  56. <span id="selectionInfo" class="pill">No products selected</span>
  57. <button id="btnSelectAll" class="btn btn-secondary">Select all</button>
  58. <label class="pill">Threshold: <input id="thresholdRange" type="range" min="0" max="1" step="0.05" value="0.5"/> <strong id="thresholdValue">0.5</strong></label>
  59. <label class="pill"><input id="extract_additional" type="checkbox" checked/> Extract Additional</label>
  60. <label class="pill"><input id="process_image" type="checkbox"/> Process Image</label>
  61. <select id="mandatory-attributes" class="attribute-select" multiple></select>
  62. </div>
  63. </div>
  64. <div class="card-body">
  65. <div id="tableContainer" class="table-wrap"></div>
  66. <div id="cardsContainer" class="list" style="display:none;"></div>
  67. <div id="paginationBar" class="pagination-bar" style="display:none;"></div>
  68. </div>
  69. </section>
  70. </main>
  71. <!-- Upload Modal -->
  72. <div class="modal fade" id="uploadModal" tabindex="-1" aria-hidden="true">
  73. <div class="modal-dialog modal-lg">
  74. <div class="modal-content">
  75. <div class="modal-header">
  76. <h5 class="modal-title">Upload files</h5>
  77. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  78. </div>
  79. <div class="modal-body">
  80. <div id="dropzone" class="dropzone">
  81. <p>Drag & drop files here or browse</p>
  82. <input id="uploadFiles" type="file" multiple hidden>
  83. <div id="fileInfo" class="file-info">No files selected.</div>
  84. </div>
  85. <div class="progress mt-3">
  86. <div id="uploadBar" class="progress-bar" role="progressbar" style="width:0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
  87. </div>
  88. <div id="uploadStatus" class="mt-2 small"></div>
  89. </div>
  90. <div class="modal-footer">
  91. <button type="button" class="btn btn-ghost" data-bs-dismiss="modal">Cancel</button>
  92. <button type="button" id="uploadStart" class="btn btn-success">Start upload</button>
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. <!-- Full page loader -->
  98. <div id="full-page-loader" class="loader-overlay" style="display:none;">
  99. <div class="spinner-border text-light" role="status"></div>
  100. </div>
  101. {% include 'footer.html' %}
  102. <script src="{% static 'js/attr-extraction.js' %}"></script>
  103. </body>
  104. </html>