feat(bid): 完成招投标业务模块多需求迭代

本次提交包含多项功能改进与业务优化:
1.  全局主题色替换为#4A6FA5,统一前端UI风格
2.  新增客户报价单clientId字段,完善客户报价数据结构
3.  实现发货单状态流转功能,支持发货、完成、撤回、设置结单日期操作
4.  新增物料发货记录多表关联查询功能
5.  优化客户管理页面UI布局与交互体验
6.  修复客户报价表单自动补全逻辑,关联clientId与clientName
7.  补充租户ID自动填充逻辑,完善多租户数据隔离
This commit is contained in:
2026-06-10 20:47:14 +08:00
parent bbddcb494d
commit 93785be505
16 changed files with 671 additions and 727 deletions

View File

@@ -1,33 +1,41 @@
<template>
<div class="app-container quotation-page">
<!-- 顶部统计卡片 -->
<el-row :gutter="14" class="stat-row">
<!-- 顶部统计卡片 -->
<el-row :gutter="12" class="stat-row">
<el-col :span="6">
<div class="stat-card stat-all">
<div class="stat-num">{{ stats.total }}</div>
<div class="stat-lbl">全部报价</div>
<i class="el-icon-document stat-icon"></i>
<div class="stat-card" style="border-top-color:#1171c4">
<div class="stat-body">
<div class="stat-num">{{ stats.total || 0 }}</div>
<div class="stat-lbl">全部报价</div>
</div>
<i class="el-icon-document stat-icon" style="color:#1171c4"></i>
</div>
</el-col>
<el-col :span="6">
<div class="stat-card stat-draft">
<div class="stat-num">{{ stats.draft }}</div>
<div class="stat-lbl">草稿</div>
<i class="el-icon-edit-outline stat-icon"></i>
<div class="stat-card" style="border-top-color:#909399">
<div class="stat-body">
<div class="stat-num">{{ stats.draft || 0 }}</div>
<div class="stat-lbl">草稿</div>
</div>
<i class="el-icon-edit-outline stat-icon" style="color:#909399"></i>
</div>
</el-col>
<el-col :span="6">
<div class="stat-card stat-submitted">
<div class="stat-num">{{ stats.submitted }}</div>
<div class="stat-lbl">待处理</div>
<i class="el-icon-time stat-icon"></i>
<div class="stat-card" style="border-top-color:#e6a23c">
<div class="stat-body">
<div class="stat-num">{{ stats.submitted || 0 }}</div>
<div class="stat-lbl">待处理</div>
</div>
<i class="el-icon-time stat-icon" style="color:#e6a23c"></i>
</div>
</el-col>
<el-col :span="6">
<div class="stat-card stat-accepted">
<div class="stat-num">{{ stats.accepted }}</div>
<div class="stat-lbl">已采纳</div>
<i class="el-icon-circle-check stat-icon"></i>
<div class="stat-card" style="border-top-color:#67c23a">
<div class="stat-body">
<div class="stat-num">{{ stats.accepted || 0 }}</div>
<div class="stat-lbl">已采纳</div>
</div>
<i class="el-icon-circle-check stat-icon" style="color:#67c23a"></i>
</div>
</el-col>
</el-row>
@@ -550,18 +558,15 @@ export default {
.quotation-page { padding-bottom: 30px; }
/* ── 顶部统计卡片 ── */
.stat-row { margin-bottom: 16px; }
.stat-row { margin-bottom: 12px !important; }
.stat-card {
border-radius: 10px; padding: 18px 20px; position: relative;
overflow: hidden; color: #fff; cursor: default;
background: #fff; border-radius: 4px; border-top: 3px solid #1171c4;
padding: 16px 20px; display: flex; align-items: center; justify-content: space-between;
box-shadow: 0 1px 4px rgba(0,0,0,0.06);
}
.stat-num { font-size: 32px; font-weight: 700; line-height: 1; }
.stat-lbl { font-size: 13px; margin-top: 6px; opacity: 0.9; }
.stat-icon { position: absolute; right: 16px; top: 50%; transform: translateY(-50%); font-size: 48px; opacity: 0.2; }
.stat-all { background: linear-gradient(135deg, #1171c4, #22a4ff); }
.stat-draft { background: linear-gradient(135deg, #909399, #b0b3b8); }
.stat-submitted{ background: linear-gradient(135deg, #e6a23c, #f0c040); }
.stat-accepted { background: linear-gradient(135deg, #67c23a, #85ce61); }
.stat-num { font-size: 26px; font-weight: 700; color: #1a2c4e; line-height: 1.2; }
.stat-lbl { font-size: 12px; color: #8c97a8; margin-top: 4px; }
.stat-icon { font-size: 28px; opacity: 0.5; }
/* ── 搜索 ── */
.search-card { ::v-deep .el-card__body { padding: 16px 20px 8px; } }