SCE一体化
LINKPULSE TECHNOLOGY

一体化物流平台

全链路可视 · 智能协同 · 高效履约

99.9%
系统可用性
50+
覆盖城市
24/7
实时监控
AI+
智能决策
运输调度 · 运单管理
车辆监管 · GPS轨迹
智能仓储 · OCR识别
数据可视 · 看板
SCE一体化物流平台
{{currentNavLabel}}
SCE一体化物流中控平台
LINKPULSE LOGISTICS CONTROL CENTER
👤 {{userDisplayName(currentUser)}}
🔑 修改密码
🚪 退出登录
{{headerClock}}
📡 正在加载仓库运行数据…
📎 批量上传
📷 手工拍照
📁 文件夹批量
📤

点击或拖拽图片到此处上传

支持 JPG / PNG / BMP / WebP,可多张同时上传
📋 已选单据图片({{inFiles.length}}张)
{{f.name}}
待识别 识别中 已识别 失败
📊 OCR识别进度
{{ocrDoneCount}}/{{inFiles.length}} 已识别 · ✅ {{autoSavedCount}} 条已自动入库 🔧 已应用 {{totalCorrections}} 条纠错规则
{{f.name}} {{f.status==='pending'?'等待':f.status==='processing'?'识别中':f.status==='done'?'完成':'失败'}} ✅ 已入库 {{f.savedCount}} 条{{f.savedAt}} ❌ 入库失败
📭
OCR 识别已完成,但未提取到有效物料数据
可能原因:图片模糊、表头不标准或字段为空
请检查图片后重试,或手动录入出入库记录
🧠 阿里云OCR 识别 — 共识别 {{ocrResults.length}} 组数据,涉及 {{ocrResultsBySupplier.length}} 个供应商 📄 {{ocrDocTypeLabel}} 综合置信度: {{ocrResults[0]._overall_conf}}%
📝 识别结果确认(多行数据,可手动修改)
✅ 已自动入库 {{autoSavedCount}} 条
说明:空白字段将显示「无」;所有单元格均可编辑,修改后点击「保存纠错」即可保存/更新台账并计入AI训练;可点击各供应商卡片右上「➕ 添加空行」添加新行,点击「删除」删除本行;双击供应商名称可直接修正并计入AI训练
📭
暂无识别数据,请检查图片是否清晰可识别
🏭 {{group.supplier || '未识别供应商'}} 共 {{group.rows.length}} 条记录 ✅ 全部已入库 ⏳ {{group.savedCount}}/{{group.rows.length}} 已入库
# 物料编码 零件号 零部件名称 规格型号 单位 SNP 箱数 托数 数量 单据编号 所属项目名称 备注 库位 置信度 操作
{{group.rows.indexOf(row)+1}}
{{row.location_code||'—'}} {{row._overall_conf||'--'}}%
已纠错{{row._corrections}}处
已入库
保存中...
📷 拍照识别 📱 手机拍照识别

任意设备/任意网络都能用:手机点击「📸 拍照」会直接调起系统相机;电脑点击会弹出"相机或文件"选择器。
也可以点击「📁 从相册选择」上传已有照片进行OCR识别。
✓ 无需 HTTPS、无需 localhost、无需任何浏览器权限授予,所有浏览器/微信内置浏览器都能直接拍照。

{{cameraDebugInfo}}
正在调用阿里云OCR 识别中...
❌ 识别失败:{{cameraResult._error}}
🧠 阿里云OCR 识别完成 — 共识别 {{cameraResult.row_count || cameraResult.records.length}} 行表格数据 综合置信度: {{cameraResult.overall_confidence}}%
📷 拍照结果预览
联系人:{{cameraResult.header_fields.contact}} 📞 {{cameraResult.header_fields.phone}}
日期:{{cameraResult.header_fields.actual_date}}
收货地址:{{cameraResult.header_fields.delivery_address}}
📋 物料明细 ({{cameraResult.records.length}}条)
第 {{idx+1}} 行 {{rec._row_confidence||0}}% ✓ 公式一致 ✗ 公式不一致 📋 原始识别
件号:
名称:
规格:
单位:
SNP:
箱数:
数量:
备注:
已自动纠错 {{cameraResult.corrections.length}} 处
📁 文件夹批量导入

按创建时间排序,自动跳过已识别照片

📂

请选择文件夹导入单据图片

{{f.name}} {{f.status==='pending'?'等待':f.status==='processing'?'识别中':f.status==='done'?'完成':'失败'}} ✅ 已入库 {{f.savedCount}} 条{{f.savedAt}} ❌ 入库失败 {{f.ocrError}}
📝 出库信息录入
📡 正在查询库位信息…
📍 当前占用库位
按库龄升序 · 出库优先扣减最老库位(锁单除外)
{{loc.location_code}} 库存 {{loc.current_qty}} 🔒锁单 {{loc.locked_qty}} 库龄 {{loc.stock_age_days}} 天 {{i===0 ? '← 最优先出库' : '备选'}}
📦 该物料暂无占用库位(未启用库位管理或尚未入库),出库将直接扣减总库存。
📋 最近出库记录
项目名称供应商物料编号物料名称规格单位数量出库日期库位备注经手人
{{r.project||'—'}}{{r.supplier}}{{r.material_number}}{{r.goods_name}} {{r.specification}}{{r.unit}}{{r.quantity}} {{r.record_date}}{{r.location_code||'—'}}{{r.remark||'—'}}{{r.handler}}
暂无出库记录
~
📝 出入库记录
类型 项目名称 供应商 物料编号 零件编号 物料名称 规格型号 单位 SNP 箱数 托数 数量 不良 隔离 退回 锁单 日期 库位编码 库龄(天) 备注 经手人 照片 操作
{{r.record_type}} {{r.project||'—'}} {{r.supplier}} {{r.material_number}} {{r.part_number}} {{r.goods_name}} {{r.specification}} {{r.unit}} {{r.snp}} {{r.box_count}} {{r.pallet_count}} {{r.quantity}} {{r.record_date || r.display_date || (r.created_at && r.created_at.substring(0,16))}} {{r.location_code}} {{r.stock_age_days}} {{r.remark||'—'}} {{r.handler}}
+{{getRecordPhotos(r).length-2}}
暂无记录
计算说明 期末库存 = 期间入库 − 期间出库 − 不良 − 隔离 − 退回(仅锁单记录) | 点击数字查看明细:蓝色=出入库,红色=不良,橙色=隔离,紫色=退回 | 库存不足< 低阈值 | 爆仓预警> 高阈值 | 库存正常阈值之间 | ✓ 已发送 | ✗ 失败
项目名称物料编号零件编号物料名称规格型号 供应商单位SNP 期初库存期间入库期间出库 不良 隔离 退回 期末库存 阈值(低~高)库存状态发送状态
{{r.project||'—'}}{{r.material_number}}{{r.part_number}} {{r.goods_name}}{{r.specification}} {{r.supplier}}{{r.unit}}{{r.snp}} {{r.opening_stock}} {{r.period_in}} {{r.period_out}} {{r.bad_qty}} {{r.quarantine_qty}} {{r.return_qty}} {{r.ending_stock}} {{r.low_threshold}}~{{r.high_threshold}} 库存不足 爆仓预警 库存正常 ✓ 已发送 ✗ 失败 未发送
暂无库存数据

库位规则配置

类型代码 类型名称 区域代码 区域名称 层次 库位号范围 容量 仓库 状态 操作
{{r.type_code}} {{r.type_name}} {{r.area_code}} {{r.area_name}} {{r.level_code}} {{String(r.location_start).padStart(3,'0')}} ~ {{String(r.location_end).padStart(3,'0')}} {{r.capacity}} {{r.warehouse||'—'}} {{r.is_active?'启用':'禁用'}}
暂无库位规则,请先新增规则并生成库位

库位列表

库位编码 类型代码 区域代码 层次代码 状态 操作
{{loc.location_code}} {{loc.type_code}} {{loc.area_code}} {{loc.level_code}} {{loc.status}}
暂无库位,请先在上方规则中点击"生成库位"
👤
用户管理
账号管理及功能权限配置
✉️
邮件配置
低库存预警邮件 SMTP 配置
⚠️
清空全部数据
仓储、运输、车辆等全量数据清空(不可恢复);确认前可在弹窗内导出备份
🧹
一键清理系统缓存
Python 字节码、缩略图、孤儿上传图片、已下载备份压缩包
📘
系统操作文档
在新窗口打开帮助文档
派车延迟预警
✅ 当前无预警
{{alertMainText(a)}} {{a.order_no}} {{a.time}}
延迟 {{a.delay_minutes||0}} 分钟
{{alertMainText(a)}} {{a.order_no}} {{a.time}}
延迟 {{a.delay_minutes||0}} 分钟
到达延迟预警
✅ 当前无预警
{{alertMainText(a)}} {{a.order_no}} {{a.time}}
延迟 {{a.delay_minutes||0}} 分钟
{{alertMainText(a)}} {{a.order_no}} {{a.time}}
延迟 {{a.delay_minutes||0}} 分钟
取货等待预警
✅ 当前无预警
{{alertMainText(a)}} {{a.order_no}} {{a.time}}
等待 {{a.wait_minutes||0}} 分钟
{{alertMainText(a)}} {{a.order_no}} {{a.time}}
等待 {{a.wait_minutes||0}} 分钟
~
预警
运单状态
接单车辆
接单司机
司机电话
运单号
项目名称
供应商
联系人
联系电话
计划到达时间
货量
线路
取货地址
送货地址
车辆状态
车速
当前位置
位置更新时间
备注
签单
操作
暂无运输计划,点击「供应商下单」或「批量导入」创建
{{o.status_label}}!
{{o.plate_no||'待派车'}}
{{o.driver_name||'-'}}
{{o.driver_phone||'-'}}
{{o.order_no}}
{{o.project||'—'}}
{{o.supplier_name}}
{{o.pick_contact||'—'}}
{{o.pick_phone||'—'}}
{{o.pick_time}}
{{o.cargo_summary}}
{{o.route||'—'}}
{{o.pickup_address||'—'}}
{{o.destination||'—'}}
{{o.vehicle_status||'—'}}
{{formatVehicleSpeed(o.vehicle_speed)}}
{{o.current_pos||'未上报'}} {{o.track_time}}
{{o.pos_update_time||o.track_time||'—'}}
{{o.remark||'—'}}

供应商基础信息

供应商名称 供应商代码 所属项目名称 联系人 联系电话 联系邮箱 操作
暂无供应商基础信息,请点击右上角新增或批量导入
{{s.supplier_name}} {{s.supplier_code}} {{s.project||'—'}} {{s.contact_person}} {{s.contact_phone}} {{s.contact_email}}
车牌号
车辆状态
司机
电话
车型
载重(吨)
线路
运营范围
身份证
驾驶证
行驶证
保险资料
最近自检
业务状态
车速
当前位置
最新位置时间
超速预警
操作
暂无车辆档案,点击右上角「司机注册」
{{v.plate_no}}
{{vehicleStatusLabel(v.status)}} {{v.reason}}
{{v.driver_name||'—'}}
{{v.driver_phone||'—'}}
{{v.vehicle_type||'—'}}
{{v.load_capacity?v.load_capacity+' 吨':'—'}}
{{v.routes.length?v.routes.join(' / '):'不限'}}
{{v.operation_region||'—'}}
🪪 身份证 上传身份证
🪪 驾驶证 上传驾驶证
🪪 行驶证 上传行驶证
📄 保险 上传保险
{{v.daily_check_date||'未自检'}}
{{v.work_status_label||'—'}}
{{formatVehicleSpeed(v.vehicle_speed)}}
{{v.current_pos||'未上报'}}
{{v.pos_update_time||v.pos_time||'—'}}
{{vehicleOverspeedText(v)}} {{formatVehicleSpeed(v.vehicle_speed)}} / {{v.speed_limit}} km/h 点击设置
🏢 供应商归档
{{archSupSelected.length}}/{{archSuppliers.length}}
🏭 {{s.supplier}} {{s.image_count}}张

暂无归档数据

📸 归档照片 - {{archCurSupplier||'请选择供应商'}}
📸 {{archCurSupplier}}
~
已选 {{archSelected.filter(p=>archFilteredPhotos.some(x=>x.path===p)).length}}/{{archFilteredPhotos.length}}
📁

请在左侧选择供应商查看归档照片

该供应商暂无归档照片

所选日期范围暂无归档照片

📅 {{p.display_date || (p.records && p.records[0] && p.records[0].display_date) || formatOcrTime(p.filename)}}
🏢 {{p.supplier}}
🏷 {{p.project}}
📋共 {{p.record_count}} 条入库明细
📁未关联台账
纠错规则总数
{{trainStats.rules_count}}
训练记录总数
{{trainStats.logs_count}}
规则累计应用次数
{{trainStats.total_applies}}
平均识别置信度
{{trainStats.avg_confidence}}%
累计 Token 输入
{{(trainStats.tokens_input||0).toLocaleString()}}
累计 Token 输出
{{(trainStats.tokens_output||0).toLocaleString()}}
累计 Token 消耗
{{(trainStats.tokens_total||0).toLocaleString()}}
当前训练模型
{{(trainStats.ai_config?.model_name)||'local-rule-engine'}}
⚙️

AI 模型配置

当前使用 {{aiConfig.enabled ? '外部大模型' : '本地规则引擎'}}:{{aiConfig.model_name}}
🤖

AI自动学习引擎

纠错学习 + 增补学习 + 删减学习 → 持续提升识别精度
学习中
✏ 修改学习
{{(trainStats.by_type||{}).correction||0}}
用户纠错OCR结果
➕ 增补学习
{{(trainStats.by_type||{}).addition||0}}
手工新增补充字段
🗑 删减学习
{{(trainStats.by_type||{}).deletion||0}}
删除错误OCR记录
📊 本次学习结果
{{ learningSummary.result }}
💡 点击左侧按钮,AI 将从历史纠错数据中提取高频错误模式并生成自动修复规则。
📈 置信度优化趋势 (最近{{trainStats.confidence_trend.length}}次学习)
修正前 修正后
{{(t.confidence_before||0).toFixed(0)}}→{{(t.confidence_after||0).toFixed(0)}}%
+{{t.diffs_count}}处 -
📖 纠错规则字典
每次修正OCR结果后系统自动学习并生成规则,下次识别同类单据时自动应用
字段名原始文本修正文本应用次数创建时间
{{r.field_name||'通用'}}{{r.original_text}} {{r.corrected_text}} {{r.apply_count}}{{r.created_at?.substring(0,10)}}
暂无纠错规则
📜 训练记录历史
图片路径原始OCR文本修正字段模型Token耗时置信度训练时间
{{l.image_path}} {{l.raw_text}} {{l.corrected_fields}} {{l.model_used||'local-rule-engine'}} 总 {{l.tokens_total}} - {{l.cost_ms}} ms- {{(l.confidence_before||0).toFixed(1)}}% {{(l.confidence_after||0).toFixed(1)}}% ↑{{((l.confidence_after||0)-(l.confidence_before||0)).toFixed(1)}} {{l.created_at?.substring(0,10)}}
暂无训练记录