diff --git a/db_backups/add_product_pass_rate_workstation_menu_20260630.sql b/db_backups/add_product_pass_rate_workstation_menu_20260630.sql
index 14b05e3..f2d77a7 100644
--- a/db_backups/add_product_pass_rate_workstation_menu_20260630.sql
+++ b/db_backups/add_product_pass_rate_workstation_menu_20260630.sql
@@ -25,7 +25,7 @@ BEGIN
(
SELECT
src.[账号代码],
- COALESCE(prodParent.[id], src.[pid]) AS [pid],
+ qualityParent.[id] AS [pid],
src.[icon],
src.[AddData],
src.[DeleteData],
@@ -37,13 +37,15 @@ BEGIN
SELECT TOP (1) rp.[id]
FROM [dbo].[登录基础数据_二级菜单] AS rp
WHERE rp.[账号代码] = src.[账号代码]
+ AND rp.[pid] = 0
AND rp.[是否启用] = 1
- AND rp.[title] = N'生产管理'
+ AND (rp.[title] = N'质量管理' OR rp.[path] = '/QualityManagement' OR rp.[name] = 'QualityManagement')
ORDER BY rp.[id]
- ) AS prodParent
+ ) AS qualityParent
WHERE src.[是否启用] = 1
AND (@TargetRole IS NULL OR src.[账号代码] = @TargetRole)
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'生产计划跟踪')
+ AND qualityParent.[id] IS NOT NULL
AND NOT EXISTS
(
SELECT 1
@@ -77,7 +79,7 @@ BEGIN
SELECT
ROW_NUMBER() OVER (ORDER BY src.[账号代码], src.[id]) AS rn,
src.[账号代码],
- COALESCE(prodParent.[id], src.[pid]) AS [pid],
+ qualityParent.[id] AS [pid],
src.[icon],
src.[AddData],
src.[DeleteData],
@@ -89,13 +91,15 @@ BEGIN
SELECT TOP (1) rp.[id]
FROM [dbo].[登录基础数据_二级菜单] AS rp
WHERE rp.[账号代码] = src.[账号代码]
+ AND rp.[pid] = 0
AND rp.[是否启用] = 1
- AND rp.[title] = N'生产管理'
+ AND (rp.[title] = N'质量管理' OR rp.[path] = '/QualityManagement' OR rp.[name] = 'QualityManagement')
ORDER BY rp.[id]
- ) AS prodParent
+ ) AS qualityParent
WHERE src.[是否启用] = 1
AND (@TargetRole IS NULL OR src.[账号代码] = @TargetRole)
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'生产计划跟踪')
+ AND qualityParent.[id] IS NOT NULL
AND NOT EXISTS
(
SELECT 1
@@ -132,6 +136,24 @@ END;
UPDATE [dbo].[登录基础数据_二级菜单]
SET
+ [pid] = COALESCE
+ (
+ (
+ SELECT TOP (1) qualityParent.[id]
+ FROM [dbo].[登录基础数据_二级菜单] AS qualityParent
+ WHERE qualityParent.[账号代码] = [dbo].[登录基础数据_二级菜单].[账号代码]
+ AND qualityParent.[pid] = 0
+ AND qualityParent.[是否启用] = 1
+ AND
+ (
+ qualityParent.[title] = N'质量管理'
+ OR qualityParent.[path] = '/QualityManagement'
+ OR qualityParent.[name] = 'QualityManagement'
+ )
+ ORDER BY qualityParent.[id]
+ ),
+ [pid]
+ ),
[path] = @Path,
[componet] = @Component,
[name] = @Name,
@@ -144,4 +166,3 @@ SELECT [id], [pid], [path], [componet], [name], [title], [icon], [账号代码],
FROM [dbo].[登录基础数据_二级菜单]
WHERE [path] = @Path OR [componet] = @Component OR [title] = @Title
ORDER BY [账号代码], [id];
-
diff --git a/db_backups/move_product_pass_rate_workstation_to_quality_menu_20260711.sql b/db_backups/move_product_pass_rate_workstation_to_quality_menu_20260711.sql
new file mode 100644
index 0000000..66fcaf0
--- /dev/null
+++ b/db_backups/move_product_pass_rate_workstation_to_quality_menu_20260711.sql
@@ -0,0 +1,124 @@
+USE [YL_MESDB];
+GO
+
+SET NOCOUNT ON;
+SET XACT_ABORT ON;
+
+DECLARE @QualityMenuId int = 4;
+
+DECLARE @TargetAccounts TABLE
+(
+ [账号代码] int PRIMARY KEY
+);
+
+INSERT INTO @TargetAccounts ([账号代码])
+SELECT DISTINCT [账号代码]
+FROM [dbo].[登录基础数据_二级菜单]
+WHERE [path] = 'ProductPassRateWorkstation/index'
+ OR [componet] = '/ProductionManagement/ProductPassRateWorkstation/index'
+ OR [name] = 'ProductPassRateWorkstation'
+ OR [title] IN (N'产品合格率工位', N'产品合格率(工位)');
+
+IF NOT EXISTS (SELECT 1 FROM @TargetAccounts)
+BEGIN
+ THROW 50001, N'未找到产品合格率工位菜单,未执行迁移。', 1;
+END;
+
+BEGIN TRANSACTION;
+
+IF EXISTS
+(
+ SELECT 1
+ FROM @TargetAccounts AS target
+ INNER JOIN [dbo].[登录基础数据_二级菜单] AS menu WITH (UPDLOCK, HOLDLOCK)
+ ON menu.[账号代码] = target.[账号代码]
+ AND menu.[id] = @QualityMenuId
+ WHERE menu.[pid] <> 0
+ OR menu.[path] <> '/QualityManagement'
+ OR menu.[name] <> 'QualityManagement'
+ OR menu.[title] <> N'质量管理'
+)
+BEGIN
+ THROW 50002, N'目标账号的菜单 ID 4 已被其他菜单占用,未执行迁移。', 1;
+END;
+
+INSERT INTO [dbo].[登录基础数据_二级菜单]
+ ([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [模块代码], [操作时间], [是否启用])
+SELECT
+ @QualityMenuId,
+ 0,
+ '/QualityManagement',
+ '/layout/Layout',
+ NULL,
+ 'QualityManagement',
+ N'质量管理',
+ 'KKIMaintenance',
+ target.[账号代码],
+ @QualityMenuId,
+ GETDATE(),
+ 1
+FROM @TargetAccounts AS target
+WHERE NOT EXISTS
+(
+ SELECT 1
+ FROM [dbo].[登录基础数据_二级菜单] AS existing WITH (UPDLOCK, HOLDLOCK)
+ WHERE existing.[账号代码] = target.[账号代码]
+ AND existing.[id] = @QualityMenuId
+);
+
+UPDATE qualityMenu
+SET
+ qualityMenu.[pid] = 0,
+ qualityMenu.[path] = '/QualityManagement',
+ qualityMenu.[componet] = '/layout/Layout',
+ qualityMenu.[redirect] = NULL,
+ qualityMenu.[name] = 'QualityManagement',
+ qualityMenu.[title] = N'质量管理',
+ qualityMenu.[icon] = 'KKIMaintenance',
+ qualityMenu.[模块代码] = @QualityMenuId,
+ qualityMenu.[是否启用] = 1,
+ qualityMenu.[操作时间] = GETDATE()
+FROM [dbo].[登录基础数据_二级菜单] AS qualityMenu
+INNER JOIN @TargetAccounts AS target
+ ON target.[账号代码] = qualityMenu.[账号代码]
+WHERE qualityMenu.[id] = @QualityMenuId;
+
+UPDATE targetMenu
+SET
+ targetMenu.[pid] = @QualityMenuId,
+ targetMenu.[path] = 'ProductPassRateWorkstation/index',
+ targetMenu.[componet] = '/ProductionManagement/ProductPassRateWorkstation/index',
+ targetMenu.[redirect] = NULL,
+ targetMenu.[name] = 'ProductPassRateWorkstation',
+ targetMenu.[title] = N'产品合格率(工位)',
+ targetMenu.[模块代码] = targetMenu.[id],
+ targetMenu.[是否启用] = 1,
+ targetMenu.[操作时间] = GETDATE()
+FROM [dbo].[登录基础数据_二级菜单] AS targetMenu
+INNER JOIN @TargetAccounts AS target
+ ON target.[账号代码] = targetMenu.[账号代码]
+WHERE targetMenu.[path] = 'ProductPassRateWorkstation/index'
+ OR targetMenu.[componet] = '/ProductionManagement/ProductPassRateWorkstation/index'
+ OR targetMenu.[name] = 'ProductPassRateWorkstation'
+ OR targetMenu.[title] IN (N'产品合格率工位', N'产品合格率(工位)');
+
+COMMIT TRANSACTION;
+
+SELECT
+ menu.[id],
+ menu.[pid],
+ menu.[path],
+ menu.[componet],
+ menu.[name],
+ menu.[title],
+ menu.[账号代码],
+ menu.[模块代码],
+ menu.[是否启用]
+FROM [dbo].[登录基础数据_二级菜单] AS menu
+INNER JOIN @TargetAccounts AS target
+ ON target.[账号代码] = menu.[账号代码]
+WHERE menu.[id] = @QualityMenuId
+ OR menu.[path] = 'ProductPassRateWorkstation/index'
+ OR menu.[componet] = '/ProductionManagement/ProductPassRateWorkstation/index'
+ORDER BY menu.[账号代码], menu.[pid], menu.[id];
+GO
diff --git a/src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue b/src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue
index 31728e3..dc8c647 100644
--- a/src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue
+++ b/src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue
@@ -63,6 +63,15 @@
任务ID:
查询
+ 导出