接口错误码处理说明

本文档整理了 trade-ui 项目中所有接口返回 code 的特殊处理逻辑,包括全局错误码、业务错误码、错误码汇总表以及相关接口详情。

目录

一、全局错误码(request.js 统一处理)

1.1 主请求拦截器 (src/utils/http/utils/request.js)

成功状态码

错误处理逻辑

// 非 0000/200 状态码统一处理
if (res.code !== '0000' && res.code !== '200') {
  // 根据 showAlert 配置决定提示方式
  if (showAlert) {
    Vue.prototype.$alert(res.message, '提示', {
      confirmButtonText: '关闭',
      type: 'error'
    })
  } else {
    messageUtil.error(res.message)
  }
}

HTTP 状态码处理

状态码 提示信息
400 客户端请求的语法错误,服务器无法理解
401 Token已过期失效,请重新登录
404 可能正在重启服务,请稍等!
405 客户端请求中的方法被禁止
500 服务器内部错误,无法完成请求
502 从远程服务器接收到了一个无效的响应

Token 相关错误码

以下错误码会触发自动刷新 Token 或登出逻辑:

错误码 说明 处理方式
EXCEPT_SECURITY_DEF_:01-0070-000110 Token 为空 尝试刷新 Token,失败则登出
EXCEPT_SECURITY_DEF_:01-0070-000120 无效的访问 Token 尝试刷新 Token,失败则登出
EXCEPT_SECURITY_DEF_:01-0070-000130 Token 已修改 尝试刷新 Token,失败则登出
相关提示信息:

1.2 备用请求拦截器 (src/utils/request.js)

Token 相关数字错误码

错误码 说明 处理方式
50008 非法的 token 提示登出
50012 其他客户端登录了 提示登出
50014 Token 过期了 提示登出

二、业务错误码(各业务组件单独处理)

2.1 EXCEPT_ESC_:01-0001-000000 - 提交前确认提示

使用场景:提交操作前的二次确认,通常用于提示用户确认是否继续提交

涉及文件

处理逻辑示例

// 出仓调整单提交
preSubmitStockAdjustOut({ sId: this.id }).then((res) => {
  if (res.code === '0000') {
    this.submitStockAdjustOut()
  }
}).catch((err) => {
  if (err.code === 'EXCEPT_ESC_:01-0001-000000') {
    this.$message.closeAll()
    this.$confirm(err.message, this.$t('grid.others.prompt'), {
      confirmButtonText: this.$t('btns.confirm'),
      cancelButtonText: this.$t('btns.cancel'),
      type: 'warning'
    }).then(() => {
      this.submitStockAdjustOut()
    })
  }
})

2.2 EXCEPT_BASIC_:BAS000030 - 基础信息校验错误

使用场景:基础信息校验失败,需要用户确认

涉及文件

处理逻辑

submitNewValidateCheck({ sInvoiceId: this.invoiceId }).then((res) => {
  if (res.code === '0000') {
    this.subPurInvoiceV2()
  }
}).catch((err) => {
  if (err.code === 'EXCEPT_BASIC_:BAS000030') {
    this.$message.closeAll()
    this.$confirm(err.message + '</br>' + this.$t('tips.isSubmissionConfirmed'), 
      this.$t('grid.others.prompt'), {
      dangerouslyUseHTMLString: true,
      confirmButtonText: this.$t('btns.confirm'),
      cancelButtonText: this.$t('btns.cancel'),
      type: 'error'
    }).then(() => {
      this.subPurInvoiceV2()
    })
  }
})

2.3 EXCEPT_ESC_:01-0200-000001/02 - 备注栏覆盖/拼接提示

使用场景:

涉及文件

处理逻辑

submitNewCheck({ sInvoiceId: this.invoiceId }, {
  allowOverwriteRemark: this.allowOverwriteRemark
}).then((res) => {
  if (res.code === '0000') {
    this.submitNewCheckAfter()
  }
}).catch((err) => {
  if (['EXCEPT_ESC_:01-0200-000001', 'EXCEPT_ESC_:01-0200-000002'].includes(err.code)) {
    const remarkMsg = err.code === 'EXCEPT_ESC_:01-0200-000002'
      ? '原备注栏已有值,是否将提货人信息拼接在备注值后?'
      : '备注栏已有值,是否覆盖原有备注?'
    
    this.$confirm(remarkMsg, this.$t('grid.others.prompt'), {
      distinguishCancelAndClose: true,
      confirmButtonText: '是',
      cancelButtonText: '否',
      type: 'warning'
    }).then(() => {
      this.allowOverwriteRemark = true
      // 重新提交
    }).catch((action) => {
      this.allowOverwriteRemark = false
      if (action === 'cancel') {
        this.submitNewCheckAfter()
      }
    })
  }
})

2.4 LCT_COM_101 - 物流通用提示码

使用场景:运输委托单生成中的提示

涉及文件

处理逻辑

transportEntrustUrl({ id: this.invoiceId }).then((res) => {
  if (!res.data || res.code === 'LCT_COM_101') {
    this.$alert('正在生成单笔运输委托,请稍后进入该零售单【商品明细】-运输委托详情补充剩余信息', 
      this.$t('grid.others.prompt'), {
      confirmButtonText: '我知道了',
      showClose: false,
      type: 'warning'
    })
  } else {
    window.open(res.data)
  }
})

2.5 业务数据字段处理(非错误码)

sIsNeedPrompt + sTipsMessage 组合

使用场景:提交前需要用户确认的业务场景

涉及文件

处理逻辑示例

// 仓库调拨提交
checkBeforeSubmit({ sId: this.sId }).then((res) => {
  if (res.data.sIsNeedPrompt === '1' && res.data.sTipsMessage) {
    this.$confirm(res.data.sTipsMessage + '</br>' + this.$t('tips.isSubmissionConfirmed'), 
      this.$t('grid.others.prompt'), {
      dangerouslyUseHTMLString: true,
      confirmButtonText: this.$t('btns.confirm'),
      cancelButtonText: this.$t('btns.cancel'),
      type: 'warning'
    }).then(() => {
      if (res.data.sIsNeed === '1') {
        this.accountId = res.data.ejqCustomerId
        this.checkDialogVisible = true
      } else {
        this.onSubmit()
      }
    })
  } else {
    if (res.data.sIsNeed === '1') {
      this.accountId = res.data.ejqCustomerId
      this.checkDialogVisible = true
    } else {
      this.onSubmit()
    }
  }
})

相关字段说明

字段 类型 说明
sIsNeedPrompt string 是否需要提示,'1' 表示需要
sTipsMessage string 提示信息内容
sIsNeed string 是否需要额外操作,'1' 表示需要
ejqCustomerId string EJQ 客户 ID,用于弹窗选择

三、错误码汇总表

3.1 全局错误码

错误码 类型 说明 处理方式
0000 成功码 请求成功 正常返回数据
200 成功码 请求成功 正常返回数据
50008 Token错误 非法的 token 提示登出
50012 Token错误 其他客户端登录了 提示登出
50014 Token错误 Token 过期了 提示登出
EXCEPT_SECURITY_DEF_:01-0070-000110 Token错误 Token 为空 刷新Token/登出
EXCEPT_SECURITY_DEF_:01-0070-000120 Token错误 无效的访问 Token 刷新Token/登出
EXCEPT_SECURITY_DEF_:01-0070-000130 Token错误 Token 已修改 刷新Token/登出

3.2 业务错误码

错误码 模块 说明 处理方式
EXCEPT_ESC_:01-0001-000000 物流/库存 提交前确认提示 弹出确认框,用户确认后继续提交
EXCEPT_BASIC_:BAS000030 物流/销售 基础信息校验错误 弹出确认框,用户确认后继续提交
EXCEPT_ESC_:01-0200-000001 物流/销售 备注栏覆盖提示 询问是否覆盖原有备注
EXCEPT_ESC_:01-0200-000002 物流/销售 备注栏拼接提示 询问是否拼接提货人信息到备注
LCT_COM_101 物流/零售 运输委托生成中 提示用户稍后查看

3.3 HTTP 状态码

状态码 说明 处理方式
400 客户端请求语法错误 提示错误信息
401 Token已过期 提示重新登录
404 服务可能正在重启 提示稍后重试
405 请求方法被禁止 提示错误信息
500 服务器内部错误 提示错误信息
502 无效网关响应 提示错误信息

四、业务错误码相关的接口

4.1 EXCEPT_ESC_:01-0001-000000 相关接口

1. preSubmitStockAdjustOut - 出仓调整单预提交
POST /esc/stock/adjust/detail/out/preSubmit/prompt/${data.sId}
API 定义位置:src/api/logistics/stockManage/outWarehouse.js (L256-261)
使用位置:src/views/logistics/stockManage/outWarehouse/detail.vue
2. preSubmitStockAdjustOut - 第三方出仓调整单预提交
POST /esc/stock/adjust/detail/out/preSubmit/prompt/${data.sId}
API 定义位置:src/api/logistics/stockManage/thirdOutWarehouse.js (L231-236)
使用位置:src/views/logistics/stockManage/thirdOutWarehouse/detail.vue
3. submitStockAdjustOut - 出仓调整单提交
POST /esc/stock/adjust/detail/out/submit/${data.sId}
API 定义位置:src/api/logistics/stockManage/outWarehouse.js (L60-66)
使用位置:src/views/logistics/stockManage/outWarehouse/detail.vue
4. submitStockAdjustOut - 第三方出仓调整单提交
POST /esc/stock/third/adjust/out/submit/${data.sId}
API 定义位置:src/api/logistics/stockManage/thirdOutWarehouse.js (L60-66)
使用位置:src/views/logistics/stockManage/thirdOutWarehouse/detail.vue

4.2 EXCEPT_BASIC_:BAS000030 相关接口

1. submitNewValidateCheck - 销售发货单提交前校验
POST /esc/stock/thirdContractDelivery/wb/submit/pre/validate/${params.sInvoiceId}
API 定义位置:src/api/logistics/saleDelivery/saleorder.js (L140-145)
使用位置:src/views/logistics/saleDelivery/saleorder/salesdeliveryList/salesdeliveryDialog/index.vue

4.3 EXCEPT_ESC_:01-0200-000001/02 相关接口

1. submitNewCheck - 销售发货单提交检查
POST /esc/stock/delivery/submitNew/check/${params.sInvoiceId}?allowOverwriteRemark=${data.allowOverwriteRemark}
API 定义位置:src/api/logistics/saleDelivery/saleorder.js (L140-145)
使用位置:src/views/logistics/saleDelivery/saleorder/salesdeliveryList/salesdeliveryDialog/index.vue
2. submitNewCheck - 零售发货单提交检查
POST /esc/stock/delivery/submitNew/check/${params.sInvoiceId}?allowOverwriteRemark=${data.allowOverwriteRemark}
API 定义位置:src/api/logistics/saleDelivery/retailDelivery.js (L152-158)
使用位置:src/views/logistics/saleDelivery/saleorder/retailDeliveryList/salesdeliveryDialog/index.vue
3. submitNewCheck - 非party发货单提交检查
POST /esc/third/delivery/submit/check/${params.sInvoiceId}?allowOverwriteRemark=${data.allowOverwriteRemark}
API 定义位置:src/api/logistics/saleDelivery/nopartysaleorder.js (L607-612)
使用位置:src/views/logistics/saleDelivery/saleorder/nonpartysalesdeliverylist/salesdeliveryDialog/index.vue

4.4 LCT_COM_101 相关接口

1. transportEntrustUrl - 生成运输委托单URL
GET /esc/stock/delivery/cndlct/detail-url/${params.id}
API 定义位置:src/api/logistics/saleDelivery/retailDelivery.js (L751-757)
使用位置:
  • src/views/logistics/saleDelivery/saleorder/mallRetailOrder/detail/index.vue
  • src/views/logistics/saleDelivery/saleorder/mallRetailOrder/detail/phytihInfo/index.vue
  • src/views/logistics/saleDelivery/saleorder/retailDeliveryList/salesdeliveryDialog/phytihInfo/index.vue

4.5 sIsNeedPrompt 相关接口

1. checkBeforeSubmit - 仓库调拨提交前检查
POST /esc/stock/move/checkBeforeSubmit/${params.sId}/1
API 定义位置:src/api/logistics/inventoryManage.js (L357-363)
使用位置:src/views/logistics/inventoryManage/warehouseTransfer/detailDialog/index.vue
2. doSubmitAllotfBefore - 仓库调拨提交前处理
POST /esc/stock/move/doSubmitAllotfBefore/${params.sId}
API 定义位置:src/api/logistics/inventoryManage.js (L126-132)
使用位置:src/views/logistics/inventoryManage/warehouseTransfer/detailDialog/index.vue
3. checkBeforeSubmit - 采购到货提交前检查
POST /esc/stock/pur/arrival/checkBeforeSubmit/${data.id}
API 定义位置:src/api/logistics/registrationData/purchaseArrival/onArrival/onArrival.js (L188-194)
使用位置:src/views/logistics/registrationData/purchaseArrival/onArrival/arrivalNote/Detail.vue
4. checkBeforeSubmit - 合并签收提交前检查
POST /esc/customer/sign/combine/checkBeforeSubmit/${params.sId}
API 定义位置:src/api/logistics/saleDelivery/combineSign.js (L70-76)
使用位置:src/views/logistics/saleDelivery/combineSign/detail/index.vue
5. processArrivalCheckBeforeSubmit - 成品到货提交前检查
POST /esc/process/arrival/checkBeforeSubmit/${id}
API 定义位置:src/api/processModule/finishedProductArrival.js (L83-88)
使用位置:src/views/processModule/finishedProductArrival/detail/index.vue
6. processArrivalCheckBeforeSubmitIT - 成品到货IT提交前检查
POST /esc/process/arrival/checkBeforeSubmit/it/${id}
API 定义位置:src/api/processModule/finishedProductArrival.js (L91-96)
使用位置:src/views/processModule/finishedProductArrival/detail/index.vue
7. processTaskCheckBeforeSubmit - 流程任务提交前检查
POST /esc/process/task/checkBeforeSubmit/${id}
API 定义位置:src/api/processModule/processTask.js (L67-71)
使用位置:src/views/processModule/processTask/detail/index.vue
8. checkBeforeCreate - 分货创建前检查
POST /esc/stock/receiptToSplit/wb/checkBeforeCreate
API 定义位置:src/api/logistics/stockManage/divideGoods.js (L217-222)
使用位置:src/views/logistics/stockManage/divideGoods/workbench.vue
9. checkBeforeAdd - 分货添加前检查
POST /esc/stock/receiptToSplit/checkBeforeAdd/${params.sId}
API 定义位置:src/api/logistics/stockManage/divideGoods.js (L224-230)
使用位置:src/views/logistics/stockManage/divideGoods/detail/commodityDialog.vue
10. inventorycheckBeforeCreate - 零售库存创建前检查
POST /esc/inventory-management/wb/checkBeforeCreate
API 定义位置:src/api/logistics/saleDelivery/retailDelivery.js (L644-650)
使用位置:src/views/logistics/saleDelivery/saleorder/retailDeliveryList/salesdeliveryDialog/index.vue
11. checkBeforeSuccessImport - 零售导入成功前检查
POST /esc/inventory-management/wb/checkBeforeSuccessImport
API 定义位置:src/api/logistics/saleDelivery/retailDelivery.js (L685-691)
使用位置:src/components/importBtn/promptModal.vue

五、错误处理最佳实践

5.1 统一错误处理流程

// 1. 全局拦截器处理通用错误
// request.js 自动处理 Token 错误、HTTP 状态码错误

// 2. 业务组件处理特定错误码
apiFunction(params)
  .then((res) => {
    if (res.code === '0000') {
      // 成功处理
    }
  })
  .catch((err) => {
    // 3. 根据错误码执行不同逻辑
    if (err.code === 'EXCEPT_ESC_:01-0001-000000') {
      // 确认提示
      this.$confirm(err.message, '提示', {
        confirmButtonText: '确认',
        cancelButtonText: '取消'
      }).then(() => {
        // 用户确认后继续操作
      })
    } else {
      // 其他错误使用全局提示
      this.$message.error(err.message)
    }
  })

5.2 注意事项

  1. 错误码优先级:业务错误码处理优先于全局错误处理
  2. 用户确认:需要用户确认的场景使用 $confirm,避免使用 $alert
  3. 消息关闭:在弹出确认框前,先调用 this.$message.closeAll() 关闭已有提示
  4. HTML内容:如果消息包含 HTML,需要设置 dangerouslyUseHTMLString: true
  5. 国际化:提示文案使用 $t() 进行国际化处理

更新记录

日期 更新内容 更新人
2026-07-08 初始版本,整理所有错误码处理逻辑 AI Assistant