From 9e5fbfd2d43c7a2248dacb7d12a479e0dc9d5179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 14 Aug 2026 08:18:45 +0800 Subject: [PATCH 1/6] =?UTF-8?q?style(business):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=A4=9A=E5=A4=84=E7=BB=84=E4=BB=B6=E6=A0=B7=E5=BC=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=AF=A6=E6=83=85=E9=A1=B5=E8=A7=86=E8=A7=89=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 loading-manage.vue 中流程线条高度和颜色为6px浅灰色 - 在 master-order.vue 添加节点名称悬浮提示,调整进度条宽度和高度,居中标题字号 - 更新 master-order-detail.vue 路由线条样式加粗为6px浅灰色 - 优化 master-order-dispatch.vue 路由线条宽度改为6px浅灰色 - voucher-manage.vue 表单结构新增 section-card 容器组件,上传区和关联运输批次按钮布局优化 - voucher-manage.vue 引入 SectionCard 组件用于包裹上传表单区域 --- .../components/master-order-detail.vue | 2 +- .../components/master-order-dispatch.vue | 2 +- src/views/business/loading-manage.vue | 2 +- src/views/business/master-order.vue | 12 ++-- src/views/business/voucher-manage.vue | 64 ++++++++++--------- 5 files changed, 44 insertions(+), 38 deletions(-) diff --git a/src/views/business/components/master-order-detail.vue b/src/views/business/components/master-order-detail.vue index b526abb..d3f11e8 100644 --- a/src/views/business/components/master-order-detail.vue +++ b/src/views/business/components/master-order-detail.vue @@ -117,7 +117,7 @@ export default { .route-map__node { display: grid; flex: 0 0 150px; justify-items: center; gap: 6px; text-align: center; strong { font-size: 16px; white-space: nowrap; } small { color: #606266; white-space: nowrap; } } .route-map__progress { color: #409eff !important; } .route-badge { display: inline-flex; width: 32px; height: 32px; align-items: center; justify-content: center; border-radius: 4px; background: #67c23a; color: #fff; font-weight: 600; &.start { background: #409eff; } &.end { background: #e6a23c; } } -.route-map__line { flex: 1 0 64px; min-width: 64px; height: 32px; border-bottom: 2px solid #606266; } +.route-map__line { flex: 1 0 64px; min-width: 64px; height: 32px; border-bottom: 6px solid #e4e7ed; } .execution-detail-heading { padding: 20px 24px 12px; h3 { margin: 0; padding-left: 12px; border-left: 4px solid #409eff; font-size: 16px; } } .segment-detail { padding: 16px 24px; border-top: 1px solid #eff1f7; header { display: flex; align-items: center; justify-content: space-between; margin: -16px -24px 8px; padding: 12px 24px; cursor: pointer; background: #fafbfc; h3 { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 12px; margin: 0; font-size: 16px; } em { color: #409eff; font-style: normal; } } } .segment-detail__progress { color: #606266; font-size: 14px; font-weight: 400; } diff --git a/src/views/business/components/master-order-dispatch.vue b/src/views/business/components/master-order-dispatch.vue index 32aec10..f9378ad 100644 --- a/src/views/business/components/master-order-dispatch.vue +++ b/src/views/business/components/master-order-dispatch.vue @@ -627,7 +627,7 @@ export default { .route-overview { display: flex; align-items: flex-start; justify-content: flex-end; padding-top: 8px; overflow-x: auto; } .route-overview__node { display: grid; flex: 0 0 130px; justify-items: center; gap: 6px; text-align: center; strong { font-size: 16px; white-space: nowrap; } small { color: #606266; white-space: nowrap; } } .route-badge { display: inline-flex; width: 32px; height: 32px; align-items: center; justify-content: center; border-radius: 4px; background: #67c23a; color: #fff; font-weight: 600; &.start { background: #409eff; } &.end { background: #e6a23c; } } -.route-overview__line { flex: 1 0 56px; min-width: 56px; height: 32px; margin-top: 0; border-bottom: 2px solid #606266; } +.route-overview__line { flex: 1 0 56px; min-width: 56px; height: 32px; margin-top: 0; border-bottom: 6px solid #e4e7ed; } .segment-header { min-height: 46px; padding: 0 20px; border-bottom: 1px solid #eff1f7; font-weight: 600; em { color: #409eff; font-style: normal; } } .segment-content { padding: 16px 24px; } .dispatch-form { :deep(.el-form-item) { margin-bottom: 16px; } :deep(.el-input), :deep(.el-select), :deep(.el-date-editor), :deep(.el-input-number) { width: 100%; } } diff --git a/src/views/business/loading-manage.vue b/src/views/business/loading-manage.vue index 6fa95ca..ae95707 100644 --- a/src/views/business/loading-manage.vue +++ b/src/views/business/loading-manage.vue @@ -2360,7 +2360,7 @@ export default { .loading-detail__value { display: flex; flex-wrap: wrap; gap: 8px; text-align: left; } .loading-detail__steps { display: flex; align-items: flex-start; overflow-x: auto; padding: 8px 4px 16px; } .loading-detail__step { position: relative; min-width: 190px; flex: 1; text-align: center; } - .loading-detail__step:not(:last-child)::after { position: absolute; z-index: 0; top: 16px; left: calc(50% + 25px); width: calc(100% - 50px); height: 2px; content: ''; background: #606266; } + .loading-detail__step:not(:last-child)::after { position: absolute; z-index: 0; top: 16px; left: calc(50% + 25px); width: calc(100% - 50px); height: 6px; content: ''; background: #e4e7ed; } .loading-detail__step-line { display: flex; align-items: center; justify-content: center; } .loading-detail__step-dot { position: relative; z-index: 1; display: inline-flex; width: 34px; height: 34px; align-items: center; justify-content: center; color: #fff; border-radius: 4px; font-weight: 600; } .loading-detail__step-dot.start { background: #409eff; }.loading-detail__step-dot.middle { background: #67c23a; }.loading-detail__step-dot.end { background: #e6a23c; } diff --git a/src/views/business/master-order.vue b/src/views/business/master-order.vue index f6bd45d..bd2db8f 100644 --- a/src/views/business/master-order.vue +++ b/src/views/business/master-order.vue @@ -76,7 +76,7 @@
{{ node.text }}
- {{ node.name }} + {{ node.name }} {{ line }}
@@ -511,8 +511,8 @@ export default { } } .route-connector { - width: clamp(180px, 20vw, 344px); - flex: 0 0 clamp(180px, 20vw, 344px); + width: clamp(180px, 20vw, 266px); + flex: 0 0 clamp(180px, 20vw, 266px); padding-top: 2px; margin: 0 -6px; small { @@ -525,8 +525,8 @@ export default { line-height: 1.2; } :deep(.el-progress-bar__outer) { - height: 8px !important; - background-color: #f1f2f5; + height: 6px !important; + background-color: #e4e7ed; } :deep(.el-progress-bar__inner) { background-color: #409eff; @@ -538,6 +538,8 @@ export default { header { margin-bottom: 10px; font-weight: 600; + font-size: 14px; + text-align: center; } .el-link { display: flex; diff --git a/src/views/business/voucher-manage.vue b/src/views/business/voucher-manage.vue index abe9894..d37323c 100644 --- a/src/views/business/voucher-manage.vue +++ b/src/views/business/voucher-manage.vue @@ -153,15 +153,16 @@ destroy-on-close :before-close="beforeUploadDialogClose" > - - + + - + 上传上传 - + 选择 - + > + + + Date: Fri, 14 Aug 2026 08:29:01 +0800 Subject: [PATCH 2/6] =?UTF-8?q?style(business):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=88=86=E9=9A=94=E7=BA=BF=E9=AB=98=E5=BA=A6=E5=92=8C=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E5=8F=8A=E8=A1=A8=E5=8D=95=E6=A0=87=E7=AD=BE=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将分隔线高度从2px调整为4px - 修改分隔线背景色为#e4e7ed,替换原来的#606266 - 为.el-form-item--default .el-form-item__label设置行高18px - 为.el-form-item--label-right .el-form-item__label添加垂直居中样式 --- src/styles/element-ui.scss | 7 +++++++ src/views/business/components/business-crud-page.vue | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index c8d6403..bd37191 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -806,3 +806,10 @@ .el-form-item__label { margin-left: 12px !important; } + +.el-form-item--default .el-form-item__label { + line-height: 18px; +} +.el-form-item--label-right .el-form-item__label { + align-items: center; +} diff --git a/src/views/business/components/business-crud-page.vue b/src/views/business/components/business-crud-page.vue index a495342..4af2783 100644 --- a/src/views/business/components/business-crud-page.vue +++ b/src/views/business/components/business-crud-page.vue @@ -13859,9 +13859,9 @@ export default { &::before { flex: 1; order: 2; - height: 2px; + height: 4px; content: ''; - background: #606266; + background: #e4e7ed; } b.end { From 9948c8f33b8d0e564992f6cdfbc21889c98d23b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 14 Aug 2026 08:46:39 +0800 Subject: [PATCH 3/6] =?UTF-8?q?refactor(process-config):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E8=BF=87=E7=A8=8B=E9=85=8D=E7=BD=AE=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E4=B8=BA=E6=89=8B=E5=86=99=20el-dialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 process-config 弹窗由 Avue 内置弹窗改为手写 el-dialog 对齐 customer-archive 风格 - 移除 avue-crud 原有的弹窗相关生命周期和插槽方法 - 新增 openProcessConfig、submitProcessConfig、resetProcess 等方法管理弹窗状态和数据提交 - 更新模板结构,新增具备基本信息、过程节点、节点设置的表单布局和底部操作按钮 - 关闭原 avue-crud 弹窗的内置按钮,改由手写对话框控制操作 - 优化样式,增加弹窗内部滚动,保持 footer 固定 - 微调业务组件样式,调整边框和表单布局宽度以适配新弹窗设计 --- .workbuddy/memory/2026-08-14.md | 13 + src/option/business/process-config.js | 4 + src/option/business/temporary-credit-limit.js | 16 +- .../components/business-crud-page.vue | 2 +- src/views/business/process-config.vue | 454 +++++++++--------- 5 files changed, 256 insertions(+), 233 deletions(-) diff --git a/.workbuddy/memory/2026-08-14.md b/.workbuddy/memory/2026-08-14.md index c73b5db..7d3de7a 100644 --- a/.workbuddy/memory/2026-08-14.md +++ b/.workbuddy/memory/2026-08-14.md @@ -31,3 +31,16 @@ 3. option:将 `expireStatus` 列的 `search: true → search: false`(否则会在搜索网格里多渲染一个空输入框);`searchIndex` 设为 ≥ 真实搜索列数(vehicle: `4 → 6`;ship 已是 `6`),使 `columnLen ≤ searchIndex`,Avue 不再显示「展开」按钮。 - 原理:Avue `header-search3.js` 中 `#search-menu` 插槽内容渲染进 `menu-form`,位于默认搜索/重置按钮之后、展开按钮之前;`order: -1` 将标签推到按钮左侧。 - 验证:`node --check` 两个 option 文件通过;页面刷新即可见效果。 + +## process-config.vue 弹窗重构为手写 el-dialog(对齐 customer-archive 风格) + +- 需求:用户要求 `/business/process-config.vue` 排版风格改成和 `/vehicle/customer-archive.vue` 一样,保持风格统一。 +- 根因:两页弹窗架构根本不同——customer-archive 用手写 `` + `section-card` 分组 + `#footer` 按钮;process-config 原用 Avue 内置弹窗(`#basicInfo-form`/`#nodeConfigJson-form` 插槽 + `#menu-form-before` 保存按钮)。要真正统一,只能把 process-config 改成手写弹窗。 +- 模板改动(已完成): + - 移除 avue-crud 的 `:before-open`/`@row-save`/`@row-update`/`@row-del` 与 `#menu-form-before`、`#basicInfo-form`、`#nodeConfigJson-form` 插槽。 + - 在 `` 后新增手写 ``,内部 ``,含 3 个 `section-card`:基本信息 / 现行过程节点(时间线)/ 节点设置(节点表格);`#footer` 含 保存草稿(plain) + 保存并启用(primary) + 取消/关闭。 + - 顶部「新建过程配置」、表格「查看/编辑」链接改调 `openProcessConfig()` / `openProcessConfig(row, true)` / `openProcessConfig(row, false)`。 +- 脚本改动(本次完成):删除 Avue 生命周期方法 `beforeOpen/rowSave/rowUpdate/submitRow/stopSubmitLoading/handleProcessConfigSave`;新增 `openProcessConfig(row, readonly)`(load 详情后 `this.form=data` + `selectedProjectId` + `parseNodeConfig` + 开框;新增则清空表单 + `resetNodeRows`)、`submitProcessConfig(mode)`(`this.$refs.processForm.validate` → `syncNodeFields` → `normalizeRow` → `validateRow` → `confirmDuplicateVoucher` → `api.submit`,成功后关框并刷新)、`resetProcess()`(`@closed` 重置 `dialogReadonly/submitting/submitStatus/form/selectedProjectId` + `resetNodeRows` + `clearValidate`)。`data()` 已含 `processBox/submitting`、`computed.dialogTitle`;`rowDel`/`handleCopy`/`handleAction` 不变(独立 API 调用)。 +- option 改动(已完成):`src/option/business/process-config.js` 置 `saveBtn/updateBtn/addBtn/viewBtn/editBtn/delBtn:false`,关闭 Avue 内置弹窗按钮。 +- 样式:新增 `:deep(.process-dialog .el-dialog__body){max-height:72vh;overflow:auto}`,对齐 customer-archive 的 `.archive-dialog` 滚动行为(长内容时 body 滚动、footer 固定)。 +- 验证:`vite build --outDir /tmp/pc-build-check` 全量编译通过(仅动态导入 chunk 警告,与本改动无关);之前 `npm run build` 失败仅因沙箱 safe-delete 守卫清理旧 dist/ 触发,非代码错误。 diff --git a/src/option/business/process-config.js b/src/option/business/process-config.js index f5aa1e9..7a21f9d 100644 --- a/src/option/business/process-config.js +++ b/src/option/business/process-config.js @@ -177,6 +177,10 @@ export const option = { ]), saveBtn: false, updateBtn: false, + addBtn: false, + viewBtn: false, + editBtn: false, + delBtn: false, dialogTop: '10px', dialogWidth: '96%', menuWidth: 220, diff --git a/src/option/business/temporary-credit-limit.js b/src/option/business/temporary-credit-limit.js index f1e5e22..a539440 100644 --- a/src/option/business/temporary-credit-limit.js +++ b/src/option/business/temporary-credit-limit.js @@ -113,7 +113,7 @@ export const option = { value: 'projectName', }, filterable: true, - span: 12, + span: 8, minWidth: 180, rules: textRule('项目名称', 100, true), }, @@ -128,7 +128,7 @@ export const option = { prop: 'projectCode', hide: true, disabled: true, - span: 12, + span: 8, minWidth: 150, rules: textRule('项目编号', 50), }, @@ -137,7 +137,7 @@ export const option = { prop: 'undertakeDeptName', hide: true, disabled: true, - span: 12, + span: 8, minWidth: 150, rules: textRule('承办部门', 50, true), }, @@ -146,7 +146,7 @@ export const option = { prop: 'projectFundLimit', hide: true, disabled: true, - span: 12, + span: 8, minWidth: 200, rules: [nonNegativeRule('项目资金使用额度')], }, @@ -155,7 +155,7 @@ export const option = { prop: 'usedFundLimit', hide: true, disabled: true, - span: 12, + span: 8, minWidth: 220, value: 0, rules: [nonNegativeRule('已使用项目资金额度')], @@ -165,7 +165,7 @@ export const option = { prop: 'remainingFundLimit', hide: true, disabled: true, - span: 12, + span: 8, minWidth: 230, value: 0, rules: [nonNegativeRule('剩余项目资金使用额度')], @@ -174,7 +174,7 @@ export const option = { label: '申请临时额度(万元)', prop: 'applyLimit', formslot: true, - span: 12, + span: 8, minWidth: 180, rules: [ { required: true, message: '请输入申请临时额度', trigger: 'blur' }, @@ -187,7 +187,7 @@ export const option = { type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', - span: 12, + span: 8, minWidth: 140, rules: [{ required: true, message: '请选择申请有效期至', trigger: 'change' }], }, diff --git a/src/views/business/components/business-crud-page.vue b/src/views/business/components/business-crud-page.vue index 4af2783..48f450e 100644 --- a/src/views/business/components/business-crud-page.vue +++ b/src/views/business/components/business-crud-page.vue @@ -13681,7 +13681,7 @@ export default { min-width: 56px; height: 22px; margin: 0 14px; - border-bottom: 3px solid #303133; + border-bottom: 4px solid #e4e7ed; } &__transport-plan-waybill-card { diff --git a/src/views/business/process-config.vue b/src/views/business/process-config.vue index c5825d2..5c29c76 100644 --- a/src/views/business/process-config.vue +++ b/src/views/business/process-config.vue @@ -8,10 +8,6 @@ v-model="form" ref="crud" :permission="permissionList" - :before-open="beforeOpen" - @row-save="rowSave" - @row-update="rowUpdate" - @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" @@ -25,7 +21,7 @@ type="primary" icon="el-icon-plus" v-if="hasPermission('process_config_add')" - @click="$refs.crud.rowAdd()" + @click="openProcessConfig()" >新建过程配置 - - -