☀️ 今日晨报 {{ morning.date }} ({{ morning.口径 }})
昨日销售 ¥{{ fmtNum(morning.昨日['销售额(元)']) }} ({{ morning.昨日.单数 }}单 / {{ fmtNum(morning.昨日['销量(支)']) }}支)
本月累计 ¥{{ fmtNum(morning.本月累计['销售额(元)']) }}
下滑预警 {{ (morning.下滑预警||[]).length }} 家
流失预警 {{ (morning.流失预警||[]).length }} 家
▼ 下滑: {{ r[0] }} {{ r[3] }}%
⚠️ 流失: {{ r[0] }} (曾月均¥{{ fmtNum(r[1]) }})
📊 AI 报告中心
暂无{{ reportTab==='weekly' ? '周报(每周一 09:00 自动生成)' : '月报(每月 27 日 09:00 自动生成)' }}{{ ['superadmin','admin'].includes(currentUser.role) ? ',可点右上角按钮立即生成一份' : '' }}
最新一期 {{ curReport.date }} {{ curReport.time }} ({{ curReport.kind }})
共 {{ reportsOfTab.length }} 期,可下拉选择历史回看
{{dash.kpi.pending||0}}
待确认
{{dash.kpi.bucket_14||0}}
近14天未交付
{{dash.kpi.bucket_14_30||0}}
近14-30天未交付
{{dash.kpi.bucket_30_60||0}}
近30-60天未交付
{{dash.kpi.producing||0}}
生产中
{{dash.kpi.partial||0}}
部分交付
{{dash.kpi.alerts||0}}
库存预警
{{dash.kpi.today_new||0}}
今日新增
近{{trendDays}}天出货金额趋势 (从ERP销售单读取, 点日期联动查看)
总金额: ¥{{ trendTotalAmount.toLocaleString() }}
{{ item.date }}
速查库存
{{ p.name }}
{{ p.code }} | 规格:{{ p.spec || '无' }} | 材质:{{ p.material || '无' }}
现存: {{ p.current_stock }}
还有 {{ quickStockTotal - quickStockResults.length }} 条, 点"打开"查看全部
未找到匹配产品
客户附件
在客户管理详情上传
报价单已简化为客户附件管理:
到「客户管理」→「报价单历史」Tab 上传/下载/删除附件 (系统暂无客户数据)
到「客户管理」→「报价单历史」Tab 上传/下载/删除附件 (系统暂无客户数据)
系统健康 {{ now }}
📦 产品: {{ dash.kpi.products||0 }} 条 · 👥 客户: {{ dash.kpi.customers||0 }} 条
📋 跟单: {{ dash.kpi.orders||0 }} 条 · 🏭 工令: {{ dash.kpi.workorders||0 }} 条
⚡ ERP: {{ erpStatus.connected ? (erpStatus.mode === 'mock' ? '未接入' : '已接入') : '未接入' }}
📋 跟单: {{ dash.kpi.orders||0 }} 条 · 🏭 工令: {{ dash.kpi.workorders||0 }} 条
⚡ ERP: {{ erpStatus.connected ? (erpStatus.mode === 'mock' ? '未接入' : '已接入') : '未接入' }}
速查库存 输入任何产品/客户/规格字段, 模糊+精准搜索ERP数据
✓ 找到 {{ quickStockTotal }} 条产品记录
| 产品编码 | 产品名称 | 规格 | 材质 | 现存 | 预留 |
|---|---|---|---|---|---|
| {{ p.code }} | {{ p.name }} | {{ p.spec || '无' }} | {{ p.material || '无' }} | {{ p.current_stock }} | {{ p.reserved || 0 }} |
未找到匹配产品
请输入关键词查询
统计分析(按销售单时间段)
统计范围:{{ currentSetName }}
数额默认为上月26日至当天
📦 订单数
{{ statsData.summary.orders }}
📊 出货数量
{{ statsData.summary.qty }}
💰 出货金额
¥{{ statsData.summary.amount.toLocaleString() }}
按小类统计 (与上方汇总同时间段/同数据源, 合计=汇总)
| 小类 | 订单数 | 出货数量 | 出货金额(¥) |
|---|---|---|---|
| {{ c.name }} | {{ c.orders.toLocaleString() }} | {{ c.qty.toLocaleString() }} | {{ c.amount.toLocaleString() }} |
| 合计 | {{ statsData.summary.orders.toLocaleString() }} | {{ statsData.summary.qty.toLocaleString() }} | ¥{{ statsData.summary.amount.toLocaleString() }} |
📊 月份销售明细表 (区域×分类 · 与上方汇总同时间段/同数据源 · 总计=汇总金额)
| 区域 | {{ c }} |
|---|---|
| {{ r.region }} | {{ (r[c] || 0).toLocaleString() }} |
🏆 客户销售额排行 (共 {{ statCustPager.total }} 名 · 每页 {{ statCustPager.size }} 条)
| 排名 | 客户名称 | 出货金额(¥) | 出货数量 | 订单数 |
|---|---|---|---|---|
| {{ r.rank }} | {{ r.name }} | {{ r.amount.toLocaleString() }} | {{ r.qty }} | {{ r.orders }} |
该时间段暂无销售数据
🏆 产品规格销售排行 (共 {{ statProdPager.total }} 名 · 每页 {{ statProdPager.size }} 条)
| 排名 | 产品 | 规格 | 材质 | 数量 | 金额(¥) |
|---|---|---|---|---|---|
| {{ r.rank }} | {{ r.name }} | {{ r.spec || '-' }} | {{ r.material || '-' }} | {{ r.qty }} | {{ r.amount.toLocaleString() }} |
该时间段暂无销售数据
📍 按省份分布 (点省份行可筛选下方地级市, 再点一次取消)
| 省份 | 订单数 | 出货金额(¥) | 客户数 | 金额占比 |
|---|---|---|---|---|
| {{ r.region }} | {{ r.order_count }} | {{ r.total_amount.toLocaleString() }} | {{ r.customer_count }} |
{{ r.share }}%
|
📋 按地级市明细 (共 {{ cityData.items.length }} 条)
| 省份 | 地级市 | 订单数 | 出货金额(¥) | 客户数 | 操作 |
|---|---|---|---|---|---|
| {{ r.province }} | {{ r.city }} | {{ r.order_count }} | {{ r.total_amount.toLocaleString() }} | {{ r.customer_count }} |
请选择时间段后点击"查询"
📌 重点客户监测
🎯 待开发客户监测
💰 交易价格监测
{{ monTab==='key' ? '重点客户监测' : '待开发客户监测' }}
(共 {{ curWatch.items.length }} 家 · 近7个自然月交易额)
{{ c.name }} {{ c.contact_person || '' }} {{ c.phone || '' }}
| 客户名称 | 区域 | {{ mm.slice(2) }} | 7月合计 | 备注 | 操作 |
|---|---|---|---|---|---|
| {{ w.customer_name }} | {{ w.province ? (w.province.replace(/省|壮族自治区|回族自治区|维吾尔自治区|自治区/g,'') + '/' + (w.city || '未知').replace(/市$/,'')) : '未知' }} | {{ amt > 0 ? amt.toLocaleString() : '—' }} | {{ w.total_7m.toLocaleString() }} |
暂无监测客户, 请在上方搜索添加
💰 交易价格监测 近12个月价格排行
💡 默认显示近12个月最高价/最低价排行(Top50) · 输入关键字精确检索(支持多关键字空格分隔AND匹配) · 可改时间段
检索词: "{{ priceMonitorData.keyword || '无' }}"
匹配订单: {{ priceMonitorData.range.matched }} 笔
最低单价: ¥{{ fmtMoney(priceMonitorData.range.min) }}
最高单价: ¥{{ fmtMoney(priceMonitorData.range.max) }}
📉 最低单价排行 (近12个月 Top50, 每页10条)
| # | 销售单号 | 日期 | 产品 | 单价 | 数量 |
|---|---|---|---|---|---|
| {{ (priceMonitorLowestPager.page - 1) * priceMonitorLowestPager.size + idx + 1 }} | {{ r.bill_number }} | {{ r.bill_date }} | {{ r.product_name.length > 18 ? r.product_name.slice(0,18) + '…' : r.product_name }} | ¥{{ fmtMoney(r.price) }} | {{ r.qty }} |
无匹配订单
📈 最高单价排行 (近12个月 Top50, 每页10条)
| # | 销售单号 | 日期 | 产品 | 单价 | 数量 |
|---|---|---|---|---|---|
| {{ (priceMonitorHighestPager.page - 1) * priceMonitorHighestPager.size + idx + 1 }} | {{ r.bill_number }} | {{ r.bill_date }} | {{ r.product_name.length > 18 ? r.product_name.slice(0,18) + '…' : r.product_name }} | ¥{{ fmtMoney(r.price) }} | {{ r.qty }} |
无匹配订单
销售单详情 - {{ selectedPriceMonitorItem.bill_number }}
×
| 销售单号 | {{ selectedPriceMonitorItem.bill_number }} |
| 销售日期 | {{ selectedPriceMonitorItem.bill_date }} |
| 客户 | {{ selectedPriceMonitorItem.customer_name || '—' }} |
| 产品 | {{ selectedPriceMonitorItem.product_name }} |
| 产品编码 | {{ selectedPriceMonitorItem.product_code }} |
| 单价 | ¥{{ fmtMoney(selectedPriceMonitorItem.price) }} 最高 最低 |
| 数量 | {{ selectedPriceMonitorItem.qty }} |
| 金额 | ¥{{ fmtMoney(selectedPriceMonitorItem.total) }} |
| 来源账套 | {{ selectedPriceMonitorItem.account_set_name }} |
| ERP数据库 | {{ selectedPriceMonitorItem.db_name }} |
该数据来自ERP管家婆系统同步的销售单(只读)
加载中/暂无数据(默认显示近12个月排行)
待确认 ({{ orderCounts.pending }})
近14天未交付 ({{ orderCounts.bucket_14 }})
近14-30天未交付 ({{ orderCounts.bucket_14_30 }})
近30-60天未交付 ({{ orderCounts.bucket_30_60 }})
生产中 ({{ orderCounts.producing }})
部分交付 ({{ orderCounts.partial }})
搜索结果: {{ pagers.orders.total }} 条
· 关键词"{{ searchKeyword }}"
· 交期从 {{ searchDeliveryFrom }}
· 交期到 {{ searchDeliveryTo }}
| 订单号 | 客户 | 产品编码 | 产品名称 | 数量 | 最近价格 | 交期 | 状态 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ o.order_no }} | {{ o.customer_name }} | {{ o.product_code }} | {{ o.product_name }} |
{{ o.quantity }}
已交{{ o.delivered_qty }} / 尚欠{{ o.remaining_qty }}
|
¥{{ fmtMoney(o.last_unit_price.price) }} — | {{ o.delivery_date }} (超{{ o.overdue_days }}天) 未设 | {{ statusText(o.status) }} 滞留{{ o.age_days }}天 滞留{{ o.age_days }}天 | {{ o.created_at }} |
|
暂无订单
微信消息采集
张
{{ wechatMessage }}
⚠ 检测到疑似客诉关键词({{ parsedResult.complaint_hint.keywords.join('、') }})
匹配结果
产品匹配
✓
{{ selectedProduct.name }} 规格一致
{{ selectedProduct.code }} · {{ selectedProduct.spec }} · {{ selectedProduct.material }}
{{ selectedProduct.code }} · {{ selectedProduct.spec }} · {{ selectedProduct.material }}
⚠
库中有 {{ matchResult.product_match.candidates.length }} 个同品名产品,但规格不完全相同
请在下方"选择规格"中人工确认要哪个规格
请在下方"选择规格"中人工确认要哪个规格
✗
未匹配到任何产品,请先在「产品主数据」中新增该产品
库存匹配
{{ currentStockMatch.enough ? '✓' : '⚠' }}
可用 {{ currentStockMatch.available }} · 需求 {{ currentStockMatch.needed }}
{{ currentStockMatch.enough ? '库存充足,可直接预扣出货' : '库存不足,将生成生产工令' }}
{{ currentStockMatch.enough ? '库存充足,可直接预扣出货' : '库存不足,将生成生产工令' }}
{{ p.spec || p.name }} · {{ p.material }}
| {{ p.name }} | 可用{{ p.available }}{{ p.unit }}
✓规格一致
✓材质一致
还有 {{ filteredCandidates.length - 50 }} 项,继续输入过滤
无匹配项
{{ c.name }}
({{ c.wechat_name }})
✓疑似
无匹配项
⚠️ AI 提醒 · {{ orderReminders.length }} 条(来自知识库)
{{ r.match }}
{{ r.title }} — {{ r.content }}
⚠️ 客诉预警 · 该客户有 {{ complaintOrderAlert.open_complaints.length }} 条未解决客诉
{{ oc.status_text }}
{{ oc.complaint_no }}({{ oc.category_text }} · {{ oc.occurred_at }})
— {{ oc.description }}
下单前请与客户确认客诉处理进展, 避免纠纷扩大
📋 该产品历史客诉 · 预防措施(近12个月)
{{ ph.complaint_no }}({{ ph.category_text }} · 根因: {{ ph.root_cause_category_text }} · {{ ph.occurred_at }})
预防措施: {{ ph.preventive }}
带入订单备注 →
生产工令列表
| 工令号 | 关联订单 | 产品 | 数量 | 已入库 | 状态 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ w.work_order_no }} | {{ w.order_no }} | {{ w.product_name }} | {{ w.quantity }} | {{ w.stocked_qty || 0 }} / {{ w.quantity }} | {{ woStatusText(w.status) }} | {{ w.created_at }} |
|
暂无工令
库存预警说明
从产品主数据中选择重要/常用产品加入预警配置 · 共 {{ pagers.alertConfigs.total }} 个产品已配置预警
库存预警列表 (已启用预警的产品)
| 产品编码 | 产品名称 | 类型 | 现存量 | 预留 | 可用量 | 下限 | 上限 | 状态 |
|---|---|---|---|---|---|---|---|---|
| {{ a.product_code }} | {{ a.product_name }} | {{ a.category }} | {{ a.current_stock }} | {{ a.reserved }} | {{ a.available }} | {{ a.alert_min }} | {{ a.alert_max }} | {{ a.status==='low'?'偏低':a.status==='over'?'超储':'正常' }} |
暂无预警产品,请在「系统管理 → 预警规则配置」中添加
预警规则配置已移至「系统管理」
产品主数据 · 数据来源:ERP同步
本系统共 {{ syncStatus.products_count || 0 }} 条规格,{{ syncStatus.total_stock || 0 }} 个总库存,{{ syncStatus.available_stock || 0 }} 个可用库存(自动同步中, 数据可能延后)
🔍
产品数据 (只读 · 新增/修改请在ERP中操作)
| 编码 | 名称 | 大类 | 小类 | 规格 | 材质 | 现存 | 可用 | 单位 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ p.code }} | {{ p.name }} | {{ p.erp_category || '-' }} | {{ p.erp_subcategory || '-' }} | {{ p.spec }} | {{ p.material || '-' }} | {{ p.current_stock }} | {{ p.available }} | {{ p.unit || '-' }} |
暂无数据
产品详情 - {{ selectedProductDetail.product.code }}
×
编码: {{ selectedProductDetail.product.code }}
规格: {{ selectedProductDetail.product.spec || '-' }}
材质: {{ selectedProductDetail.product.material || '-' }}
单位: {{ selectedProductDetail.product.unit }}
存货分类: {{ selectedProductDetail.product.erp_category || '-' }} / {{ selectedProductDetail.product.erp_subcategory || '-' }}
条码: {{ selectedProductDetail.product.barcode }}
备注: {{ selectedProductDetail.product.erp_comment }}
📦 库存总览
现存
{{ selectedProductDetail.product.current_stock }}
预扣
{{ selectedProductDetail.product.reserved }}
可用
{{ selectedProductDetail.product.available }}
🏭 库存按仓库分布 ({{ selectedProductDetail.warehouses.length }})
| 仓库 | 数量 | 批次号 | 来源DB | 更新时间 |
|---|---|---|---|---|
| {{ wh.warehouse }} | {{ wh.quantity.toLocaleString() }} | {{ wh.batch_no || '-' }} | {{ wh.erp_db_name || '-' }} | {{ wh.updated_at }} |
⚠️ 暂无仓库分布数据(库存同步后可见)
🔧 在产工令 ({{ selectedProductDetail.active_work_orders.length }})
| 工令号 | 关联订单 | 数量 | 已入库 | 状态 |
|---|---|---|---|---|
| {{ w.work_order_no }} | {{ w.order_no }} | {{ w.quantity }} | {{ w.stocked_qty }} | {{ woStatusText(w.status) }} |
💰 最近销售 ({{ selectedProductDetail.recent_sales.length }})
| 销售单号 | 日期 | 客户 | 单价 | 数量 | 仓库 |
|---|---|---|---|---|---|
| {{ s.bill_number }} | {{ s.bill_date }} | {{ s.customer_name }} | ¥{{ fmtMoney(s.price) }} | {{ s.qty }} | {{ s.warehouse || '-' }} |
📋 最近订单 ({{ selectedProductDetail.recent_orders.length }})
| 订单号 | 客户 | 数量 | 已交 | 单价 | 状态 | 交期 |
|---|---|---|---|---|---|---|
| {{ o.order_no }} | {{ o.customer_name }} | {{ o.quantity }} | {{ o.delivered_qty }} | ¥{{ fmtMoney(o.unit_price) }} | {{ statusText(o.status) }} | {{ o.delivery_date }} |
👥 关联客户 ({{ selectedProductDetail.customers.length }})
| 编码 | 客户名 | 电话 |
|---|---|---|
| {{ c.code }} | {{ c.name }} | {{ c.phone || '-' }} |
🔍 客户数据中心
(搜索客户查看详细交易/价格/订单/报价)
📋 {{ customerDetail.customer.name }}
{{ customerDetail.customer.code }}
联系人: {{ customerDetail.customer.contact_person || '—' }}
电话: {{ customerDetail.customer.phone || '—' }}
微信: {{ customerDetail.customer.wechat_name || '—' }}
地址: {{ customerDetail.customer.address || '—' }}
税号: {{ customerDetail.customer.tax_number }}
开户行: {{ customerDetail.customer.bank_name }} {{ customerDetail.customer.bank_account }}
对账结账日:
(每月几号结账=周期末日, 如25日结账算上月26日~本月25日的出货; 空=自然月)
📊 交易统计
近12个月订单
{{ customerDetail.stats.order_count }}
近12个月出货金额
¥{{ customerDetail.stats.total_ship_amount.toLocaleString() }}
近30天出货金额
¥{{ (customerDetail.stats.recent_30d_ship_amount || 0).toLocaleString() }}
近90天出货金额
¥{{ (customerDetail.stats.recent_90d_ship_amount || 0).toLocaleString() }}
报价单数
{{ customerDetail.stats.quote_count }}
最近出货
{{ customerDetail.stats.last_ship_date || '—' }}
订单历史 ({{ customerDetail.orders.length }})
销售单历史 ({{ customerDetail.sale_bills.length }})
产品价格 ({{ customerDetail.prices.length }})
报价单和附件 ({{ customerDetail.attachment_count || 0 }})
客户对账 ({{ customerReconcileRecords.length }})
特殊记录 ({{ customerSpecialRecords.length }})
客诉历史 ({{ customerComplaints.length }})
交叉分析 (预留)
| 订单号 | 产品 | 数量 | 单价 | 状态 | 交期 | 创建时间 |
|---|---|---|---|---|---|---|
| {{ o.order_no }} | {{ o.product_name }} | {{ o.quantity }} | ¥{{ fmtMoney(o.unit_price) }} | {{ statusText(o.status) }} | {{ o.delivery_date || '—' }} | {{ o.created_at }} |
该客户暂无本系统订单(实际交易请看"销售单历史"tab)
💡 此处展示管家婆ERP销售单历史(真实交易记录),按"客户名称"匹配
| 销售单号 | 日期 | 产品 | 数量 | 单价 | 金额 | 仓库 | 业务员 |
|---|---|---|---|---|---|---|---|
| {{ sb.bill_number }} | {{ sb.bill_date }} | {{ sb.product_name.length > 30 ? sb.product_name.slice(0,30) + '…' : sb.product_name }} | {{ sb.qty }} | ¥{{ fmtMoney(sb.price) }} | ¥{{ fmtMoney(sb.total) }} | {{ sb.warehouse || '—' }} | {{ sb.salesman || '—' }} |
ERP暂无该客户的销售单
| 产品编码 | 产品名称 | 规格 | 材质 | 最近单价 | 最近数量 | 最近日期 |
|---|---|---|---|---|---|---|
| {{ p.product_code || '—' }} | {{ p.product_name }} | {{ p.spec || '—' }} | {{ p.material || '—' }} | ¥{{ fmtMoney(p.latest_price) }} | {{ p.latest_qty }} | {{ p.latest_date }} |
该客户暂无成交记录
支持 Word/PDF/Excel/图片 · 自动按 {{ customerDetail.customer.name }} 名归档
| 文件名 | 大小 | 上传时间 | 上传人 | 操作 |
|---|---|---|---|---|
| {{ att.original_name || att.file_name }} | {{ Math.round(att.size / 1024) }} KB | {{ att.created_at }} | {{ att.created_by }} |
该客户暂无附件, 可上传报价单/合同/图纸等
对账中心生成的对账单会自动保存在此,可重新下载;也可单独选月份给该客户生成对账单。
| 对账期间 | 本期出货 | 本期退货 | 本期合计 | 应收账款累计 | 税率 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ r.period_label }} | ¥{{ (r.shipment_total || 0).toLocaleString() }} | ¥{{ (r.return_total || 0).toLocaleString() }} | ¥{{ (r.period_total || 0).toLocaleString() }} | ¥{{ (r.closing_balance || 0).toLocaleString() }} | {{ r.tax_rate ? r.tax_rate + '%' : '—' }} | {{ r.status === 'confirmed' ? '✓ 已确认' : '未确认' }} |
该客户暂无对账记录,选择月份后可生成对账单
⚠️ 特殊记录说明:这里显示该客户的所有特殊要求/注意事项/非常规标准。
来源:经验中心提交并审核通过(分类=客户特殊记录)。新建订单选择该客户时,这些记录会自动弹出提醒跟单员。
来源:经验中心提交并审核通过(分类=客户特殊记录)。新建订单选择该客户时,这些记录会自动弹出提醒跟单员。
| 标题 | 内容 | 优先级 | 提交人 | 时间 |
|---|---|---|---|---|
| {{ r.title }} | {{ r.content }} | {{ r.priority }} | {{ r.created_by }} | {{ (r.created_at||'').slice(0,10) }} |
该客户暂无特殊记录
该客户的客诉记录,见客户前的历史抱怨一目了然;点"查看"跳转客诉处理页
| 编号 | 类别 | 严重度 | 状态 | 产品 | 问题描述 | 登记时间 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ cp.complaint_no }} | {{ cp.category_text }} | {{ cp.severity_text }} | {{ cp.status_text }} | {{ cp.product_name || '—' }} | {{ cp.created_at }} |
该客户暂无客诉记录
交叉分析(同区域/同品类对比)
预留接口, 下一步实现
👤
请在上方输入客户名/联系人/电话进行搜索
共 {{ syncStatus.customers_count || 0 }} 个有效客户(已归一去重)
📋 客户列表 (共 {{ pagers.customers.total }} 条 · 点名称查看详情)
| 编码 | 名称 | 联系人 | 电话 | 地址 | 操作 |
|---|---|---|---|---|---|
| {{ c.code }} | {{ c.name }} | {{ c.contact_person || '-' }} | {{ c.phone || '-' }} | {{ c.address || '-' }} |
暂无数据
待受理
{{ (complaintStats && complaintStats.status_counts || {}).pending || 0 }}
处理中
{{ (complaintStats && complaintStats.status_counts || {}).processing || 0 }}
超时未处理
{{ complaintStats && complaintStats.overdue_total || 0 }}
本月新增
{{ complaintMonthNew }}
客诉列表
全部 ({{ complaintStats && complaintStats.total || 0 }})
待受理 ({{ (complaintStats && complaintStats.status_counts || {}).pending || 0 }})
处理中 ({{ (complaintStats && complaintStats.status_counts || {}).processing || 0 }})
已解决 ({{ (complaintStats && complaintStats.status_counts || {}).resolved || 0 }})
已关闭 ({{ (complaintStats && complaintStats.status_counts || {}).closed || 0 }})
~
| 编号 | 客户 | 产品 | 类别 | 严重度 | 状态 | 处理人 | 发生日期 | 登记 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ c.complaint_no }} | {{ c.customer_name }} |
{{ c.product_name || '-' }}
{{ c.bill_number }}
|
{{ c.category_text }} | {{ c.severity_text }} | {{ c.status_text }} 超时 | {{ c.handler_username || '-' }} | {{ c.occurred_at || '-' }} | {{ c.created_by_username }} {{ c.created_at }} |
暂无客诉记录
客诉聚焦 (TOP 产品 / TOP 客户 / 近6月趋势, 用于质量改进)
客诉最多的产品
{{ p[0] }} {{ p[1] }}件
客诉最多的客户
{{ cu[0] }} {{ cu[1] }}件
月度趋势
{{ m.month }} {{ m.count }}件
对账中心
(按每个客户自己的结账日算周期,只列出有交易的客户)
|
正在扫描...
共 {{ reconcileItems.length }} 个客户在本对账周期内有交易
| 客户名称 | 结账日 | 对账周期 | 笔数 | 出货金额 | 退货金额 | 开票税率 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ it.customer_name }} | {{ it.settlement_day ? it.settlement_day + '日' : '自然月' }} | {{ it.period_start }} ~ {{ it.period_end }} | {{ it.bill_count }} | ¥{{ it.shipment_total.toLocaleString() }} | ¥{{ it.return_total.toLocaleString() }} |
请选择对账月份后点击"扫描有交易客户"
用户管理
公司/账套管理
修改密码
操作日志
预警规则配置
备份管理
产品隔离
知识库
模型配置
经验中心
用户管理
| 用户名 | 姓名 | 角色 | 所属公司 | 手机 | 状态 | 最近登录 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ u.username }} | {{ u.name }} | {{ roleText(u.role) }} | {{ u.account_set_name }} | {{ u.phone || '-' }} | {{ u.status==='active'?'启用':'停用' }} | {{ u.last_login_at }} |
|
暂无用户
角色权限说明
{{ rd.name }}({{ role }}):{{ rd.scope }},{{ rd.permissions.join('、') }}
加载中...
公司/账套管理
| ID | 公司名称 | 简称 | 状态 | ERP对接 | ERP数据库 | 操作 |
|---|---|---|---|---|---|---|
| {{ s.id }} | {{ s.name }} | {{ s.short_name || '-' }} | {{ s.enabled?'启用':'停用' }} | 已启用 未配置 | {{ s.erp_db_names ? s.erp_db_names.replace(/[\[\]"]/g,'').replace(/,/g, ', ') : (s.erp_db_name || '-') }} |
|
暂无公司账套
知识库说明:存储 AI 检索增强 (RAG) 用的行业规则、参数、公式、经验。
- rule 业务规则(如"牙板规格必带-");param 固定参数(如"精冲外径: 12/14/18/23/30");
- formula 计算公式(代码化执行);experience 经验沉淀(人工/自动生成)。
- 检索时 AI 会自动引用命中的条目,未命中的用通用 prompt。删除/停用立即生效。
- rule 业务规则(如"牙板规格必带-");param 固定参数(如"精冲外径: 12/14/18/23/30");
- formula 计算公式(代码化执行);experience 经验沉淀(人工/自动生成)。
- 检索时 AI 会自动引用命中的条目,未命中的用通用 prompt。删除/停用立即生效。
知识条目
共 {{ knowledgeTotal }} 条
暂无知识条目,请新增或等待自动捕获
| ID | 类型 | 维度 | 标题 | 优先级 | 版本 | 状态 | 来源 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ it.id }} | {{ it.k_type }} | {{ it.scope_label || '全局' }} | {{ it.priority }} | v{{ it.version }} | ⏳ 待审核 ✓ 已通过 ✕ 已驳回 | {{ it.source }} |
知识库事件审计 最近 20 条
| ID | 事件 | 操作人 | 载荷 | 时间 |
|---|---|---|---|---|
| {{ ev.id }} | {{ ev.event_type }} | {{ ev.actor }} | {{ ev.created_at }} |
暂无事件
同义词表
检索时把别名替换成标准词,弥补 FTS5 不懂语义的短板
| ID | 标准词 | 别名 (|分隔) | 操作 |
|---|---|---|---|
| {{ s.id }} | {{ s.canonical }} | {{ s.aliases }} |
暂无同义词
{{ knowledgeForm.id ? '编辑' : '新增' }}知识条目
{{ synonymForm.id ? '编辑' : '新增' }}同义词
AI 提取知识候选 上传代码/文档/压缩包, AI 提取候选条目, 确认后才入库
{{ extractFile.name }} ({{ (extractFile.size/1024).toFixed(0) }}KB)
AI 正在分析文件, 请稍候(约 10-30 秒)…
AI 提取出 {{ extractCandidates.length }} 条候选, 逐条确认后入库(status=approved 直接进入知识库):
{{ c.k_type }}
{{ c.title }}
{{ c.source_file }}
已入库 ✓
模型配置说明:自主管理接入的大模型,保存后立即生效(无需重启)。
- chat:推理/文本模型(对话、解析、分析);vision:识图模型(订单截图、图纸识别)。
- 同一类型可配多个通道,优先级数字越小越先调用,主通道失败自动切换下一个。
- API Key 留空表示编辑时沿用原 Key;只显示脱敏后的 Key(前4后4)。
- chat:推理/文本模型(对话、解析、分析);vision:识图模型(订单截图、图纸识别)。
- 同一类型可配多个通道,优先级数字越小越先调用,主通道失败自动切换下一个。
- API Key 留空表示编辑时沿用原 Key;只显示脱敏后的 Key(前4后4)。
推理模型 (chat)
| 优先级 | 名称 | Base URL | 模型 | Key | 状态 | 操作 |
|---|---|---|---|---|---|---|
| {{ m.priority }} | {{ m.name }} | {{ m.model }} | {{ m.api_key_masked || '未设置' }} | {{ m.enabled ? '启用' : '停用' }} |
暂无推理模型配置(未配置时 AI 对话不可用)
识图模型 (vision)
| 优先级 | 名称 | Base URL | 模型 | Key | 状态 | 操作 |
|---|---|---|---|---|---|---|
| {{ m.priority }} | {{ m.name }} | {{ m.model }} | {{ m.api_key_masked || '未设置' }} | {{ m.enabled ? '启用' : '停用' }} |
暂无识图模型配置(未配置时识图功能不可用)
{{ modelForm.id ? '编辑' : '新增' }}模型通道 {{ modelForm.role }}
经验中心说明:在这里提交你工作中积累的经验、客户特殊要求、处理方案等。
提交后由管理员审核,通过后 AI 会自动引用你的经验回答相关问题。你只能在下方看到自己的提交记录。
提交后由管理员审核,通过后 AI 会自动引用你的经验回答相关问题。你只能在下方看到自己的提交记录。
待审批 {{ pendingList.length }} 条
暂无待审批的候选
| ID | 类型 | 标题 | 提交人 | 提交时间 | 操作 |
|---|---|---|---|---|---|
| {{ it.id }} | {{ it.k_type }} | {{ it.created_by }} | {{ (it.created_at||'').slice(0,16) }} |
贡献统计 每人提交/通过/待审/驳回(仅人工提交,系统种子不计入)
还没有人提交过经验
| 提交人 | 提交数 | 通过数 | 待审数 | 驳回数 | 通过率 |
|---|---|---|---|---|---|
| {{ row['提交人'] }} | {{ row['提交'] }} | {{ row['通过'] }} | {{ row['待审'] }} | {{ row['驳回'] }} | {{ row['通过率%'] }}% |
我的提交 {{ mySubmissions.length }} 条
你还没有提交过经验,点右上角「+ 提交经验」开始
| ID | 类型 | 标题 | 状态 | 提交时间 | 操作 |
|---|---|---|---|---|---|
| {{ it.id }} | {{ it.k_type }} | 待审核 已通过 已驳回 | {{ (it.created_at||'').slice(0,16) }} |
提交经验/规则 提交后需经管理员审核, 通过后才能被 AI 引用
{{ captureFile.name }} ({{ (captureFile.size/1024).toFixed(0) }}KB)
未选择
{{ viewingKnowledge.title }} {{ viewingKnowledge.k_type }}
{{ viewingKnowledge.content }}
附件: {{ viewingKnowledge.attachment_path.split('/').pop() }}
维度: {{ viewingKnowledge.scope_label || '全局' }} | 优先级: {{ viewingKnowledge.priority }} | 版本: v{{ viewingKnowledge.version }} | 来源: {{ viewingKnowledge.source }}
创建: {{ viewingKnowledge.created_by }} @ {{ viewingKnowledge.created_at }}
更新: {{ viewingKnowledge.updated_at }}
创建: {{ viewingKnowledge.created_by }} @ {{ viewingKnowledge.created_at }}
更新: {{ viewingKnowledge.updated_at }}
🛡️ 数据永久保留说明:
① 数据库主库永久保留所有客户/订单/产品/销售单/报价单等数据(不会过期被删)
② 系统每日凌晨3点自动备份数据库 + 当天报价单 .docx 到
③ 备份副本保留 30天后自动清理(防止磁盘占满)
④ 如需回溯某天数据, 联系管理员从备份恢复即可
① 数据库主库永久保留所有客户/订单/产品/销售单/报价单等数据(不会过期被删)
② 系统每日凌晨3点自动备份数据库 + 当天报价单 .docx 到
/data/backups/{日期}/③ 备份副本保留 30天后自动清理(防止磁盘占满)
④ 如需回溯某天数据, 联系管理员从备份恢复即可
📦 历史备份列表 (共 {{ backupsPager.total }} 份, 保留 {{ backups.retention_days }} 天)
{{ backups.message }}
| 备份日期 | 数据库 | 报价单.docx | 大小 | 状态 |
|---|---|---|---|---|
| {{ b.date }} | ✓ mold_factory.db ✗ 缺失 | {{ b.quote_count }} 份 | {{ b.size_mb }} MB | 今日 {{ daysSince(b.date) }} 天前 {{ daysSince(b.date) }} 天前 |
📦
暂无备份
点击右上角"立即备份"或等凌晨3点自动备份
⚙️ 隔离设置
📋 当前库存 > 阈值但未隔离的产品 ({{ isolationCandidates.length }} 条)
| c._selected = isolationCandidateSelectAll)"> | 产品名 | 规格 | 库存 |
|---|---|---|---|
| {{ c.name }} | {{ c.spec || '无' }} | {{ c.current_stock.toLocaleString() }} |
暂无候选产品 (库存 > {{ isolationConfig.threshold }} 的都已隔离)
✅ 已隔离产品 ({{ isolationList.length }} 条, 不显示不统计)
| c._selected = isolationListSelectAll)"> | 产品名 | 规格 | 材质 | 隔离时间 | 原因 |
|---|---|---|---|---|---|
| {{ c.name }} | {{ c.spec || '无' }} | {{ c.material || '无' }} | {{ c.isolated_at }} | {{ c.reason }} |
暂无隔离产品
➕ 手动添加隔离
💡 手动添加的隔离不依赖产品ID, 通过"名称+规格"匹配。即使产品ID变了(重新同步), 同名同规格的产品仍会被隔离。
修改我的密码
修改成功后需重新登录
操作日志 共 {{ pagers.logs.total }} 条
| 时间 | 用户 | 操作 | 对象 | 详情 | IP |
|---|---|---|---|---|---|
| {{ l.created_at }} | {{ l.username }} | {{ actionText(l.action) }} | {{ l.target }} | {{ l.detail }} | {{ l.ip }} |
暂无日志
预警规则配置
从产品主数据中选择重要/常用产品加入预警配置 · 共 {{ pagers.alertConfigs.total }} 个产品已配置
预警产品列表
| 产品编码 | 产品名称 | 现存量 | 可用量 | 下限阈值 | 上限阈值 | 启用 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ c.product_code }} | {{ c.product_name }} | {{ c.current_stock }} | {{ c.available }} | {{ c.status==='low'?'偏低':c.status==='over'?'超储':'正常' }} |
|
暂无预警配置,点击"添加预警产品"开始配置