# 更新日志 – 销售单协同备货与打印优化
## 📅 更新时间
2026-05-03
## 🎯 更新目标
为销售单详情页增加**多人协同备货**功能,支持实时同步商品备货状态,并通过“一键备货”防止重复处理。同时优化针式打印机打印效果,隐藏非必要元素、去除背景色,并将信息标签与值同行显示。
---
## 🗄️ 数据库变更
```sql
-- 为销售明细表增加同步状态字段
ALTER TABLE `order_items`
ADD COLUMN `sync_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '同步状态 0未备货 1已备货' AFTER `price`;
· 已存在的记录默认 0,不影响原有查询和功能。
📁 涉及文件
文件 变更类型 说明
order_details.php 修改 增加同步状态栏、点击切换备货、轮询更新、一键备货按钮;优化打印样式
detail_api.php 新增 提供 JSON 格式的销售单详情,包含 sync_status
toggle_sync.php 新增 切换单条明细的备货状态(0→1,1→0)
complete_sync.php 新增 一键将所有明细标记为已备货,返回通知结果
以上三个 API 文件放在 /xiaoshou/ 目录下,与详情页同级。
✨ 功能变更详情
- 多人协同备货
· 实时状态栏:页面顶部显示“已备 X/总数 Y”,每 0.5 秒自动轮询(建议生产环境改为 3 秒),使用 detail_api.php 获取最新数据。
· 点击切换:点击任意明细行可切换“已备 / 未备”状态,需确认后通过 toggle_sync.php 更新,成功后自动刷新。
· 变更高亮:其他用户修改的状态行会闪烁黄色背景,提醒操作员。
· 一键备货:点击“一键备货”按钮,调用 complete_sync.php 将所有明细标记为已备,并显示通知结果,防止多人重复备货。
· 防误触:明细行禁止右键菜单、文本选中,避免移动端长按弹窗。
- 打印优化(适配针式打印机)
· 隐藏状态列:打印时通过 .no-print 类隐藏“状态”列(表头 + 所有单元格)。
· 隐藏界面元素:打印时隐藏导航栏、同步栏、按钮组、底部 Tab Bar。
· 白底黑字:强制去除所有背景色(包括已备行的绿色背景),所有文字变为黑色。
· 黑色边框:表格边框统一为 1px solid #000。
· 信息项同行显示:打印时“要货单位”、“手机”等字段的标签与值水平排列,节省纸张高度。
- 样式调整
· 新增 .sync-bar、.sync-status、.no-print、.flash 等样式。
· 同步状态栏使用绿色圆点动画,已备行背景为淡绿色。
· .no-print 类在 @media print 中设置 display: none !important。
⚠️ 注意事项
数据库
· 执行 ALTER TABLE 前请备份 order_items 表。
· 字段默认值为 0,与现有数据兼容。
API 文件
· detail_api.php 需要连接 ../db.php,确保路径正确。
· 三个 API 返回 Content-Type: application/json; charset=utf-8,前端使用 fetch 解析 JSON。
· complete_sync.php 目前返回模拟通知结果,可结合实际渠道扩展(短信/推送)。
轮询频率
· 当前轮询间隔 500 毫秒(0.5 秒),极高频率可能造成服务器压力。建议生产环境调整为 3000 毫秒(3 秒)。
· 页面不可见时自动停止轮询,恢复可见后重新开始。
打印
· 打印时状态列彻底隐藏,但 JS 动态生成的行必须包含 class="no-print"(已修改)。
· 针式打印机纸张通常为窄幅,建议在 @media print 中进一步调整字体大小(如 font-size: 12pt)以适应实际纸张。
📦 部署步骤
- 备份数据库。
- 执行上述 ALTER TABLE 语句。
- 将 detail_api.php、toggle_sync.php、complete_sync.php 上传至 /xiaoshou/ 目录。
- 替换更新后的 order_details.php。
- 验证功能:
· 打开任意销售单详情页,检查同步状态栏及点击切换。
· 打开两个浏览器窗口,在 A 窗口切换状态,B 窗口在 3 秒内看到高亮刷新。
· 点击“一键备货”,确认所有明细变为已备。
· 打印预览,确认状态列消失、背景为白色、信息项同行显示。
本次更新完全向下兼容,不影响原有销售单数据及业务流程。










这一切,似未曾拥有