shanxia-mp-pattern-view.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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.0, maximum-scale=1.0, user-scalable=no" />
  6. <title>山峡化工 · 查看详情 Pattern</title>
  7. <link rel="stylesheet" href="shanxia-mp-base.css" />
  8. <style>.mp-subpage-back { color: #fff; font-size: 13px; opacity: 0.95; }</style>
  9. </head>
  10. <body>
  11. <nav class="proto-nav">
  12. <strong>Pattern</strong>
  13. <a href="shanxia-mp-pattern-index.html">索引</a>
  14. <a href="shanxia-mp-pattern-list.html">列表</a>
  15. <a class="active" href="shanxia-mp-pattern-view.html">查看</a>
  16. <a href="shanxia-mp-pattern-form.html">表单</a>
  17. <a href="shanxia-mp-pattern-feedback.html">弹窗</a>
  18. </nav>
  19. <main class="phone no-tabbar mp-form-page">
  20. <header class="mp-navbar" style="background:var(--bg-page);border:none;padding-bottom:0">
  21. <a class="mp-navbar__back" href="shanxia-mp-pattern-list.html">← 返回</a>
  22. <h1 class="mp-navbar__title">线索详情</h1>
  23. <button class="mp-navbar__action" type="button" id="btn-more">更多</button>
  24. </header>
  25. <div class="mp-pattern-note" style="margin-top:8px">
  26. <strong>P-VIEW · 查看详情(全页)</strong>
  27. Hero 摘要 + 分块信息 + 子表/附件/审批流。底栏放主操作;「更多」打开 Action Sheet。
  28. </div>
  29. <!-- Hero -->
  30. <section class="mp-detail-hero">
  31. <div class="mp-detail-hero__top">
  32. <div>
  33. <div class="mp-detail-hero__title">苏州新材料询价</div>
  34. <div class="mp-detail-hero__sub">XS-20260706-001</div>
  35. </div>
  36. <span class="mp-tag mp-tag--info">新线索</span>
  37. </div>
  38. <div class="mp-detail-hero__meta">
  39. <span class="mp-detail-hero__chip">官网表单</span>
  40. <span class="mp-detail-hero__chip">销售一部</span>
  41. <span class="mp-detail-hero__chip">未分配</span>
  42. </div>
  43. </section>
  44. <!-- 基本信息 -->
  45. <section class="mp-block">
  46. <h2 class="mp-block__title">基本信息</h2>
  47. <div class="mp-block__panel">
  48. <div class="mp-kv-list" style="border:none;border-radius:0">
  49. <div class="mp-kv"><span>联系人</span><span>陈先生</span></div>
  50. <div class="mp-kv"><span>手机号</span><span>138****2201</span></div>
  51. <div class="mp-kv"><span>公司名称</span><span>苏州新材料科技有限公司</span></div>
  52. <div class="mp-kv"><span>意向产品</span><span>甲醇</span></div>
  53. <div class="mp-kv"><span>预估用量</span><span>32 吨/月</span></div>
  54. <div class="mp-kv"><span>创建时间</span><span>2026-07-06 09:12</span></div>
  55. <div class="mp-kv"><span>备注</span><span>希望下周安排样品寄送,关注含税到厂价</span></div>
  56. </div>
  57. </div>
  58. </section>
  59. <!-- 跟进记录 -->
  60. <section class="mp-block">
  61. <h2 class="mp-block__title">跟进记录</h2>
  62. <div class="mp-block__panel">
  63. <div class="mp-timeline">
  64. <div class="mp-timeline__item">
  65. <span class="mp-timeline__dot"></span>
  66. <div class="mp-timeline__body">
  67. <strong>电话沟通</strong>
  68. <span>王销售 · 2026-07-06 10:30</span>
  69. <p>客户关注交期与到厂价,已发送产品手册。</p>
  70. </div>
  71. </div>
  72. <div class="mp-timeline__item">
  73. <span class="mp-timeline__dot mp-timeline__dot--muted"></span>
  74. <div class="mp-timeline__body">
  75. <strong>线索创建</strong>
  76. <span>系统 · 2026-07-06 09:12</span>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </section>
  82. <!-- 附件 -->
  83. <section class="mp-block">
  84. <h2 class="mp-block__title">附件</h2>
  85. <div class="mp-block__panel">
  86. <div class="mp-attach-row">
  87. <div class="mp-attach-card">
  88. <div class="mp-attach-card__thumb">PDF</div>
  89. <span class="mp-attach-card__name">产品手册.pdf</span>
  90. </div>
  91. <div class="mp-attach-card">
  92. <div class="mp-attach-card__thumb">IMG</div>
  93. <span class="mp-attach-card__name">名片照片.jpg</span>
  94. </div>
  95. </div>
  96. </div>
  97. </section>
  98. <p style="margin:0 16px 20px;font-size:11px;color:var(--text-muted)">
  99. 快捷预览:列表页也可弹出半屏抽屉,<button type="button" id="btn-sheet" style="color:var(--brand-green-dark);font-size:11px;font-weight:600">点击查看抽屉示例</button>
  100. </p>
  101. <!-- 底栏操作 -->
  102. <footer class="mp-footer-bar">
  103. <button class="mp-btn mp-btn--ghost" type="button">分配</button>
  104. <button class="mp-btn mp-btn--primary" type="button">跟进</button>
  105. </footer>
  106. </main>
  107. <!-- 底部抽屉:快捷查看 -->
  108. <div class="mp-overlay" id="overlay-sheet"></div>
  109. <aside class="mp-sheet" id="sheet-view" aria-hidden="true">
  110. <div class="mp-sheet__handle"></div>
  111. <div class="mp-sheet__head">
  112. <h2 class="mp-sheet__title">线索详情</h2>
  113. <button class="mp-sheet__close" type="button" data-close="sheet">关闭</button>
  114. </div>
  115. <div class="mp-sheet__body">
  116. <section class="mp-detail-hero" style="margin-top:12px">
  117. <div class="mp-detail-hero__top">
  118. <div>
  119. <div class="mp-detail-hero__title">苏州新材料询价</div>
  120. <div class="mp-detail-hero__sub">XS-20260706-001</div>
  121. </div>
  122. <span class="mp-tag mp-tag--info">新线索</span>
  123. </div>
  124. </section>
  125. <section class="mp-block">
  126. <h2 class="mp-block__title">基本信息</h2>
  127. <div class="mp-block__panel">
  128. <div class="mp-kv-list" style="border:none;border-radius:0">
  129. <div class="mp-kv"><span>联系人</span><span>陈先生</span></div>
  130. <div class="mp-kv"><span>手机号</span><span>138****2201</span></div>
  131. <div class="mp-kv"><span>意向产品</span><span>甲醇 · 32吨/月</span></div>
  132. </div>
  133. </div>
  134. </section>
  135. </div>
  136. <footer class="mp-sheet__foot">
  137. <button class="mp-btn mp-btn--ghost" type="button" data-close="sheet">关闭</button>
  138. <button class="mp-btn mp-btn--primary" type="button">查看完整详情</button>
  139. </footer>
  140. </aside>
  141. <!-- Action Sheet -->
  142. <div class="mp-overlay" id="overlay-action"></div>
  143. <div class="mp-action-sheet" id="action-sheet">
  144. <div class="mp-action-sheet__group">
  145. <button class="mp-action-sheet__item" type="button">编辑</button>
  146. <button class="mp-action-sheet__item" type="button">分配负责人</button>
  147. <button class="mp-action-sheet__item" type="button">转化商机</button>
  148. <button class="mp-action-sheet__item mp-action-sheet__item--danger" type="button" id="btn-delete">删除</button>
  149. </div>
  150. <button class="mp-action-sheet__cancel" type="button" data-close="action">取消</button>
  151. </div>
  152. <!-- 确认弹窗 -->
  153. <div class="mp-overlay" id="overlay-dialog"></div>
  154. <div class="mp-dialog" id="dialog-confirm">
  155. <div class="mp-dialog__body">
  156. <div class="mp-dialog__title">确认删除?</div>
  157. <p class="mp-dialog__text">删除后线索将进入回收站,可在 PC 端恢复。</p>
  158. </div>
  159. <div class="mp-dialog__foot">
  160. <button class="mp-dialog__btn" type="button" data-close="dialog">取消</button>
  161. <button class="mp-dialog__btn mp-dialog__btn--danger" type="button" id="btn-confirm-delete">删除</button>
  162. </div>
  163. </div>
  164. <div class="mp-toast" id="toast">已删除</div>
  165. <script>
  166. function openLayer(overlayId, panelId) {
  167. document.getElementById(overlayId).classList.add('is-open')
  168. document.getElementById(panelId).classList.add('is-open')
  169. }
  170. function closeLayer(overlayId, panelId) {
  171. document.getElementById(overlayId).classList.remove('is-open')
  172. document.getElementById(panelId).classList.remove('is-open')
  173. }
  174. document.getElementById('btn-sheet').addEventListener('click', () => openLayer('overlay-sheet', 'sheet-view'))
  175. document.getElementById('btn-more').addEventListener('click', () => openLayer('overlay-action', 'action-sheet'))
  176. document.getElementById('btn-delete').addEventListener('click', () => {
  177. closeLayer('overlay-action', 'action-sheet')
  178. openLayer('overlay-dialog', 'dialog-confirm')
  179. })
  180. document.querySelectorAll('[data-close="sheet"]').forEach(el => {
  181. el.addEventListener('click', () => closeLayer('overlay-sheet', 'sheet-view'))
  182. })
  183. document.getElementById('overlay-sheet').addEventListener('click', () => closeLayer('overlay-sheet', 'sheet-view'))
  184. document.querySelectorAll('[data-close="action"]').forEach(el => {
  185. el.addEventListener('click', () => closeLayer('overlay-action', 'action-sheet'))
  186. })
  187. document.getElementById('overlay-action').addEventListener('click', () => closeLayer('overlay-action', 'action-sheet'))
  188. document.querySelectorAll('[data-close="dialog"]').forEach(el => {
  189. el.addEventListener('click', () => closeLayer('overlay-dialog', 'dialog-confirm'))
  190. })
  191. document.getElementById('btn-confirm-delete').addEventListener('click', () => {
  192. closeLayer('overlay-dialog', 'dialog-confirm')
  193. const t = document.getElementById('toast')
  194. t.classList.add('is-open')
  195. setTimeout(() => t.classList.remove('is-open'), 1500)
  196. })
  197. </script>
  198. </body>
  199. </html>