需求说明书.html 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981
  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">
  6. <title>酒店客房送餐系统 · 需求说明书</title>
  7. <style>
  8. :root {
  9. --pri: #1E3A5F;
  10. --pri-lt: #2C5282;
  11. --acc: #2563EB;
  12. --bg: #F8FAFC;
  13. --bg-card: #FFFFFF;
  14. --txt: #1E293B;
  15. --txt-sub: #64748B;
  16. --bdr: #E2E8F0;
  17. --succ: #16A34A;
  18. --warn: #D97706;
  19. --dang: #DC2626;
  20. }
  21. * { margin: 0; padding: 0; box-sizing: border-box; }
  22. body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; background: var(--bg); color: var(--txt); line-height: 1.8; }
  23. /* 封面 */
  24. .cover {
  25. background: linear-gradient(135deg, #1E3A5F 0%, #2C5282 50%, #1A365D 100%);
  26. color: #fff;
  27. padding: 80px 60px;
  28. text-align: center;
  29. page-break-after: always;
  30. }
  31. .cover .tag {
  32. display: inline-block;
  33. border: 1px solid rgba(255,255,255,.4);
  34. color: rgba(255,255,255,.8);
  35. padding: 4px 16px;
  36. border-radius: 20px;
  37. font-size: 13px;
  38. letter-spacing: 2px;
  39. margin-bottom: 24px;
  40. }
  41. .cover h1 { font-size: 36px; font-weight: 700; margin-bottom: 12px; letter-spacing: 4px; }
  42. .cover h2 { font-size: 18px; font-weight: 400; opacity: .8; margin-bottom: 40px; }
  43. .cover .meta { display: flex; justify-content: center; gap: 48px; font-size: 13px; opacity: .7; }
  44. .cover .meta span { display: flex; align-items: center; gap: 6px; }
  45. /* 内容区 */
  46. .container { max-width: 900px; margin: 0 auto; padding: 48px 40px; }
  47. /* 章节 */
  48. .section { margin-bottom: 56px; }
  49. .section-title {
  50. font-size: 22px;
  51. font-weight: 700;
  52. color: var(--pri);
  53. border-left: 4px solid var(--acc);
  54. padding-left: 14px;
  55. margin-bottom: 20px;
  56. line-height: 1.4;
  57. }
  58. .section-subtitle {
  59. font-size: 16px;
  60. font-weight: 600;
  61. color: var(--pri-lt);
  62. margin: 28px 0 12px;
  63. }
  64. /* 文字 */
  65. p { color: var(--txt-sub); margin-bottom: 10px; }
  66. p strong { color: var(--txt); }
  67. /* 卡片 */
  68. .card {
  69. background: var(--bg-card);
  70. border: 1px solid var(--bdr);
  71. border-radius: 10px;
  72. padding: 24px;
  73. margin-bottom: 16px;
  74. }
  75. /* 角色卡片 */
  76. .role-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }
  77. .role-card {
  78. background: var(--bg-card);
  79. border: 1px solid var(--bdr);
  80. border-radius: 10px;
  81. padding: 20px;
  82. border-top: 3px solid var(--acc);
  83. }
  84. .role-card .role-icon { font-size: 28px; margin-bottom: 8px; }
  85. .role-card .role-name { font-size: 15px; font-weight: 700; color: var(--pri); margin-bottom: 4px; }
  86. .role-card .role-device { font-size: 12px; color: var(--txt-sub); margin-bottom: 8px; }
  87. .role-card .role-desc { font-size: 13px; color: var(--txt-sub); line-height: 1.6; }
  88. /* 表格 */
  89. table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 13px; }
  90. thead th {
  91. background: #F1F5F9;
  92. color: var(--pri);
  93. font-weight: 600;
  94. padding: 10px 14px;
  95. text-align: left;
  96. font-size: 12px;
  97. text-transform: uppercase;
  98. letter-spacing: .5px;
  99. border-bottom: 2px solid var(--bdr);
  100. }
  101. tbody td {
  102. padding: 10px 14px;
  103. border-bottom: 1px solid var(--bdr);
  104. color: var(--txt-sub);
  105. }
  106. tbody tr:hover td { background: #F8FAFC; }
  107. /* 流程图容器 */
  108. .flow-container {
  109. background: var(--bg-card);
  110. border: 1px solid var(--bdr);
  111. border-radius: 10px;
  112. padding: 20px;
  113. margin: 20px 0;
  114. overflow-x: auto;
  115. }
  116. .flow-container .flow-title {
  117. font-size: 14px;
  118. font-weight: 600;
  119. color: var(--pri);
  120. margin-bottom: 16px;
  121. padding-bottom: 10px;
  122. border-bottom: 1px solid var(--bdr);
  123. }
  124. /* 标签 */
  125. .tag {
  126. display: inline-block;
  127. padding: 2px 8px;
  128. border-radius: 4px;
  129. font-size: 11px;
  130. font-weight: 600;
  131. }
  132. .tag-blue { background: #DBEAFE; color: #1E40AF; }
  133. .tag-green { background: #DCFCE7; color: #166534; }
  134. .tag-orange { background: #FEF3C7; color: #92400E; }
  135. .tag-red { background: #FEE2E2; color: #991B1B; }
  136. .tag-gray { background: #F1F5F9; color: #475569; }
  137. /* 要点列表 */
  138. .point-list { list-style: none; padding: 0; }
  139. .point-list li {
  140. padding: 8px 0;
  141. padding-left: 20px;
  142. position: relative;
  143. color: var(--txt-sub);
  144. font-size: 14px;
  145. }
  146. .point-list li::before {
  147. content: '';
  148. position: absolute;
  149. left: 0;
  150. top: 16px;
  151. width: 6px;
  152. height: 6px;
  153. background: var(--acc);
  154. border-radius: 50%;
  155. }
  156. /* 状态时间轴 */
  157. .status-bar {
  158. display: flex;
  159. gap: 0;
  160. margin: 16px 0;
  161. background: var(--bg-card);
  162. border: 1px solid var(--bdr);
  163. border-radius: 10px;
  164. overflow: hidden;
  165. }
  166. .status-step {
  167. flex: 1;
  168. text-align: center;
  169. padding: 14px 8px;
  170. font-size: 12px;
  171. color: var(--txt-sub);
  172. position: relative;
  173. background: #F8FAFC;
  174. }
  175. .status-step + .status-step { border-left: 1px solid var(--bdr); }
  176. .status-step.active { background: #DBEAFE; color: var(--pri); font-weight: 600; }
  177. .status-step .step-num {
  178. display: block;
  179. width: 22px; height: 22px;
  180. border-radius: 50%;
  181. background: #E2E8F0;
  182. color: var(--txt-sub);
  183. line-height: 22px;
  184. margin: 0 auto 6px;
  185. font-size: 11px;
  186. font-weight: 700;
  187. }
  188. .status-step.active .step-num { background: var(--acc); color: #fff; }
  189. /* 打印 */
  190. @media print {
  191. .cover { page-break-after: always; }
  192. .section { page-break-inside: avoid; }
  193. .flow-container { page-break-inside: avoid; }
  194. }
  195. /* 页脚 */
  196. .footer {
  197. text-align: center;
  198. padding: 40px;
  199. color: var(--txt-sub);
  200. font-size: 12px;
  201. border-top: 1px solid var(--bdr);
  202. margin-top: 40px;
  203. }
  204. /* TOC */
  205. .toc { margin: 24px 0; }
  206. .toc a { display: block; padding: 6px 0; color: var(--acc); text-decoration: none; font-size: 14px; }
  207. .toc a:hover { text-decoration: underline; }
  208. </style>
  209. </head>
  210. <body>
  211. <!-- ==================== 封面 ==================== -->
  212. <div class="cover">
  213. <div class="tag">需求说明书</div>
  214. <h1>酒店客房送餐系统</h1>
  215. <h2>智能点餐 · 五端协同 · 高效服务</h2>
  216. <div class="meta">
  217. <span>版本 v1.0</span>
  218. <span>2026年7月26日</span>
  219. <span>状态:需求确认中</span>
  220. </div>
  221. </div>
  222. <div class="container">
  223. <!-- ==================== 目录 ==================== -->
  224. <div class="section">
  225. <div class="section-title">目录</div>
  226. <div class="toc">
  227. <a href="#s1">1. 项目概述</a>
  228. <a href="#s2">2. 系统角色与架构</a>
  229. <a href="#s3">3. 核心业务流程图</a>
  230. <a href="#s4">4. 功能模块清单</a>
  231. <a href="#s5">5. 各端页面结构</a>
  232. <a href="#s6">6. 订单状态定义</a>
  233. <a href="#s7">7. 非功能性需求</a>
  234. </div>
  235. </div>
  236. <!-- ==================== 1. 项目概述 ==================== -->
  237. <div class="section" id="s1">
  238. <div class="section-title">1. 项目概述</div>
  239. <p><strong>项目名称:</strong>酒店客房送餐系统(Hotel Room Service Ordering System)</p>
  240. <p><strong>项目定位:</strong>面向宾馆/酒店客房的数字化点餐解决方案。客人通过客房内扫码进入小程序完成点餐、支付、实时追踪订单状态;餐厅前台、厨房、宾馆前台、后台管理协同处理,实现从点单到送达的全链路闭环。</p>
  241. <div class="section-subtitle">1.1 核心特点</div>
  242. <ul class="point-list">
  243. <li><strong>聚合二维码:</strong>一个房间一个码,同时支持微信和支付宝扫码,系统自动判断入口环境并匹配对应支付方式。</li>
  244. <li><strong>房号自动绑定:</strong>二维码生成时绑定房间号,客人扫码后无需手动输入,确认即可。</li>
  245. <li><strong>五端协同:</strong>顾客端、餐厅前台、厨房端、宾馆前台、后台管理——五个端各司其职,形成完整服务链路。</li>
  246. <li><strong>实时状态追踪:</strong>6 节点订单状态 + 进度可视化,客人随时掌握餐食进度。</li>
  247. <li><strong>智能退单:</strong>接单前顾客自助退、接单后宾馆前台可介入退,灵活处理异常。</li>
  248. </ul>
  249. </div>
  250. <!-- ==================== 2. 系统角色 ==================== -->
  251. <div class="section" id="s2">
  252. <div class="section-title">2. 系统角色与架构</div>
  253. <p>本系统共涉及 <strong>五个端</strong>、<strong>四个角色</strong>(餐厅前台与厨房端同属餐厅角色),覆盖从客人点餐到后台管理的完整链路。</p>
  254. <div class="role-grid">
  255. <div class="role-card">
  256. <div class="role-icon">📱</div>
  257. <div class="role-name">顾客端</div>
  258. <div class="role-device">微信小程序 / 支付宝小程序</div>
  259. <div class="role-desc">扫码点餐、下单支付、实时追踪订单状态</div>
  260. </div>
  261. <div class="role-card">
  262. <div class="role-icon">🖥️</div>
  263. <div class="role-name">餐厅前台</div>
  264. <div class="role-device">PAD / 移动端 / PC端</div>
  265. <div class="role-desc">接单/拒单、语音提醒、营业时间管理、安排送餐</div>
  266. </div>
  267. <div class="role-card">
  268. <div class="role-icon">👨‍🍳</div>
  269. <div class="role-name">厨房端</div>
  270. <div class="role-device">厨房大屏 + 打印机</div>
  271. <div class="role-desc">语音播报、小票打印、备餐、出餐</div>
  272. </div>
  273. <div class="role-card">
  274. <div class="role-icon">🏨</div>
  275. <div class="role-name">宾馆前台</div>
  276. <div class="role-device">PC端 / 移动端</div>
  277. <div class="role-desc">查看全部订单、任何阶段退单、状态总览</div>
  278. </div>
  279. <div class="role-card">
  280. <div class="role-icon">⚙️</div>
  281. <div class="role-name">后台管理</div>
  282. <div class="role-device">PC端</div>
  283. <div class="role-desc">数据看板、菜品/订单/房间管理、品牌风格设置</div>
  284. </div>
  285. </div>
  286. </div>
  287. <!-- ==================== 3. 核心流程图 ==================== -->
  288. <div class="section" id="s3">
  289. <div class="section-title">3. 核心业务流程图</div>
  290. <!-- 3.1 扫码进入 -->
  291. <div class="flow-container">
  292. <div class="flow-title">3.1 扫码进入流程</div>
  293. <svg viewBox="0 0 860 520" style="width:100%; max-width:860px;">
  294. <defs>
  295. <marker id="arrow1" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  296. <path d="M0,0 L8,3 L0,6 Z" fill="#64748B"/>
  297. </marker>
  298. <marker id="arrow1g" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  299. <path d="M0,0 L8,3 L0,6 Z" fill="#16A34A"/>
  300. </marker>
  301. <marker id="arrow1r" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  302. <path d="M0,0 L8,3 L0,6 Z" fill="#DC2626"/>
  303. </marker>
  304. </defs>
  305. <!-- 扫码 -->
  306. <rect x="330" y="20" width="140" height="44" rx="22" fill="#DBEAFE" stroke="#2563EB" stroke-width="2"/>
  307. <text x="400" y="48" text-anchor="middle" font-size="14" font-weight="700" fill="#1E40AF">客人扫聚合码</text>
  308. <line x1="400" y1="64" x2="400" y2="90" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow1)"/>
  309. <!-- 环境判断 -->
  310. <polygon points="400,95 480,125 400,155 320,125" fill="#FEF3C7" stroke="#D97706" stroke-width="1.5"/>
  311. <text x="400" y="130" text-anchor="middle" font-size="12" font-weight="600" fill="#92400E">环境判断</text>
  312. <!-- 微信分支 -->
  313. <line x1="320" y1="125" x2="200" y2="125" stroke="#64748B" stroke-width="1.5"/>
  314. <line x1="200" y1="125" x2="200" y2="200" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow1)"/>
  315. <rect x="120" y="200" width="160" height="40" rx="8" fill="#E8F5E9" stroke="#43A047" stroke-width="1.5"/>
  316. <text x="200" y="225" text-anchor="middle" font-size="13" font-weight="600" fill="#2E7D32">微信小程序</text>
  317. <text x="200" y="255" text-anchor="middle" font-size="10" fill="#64748B">→ 微信支付</text>
  318. <!-- 支付宝分支 -->
  319. <line x1="480" y1="125" x2="600" y2="125" stroke="#64748B" stroke-width="1.5"/>
  320. <line x1="600" y1="125" x2="600" y2="200" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow1)"/>
  321. <rect x="520" y="200" width="160" height="40" rx="8" fill="#E3F2FD" stroke="#1E88E5" stroke-width="1.5"/>
  322. <text x="600" y="225" text-anchor="middle" font-size="13" font-weight="600" fill="#1565C0">支付宝小程序</text>
  323. <text x="600" y="255" text-anchor="middle" font-size="10" fill="#64748B">→ 支付宝支付</text>
  324. <!-- 小程序→房号确认 -->
  325. <line x1="200" y1="260" x2="200" y2="300" stroke="#64748B" stroke-width="1.5"/>
  326. <line x1="600" y1="260" x2="600" y2="300" stroke="#64748B" stroke-width="1.5"/>
  327. <line x1="200" y1="300" x2="600" y2="300" stroke="#64748B" stroke-width="1.5"/>
  328. <line x1="400" y1="300" x2="400" y2="330" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow1)"/>
  329. <!-- 营业时间判断 -->
  330. <polygon points="400,335 480,365 400,395 320,365" fill="#FFF7ED" stroke="#EA580C" stroke-width="1.5"/>
  331. <text x="400" y="370" text-anchor="middle" font-size="11" font-weight="600" fill="#9A3412">营业时间?</text>
  332. <!-- 在营业 -->
  333. <line x1="320" y1="365" x2="170" y2="365" stroke="#16A34A" stroke-width="1.5"/>
  334. <line x1="170" y1="365" x2="170" y2="420" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow1g)"/>
  335. <rect x="90" y="420" width="160" height="40" rx="8" fill="#DCFCE7" stroke="#16A34A" stroke-width="1.5"/>
  336. <text x="170" y="445" text-anchor="middle" font-size="13" font-weight="600" fill="#166534">房号确认页</text>
  337. <line x1="170" y1="460" x2="170" y2="490" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow1g)"/>
  338. <rect x="90" y="490" width="160" height="40" rx="8" fill="#DCFCE7" stroke="#16A34A" stroke-width="1.5"/>
  339. <text x="170" y="515" text-anchor="middle" font-size="13" font-weight="600" fill="#166534">进入菜单</text>
  340. <!-- 不在营业 -->
  341. <line x1="480" y1="365" x2="660" y2="365" stroke="#DC2626" stroke-width="1.5"/>
  342. <line x1="660" y1="365" x2="660" y2="420" stroke="#DC2626" stroke-width="1.5" marker-end="url(#arrow1r)"/>
  343. <rect x="580" y="420" width="160" height="54" rx="8" fill="#FEE2E2" stroke="#DC2626" stroke-width="1.5"/>
  344. <text x="660" y="443" text-anchor="middle" font-size="12" font-weight="600" fill="#991B1B">非营业时间</text>
  345. <text x="660" y="460" text-anchor="middle" font-size="10" fill="#991B1B">提示下次营业时段</text>
  346. <!-- 环境判断下方标签 -->
  347. <text x="120" y="170" font-size="9" fill="#64748B">User-Agent</text>
  348. <text x="680" y="170" font-size="9" fill="#64748B">User-Agent</text>
  349. </svg>
  350. </div>
  351. <!-- 3.2 点餐下单 -->
  352. <div class="flow-container">
  353. <div class="flow-title">3.2 点餐下单流程</div>
  354. <svg viewBox="0 0 860 580" style="width:100%; max-width:860px;">
  355. <defs>
  356. <marker id="arrow2" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  357. <path d="M0,0 L8,3 L0,6 Z" fill="#64748B"/>
  358. </marker>
  359. </defs>
  360. <!-- 进入菜单 -->
  361. <rect x="330" y="15" width="140" height="44" rx="22" fill="#DBEAFE" stroke="#2563EB" stroke-width="2"/>
  362. <text x="400" y="43" text-anchor="middle" font-size="14" font-weight="700" fill="#1E40AF">进入菜单首页</text>
  363. <line x1="400" y1="59" x2="400" y2="88" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow2)"/>
  364. <!-- 分类浏览 -->
  365. <rect x="290" y="88" width="220" height="36" rx="6" fill="#F8FAFC" stroke="#94A3B8" stroke-width="1"/>
  366. <text x="400" y="111" text-anchor="middle" font-size="12" fill="#475569">按分类浏览 → 菜品列表</text>
  367. <line x1="400" y1="124" x2="400" y2="150" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow2)"/>
  368. <!-- 菜品详情 -->
  369. <rect x="290" y="150" width="220" height="36" rx="6" fill="#F8FAFC" stroke="#94A3B8" stroke-width="1"/>
  370. <text x="400" y="173" text-anchor="middle" font-size="12" fill="#475569">点击菜品 → 详情页(规格/数量)</text>
  371. <line x1="400" y1="186" x2="400" y2="212" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow2)"/>
  372. <!-- 加购 -->
  373. <rect x="290" y="212" width="220" height="36" rx="6" fill="#FFF7ED" stroke="#EA580C" stroke-width="1"/>
  374. <text x="400" y="235" text-anchor="middle" font-size="12" fill="#9A3412">加入购物车</text>
  375. <!-- 循环回选菜 -->
  376. <line x1="510" y1="230" x2="580" y2="230" stroke="#64748B" stroke-width="1" stroke-dasharray="4,2"/>
  377. <line x1="580" y1="230" x2="580" y2="106" stroke="#64748B" stroke-width="1" stroke-dasharray="4,2"/>
  378. <line x1="580" y1="106" x2="510" y2="106" stroke="#64748B" stroke-width="1" stroke-dasharray="4,2" marker-end="url(#arrow2)"/>
  379. <text x="590" y="170" font-size="10" fill="#94A3B8">继续选购</text>
  380. <line x1="400" y1="248" x2="400" y2="278" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow2)"/>
  381. <!-- 购物车 -->
  382. <rect x="290" y="278" width="220" height="36" rx="6" fill="#F8FAFC" stroke="#94A3B8" stroke-width="1"/>
  383. <text x="400" y="301" text-anchor="middle" font-size="12" fill="#475569">购物车(增减/备注/房号确认)</text>
  384. <line x1="400" y1="314" x2="400" y2="344" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow2)"/>
  385. <!-- 确认下单 -->
  386. <rect x="290" y="344" width="220" height="44" rx="8" fill="#DCFCE7" stroke="#16A34A" stroke-width="1.5"/>
  387. <text x="400" y="372" text-anchor="middle" font-size="13" font-weight="600" fill="#166534">确认下单页</text>
  388. <!-- 下单详情 -->
  389. <text x="400" y="408" text-anchor="middle" font-size="10" fill="#64748B">房号 · 联系人 · 送达时间 · 备注</text>
  390. <line x1="400" y1="416" x2="400" y2="446" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow2)"/>
  391. <!-- 支付 -->
  392. <rect x="290" y="446" width="220" height="36" rx="6" fill="#E8F5E9" stroke="#43A047" stroke-width="1"/>
  393. <text x="400" y="469" text-anchor="middle" font-size="12" fill="#2E7D32">选择支付(微信/支付宝→自动匹配)</text>
  394. <line x1="400" y1="482" x2="400" y2="510" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow2)"/>
  395. <!-- 支付成功 -->
  396. <rect x="290" y="510" width="220" height="44" rx="22" fill="#16A34A"/>
  397. <text x="400" y="538" text-anchor="middle" font-size="14" font-weight="700" fill="#FFFFFF">✅ 下单成功</text>
  398. <!-- 右侧标注 -->
  399. <text x="580" y="370" font-size="10" fill="#94A3B8">可选:立即送达</text>
  400. <text x="580" y="385" font-size="10" fill="#94A3B8">或预约送餐时间</text>
  401. </svg>
  402. </div>
  403. <!-- 3.3 订单状态流转 -->
  404. <div class="flow-container">
  405. <div class="flow-title">3.3 订单状态流转(6节点)</div>
  406. <svg viewBox="0 0 860 220" style="width:100%; max-width:860px;">
  407. <defs>
  408. <marker id="arrow3" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  409. <path d="M0,0 L8,3 L0,6 Z" fill="#64748B"/>
  410. </marker>
  411. </defs>
  412. <!-- 状态: 已下单 -->
  413. <rect x="30" y="50" width="110" height="60" rx="8" fill="#DBEAFE" stroke="#2563EB" stroke-width="2"/>
  414. <text x="85" y="76" text-anchor="middle" font-size="12" font-weight="700" fill="#1E40AF">已下单</text>
  415. <text x="85" y="96" text-anchor="middle" font-size="10" fill="#3B82F6">顾客完成支付</text>
  416. <line x1="140" y1="80" x2="175" y2="80" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow3)"/>
  417. <!-- 已接单 -->
  418. <rect x="180" y="50" width="110" height="60" rx="8" fill="#DBEAFE" stroke="#2563EB" stroke-width="2"/>
  419. <text x="235" y="76" text-anchor="middle" font-size="12" font-weight="700" fill="#1E40AF">已接单</text>
  420. <text x="235" y="96" text-anchor="middle" font-size="10" fill="#3B82F6">餐厅前台确认</text>
  421. <line x1="290" y1="80" x2="325" y2="80" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow3)"/>
  422. <!-- 备餐中 -->
  423. <rect x="330" y="50" width="110" height="60" rx="8" fill="#FEF3C7" stroke="#D97706" stroke-width="2"/>
  424. <text x="385" y="76" text-anchor="middle" font-size="12" font-weight="700" fill="#92400E">备餐中</text>
  425. <text x="385" y="96" text-anchor="middle" font-size="10" fill="#B45309">厨房正在制作</text>
  426. <line x1="440" y1="80" x2="475" y2="80" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow3)"/>
  427. <!-- 已出餐 -->
  428. <rect x="480" y="50" width="110" height="60" rx="8" fill="#FEF3C7" stroke="#D97706" stroke-width="2"/>
  429. <text x="535" y="76" text-anchor="middle" font-size="12" font-weight="700" fill="#92400E">已出餐</text>
  430. <text x="535" y="96" text-anchor="middle" font-size="10" fill="#B45309">厨师点击出餐</text>
  431. <line x1="590" y1="80" x2="625" y2="80" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow3)"/>
  432. <!-- 配送中 -->
  433. <rect x="630" y="50" width="110" height="60" rx="8" fill="#DCFCE7" stroke="#16A34A" stroke-width="2"/>
  434. <text x="685" y="76" text-anchor="middle" font-size="12" font-weight="700" fill="#166534">配送中</text>
  435. <text x="685" y="96" text-anchor="middle" font-size="10" fill="#22C55E">前台安排送餐</text>
  436. <line x1="740" y1="80" x2="775" y2="80" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow3)"/>
  437. <!-- 已送达 -->
  438. <rect x="780" y="50" width="70" height="60" rx="8" fill="#16A34A"/>
  439. <text x="815" y="76" text-anchor="middle" font-size="12" font-weight="700" fill="#FFFFFF">已完成</text>
  440. <text x="815" y="96" text-anchor="middle" font-size="10" fill="#DCFCE7">送达客房</text>
  441. <!-- 角色标注栏 -->
  442. <text x="85" y="160" text-anchor="middle" font-size="10" fill="#64748B">顾客</text>
  443. <text x="235" y="160" text-anchor="middle" font-size="10" fill="#64748B">餐厅前台</text>
  444. <text x="385" y="160" text-anchor="middle" font-size="10" fill="#64748B">厨房</text>
  445. <text x="535" y="160" text-anchor="middle" font-size="10" fill="#64748B">厨房</text>
  446. <text x="685" y="160" text-anchor="middle" font-size="10" fill="#64748B">餐厅前台</text>
  447. <text x="815" y="160" text-anchor="middle" font-size="10" fill="#64748B">✓</text>
  448. <!-- 分隔线 -->
  449. <line x1="155" y1="125" x2="155" y2="145" stroke="#E2E8F0" stroke-width="1"/>
  450. <line x1="305" y1="125" x2="305" y2="145" stroke="#E2E8F0" stroke-width="1"/>
  451. <line x1="455" y1="125" x2="455" y2="145" stroke="#E2E8F0" stroke-width="1"/>
  452. <line x1="605" y1="125" x2="605" y2="145" stroke="#E2E8F0" stroke-width="1"/>
  453. <line x1="755" y1="125" x2="755" y2="145" stroke="#E2E8F0" stroke-width="1"/>
  454. </svg>
  455. </div>
  456. <!-- 3.4 退单流程 -->
  457. <div class="flow-container">
  458. <div class="flow-title">3.4 退单流程</div>
  459. <svg viewBox="0 0 860 380" style="width:100%; max-width:860px;">
  460. <defs>
  461. <marker id="arrow4" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  462. <path d="M0,0 L8,3 L0,6 Z" fill="#64748B"/>
  463. </marker>
  464. <marker id="arrow4g" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  465. <path d="M0,0 L8,3 L0,6 Z" fill="#16A34A"/>
  466. </marker>
  467. <marker id="arrow4r" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  468. <path d="M0,0 L8,3 L0,6 Z" fill="#DC2626"/>
  469. </marker>
  470. </defs>
  471. <!-- 顾客发起退单 -->
  472. <rect x="290" y="20" width="220" height="44" rx="22" fill="#FEE2E2" stroke="#DC2626" stroke-width="2"/>
  473. <text x="400" y="48" text-anchor="middle" font-size="14" font-weight="700" fill="#991B1B">顾客发起退单</text>
  474. <line x1="400" y1="64" x2="400" y2="92" stroke="#DC2626" stroke-width="1.5" marker-end="url(#arrow4r)"/>
  475. <!-- 判断 -->
  476. <polygon points="400,97 480,127 400,157 320,127" fill="#FEF3C7" stroke="#D97706" stroke-width="1.5"/>
  477. <text x="400" y="132" text-anchor="middle" font-size="11" font-weight="600" fill="#92400E">已接单?</text>
  478. <!-- 分支: 未接单 -->
  479. <line x1="320" y1="127" x2="170" y2="127" stroke="#16A34A" stroke-width="1.5"/>
  480. <line x1="170" y1="127" x2="170" y2="205" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow4g)"/>
  481. <text x="120" y="168" font-size="10" fill="#16A34A">未接单</text>
  482. <rect x="70" y="210" width="200" height="44" rx="8" fill="#DCFCE7" stroke="#16A34A" stroke-width="1.5"/>
  483. <text x="170" y="228" text-anchor="middle" font-size="12" font-weight="600" fill="#166534">系统自动退单</text>
  484. <text x="170" y="245" text-anchor="middle" font-size="10" fill="#16A34A">原路退款(微信/支付宝)</text>
  485. <line x1="170" y1="254" x2="170" y2="290" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow4g)"/>
  486. <rect x="90" y="290" width="160" height="40" rx="20" fill="#16A34A"/>
  487. <text x="170" y="316" text-anchor="middle" font-size="13" font-weight="700" fill="#FFFFFF">退款完成</text>
  488. <!-- 分支: 已接单 -->
  489. <line x1="480" y1="127" x2="660" y2="127" stroke="#DC2626" stroke-width="1.5"/>
  490. <line x1="660" y1="127" x2="660" y2="205" stroke="#DC2626" stroke-width="1.5" marker-end="url(#arrow4r)"/>
  491. <text x="700" y="168" font-size="10" fill="#DC2626">已接单</text>
  492. <rect x="560" y="210" width="200" height="44" rx="8" fill="#FEE2E2" stroke="#DC2626" stroke-width="1.5"/>
  493. <text x="660" y="228" text-anchor="middle" font-size="12" font-weight="600" fill="#991B1B">仅宾馆前台可退</text>
  494. <text x="660" y="245" text-anchor="middle" font-size="10" fill="#DC2626">任何阶段均可介入</text>
  495. <line x1="660" y1="254" x2="660" y2="290" stroke="#DC2626" stroke-width="1.5" marker-end="url(#arrow4r)"/>
  496. <rect x="560" y="290" width="200" height="40" rx="8" fill="#FFF7ED" stroke="#EA580C" stroke-width="1.5"/>
  497. <text x="660" y="308" text-anchor="middle" font-size="11" font-weight="600" fill="#9A3412">前台确认退单</text>
  498. <text x="660" y="323" text-anchor="middle" font-size="9" fill="#EA580C">→ 强制退款</text>
  499. <!-- 标注 -->
  500. <text x="160" y="360" text-anchor="middle" font-size="10" fill="#94A3B8">客人自助操作</text>
  501. <text x="660" y="360" text-anchor="middle" font-size="10" fill="#94A3B8">宾馆前台人工介入</text>
  502. </svg>
  503. </div>
  504. <!-- 3.5 餐厅端协作 -->
  505. <div class="flow-container">
  506. <div class="flow-title">3.5 餐厅端协���流程(前台+厨房)</div>
  507. <svg viewBox="0 0 860 420" style="width:100%; max-width:860px;">
  508. <defs>
  509. <marker id="arrow5" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  510. <path d="M0,0 L8,3 L0,6 Z" fill="#64748B"/>
  511. </marker>
  512. <marker id="arrow5b" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  513. <path d="M0,0 L8,3 L0,6 Z" fill="#2563EB"/>
  514. </marker>
  515. </defs>
  516. <!-- 角色标签 -->
  517. <text x="100" y="22" font-size="11" font-weight="600" fill="#2563EB">顾客</text>
  518. <text x="310" y="22" font-size="11" font-weight="600" fill="#EA580C">餐厅前台</text>
  519. <text x="550" y="22" font-size="11" font-weight="600" fill="#16A34A">厨房</text>
  520. <line x1="0" y1="32" x2="860" y2="32" stroke="#E2E8F0" stroke-width="1"/>
  521. <!-- 顾客下单 -->
  522. <rect x="20" y="45" width="140" height="40" rx="6" fill="#DBEAFE" stroke="#2563EB" stroke-width="1.5"/>
  523. <text x="90" y="70" text-anchor="middle" font-size="12" font-weight="600" fill="#1E40AF">顾客完成下单</text>
  524. <line x1="160" y1="65" x2="230" y2="65" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow5)"/>
  525. <!-- 前台语音提醒 -->
  526. <rect x="235" y="45" width="170" height="40" rx="6" fill="#FFF7ED" stroke="#EA580C" stroke-width="1.5"/>
  527. <text x="320" y="65" text-anchor="middle" font-size="12" font-weight="600" fill="#9A3412">🔔 语音提醒新订单</text>
  528. <line x1="320" y1="85" x2="320" y2="120" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow5)"/>
  529. <!-- 接单/拒单 -->
  530. <polygon points="320,125 400,157 320,189 240,157" fill="#FEF3C7" stroke="#D97706" stroke-width="1.5"/>
  531. <text x="320" y="160" text-anchor="middle" font-size="11" font-weight="600" fill="#92400E">接单?</text>
  532. <!-- 拒单 -->
  533. <line x1="240" y1="157" x2="120" y2="157" stroke="#DC2626" stroke-width="1.5"/>
  534. <line x1="120" y1="157" x2="120" y2="220" stroke="#DC2626" stroke-width="1.5" marker-end="url(#arrow4r)"/>
  535. <rect x="40" y="220" width="160" height="44" rx="8" fill="#FEE2E2" stroke="#DC2626" stroke-width="1.5"/>
  536. <text x="120" y="240" text-anchor="middle" font-size="11" font-weight="600" fill="#991B1B">拒单(填写原因)</text>
  537. <text x="120" y="256" text-anchor="middle" font-size="9" fill="#DC2626">→ 通知顾客退款</text>
  538. <!-- 接单 -->
  539. <line x1="320" y1="189" x2="320" y2="240" stroke="#2563EB" stroke-width="1.5" marker-end="url(#arrow5b)"/>
  540. <rect x="235" y="240" width="170" height="40" rx="6" fill="#DBEAFE" stroke="#2563EB" stroke-width="1.5"/>
  541. <text x="320" y="265" text-anchor="middle" font-size="12" font-weight="600" fill="#1E40AF">接单确认</text>
  542. <!-- 通知厨房 -->
  543. <line x1="405" y1="260" x2="470" y2="260" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow5)"/>
  544. <!-- 厨房收到 -->
  545. <rect x="475" y="97" width="180" height="40" rx="6" fill="#DCFCE7" stroke="#16A34A" stroke-width="1.5"/>
  546. <text x="565" y="113" text-anchor="middle" font-size="12" font-weight="600" fill="#166534">🔊 语音播报 + 打印小票</text>
  547. <line x1="565" y1="137" x2="565" y2="175" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow5)"/>
  548. <!-- 备餐 -->
  549. <rect x="475" y="175" width="180" height="40" rx="6" fill="#FEF3C7" stroke="#D97706" stroke-width="1.5"/>
  550. <text x="565" y="200" text-anchor="middle" font-size="12" font-weight="600" fill="#92400E">厨师开始备餐</text>
  551. <line x1="565" y1="215" x2="565" y2="250" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow5)"/>
  552. <!-- 出餐 -->
  553. <rect x="475" y="250" width="180" height="44" rx="6" fill="#16A34A" stroke="#16A34A" stroke-width="1.5"/>
  554. <text x="565" y="268" text-anchor="middle" font-size="12" font-weight="700" fill="#FFFFFF">点击「出餐」</text>
  555. <text x="565" y="284" text-anchor="middle" font-size="10" fill="#DCFCE7">→ 通知餐厅前台</text>
  556. <!-- 前台送餐 -->
  557. <line x1="475" y1="272" x2="420" y2="272" stroke="#64748B" stroke-width="1.5"/>
  558. <line x1="420" y1="272" x2="420" y2="320" stroke="#64748B" stroke-width="1.5" marker-end="url(#arrow5)"/>
  559. <rect x="235" y="315" width="170" height="40" rx="6" fill="#FFF7ED" stroke="#EA580C" stroke-width="1.5"/>
  560. <text x="320" y="340" text-anchor="middle" font-size="12" font-weight="600" fill="#9A3412">安排服务员送餐</text>
  561. <!-- 送达 -->
  562. <line x1="320" y1="355" x2="320" y2="390" stroke="#16A34A" stroke-width="1.5" marker-end="url(#arrow4g)"/>
  563. <rect x="235" y="385" width="170" height="40" rx="20" fill="#16A34A"/>
  564. <text x="320" y="410" text-anchor="middle" font-size="12" font-weight="700" fill="#FFFFFF">送达客房 ✓</text>
  565. </svg>
  566. </div>
  567. <!-- 3.6 五端全景 -->
  568. <div class="flow-container">
  569. <div class="flow-title">3.6 五端协作全景图</div>
  570. <svg viewBox="0 0 860 480" style="width:100%; max-width:860px;">
  571. <defs>
  572. <marker id="arrow6" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
  573. <path d="M0,0 L8,3 L0,6 Z" fill="#94A3B8"/>
  574. </marker>
  575. </defs>
  576. <!-- 顾客端 - 左上 -->
  577. <rect x="30" y="30" width="200" height="130" rx="12" fill="#DBEAFE" stroke="#2563EB" stroke-width="1.5"/>
  578. <text x="130" y="55" text-anchor="middle" font-size="14" font-weight="700" fill="#1E40AF">📱 顾客端</text>
  579. <text x="130" y="75" text-anchor="middle" font-size="11" fill="#3B82F6">微信/支付宝小程序</text>
  580. <line x1="50" y1="85" x2="210" y2="85" stroke="#BFDBFE" stroke-width="1"/>
  581. <text x="130" y="102" text-anchor="middle" font-size="11" fill="#475569">扫码 → 点餐 → 支付</text>
  582. <text x="130" y="120" text-anchor="middle" font-size="11" fill="#475569">实时追踪 → 退单</text>
  583. <text x="130" y="145" text-anchor="middle" font-size="10" fill="#94A3B8">(移动端)</text>
  584. <!-- 餐厅前台 - 右上 -->
  585. <rect x="330" y="30" width="200" height="130" rx="12" fill="#FFF7ED" stroke="#EA580C" stroke-width="1.5"/>
  586. <text x="430" y="55" text-anchor="middle" font-size="14" font-weight="700" fill="#9A3412">🖥️ 餐厅前台</text>
  587. <text x="430" y="75" text-anchor="middle" font-size="11" fill="#C2410C">PAD / 移动 / PC</text>
  588. <line x1="350" y1="85" x2="510" y2="85" stroke="#FED7AA" stroke-width="1"/>
  589. <text x="430" y="102" text-anchor="middle" font-size="11" fill="#475569">接单/拒单 · 语音提醒</text>
  590. <text x="430" y="120" text-anchor="middle" font-size="11" fill="#475569">营业时间 · 安排送餐</text>
  591. <text x="430" y="145" text-anchor="middle" font-size="10" fill="#94A3B8">(多端)</text>
  592. <!-- 厨房 - 右中 -->
  593. <rect x="630" y="30" width="200" height="130" rx="12" fill="#DCFCE7" stroke="#16A34A" stroke-width="1.5"/>
  594. <text x="730" y="55" text-anchor="middle" font-size="14" font-weight="700" fill="#166534">👨‍🍳 厨房端</text>
  595. <text x="730" y="75" text-anchor="middle" font-size="11" fill="#22C55E">屏幕 + 打印机</text>
  596. <line x1="650" y1="85" x2="810" y2="85" stroke="#BBF7D0" stroke-width="1"/>
  597. <text x="730" y="102" text-anchor="middle" font-size="11" fill="#475569">语音播报 · 打印小票</text>
  598. <text x="730" y="120" text-anchor="middle" font-size="11" fill="#475569">备餐 → 出餐</text>
  599. <text x="730" y="145" text-anchor="middle" font-size="10" fill="#94A3B8">(厨房端)</text>
  600. <!-- 宾馆前台 - 左下 -->
  601. <rect x="30" y="250" width="200" height="130" rx="12" fill="#F3E8FF" stroke="#9333EA" stroke-width="1.5"/>
  602. <text x="130" y="275" text-anchor="middle" font-size="14" font-weight="700" fill="#6B21A8">🏨 宾馆前台</text>
  603. <text x="130" y="295" text-anchor="middle" font-size="11" fill="#A855F7">PC / 移动</text>
  604. <line x1="50" y1="305" x2="210" y2="305" stroke="#E9D5FF" stroke-width="1"/>
  605. <text x="130" y="322" text-anchor="middle" font-size="11" fill="#475569">全订单查看 · 状态总览</text>
  606. <text x="130" y="340" text-anchor="middle" font-size="11" fill="#475569">任何阶段退单</text>
  607. <text x="130" y="365" text-anchor="middle" font-size="10" fill="#94A3B8">(多端)</text>
  608. <!-- 后台管理 - 右下 -->
  609. <rect x="330" y="250" width="200" height="130" rx="12" fill="#F1F5F9" stroke="#475569" stroke-width="1.5"/>
  610. <text x="430" y="275" text-anchor="middle" font-size="14" font-weight="700" fill="#334155">⚙️ 后台管理</text>
  611. <text x="430" y="295" text-anchor="middle" font-size="11" fill="#64748B">PC</text>
  612. <line x1="350" y1="305" x2="510" y2="305" stroke="#E2E8F0" stroke-width="1"/>
  613. <text x="430" y="322" text-anchor="middle" font-size="11" fill="#475569">数据看板 · 订单管理</text>
  614. <text x="430" y="340" text-anchor="middle" font-size="11" fill="#475569">菜品/房间/品牌设置</text>
  615. <text x="430" y="365" text-anchor="middle" font-size="10" fill="#94A3B8">(PC端)</text>
  616. <!-- 虚线连接 -->
  617. <!-- 顾客 → 餐厅前台 -->
  618. <line x1="230" y1="95" x2="330" y2="95" stroke="#94A3B8" stroke-width="1" stroke-dasharray="5,3" marker-end="url(#arrow6)"/>
  619. <text x="280" y="88" text-anchor="middle" font-size="9" fill="#94A3B8">下单</text>
  620. <!-- 餐厅前台 → 厨房 -->
  621. <line x1="530" y1="95" x2="630" y2="95" stroke="#94A3B8" stroke-width="1" stroke-dasharray="5,3" marker-end="url(#arrow6)"/>
  622. <text x="580" y="88" text-anchor="middle" font-size="9" fill="#94A3B8">接单通知</text>
  623. <!-- 厨房 → 餐厅前台 -->
  624. <line x1="630" y1="140" x2="530" y2="140" stroke="#94A3B8" stroke-width="1" stroke-dasharray="5,3" marker-end="url(#arrow6)"/>
  625. <text x="580" y="133" text-anchor="middle" font-size="9" fill="#94A3B8">出餐通知</text>
  626. <!-- 顾客 → 宾馆前台 (退单) -->
  627. <path d="M30,200 Q30,225 130,225 Q230,225 230,250" stroke="#94A3B8" stroke-width="1" stroke-dasharray="5,3" fill="none" marker-end="url(#arrow6)"/>
  628. <text x="50" y="233" font-size="9" fill="#94A3B8">退单请求</text>
  629. <!-- 所有端 → 后台 -->
  630. <line x1="230" y1="315" x2="330" y2="315" stroke="#94A3B8" stroke-width="1" stroke-dasharray="5,3" marker-end="url(#arrow6)"/>
  631. <text x="280" y="308" text-anchor="middle" font-size="9" fill="#94A3B8">数据上报</text>
  632. <!-- 后台 → 顾客 -->
  633. <line x1="330" y1="360" x2="230" y2="360" stroke="#94A3B8" stroke-width="1" stroke-dasharray="5,3" marker-end="url(#arrow6)"/>
  634. <text x="280" y="353" text-anchor="middle" font-size="9" fill="#94A3B8">配置下发</text>
  635. <!-- 中央:核心数据 -->
  636. <rect x="630" y="260" width="200" height="100" rx="12" fill="#F8FAFC" stroke="#CBD5E1" stroke-width="1" stroke-dasharray="4,2"/>
  637. <text x="730" y="290" text-anchor="middle" font-size="12" font-weight="600" fill="#475569">核心数据</text>
  638. <text x="730" y="312" text-anchor="middle" font-size="10" fill="#94A3B8">订单 · 菜品 · 房间</text>
  639. <text x="730" y="330" text-anchor="middle" font-size="10" fill="#94A3B8">状态 · 营业时间</text>
  640. </svg>
  641. </div>
  642. </div>
  643. <!-- ==================== 4. 功能模块清单 ==================== -->
  644. <div class="section" id="s4">
  645. <div class="section-title">4. 功能模块清单</div>
  646. <div class="section-subtitle">4.1 顾客端</div>
  647. <table>
  648. <thead><tr><th>功能模块</th><th>说明</th><th>优先级</th></tr></thead>
  649. <tbody>
  650. <tr><td>扫码进入</td><td>扫聚合码 → 环境判断 → 自动进入微信/支付宝小程序</td><td><span class="tag tag-blue">P0</span></td></tr>
  651. <tr><td>房号确认</td><td>扫码后展示房号+欢迎语,客人确认后进入菜单</td><td><span class="tag tag-blue">P0</span></td></tr>
  652. <tr><td>营业时间提示</td><td>非营业时段扫码,展示提示页+下次营业时间</td><td><span class="tag tag-green">P1</span></td></tr>
  653. <tr><td>菜单浏览</td><td>分类导航、菜品列表、搜索、售罄标识</td><td><span class="tag tag-blue">P0</span></td></tr>
  654. <tr><td>菜品详情</td><td>大图、描述、规格选择、数量加减</td><td><span class="tag tag-blue">P0</span></td></tr>
  655. <tr><td>购物车</td><td>菜品清单、增减、备注、房号确认</td><td><span class="tag tag-blue">P0</span></td></tr>
  656. <tr><td>确认下单</td><td>房号、联系人、备注、立即/预约送达时间</td><td><span class="tag tag-blue">P0</span></td></tr>
  657. <tr><td>在线支付</td><td>根据扫码环境自动匹配微信支付或支付宝支付</td><td><span class="tag tag-blue">P0</span></td></tr>
  658. <tr><td>订单状态追踪</td><td>6节点进度可视化,实时更新状态</td><td><span class="tag tag-blue">P0</span></td></tr>
  659. <tr><td>退单(接单前)</td><td>接单前客人可自助退单,原路退款</td><td><span class="tag tag-blue">P0</span></td></tr>
  660. <tr><td>我的订单</td><td>历史订单列表,状态标签,订单详情</td><td><span class="tag tag-green">P1</span></td></tr>
  661. </tbody>
  662. </table>
  663. <div class="section-subtitle">4.2 餐厅前台</div>
  664. <table>
  665. <thead><tr><th>功能模块</th><th>说明</th><th>优先级</th></tr></thead>
  666. <tbody>
  667. <tr><td>新订单语音提醒</td><td>新订单到达时语音播报+弹窗提醒</td><td><span class="tag tag-blue">P0</span></td></tr>
  668. <tr><td>接单/拒单</td><td>查看订单详情后接单确认;拒单需填写原因</td><td><span class="tag tag-blue">P0</span></td></tr>
  669. <tr><td>订单处理流转</td><td>待接单→已接单→备餐中→已出餐→配送中→已送达</td><td><span class="tag tag-blue">P0</span></td></tr>
  670. <tr><td>出餐通知接收</td><td>收到厨房出餐通知 → 安排服务员送餐</td><td><span class="tag tag-blue">P0</span></td></tr>
  671. <tr><td>营业时间设置</td><td>多时段设置(如早7-10、午11:30-14、晚17-21),每天固定</td><td><span class="tag tag-blue">P0</span></td></tr>
  672. <tr><td>临时暂停接单</td><td>一键暂停/恢复接单(厨房故障等突发情况)</td><td><span class="tag tag-green">P1</span></td></tr>
  673. <tr><td>当日订单看板</td><td>进行中订单一览、预计送达时间</td><td><span class="tag tag-green">P1</span></td></tr>
  674. </tbody>
  675. </table>
  676. <div class="section-subtitle">4.3 厨房端</div>
  677. <table>
  678. <thead><tr><th>功能模块</th><th>说明</th><th>优先级</th></tr></thead>
  679. <tbody>
  680. <tr><td>语音播报</td><td>新订单到达时语音播报菜品内容</td><td><span class="tag tag-blue">P0</span></td></tr>
  681. <tr><td>自动打印小票</td><td>接单后自动打印厨房小票(菜品、房号、备注)</td><td><span class="tag tag-blue">P0</span></td></tr>
  682. <tr><td>待做订单列表</td><td>按接单时间排序的待备餐订单</td><td><span class="tag tag-blue">P0</span></td></tr>
  683. <tr><td>出餐操作</td><td>厨师完成备餐后点击出餐 → 通知餐厅前台</td><td><span class="tag tag-blue">P0</span></td></tr>
  684. </tbody>
  685. </table>
  686. <div class="section-subtitle">4.4 宾馆前台</div>
  687. <table>
  688. <thead><tr><th>功能模块</th><th>说明</th><th>优先级</th></tr></thead>
  689. <tbody>
  690. <tr><td>全订单查看</td><td>查看所有订餐信息,不限状态</td><td><span class="tag tag-blue">P0</span></td></tr>
  691. <tr><td>订单状态总览</td><td>各状态订单列表、筛选、搜索</td><td><span class="tag tag-blue">P0</span></td></tr>
  692. <tr><td>退单(任何阶段)</td><td>可在任意订单阶段介入退单,含接单后、备餐后</td><td><span class="tag tag-blue">P0</span></td></tr>
  693. <tr><td>订单详情查看</td><td>查看单个订单的完整信息和状态时间线</td><td><span class="tag tag-green">P1</span></td></tr>
  694. </tbody>
  695. </table>
  696. <div class="section-subtitle">4.5 后台管理</div>
  697. <table>
  698. <thead><tr><th>功能模块</th><th>说明</th><th>优先级</th></tr></thead>
  699. <tbody>
  700. <tr><td>数据看板</td><td>今日订单数、营业额、热门菜品、平均送达时长</td><td><span class="tag tag-green">P1</span></td></tr>
  701. <tr><td>菜品管理</td><td>菜品列表、上架/下架、价格编辑、售罄设置</td><td><span class="tag tag-blue">P0</span></td></tr>
  702. <tr><td>订单管理</td><td>全部订单、状态筛选、订单详情</td><td><span class="tag tag-blue">P0</span></td></tr>
  703. <tr><td>房间管理</td><td>房间列表、二维码生成/重生成/补打、启停点餐</td><td><span class="tag tag-blue">P0</span></td></tr>
  704. <tr><td>系统设置</td><td>品牌风格(配色方案选择,五端同步生效)</td><td><span class="tag tag-green">P1</span></td></tr>
  705. </tbody>
  706. </table>
  707. </div>
  708. <!-- ==================== 5. 各端页面结构 ==================== -->
  709. <div class="section" id="s5">
  710. <div class="section-title">5. 各端页面结构</div>
  711. <div class="section-subtitle">5.1 顾客端(小程序)— 8页</div>
  712. <table>
  713. <thead><tr><th width="40">#</th><th>页面</th><th>路由</th><th>说明</th></tr></thead>
  714. <tbody>
  715. <tr><td>1</td><td>房号确认页</td><td>/room-confirm</td><td>显示房号、酒店欢迎语、营业时间;确认进入</td></tr>
  716. <tr><td>2</td><td>菜单首页</td><td>/menu</td><td>分类导航、推荐banner、菜品卡片、售罄标识</td></tr>
  717. <tr><td>3</td><td>菜品详情页</td><td>/dish/:id</td><td>大图、描述、规格选择、数量、加购按钮</td></tr>
  718. <tr><td>4</td><td>购物车</td><td>/cart</td><td>菜品清单、数量增减、备注、去结算</td></tr>
  719. <tr><td>5</td><td>确认下单页</td><td>/order-confirm</td><td>房号、联系人、送达时间、支付方式</td></tr>
  720. <tr><td>6</td><td>支付页面</td><td>/pay/:id</td><td>微信支付/支付宝(根据环境自动匹配)</td></tr>
  721. <tr><td>7</td><td>订单状态页</td><td>/order/:id</td><td>6节点进度条、预计送达时间、退单按钮(未接单时)</td></tr>
  722. <tr><td>8</td><td>我的订单</td><td>/orders</td><td>历史订单列表、状态标签</td></tr>
  723. </tbody>
  724. </table>
  725. <div class="section-subtitle">5.2 餐厅前台 — 4页</div>
  726. <table>
  727. <thead><tr><th width="40">#</th><th>页面</th><th>说明</th></tr></thead>
  728. <tbody>
  729. <tr><td>1</td><td>订单提醒弹窗</td><td>新订单语音+弹窗提醒</td></tr>
  730. <tr><td>2</td><td>订单处理页</td><td>待接单列表、订单详情、接单/拒单操作</td></tr>
  731. <tr><td>3</td><td>当日订单看板</td><td>进行中订单总览、送达时间</td></tr>
  732. <tr><td>4</td><td>营业时间设置</td><td>多时段编辑、临时暂停开关</td></tr>
  733. </tbody>
  734. </table>
  735. <div class="section-subtitle">5.3 厨房端 — 2页</div>
  736. <table>
  737. <thead><tr><th width="40">#</th><th>页面</th><th>说明</th></tr></thead>
  738. <tbody>
  739. <tr><td>1</td><td>待备餐列表</td><td>按时间排序的待做列表、语音播报、小票打印</td></tr>
  740. <tr><td>2</td><td>订单详情</td><td>菜品明细、房号、备注、出餐按钮</td></tr>
  741. </tbody>
  742. </table>
  743. <div class="section-subtitle">5.4 宾馆前台 — 2页</div>
  744. <table>
  745. <thead><tr><th width="40">#</th><th>页面</th><th>说明</th></tr></thead>
  746. <tbody>
  747. <tr><td>1</td><td>订单总览</td><td>全部订单列表、状态筛选、搜索</td></tr>
  748. <tr><td>2</td><td>订单详情+退单</td><td>订单完整信息、状态时间线、退单操作</td></tr>
  749. </tbody>
  750. </table>
  751. <div class="section-subtitle">5.5 后台管理 — 5页</div>
  752. <table>
  753. <thead><tr><th width="40">#</th><th>页面</th><th>说明</th></tr></thead>
  754. <tbody>
  755. <tr><td>1</td><td>数据看板</td><td>今日订单、营业额、热门菜品、趋势图</td></tr>
  756. <tr><td>2</td><td>菜品管理</td><td>列表、上下架、价格编辑、售罄</td></tr>
  757. <tr><td>3</td><td>订单管理</td><td>全部订单、筛选、详情</td></tr>
  758. <tr><td>4</td><td>房间管理</td><td>房间列表、二维码生成/重生成、启停</td></tr>
  759. <tr><td>5</td><td>系统设置</td><td>品牌风格配色切换</td></tr>
  760. </tbody>
  761. </table>
  762. </div>
  763. <!-- ==================== 6. 订单状态定义 ==================== -->
  764. <div class="section" id="s6">
  765. <div class="section-title">6. 订单状态定义</div>
  766. <div class="status-bar">
  767. <div class="status-step active"><span class="step-num">1</span>已下单</div>
  768. <div class="status-step"><span class="step-num">2</span>已接单</div>
  769. <div class="status-step"><span class="step-num">3</span>备餐中</div>
  770. <div class="status-step"><span class="step-num">4</span>已出餐</div>
  771. <div class="status-step"><span class="step-num">5</span>配送中</div>
  772. <div class="status-step"><span class="step-num">6</span>已完成</div>
  773. </div>
  774. <table>
  775. <thead><tr><th>状态</th><th>触发人</th><th>触发动作</th><th>下一步</th><th>可退单</th></tr></thead>
  776. <tbody>
  777. <tr><td><span class="tag tag-blue">已下单</span></td><td>顾客</td><td>完成支付</td><td>等待餐厅接单</td><td><span class="tag tag-green">✓ 自助退</span></td></tr>
  778. <tr><td><span class="tag tag-blue">已接单</span></td><td>餐厅前台</td><td>点击接单</td><td>通知厨房</td><td><span class="tag tag-orange">仅宾馆前台</span></td></tr>
  779. <tr><td><span class="tag tag-orange">备餐中</span></td><td>厨房</td><td>开始制作</td><td>完成后出餐</td><td><span class="tag tag-orange">仅宾馆前台</span></td></tr>
  780. <tr><td><span class="tag tag-orange">已出餐</span></td><td>厨房</td><td>点击出餐</td><td>通知前台送餐</td><td><span class="tag tag-orange">仅宾馆前台</span></td></tr>
  781. <tr><td><span class="tag tag-green">配送中</span></td><td>餐厅前台</td><td>安排送餐</td><td>送达客房</td><td><span class="tag tag-orange">仅宾馆前台</span></td></tr>
  782. <tr><td><span class="tag tag-green">已完成</span></td><td>—</td><td>送达确认</td><td>终态</td><td><span class="tag tag-gray">不可退</span></td></tr>
  783. </tbody>
  784. </table>
  785. <div class="section-subtitle">拒单状态(异常分支)</div>
  786. <table>
  787. <thead><tr><th>状态</th><th>触发人</th><th>触发动作</th><th>结果</th></tr></thead>
  788. <tbody>
  789. <tr><td><span class="tag tag-red">已拒单</span></td><td>餐厅前台</td><td>拒绝接单(填写原因)</td><td>通知顾客退款,自动原路返回</td></tr>
  790. </tbody>
  791. </table>
  792. </div>
  793. <!-- ==================== 7. 非功能性需求 ==================== -->
  794. <div class="section" id="s7">
  795. <div class="section-title">7. 非功能性需求</div>
  796. <div class="card">
  797. <strong>性能要求</strong>
  798. <ul class="point-list">
  799. <li>扫码到进入小程序 &lt; 2 秒</li>
  800. <li>菜单加载 &lt; 1.5 秒</li>
  801. <li>订单状态更新延迟 &lt; 3 秒</li>
  802. </ul>
  803. </div>
  804. <div class="card">
  805. <strong>兼容性要求</strong>
  806. <ul class="point-list">
  807. <li>顾客端:微信小程序(iOS 14+ / Android 8+)、支付宝小程序</li>
  808. <li>餐厅前台/宾馆前台:Chrome 90+ / Safari 14+ / 移动端浏览器</li>
  809. <li>厨房端:大屏显示器(1920×1080)+ 热敏打印机</li>
  810. <li>后台管理:Chrome 90+ / Edge 90+</li>
  811. </ul>
  812. </div>
  813. <div class="card">
  814. <strong>语音要求</strong>
  815. <ul class="point-list">
  816. <li>餐厅前台:新订单语音提醒(可暂停/调整音量)</li>
  817. <li>厨房端:新订单语音播报菜品名称和房号</li>
  818. </ul>
  819. </div>
  820. <div class="card">
  821. <strong>视觉要求</strong>
  822. <ul class="point-list">
  823. <li>整体风格:简洁商务风,留白多、扁平化</li>
  824. <li>三套候选配色方案(商务深蓝 / 暖金雅致 / 墨绿清新),待客户确认</li>
  825. <li>品牌风格设置后五端同步生效</li>
  826. <li>移动端(顾客、PAD):手机/平板外框模拟,底部 Tab 导航</li>
  827. <li>PC 端(后台、宾馆前台):左侧导航 + 右侧内容区</li>
  828. </ul>
  829. </div>
  830. <div class="card">
  831. <strong>安全要求</strong>
  832. <ul class="point-list">
  833. <li>支付环境自动判断,防止支付方式注入攻击</li>
  834. <li>退单操作权限控制(接单前顾客自退、接单后仅宾馆前台)</li>
  835. <li>订单数据隔离,各端仅可见本端权限范围内数据</li>
  836. </ul>
  837. </div>
  838. </div>
  839. <!-- ==================== 页脚 ==================== -->
  840. <div class="footer">
  841. <p>酒店客房送餐系统 · 需���说明书 v1.0</p>
  842. <p>2026年7月26日 · 需求确认阶段</p>
  843. <p style="margin-top:8px;color:#94A3B8;">本文档为需求阶段产物,页面结构及流程以最终原型稿为准</p>
  844. </div>
  845. </div>
  846. </body>
  847. </html>