news 2026/8/19 15:18:32

nxdc-milktea 取餐页状态机揭秘:已下单→制作中→配送中→已完成的步骤条逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nxdc-milktea 取餐页状态机揭秘:已下单→制作中→配送中→已完成的步骤条逻辑

nxdc-milktea 取餐页状态机揭秘:已下单→制作中→配送中→已完成的步骤条逻辑

【免费下载链接】nxdc-milktea一套仿奈雪の茶小程序的前端模板项目地址: https://gitcode.com/gh_mirrors/nx/nxdc-milktea

点完奶茶后,取餐页那条"已下单→制作中→配送中→已完成"的步骤条是怎么动起来的?这套仿奈雪の茶的小程序前端模板 nxdc-milktea 用一套极简的取餐页状态机,仅靠一个order.status字段就驱动了整条步骤条的高亮、图标切换和文案变化。本文带你从支付跳转开始,逐行拆解取餐页步骤条的完整状态流转逻辑,新手也能看懂。

取餐页状态机的三个关键入口:从支付到取餐的跳转链路

想看懂步骤条,先要知道order数据从哪来。取餐页 take-foods.vue 本身不发起任何请求,它只是通过mapState(['order'])从 Vuex 全局状态里取当前订单:

  • 支付页 pay.vue 的pay()方法里,会根据下单方式选择测试订单(自取用orders[0]、外卖用orders[1]),再执行Object.assign(order, {status: 1})把订单初始状态置为1(已下单),通过SET_ORDER提交到 store/index.js 的order状态;
  • 随后uni.reLaunch跳转到取餐页,页面读取到的就是这份带着status: 1的新订单;
  • 取餐页里如果订单为空,会展示"您还没有点单"的空状态并引导去点餐,这也是状态机的"第 0 态"。

也就是说,取餐页状态机的输入只有两个变量:order.status(当前所处状态)和order.typeCate(享用方式),所有 UI 都由它们推导而来。

状态机核心:order.status 如何驱动步骤条切换

取餐页步骤条位于 take-foods.vue,由两行结构拼成:上面一行是状态图标列(steps__img-column),下面一行是文字列(steps__text-column)。状态机的判定规则非常直观,全部基于order.status与状态阈值的比较:

状态阈值步骤文案触发场景
status >= 1已下单支付完成刚跳转过来
status >= 2制作中门店接单开始制作
status >= 3配送中(仅外卖)骑手取货上路
status >= 4请取餐 / 已送达制作完成或送达

每一步都遵循同一套模板:文字节点用:class="{active: order.status >= N}"决定是否高亮,图标节点用v-if="order.status >= N"决定显示"选中态"还是"未选中态"的图片。比如"制作中"这一格,状态达标时亮出production_selected.png,未达标则显示灰色production.png。因为阈值是单调递增的,状态一旦推进就不会回退,天然符合订单只前进不后退的业务语义。

步骤条高亮与图标切换的完整逻辑

状态机不仅控制"亮不亮",还负责步骤之间的连接线。文字列里每个节点左右各有一条细线(steps__column-item-line),当节点进入active状态时,SCSS 样式会让文字加粗、变深,左右连接线同步变为深色,形成一条从"已下单"连到当前状态的完整进度线。首尾两端的连接线则用bg-transparent隐藏,保证视觉上从第一个图标平滑开始、到最后一个图标自然结束。

两条状态线:自取与外卖的 typeCate 分支逻辑

步骤条最精彩的设计,是同一份模板同时服务两种取餐场景,靠的就是typeCate这个"享用方式"开关:

  • 自取(typeCate == 1:走 3 步流程——已下单 → 制作中 →请取餐,同时页面顶部会放大展示取单号sort_num,方便用户到店取餐;
  • 外卖(typeCate == 2:走 4 步流程——已下单 → 制作中 →配送中已送达,配送中与已送达这两个节点由v-if="order.typeCate == 2"控制是否渲染,最后一个节点的文案也从"请取餐"动态切换为"已送达"。

代码里通过:class="{'w-80': order.typeCate == 1, 'w-100': order.typeCate == 2}"微调步骤条宽度,让 3 步和 4 步两种布局都能均匀铺开。另外,当status <= 1时,页面还会显示"您前面还有 N 单待制作"的排队提示,让用户对等待时长有心理预期。

步骤条背后的订单状态字段与时间线

步骤条只是冰山一角,订单对象里还藏着一整条状态时间线,在 orders.js 的模拟数据里清晰可见:

  • created_at:下单时间
  • payed_at:支付完成时间
  • productioned_time:完成制作时间(对应步骤条走到"请取餐")
  • sended_time:配送发出时间(对应外卖的"配送中")
  • completed_time:订单完成时间

每个时间字段对应状态机中的一个里程碑,前端拿到实时订单后只需按字段更新status,步骤条就会自动推进。模拟数据中订单的终态status为 5,status_text为"已完成",可以看作是状态机的"第 5 态"——步骤条走到第 4 步后,订单在业务层就算彻底完结。

延伸:历史订单列表如何复用状态机

取餐页之外,订单状态机还被复用在历史订单页 orders.vue:列表每项直接展示status_text(如"已完成"),点击后进入 detail.vue 查看完整订单信息。这两处都不需要重新写状态判断,因为状态文案已由数据层统一给出,前端只管消费——这也是把"状态"集中管理带来的最大好处。

总结:三步复刻奶茶小程序取餐步骤条

回顾整个取餐页状态机的设计,核心就三件事:支付成功后写入status: 1的订单 → 取餐页用status >= N驱动图标、文字、连接线联动高亮 → 用typeCate分流自取与外卖两条状态线。没有复杂的状态管理库,没有冗余的判断分支,一个数字加一个类型标识就撑起了完整的取餐进度体验。如果你想给自己的小程序加一条丝滑的订单步骤条,直接照抄这套"状态驱动 UI"的思路即可,简单又优雅。

【免费下载链接】nxdc-milktea一套仿奈雪の茶小程序的前端模板项目地址: https://gitcode.com/gh_mirrors/nx/nxdc-milktea

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 15:17:53

函数式编程核心概念与实践:从纯函数到数据处理流水线

在技术社区中&#xff0c;我们偶尔会看到一些关于编程范式的激烈讨论&#xff0c;甚至出现一些带有主观情绪化的表述。本文无意参与任何形式的“范式之争”或评价个人偏好&#xff0c;而是希望回归技术本质&#xff0c;系统地探讨函数式编程&#xff08;Functional Programming…

作者头像 李华
网站建设 2026/8/19 15:14:54

SMAPI 模组加载器安装指南:半小时让星露谷跑满心仪模组

SMAPI 模组加载器安装指南&#xff1a;半小时让星露谷跑满心仪模组 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 周六下午&#xff0c;你把十几个星露谷模组一股脑丢进游戏目录&#xff0c;双击启…

作者头像 李华
网站建设 2026/8/19 15:12:47

全屋摄像头统一接入 go2rtc:一个轻量程序终结多协议混乱

全屋摄像头统一接入 go2rtc&#xff1a;一个轻量程序终结多协议混乱 【免费下载链接】go2rtc Ultimate camera streaming application 项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc 门铃走 RTSP、客厅球机只认 ONVIF、仓库那台老设备更是要专用私有协议——…

作者头像 李华
网站建设 2026/8/19 15:11:55

SaveGameFree 保存位置与旋转:5 分钟让角色记住上次的位置

SaveGameFree 保存位置与旋转&#xff1a;5 分钟让角色记住上次的位置 【免费下载链接】SaveGameFree Save Game Free is a free and simple but powerful solution for saving and loading game data in unity. 项目地址: https://gitcode.com/gh_mirrors/sa/SaveGameFree …

作者头像 李华
网站建设 2026/8/19 15:11:30

用NiceDialog打造底部分享弹窗:仿微信风格UI完整实战教程

用NiceDialog打造底部分享弹窗&#xff1a;仿微信风格UI完整实战教程 【免费下载链接】NiceDialog A nice dialog, that is based on DialogFragment 项目地址: https://gitcode.com/gh_mirrors/ni/NiceDialog 在Android开发中&#xff0c;底部分享弹窗是App里出现频率…

作者头像 李华