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

@@ -0,0 +1,14 @@
SELECT 'RFQ with available comparison data' as info;
SELECT r.rfq_id, r.rfq_no, r.status, COUNT(DISTINCT q.quotation_id) as quote_count
FROM biz_rfq r
JOIN biz_quotation q ON q.rfq_id = r.rfq_id AND q.status IN ('submitted','accepted')
GROUP BY r.rfq_id;
SELECT 'Comparison data detail for RFQ 4' as info;
SELECT ri.material_name, s.supplier_name, q.quote_no, q.status, qi.unit_price
FROM biz_rfq_item ri
JOIN biz_quotation_item qi ON qi.rfq_item_id = ri.item_id
JOIN biz_quotation q ON q.quotation_id = qi.quotation_id AND q.status IN ('submitted','accepted')
JOIN biz_supplier s ON s.supplier_id = q.supplier_id
WHERE ri.rfq_id = 4
ORDER BY ri.item_id, q.supplier_id;

View File

@@ -0,0 +1 @@
SELECT menu_id, menu_name, parent_id, perms FROM sys_menu WHERE menu_name LIKE '%请求%' OR perms LIKE '%rfq%';

View File

@@ -0,0 +1,8 @@
SELECT '=== SUPPLIER USERS ===' AS '';
SELECT user_id, user_name, dept_id, status, del_flag, password FROM sys_user WHERE user_name IN ('hsd','boyuan','ruida','lianmeng','hzjg');
SELECT '=== DEPT 100 EXISTS? ===' AS '';
SELECT dept_id, dept_name FROM sys_dept WHERE dept_id = 100;
SELECT '=== USER-ROLE ===' AS '';
SELECT u.user_name, r.role_key FROM sys_user u JOIN sys_user_role ur ON u.user_id=ur.user_id JOIN sys_role r ON ur.role_id=r.role_id WHERE u.user_name IN ('hsd','boyuan','ruida','lianmeng','hzjg');

View File

@@ -0,0 +1,20 @@
-- ============================================
-- 修复: 创建缺失的 biz_tenant 表
-- 问题: 租户管理页面报错 Table 'biz_tenant' doesn't exist
-- 原因: 初始化脚本中该表被跳过(注释说"已存在"),实际从未创建
-- ============================================
CREATE TABLE IF NOT EXISTS `biz_tenant` (
`tenant_id` bigint NOT NULL AUTO_INCREMENT COMMENT '租户ID',
`tenant_name` varchar(200) NOT NULL COMMENT '租户名称',
`contact` varchar(50) DEFAULT '' COMMENT '联系人',
`phone` varchar(20) DEFAULT '' COMMENT '手机号',
`email` varchar(100) DEFAULT '' COMMENT '邮箱',
`status` varchar(10) DEFAULT '0' COMMENT '状态0正常 1停用',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`tenant_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户管理';

View File

@@ -0,0 +1,6 @@
SET NAMES utf8mb4;
INSERT INTO sys_role (role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, remark)
VALUES (3, '供应商', 'supplier', 3, '1', 1, 1, '0', '0', 'admin', NOW(), '供应商角色');
-- Verify
SELECT role_id, role_name, role_key FROM sys_role WHERE role_id=3;

View File

@@ -0,0 +1,19 @@
SET NAMES utf8mb4;
-- 2.1 父菜单:供应商门户(根级)
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2100, '供应商门户', 0, 4, 'supplier-portal', NULL, NULL, NULL, 1, 0, 'M', '0', '0', '', 'user', 'admin', NOW(), '供应商门户');
-- 2.2 子菜单:我的报价请求
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2101, '我的报价请求', 2100, 1, 'my-rfq', 'bid/rfq/index', NULL, NULL, 1, 0, 'C', '0', '0', 'supplier:rfq:list', 'form', 'admin', NOW(), '供应商RFQ');
-- 2.3 按钮权限
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2102, '查询', 2101, 1, '#', NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'supplier:rfq:query', '#', 'admin', NOW(), '');
-- 角色-菜单关联
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3, menu_id FROM sys_menu WHERE menu_id IN (2100, 2101, 2102);
SELECT menu_id, menu_name, perms FROM sys_menu WHERE menu_id IN (2100, 2101, 2102);
SELECT COUNT(*) AS role_menu_count FROM sys_role_menu WHERE role_id=3;

View File

@@ -0,0 +1,41 @@
SET NAMES utf8mb4;
-- 为每家供应商创建登录账号,关联到 biz_supplier.user_id
-- 4.1 华顺达
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'hsd', '华顺达', '00', '13800138001', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-华顺达', 1);
SELECT @uid1:=LAST_INSERT_ID();
UPDATE biz_supplier SET user_id = @uid1 WHERE supplier_id = 1;
-- 4.2 博远精密
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'boyuan', '博远精密', '00', '13900139002', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-博远精密', 1);
SELECT @uid2:=LAST_INSERT_ID();
UPDATE biz_supplier SET user_id = @uid2 WHERE supplier_id = 2;
-- 4.3 瑞达工控
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'ruida', '瑞达工控', '00', '13700137003', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-瑞达工控', 1);
SELECT @uid3:=LAST_INSERT_ID();
UPDATE biz_supplier SET user_id = @uid3 WHERE supplier_id = 3;
-- 4.4 联盟电气
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'lianmeng', '联盟电气', '00', '15900159004', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-联盟电气', 1);
SELECT @uid4:=LAST_INSERT_ID();
UPDATE biz_supplier SET user_id = @uid4 WHERE supplier_id = 4;
-- 4.5 华中精工
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'hzjg', '华中精工', '00', '13600136005', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-华中精工', 1);
SELECT @uid5:=LAST_INSERT_ID();
UPDATE biz_supplier SET user_id = @uid5 WHERE supplier_id = 5;
-- 分配 supplier 角色
INSERT INTO sys_user_role (user_id, role_id) VALUES
(@uid1, 3), (@uid2, 3), (@uid3, 3), (@uid4, 3), (@uid5, 3);
-- 验证
SELECT s.supplier_name, s.user_id, u.user_name, u.nick_name
FROM biz_supplier s JOIN sys_user u ON s.user_id = u.user_id
ORDER BY s.supplier_id;

View File

@@ -0,0 +1,25 @@
-- ============================================
-- 供应商登录修正
-- 1. 更新密码为 123456
-- 2. 删除旧的供应商门户菜单
-- 3. 重新授权:报价请求 + 供应商报价菜单
-- ============================================
-- 1a. 更新密码
UPDATE sys_user SET password = '$2a$10$e6x.iBNqv3lYoc5O0PkkyOsQf.QC/o1aUugRssBbpOl2x79DHFBYO'
WHERE user_name IN ('hsd','boyuan','ruida','lianmeng','hzjg');
-- 1b. 删除旧的供应商门户菜单和关联
DELETE FROM sys_role_menu WHERE role_id=3;
DELETE FROM sys_menu WHERE menu_id IN (2100, 2101, 2102);
-- 1c. 供应商角色授权:报价请求(查看采购任务)+ 供应商报价(报价管理)
INSERT INTO sys_role_menu (role_id, menu_id) VALUES
(3, 2003), -- 报价请求
(3, 2004); -- 供应商报价
-- 验证
SELECT '=== UPDATED SUPPLIER USERS ===' AS '';
SELECT user_name, nick_name, password FROM sys_user WHERE user_name IN ('hsd','boyuan','ruida','lianmeng','hzjg');
SELECT '=== ROLE-MENU ===' AS '';
SELECT rm.menu_id, m.menu_name FROM sys_role_menu rm JOIN sys_menu m ON rm.menu_id=m.menu_id WHERE rm.role_id=3;

View File

@@ -0,0 +1,26 @@
-- Set names to allow Chinese characters
SET NAMES utf8mb4;
-- 1. RFQ query button under menu 2003
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2103, 'RFQ查看', 2003, 1, '#', NULL, 1, 0, 'F', '0', '0', 'bid:rfq:query', '#', 'admin', NOW(), '');
-- 2. Quotation permission buttons under menu 2004
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2104, '报价查看', 2004, 1, '#', NULL, 1, 0, 'F', '0', '0', 'bid:quotation:query', '#', 'admin', NOW(), '');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2105, '报价新增', 2004, 2, '#', NULL, 1, 0, 'F', '0', '0', 'bid:quotation:add', '#', 'admin', NOW(), '');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2106, '报价编辑', 2004, 3, '#', NULL, 1, 0, 'F', '0', '0', 'bid:quotation:edit', '#', 'admin', NOW(), '');
-- 3. Assign to supplier role
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3, menu_id FROM sys_menu WHERE menu_id IN (2103, 2104, 2105, 2106);
-- Verify
SELECT 'SUPPLIER PERMS' as info;
SELECT menu_id, menu_name, perms FROM sys_menu WHERE menu_id >= 2103 ORDER BY menu_id;
SELECT 'ROLE-MENU COUNT' as info;
SELECT group_concat(menu_id) AS menus FROM sys_role_menu WHERE role_id=3;

View File

@@ -0,0 +1,62 @@
-- ============================================
-- 供应商登录隔离 - 数据库初始化
-- 1. 新增供应商角色
-- 2. 创建供应商门户菜单树
-- 3. 为每家供应商创建登录账号并关联
-- 4. 配置角色-菜单权限
-- ============================================
-- 1. 新增供应商角色
INSERT INTO sys_role (role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, remark)
VALUES (3, '供应商', 'supplier', 3, 1, 1, 1, '0', '0', 'admin', NOW(), '供应商角色');
-- 2. 创建供应商门户菜单树
-- 2.1 父菜单:供应商门户(根级)
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2100, '供应商门户', 0, 4, 'supplier-portal', NULL, NULL, NULL, 1, 0, 'M', '0', '0', '', 'user', 'admin', NOW(), '供应商门户(菜单容器)');
-- 2.2 子菜单:我的报价请求
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2101, '我的报价请求', 2100, 1, 'my-rfq', 'bid/rfq/index', NULL, NULL, 1, 0, 'C', '0', '0', 'supplier:rfq:list', 'form', 'admin', NOW(), '供应商查看自己被邀请的报价请求');
-- 2.3 按钮权限:查询
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES (2102, '查询', 2101, 1, '#', NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'supplier:rfq:query', '#', 'admin', NOW(), '');
-- 3. 供应商角色-菜单关联
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3, menu_id FROM sys_menu WHERE menu_id IN (2100, 2101, 2102);
-- 4. 为每家供应商创建登录账号
-- 密码统一为 123456BCrypt加密
-- 说明:逐个创建用户,然后关联到 biz_supplier.user_id
-- 4.1 深圳市华顺达电子有限公司 → 用户名: hsd
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'hsd', '华顺达', '00', '13800138001', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-华顺达', 1);
UPDATE biz_supplier SET user_id = (SELECT user_id FROM sys_user WHERE user_name = 'hsd') WHERE supplier_id = 1;
-- 4.2 苏州博远精密设备有限公司 → 用户名: boyuan
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'boyuan', '博远精密', '00', '13900139002', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-博远精密', 1);
UPDATE biz_supplier SET user_id = (SELECT user_id FROM sys_user WHERE user_name = 'boyuan') WHERE supplier_id = 2;
-- 4.3 上海瑞达工控科技有限公司 → 用户名: ruida
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'ruida', '瑞达工控', '00', '13700137003', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-瑞达工控', 1);
UPDATE biz_supplier SET user_id = (SELECT user_id FROM sys_user WHERE user_name = 'ruida') WHERE supplier_id = 3;
-- 4.4 广州联盟电气集团股份有限公司 → 用户名: lianmeng
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'lianmeng', '联盟电气', '00', '15900159004', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-联盟电气', 1);
UPDATE biz_supplier SET user_id = (SELECT user_id FROM sys_user WHERE user_name = 'lianmeng') WHERE supplier_id = 4;
-- 4.5 武汉华中精工机械有限公司 → 用户名: hzjg
INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, phonenumber, password, status, del_flag, create_by, create_time, remark, tenant_id)
VALUES (100, 'hzjg', '华中精工', '00', '13600136005', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', 'admin', NOW(), '供应商-华中精工', 1);
UPDATE biz_supplier SET user_id = (SELECT user_id FROM sys_user WHERE user_name = 'hzjg') WHERE supplier_id = 5;
-- 5. 为每个供应商用户分配 supplier 角色
INSERT INTO sys_user_role (user_id, role_id)
SELECT u.user_id, 3 FROM sys_user u
WHERE u.user_name IN ('hsd', 'boyuan', 'ruida', 'lianmeng', 'hzjg');

16
sql/20260606/verify.sql Normal file
View File

@@ -0,0 +1,16 @@
SELECT '=== SUPPLIER USER LINK ===' AS '';
SELECT s.supplier_id, s.supplier_name, u.user_name, u.nick_name
FROM biz_supplier s JOIN sys_user u ON s.user_id = u.user_id
ORDER BY s.supplier_id;
SELECT '=== SUPPLIER ROLE ===' AS '';
SELECT r.role_id, r.role_name, r.role_key FROM sys_role r WHERE r.role_id=3;
SELECT '=== SUPPLIER MENUS ===' AS '';
SELECT m.menu_id, m.menu_name, m.parent_id, m.perms FROM sys_menu m WHERE m.menu_id >= 2100 ORDER BY m.menu_id;
SELECT '=== ROLE-MENU COUNT ===' AS '';
SELECT COUNT(*) AS cnt FROM sys_role_menu WHERE role_id=3;
SELECT '=== USER-ROLE COUNT ===' AS '';
SELECT COUNT(*) AS cnt FROM sys_user_role WHERE role_id=3;

2
sql/20260606/verify2.sql Normal file
View File

@@ -0,0 +1,2 @@
SELECT COUNT(*) AS supplier_count FROM biz_supplier WHERE user_id IS NOT NULL;
SELECT u.user_name, u.nick_name, r.role_key FROM sys_user u JOIN sys_user_role ur ON u.user_id=ur.user_id JOIN sys_role r ON ur.role_id=r.role_id WHERE r.role_key='supplier' ORDER BY u.user_name;