接口错误码处理说明
本文档整理了 trade-ui 项目中所有接口返回 code 的特殊处理逻辑,包括全局错误码、业务错误码、错误码汇总表以及相关接口详情。
一、全局错误码(request.js 统一处理)
1.1 主请求拦截器 (src/utils/http/utils/request.js)
成功状态码
0000: 请求成功,正常返回数据
200: 请求成功,正常返回数据
错误处理逻辑
// 非 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,失败则登出 |
相关提示信息:
- Full authentication is required to access this resource
- token modified!
- Token为空!
- 无效的访问Token!
1.2 备用请求拦截器 (src/utils/request.js)
Token 相关数字错误码
| 错误码 |
说明 |
处理方式 |
50008 |
非法的 token |
提示登出 |
50012 |
其他客户端登录了 |
提示登出 |
50014 |
Token 过期了 |
提示登出 |
二、业务错误码(各业务组件单独处理)
2.1 EXCEPT_ESC_:01-0001-000000 - 提交前确认提示
使用场景:提交操作前的二次确认,通常用于提示用户确认是否继续提交
涉及文件
- src/views/logistics/saleDelivery/receipt/index.vue
- src/views/logistics/saleDelivery/receipt/salesdeliveryDialog/index.vue
- src/views/logistics/saleDelivery/saleorder/salesdeliveryList/salesdeliveryDialog/index.vue
- src/views/logistics/stockManage/outWarehouse/detail.vue
- src/views/logistics/stockManage/thirdOutWarehouse/detail.vue
处理逻辑示例
// 出仓调整单提交
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 - 基础信息校验错误
使用场景:基础信息校验失败,需要用户确认
涉及文件
- src/views/logistics/saleDelivery/saleorder/salesdeliveryList/salesdeliveryDialog/index.vue
处理逻辑
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 - 备注栏覆盖/拼接提示
使用场景:
EXCEPT_ESC_:01-0200-000001: 备注栏已有值,询问是否覆盖原有备注
EXCEPT_ESC_:01-0200-000002: 原备注栏已有值,询问是否将提货人信息拼接在备注值后
涉及文件
- src/views/logistics/saleDelivery/saleorder/salesdeliveryList/salesdeliveryDialog/index.vue
- src/views/logistics/saleDelivery/saleorder/retailDeliveryList/salesdeliveryDialog/index.vue
- src/views/logistics/saleDelivery/saleorder/nonpartysalesdeliverylist/salesdeliveryDialog/index.vue
处理逻辑
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 - 物流通用提示码
使用场景:运输委托单生成中的提示
涉及文件
- 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
处理逻辑
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 组合
使用场景:提交前需要用户确认的业务场景
涉及文件
- src/views/logistics/inventoryManage/warehouseTransfer/detailDialog/index.vue
- src/views/logistics/purchaseTrack/intransitGoods/intransitDialog/index.vue
- src/views/logistics/registrationData/purchaseArrival/onArrival/arrivalNote/Detail.vue
- src/views/logistics/saleDelivery/saleorder/nonpartysalesdeliverylist/salesdeliveryDialog/index.vue
- src/views/logistics/stockManage/divideGoods/workbench.vue
- src/views/logistics/stockManage/divideGoods/detail/commodityDialog.vue
- src/views/processModule/finishedProductArrival/detail/index.vue
- src/views/processModule/processTask/detail/index.vue
- src/views/returnManage/returnSale/detail/index.vue
处理逻辑示例
// 仓库调拨提交
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 注意事项
- 错误码优先级:业务错误码处理优先于全局错误处理
- 用户确认:需要用户确认的场景使用
$confirm,避免使用 $alert
- 消息关闭:在弹出确认框前,先调用
this.$message.closeAll() 关闭已有提示
- HTML内容:如果消息包含 HTML,需要设置
dangerouslyUseHTMLString: true
- 国际化:提示文案使用
$t() 进行国际化处理
更新记录
| 日期 |
更新内容 |
更新人 |
| 2026-07-08 |
初始版本,整理所有错误码处理逻辑 |
AI Assistant |