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

@@ -35,6 +35,9 @@
<!-- 搜索栏 -->
<el-card shadow="never" class="search-card">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="报价单号">
<el-input v-model="queryParams.quoteNo" placeholder="报价单号" clearable style="width:150px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="RFQ单号">
<el-input v-model="queryParams.rfqNo" placeholder="询价单号" clearable style="width:150px" @keyup.enter.native="handleQuery" />
</el-form-item>
@@ -110,9 +113,9 @@
<el-button size="mini" type="text" style="color:#67C23A" icon="el-icon-upload2"
@click="handleSubmit(s.row)" v-if="s.row.status==='draft'">提交</el-button>
<el-button size="mini" type="text" style="color:#67C23A" icon="el-icon-check"
@click="handleAccept(s.row)" v-if="s.row.status==='submitted'">采纳</el-button>
@click="handleAccept(s.row)" v-if="s.row.status==='submitted' && !isSupplier">采纳</el-button>
<el-button size="mini" type="text" style="color:#F56C6C" icon="el-icon-close"
@click="handleReject(s.row)" v-if="s.row.status==='submitted'">拒绝</el-button>
@click="handleReject(s.row)" v-if="s.row.status==='submitted' && !isSupplier">拒绝</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" style="color:#f56c6c"
@click="handleDelete(s.row)" v-if="s.row.status==='draft'">删除</el-button>
</template>
@@ -375,7 +378,7 @@ export default {
rfqItemsLoading: false,
rfqOptions: [], supplierOptions: [],
logoSrc: logoImg,
queryParams: { pageNum: 1, pageSize: 10, status: null, rfqNo: null, supplierName: null },
queryParams: { pageNum: 1, pageSize: 10, status: null, rfqNo: null, quoteNo: null, supplierName: null },
form: { items: [], currency: "CNY", validDays: 30, deliveryDays: null },
rules: {
rfqId: [{ required: true, message: "请选择询价单", trigger: "change" }],
@@ -384,14 +387,26 @@ export default {
};
},
computed: {
/** 是否为供应商用户 */
isSupplier() {
return this.$store.getters.roles && this.$store.getters.roles.includes('supplier');
},
formTotal() {
return (this.form.items || []).reduce((s, i) => s + (parseFloat(i.quantity || 0) * parseFloat(i.unitPrice || 0)), 0).toFixed(2);
}
},
created() {
// 读取 URL 查询参数,实现跨页面跳转自动搜索
const query = this.$route.query;
if (query.rfqNo) this.queryParams.rfqNo = query.rfqNo;
if (query.supplierName) this.queryParams.supplierName = query.supplierName;
if (query.quoteNo) this.queryParams.quoteNo = query.quoteNo;
this.getList();
// 供应商只需加载自己可见的RFQ无需加载全部供应商列表
listRfq({ pageSize: 200 }).then(r => { this.rfqOptions = r.rows || []; });
listSupplier({ pageSize: 200 }).then(r => { this.supplierOptions = r.rows || []; });
if (!this.isSupplier) {
listSupplier({ pageSize: 200 }).then(r => { this.supplierOptions = r.rows || []; });
}
},
methods: {
getList() {
@@ -408,7 +423,11 @@ export default {
}).catch(() => { this.loading = false; });
},
handleQuery() { this.queryParams.pageNum = 1; this.getList(); },
resetQuery() { this.resetForm("queryForm"); this.handleQuery(); },
resetQuery() {
this.resetForm("queryForm");
this.queryParams.quoteNo = null;
this.handleQuery();
},
handleAdd() {
this.form = { items: [], currency: "CNY", validDays: 30, deliveryDays: null, status: "draft" };
this.dialogTitle = "新建报价单";