feat: 页面功能完善

3.1 供货商管理页面

  - 移除了右侧面板的"供货清单"Tab
  - 报价历史板块新增搜索功能(物料名称/报价单号/状态/日期范围)
  - 后端 Mapper 改造支持动态 SQL 过滤

  3.2 报价请求与供应商报价关联

  - 新增"供应商报价汇总"弹窗,展示 RFQ 下所有供应商的报价对比
  - 报价单号改为可点击链接,跳转到供应商报价列表并按单号搜索

  3.3 智慧比价详情页

  - 修复了比价详情页路由(在 router/index.js 中补充)
  - 移除了评分维度展示(价格/交期/质量/服务评分条、综合分标签)
  - 精简为纯粹的供应商价格对比视图

  3.4 其他修复

  - 首页快捷操作路径修正(/bid/xxx → /xxx)
  - 停用 bid 目录后受影响的 router.push 路径全部修复
  - biz_tenant 表缺失修复(创建建表 SQL 并执行)
  - 比价详情页路由注册补充
  - goCompare 跳转路径修正
This commit is contained in:
2026-06-06 15:20:46 +08:00
parent 5a1d7111cc
commit c97fdf4c6f
50 changed files with 1174 additions and 301 deletions

View File

@@ -161,8 +161,8 @@
<div class="items-table-wrap">
<el-table :data="form.items" border size="small" class="items-table">
<el-table-column type="index" width="44" label="#" />
<el-table-column label="物料名称" width="200">
<el-table-column type="index" width="40" label="#" />
<el-table-column label="物料名称" width="170">
<template slot-scope="s">
<el-autocomplete
v-model="s.row.materialName"
@@ -191,47 +191,47 @@
</el-autocomplete>
</template>
</el-table-column>
<el-table-column label="规格型号" width="150">
<el-table-column label="规格型号" width="130">
<template slot-scope="s">
<el-input v-model="s.row.spec" size="mini" placeholder="规格型号" @change="s.row.modelNo = s.row.spec" />
</template>
</el-table-column>
<el-table-column label="单位" width="60">
<el-table-column label="单位" width="50">
<template slot-scope="s">
<el-input v-model="s.row.unit" size="mini" />
</template>
</el-table-column>
<el-table-column label="数量" width="80">
<el-table-column label="数量" width="70">
<template slot-scope="s">
<el-input-number v-model="s.row.quantity" :min="0" size="mini" controls-position="right" style="width:100%" @change="calcRow(s.row)" />
<el-input v-model="s.row.quantity" size="mini" placeholder="0" @input="calcRow(s.row)" />
</template>
</el-table-column>
<el-table-column label="成本价(元)" width="100">
<el-table-column label="成本价" width="80">
<template slot-scope="s">
<el-input-number v-model="s.row.costPrice" :min="0" :precision="2" size="mini" controls-position="right" style="width:100%" @change="calcRow(s.row)" />
<el-input v-model="s.row.costPrice" size="mini" placeholder="0.00" @input="calcRow(s.row)" />
</template>
</el-table-column>
<el-table-column label="报价(元)" width="100">
<el-table-column label="报价" width="80">
<template slot-scope="s">
<el-input-number v-model="s.row.unitPrice" :min="0" :precision="2" size="mini" controls-position="right" style="width:100%" @change="calcRow(s.row)" />
<el-input v-model="s.row.unitPrice" size="mini" placeholder="0.00" @input="calcRow(s.row)" />
</template>
</el-table-column>
<el-table-column label="金额(元)" width="100" align="right">
<el-table-column label="金额" width="75" align="right">
<template slot-scope="s">
<strong style="color:#409EFF">¥{{ itemTotal(s.row) }}</strong>
</template>
</el-table-column>
<el-table-column label="毛利率" width="70" align="center">
<el-table-column label="毛利率" width="60" align="center">
<template slot-scope="s">
<span :style="{ color: marginColor(s.row) }">{{ calcMargin(s.row) }}%</span>
</template>
</el-table-column>
<el-table-column label="交期(天)" width="70">
<el-table-column label="交期" width="95">
<template slot-scope="s">
<el-input-number v-model="s.row.deliveryDays" :min="0" size="mini" controls-position="right" style="width:100%" />
<el-input v-model="s.row.deliveryDays" size="mini" placeholder="0" />
</template>
</el-table-column>
<el-table-column label="操作" width="50" align="center">
<el-table-column label="操作" width="55" align="center">
<template slot-scope="s">
<el-button type="text" icon="el-icon-delete" style="color:#f56c6c" @click="form.items.splice(s.$index, 1)" />
</template>
@@ -429,27 +429,14 @@ export default {
// ===== 新建 =====
handleAdd() {
this.form = { items: [], currency: "CNY", status: "draft", clientName: "", validityDate: "", remark: "" };
this.dialogTitle = "新建甲方报价单";
this.dialogOpen = true;
// 跳转到 detail.vue 页面进行新增
this.$router.push('/bid/clientquote/detail');
},
// ===== 编辑 =====
handleUpdate(row) {
getClientQuote(row.quoteId).then(r => {
const data = r.data || {};
this.form = {
quoteId: data.quoteId,
clientName: data.clientName,
status: data.status,
validityDate: data.validityDate,
currency: data.currency,
remark: data.remark,
items: (data.items || []).map(i => ({ ...i }))
};
this.dialogTitle = "编辑报价单 - " + data.quoteNo;
this.dialogOpen = true;
});
// 跳转到 detail.vue 页面进行编辑,传递 quoteId
this.$router.push({ path: '/bid/clientquote/detail', query: { quoteId: row.quoteId } });
},
// ===== 保存 =====
@@ -495,19 +482,9 @@ export default {
this.$modal.msgSuccess("已创建新报价单草稿");
this.getList();
this.getStats();
// 打开编辑
if (res.data) {
this.form = {
quoteId: res.data.quoteId,
clientName: res.data.clientName,
status: res.data.status,
validityDate: res.data.validityDate,
currency: res.data.currency,
remark: res.data.remark,
items: (res.data.items || []).map(i => ({ ...i }))
};
this.dialogTitle = "编辑新建报价单 - " + res.data.quoteNo;
this.dialogOpen = true;
// 跳转到 detail.vue 编辑新创建的报价单
if (res.data && res.data.quoteId) {
this.$router.push({ path: '/bid/clientquote/detail', query: { quoteId: res.data.quoteId } });
}
}).catch(() => {});
},