编辑 | blame | 历史 | 原始文档

CRM 销售报价单 - 报价单号支持自定义(前端联调方案)

调整内容:报价单的「报价单号」由「系统自动生成、不可编辑」改为**支持用户自定义**:
新增时留空 = 系统自动生成;填写 = 使用用户填写的编号(需全库唯一)。
修改时留空 = 保持原编号不变;填写 = 替换为新编号(需全库唯一)。
前端需把该输入框放开编辑,并把提示文案改为「报价单号自定义」。

涉及页面

  • views/crm/saleQuotation/index.vue — 报价单列表页(列表展示的报价单号来源不变,无需改动)
  • views/crm/saleQuotation/modules/form.vue — 报价单新增/编辑弹窗(**本次改动主体**)
  • views/crm/saleQuotation/data.ts — 表单字段配置(**本次改动主体**)

业务流程与数据带入

  1. 新增报价单:打开弹窗 → 报价单号输入框默认为空 → 用户可填自定义编号,也可不填 → 提交时把 no 原样带给后端。不填由后端按编码规则自动生成。
  2. 编辑报价单:打开弹窗 → 调用 GET /crm/sale-quotation/get?id= 回填表单 → 报价单号输入框显示**原编号**(可修改)→ 提交时把 no 原样带给后端。不填(清空)表示保持原编号不变。
  3. 保存成功后:列表刷新,展示后端最终返回的报价单号(自定义编号或自动生成编号)。

API

方法 路径 说明
POST /admin-api/crm/sale-quotation/create 新增报价单,请求体新增选填 no
PUT /admin-api/crm/sale-quotation/update 修改报价单,请求体新增选填 no
GET /admin-api/crm/sale-quotation/get 回填编辑表单(no 已在响应中)

请求参数新增:

参数 类型 必填 说明
no String 否 报价单号。长度 ≤ 32 字符;新增留空由系统自动生成;修改留空保持原值。填写时后端校验全库唯一

请求示例:

{
  "no": "BJ-2026-001",
  "name": "报价单A",
  "customerId": 18336,
  "ownerUserId": 17144,
  "quotationTime": "2026-09-01 00:00:00",
  "items": [
    { "itemId": 20529, "quotationPrice": 123.00, "count": 10, "taxPercent": 13.00 }
  ]
}

错误提示(后端已给出可执行文案):

场景 提示
编号已被占用(含已删除的报价单占用) 报价单号【填写值】已被占用,不能重复使用。请换一个编号,或清空编号由系统自动生成(已删除的报价单也会占用其原编号)
编号超长 报价单号长度不能超过 32 个字符

前端修改点(仅说明,不含代码)

  1. data.ts 中「报价单号」字段配置:
  • 去掉输入框的禁用(原为保存时自动生成、不可编辑),改为可编辑。
  • 提示文案由「保存时自动生成」改为「**报价单号自定义**」,并补充「留空由系统自动生成」的说明。
  • 校验规则:非必填;可加长度上限 32 的前端提示,避免提交后被后端拦截。
  1. modules/form.vue:
  • 新增/编辑弹窗打开时,报价单号输入框允许用户输入。
  • 编辑态回填逻辑不变:GET /crm/sale-quotation/get 已返回 no,会一并回填到表单。
  • 提交逻辑不变:直接把表单值(含 no)提交给 create/update 接口。用户未填写时提交空值即可(后端按「留空」语义处理),无需前端自行生成编号。

字段展示规则

字段 展示位置 说明
报价单号 列表列、详情、表单输入框 后端返回的最终编号(自定义或自动生成)
报价单号(输入框提示) 新增/编辑表单 「报价单号自定义」,提示留空由系统生成

业务规则说明

场景 规则
新增,编号留空 后端按编码规则(BJ + 日期 + 序号)自动生成
新增,填写编号 使用用户填写的编号,需全库唯一
修改,编号留空 保持原编号不变(不会被清空)
修改,填写编号 校验唯一后替换;与原编号相同视为未变更,允许保存
编号唯一性范围 覆盖**历史已删除**的报价单(数据库唯一索引不含逻辑删除标记),删除报价单后其编号不可再被使用
编号前后空格 后端提交前会做首尾去空格处理,纯空格等同留空
非草稿状态 报价单一旦提交/转合同,不允许修改(含编号),维持原有限制

注意事项

  • 「留空」与「填写后删除内容」在后端是同一语义(保持/自动生成),前端无需区分。
  • 编号建议使用字母、数字、短横线组合,避免使用特殊字符,便于后续打印与检索;后端仅做长度与唯一性校验。
  • 编辑态若原报价单由系统自动生成编号,用户可直接改成自定义编号;改后原编号不会被释放,仍占用。
  • 报价单号会带入「转合同」生成的合同备注(由报价单[xxx]生成),若修改编号需注意历史合同备注中保留的是旧编号。
  • 本次仅后端放开 no 字段与唯一性校验,前端放开输入框即可生效,无需其他接口配合。