Files
tms-erp-web/.workbuddy/memory/2026-08-06.md
赵忠林 8a262d9d41 style(ui): 统一弹窗分组白卡样式并改造相关弹窗布局
- 新增全局弹窗灰底背景色,提升视觉一致性
- 新增通用分组白卡组件 section-card,标题融入卡头,支持额外插槽
- 统一 Avue 弹窗表单及分组为白卡样式
- 调整 common-route.vue 弹窗,使用 section-card 分组包裹查询条件与常用地址
- 改造 loading-manage.vue 弹窗所有分区,采用 section-card 统一风格
- 全局样式调整弹窗内容区表单项间距及两列表单布局工具类
- 在 main.js 全局注册 section-card 组件,便于项目统一复用
2026-08-06 09:27:49 +08:00

2.9 KiB
Raw Blame History

2026-08-06

复盘 src/views/business/project-apply.vue 弹窗 UI 规范

  • 主弹窗为自定义 el-dialog + el-form(非 Avue option 驱动width 1440px、top 4vh、append-to-body、destroy-on-close。
  • 分区标题复用全局 .dialog-section-title4px 主色竖条 + 8px 间距);页面将其改造为「白卡头 + 下方白内容卡」拼合方案radius 6px + 淡阴影 0 1px 2px rgba(0,0,0,.04))。
  • 表单label-position="right" / label-width="auto";两列 gridcolumn-gap: 72px);表单项 margin-bottom 16pxlabel min-width 160px。
  • 备注类 textarea 整行展示 + 200 字上限 + show-word-limit金额/天数有非负与范围校验。
  • 底部按钮:非变更弹窗=取消/提交(右对齐);变更弹窗=提交/保存/关闭(左对齐)。
  • 与设计规范(AGENTS.md)对照:基本符合 4.8 弹窗表单规范;但本页 scoped 用 white-space: normal 覆盖了全局 .el-dialog .el-form-item__label { white-space: nowrap }允许长标签换行与全局「label 不换行」取向不同);两列 grid 统一 min-width 160px未严格「按列分别计算 label 宽度」。

将 project-apply 弹窗标准推广为「全项目通用标准」

用户要求把 project-apply 弹窗视觉(灰底 + 分组白卡 + 标题在卡内)复制到其他页面。落地方式(已执行):

  • 新增可复用组件 src/components/section-card/main.vue:白卡 + 标题在卡头4px 主色竖条 + 8px 间距),支持 title prop 与 #title/#extra slot已在 src/main.js 全局注册为 <section-card>
  • src/styles/element-ui.scss 末尾新增全局标准:① .el-dialog__body 统一灰底 #f5f6fa(影响全项目所有弹窗);② .el-dialog .avue-form 自动包白卡Avue 默认增删改弹窗无需改 option 即统一);③ .el-dialog .avue-form__group 分组白卡option.group 渲染为标题在卡内);④ 弹窗内 .el-form-item 默认 16px 间距;⑤ .section-card 全局样式;⑥ .form-grid-2 两列栅格工具类column-gap 72px
  • 应用落地business 模块自定义弹窗——common-route.vue 的「选择常用地址」弹窗用 section-card 包成「查询条件/常用地址」两组;loading-manage.vue 主弹窗 6 个分区全部改用 <section-card>common-cargo.vue 导入弹窗经全局 .el-dialog .avue-form 规则自动获得白卡。project-apply.vue 本身作为参照未改(其 scoped 样式已符合,全局灰底与其一致)。
  • 验证:vite build 失败为仓库既有问题(waybill-import-dialog.vue 引入的 xlsx 依赖缺失),与本次改动无关;改用 @vue/compiler-sfc 编译三个改动 .vue均 OK+ sass 编译 element-ui.scssOK
  • 注意:其他模块的自定义弹窗需按同样方式用 <section-card> 包裹各组(灰底已由全局规则自动生效);如需继续推进其余模块可照此模式批量处理。