feat(bid): 完成甲方报价模块全量功能开发
1. 新增甲方报价业务实体,继承基础实体类 2. 新增供应商报价明细查询接口,支持按供应商ID展开物料明细 3. 重构甲方报价关联逻辑,通过material_id精确关联物料表 4. 新增甲方报价历史统计、月度趋势、快速新建等服务功能 5. 完善菜单配置,修正甲方报价菜单结构,添加完整权限控制 6. 新增物料搜索自动补全功能,优化报价单详情页面 7. 在供应商详情页新增报价历史Tab页签,展示该供应商的所有报价物料明细 8. 在物料详情页新增甲方报价记录Tab页签,展示该物料的所有甲方报价历史 9. 新增数据库优化脚本,添加索引并修复历史数据关联
This commit is contained in:
58
sql/20260601/001_client_quote_optimize.sql
Normal file
58
sql/20260601/001_client_quote_optimize.sql
Normal file
@@ -0,0 +1,58 @@
|
||||
-- ============================================================================
|
||||
-- 甲方报价系统优化 - 数据库迁移脚本
|
||||
-- 日期: 2026-06-01
|
||||
-- 说明:
|
||||
-- 1. biz_client_quote_item 表添加 material_id 字段,建立与物料表的正式关联
|
||||
-- 2. 添加必要的索引优化查询性能
|
||||
-- 3. 添加统计数据辅助字段
|
||||
-- 4. 修复历史数据中的 material_id 关联
|
||||
-- ============================================================================
|
||||
|
||||
-- ============================================================================
|
||||
-- PART 1: 甲方报价明细表 - 添加 material_id 字段
|
||||
-- ============================================================================
|
||||
ALTER TABLE biz_client_quote_item
|
||||
ADD COLUMN material_id BIGINT DEFAULT NULL COMMENT '关联物料ID(biz_material.material_id)' AFTER quote_id;
|
||||
|
||||
-- 创建索引以加速按物料查询
|
||||
CREATE INDEX idx_cqi_quote_id ON biz_client_quote_item (quote_id);
|
||||
CREATE INDEX idx_cqi_material_id ON biz_client_quote_item (material_id);
|
||||
|
||||
-- ============================================================================
|
||||
-- PART 2: 甲方报价主表 - 添加统计优化索引
|
||||
-- ============================================================================
|
||||
CREATE INDEX idx_cq_create_time ON biz_client_quote (create_time);
|
||||
CREATE INDEX idx_cq_client_name ON biz_client_quote (client_name);
|
||||
CREATE INDEX idx_cq_status ON biz_client_quote (status);
|
||||
|
||||
-- ============================================================================
|
||||
-- PART 3: 修复历史数据 - 通过物料名称匹配回填 material_id
|
||||
-- ============================================================================
|
||||
-- 注意: 此操作为一次性数据修复,基于 material_name 精确匹配。
|
||||
-- 如果存在同名的多个物料,只会关联第一个匹配到的物料ID。
|
||||
-- 请在执行前确认数据准确性。
|
||||
UPDATE biz_client_quote_item cqi
|
||||
JOIN biz_material m ON cqi.material_name = m.material_name
|
||||
SET cqi.material_id = m.material_id
|
||||
WHERE cqi.material_id IS NULL
|
||||
AND cqi.material_name IS NOT NULL
|
||||
AND cqi.material_name != '';
|
||||
|
||||
-- ============================================================================
|
||||
-- PART 4: 验证数据修复结果
|
||||
-- ============================================================================
|
||||
-- 检查仍有未关联的记录数(如果 > 0,说明有些物料名称在 biz_material 表中不存在)
|
||||
-- SELECT COUNT(*) AS unlinked_count
|
||||
-- FROM biz_client_quote_item
|
||||
-- WHERE material_id IS NULL AND material_name IS NOT NULL AND material_name != '';
|
||||
|
||||
-- 查看关联情况统计
|
||||
-- SELECT
|
||||
-- CASE WHEN cqi.material_id IS NOT NULL THEN '已关联' ELSE '未关联' END AS status,
|
||||
-- COUNT(*) AS count
|
||||
-- FROM biz_client_quote_item cqi
|
||||
-- GROUP BY CASE WHEN cqi.material_id IS NOT NULL THEN '已关联' ELSE '未关联' END;
|
||||
|
||||
-- ============================================================================
|
||||
-- 完成
|
||||
-- ============================================================================
|
||||
3
sql/20260601/002_check_menus.sql
Normal file
3
sql/20260601/002_check_menus.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
SELECT menu_id, menu_name, parent_id, `path`, component, perms
|
||||
FROM sys_menu
|
||||
ORDER BY menu_id;
|
||||
50
sql/20260601/003_add_clientquote_menu.sql
Normal file
50
sql/20260601/003_add_clientquote_menu.sql
Normal file
@@ -0,0 +1,50 @@
|
||||
-- ============================================================================
|
||||
-- 添加"甲方报价"菜单到智慧报价模块
|
||||
-- 说明:
|
||||
-- 1. 在智慧报价模块下添加"甲方报价"菜单(目录)
|
||||
-- 2. 添加"甲方报价历史"菜单(菜单)
|
||||
-- 3. 添加"甲方报价单详情"隐藏路由
|
||||
-- ============================================================================
|
||||
|
||||
-- 1. 添加甲方报价目录菜单(parent_id = 2000 智慧报价)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2060, '甲方报价', 2000, 5, 'clientquote', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'el-icon-document-copy', 'admin', NOW(), 'admin', NOW(), '甲方报价管理模块');
|
||||
|
||||
-- 2. 添加甲方报价历史页面菜单
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2061, '甲方报价历史', 2060, 1, 'history', 'bid/clientquote/history/index', NULL, 1, 0, 'C', '0', '0', 'bid:clientquote:history', 'el-icon-document-copy', 'admin', NOW(), 'admin', NOW(), '甲方报价历史记录');
|
||||
|
||||
-- 3. 添加甲方报价单详情隐藏路由(路径为 /quotemgr/clientquote/detail)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2062, '甲方报价单详情', 2060, 2, 'detail', 'bid/clientquote/detail', NULL, 1, 0, 'C', '1', '0', 'bid:clientquote:detail', NULL, 'admin', NOW(), 'admin', NOW(), '甲方报价单详情编辑页');
|
||||
|
||||
-- 4. 添加甲方报价列表页(给现有的 clientquote/index.vue)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2063, '甲方报价列表', 2060, 3, 'index', 'bid/clientquote/index', NULL, 1, 0, 'C', '0', '0', 'bid:clientquote:list', NULL, 'admin', NOW(), 'admin', NOW(), '甲方报价列表');
|
||||
|
||||
-- ============================================================================
|
||||
-- 添加权限按钮
|
||||
-- ============================================================================
|
||||
|
||||
-- 甲方报价历史:查询
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2064, '查询', 2061, 1, '#', NULL, NULL, 1, 0, 'F', '0', '0', 'bid:clientquote:query', '#', 'admin', NOW(), 'admin', NOW(), '');
|
||||
|
||||
-- 甲方报价历史:新增
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2065, '新增', 2061, 2, '#', NULL, NULL, 1, 0, 'F', '0', '0', 'bid:clientquote:add', '#', 'admin', NOW(), 'admin', NOW(), '');
|
||||
|
||||
-- 甲方报价历史:修改
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2066, '修改', 2061, 3, '#', NULL, NULL, 1, 0, 'F', '0', '0', 'bid:clientquote:edit', '#', 'admin', NOW(), 'admin', NOW(), '');
|
||||
|
||||
-- 甲方报价历史:删除
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2067, '删除', 2061, 4, '#', NULL, NULL, 1, 0, 'F', '0', '0', 'bid:clientquote:remove', '#', 'admin', NOW(), 'admin', NOW(), '');
|
||||
|
||||
-- ============================================================================
|
||||
-- 分配菜单给管理员角色 (role_id = 1)
|
||||
-- ============================================================================
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT 1, menu_id FROM sys_menu WHERE menu_id BETWEEN 2060 AND 2067
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = 1 AND menu_id = sys_menu.menu_id);
|
||||
22
sql/20260601/004_fix_clientquote_menu.sql
Normal file
22
sql/20260601/004_fix_clientquote_menu.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
-- ============================================================================
|
||||
-- 修正甲方报价菜单结构
|
||||
-- 目标:甲方报价作为一个单页管理页面,类似供应商报价
|
||||
-- ============================================================================
|
||||
|
||||
-- 1. 将 甲方报价历史(2061) 改为指向 index 主页面
|
||||
UPDATE sys_menu
|
||||
SET menu_name = '甲方报价',
|
||||
component = 'bid/clientquote/index',
|
||||
perms = 'bid:clientquote:list',
|
||||
path = 'index'
|
||||
WHERE menu_id = 2061;
|
||||
|
||||
-- 2. 删除多余的 甲方报价列表(2063) 和 甲方报价单详情(2062)
|
||||
DELETE FROM sys_role_menu WHERE menu_id IN (2062, 2063);
|
||||
DELETE FROM sys_menu WHERE menu_id IN (2062, 2063);
|
||||
|
||||
-- 3. 将权限按钮从历史页面移到主菜单下
|
||||
UPDATE sys_menu SET parent_id = 2061 WHERE menu_id = 2064; -- 查询
|
||||
UPDATE sys_menu SET parent_id = 2061 WHERE menu_id = 2065; -- 新增
|
||||
UPDATE sys_menu SET parent_id = 2061 WHERE menu_id = 2066; -- 修改
|
||||
UPDATE sys_menu SET parent_id = 2061 WHERE menu_id = 2067; -- 删除
|
||||
Reference in New Issue
Block a user