今天要做什么
按节拍跑图:每天推「评审中」的图纸和当日新图,每周盘未关联的「已通过」图与待收设计费,每月核已抵订单的设计费金额与项目齐套状态。
每日
- 开班先扫
/dashboard/designs,按状态「评审中」(in_review)筛选,收昨日评审人批注;通过的切到「已通过」(approved)。 - 接销售转来的 RFQ / 项目:在「新建设计」里选项目、上传图纸文件 DWG / DXF / AI / PSD / PDF(单文件 ≤ 50MB)。
- 给「已通过」图纸做关联:详情点「关联」挂到「报价行」(
quote_item)/「订单行」(order_item)/「产品档案」(product),下游采购与生产从此读图。 - 去
/dashboard/designs/fees核当日到账:给「待付」(pending)设计费记录收款;客户付清后系统自动推进到「已付款」(paid),随后点「开始设计」进入「设计中」(designing)。 - 完工出图:已交付的设计费点「完成」进入「已完成」(
completed);锁定订单后做抵扣。
/dashboard/designs(图纸画廊)、/dashboard/designs/fees(设计费单)、/dashboard/products/[id](产品 BOM)。
每周
- 盘「已通过」但没有关联记录的图纸(
approved却无drawing_assignments行):未关联意味着下游没拿到图。 - 盘「已付款」但三天还没开工的设计费(
status='paid'却未进入designing):约客户再确认规格。 - 盘项目齐套:项目下「图纸齐套度」未达 100% 的跟进评审人。
每月
- 核「已抵订单」的设计费:状态为「已抵订单」(
status='converted')的记录,其amount_applied_to_order(抵扣金额)要与目标订单的paid_amount(已收金额)对得上。 - 清「已驳回」图纸:
rejected超一个月未修订的归档或删除。
权限红线(先看这 5 条)
- 图纸文件只接受 DWG / DXF / AI / PSD / PDF / PNG / JPG / GIF / SVG / WebP(这些是行业通用的设计源文件和图像格式,保留原英文缩写),单文件 ≤ 50MB——超限或扩展名不符直接被系统拒收。
- 状态为「已通过」(
approved)的图纸不能改文件本体——要改必须重新上传新一条记录并自增版本,老版保留。 - 设计费处于「待付」(
pending)状态不能直接转订单抵扣——必须先收齐款进入「已付款」(paid)/「已完成」(completed)后才允许「抵扣订单」。 - BOM(物料清单)编辑入口在产品模块(
/dashboard/products/[id]),不在/dashboard/designs——设计师跨模块维护变体 BOM,项目 BOM 在/dashboard/projects/[id]。 - 已「抵订单」(
converted)的设计费不能退——已抵订单的款项只能在订单侧冲销,不走设计费退款流程。
系统功能缺口(3 项,培训开场必讲)
以下是设计师日常高频想用、但当前系统尚未在 UI 暴露的功能。学员先知道"哪里不能点",避免到处找入口。遇到这三类需求走替代方案,或联系 IT。
-
ECO / 工程变更单(
design_change_orders)无专用表与入口。 行业通用的"已批准图纸改动要走 ECO 流程"在本系统没有独立单据。替代方案:重新走「新建设计」上传新版(版本号version由设计师手工自增),状态选「评审中」(in_review)做新一轮评审;旧版保留用于追溯;下游已关联的图纸要手动切到新版drawing_id。 -
BOM 版本无法在界面回滚。
代码里有
revertBOMVersion这个函数(意思是"回滚 BOM 版本"),但 UI 目前没有对应按钮——改错只能在产品详情的 BOM 管理器里删行重建;需要保留历史请让管理员从 DB 侧做快照。 -
设计费"作废"(
forfeited,即客户弃付没收的场景)UI 无触发入口。 数据库枚举已预留这个状态,但前端没暴露任何按钮;如需使用,联系 IT 走后台更新。日常不需要认识这个状态。
Quickstart — 日常核心任务
2.1 上传设计图纸
客户 / 销售确认设计需求,项目已落库;把 DWG / PDF / AI 等设计文件传入系统并关联项目,供下游评审。
- 进
/dashboard/designs,右上点「新建设计」。(见图 ①) - 弹窗填图纸名(必填);选所属项目(必填,图纸必须挂项目)。(见图 ②)
- 选初始状态:默认「草稿」(
draft);已和客户当面确认可直接设「评审中」(in_review)。(见图 ③) - 拖拽文件或点上传区选文件——超过 50MB 或扩展名不在白名单会立即报错。(见图 ④)
- 填备注(可空),点「提交」——系统存入存储桶
design-drawings并落到图纸表。
projectId 未填)的图纸不要传——无项目归属会导致后续项目齐套度统计漏掉该图,下游采购 / 生产在 /dashboard/projects/[id]?tab=drawings 也看不到。文件 > 50MB 不要拆分后混传——走分块上传或先在外部压缩。
- 画廊顶部出现新卡片,缩略图可见,状态徽标按所选初始状态显示。
- 详情页「版本」= v1(新建记录);「文件大小」与本地文件一致。
- 项目详情「图纸」Tab 下该图出现在聚合视图里。
design_drawings 新增行,file_url 指向 /object/public/design-drawings/;version=1;status 属于 (draft, in_review)。
uploadDesignDrawing
2.2 图纸评审流转
草稿完成自检后送审;评审人在详情页做通过 / 驳回;驳回后修订可回退到草稿再上传新版。
- 在画廊点图纸卡片进详情页。
- 右下「操作」卡片点「提交评审」——状态由「草稿」(
draft)推进到「评审中」(in_review)。(见图 ①) - 评审人打开详情,点「批准」或「驳回」——状态由「评审中」推进到「已通过」(
approved)或「已驳回」(rejected)。(见图 ②、③) - 被驳回图纸点「回退草稿」回到「草稿」状态,然后重新上传新版(当前不支持在同一行替换文件本体)。(见图 ④)
approved)的图纸不要再动状态——下游采购 / 生产可能已据此排料。确需改设计:新版上传后走新一轮评审,老版保留做追溯。已知缺口:当前系统没有独立的 ECO(工程变更单)表(代码里 design_change_orders 未实现),变更靠新版号 +「评审中」重走流程。
- 详情页顶部状态徽标按 「草稿」→「评审中」→「已通过」/「已驳回」推进。
- 画廊卡片的状态下拉同步变更。
- 项目齐套度分子 +1(项目下所有图纸都「已通过」时触发下游开工闸)。
design_drawings.status enum: draft | in_review | approved | rejected;合法 transition(流转):draft↔in_review、in_review→approved|rejected、approved|rejected→draft;齐套检查函数 checkProjectDrawingsReady。
updateDrawingStatusAction
2.3 关联图纸到业务实体
图纸「已通过」(approved)后必须挂到具体的报价行 / 订单行 / 产品档案,否则采购和生产读不到。
- 在图纸详情右上点「关联」打开关联对话框。
- 弹窗选关联实体类型:「报价行」(
quote_item)/「订单行」(order_item)/「产品档案」(product,即产品变体层)。 - 填目标实体 ID(从报价 / 订单 / 产品详情页复制 UUID)。(见图 ①)
- 填备注(例如「对应卧室衣柜 3#」),便于下游识别。(见图 ②)
- 点「关联」——数据落入「图纸关联表」(
drawing_assignments),详情页右下关联卡片出现新行。
entity_type 只允许三种值:quote_item / order_item / product——填其他值会被拒。未「已通过」的图就挂生产订单会让生产照草稿开料,出错只能返工。同一图纸挂多个实体要分别做一次关联(不是批量)。
- 图纸详情的关联卡片出现新行,实体类型徽标 + 前 8 位实体 ID 可见。
- 下游模块按实体 ID 反查:订单详情会显示图纸链接;产品详情图纸页面亦显示。
drawing_assignments 新增行(drawing_id、entity_type、entity_id、notes、created_by)。
assignDrawingToEntityAction、getDrawingAssignments
2.4 编辑图纸元数据
图纸名 / 描述录错或要补充说明,元数据可改;文件本体不能原地替换。
- 图纸详情右上点「编辑」。(见图 ①)
- 改名称 / 描述(注意:文件上传区在此弹窗无效——这是元数据编辑,不是新版上传)。(见图 ②)
- 点「保存」——版本号(
version)不变,也不触发评审重置。
name)/ 描述(description)。换文件走「新建设计」传新版并自增版本号,老版保留用于追溯。
- 详情页标题同步刷新为新名称。
- 画廊卡片标题同步变更。
- 版本号不变。
design_drawings 的 name / description 更新;version 不变;updated_at(更新时间)刷新。
updateDrawingMetadataAction
2.5 创建设计费单
客户确认设计委托后,在收款前落一张「设计费单」以便跟踪到账、开票和后期抵扣。
- 进
/dashboard/designs/fees,右上点「新建设计费」。(见图 ①) - 填客户(必填,从客户列表复制客户 ID)。
- 填金额(必填);币种默认人民币(
CNY),外币项目需改。(见图 ②、③) - 关联项目(可选);填设计描述、交付期限、条款、备注。(见图 ④)
- 点「提交」——系统自动生成设计费编号(格式
DF-YYYY-NNNN,例如DF-2026-0007),初始状态为「待付」(pending)。
- 设计费列表顶部出现新行,编号
DF-YYYY-NNNN。 - 状态徽标显示「待付」(
pending)。 - 详情页「已付金额」= 0、「可抵扣余额」= 0。
design_fees 的 design_fee_number 自增;status='pending';amount(总额)写入、paid_amount(已收金额)= 0。
createDesignFeeAction
2.6 记录设计费收款 + 状态流
客户转账到账,按实际到账金额累加「已收金额」;付清后流转状态到「设计中」再到「已完成」。
- 设计费详情页核对金额与客户匹配。
- 出纳 / 销售确认银行到账后,在设计费详情触发收款记录(累加已收金额
paid_amount)。 - 付清后状态自动进入「已付款」(
paid);点「开始设计」进入「设计中」(designing)。 - 设计交付后点「完成」进入「已完成」(
completed)——此时可抵订单。 - 全程未开工可点「退款」进入「已退款」(
refunded)。
converted)/「已退款」(refunded)状态下点任何动作都会被拒。
- 详情页「已付金额」按收款额增长;付清后「剩余未付」= 0。
- 状态徽标按「待付」→「已付款」→「设计中」→「已完成」推进。
- 列表页徽标色变化(待付 灰、已付款 蓝、设计中 黄、已完成 绿)。
design_fees 的 paid_amount 累加、paid_at(付款时间)落时间戳;status 枚举:pending | paid | designing | completed | converted | refunded | forfeited(forfeited = 作废,仅数据库预留,目前无 UI 入口)。
recordPaymentAction、updateFeeStatusAction
2.7 设计费抵扣订单
客户由设计进入定做,销售已转订单(单号前缀 SO-);把已完成的设计费作为订单预收款抵扣首付。
- 确保设计费状态为「已完成」(
completed)、客户与目标订单客户一致。 - 设计费详情「操作」卡片填目标订单 ID(从
/dashboard/sales/orders复制 UUID)。 - 点「抵扣订单」——系统写入「抵扣目标订单 ID」(
converted_to_order_id)和「抵扣金额」(amount_applied_to_order),目标订单的已收金额paid_amount自动加上。 - 会计在预付款表
prepayments里看到一条类型为「设计费」(type='design_fee')的记录。
converted)的设计费不能再抵第二单——一笔设计费只能抵一单;要拆分抵给多单需事先在抵扣金额里控制。
- 设计费状态变「已抵订单」(
converted),详情页显示关联订单号与抵扣金额。 - 目标订单「已收 / 合计」数字增长;付款 Tab 出现预收款记录。
- 会计 AR(应收账款)看到对应订单应收减少。
design_fees.status='converted'、converted_to_order_id / amount_applied_to_order / converted_at(抵扣时间)填充;销售订单 sales_orders.paid_amount 经 recalculateOrderPaidAmount()(订单已收金额重算函数)刷新;预付款表 prepayments 新增一行,类型为『设计费』(type='design_fee')。
convertFeeToOrderAction
2.8 跨模块查看 / 维护产品 BOM
定制产品需要挂 BOM(物料清单)供采购下单、生产备料;BOM 编辑不在设计模块,切到产品详情。
- 进
/dashboard/products,在列表找到目标产品点进详情。 - 滚到 BOM 管理卡片。
- 新增行:选物料、填数量、选单位(默认「件」
pcs,可选「米」m/ 「平方米」m2/ 「千克」kg)。(见图 ①、②) - 选用途类型:「柜体」(
cabinet_body)/「门板」(door)/「台面」(countertop)/「五金」(hardware)/「其他」(other)。(见图 ③) - 点新增按钮保存。(见图 ④)项目 BOM 走
/dashboard/projects/[id]?tab=bom,是另一套入口。
bom_items vs 项目 BOM 表 project_bom),不要混用;定制件一般先在项目 BOM 草拟,定稿后同步到产品 BOM。已知缺口:BOM 版本目前不在用户界面暴露回滚按钮(代码里有 revertBOMVersion 函数但未挂 UI)——改错只能删行重建。
- BOM 表格出现新行,物料名 / 数量 / 用途徽标可见。
- 产品详情的成本摘要按新 BOM 重算。
- 采购端在采购订单创建时能读到 BOM 展开。
bom_items 新增行(product_id、material_id、quantity、unit、usage_type、position);成本重算函数 computeBomCostSummary。
actions.ts 范围)。
上下游交接契约
设计师产出「图纸 + BOM + 设计费」三类成品,全部靠关联 / 状态流触达下游。契约缺失下游读不到图 / 排不了产 / 对不了账。
设计师 → 销售:图纸挂到报价行
我做什么:图纸状态「已通过」后在详情页点「关联」,选「报价行」(quote_item),填目标报价行 ID。
销售看到什么:报价详情行级图纸区出现图纸链接 / 缩略图;客户看到的 PDF 报价也会带图。
缺失会回来找我:没关联 → 销售发给客户的报价没图,客户要补发。实体 ID 填错 → 挂到别的行,下游采购按错图下单。
技术字段(给 IT/销售交叉核对)
触发动作:assignDrawingToEntityAction
必传字段:drawingId, entityType='quote_item', entityId, notes?
设计师 → 采购:图纸 + BOM 交付下单
我做什么:图纸关联到「产品档案」(product)或「订单行」(order_item);产品 BOM 在 /dashboard/products/[id] 挂齐物料和数量。
采购看到什么:采购在采购订单 / 询价单里读「图纸关联表」取图;读「产品 BOM 表」展开需采物料清单。
缺失会回来找我:图纸没关联「产品档案」→ 采购按旧图下单。BOM 缺物料 ID → 采购凑合选,物料错。数量 / 单位空 → 采购量算错。
技术字段(给 IT/采购交叉核对)
触发动作:assignDrawingToEntityAction(图纸侧)+ 产品模块的 BOM 增删改查(产品侧)
必传字段:drawingId, entityType in (product|order_item), entityId;BOM 行需 product_id, material_id, quantity, unit, usage_type。
设计师 → 生产:全部「已通过」开工闸
我做什么:把项目下每张图纸推到「已通过」(approved);图纸关联到「订单行」(order_item)。
生产看到什么:生产端调「项目齐套检查」函数,只有当项目下全部图纸都「已通过」才允许建工单开工;工单里读「图纸关联表」拉图和 BOM。
缺失会回来找我:任一图纸停在「评审中」→ 生产无法开工,PMC 打电话催。未关联「订单行」→ 工单拿不到图,排产只能凭描述推测。
技术字段(给 IT/生产交叉核对)
触发动作:updateDrawingStatusAction(推到 approved)+ assignDrawingToEntityAction(关 order_item)
齐套检查:checkProjectDrawingsReady(projectId) → {approved, total, isReady}。
设计师 → 会计:设计费收入确认
我做什么:设计费推到「已完成」后选目标订单做抵扣;或直接退款流转到「已退款」。
会计看到什么:抵扣触发订单已收金额重算函数刷新订单已收金额;预付款表出现一条类型为「设计费」的记录;凭证按预收款 → 订单应收挂账。
缺失会回来找我:客户不一致被拒 → 会计在订单里看不到预收款;需要销售先核对客户。已收金额与实际银行到账不符 → 会计对账对不上回来追。
技术字段(给 IT/会计交叉核对)
触发动作:convertFeeToOrderAction
必传字段:feeId, orderId, amountToApply?;校验 design_fees.customer_id = sales_orders.customer_id。
异常回滚
图纸 / 设计费 / 关联 / BOM 误操作走下表规则回滚。不要直接改 DB。
| 症状 | 做什么 | 前置条件 / 后果 |
|---|---|---|
| 图纸传错文件或传错项目 | 详情页「操作」卡片点「删除」并确认 | 同时清存储对象 + 数据库行;若已有关联需先逐条移除 |
| 图纸被误审批 / 误拒绝 | 详情页点「回退草稿」 | 下游生产若已据此开工则需先协调停工;状态回「草稿」后重新评审 |
| 图纸关联挂错(错挂实体 / 错行) | 详情「关联」卡片点对应行的删除图标 | 仅移除关联行,不动图纸本体;下游已读图则需同步通知 |
| 设计费金额 / 客户录错 | 状态还是「待付」(pending)时联系管理员删单重建 |
仅「待付」可删;已进入「已付款」(paid)及以上状态必须走退款流 |
| 设计费已收款但客户取消委托 | 详情点「退款」,填退款原因 | 状态必须不是「已抵订单」也不是「已退款」;可退额 = 已收金额 - 已抵订单金额 - 已退款金额;全退后状态变「已退款」(refunded),部分退保留原状态 |
| 设计费抵订单抵错了 | 不走设计费侧回滚——在订单付款 Tab 删除对应预收款行;再联系会计手动复位设计费字段 | 已「已抵订单」(converted)的设计费无「反向抵扣」动作;强行撤销会破坏预付款表一致性 |
| 要对「已通过」图纸做变更(ECO) | 重新「新建设计」上传新版 + 选「评审中」;旧版保留供追溯 | 已知缺口:当前系统无独立的 ECO(变更单)表 design_change_orders,变更靠新版号 + 评审;下游需手动替换关联到新图 ID |
| BOM 行录错数量 / 物料 | 产品详情 BOM 管理器点对应行删除图标再重建 | 已知缺口:BOM 版本回滚按钮(revertBOMVersion)目前不在 UI 暴露;改完通知采购同步 |
对应系统动作(IT 追溯)
deleteDrawingAction— 删图纸,同步清存储;若有关联行需先走removeDrawingAssignmentActionupdateDrawingStatusAction(id, 'draft')— 回退「评审中」/「已通过」/「已驳回」到「草稿」removeDrawingAssignmentAction— 清单条关联,不动图纸本体updateFeeStatusAction(feeId, 'refund', refundReason)— 设计费退款,校验状态非「已抵订单」/「已退款」- 已「已抵订单」的设计费无反向动作——在订单侧冲销预收款
- ECO 无独立动作——靠「
uploadDesignDrawing新版 +updateDrawingStatusAction」组合(已知缺口) - BOM 无
revertBOMVersion用户动作——走产品模块的 BOM 行删除(已知缺口)
进阶功能
项目齐套闸(全「已通过」才能开工)
生产端在建工单前调项目齐套检查函数,返回 {approved, total, isReady}。isReady=true(即允许开工)仅当项目下所有图纸都「已通过」(status='approved')。设计师在 /dashboard/projects/[id]?tab=drawings 看到齐套度,把挂起的图推过去。
技术定义:src/services/design-drawings.ts 的 checkProjectDrawingsReady。
图纸版本管理(手工自增)
同一图纸新版上传时版本字段(version)递增(目前手工——上传时指定,历史版本保留不会覆盖)。老版作为追溯留档;下游关联需手动切到新版本的图纸 ID。
技术追溯:design_drawings.version 整数型;默认从 1 开始。
项目 BOM(与产品 BOM 区分)
项目级 BOM 使用独立表 project_bom,由 project-bom.ts 服务管理,绑到项目 ID,入口 /dashboard/projects/[id]?tab=bom。用于项目拆单阶段草拟;定稿后同步到产品 BOM 表 bom_items。两表互不干扰。
画廊视图切换 / 搜索 / 筛选
画廊支持网格 / 列表视图切换(右上按钮),搜索按名字匹配;筛选按项目 + 状态。超过分页时底部有翻页。批量操作目前未开放。
设计费「作废」状态(数据库预留,无 UI 入口)
设计费状态枚举里包含「作废」(forfeited,用于客户弃付没收的场景),但 UI 目前没暴露触发动作——只能由后台人工标记。这是已知缺口之一;如需使用,联系 IT 走数据库更新。日常培训不展开。
相关业务场景
设计师是场景 2(定制家具项目流)的主角;场景 1(标品)和场景 4(采购付款)不参与;场景 3 作为抵订单 / 退款的触发方参与尾段。
- 标准成单流(询盘 → 报价 → 订单 → 发货 → 开票): 标品流设计师不参与——若报价行含定制件,销售会把项目 / 图纸请求转给设计师走场景 2 分支。 → 场景(了解即可)
- 定制家具项目流: 设计师主导:接项目 → 上传草图(「草稿」)→ 收设计费 → 推到「设计中」→ 多轮评审 → 所有图「已通过」→ 关联到「订单行」/「产品档案」→ 订单签约后把设计费抵扣订单首款。 → 场景详解
- 回款流: 设计师在设计费抵扣入口触发抵扣,走预付款表(类型『设计费』)挂订单预收款;退款走设计费状态流转到「已退款」。 → 场景详解
- 采购付款流:设计师不参与付款——只负责给采购交付图纸关联 + BOM,下单 / 付款由采购 / 出纳做。 → 场景(了解即可)
- 月结流: 设计师有限参与——月初清「已驳回」图、核「已抵订单」设计费金额对得上订单已收金额;会计端结账不参与。 → 场景详解
-
报销审批流:设计师作为申请人走
/dashboard/expenses(外勤 / 打样耗材报销),非核心动作——不在 Quickstart 范围。 → 场景(作为申请人)
外部协作入口
/dashboard/projects— 项目视图,图纸聚合 / BOM 齐套 / 里程碑;定制项目起点。/dashboard/products— 产品与 BOM 维护入口;定制件建变体 + 挂 BOM 在此。/dashboard/inquiries— 询盘池,AI 文档解析的 RFQ 由销售复核后转项目。/dashboard/wecom— 企微消息(图纸送审 / 已批准 / 设计费到账通知)配置入口。/dashboard/settings/email— 外贸邮件网关(发 PDF 图纸给客户用)。/dashboard/manual— 系统内置使用手册(补充参考)。
权限与范围
看得到什么(行级安全边界)
- 当前组织(
organization_id)下的所有图纸(design_drawings)/ 图纸关联(drawing_assignments)/ 设计费单(design_fees)。 - 产品 BOM(
bom_items)与项目 BOM(project_bom)按组织隔离。 - 图纸存储对象落在
design-drawings存储桶(公开桶 + 路径隔离);URL 自带组织前缀。
核心概念
organization_id(组织 ID)— 租户隔离键。设计师只看本组织图纸 / BOM / 设计费。book_id(账套 ID)— 账套隔离键,设计费属财务数据受账套隔离;切账套后看到的设计费集合变。- 图纸关联表
drawing_assignments— 图纸到业务实体的多对多桥表,是下游读图的唯一正式入口。 - 工作流引擎(
src/services/workflow-engine.ts)——图纸状态由代码硬编码流转规则(非 PostgreSQL enum),设计费状态同理。
术语表
- 设计图纸(图纸表)
design_drawings(name+version)- 图纸状态枚举
draft草稿 |in_review评审中 |approved已通过 |rejected已驳回- 图纸版本
design_drawings.version(整数,手工自增)- 文件 URL
design_drawings.file_url(指向/object/public/design-drawings/)- 文件大小限制
- 50MB(
uploadDesignDrawing硬校验) - 允许文件类型
png / jpg / gif / svg / webp / pdf / dwg / dxf / ai / psd(设计行业通用格式)- 图纸关联(图纸关联表)
drawing_assignments(drawing_id×entity_type×entity_id)- 关联实体类型枚举
quote_item报价行 |order_item订单行 |product产品档案- 项目齐套检查
checkProjectDrawingsReady(projectId)(全部图纸「已通过」才ready)- 设计费单(设计费表)
design_fees;编号design_fee_number格式DF-YYYY-NNNN- 设计费状态枚举
pending待付 |paid已付款 |designing设计中 |completed已完成 |converted已抵订单 |refunded已退款 |forfeited作废(目前无 UI 入口)- 设计费抵订单
design_fees.amount_applied_to_order(抵扣金额)+converted_to_order_id(目标订单 ID)- 预收款桥(预付款表)
prepayments(类型type='design_fee'= 设计费)- 产品 BOM(物料清单)
bom_items(product_id×material_id)- BOM 用途枚举
cabinet_body柜体 |door门板 |countertop台面 |hardware五金 |other其他- BOM 单位
pcs件 |m米 |m2平方米 |kg千克(默认pcs)- 项目 BOM
project_bom(独立表,绑项目 ID)- 图纸上传核心动作
uploadDesignDrawing- 图纸关联核心动作
assignDrawingToEntityAction- 设计费抵订单核心动作
convertFeeToOrderAction
常见问题
ECO / 变更单在哪里提?
已知缺口:系统没有独立的 ECO(工程变更单)表或动作(代码里 design_change_orders 未实现)。要对「已通过」(approved)的图纸做变更:重新「新建设计」上传新版(版本号手工自增),选「评审中」(in_review)走评审;旧版保留用于追溯。下游已有的图纸关联需手动替换到新图纸 ID。
BOM 版本在哪改?能回滚吗?
BOM 编辑入口在 /dashboard/products/[id](产品 BOM)或 /dashboard/projects/[id]?tab=bom(项目 BOM),不在 /dashboard/designs。已知缺口:当前用户界面不暴露 BOM 版本回滚动作(代码里有 revertBOMVersion 函数但没挂 UI)——改错只能删行重建。需要保留历史请让管理员从数据库侧做快照。
设计费收款后客户反悔能退多少?
可退额 = 已收金额 - 已抵订单金额 - 已退款金额(即 paid_amount - amount_applied_to_order - refunded_amount)。状态必须不是「已抵订单」(converted)也不是「已退款」(refunded)。全退后状态变「已退款」;部分退保留原状态并累加已退款金额。已抵订单的不能退——只能在订单侧冲销预收款。
为什么关联对话框里只有 3 种实体?
关联实体类型(entity_type)是代码硬编码的 3 值枚举:quote_item(报价行)/ order_item(订单行)/ product(产品档案 / 产品变体)。其他场景(如直接挂到项目)目前无桥接——用「上传时选项目」方式,图纸自动进入项目聚合视图。
上传 DWG 预览不出来怎么办?
预览组件只对图像文件(PNG / JPG / GIF / SVG / WebP)渲染缩略图,DWG / DXF / AI / PSD / PDF 这类设计源文件显示图标占位,需点「下载」用本地软件打开。这是预期行为,不是 Bug。
为什么设计费抵扣被拒「客户不一致」?
系统硬校验设计费的客户 ID 与订单的客户 ID 必须相同。检查客户 UUID 是否一致;若客户同名但在 CRM 是两条记录(合并遗漏),联系销售合并客户后重试。
为什么会看到「作废」(forfeited)这个状态?能自己触发吗?
已知缺口:「作废」是数据库预留的状态,用于客户弃付没收的场景。但 UI 目前没有暴露任何按钮触发它——只能由后台人工更新数据库。日常操作不需要理会;如果真的遇到弃付没收场景,联系 IT。