📡 正在加载仓库运行数据…
今日入库
{{formatNumber(dashboardData.kpis.today_in_qty)}}
{{dashboardData.kpis.today_in_cnt}} 笔单据
今日出库
{{formatNumber(dashboardData.kpis.today_out_qty)}}
{{dashboardData.kpis.today_out_cnt}} 笔单据
当前库存总量
{{formatNumber(dashboardData.kpis.total_stock)}}
{{dashboardData.kpis.threshold_cnt}} 条阈值规则
库位使用率
{{dashboardData.locations.usage}}%
占用 {{dashboardData.locations.occupied}} / 总 {{dashboardData.locations.total}}
近 7 日出入库趋势入库 出库
{{t.date}}
库存预警分布明细 →
库存不足 {{dashboardData.stock_status.low}}
爆仓预警 {{dashboardData.stock_status.high}}
库存正常 {{dashboardData.stock_status.normal}}
库位状态总览管理 →
{{dashboardData.locations.total}}
总库位
{{dashboardData.locations.occupied}}
已占用
{{dashboardData.locations.free}}
空闲
{{dashboardData.locations.disabled}}
停用
{{loc.location_code}}
{{loc.goods_name || '—'}}
{{formatNumber(loc.current_qty)}}/🔒{{formatNumber(loc.locked_qty)}}
暂无占用库位
供应商库存 TOP5供应商 →
{{s.name}}
{{formatNumber(s.stock)}}
暂无库存数据
库存预警明细全部 →
| 状态 | 物料编号 | 物料名称 | 供应商 | 当前库存 | 阈值(低~高) |
|---|---|---|---|---|---|
| {{a.ending_stock<(a.low_threshold||0)?'不足':'爆仓'}} | {{a.material_number || '—'}} | {{a.goods_name}} | {{a.supplier}} | {{formatNumber(a.ending_stock)}} | {{a.low_threshold!=null?a.low_threshold:'—'}} ~ {{a.high_threshold!=null?a.high_threshold:'—'}} |
✅ 所有物料库存均在安全阈值内
实时作业动态明细 →
{{a.record_type==='入库'?'📥':'📤'}} {{a.goods_name || a.material_number || a.part_number}}{{formatNumber(a.quantity)}}{{a.unit||''}}
{{a.supplier || '—'}}{{a.location_code ? ' · '+a.location_code : ''}} · {{a.record_date}}
智能助手与预警推送AI训练 →
{{dashboardData.ocr.training_cnt}}
AI 学习样本
{{dashboardData.ocr.correction_cnt}}
纠错规则库
{{dashboardData.email.success}}/{{dashboardData.email.total}}
今日邮件预警{{dashboardData.email.failed>0?' (失败'+dashboardData.email.failed+')':''}}
{{dashboardData.email.enabled ? '📬 低库存邮件预警已开启' : '🔕 邮件预警未配置,请前往库存台账配置'}}
📎 批量上传
📷 手工拍照
📁 文件夹批量
点击或拖拽图片到此处上传
支持 JPG / PNG / BMP / WebP,可多张同时上传📋 已选单据图片({{inFiles.length}}张)
📊 OCR识别进度
{{ocrDoneCount}}/{{inFiles.length}} 已识别 · ✅ {{autoSavedCount}} 条已自动入库
🔧 已应用 {{totalCorrections}} 条纠错规则
{{f.name}}
●
{{f.status==='pending'?'等待':f.status==='processing'?'识别中':f.status==='done'?'完成':'失败'}}
✅ 已入库 {{f.savedCount}} 条{{f.savedAt}}
❌ 入库失败
📭
OCR 识别已完成,但未提取到有效物料数据
可能原因:图片模糊、表头不标准或字段为空
请检查图片后重试,或手动录入出入库记录
请检查图片后重试,或手动录入出入库记录
📝 识别结果确认(多行数据,可手动修改)
✅ 已自动入库 {{autoSavedCount}} 条
说明:空白字段将显示「无」;所有单元格均可编辑,修改后点击「保存纠错」即可保存/更新台账并计入AI训练;可点击各供应商卡片右上「➕ 添加空行」添加新行,点击「删除」删除本行;双击供应商名称可直接修正并计入AI训练
📭
暂无识别数据,请检查图片是否清晰可识别
📷 拍照识别
📱 手机拍照识别
✅ 任意设备/任意网络都能用:手机点击「📸 拍照」会直接调起系统相机;电脑点击会弹出"相机或文件"选择器。
也可以点击「📁 从相册选择」上传已有照片进行OCR识别。
✓ 无需 HTTPS、无需 localhost、无需任何浏览器权限授予,所有浏览器/微信内置浏览器都能直接拍照。
{{cameraDebugInfo}}
正在调用阿里云OCR 识别中...
❌ 识别失败:{{cameraResult._error}}
📷 拍照结果预览
联系人:{{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}}
❌ 入库失败
📝 出库信息录入
{{s}}
无匹配供应商
📡 正在查询库位信息…
📍 当前占用库位
按库龄升序 · 出库优先扣减最老库位(锁单除外)
{{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}} | |
| 暂无出库记录 | |||||||||||
共 {{outTotal}} 条,第 {{outPage}}/{{Math.max(outTotalPages,1)}} 页
每页
条
📝 出入库记录
| 类型 | 项目名称 | 供应商 | 物料编号 | 零件编号 | 物料名称 | 规格型号 | 单位 | 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}} |
|
|
|||||
| 暂无记录 | |||||||||||||||||||||||
共 {{ledgerTotal}} 条,第 {{ledgerPage}}/{{Math.max(ledgerTotalPages,1)}} 页
每页
条
| 项目名称 | 物料编号 | 零件编号 | 物料名称 | 规格型号 | 供应商 | 单位 | 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}} | 库存不足 爆仓预警 库存正常 | ✓ 已发送 ✗ 失败 未发送 | |
| 暂无库存数据 | ||||||||||||||||||
共 {{stockAllRows.length}} 条,第 {{stockPage}}/{{stockTotalPages}} 页
每页
条
📧 库存台账邮件发送配置
💡 将自动根据发件邮箱域名填写:
💡 根据发件邮箱域名自动推断:
{{ inferredSmtpHint }}
⚠️ 126/163/QQ 邮箱必须填写客户端授权码(16位),不是邮箱登录密码!
获取方式:登录 126 邮箱网页版 → 设置 → POP3/SMTP/IMAP → 开启 SMTP 服务 → 按提示短信验证后生成授权码。
当前已保存授权码(出于安全考虑脱敏显示,如需更换请重新输入后保存) 当前保存的授权码长度为 {{emailConfig.smtp_password ? emailConfig.smtp_password.length : 0}} 位(126/163 应为 16 位),若不足请重新获取后保存。
获取方式:登录 126 邮箱网页版 → 设置 → POP3/SMTP/IMAP → 开启 SMTP 服务 → 按提示短信验证后生成授权码。
当前已保存授权码(出于安全考虑脱敏显示,如需更换请重新输入后保存) 当前保存的授权码长度为 {{emailConfig.smtp_password ? emailConfig.smtp_password.length : 0}} 位(126/163 应为 16 位),若不足请重新获取后保存。
📬 邮件发送记录
加载中...
| 供应商 | 项目名称 | 台账日期 | 发送时间 | 触发方式 | 状态 | 错误信息/附件 | 操作 | |
|---|---|---|---|---|---|---|---|---|
| {{log.report_date}} | {{log.send_time}} | {{emailTriggerLabel(log.trigger_type)}} | ✓ 成功 ✗ 失败 {{log.status}} | |||||
| 暂无发送记录 | ||||||||
共 {{emailLogTotal}} 条,第 {{emailLogPage}}/{{Math.max(emailLogTotalPages,1)}} 页
每页
条
{{locationRuleForm.id?'编辑':'新增'}}库位规则
库位编码规则:类型代码(3位) + 区域代码(3位) + 库位号(3位) + 层次代码(2位) = 11位
示例:
示例:
DMK + 001 + 001 + 01 = DMK00100101
库位规则配置
| 类型代码 | 类型名称 | 区域代码 | 区域名称 | 层次 | 库位号范围 | 容量 | 仓库 | 状态 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|---|
| {{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?'启用':'禁用'}} | ||
| 暂无库位规则,请先新增规则并生成库位 | ||||||||||
共 {{locationRuleTotal}} 条,第 {{locationRulePage}}/{{Math.max(locationRuleTotalPages,1)}} 页
每页
条
库位列表
| 库位编码 | 类型代码 | 区域代码 | 层次代码 | 状态 | 操作 | |
|---|---|---|---|---|---|---|
| {{loc.location_code}} | {{loc.type_code}} | {{loc.area_code}} | {{loc.level_code}} | {{loc.status}} | ||
| 暂无库位,请先在上方规则中点击"生成库位" | ||||||
共 {{locationTotal}} 条,第 {{locationPage}}/{{Math.max(locationTotalPages,1)}} 页
每页
条
用户管理
账号管理及功能权限配置
邮件配置
低库存预警邮件 SMTP 配置
清空全部数据
仓储、运输、车辆等全量数据清空(不可恢复);确认前可在弹窗内导出备份
一键清理系统缓存
Python 字节码、缩略图、孤儿上传图片、已下载备份压缩包
系统操作文档
在新窗口打开帮助文档
👥 用户管理
{{userManageModal.form.is_active?'账号已启用':'账号已禁用'}}
🔑 功能权限(该用户可访问的模块)
提示:库存台账权限含阈值管理/邮件配置;AI训练权限含纠错规则/清理缓存;「结算管理」权限控制「结算管理」下所有子模块(经营可视化/业务数据/预算管理/账单管理/Job Sheet/经营报表/基础档案/参数与日志,财务数据,默认不授予,需按需勾选);「清空全部数据」权限控制「系统管理 → 清空全部数据」入口,未授权账号不可见
管理员拥有全部功能权限,无需配置。
{{userManageModal.error}}
| 账号 | ID账号 | 姓名 | 角色 | 联系电话 | 联系邮箱 | 功能权限 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{u.username}} | {{u.account_id||'—'}} | {{u.role_name||'—'}} | {{u.role==='admin' ? '管理员' : '普通用户'}} | {{u.phone||'—'}} | {{u.email||'—'}} | {{u.role==='admin' ? '全部' : (u.permissions&&u.permissions.length ? u.permissions.map(id=>permLabel(id)).filter(Boolean).join('、') : '—')}} | {{u.is_active ? '🟢 启用' : '⛔ 停用'}} | |
| 暂无用户 | ||||||||
预警
运单状态
接单车辆
接单司机
司机电话
运单号
项目名称
供应商
联系人
联系电话
计划到达时间
货量
线路
取货地址
送货地址
车辆状态
车速
当前位置
位置更新时间
备注
签单
操作
暂无运输计划,点击「供应商下单」或「批量导入」创建
{{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||'—'}}
—
共 {{transportTotal}} 条,第 {{transportPage}}/{{Math.max(transportTotalPages,1)}} 页
每页
{{transportForm.id?'✏️ 编辑运单':'🚚 供应商下单'}}
📤 供应商下单 · 批量导入
模板列:项目名称、供应商名称*、计划到达时间*、货量*、单位、取货联系人、联系电话、取货地址、送货地址、线路、备注。
计划到达时间格式:2026-08-24 09:00(或 2026-08-24T09:00)。每行一个运单,导入成功后自动派车。货量仅支持单行数量。
计划到达时间格式:2026-08-24 09:00(或 2026-08-24T09:00)。每行一个运单,导入成功后自动派车。货量仅支持单行数量。
| # | 项目名称 | 供应商名称 | 计划到达时间 | 货量 | 联系人/电话 | 线路 | 备注 |
|---|---|---|---|---|---|---|---|
| {{idx+1}} | {{r.project||'—'}} | {{r.supplier_name}} | {{r.pick_time}} | {{r.qty}} {{r.unit}} | {{r.pick_contact||'—'}} {{r.pick_phone||''}} | {{r.route||'—'}} | {{r.remark||'—'}} |
尚未选择文件,请先下载模板填写后导入
⚠️ 签单异常处理 · {{abnormalForm.order_no}}
{{dispatchForm.batch_mode?'🚛 批量派单':'🚛 派车 · '+dispatchForm.order_no}}
已选 {{dispatchForm.batch_order_ids.length}} 条待派车订单,将统一分配给同一车辆。
暂无可派车辆:当前没有 active 状态车辆,请在「车辆管理」中查看/新增车辆。
🗺️ 在途位置 · {{trackForm.order_no}}
💡 说明:已对接数智客 GPS 实时定位,车辆位置自动同步;也支持手动更新。
📝 签单回传 · {{signoffForm.order_no}}
⚙️ 预警阈值设置
🚛 发车延迟预警(距计划到达时间不足仍未派车)
📦 到达延迟预警(实际取货晚于计划到达时间)
⏱ 取货等待预警(到达取货点后等待时长)
📍 电子围栏自动打卡
供应商基础信息
| 供应商名称 | 供应商代码 | 所属项目名称 | 联系人 | 联系电话 | 联系邮箱 | 操作 | |
|---|---|---|---|---|---|---|---|
| 暂无供应商基础信息,请点击右上角新增或批量导入 | |||||||
| {{s.supplier_name}} | {{s.supplier_code}} | {{s.project||'—'}} | {{s.contact_person}} | {{s.contact_phone}} | {{s.contact_email}} |
|
|
共 {{supplierTotal}} 条,第 {{supplierPage}}/{{Math.max(supplierTotalPages,1)}} 页
每页
条
车牌号
车辆状态
司机
电话
车型
载重(吨)
线路
运营范围
身份证
驾驶证
行驶证
保险资料
最近自检
业务状态
车速
当前位置
最新位置时间
超速预警
操作
暂无车辆档案,点击右上角「司机注册」
{{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
点击设置
共 {{vehicleTotal}} 条,第 {{vehiclePage}}/{{Math.max(vehicleTotalPages,1)}} 页
每页
✏️ 车辆信息维护 · {{vehicleEditForm.plate_no}}
{{r}}
×
📤 车辆批量导入
支持 Excel(.xlsx/.xls)或 CSV 文件;请按模板填写,每行一辆车。
必填:车牌号;可选:司机姓名/联系电话/车型/载重/运营范围/线路(多条用 / 分隔)。
必填:车牌号;可选:司机姓名/联系电话/车型/载重/运营范围/线路(多条用 / 分隔)。
正在解析...
解析结果预览(最多显示 50 条)
| 行号 | 车牌号 | 司机 | 电话 | 车型 | 载重 | 运营范围 | 线路 | 车辆状态 |
|---|---|---|---|---|---|---|---|---|
| {{r._row}} | {{r.plate_no}} | {{r.司机姓名||'—'}} | {{r.联系电话||'—'}} | {{r.车型||'—'}} | {{r.载重||'—'}} | {{r.运营范围||'—'}} | {{(r.线路||[]).join('/')}} | {{r._msg}} |
⚠ 设置车辆限速
{{speedLimitForm.label}}
填写 0 表示未设置限速;车速超过该值时将在「超速预警」列标红提示。
🗺️ 车辆实时位置 · {{mapTarget.title}}
{{mapTarget.address}}
{{mapTarget.plate_no?'车牌:'+mapTarget.plate_no+' · ':''}}更新时间:{{mapTarget.update_time||'—'}} · 坐标:{{mapTarget.lat?mapTarget.lat.toFixed(5)+','+mapTarget.lon.toFixed(5):'未获取'}}
暂无经纬度,无法展示地图
请先在车辆信息中对接 GPS 平台或手动刷新位置
请先在车辆信息中对接 GPS 平台或手动刷新位置
🧰 车辆每日自检 · {{dailyCheckForm.plate_no}}
自检全部通过后方可出车接单;未通过需整改后重新自检。
{{supplierForm.id?'编辑供应商':'新增供应商'}}
🛰 数智客 GPS 实时定位对接配置
返回最近该时间范围内的最后定位
✅ 已配置:AppCode {{gpsConfig.appcode_masked}} · 保存时输入框留空或掩码值将保留原配置
在 数智客官网(www.shuzhike.cn)下单后,在会员中心 → 我的订单查看 AppCode。保存后,系统调用其货车实时定位管理接口拉取车辆位置/速度/行驶状态/离线时长/最新位置时间;在车辆列表「🕘 轨迹」按钮可查询货车历史轨迹管理接口(最近6个月内、单次≤72小时)。未配置时使用演示数据。
🕘 历史轨迹 — {{vehicleHistory.plate_no || ''}}
最近 6 个月内,开始~结束相差 ≤72 小时。查询结果实时对接数智客货车历史轨迹管理接口。
⚠️ {{vehicleHistory.error}}
{{vehicleHistory.data.track.length}}
轨迹点数
{{vehicleHistory.data.park_size||vehicleHistory.data.parks.length}}
停车次数
{{vehicleHistory.data.mileage!=null?vehicleHistory.data.mileage:'—'}}
总里程(km)
起点
终点
轨迹点
停车点
| # | 时间 | 经度 | 纬度 | 速度(km/h) | 方向角 | 里程(km) | 海拔(m) |
|---|---|---|---|---|---|---|---|
| {{i+1}} | {{fmtGpsTime(t.time)}} | {{t.lon!=null?t.lon.toFixed(6):'—'}} | {{t.lat!=null?t.lat.toFixed(6):'—'}} | {{t.speed!=null?t.speed:'—'}} | {{t.direction||'—'}} | {{t.mileage!=null?t.mileage:'—'}} | {{t.altitude!=null?t.altitude:'—'}} |
| 该时间段内无轨迹数据 | |||||||
| # | 开始时间 | 结束时间 | 停靠时长 | 地址 | 经度 | 纬度 |
|---|---|---|---|---|---|---|
| {{i+1}} | {{fmtGpsTime(p.start)}} | {{fmtGpsTime(p.end)}} | {{p.minutes!=null?p.minutes:'—'}} 分钟 | {{p.address||'—'}} | {{p.lon!=null?p.lon.toFixed(6):'—'}} | {{p.lat!=null?p.lat.toFixed(6):'—'}} |
| 该时间段内无停车记录 | ||||||
📋 车辆运行记录
×
~
| 车牌号 | 司机 | 运行日期 | 线路 | 趟次 | 运单号 | 货量 | 状态 | 完成时间 | |
|---|---|---|---|---|---|---|---|---|---|
| {{r.plate_no}} | {{r.driver_name}} | {{r.run_date}} | {{r.route||'—'}} | {{r.trip_no}} | {{r.order_no}} | {{r.cargo_quantity||'—'}} | {{transportStatusLabels[r.status]||r.status}} | {{r.completed_at}} | |
| 暂无运行记录 | |||||||||
共 {{runRecordTotal}} 条,第 {{runRecordPage}}/{{Math.ceil(runRecordTotal/runRecordPageSize)||1}} 页
🏢 供应商归档
{{archSupSelected.length}}/{{archSuppliers.length}}
暂无归档数据
📸 归档照片 - {{archCurSupplier||'请选择供应商'}}
📸 {{archCurSupplier}}
~
已选 {{archSelected.filter(p=>archFilteredPhotos.some(x=>x.path===p)).length}}/{{archFilteredPhotos.length}}
请在左侧选择供应商查看归档照片
该供应商暂无归档照片
所选日期范围暂无归档照片
纠错规则总数
{{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 模型配置
🤖
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.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)}} | |||||
| 暂无训练记录 | ||||||||
编辑记录 #{{editModal.id}}
库存扣减设置
填写不良/隔离/退回数量后,锁定即可从总库存扣除
将从期末库存扣除
将从期末库存扣除
将从期末库存扣除
{{ editModal.is_locked ? '不良/隔离/退回已从总库存扣除' : '解锁状态,数量不计入库存扣减' }}
📸 关联照片({{editModal.image_paths.length}} 张)
💡 提示:点击图片可放大预览,点击✕可解除关联
📷 暂无关联照片
✏ 重命名照片
{{archPreviewImg.filename}}
正在加载预览…
📋 图片关联入库明细
共 {{archRecordModal.records.length}} 条
供应商:
{{archRecordModal.supplier}}
共 {{archRecordModal.records.length}} 条入库明细
| 记录 | 项目名称 | 物料编号 | 零件编号 | 物料名称 | 规格 | 单位 | 数量 | 入库日期 |
|---|---|---|---|---|---|---|---|---|
| #{{r.id}} | {{r.project||'—'}} | {{r.material_number||'—'}} | {{r.part_number||'—'}} | {{r.goods_name||'—'}} | {{r.specification||'—'}} | {{r.unit||'—'}} | {{r.quantity||0}} | {{r.created_date || (r.created_at && r.created_at.substring(0,10)) || '—'}} |
| 暂无入库明细 | ||||||||
💡 点击任意一行可进入该台账记录的编辑弹窗。
⚙ 库存阈值管理
📤 批量导入阈值
支持 Excel(.xlsx/.xls) / CSV 文件,或直接粘贴文本。识别列:项目名称、物料编号、零件编号、物料名称、SNP、低阈值、高阈值(低/高阈值必填,其余字段至少填一个)。
已选择:{{thresholdFileName}}
或直接粘贴(每行一条,Tab/逗号/空格分隔):
相同物料自动覆盖更新;未设置的行默认低 200 / 高 500
| 项目名称 | 物料编号 | 零件编号 | 物料名称 | SNP | 低阈值 | 高阈值 |
|---|---|---|---|---|---|---|
| {{it.project||'—'}} | {{it.material_number}} | {{it.part_number}} | {{it.goods_name}} | {{it.snp}} | {{it.low_threshold}} | {{it.high_threshold}} |
📋 当前阈值列表(共 {{thresholdItems.length}} 条)
| 项目名称 | 物料编号 | 零件编号 | 物料名称 | SNP | 低阈值 | 高阈值 | 操作 |
|---|---|---|---|---|---|---|---|
| {{t.material_number}} | {{t.part_number}} | {{t.goods_name}} | {{t.snp}} | ||||
| 暂无阈值配置,未设置的行默认使用低阈值 200 / 高阈值 500 | |||||||