feat(approval): 新增业务审批流程及配置管理
- 新增审批配置主子表(biz_approval_config / biz_approval_config_user),支持或签 - 5 个业务模块接入审批: 采购订单/客户报价/供应商报价/发货单/订单异议 - 统一审批动作接口(提交/通过/驳回),status=10 表示审批中 - 新增"待我审批"聚合页面,按业务类型筛选 - 修复 logback 写本地路径报错,去除文件 appender - 修复 Redis SSL 配置在 Spring Boot 4 下需对象格式 - 补齐部分业务表缺失的 update_by/update_time 审计列 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -103,7 +103,7 @@ export default {
|
||||
},
|
||||
supplierQuickActions() {
|
||||
return [
|
||||
{ label: "报价请求", icon: "el-icon-document", color: "#1171c4", path: "/rfq" },
|
||||
{ label: "报价请求", icon: "el-icon-document", color: "#e4393c", path: "/rfq" },
|
||||
{ label: "我的报价", icon: "el-icon-money", color: "#67c23a", path: "/quotation" }
|
||||
];
|
||||
}
|
||||
@@ -115,18 +115,18 @@ export default {
|
||||
recentPos: [],
|
||||
suppliers: [],
|
||||
statCards: [
|
||||
{ key: "suppliers", label: "供应商", icon: "el-icon-s-custom", color: "#1171c4" },
|
||||
{ key: "materials", label: "物料数", icon: "el-icon-goods", color: "#67c23a" },
|
||||
{ key: "rfqs", label: "询价单", icon: "el-icon-document", color: "#e6a23c" },
|
||||
{ key: "pos", label: "采购单", icon: "el-icon-shopping-cart-full", color: "#f56c6c" }
|
||||
{ key: "suppliers", label: "供应商", icon: "el-icon-s-custom", color: "#e4393c" },
|
||||
{ key: "materials", label: "物料数", icon: "el-icon-goods", color: "#e4393c" },
|
||||
{ key: "rfqs", label: "询价单", icon: "el-icon-document", color: "#e4393c" },
|
||||
{ key: "pos", label: "采购单", icon: "el-icon-shopping-cart-full", color: "#e4393c" }
|
||||
],
|
||||
quickActions: [
|
||||
{ label: "新建询价单", icon: "el-icon-edit", color: "#1171c4", path: "/rfq" },
|
||||
{ label: "物料管理", icon: "el-icon-goods", color: "#67c23a", path: "/material" },
|
||||
{ label: "智慧比价", icon: "el-icon-data-analysis", color: "#e6a23c", path: "/comparison" },
|
||||
{ label: "采购单", icon: "el-icon-shopping-cart-full", color: "#f56c6c", path: "/purchaseorder" },
|
||||
{ label: "供应商", icon: "el-icon-s-cooperation", color: "#9b59b6", path: "/supplier" },
|
||||
{ label: "供应商评价", icon: "el-icon-star-off", color: "#e67e22", path: "/evaluation" }
|
||||
{ label: "新建询价单", icon: "el-icon-edit", color: "#e4393c", path: "/rfq" },
|
||||
{ label: "物料管理", icon: "el-icon-goods", color: "#e4393c", path: "/material" },
|
||||
{ label: "智慧比价", icon: "el-icon-data-analysis", color: "#e4393c", path: "/comparison" },
|
||||
{ label: "采购单", icon: "el-icon-shopping-cart-full", color: "#e4393c", path: "/purchaseorder" },
|
||||
{ label: "供应商", icon: "el-icon-s-cooperation", color: "#e4393c", path: "/supplier" },
|
||||
{ label: "供应商评价", icon: "el-icon-star-off", color: "#e4393c", path: "/evaluation" }
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -159,10 +159,10 @@ export default {
|
||||
this.stats.pos = r.total || 0
|
||||
}).catch(() => {})
|
||||
},
|
||||
rfqStatusType(s) { return s === "open" ? "primary" : s === "closed" ? "info" : s === "awarded" ? "success" : "warning" },
|
||||
rfqStatusText(s) { return s === "open" ? "询价中" : s === "closed" ? "已关闭" : s === "awarded" ? "已定标" : (s || "-") },
|
||||
poStatusType(s) { return s === "approved" ? "success" : s === "pending" ? "warning" : s === "rejected" ? "danger" : "info" },
|
||||
poStatusText(s) { return s === "approved" ? "已审批" : s === "pending" ? "待审批" : s === "rejected" ? "已拒绝" : (s || "-") },
|
||||
rfqStatusType(s) { return ({ draft:"info", published:"warning", "10":"warning", closed:"", completed:"success", awarded:"success", open:"primary", rejected:"danger" })[s] || "info" },
|
||||
rfqStatusText(s) { return ({ draft:"草稿", published:"已发布", "10":"审批中", closed:"已关闭", completed:"已完成", awarded:"已定标", open:"询价中", rejected:"已驳回" })[s] || (s || "-") },
|
||||
poStatusType(s) { return ({ draft:"info", "10":"warning", rejected:"danger", confirmed:"success", delivered:"", closed:"info", disputed:"danger" })[s] || "info" },
|
||||
poStatusText(s) { return ({ draft:"草稿", "10":"审批中", rejected:"已驳回", confirmed:"已确认", delivered:"已交付", closed:"已关闭", disputed:"异议中" })[s] || (s || "-") },
|
||||
gradeType(g) { return g === "A" ? "success" : g === "B" ? "primary" : g === "C" ? "warning" : "info" }
|
||||
}
|
||||
}
|
||||
@@ -184,10 +184,10 @@ export default {
|
||||
}
|
||||
.panel-header {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
font-size: 14px; font-weight: 600; color: #1a2c4e;
|
||||
i { margin-right: 6px; color: #1171c4; }
|
||||
font-size: 14px; font-weight: 600; color: #333;
|
||||
i { margin-right: 6px; color: #e4393c; }
|
||||
}
|
||||
.panel-more { font-size: 12px; color: #1171c4; text-decoration: none; }
|
||||
.panel-more { font-size: 12px; color: #e4393c; text-decoration: none; }
|
||||
.panel-more:hover { text-decoration: underline; }
|
||||
.quick-actions { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; padding: 4px 0; }
|
||||
.quick-btn { display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; padding: 16px 8px; border-radius: 8px; transition: background 0.2s; }
|
||||
|
||||
Reference in New Issue
Block a user