refactor(business): 优化 process-config 弹窗及多页面基本信息布局
- process-config 弹窗改为手写 el-dialog,统一与 credit-score-quantification 风格 - 弹窗内三张 section-card 堆叠,卡间间距12px,底部按钮新增保存草稿/保存并启用 - 删除原 Avue 内置 dialog 及相关表单插槽,移除无用样式,调整弹窗最大高度 - 多页面「基本信息」类分区由3列(span 8)改为4列(span 6),包含结算、合同、船舶等多处页面 - contract-manage-change.vue 手写表单列宽全部由8改6,保留备注与分区标题整行显示 - business-crud-page.vue contract配置中基本信息分区改为4列显示,调整表单 label 宽度为150px - temporary-credit-limit 详情弹窗加 align-center 实现上下居中,新增 computed 绑定配置开关 - temporary-credit-limit 弹窗宽度修改为96%,与其他业务页面保持一致 - ship.vue 标签宽度调整为最多6汉字宽,允许超长标签换行,改善显示效果 - common-route.vue 调整部分输入框宽度适配布局 - element-ui.scss 调整 process-config 相关弹窗样式,取消原 Avue 透明化样式,全局灰底内卡片间距统一 - 精简 process-config 相关 option 配置,去除 dialog 相关冗余属性 - 过程配置弹窗新增打开、保存、关闭等手写逻辑,支持查看、编辑不同状态,保持业务逻辑完整 - 删除 process-config 内部 avue-crud 相关操作,整体改用标准 el-dialog 和 el-form 实现 - 其他局部样式细节调整,保证表单布局和交互统一规范
This commit is contained in:
@@ -1,5 +1,21 @@
|
||||
# 2026-08-21
|
||||
|
||||
## temporary-credit-limit 详情弹窗上下居中(align-center)
|
||||
- 需求:`/business/temporary-credit-limit` 详情弹窗(detailBox,走 business-crud-page 自定义详情)上下居中。
|
||||
- 机制:Element Plus el-dialog 的 `align-center` prop —— use-dialog 源码确认:align-center 时 `.el-overlay-dialog` 设 `display:flex`,`.el-dialog.is-align-center { margin:auto }`,实现垂直+水平居中;此时 top prop 设置的 `--el-dialog-margin-top` 被更高特异性的 `margin:auto` 覆盖,不生效。
|
||||
- 改动(3 处,开关式不影响其他页):
|
||||
1. `src/views/business/components/business-crud-page.vue` 详情 el-dialog(2504 行)加 `:align-center="detailAlignCenter"`。
|
||||
2. 同文件新增 computed `detailAlignCenter()`:`this.config.detailAlignCenter === true`(默认 false,contract/waybill 等共用详情弹窗不受影响)。
|
||||
3. `src/option/business/temporary-credit-limit.js` config 加 `detailAlignCenter: true`。
|
||||
- 安全性:全局 `.el-dialog__body { max-height: calc(100vh - 200px); overflow-y:auto }`(element-ui.scss 182 行)保证内容超高时在 body 内滚动,dialog 总高 < 视口,flex 居中不会顶部裁切。
|
||||
- 注意:element-plus 实际版本是 2.14.2(package.json 声明 ^2.10.1,锁到 2.14.2)。el-dialog 的 class 经 $attrs 透传最终落在 `div.el-dialog` 根元素(ElDialogContent 未设 inheritAttrs:false);因此 scoped 里 `&__detail-dialog.is-transport-plan-detail { :deep(.el-dialog){...} }` 的 max-width/margin 规则实际选不到自身(仅 header/body 后代规则生效)——历史遗留,未处理。
|
||||
- 验证:`node --check` 通过;Vite 2889 编译两个改动文件均 HTTP 200。
|
||||
|
||||
## temporary-credit-limit 弹窗宽度 1400px → 96%
|
||||
- 需求:`/business/temporary-credit-limit` 新增/编辑弹窗加宽到 96%。
|
||||
- 改动(单文件 `src/option/business/temporary-credit-limit.js`):`dialogWidth: 1400` → `dialogWidth: '96%'`。
|
||||
- 先例:waybill-manage / transport-plan 均为 `dialogWidth: '96%'`,shipping-template 为 `'92%'`。business-crud-page 对 dialogWidth 无特殊处理(仅独立表单页强制 100%),百分比直接透传 avue-crud;element-ui.scss 的 `.temporary-credit-limit-dialog` 只覆 label 宽度、不覆盖 el-dialog 宽度,无冲突。
|
||||
|
||||
## process-config 弹窗卡片间隔(对齐 project-apply 风格)
|
||||
- 需求:process-config 新增/编辑弹窗内三张 `<section-card>`(基本信息 / 现行过程节点 / 节点设置)要像 project-apply 表单页一样独立成卡、卡间露出灰底(12px)。
|
||||
- 根因:全站规则 `.el-dialog .avue-form { background:#fff; padding:8px 16px 4px }`(element-ui.scss ~246 行)把 Avue 弹窗表单整体包成一张白卡,section-card 白卡叠在其上看不出间隔。
|
||||
@@ -113,3 +129,33 @@
|
||||
1. 新建 `src/views/settlement/components/transport-reconciliation-table-panel.vue`:工具栏(新增/导出+刷新)+`el-table`+分页抽成子组件;props 同 formal 面板,emits `create/export/refresh/page-change/update:selection/action`;列渲染差异:`.link` 列点击 emit view、`reconciliationStatusName` 走 `row.reconciliationStatus==='completed'?'success':'warning'` 的 el-tag;行操作 `rowActions(row)` 为 查看(常显)+编辑/删除/确认(均 `hasPermission && isEditable(row)`,isEditable=`reconciliationStatus==='unfinished'`),确认非 danger。
|
||||
2. `src/views/settlement/transport-reconciliation.vue`:删除原 toolbar+table+pagination 块与对应 scoped 样式(`__toolbar/__toolbar-right/__links/__pagination`),在两个 `el-tab-pane` 内各放一个面板;保留 `.reconciliation-page__settlement-tabs`(含 `:deep(.el-tabs__header){margin:0}`);新增 `handlePageChange`、`handleAction({type,row})`(view→openView/edit→openEdit/delete→handleDelete/complete→handleComplete);删除 `handleSizeChange`。导出按钮无权限守卫、仍 emit `export` 由父 `handleExport`(用 `this.settlementType`)处理。
|
||||
- 验证:Vite build 通过(EXIT=0)。待用户在 2889 刷新核对应付/应收 tab 各自带完整表格与工具栏、切换触发 reload。
|
||||
|
||||
## process-config 弹窗重写为手写 el-dialog(对齐 credit-score-quantification 风格)
|
||||
- 原因:用户参考 `/vehicle/credit-score-quantification` 的弹窗(手写 `el-dialog` + 多个 `<section-card>` 堆叠、卡间 12px、底部 #footer 按钮),要求 process-config 弹窗同样"白底卡片包住蓝标内容块、卡间距 12px、风格统一"。原实现用的是 Avue 内置 dialog + formslot,与参考页机制不一致(即使视觉接近)。
|
||||
- 改动(3 文件):
|
||||
1. `src/views/business/process-config.vue`:删除 Avue 内置 dialog 相关(`before-open`、`#basicInfo-form`/`#nodeConfigJson-form`/`#menu-form-before` 插槽、`rowSave/rowUpdate/submitRow/stopSubmitLoading/handleProcessConfigSave`、数据项 `submitStatus`);新增手写 `<el-dialog class="process-config-dialog" append-to-body width="96%" top="4vh" :close-on-click-modal="false">`,内部 `<div class="process-config-form">` 堆三张 `<section-card>`:基本信息 / 现行过程节点(timeline)/ 节点设置(node 表);`#footer` 放 取消 / 保存草稿(plain) / 保存并启用(primary),`submitting` 控制 loading。新增 `openConfig(row, readonly)`、`submitConfig(mode)`、`handleDialogClosed`,保留全部节点配置逻辑(NODE_TEMPLATES/cloneNode/parseNodeConfig/syncNodeFields/timelineDescriptions/validateRow/checkEnabledProjectBeforeSubmit/confirmDuplicateVoucher 等)。菜单 查看→`openConfig(row,true)`、编辑→`openConfig(row)`、新建→`openConfig()`。
|
||||
2. `src/option/business/process-config.js`:option 删除仅作表单容器的 `basicInfo`/`nodeConfigJson` 两列与 `saveBtn/updateBtn/dialogTop/dialogWidth/dialogCustomClass` 等 dialog 配置。
|
||||
3. `src/styles/element-ui.scss`:删除原先 `.process-config-dialog .avue-form / .avue-form__group / .avue-dialog__footer` 三处透明化/归零规则(已无用),改为 `.process-config-dialog .el-dialog__body { max-height: calc(100vh - 130px) }`。
|
||||
- 关键点:弹窗内容走 `append-to-body` 会被 teleport 出 `.process-config-page`,故所有弹窗内样式(timeline/node-table/require-*/finish-days)改用顶层 scoped 类 `.process-config-form__*`(不再嵌套在 `.process-config-page` 下),否则 scoped 选择器因缺祖先类而失效。12px 卡距由全局 `.section-card{margin-bottom:12px}` + 全局灰底 `.el-dialog__body{background:#f2f2f2;padding:12px}` 保证,与参考页一致。
|
||||
- 验证:Vite build 通过(EXIT=0),无编译错误;2889 HMR 生效。待用户刷新核对弹窗卡片风格。
|
||||
|
||||
## 多页面「基本信息」类分区统一改为 4 列(span 8→6)
|
||||
- 用户逐一要求把各结算/合同页的「基本信息」分区从 3 列改为 4 列。列数由 el-col `:span` 控制(24/8=3 → 24/6=4)。
|
||||
- 手写 el-col 循环页面(直接改 span):
|
||||
- `src/views/settlement/components/formal-settlement-editor.vue`:`:span="8"`→`:span="6"`(结算基本信息)。
|
||||
- `src/views/settlement/components/transport-reconciliation-editor.vue`:`:span="8"`→`:span="6"`(导入外部账单核对)。
|
||||
- `src/views/settlement/components/settlement-adjustment-editor.vue`:`:span="8"`→`:span="6"`(基本信息)。
|
||||
- `src/views/settlement/components/pre-settlement-editor.vue`:动态 `:span="field.span || 8"`→`|| 6`(仅备注显式 span:24 仍整行)。
|
||||
- `src/views/business/contract-manage-change.vue`:`基本信息` 区 `:span="8"`→`:span="6"`(变更类型/备注 `:span="24"` 保持整行)。
|
||||
- Avue 分组表单页面(合同新增/编辑 form 页):非手写循环,`option.span=8` 控制默认列数。
|
||||
- 改动 `src/views/business/components/business-crud-page.vue` 的 `buildFormGroupOption`:当 `this.isContractConfig` 时,对首组(基本信息,=groups[0] 顶层 column)每个非分区标题、非 `span===24` 的列设 `col.span = 6`;备注(span:24)与分区标题列保持原样。其余分组仍 3 列。
|
||||
- 验证:2889 HMR 生效。注意合同 form 页走 Avue group,不能用简单 span 替换,须改 buildFormGroupOption。
|
||||
|
||||
## 续:更多页面「基本信息」类分区改 4 列(span 8→6)
|
||||
- `src/option/business/temporary-credit-limit.js`:Avue 配置页,扁平 column 列表,8 个表单字段 `span:8`→`span:6`(备注/附件 span:24 保持整行)。注意 createCrudOption 不设默认 span,可见字段都有显式 span。
|
||||
- `src/views/transportCapacity/ship.vue`:「基础船舶信息」10 个 `:span="8"`→`:span="6"`;该页 12 空格缩进=基础船舶信息区、14 空格缩进=船舶证书信息区,**勿用全局 replace_all**(12 空格串是 14 空格的子串会误伤证书区),必须按行号区间 sed(146,253)或带 label 上下文逐个替换。
|
||||
- `src/views/business/project-apply.vue`:`.project-apply-form__grid` `repeat(3,...)`→`repeat(4,...)`;label 规则(作用域 `__grid` 内)`width:100px !important; min-width:0 !important; white-space:normal`——6 汉字宽超出换行,`!important` 压过 label-width="auto" 的行内 width 与全局 min-width:160px。
|
||||
|
||||
## ship 页 label 规则:最多 6 汉字宽、超出换行
|
||||
- `src/views/transportCapacity/ship.vue`:el-form `label-width`(原 HEAD 为 auto,工作区历史为 150)→ `100`(6 汉字≈84px+冒号≈98px,100px 恰容 6 字);`.ship-form` 内新增 `:deep(.el-form-item__label) { white-space: normal; line-height: 20px }` 允许换行。适用整个 ship 表单(含证书区)。
|
||||
- 注意:改该文件前先确认 git 暂存区状态,`git checkout -- <file>` 恢复的是 index 版本;本文件 index=HEAD=auto,工作区曾为 150(历史未提交改动),已被本次需求覆盖。
|
||||
|
||||
Reference in New Issue
Block a user