index.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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>门店检测工作台</title>
  7. <link rel="stylesheet" href="/style.css">
  8. <link rel="stylesheet" href="/report.css">
  9. <script src="/vendor/echarts.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="wrap">
  13. <header>
  14. <div class="hleft">
  15. <div class="htop">
  16. <span class="brand">怡呵美 · 水光会员店</span>
  17. <h1>门店检测工作台</h1>
  18. </div>
  19. <div class="hsub">
  20. <span id="ruleNote">规则来源:《门店考核指标》官方基准线</span>
  21. <span id="dataNote"></span>
  22. </div>
  23. </div>
  24. <div class="hright">
  25. <select id="period" class="period" title="选择周期"></select>
  26. <div class="huser">
  27. <span class="uavatar" id="whoAvatar">管</span>
  28. <span class="uinfo2"><b id="whoName"></b><i id="whoRole"></i></span>
  29. <button class="ubtn2" id="btnPw" title="修改我的密码">改密码</button>
  30. <button class="ubtn2 danger" id="btnLogout" title="退出登录">退出登录</button>
  31. </div>
  32. </div>
  33. </header>
  34. <div class="kpis" id="kpis"></div>
  35. <div class="charts">
  36. <div class="panel"><h3>问题命中分布(按类型)</h3><div class="chart" id="c1"></div></div>
  37. <div class="panel"><h3 id="c2title">核销金额分布</h3><div class="chart" id="c2"></div></div>
  38. <div class="panel"><h3>门店数 TOP15 城市</h3><div class="chart" id="c3"></div></div>
  39. </div>
  40. <div class="bar">
  41. <input id="q" placeholder="搜索门店名称或ID">
  42. <select id="fcity"><option value="">全部城市</option></select>
  43. <select id="fscore">
  44. <option value="">全部评分</option>
  45. <option value="lt40">评分 4.0 以下</option>
  46. <option value="40_43">评分【4.0-4.3】</option>
  47. <option value="43_45">评分【4.3-4.5】</option>
  48. <option value="gte45">评分 4.5 以上</option>
  49. </select>
  50. <select id="fcat"><option value="">全部问题类型</option></select>
  51. <select id="fsort" title="排序字段">
  52. <option value="sev">按严重度</option>
  53. <option value="amt">按核销金额</option>
  54. <option value="score">按评分</option>
  55. <option value="hx">按核销率</option>
  56. <option value="visit">按访问量</option>
  57. </select>
  58. <select id="forder" title="排序方向">
  59. <option value="desc">倒序</option>
  60. <option value="asc">正序</option>
  61. </select>
  62. <span class="sub" id="cnt"></span>
  63. </div>
  64. <div class="panel tablewrap" style="padding:4px 8px 10px">
  65. <table><thead><tr>
  66. <th>门店</th><th>城市</th>
  67. <th class="num">评分</th>
  68. <th class="num">访问</th>
  69. <th class="num">成交券</th>
  70. <th class="num">核销率</th>
  71. <th class="num">核销金额</th>
  72. <th class="num">待核销</th>
  73. <th class="num">退单率</th>
  74. <th class="num">投诉率</th>
  75. <th class="num">差评率</th>
  76. <th class="num">回复率</th>
  77. <th class="num">上榜</th>
  78. <th>触发问题</th>
  79. </tr></thead><tbody id="tb"></tbody></table>
  80. <div class="pager"><span id="pginfo"></span><button id="prev">上一页</button><button id="next">下一页</button></div>
  81. </div>
  82. <div class="empty" id="empty" hidden>
  83. <div class="empty-ic">📥</div>
  84. <div class="empty-t">还没有数据</div>
  85. <div class="empty-d">点左侧【导入数据】上传抖音后台导出的 CSV / Excel,或把文件丢进 <code>data/inbox</code> 目录等 20 秒自动导入。</div>
  86. <button class="primary" onclick="document.getElementById('btnImport').click()">导入数据</button>
  87. </div>
  88. </div>
  89. <aside class="rail">
  90. <button class="railitem" id="btnText">文案配置</button>
  91. <button class="railitem" id="btnTh">指标配置<span class="rdot"></span></button>
  92. <button class="railitem" id="btnSync">同步数据</button>
  93. <button class="railitem" id="btnImport">导入数据</button>
  94. <button class="railitem" id="btnUsers">账号管理</button>
  95. </aside>
  96. <div class="overlay" id="ov"></div>
  97. <div class="drawer" id="dw"></div>
  98. <!-- 考核指标面板 -->
  99. <aside class="sidepanel" id="thPanel">
  100. <div class="sphead">
  101. <h4>指标配置 <span class="pill" id="thPill">默认值</span>
  102. <span class="spclose" id="thClose" title="关闭">&times;</span></h4>
  103. <p>门店考核指标参数,默认值来自《门店考核指标》官方基准线。修改后点【应用到工作台】,服务端会按新阈值重算全部门店。</p>
  104. </div>
  105. <div class="spbody" id="thBody"></div>
  106. <div class="spfoot">
  107. <button id="thReset">恢复默认</button>
  108. <button class="primary" id="thApply">应用到工作台</button>
  109. </div>
  110. </aside>
  111. <!-- 文案配置面板 -->
  112. <aside class="sidepanel" id="txPanel">
  113. <div class="sphead">
  114. <h4>文案配置 <span class="pill" id="txPill">默认值</span>
  115. <span class="spclose" id="txClose" title="关闭">&times;</span></h4>
  116. <p>自定义门店分析反馈文案。大括号变量在生成时自动替换为该店真实数据(如 {v}、{base}、{门店名}),删掉变量就是固定文字。改完点【应用到工作台】立即对全部门店生效。</p>
  117. </div>
  118. <div class="spbody" id="txBody"></div>
  119. <div class="spfoot">
  120. <button id="txReset">恢复默认</button>
  121. <button class="primary" id="txApply">应用到工作台</button>
  122. </div>
  123. </aside>
  124. <!-- 导入面板 -->
  125. <aside class="sidepanel" id="usPanel">
  126. <div class="sphead">
  127. <h4>账号管理 <span class="spclose" id="usClose" title="关闭">&times;</span></h4>
  128. <p>账号按角色分配权限:<b>管理员</b>全部功能;<b>运营</b>可导入、同步、导出,不能改判定规则;<b>查看</b>只能看数据。</p>
  129. </div>
  130. <div class="spbody">
  131. <button class="primary" id="usNew" style="width:100%;margin-bottom:14px">+ 新建账号</button>
  132. <div class="history" id="usList"></div>
  133. </div>
  134. </aside>
  135. <aside class="sidepanel" id="imPanel">
  136. <div class="sphead">
  137. <h4>导入门店数据 <span class="spclose" id="imClose" title="关闭">&times;</span></h4>
  138. <p>支持门店后台导出的 CSV 或 Excel(.xlsx),日数据或整月汇总都行。同一门店同一天重复导入会覆盖,不会翻倍。旧版 .xls 请先另存为 .xlsx。</p>
  139. </div>
  140. <div class="spbody">
  141. <label class="drop" id="drop">
  142. <input type="file" id="file" accept=".csv,.xlsx,text/csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" hidden>
  143. <span id="dropText">点击选择 CSV / Excel 文件,或把文件拖到这里</span>
  144. </label>
  145. <div class="frow">
  146. <div class="thfield"><label>归属月份</label><div class="inp"><input id="imPeriod" type="month"></div></div>
  147. <div class="thfield"><label>数据日期(选填)</label><div class="inp"><input id="imDate" type="date"></div></div>
  148. </div>
  149. <div class="thnote" style="padding:0">· 文件里有「日期」列时以列值为准;填了日期则按日入库;都不填则当作该月汇总。</div>
  150. <div id="imResult" class="imresult"></div>
  151. <div class="sphead" style="padding:18px 0 6px;border:0">
  152. <h4 style="font-size:13px">导出原始文件</h4>
  153. <p>导出的是生意经导出的原件,与导入时完全一致,不含任何计算。</p>
  154. </div>
  155. <button class="primary" id="btnExportCur" style="width:100%;margin-bottom:6px">下载当前周期最新一份</button>
  156. <div class="thnote" style="padding:6px 0 0">下面每条记录右侧的「原始文件」可以下载那一次导入的原件。</div>
  157. <div class="sphead" style="padding:14px 0 6px;border:0"><h4 style="font-size:13px">导入历史</h4></div>
  158. <div id="imHistory" class="history"></div>
  159. </div>
  160. <div class="spfoot">
  161. <button id="imCancel">取消</button>
  162. <button class="primary" id="imGo" disabled>开始导入</button>
  163. </div>
  164. </aside>
  165. <div class="toast" id="toast"></div>
  166. <script src="/app.js"></script>
  167. </body>
  168. </html>