index.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>格士立 AI 市场中枢</title>
  7. <link rel="stylesheet" href="/static/styles.css?v=7">
  8. </head>
  9. <body>
  10. <header class="app-header">
  11. <div class="brand-block">
  12. <span class="brand-mark" aria-hidden="true">G</span>
  13. <div>
  14. <strong>GESLI</strong>
  15. <span>格士立物流科技</span>
  16. </div>
  17. </div>
  18. <nav class="view-switcher" aria-label="工作台视图">
  19. <button class="view-tab is-active" type="button" data-view="market">AI 市场中枢</button>
  20. <button class="view-tab" type="button" data-view="mock">Mock 数据台</button>
  21. <button class="view-tab" type="button" data-view="operations">履约操作台</button>
  22. </nav>
  23. <div class="system-status">
  24. <span class="status-dot" aria-hidden="true"></span>
  25. <span id="systemStatus">本地知识图谱</span>
  26. </div>
  27. </header>
  28. <main>
  29. <section id="marketView" class="app-view is-active" aria-labelledby="marketTitle">
  30. <aside class="inquiry-rail">
  31. <div class="rail-heading">
  32. <span class="section-index">01</span>
  33. <div>
  34. <h1 id="marketTitle">客户询价</h1>
  35. <p id="inquiryState">待生成</p>
  36. </div>
  37. </div>
  38. <form id="inquiryForm" class="inquiry-form">
  39. <label class="field field-wide">
  40. <span>客户</span>
  41. <select id="customer" name="customer" required></select>
  42. </label>
  43. <label class="field">
  44. <span>起运地</span>
  45. <select id="origin" name="origin" required></select>
  46. </label>
  47. <label class="field">
  48. <span>目的地</span>
  49. <select id="destination" name="destination" required></select>
  50. </label>
  51. <label class="field">
  52. <span>货物名称</span>
  53. <input id="cargoName" name="cargo_name" type="text" required>
  54. </label>
  55. <label class="field">
  56. <span>货量</span>
  57. <input id="cargoVolume" name="cargo_volume" type="number" min="0.1" step="0.1" required>
  58. </label>
  59. <label class="field">
  60. <span>询价日期</span>
  61. <input id="evaluationDate" name="evaluation_date" type="date" required>
  62. </label>
  63. <label class="field">
  64. <span>要求起运</span>
  65. <input id="departureDate" name="requested_departure_date" type="date" required>
  66. </label>
  67. <label class="field">
  68. <span>最长运输天数</span>
  69. <input id="maxTransitDays" name="max_transit_days" type="number" min="1" step="1" required>
  70. </label>
  71. <label class="field">
  72. <span>目标报价 CNY</span>
  73. <input id="targetAmount" name="target_amount" type="number" min="1" step="100" required>
  74. </label>
  75. <label class="field field-wide">
  76. <span>路由偏好</span>
  77. <select id="routeType" name="preferred_route_type"></select>
  78. </label>
  79. <label class="toggle-row field-wide">
  80. <input id="dangerousGoods" name="dangerous_goods" type="checkbox">
  81. <span class="toggle-control" aria-hidden="true"></span>
  82. <span>危险品运输需求</span>
  83. </label>
  84. <button id="recommendBtn" class="primary-command field-wide" type="button">
  85. <span>生成市场方案</span>
  86. <span aria-hidden="true">→</span>
  87. </button>
  88. </form>
  89. <div class="rail-foot">
  90. <span>决策模式</span>
  91. <strong>规则引擎 · 可解释</strong>
  92. </div>
  93. </aside>
  94. <div class="market-workspace">
  95. <section class="decision-header" aria-label="决策摘要">
  96. <div>
  97. <span class="section-kicker">MARKET DECISION / 实时</span>
  98. <h2 id="decisionTitle">正在加载市场上下文</h2>
  99. </div>
  100. <button id="auditBtn" class="secondary-command" type="button" disabled>查看决策审计</button>
  101. </section>
  102. <section id="pipeline" class="pipeline" aria-label="决策管线"></section>
  103. <section id="recommendationBand" class="recommendation-band is-loading" aria-live="polite">
  104. <div class="loading-block">
  105. <span class="loading-line"></span>
  106. <span class="loading-line short"></span>
  107. </div>
  108. </section>
  109. <section class="candidate-section">
  110. <div class="section-heading">
  111. <div>
  112. <span class="section-index">02</span>
  113. <h2>候选方案</h2>
  114. </div>
  115. <span id="candidateMeta" class="section-meta">等待计算</span>
  116. </div>
  117. <div id="candidateGrid" class="candidate-grid"></div>
  118. </section>
  119. <section class="rejected-section">
  120. <div class="section-heading">
  121. <div>
  122. <span class="section-index">03</span>
  123. <h2>硬条件过滤</h2>
  124. </div>
  125. <span id="rejectedMeta" class="section-meta">0 个淘汰候选</span>
  126. </div>
  127. <div id="rejectedList" class="rejected-list"></div>
  128. </section>
  129. </div>
  130. </section>
  131. <section id="mockView" class="app-view mock-view" aria-labelledby="mockTitle">
  132. <div class="mock-heading">
  133. <div>
  134. <span class="section-kicker">LOCAL RDF / VOLATILE DATA</span>
  135. <h1 id="mockTitle">Mock 数据台</h1>
  136. <p>当前内存图中的客户、路线、产品、供应商、报价与市场策略</p>
  137. </div>
  138. <div class="mock-actions">
  139. <span class="volatile-label">重启即清空动态数据</span>
  140. <button id="resetMockBtn" class="secondary-command" type="button">重置内存数据</button>
  141. </div>
  142. </div>
  143. <section id="mockSummary" class="data-summary" aria-label="本地数据统计"></section>
  144. <section class="mock-generator" aria-labelledby="mockGeneratorTitle">
  145. <div class="generator-copy">
  146. <span class="section-index">01</span>
  147. <div>
  148. <h2 id="mockGeneratorTitle">动态补充样本</h2>
  149. <p id="mockStatus">仅写入当前进程的 RDF Graph</p>
  150. </div>
  151. </div>
  152. <div class="generator-controls">
  153. <label class="compact-field route-field">
  154. <span>目标路线</span>
  155. <select id="mockRoute"></select>
  156. </label>
  157. <label class="compact-field">
  158. <span>供应商数量</span>
  159. <input id="mockSupplierCount" type="number" min="1" max="5" value="2">
  160. </label>
  161. <label class="compact-field">
  162. <span>客户数量</span>
  163. <input id="mockCustomerCount" type="number" min="0" max="3" value="1">
  164. </label>
  165. <button id="generateMockBtn" class="primary-command" type="button">
  166. <span>添加一批 Mock 数据</span><span aria-hidden="true">+</span>
  167. </button>
  168. </div>
  169. </section>
  170. <section class="catalog-section">
  171. <div class="catalog-heading">
  172. <div>
  173. <span class="section-index">02</span>
  174. <h2>数据目录</h2>
  175. </div>
  176. <nav class="catalog-tabs" aria-label="Mock 数据分类">
  177. <button class="catalog-tab is-active" type="button" data-catalog="routes">路线供给</button>
  178. <button class="catalog-tab" type="button" data-catalog="customers">客户画像</button>
  179. <button class="catalog-tab" type="button" data-catalog="quotes">供应商报价</button>
  180. <button class="catalog-tab" type="button" data-catalog="strategies">市场策略</button>
  181. </nav>
  182. </div>
  183. <div id="mockCatalogTable" class="catalog-table"></div>
  184. </section>
  185. <section class="source-section">
  186. <div>
  187. <span class="section-index">03</span>
  188. <h2>加载来源</h2>
  189. </div>
  190. <div id="mockSources" class="source-list"></div>
  191. </section>
  192. </section>
  193. <section id="operationsView" class="app-view operations-view" aria-labelledby="operationsTitle">
  194. <div class="operations-heading">
  195. <div>
  196. <span class="section-kicker">GLOBAL SHIPMENT / 履约</span>
  197. <h1 id="operationsTitle">青岛出口操作台</h1>
  198. <p>订单、节点、异常、风险与关键时限</p>
  199. </div>
  200. <button id="refreshBtn" class="secondary-command" type="button">刷新数据</button>
  201. </div>
  202. <div class="operations-layout">
  203. <section class="panel">
  204. <div class="panel-title"><h2>订单状态</h2><span id="ordersCount">0</span></div>
  205. <div id="orders" class="table-wrap"></div>
  206. </section>
  207. <section class="panel">
  208. <div class="panel-title"><h2>风险订单</h2><span id="risksCount">0</span></div>
  209. <div id="risks" class="table-wrap"></div>
  210. </section>
  211. <section class="panel wide">
  212. <div class="panel-title"><h2>标准流程</h2><span>1–14</span></div>
  213. <div id="flow" class="timeline"></div>
  214. </section>
  215. <section class="panel wide">
  216. <div class="panel-title"><h2>节点时间状态</h2><span id="nodeTimesCount">0</span></div>
  217. <div id="nodeTimes" class="table-wrap"></div>
  218. </section>
  219. <section class="panel">
  220. <div class="panel-title"><h2>订单关键时限</h2><span id="cutoffsCount">0</span></div>
  221. <div id="cutoffs" class="table-wrap"></div>
  222. </section>
  223. <section class="panel">
  224. <div class="panel-title"><h2>异常影响</h2><span id="exceptionMapCount">0</span></div>
  225. <div id="exceptionMap" class="table-wrap"></div>
  226. </section>
  227. </div>
  228. </section>
  229. </main>
  230. <dialog id="auditDialog" class="audit-dialog">
  231. <div class="dialog-heading">
  232. <div>
  233. <span class="section-kicker">DECISION TRACE</span>
  234. <h2>决策审计</h2>
  235. </div>
  236. <button id="closeAuditBtn" class="icon-command" type="button" aria-label="关闭">×</button>
  237. </div>
  238. <div id="auditContent" class="audit-content"></div>
  239. </dialog>
  240. <script src="/static/app.js?v=7"></script>
  241. </body>
  242. </html>