diff --git a/.workbuddy/memory/2026-08-21.md b/.workbuddy/memory/2026-08-21.md index 8f38ec0..f432434 100644 --- a/.workbuddy/memory/2026-08-21.md +++ b/.workbuddy/memory/2026-08-21.md @@ -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 新增/编辑弹窗内三张 ``(基本信息 / 现行过程节点 / 节点设置)要像 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` + 多个 `` 堆叠、卡间 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`);新增手写 ``,内部 `
` 堆三张 ``:基本信息 / 现行过程节点(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 -- ` 恢复的是 index 版本;本文件 index=HEAD=auto,工作区曾为 150(历史未提交改动),已被本次需求覆盖。 diff --git a/src/option/business/process-config.js b/src/option/business/process-config.js index 864f6ed..413f5eb 100644 --- a/src/option/business/process-config.js +++ b/src/option/business/process-config.js @@ -21,13 +21,6 @@ export const config = { export const option = { ...createCrudOption([ - { - label: '', - prop: 'basicInfo', - formslot: true, - span: 24, - hide: true, - }, { label: '配置名称', prop: 'configName', @@ -167,22 +160,10 @@ export const option = { dicData: [], filterable: true, }, - { - label: '', - prop: 'nodeConfigJson', - formslot: true, - span: 24, - hide: true, - }, ]), - saveBtn: false, - updateBtn: false, addBtn: false, viewBtn: false, editBtn: false, delBtn: false, - dialogTop: '4vh', - dialogWidth: '96%', - dialogCustomClass: 'process-config-dialog', menuWidth: 220, }; diff --git a/src/option/business/temporary-credit-limit.js b/src/option/business/temporary-credit-limit.js index 06d1f15..a517123 100644 --- a/src/option/business/temporary-credit-limit.js +++ b/src/option/business/temporary-credit-limit.js @@ -47,6 +47,7 @@ export const config = { ignoreReadonlyDeleteStatus: ['draft', '草稿'], detailButton: true, detailButtonIgnoreDraftStatus: true, + detailAlignCenter: true, detailSections: [ { title: '申请信息', @@ -142,7 +143,7 @@ export const option = { value: 'projectName', }, filterable: true, - span: 8, + span: 6, minWidth: 180, rules: textRule('项目名称', 100, true), }, @@ -157,7 +158,7 @@ export const option = { prop: 'projectCode', hide: true, disabled: true, - span: 8, + span: 6, minWidth: 150, rules: textRule('项目编号', 50), }, @@ -166,7 +167,7 @@ export const option = { prop: 'undertakeDeptName', hide: true, disabled: true, - span: 8, + span: 6, minWidth: 150, rules: textRule('承办部门', 50, true), }, @@ -175,7 +176,7 @@ export const option = { prop: 'projectFundLimit', hide: true, disabled: true, - span: 8, + span: 6, minWidth: 200, rules: [nonNegativeRule('项目资金使用额度')], }, @@ -184,7 +185,7 @@ export const option = { prop: 'usedFundLimit', hide: true, disabled: true, - span: 8, + span: 6, minWidth: 220, value: 0, rules: [nonNegativeRule('已使用项目资金额度')], @@ -194,7 +195,7 @@ export const option = { prop: 'remainingFundLimit', hide: true, disabled: true, - span: 8, + span: 6, minWidth: 230, value: 0, rules: [nonNegativeRule('剩余项目资金使用额度')], @@ -203,7 +204,7 @@ export const option = { label: '申请临时额度(万元)', prop: 'applyLimit', formslot: true, - span: 8, + span: 6, minWidth: 180, rules: [ { required: true, message: '请输入申请临时额度', trigger: 'blur' }, @@ -216,7 +217,7 @@ export const option = { type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', - span: 8, + span: 6, minWidth: 140, rules: [{ required: true, message: '请选择申请有效期至', trigger: 'change' }], }, @@ -303,7 +304,7 @@ export const option = { }, ...auditColumns.map(column => ({ ...column, hide: true })), ]), - dialogWidth: 1400, + dialogWidth: '96%', menuFixed: 'right', menuWidth: 320, index: false, diff --git a/src/option/settlement/settlementAdjustmentForm.js b/src/option/settlement/settlementAdjustmentForm.js index 8c30cf0..3755185 100644 --- a/src/option/settlement/settlementAdjustmentForm.js +++ b/src/option/settlement/settlementAdjustmentForm.js @@ -1,6 +1,6 @@ export const settlementAdjustmentFormFields = [ { label: '单据号', prop: 'adjustmentNo' }, - { label: '* 关联结算单号', prop: 'formalSettlementId' }, + { label: '关联结算单号', prop: 'formalSettlementId' }, { label: '客户/客商名称', prop: 'customerName' }, { label: '结算单类型', prop: 'settlementTypeName' }, { label: '关联合同名称', prop: 'contractName' }, diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index debe6ad..3dc1a70 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -607,26 +607,11 @@ background: #fff; } -// 过程配置新增/编辑弹窗:avue-form 整体白卡透明化, -// 让 分组白卡(基本信息 / 现行过程节点 / 节点设置)独立成卡、卡间露出灰底, -// 与 business/project-apply 表单页的分组卡片风格统一 -.process-config-dialog .avue-form { - background: transparent; - box-shadow: none; - padding: 0; -} - -// formslot 外层 el-form-item 默认 margin-bottom 与 section-card 自身 margin 叠加会拉大卡距, -// 归零后卡间距统一为 section-card 自身的 12px(与 project-apply 一致) -.process-config-dialog .avue-form__group > .el-col > .el-form-item { - margin-bottom: 0; -} - -// 抵消全局 .avue-crud__dialog .avue-dialog__footer 的 -30px 上移 -// (avue-form 已透明化,footer 若上移会压住最后一张分组卡片) -.process-config-dialog .avue-dialog__footer, -.avue-crud__dialog .process-config-dialog .avue-dialog__footer { - margin-top: 0 !important; +// 过程配置新增/编辑/查看弹窗(手写 el-dialog,参照 vehicle/credit-score-quantification): +// 灰底弹窗体(全站 .el-dialog__body 已统一)内堆叠 分组白卡, +// 卡间 12px 间距由 section-card 自身 margin-bottom 保证,与项目其他弹窗风格统一 +.process-config-dialog .el-dialog__body { + max-height: calc(100vh - 170px); } // 统一表格线条颜色 diff --git a/src/views/business/common-route.vue b/src/views/business/common-route.vue index 28680a8..836a889 100644 --- a/src/views/business/common-route.vue +++ b/src/views/business/common-route.vue @@ -1012,7 +1012,7 @@ export default { } .el-input:first-child { - flex: 0 0 34%; + flex: 0 0 42.5%; } .el-button { diff --git a/src/views/business/components/business-crud-page.vue b/src/views/business/components/business-crud-page.vue index 4f8e78c..a4ea72c 100644 --- a/src/views/business/components/business-crud-page.vue +++ b/src/views/business/components/business-crud-page.vue @@ -694,7 +694,7 @@
@@ -2506,6 +2506,7 @@ :title="isTransportPlanDetailLayout ? '' : `${config.title}详情`" append-to-body top="10px" + :align-center="detailAlignCenter" :width="isTransportPlanDetailLayout ? 'calc(100% - 16px)' : '96%'" show-close :class="[ @@ -6239,6 +6240,9 @@ export default { detailSections() { return this.config.detailSections || []; }, + detailAlignCenter() { + return this.config.detailAlignCenter === true; + }, contractDetailSettlementRows() { if (!this.isContractConfig) return []; return [ @@ -6976,6 +6980,14 @@ export default { }); if (current.length) groups.push(current); if (groups.length <= 1) return option; + // 合同「基本信息」分区改为 4 列显示(分区标题列与已设整行的字段保持原样) + if (this.isContractConfig && groups[0].length) { + groups[0].forEach(col => { + if (sectionTitleProps.includes(col.prop)) return; + if (col.span === 24) return; + col.span = 6; + }); + } return { ...option, column: groups[0], diff --git a/src/views/business/contract-manage-change.vue b/src/views/business/contract-manage-change.vue index a5091e1..6501e32 100644 --- a/src/views/business/contract-manage-change.vue +++ b/src/views/business/contract-manage-change.vue @@ -5,20 +5,20 @@
基本信息
- - - - - - - - - - - - -
- + + + + + + + + + + + + +
+
diff --git a/src/views/business/contract-manage.vue b/src/views/business/contract-manage.vue index d696958..1f45e8c 100644 --- a/src/views/business/contract-manage.vue +++ b/src/views/business/contract-manage.vue @@ -31,4 +31,7 @@ export default { white-space: normal; line-height: 1.4; } +.el-col { + margin-bottom: 0 !important; +} diff --git a/src/views/business/process-config.vue b/src/views/business/process-config.vue index 06f6a1a..39167bf 100644 --- a/src/views/business/process-config.vue +++ b/src/views/business/process-config.vue @@ -8,9 +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" @@ -25,7 +22,7 @@ type="primary" icon="el-icon-plus" v-if="hasPermission('process_config_add')" - @click="$refs.crud.rowAdd()" + @click="openConfig()" >新建过程配置 - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ 默认 + + 天后完成运输 +
+
+
+ + + + + +
+
+
+ + +
+
+
+ +
{{ node.name }}
+
+
{{ text }}
+
+
+
+ +
+ + + + + + + + + + + + + + +
+ +
+ item.key === 'sign'); const returnNode = this.nodeRows.find(item => item.key === 'return'); @@ -914,14 +909,45 @@ export default { } ); }, - submitRow(row, done, loading, status = this.submitStatus) { - this.submitStatus = 1; - this.syncNodeFields(); - const submitRow = this.normalizeRow({ ...row, status }); - if (!this.validateRow(submitRow)) { - this.stopSubmitLoading(loading); + openConfig(row, readonly = false) { + this.dialogReadonly = readonly; + if (!row || !row.id) { + this.form = { + configName: '', + projectIds: '', + projectNames: '', + defaultFinishDays: '', + remark: '', + status: 0, + }; + this.selectedProjectId = ''; + this.resetNodeRows(); + this.configBox = true; return; } + api.getDetail(row.id).then(res => { + this.form = res.data.data || {}; + this.selectedProjectId = this.form.projectIds ? String(this.form.projectIds) : ''; + this.ensureSelectedProjectOption(); + this.parseNodeConfig(this.form); + this.configBox = true; + }); + }, + handleDialogClosed() { + this.submitting = false; + this.dialogReadonly = false; + }, + submitConfig(mode) { + if (this.submitting) return; + this.syncNodeFields(); + const submitRow = this.normalizeRow({ + ...this.form, + status: mode === 'draft' ? 2 : 1, + }); + if (!this.validateRow(submitRow)) { + return; + } + this.submitting = true; this.checkEnabledProjectBeforeSubmit(submitRow) .then(exists => { if (exists) { @@ -932,9 +958,9 @@ export default { .then(() => this.confirmDuplicateVoucher()) .then(() => api.submit(submitRow)) .then(() => { + this.configBox = false; this.onLoad(this.page); this.$message({ type: 'success', message: '操作成功!' }); - done(); }) .catch(error => { if ( @@ -944,21 +970,11 @@ export default { ) { window.console.log(error); } - this.stopSubmitLoading(loading); + }) + .finally(() => { + this.submitting = false; }); }, - rowSave(row, done, loading) { - this.submitRow(row, done, loading); - }, - rowUpdate(row, index, done, loading) { - this.submitRow(row, done, loading); - }, - handleProcessConfigSave(mode) { - this.submitStatus = mode === 'draft' ? 2 : 1; - if (this.$refs.crud && typeof this.$refs.crud.rowSave === 'function') { - this.$refs.crud.rowSave(); - } - }, rowDel(row) { this.$confirm('确定将选择数据删除?', { confirmButtonText: '确定', @@ -1001,35 +1017,6 @@ export default { } this.selectionClear(); }, - beforeOpen(done, type) { - this.dialogReadonly = type === 'view'; - this.submitStatus = 1; - if (type === 'add') { - this.form = { - configName: '', - projectIds: '', - projectNames: '', - defaultFinishDays: '', - remark: '', - status: 0, - }; - this.selectedProjectId = ''; - this.resetNodeRows(); - done(); - return; - } - if (['edit', 'view'].includes(type)) { - api.getDetail(this.form.id).then(res => { - this.form = res.data.data || {}; - this.selectedProjectId = this.form.projectIds ? String(this.form.projectIds) : ''; - this.ensureSelectedProjectOption(); - this.parseNodeConfig(this.form); - done(); - }); - return; - } - done(); - }, searchReset() { this.query = {}; this.applyDefaultDeptSearch(); @@ -1164,6 +1151,13 @@ export default { word-break: break-all; } + :deep(.avue-crud__header) { + margin-top: 12px; + background: transparent; + } +} + +.process-config-form { &__finish-days { display: flex; align-items: center; @@ -1174,10 +1168,6 @@ export default { } } - &__custom-form { - width: 100%; - } - &__timeline { position: relative; display: flex; @@ -1285,11 +1275,6 @@ export default { text-align: right; } - :deep(.avue-crud__header) { - margin-top: 12px; - background: transparent; - } - :deep(.el-table) { --el-table-border-color: #eff1f7; } diff --git a/src/views/business/project-apply.vue b/src/views/business/project-apply.vue index 001484f..246e5bb 100644 --- a/src/views/business/project-apply.vue +++ b/src/views/business/project-apply.vue @@ -106,7 +106,7 @@ :model="form" :rules="formRules" label-position="right" - label-width="auto" + label-width="150" class="project-apply-form" :disabled="dialogReadonly" > @@ -1964,7 +1964,7 @@ export default { &__grid { display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: 24px; row-gap: 0; margin-bottom: 12px; @@ -1972,6 +1972,13 @@ export default { border-radius: 0 0 6px 6px; padding: 14px 16px 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + + // label 固定宽度:可容纳 6 个汉字,超出自动换行(覆盖全局 min-width:160px 与 auto 行内宽度) + :deep(.el-form-item__label) { + width: 108px !important; + min-width: 0 !important; + white-space: normal; + } } &__picker-icon { diff --git a/src/views/business/voucher-manage.vue b/src/views/business/voucher-manage.vue index 353c10c..aa11d2e 100644 --- a/src/views/business/voucher-manage.vue +++ b/src/views/business/voucher-manage.vue @@ -364,7 +364,7 @@ :before-close="beforeProgressDialogClose" @opened="loadProgress" > - + - + - - + - + - + - +
- + - + - + - + - + - + - +