ai_import_modal.ejs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <div class="modal fade change-ai-preview" id="change-ai-model" data-tid="<%= tender.id %>" data-change-id="<%= change.cid || change.id %>" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="change-ai-model-title" aria-hidden="true">
  2. <div class="change-ai-hover-preview" data-ai-hover-preview hidden aria-hidden="true"><img alt=""><span data-ai-hover-status>图片加载中…</span></div>
  3. <div class="modal-dialog" role="document">
  4. <div class="modal-content">
  5. <div class="modal-header">
  6. <div><h5 class="modal-title" id="change-ai-model-title">AI 识别导入</h5><small class="text-muted">识别结果仅供参考,确认后才保存。</small></div>
  7. <button type="button" class="close" data-dismiss="modal" aria-label="关闭"><span aria-hidden="true">&times;</span></button>
  8. </div>
  9. <div class="change-ai-steps" aria-label="导入步骤">
  10. <button type="button" class="btn btn-sm" data-ai-step="1">1 选择图片</button><span>—</span>
  11. <button type="button" class="btn btn-sm" data-ai-step="2">2 预览与编辑</button><span>—</span>
  12. <button type="button" class="btn btn-sm" data-ai-step="3">3 确认保存</button>
  13. </div>
  14. <div class="modal-body">
  15. <div class="alert alert-warning" data-ai-message role="status" hidden></div>
  16. <section data-ai-panel="1">
  17. <div class="change-ai-upload-heading"><h6>选择识别图片</h6><span class="text-muted small">每次仅识别一张图片</span></div>
  18. <div class="mb-3" data-ai-existing-area hidden>
  19. <div class="ai-section-label">从已有图片附件中选择一张识别</div>
  20. <div class="change-ai-existing-list" data-ai-existing-list hidden></div>
  21. </div>
  22. <div class="ai-section-label" data-ai-upload-label hidden>或上传新图片</div>
  23. <button type="button" class="change-ai-upload" data-ai-drop aria-describedby="change-ai-upload-help">
  24. <span class="change-ai-upload-icon"><i class="fa fa-cloud-upload" aria-hidden="true"></i></span>
  25. <strong>拖拽图片到这里,或点击选择</strong>
  26. <span class="change-ai-upload-formats" id="change-ai-upload-help">JPG / JPEG / PNG / WebP · 单张不超过 50 MB · 暂不支持 PDF、Word</span>
  27. <span class="change-ai-drop-tip">松开鼠标,添加图片</span>
  28. </button>
  29. <input type="file" data-ai-files accept="image/jpeg,image/png,image/webp" hidden>
  30. <div class="change-ai-upload-feedback small mt-2" data-ai-upload-feedback role="status" aria-live="polite"></div>
  31. <div data-ai-selected-files hidden>
  32. <div class="change-ai-files" data-ai-file-list></div>
  33. <fieldset class="change-ai-scope mt-3 mb-0">
  34. <legend>选择识别范围</legend>
  35. <label><input type="radio" name="extract_scope" value="all" checked> 全部(基本信息和清单)</label>
  36. <label><input type="radio" name="extract_scope" value="main"> 仅基本信息(内容)</label>
  37. <label><input type="radio" name="extract_scope" value="items"> 仅清单明细</label>
  38. <div class="small text-muted" data-ai-scope-hint>不确定时选择“全部”。</div>
  39. </fieldset>
  40. <label class="mt-3 mb-0"><input type="checkbox" data-ai-attach checked> 确认保存时,将原图片同时添加为单据附件</label>
  41. <div class="change-ai-attachment-types mt-3" data-ai-attachment-types hidden role="group" aria-label="附件资料类型"></div>
  42. </div>
  43. <aside class="change-ai-upload-notice" aria-label="识别注意事项">
  44. <h6><i class="fa fa-info-circle" aria-hidden="true"></i> 识别注意事项</h6>
  45. <ul>
  46. <li>每次仅选择一张单据或清单图片;多页清单需分次处理,请保留表头、页码及完整行列。</li>
  47. <li>图片应清晰、方向正确、无遮挡。手写内容、模糊印章及跨页表格需重点核对。</li>
  48. <li>预览时对照原图核对编号、单位、单价和数量,特别留意增减数量的正负号、小数点及漏行、重复行。</li>
  49. <li>先匹配已添加清单,再匹配台账;编号、名称、单位、单价中已识别的字段须全部相符,均未匹配时新增空白清单。多个候选会用实际识别的原设计量辅助筛选,请核对部位后选择。</li>
  50. </ul>
  51. <div class="change-ai-upload-note">清单预览不计算金额;金额由系统按清单数量汇总后计算。</div>
  52. <div class="change-ai-upload-demo">识别期间请勿重复提交;关闭窗口将放弃尚未保存的识别结果。</div>
  53. </aside>
  54. </section>
  55. <section data-ai-panel="2" hidden>
  56. <div class="change-ai-compare">
  57. <div class="change-ai-source">
  58. <div class="d-flex align-items-center justify-content-between mb-2"><strong>识别原图</strong><span class="text-muted" data-ai-page></span></div>
  59. <div class="change-ai-image-toolbar">
  60. <select class="form-control form-control-sm" data-ai-image-select aria-label="当前图片"></select>
  61. <button type="button" class="btn btn-sm btn-outline-secondary" data-ai-zoom="in">放大</button>
  62. <button type="button" class="btn btn-sm btn-outline-secondary" data-ai-zoom="out">缩小</button>
  63. <button type="button" class="btn btn-sm btn-outline-secondary" data-ai-zoom="fit">适应</button>
  64. </div>
  65. <div class="small text-muted mb-2">滚轮缩放 · 按住拖动</div>
  66. <div class="change-ai-image-viewport" data-ai-viewport title="滚轮缩放,按住鼠标左键拖动图片">
  67. <div class="change-ai-no-image" data-ai-image-empty>尚未选择图片<br><small>返回第一步选择清单图片,即可左右对照。</small></div>
  68. <img data-ai-image alt="当前选择的单据或清单图片" draggable="false" hidden>
  69. </div>
  70. </div>
  71. <div class="change-ai-result">
  72. <div class="d-flex justify-content-between align-items-center mb-3 flex-wrap">
  73. <div class="btn-group" data-ai-tabs><button type="button" class="btn btn-sm" data-ai-tab="info">基本信息</button><button type="button" class="btn btn-sm" data-ai-tab="bills">清单明细</button></div>
  74. <h6 class="mb-0" data-ai-single-title hidden></h6>
  75. </div>
  76. <div data-ai-info></div>
  77. <div data-ai-bills hidden>
  78. <div data-ai-rows></div>
  79. </div>
  80. </div>
  81. </div>
  82. </section>
  83. <section data-ai-panel="3" hidden>
  84. <h6>确认本次导入内容</h6>
  85. <p class="small">识别范围:<span data-ai-summary-scope></span></p>
  86. <p class="small">基本信息:<span data-ai-summary-info></span></p>
  87. <dl class="change-ai-summary"><dt>场景</dt><dd data-ai-summary-scene></dd><dt>单据编号</dt><dd data-ai-summary-code></dd><dt>单据名称</dt><dd data-ai-summary-name></dd><dt>清单处理</dt><dd data-ai-summary-rows></dd><dt>图片附件</dt><dd data-ai-summary-files></dd></dl>
  88. <div class="change-ai-confirm-section" data-ai-confirm-section="main">
  89. <div class="change-ai-upload-heading"><h6>基本信息修改明细</h6><button type="button" class="btn btn-sm btn-link" data-ai-review="info">返回修改基本信息</button></div>
  90. <div data-ai-confirm-info></div>
  91. </div>
  92. <div class="change-ai-confirm-section" data-ai-confirm-section="items">
  93. <div class="change-ai-upload-heading"><h6>清单处理明细</h6><button type="button" class="btn btn-sm btn-link" data-ai-review="bills">返回修改清单</button></div>
  94. <div data-ai-confirm-bills></div>
  95. </div>
  96. <div class="change-ai-confirm-section" data-ai-confirm-section="files" hidden>
  97. <div class="change-ai-upload-heading"><h6>新增图片附件</h6><button type="button" class="btn btn-sm btn-link" data-ai-review="files">返回调整图片</button></div>
  98. <div data-ai-confirm-files></div>
  99. </div>
  100. <div class="alert alert-warning mb-0" data-ai-validation role="status"></div>
  101. </section>
  102. </div>
  103. <div class="modal-footer">
  104. <span class="small text-muted mr-auto" data-ai-status aria-live="polite"></span>
  105. <button type="button" class="btn btn-sm btn-secondary" data-ai-back>关闭</button>
  106. <button type="button" class="btn btn-sm btn-primary" data-ai-next><span data-ai-next-text>开始识别</span><span class="spinner-border spinner-border-sm ml-1" data-ai-next-spinner style="display:none;" aria-hidden="true"></span></button>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. <script src="/public/js/change_ai_import_modal.js"></script>