feat(erp): 采购计划/采购审核/到货跟踪 + 供应商管理

- 采购计划:选合同自动带出明细、合同/供应商表格选择器、批量填充(可生成N行)、卷号/数量列、送审/重新送审流程
- 采购审核:通过/驳回 + 申请意见,每次审核留痕(erp_purchase_plan_audit_log),计划详情展示审核历史/驳回理由
- 到货跟踪:上传到货Excel按牌号+规格回填明细到货量与状态,列校验/kg→t纠正,满额自动归档
- 供应商管理页(复用既有 erp_supplier 后端)
- 综合搜索(计划号/供货商/合同号)、左右分栏工作台、全局表单按钮对齐修复
- 清理无用旧 erp 页面(看板/需求/订单/收货/退货/汇总)
- DDL 与菜单脚本:docs/purchase-plan-ddl.sql(按 path 解析父目录、可重复执行)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-25 16:53:21 +08:00
parent 47931b75ae
commit ce3998db74
38 changed files with 3559 additions and 2842 deletions

View File

@@ -209,6 +209,17 @@ body {
}
}
// 基础按钮:统一高度 + 垂直居中,确保与输入框/其它按钮在同一行对齐
// (此前只有主色等 variant 走 mixin 设了高度,普通/朴素/append 按钮没设导致错位)
.el-button {
height: $--btn-height;
padding-top: 0;
padding-bottom: 0;
display: inline-flex;
align-items: center;
justify-content: center;
}
// 主按钮(品牌梯度)
.el-button--primary {
@include button-variant($--color-text-primary, darken($--color-primary, 10%));
@@ -615,11 +626,16 @@ body {
margin-right: 4px;
font-size: 12px;
// 标签样式
// 标签样式:行高与控件(24px)一致,保证标签与输入框/选择器在同一水平线
.el-form-item__label {
color: $--color-text-secondary;
padding-right: $--spacing-base;
font-size: 12px;
line-height: $--btn-height;
}
.el-form-item__content {
line-height: $--btn-height;
}
// 搜索表单 inline 布局
@@ -641,6 +657,7 @@ body {
// 输入框(统一高度 + 金属内阴影)
.el-input {
height: $--btn-height;
vertical-align: middle; // 与同行 el-button 对齐(按钮为 middle避免基线错位
.el-input__inner {
background: $--metal-gradient-light;
@@ -782,9 +799,36 @@ body {
height: 24px !important;
}
// 多选:有标签时让输入框高度自适应,避免被固定 24px 裁切(标签/关闭×显示错位)
.el-select__tags + .el-input .el-input__inner {
height: auto !important;
min-height: 24px !important;
}
.el-select__tags {
max-width: calc(100% - 30px);
flex-wrap: wrap;
.el-tag {
max-width: 100px;
max-width: 100%;
display: inline-flex;
align-items: center;
box-sizing: border-box;
padding: 0 4px 0 6px;
// 标签文字超长省略,不再把关闭按钮挤出
.el-select__tags-text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 160px;
}
.el-tag__close {
flex-shrink: 0;
margin-left: 3px;
transform: scale(0.9);
}
}
}