fix(cargo-type): 修复查看编辑弹窗请求未完成问题

- 删除 beforeOpen 中 view/edit 分支的 getDetail 调用,避免请求失败卡死弹窗
- 直接复用已填充的 this.form,提升弹窗打开性能和稳定性
- 调整菜单宽度由 220 改为 160,优化界面布局
- 更新导出逻辑,去除导出时对 ids 的拼接,统一按搜索条件导出
- 隐藏 Avue 内置“新增”按钮,仅保留自定义菜单中新增按钮
This commit is contained in:
2026-07-29 12:20:50 +08:00
parent a71d2c9350
commit 90d96e01a4
3 changed files with 11 additions and 8 deletions

View File

@@ -20,3 +20,9 @@
## cargo-type 导出逻辑修复 + 去重新增按钮(本次)
- **导出逻辑**`buildExportParams()` 移除 `ids` 参数拼接,始终按当前搜索条件导出(不再受勾选行影响)
- **去重新增按钮**Avue 内置 addBtn 由 `validData(permission, false)` 改为 `false`,隐藏内置"新增"按钮;仅保留 `menu-left` 插槽中带图标的"新增"按钮
## cargo-type 查看/编辑"请求未完成"修复(本次)
- **现象**:点击查看/编辑弹窗不打开,提示"请求未完成,请联系管理员"(该文案前端/后端 Java 源码均无字面匹配,疑似网关或全局异常统一包装的报错)。
- **根因**`beforeOpen` 中对 view/edit 调用 `getDetail(this.form.id)` 重新拉取详情,但 `done()` 仅在 `.then` 内调用;该请求一旦失败/超时 → `done()` 不执行 → 弹窗卡死 + 拦截器 toast 报错。且 `getDetail` 本身冗余:列表 `selectCargoTypePage` 已直接返回完整 `CargoTypeVO`id/typeLevel/parentId/parentCargoName/cargoName/cargoCode/remark 等全字段Avue 打开弹窗前已把整行填充进 `this.form`
- **修复**:删除 `beforeOpen` 中 view/edit 分支的 `getDetail` 调用,改为直接复用 Avue 已填充的 `this.form`,仅保留 `ensureParentOption(this.form)` + `syncColumnDisplay()` + `done()`;同步移除 `getDetail` 的 importapi 文件中的导出保留勿删)。
- **副作用消除**:查看/编辑不再发 detail 请求,彻底规避该接口失败导致的卡死与报错。若后续确需"打开时拉最新数据",需先排查后端 `/blade-system/cargo-type/detail` 为何报错(网关默认只拦 actuator/healthdetail 不在拦截名单)。

View File

@@ -47,7 +47,7 @@ export const getCargoTypeOption = ctx => ({
editBtn: false,
selection: true,
dialogClickModal: false,
menuWidth: 220,
menuWidth: 160,
column: [
{
label: '类型',

View File

@@ -131,7 +131,6 @@
<script>
import {
getDetail,
getList,
getNextCode,
getParentOptions,
@@ -488,12 +487,10 @@ export default {
beforeOpen(done, type) {
this.dialogType = type || 'add';
if (['edit', 'view'].includes(type)) {
getDetail(this.form.id).then(res => {
this.form = res.data.data || {};
this.ensureParentOption(this.form);
this.syncColumnDisplay();
done();
});
// 列表已返回完整 CargoTypeVO直接复用 Avue 填充的 this.form无需再请求 detail
this.ensureParentOption(this.form);
this.syncColumnDisplay();
done();
return;
}
this.form = {