feat(bid): 完成甲方报价模块全量功能开发

1.  新增甲方报价业务实体,继承基础实体类
2.  新增供应商报价明细查询接口,支持按供应商ID展开物料明细
3.  重构甲方报价关联逻辑,通过material_id精确关联物料表
4.  新增甲方报价历史统计、月度趋势、快速新建等服务功能
5.  完善菜单配置,修正甲方报价菜单结构,添加完整权限控制
6.  新增物料搜索自动补全功能,优化报价单详情页面
7.  在供应商详情页新增报价历史Tab页签,展示该供应商的所有报价物料明细
8.  在物料详情页新增甲方报价记录Tab页签,展示该物料的所有甲方报价历史
9.  新增数据库优化脚本,添加索引并修复历史数据关联
This commit is contained in:
2026-06-01 19:05:04 +08:00
parent 18a71526dc
commit a75589018f
23 changed files with 1758 additions and 144 deletions

View File

@@ -1,7 +1,19 @@
import request from '@/utils/request'
const baseUrl = '/bid/clientquote'
// ========== CRUD ==========
export const listClientQuote = (params) => request({ url: baseUrl + '/list', method: 'get', params })
export const getClientQuote = (id) => request({ url: baseUrl + '/' + id, method: 'get' })
export const addClientQuote = (data) => request({ url: baseUrl, method: 'post', data })
export const updateClientQuote = (data) => request({ url: baseUrl, method: 'put', data })
export const delClientQuote = (id) => request({ url: baseUrl + '/' + id, method: 'delete' })
// ========== 甲方报价历史 ==========
// 统计数据
export const getClientQuoteStatistics = (params) => request({ url: baseUrl + '/statistics', method: 'get', params })
// 月度趋势
export const getMonthlyTrend = () => request({ url: baseUrl + '/monthly-trend', method: 'get' })
// 按物料ID查询报价历史
export const getClientQuoteByMaterial = (materialId) => request({ url: baseUrl + '/by-material/' + materialId, method: 'get' })
// 基于历史报价快速新建
export const quickCreateFromQuote = (quoteId) => request({ url: baseUrl + '/quick-create/' + quoteId, method: 'post' })

View File

@@ -8,3 +8,6 @@ export const submitQuotation = (id) => request({ url: baseUrl + '/submit/' + id,
export const acceptQuotation = (id) => request({ url: baseUrl + '/accept/' + id, method: 'put' })
export const rejectQuotation = (id) => request({ url: baseUrl + '/reject/' + id, method: 'put' })
export const delQuotation = (ids) => request({ url: baseUrl + '/' + ids, method: 'delete' })
// 按供应商ID查询报价明细展开为每行一条物料
export const getSupplierQuoteItems = (supplierId) => request({ url: baseUrl + '/supplier-items/' + supplierId, method: 'get' })