更新webpack配置、精工车间工序工价/生产计划/派工及移动端界面,新增菜单迁移与工价公式调整SQL脚本

This commit is contained in:
Developer
2026-08-08 16:02:24 +08:00
parent fd84f9d3ca
commit 9fc3aae3e9
15 changed files with 2007 additions and 97 deletions

View File

@@ -1,5 +1,6 @@
'use strict'
const path = require('path')
const webpack = require('webpack')
const utils = require('./utils')
const config = require('../config')
const { VueLoaderPlugin } = require('vue-loader')
@@ -95,7 +96,12 @@ module.exports = {
}
]
},
plugins: [new VueLoaderPlugin()],
plugins: [
new VueLoaderPlugin(),
// 修改人:Ld 修改时间:2026-08-05 08:13:25; xlsx-style 的 cpexcel 会引用缺失的 cptable导出 xlsx 时替换为本地兼容模块。
new webpack.NormalModuleReplacementPlugin(/^\.\/cptable$/, resolve('src/vendor/xlsx-style-cptable.js')),
new webpack.IgnorePlugin(/^\.\/cptable$/)
],
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).

View File

@@ -0,0 +1,592 @@
/* 修改人:Ld 修改时间:2026-08-06 09:50:27; 在测试库新增ERP经营管理、MES制造执行、PLM产品生产周期、QMS质量管理、WMS仓储管理、APS计划排产一级菜单并给系统管理角色2追加权限 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @RoleId INT = 2;
DECLARE @ModuleId INT;
/* ERP经营管理 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo._模块信息
WHERE title = N'ERP经营管理'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo._模块信息
(
[path],
component,
redirect,
name,
title,
icon,
,
,
,
dashboardIcon,
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'ERPManagement',
N'ERP经营管理',
N'SystemRrolemaintenance',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo._模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'ERPManagement',
title = N'ERP经营管理',
icon = N'SystemRrolemaintenance',
= 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(), 0) + 1
FROM dbo._角色模块信息
WHERE = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId;
END;
/* MES制造执行 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo._模块信息
WHERE title = N'MES制造执行'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo._模块信息
(
[path],
component,
redirect,
name,
title,
icon,
,
,
,
dashboardIcon,
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'MESExecution',
N'MES制造执行',
N'车间',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo._模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'MESExecution',
title = N'MES制造执行',
icon = N'车间',
= 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(), 0) + 1
FROM dbo._角色模块信息
WHERE = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId;
END;
/* PLM产品生产周期 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo._模块信息
WHERE title = N'PLM产品生产周期'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo._模块信息
(
[path],
component,
redirect,
name,
title,
icon,
,
,
,
dashboardIcon,
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'PLMProductLifecycle',
N'PLM产品生产周期',
N'ProductMaintenance',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo._模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'PLMProductLifecycle',
title = N'PLM产品生产周期',
icon = N'ProductMaintenance',
= 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(), 0) + 1
FROM dbo._角色模块信息
WHERE = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId;
END;
/* QMS质量管理 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo._模块信息
WHERE title = N'QMS质量管理'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo._模块信息
(
[path],
component,
redirect,
name,
title,
icon,
,
,
,
dashboardIcon,
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'QMSQualityManagement',
N'QMS质量管理',
N'QualityInspectionQuery',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo._模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'QMSQualityManagement',
title = N'QMS质量管理',
icon = N'QualityInspectionQuery',
= 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(), 0) + 1
FROM dbo._角色模块信息
WHERE = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId;
END;
/* WMS仓储管理 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo._模块信息
WHERE title = N'WMS仓储管理'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo._模块信息
(
[path],
component,
redirect,
name,
title,
icon,
,
,
,
dashboardIcon,
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'WMSWarehouseManagement',
N'WMS仓储管理',
N'仓储管理',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo._模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'WMSWarehouseManagement',
title = N'WMS仓储管理',
icon = N'仓储管理',
= 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(), 0) + 1
FROM dbo._角色模块信息
WHERE = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId;
END;
/* APS计划排产 */
SET @ModuleId = NULL;
SELECT @ModuleId = id
FROM dbo._模块信息
WHERE title = N'APS计划排产'
AND [path] = N'/';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo._模块信息
(
[path],
component,
redirect,
name,
title,
icon,
,
,
,
dashboardIcon,
)
VALUES
(
N'/',
N'/layout/Layout',
NULL,
N'APSPlanScheduling',
N'APS计划排产',
N'ShopScheduling',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo._模块信息
SET component = N'/layout/Layout',
redirect = NULL,
name = N'APSPlanScheduling',
title = N'APS计划排产',
icon = N'ShopScheduling',
= 0
WHERE id = @ModuleId;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
SELECT
@ModuleId,
0,
@ModuleId,
@RoleId,
1,
ISNULL(MAX(), 0) + 1
FROM dbo._角色模块信息
WHERE = @RoleId
AND pid = 0;
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1
WHERE id = @ModuleId
AND pid = 0
AND = @RoleId;
END;
/* 修改人:Ld 修改时间:2026-08-06 09:50:27; 固定系统管理角色2下新增一级菜单的显示顺序 */
DECLARE @BaseRoleOrder INT;
SELECT @BaseRoleOrder = ISNULL(MAX(r.), 0)
FROM dbo._角色模块信息 r
INNER JOIN dbo._模块信息 m ON m.id = r.id
WHERE r. = @RoleId
AND r.pid = 0
AND m.title NOT IN (N'ERP经营管理', N'MES制造执行', N'PLM产品生产周期', N'QMS质量管理', N'WMS仓储管理', N'APS计划排产');
;WITH MenuOrder AS
(
SELECT N'ERP经营管理' AS title, 1 AS SortNo
UNION ALL SELECT N'MES制造执行', 2
UNION ALL SELECT N'PLM产品生产周期', 3
UNION ALL SELECT N'QMS质量管理', 4
UNION ALL SELECT N'WMS仓储管理', 5
UNION ALL SELECT N'APS计划排产', 6
)
UPDATE r
SET = @BaseRoleOrder + MenuOrder.SortNo,
= 1
FROM dbo._角色模块信息 r
INNER JOIN dbo._模块信息 m ON m.id = r.id
INNER JOIN MenuOrder ON MenuOrder.title = m.title
WHERE r. = @RoleId
AND r.pid = 0;
SELECT id, [path], component, name, title, icon,
FROM dbo._模块信息
WHERE title IN (N'ERP经营管理', N'MES制造执行', N'PLM产品生产周期', N'QMS质量管理', N'WMS仓储管理', N'APS计划排产')
ORDER BY id;
SELECT id, pid, , , ,
FROM dbo._角色模块信息
WHERE id IN
(
SELECT id
FROM dbo._模块信息
WHERE title IN (N'ERP经营管理', N'MES制造执行', N'PLM产品生产周期', N'QMS质量管理', N'WMS仓储管理', N'APS计划排产')
)
AND pid = 0
ORDER BY , , id;
COMMIT TRAN;

View File

@@ -0,0 +1,140 @@
/* 修改人:Ld 修改时间:2026-08-06 15:22:59; 将测试库角色2下可明确归属的二级组件迁移到新一级菜单下 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @MoveMap TABLE
(
id INT PRIMARY KEY,
pid INT NOT NULL,
INT NOT NULL
);
INSERT INTO @MoveMap (id, pid, )
VALUES
(67, 160, 1),
(11, 160, 2),
(12, 160, 3),
(13, 160, 4),
(14, 160, 5),
(147, 160, 6),
(68, 160, 7),
(17, 160, 8),
(16, 160, 9),
(18, 160, 10),
(81, 160, 11),
(19, 160, 12),
(15, 160, 13),
(99, 160, 14),
(86, 160, 15),
(87, 160, 16),
(108, 160, 17),
(114, 160, 18),
(120, 160, 19),
(82, 160, 20),
(129, 160, 21),
(155, 160, 22),
(156, 160, 23),
(35, 160, 24),
(36, 160, 25),
(37, 160, 26),
(41, 160, 27),
(124, 160, 28),
(157, 160, 29),
(94, 161, 1),
(78, 161, 2),
(28, 161, 3),
(98, 161, 4),
(80, 161, 5),
(29, 161, 6),
(79, 161, 7),
(30, 161, 8),
(100, 161, 9),
(84, 161, 10),
(95, 161, 11),
(153, 161, 12),
(154, 161, 13),
(25, 162, 1),
(69, 162, 2),
(24, 162, 3),
(102, 162, 4),
(21, 162, 5),
(22, 162, 6),
(23, 162, 7),
(117, 162, 8),
(134, 162, 9),
(150, 162, 10),
(104, 163, 1),
(110, 163, 2),
(103, 163, 3),
(121, 163, 4),
(128, 163, 5),
(131, 163, 6),
(135, 163, 7),
(43, 164, 1),
(112, 164, 2),
(44, 164, 3),
(46, 164, 4),
(47, 164, 5),
(48, 164, 6),
(49, 164, 7),
(75, 164, 8),
(51, 164, 9),
(76, 164, 10),
(77, 164, 11),
(50, 164, 12),
(92, 164, 13),
(93, 164, 14),
(96, 164, 15),
(118, 164, 16),
(122, 164, 17),
(123, 164, 18),
(130, 164, 19),
(138, 164, 20),
(143, 164, 21),
(151, 164, 22),
(158, 164, 23),
(45, 164, 24),
(132, 159, 1);
DECLARE @PidOrder TABLE
(
pid INT PRIMARY KEY,
INT NOT NULL
);
INSERT INTO @PidOrder (pid, )
SELECT
m.pid,
ISNULL(MAX(r.), 0) AS
FROM @MoveMap m
LEFT JOIN dbo._角色模块信息 r
ON r.pid = m.pid
AND r. = 2
AND ISNULL(r., 1) = 1
AND NOT EXISTS
(
SELECT 1
FROM @MoveMap mm
WHERE mm.id = r.id
)
GROUP BY m.pid;
UPDATE r
SET r.pid = m.pid,
r. = r.id,
r. = 1,
r. = p. + m.
FROM dbo._角色模块信息 r
INNER JOIN @MoveMap m
ON m.id = r.id
INNER JOIN @PidOrder p
ON p.pid = m.pid
WHERE r. = 2;
SELECT p.title AS , m.id AS ID, m.pid, m., r.
FROM @MoveMap m
INNER JOIN dbo._模块信息 p ON p.id = m.pid
INNER JOIN dbo._角色模块信息 r ON r.id = m.id AND r. = 2
ORDER BY m.pid, r., m.id;
COMMIT TRAN;

View File

@@ -0,0 +1,34 @@
/* 修改人:Ld 修改时间:2026-08-06 16:15:15; 精确修正角色2新一级菜单下误迁的占位授权记录 */
SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE dbo._角色模块信息
SET pid = 161,
= 1,
= CASE IDD
WHEN 1184 THEN 1
WHEN 1181 THEN 3
WHEN 1183 THEN 10
WHEN 1185 THEN 11
WHEN 1187 THEN 12
WHEN 1182 THEN 7
WHEN 1186 THEN 13
ELSE
END
WHERE = 2
AND IDD IN (1184, 1181, 1183, 1185, 1187, 1182, 1186);
UPDATE dbo._角色模块信息
SET = 0
WHERE = 2
AND IDD = 1177;
SELECT p.title AS , c.id AS ID, c.title AS , r.IDD, r., r.
FROM dbo._角色模块信息 r
INNER JOIN dbo._模块信息 c ON c.id = r.id
LEFT JOIN dbo._模块信息 p ON p.id = r.pid
WHERE r. = 2
AND r.IDD IN (1184, 1181, 1183, 1185, 1187, 1182, 1186, 1177)
ORDER BY r. DESC, p.id, r., c.id;
COMMIT TRAN;

View File

@@ -0,0 +1,199 @@
/* 修改人:Ld 修改时间:2026-08-06 16:15:15; 补回建议清单缺项并重排角色2新一级菜单下二级组件顺序 */
SET XACT_ABORT ON;
BEGIN TRAN;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = 135
AND pid = 163
AND = 2
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
VALUES
(
135,
163,
135,
2,
1,
7
);
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1,
= 7
WHERE id = 135
AND pid = 163
AND = 2;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo._角色模块信息
WHERE id = 45
AND pid = 164
AND = 2
)
BEGIN
INSERT INTO dbo._角色模块信息
(
id,
pid,
,
,
,
)
VALUES
(
45,
164,
45,
2,
1,
24
);
END
ELSE
BEGIN
UPDATE dbo._角色模块信息
SET = 1,
= 24
WHERE id = 45
AND pid = 164
AND = 2;
END;
DECLARE @OrderMap TABLE
(
id INT PRIMARY KEY,
pid INT NOT NULL,
INT NOT NULL
);
INSERT INTO @OrderMap (id, pid, )
VALUES
(132, 159, 1),
(67, 160, 1),
(11, 160, 2),
(12, 160, 3),
(13, 160, 4),
(14, 160, 5),
(147, 160, 6),
(68, 160, 7),
(17, 160, 8),
(16, 160, 9),
(18, 160, 10),
(81, 160, 11),
(19, 160, 12),
(15, 160, 13),
(99, 160, 14),
(86, 160, 15),
(87, 160, 16),
(108, 160, 17),
(114, 160, 18),
(120, 160, 19),
(82, 160, 20),
(129, 160, 21),
(155, 160, 22),
(156, 160, 23),
(35, 160, 24),
(36, 160, 25),
(37, 160, 26),
(41, 160, 27),
(124, 160, 28),
(157, 160, 29),
(88, 160, 30),
(94, 161, 1),
(78, 161, 2),
(28, 161, 3),
(98, 161, 4),
(80, 161, 5),
(29, 161, 6),
(79, 161, 7),
(30, 161, 8),
(100, 161, 9),
(84, 161, 10),
(95, 161, 11),
(153, 161, 12),
(154, 161, 13),
(149, 161, 14),
(25, 162, 1),
(69, 162, 2),
(24, 162, 3),
(102, 162, 4),
(21, 162, 5),
(22, 162, 6),
(23, 162, 7),
(117, 162, 8),
(134, 162, 9),
(150, 162, 10),
(125, 162, 11),
(126, 162, 12),
(133, 162, 13),
(104, 163, 1),
(110, 163, 2),
(103, 163, 3),
(121, 163, 4),
(128, 163, 5),
(131, 163, 6),
(135, 163, 7),
(43, 164, 1),
(112, 164, 2),
(44, 164, 3),
(46, 164, 4),
(47, 164, 5),
(48, 164, 6),
(49, 164, 7),
(75, 164, 8),
(51, 164, 9),
(76, 164, 10),
(77, 164, 11),
(50, 164, 12),
(92, 164, 13),
(93, 164, 14),
(96, 164, 15),
(118, 164, 16),
(122, 164, 17),
(123, 164, 18),
(130, 164, 19),
(138, 164, 20),
(143, 164, 21),
(151, 164, 22),
(158, 164, 23),
(45, 164, 24);
UPDATE r
SET r.pid = o.pid,
r. = r.id,
r. = 1,
r. = o.
FROM dbo._角色模块信息 r
INNER JOIN @OrderMap o ON o.id = r.id
WHERE r. = 2
AND r.pid IN (159, 160, 161, 162, 163, 164);
SELECT p.title AS , COUNT(*) AS
FROM dbo._角色模块信息 r
INNER JOIN dbo._模块信息 p ON p.id = r.pid
WHERE r. = 2
AND ISNULL(r., 1) = 1
AND r.pid IN (159, 160, 161, 162, 163, 164)
GROUP BY p.title, r.pid
ORDER BY r.pid;
COMMIT TRAN;

View File

@@ -0,0 +1,287 @@
USE [ERPTOOL_JY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 工序工价编辑保存公式输入 F、G、H并由触发器统一计算 I、J修改人:Ld 修改时间:2026-08-08 10:24:44;
ALTER PROCEDURE [dbo].[_工序工价_编辑数据]
@ NVARCHAR(50) = N'',
@ NVARCHAR(100) = N'',
@ NVARCHAR(100) = N'',
@ NVARCHAR(100) = N'',
@ NVARCHAR(100) = N'',
@s NVARCHAR(50) = N'',
@s NVARCHAR(50) = N'',
@s NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(20) = N'',
@ NVARCHAR(500) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT;
DECLARE @Safe工序流水号 INT;
DECLARE @Safe机动时间s DECIMAL(18, 4);
DECLARE @Safe辅助时间s DECIMAL(18, 4);
DECLARE @Safe总时间s DECIMAL(18, 4);
DECLARE @Safe单装数量件 DECIMAL(18, 4);
DECLARE @Safe操作台数 DECIMAL(18, 4);
DECLARE @Safe日产能件 DECIMAL(18, 4);
DECLARE @Safe最终单价元件 DECIMAL(18, 4);
DECLARE @Safe工作时间时 DECIMAL(18, 4);
DECLARE @Safe宽放时间时 DECIMAL(18, 4);
DECLARE @Safe日工资元 DECIMAL(18, 4);
DECLARE @Safe生效日期 DATE;
DECLARE @Safe变更次数 INT;
DECLARE @Safe是否启用 BIT = CASE WHEN NULLIF(@, N'') IS NULL THEN 1 WHEN @ = N'1' THEN 1 ELSE 0 END;
DECLARE @ NVARCHAR(50) = NULLIF(@, N'');
DECLARE @ DATETIME = GETDATE();
DECLARE @ NVARCHAR(MAX);
DECLARE @ NVARCHAR(MAX);
DECLARE @Old工序流水号 INT;
SET @Id = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(INT, @) ELSE NULL END;
SET @Safe工序流水号 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(INT, @) ELSE NULL END;
SET @Safe机动时间s = CASE WHEN ISNUMERIC(NULLIF(@s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @s) ELSE 0 END;
SET @Safe辅助时间s = CASE WHEN ISNUMERIC(NULLIF(@s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @s) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; E 固定按 C+D 计算,不使用前端传入的总时间
SET @Safe总时间s = @Safe机动时间s + @Safe辅助时间s;
SET @Safe单装数量件 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe操作台数 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe日产能件 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe最终单价元件 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; 兼容旧接口未传 F、G、H 时,按新公式反推输入字段
SET @Safe工作时间时 = CASE
WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @)
WHEN @Safe日产能件 <> 0 AND @Safe总时间s <> 0 AND @Safe单装数量件 <> 0
THEN @Safe日产能件 * @Safe总时间s / (3600 * @Safe单装数量件)
ELSE 0
END;
SET @Safe宽放时间时 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe日工资元 = CASE
WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @)
WHEN @Safe最终单价元件 <> 0 AND @Safe日产能件 <> 0 AND @Safe操作台数 <> 0
THEN @Safe最终单价元件 * @Safe操作台数 * @Safe日产能件
ELSE 0
END;
SET @Safe生效日期 = CASE WHEN ISDATE(NULLIF(@, N'')) = 1 THEN CONVERT(DATE, @) ELSE NULL END;
SET @Safe变更次数 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(INT, @) ELSE 0 END;
IF @Safe工序流水号 IS NULL
BEGIN
SELECT N'0' AS result, N'工序流水号不能为空' AS message;
RETURN;
END;
IF NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
BEGIN
SELECT N'0' AS result, N'工艺名称、工序名称、零件名称和图号不能为空' AS message;
RETURN;
END;
IF @Id IS NULL
BEGIN
SELECT TOP 1 @Id =
FROM [dbo].[_工序工价]
WHERE = @Safe工序流水号;
END;
IF @Id IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM [dbo].[_工序工价]
WHERE = @Id
)
BEGIN
SELECT N'0' AS result, N'工序工价记录不存在' AS message;
RETURN;
END;
BEGIN TRY
BEGIN TRAN;
IF @Id IS NOT NULL
BEGIN
SELECT
@Old工序流水号 = ,
@ = [dbo].[_工序工价_历史快照](
[s],
[s],
[s],
[()],
[],
[()],
[(/)],
,
)
FROM [dbo].[_工序工价]
WHERE = @Id;
UPDATE [dbo].[_工序工价]
SET = @Safe工序流水号,
= LTRIM(RTRIM(@)),
= LTRIM(RTRIM(@)),
= LTRIM(RTRIM(@)),
= LTRIM(RTRIM(@)),
[s] = @Safe机动时间s,
[s] = @Safe辅助时间s,
[s] = @Safe总时间s,
[()] = @Safe单装数量件,
[] = @Safe操作台数,
[()] = @Safe日产能件,
[(/)] = @Safe最终单价元件,
[()] = @Safe工作时间时,
[()] = @Safe宽放时间时,
[()] = @Safe日工资元,
= @Safe生效日期,
= @Safe变更次数,
= @Safe是否启用,
= NULLIF(@, N''),
= N'按件',
= @Safe最终单价元件,
= @,
= @
WHERE = @Id;
END
ELSE
BEGIN
INSERT INTO [dbo].[_工序工价](
, , , , ,
[s], [s], [s], [()], [],
[()], [(/)], [()], [()], [()],
, , , ,
, , , , ,
)
VALUES (
@Safe工序流水号, LTRIM(RTRIM(@)), LTRIM(RTRIM(@)), LTRIM(RTRIM(@)), LTRIM(RTRIM(@)),
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe工作时间时, @Safe宽放时间时, @Safe日工资元,
@Safe生效日期, @Safe变更次数, @Safe是否启用, NULLIF(@, N''),
@, @, @, @, N'按件', @Safe最终单价元件
);
SET @Id = SCOPE_IDENTITY();
SET @Old工序流水号 = @Safe工序流水号;
SET @ = N'';
END;
SET @ = [dbo].[_工序工价_历史快照](
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe生效日期, @Safe变更次数
);
INSERT INTO [dbo].[_工序工价历史记录](
, , , , , ,
, , , , ,
)
VALUES (
@Id, ISNULL(@Safe工序流水号, @Old工序流水号), LTRIM(RTRIM(@)), LTRIM(RTRIM(@)),
LTRIM(RTRIM(@)), LTRIM(RTRIM(@)), CASE WHEN @ = N'' THEN N'新增' ELSE N'编辑' END,
@, @, @, @, NULLIF(@, N'')
);
COMMIT TRAN;
SELECT N'1' AS result, @Id AS ;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
END CATCH;
END
GO
-- 工序工价字段公式E=C+DI=F*3600/E*AJ=H/B/I修改人:Ld 修改时间:2026-08-08 10:24:44;
IF OBJECT_ID(N'[dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]', N'TR') IS NOT NULL
DROP TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算];
GO
CREATE TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]
ON [dbo].[_工序工价]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF TRIGGER_NESTLEVEL() > 1
RETURN;
;WITH FormulaSource AS (
SELECT
price.,
ISNULL(price.[s], 0) + ISNULL(price.[s], 0) AS s,
ISNULL(price.[()], 0) AS ,
ISNULL(price.[], 0) AS ,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; F 优先保存页面输入,旧接口仅传日产能时按 I=F*3600/E*A 反推
CASE
WHEN ISNULL(price.[()], 0) <> 0 THEN ISNULL(price.[()], 0)
WHEN ISNULL(price.[()], 0) <> 0
AND ISNULL(price.[s], 0) + ISNULL(price.[s], 0) <> 0
AND ISNULL(price.[()], 0) <> 0
THEN ISNULL(price.[()], 0) * (ISNULL(price.[s], 0) + ISNULL(price.[s], 0)) / (3600 * ISNULL(price.[()], 0))
ELSE 0
END AS ,
ISNULL(price.[()], 0) AS ,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; H 优先保存页面输入,旧接口仅传工价定额时按 J=H/B/I 反推
CASE
WHEN ISNULL(price.[()], 0) <> 0 THEN ISNULL(price.[()], 0)
WHEN ISNULL(price.[(/)], 0) <> 0
AND ISNULL(price.[()], 0) <> 0
AND ISNULL(price.[], 0) <> 0
THEN ISNULL(price.[(/)], 0) * ISNULL(price.[], 0) * ISNULL(price.[()], 0)
ELSE 0
END AS
FROM [dbo].[_工序工价] price
INNER JOIN inserted i ON price. = i.
),
FormulaResult AS (
SELECT
,
s,
,
,
,
,
,
CASE WHEN s <> 0 THEN * 3600 / s * ELSE 0 END AS
FROM FormulaSource
)
UPDATE price
SET price.[s] = calc.s,
price.[()] = calc.,
price.[()] = calc.,
price.[()] = calc.,
price.[(/)] = calc.,
price.[] = CASE WHEN calc. <> 0 AND calc. <> 0 THEN calc. / calc. / calc. ELSE 0 END,
price.[()] = calc.,
price.[(/)] = CASE WHEN calc. <> 0 AND calc. <> 0 THEN calc. / calc. / calc. ELSE 0 END,
price. = CASE WHEN calc. <> 0 AND calc. <> 0 THEN calc. / calc. / calc. ELSE 0 END
FROM [dbo].[_工序工价] price
INNER JOIN FormulaResult calc ON price. = calc.;
END
GO
-- 按新公式回算测试库现有数据;修改人:Ld 修改时间:2026-08-08 10:24:44;
UPDATE [dbo].[_工序工价]
SET [()] = [()];
GO

View File

@@ -0,0 +1,286 @@
USE [ERPTOOL_JY_20250826Back]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 工序工价编辑保存公式输入 F、G、H并由触发器统一计算 I、J修改人:Ld 修改时间:2026-08-08 10:24:44;
ALTER PROCEDURE [dbo].[_工序工价_编辑数据]
@ NVARCHAR(50) = N'',
@ NVARCHAR(100) = N'',
@ NVARCHAR(100) = N'',
@ NVARCHAR(100) = N'',
@ NVARCHAR(100) = N'',
@s NVARCHAR(50) = N'',
@s NVARCHAR(50) = N'',
@s NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(20) = N'',
@ NVARCHAR(500) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N'',
@ NVARCHAR(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT;
DECLARE @Safe工序流水号 INT;
DECLARE @Safe机动时间s DECIMAL(18, 4);
DECLARE @Safe辅助时间s DECIMAL(18, 4);
DECLARE @Safe总时间s DECIMAL(18, 4);
DECLARE @Safe单装数量件 DECIMAL(18, 4);
DECLARE @Safe操作台数 DECIMAL(18, 4);
DECLARE @Safe日产能件 DECIMAL(18, 4);
DECLARE @Safe最终单价元件 DECIMAL(18, 4);
DECLARE @Safe工作时间时 DECIMAL(18, 4);
DECLARE @Safe宽放时间时 DECIMAL(18, 4);
DECLARE @Safe日工资元 DECIMAL(18, 4);
DECLARE @Safe生效日期 DATE;
DECLARE @Safe变更次数 INT;
DECLARE @Safe是否启用 BIT = CASE WHEN NULLIF(@, N'') IS NULL THEN 1 WHEN @ = N'1' THEN 1 ELSE 0 END;
DECLARE @ NVARCHAR(50) = NULLIF(@, N'');
DECLARE @ DATETIME = GETDATE();
DECLARE @ NVARCHAR(MAX);
DECLARE @ NVARCHAR(MAX);
DECLARE @Old工序流水号 INT;
SET @Id = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(INT, @) ELSE NULL END;
SET @Safe工序流水号 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(INT, @) ELSE NULL END;
SET @Safe机动时间s = CASE WHEN ISNUMERIC(NULLIF(@s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @s) ELSE 0 END;
SET @Safe辅助时间s = CASE WHEN ISNUMERIC(NULLIF(@s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @s) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; E 固定按 C+D 计算,不使用前端传入的总时间
SET @Safe总时间s = @Safe机动时间s + @Safe辅助时间s;
SET @Safe单装数量件 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe操作台数 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe日产能件 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe最终单价元件 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; 兼容旧接口未传 F、G、H 时,按新公式反推输入字段
SET @Safe工作时间时 = CASE
WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @)
WHEN @Safe日产能件 <> 0 AND @Safe总时间s <> 0 AND @Safe单装数量件 <> 0
THEN @Safe日产能件 * @Safe总时间s / (3600 * @Safe单装数量件)
ELSE 0
END;
SET @Safe宽放时间时 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @) ELSE 0 END;
SET @Safe日工资元 = CASE
WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @)
WHEN @Safe最终单价元件 <> 0 AND @Safe日产能件 <> 0 AND @Safe操作台数 <> 0
THEN @Safe最终单价元件 * @Safe操作台数 * @Safe日产能件
ELSE 0
END;
SET @Safe生效日期 = CASE WHEN ISDATE(NULLIF(@, N'')) = 1 THEN CONVERT(DATE, @) ELSE NULL END;
SET @Safe变更次数 = CASE WHEN ISNUMERIC(NULLIF(@, N'')) = 1 THEN CONVERT(INT, @) ELSE 0 END;
IF @Safe工序流水号 IS NULL
BEGIN
SELECT N'0' AS result, N'工序流水号不能为空' AS message;
RETURN;
END;
IF NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
OR NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
BEGIN
SELECT N'0' AS result, N'工艺名称、工序名称、零件名称和图号不能为空' AS message;
RETURN;
END;
IF @Id IS NULL
BEGIN
SELECT TOP 1 @Id =
FROM [dbo].[_工序工价]
WHERE = @Safe工序流水号;
END;
IF @Id IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM [dbo].[_工序工价]
WHERE = @Id
)
BEGIN
SELECT N'0' AS result, N'工序工价记录不存在' AS message;
RETURN;
END;
BEGIN TRY
BEGIN TRAN;
IF @Id IS NOT NULL
BEGIN
SELECT
@Old工序流水号 = ,
@ = [dbo].[_工序工价_历史快照](
[s],
[s],
[s],
[()],
[],
[()],
[(/)],
,
)
FROM [dbo].[_工序工价]
WHERE = @Id;
UPDATE [dbo].[_工序工价]
SET = @Safe工序流水号,
= LTRIM(RTRIM(@)),
= LTRIM(RTRIM(@)),
= LTRIM(RTRIM(@)),
= LTRIM(RTRIM(@)),
[s] = @Safe机动时间s,
[s] = @Safe辅助时间s,
[s] = @Safe总时间s,
[()] = @Safe单装数量件,
[] = @Safe操作台数,
[()] = @Safe日产能件,
[(/)] = @Safe最终单价元件,
[()] = @Safe工作时间时,
[()] = @Safe宽放时间时,
[()] = @Safe日工资元,
= @Safe生效日期,
= @Safe变更次数,
= @Safe是否启用,
= NULLIF(@, N''),
= N'按件',
= @Safe最终单价元件,
= @,
= @
WHERE = @Id;
END
ELSE
BEGIN
INSERT INTO [dbo].[_工序工价](
, , , , ,
[s], [s], [s], [()], [],
[()], [(/)], [()], [()], [()],
, , , ,
, , , , ,
)
VALUES (
@Safe工序流水号, LTRIM(RTRIM(@)), LTRIM(RTRIM(@)), LTRIM(RTRIM(@)), LTRIM(RTRIM(@)),
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe工作时间时, @Safe宽放时间时, @Safe日工资元,
@Safe生效日期, @Safe变更次数, @Safe是否启用, NULLIF(@, N''),
@, @, @, @, N'按件', @Safe最终单价元件
);
SET @Id = SCOPE_IDENTITY();
SET @Old工序流水号 = @Safe工序流水号;
SET @ = N'';
END;
SET @ = [dbo].[_工序工价_历史快照](
@Safe机动时间s, @Safe辅助时间s, @Safe总时间s, @Safe单装数量件, @Safe操作台数,
@Safe日产能件, @Safe最终单价元件, @Safe生效日期, @Safe变更次数
);
INSERT INTO [dbo].[_工序工价历史记录](
, , , , , ,
, , , , ,
)
VALUES (
@Id, ISNULL(@Safe工序流水号, @Old工序流水号), LTRIM(RTRIM(@)), LTRIM(RTRIM(@)),
LTRIM(RTRIM(@)), LTRIM(RTRIM(@)), CASE WHEN @ = N'' THEN N'新增' ELSE N'编辑' END,
@, @, @, @, NULLIF(@, N'')
);
COMMIT TRAN;
SELECT N'1' AS result, @Id AS ;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
END CATCH;
END
GO
-- 工序工价字段公式E=C+DI=F*3600/E*AJ=H/B/I修改人:Ld 修改时间:2026-08-08 10:24:44;
IF OBJECT_ID(N'[dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]', N'TR') IS NOT NULL
DROP TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算];
GO
CREATE TRIGGER [dbo].[TR_车间生产管理工艺_工序工价_字段公式计算]
ON [dbo].[_工序工价]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF TRIGGER_NESTLEVEL() > 1
RETURN;
;WITH FormulaSource AS (
SELECT
price.,
ISNULL(price.[s], 0) + ISNULL(price.[s], 0) AS s,
ISNULL(price.[()], 0) AS ,
ISNULL(price.[], 0) AS ,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; F 优先保存页面输入,旧接口仅传日产能时按 I=F*3600/E*A 反推
CASE
WHEN ISNULL(price.[()], 0) <> 0 THEN ISNULL(price.[()], 0)
WHEN ISNULL(price.[()], 0) <> 0
AND ISNULL(price.[s], 0) + ISNULL(price.[s], 0) <> 0
AND ISNULL(price.[()], 0) <> 0
THEN ISNULL(price.[()], 0) * (ISNULL(price.[s], 0) + ISNULL(price.[s], 0)) / (3600 * ISNULL(price.[()], 0))
ELSE 0
END AS ,
ISNULL(price.[()], 0) AS ,
-- 修改人:Ld 修改时间:2026-08-08 10:24:44; H 优先保存页面输入,旧接口仅传工价定额时按 J=H/B/I 反推
CASE
WHEN ISNULL(price.[()], 0) <> 0 THEN ISNULL(price.[()], 0)
WHEN ISNULL(price.[(/)], 0) <> 0
AND ISNULL(price.[()], 0) <> 0
AND ISNULL(price.[], 0) <> 0
THEN ISNULL(price.[(/)], 0) * ISNULL(price.[], 0) * ISNULL(price.[()], 0)
ELSE 0
END AS
FROM [dbo].[_工序工价] price
INNER JOIN inserted i ON price. = i.
),
FormulaResult AS (
SELECT
,
s,
,
,
,
,
,
CASE WHEN s <> 0 THEN * 3600 / s * ELSE 0 END AS
FROM FormulaSource
)
UPDATE price
SET price.[s] = calc.s,
price.[()] = calc.,
price.[()] = calc.,
price.[()] = calc.,
price.[(/)] = calc.,
price.[] = CASE WHEN calc. <> 0 AND calc. <> 0 THEN calc. / calc. / calc. ELSE 0 END,
price.[()] = calc.,
price.[(/)] = CASE WHEN calc. <> 0 AND calc. <> 0 THEN calc. / calc. / calc. ELSE 0 END,
price. = CASE WHEN calc. <> 0 AND calc. <> 0 THEN calc. / calc. / calc. ELSE 0 END
FROM [dbo].[_工序工价] price
INNER JOIN FormulaResult calc ON price. = calc.;
END
GO
-- 按新公式回算测试库现有数据;修改人:Ld 修改时间:2026-08-08 10:24:44;
UPDATE [dbo].[_工序工价]
SET [()] = [()];
GO

View File

@@ -0,0 +1,56 @@
/* 修改人:Ld 修改时间:2026-08-06 16:23:41; 将工艺查询、工艺管理迁到APS并将通用件装配、专机装配下二级菜单迁到MES */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @MoveMap TABLE
(
id INT PRIMARY KEY,
pid INT NOT NULL,
INT NOT NULL
);
INSERT INTO @MoveMap (id, pid, )
VALUES
(84, 159, 2),
(95, 159, 3),
(94, 161, 1),
(78, 161, 2),
(28, 161, 3),
(98, 161, 4),
(80, 161, 5),
(29, 161, 6),
(79, 161, 7),
(30, 161, 8),
(100, 161, 9),
(153, 161, 10),
(154, 161, 11),
(149, 161, 12),
(64, 161, 13),
(65, 161, 14),
(66, 161, 15),
(70, 161, 16),
(89, 161, 17),
(90, 161, 18),
(91, 161, 19),
(101, 161, 20),
(72, 161, 21),
(73, 161, 22),
(74, 161, 23);
UPDATE r
SET r.pid = m.pid,
r. = r.id,
r. = 1,
r. = m.
FROM dbo._角色模块信息 r
INNER JOIN @MoveMap m ON m.id = r.id
WHERE r. = 2;
SELECT p.title AS , c.id AS ID, c.title AS , r.
FROM @MoveMap m
INNER JOIN dbo._角色模块信息 r ON r.id = m.id AND r. = 2
INNER JOIN dbo._模块信息 c ON c.id = r.id
INNER JOIN dbo._模块信息 p ON p.id = r.pid
ORDER BY p.id, r., c.id;
COMMIT TRAN;

View File

@@ -0,0 +1,83 @@
ALTER PROCEDURE [dbo].[_零件工序_派工]
@ int = null,
@ int = null,
@ int = null,
@ int = null,
@ int = null,
@ nvarchar(50)=null,
@ nvarchar(50)=null
AS
declare @ int
declare @ int
declare @ int
declare @ nvarchar(50)
declare @ int
declare @ int=0
-- 修改人:Ld 修改时间:2026-08-05 09:35:00; 后端兜底校验派工数量,避免空值或非正数落入任务分配表。
if @ is null or @ <= 0
begin
RAISERROR(N'派工数量不能为空且必须大于0', 16, 1)
return
end
update _零件工序 set = ISNULL(,0) + @ where =@
select @=,@=,@=ISNULL(,0) from _零件工序 where =@
select @ = from _零件工艺计划 where =@
if @ is null
begin
update _零件工艺计划 set = getdate() where =@
end
if @ = 16
begin
update _零件工序 set = 1,=@ where =@
end
else
begin
update _零件工序 set = 0,=0 where =@
end
if @ = 1
begin
if @ > @ and @ > 0
begin
set @ = @
update _零件工序 set =0 where =@
end
else if @ <= @ and @ > 0
begin
set @ = @
update _零件工序 set =isnull(,0)-@ where =@
end
end
if (select COUNT(*) from _零件工序_任务分配 where =@ and =@ and =@) = 1
begin
-- 修改人:Ld 修改时间:2026-08-05 09:35:00; 累加时对历史空值做默认值处理,避免 NULL + 新数量 仍然为 NULL。
update _零件工序_任务分配 set =ISNULL(,0)+@,=GETDATE(),=isnull(,0)+@,=@,=@,=@ where =@ and =@ and =@
end
else
begin
insert into _零件工序_任务分配(,,,,,,,,)values(@,@,@,@,GETDATE(),@,@,@,@)
if @ <> 16
begin
select @ = IDENT_CURRENT('车间生产管理工艺_零件工序_任务分配')
exec _零件工序_派工_生产计划_增加 @,@,@,@
end
end

View File

@@ -0,0 +1,36 @@
/* 修改人:Ld 修改时间:2026-08-06 16:15:15; 按确认归属补迁订单投产、物料采购进度和新产品合同类二级组件 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @MoveMap TABLE
(
id INT PRIMARY KEY,
pid INT NOT NULL,
INT NOT NULL
);
INSERT INTO @MoveMap (id, pid, )
VALUES
(88, 160, 31),
(149, 161, 15),
(125, 162, 12),
(126, 162, 13),
(133, 162, 14);
UPDATE r
SET r.pid = m.pid,
r. = r.id,
r. = 1,
r. = m.
FROM dbo._角色模块信息 r
INNER JOIN @MoveMap m ON m.id = r.id
WHERE r. = 2;
SELECT p.title AS , c.id AS ID, c.title AS , r.
FROM @MoveMap m
INNER JOIN dbo._角色模块信息 r ON r.id = m.id AND r. = 2
INNER JOIN dbo._模块信息 c ON c.id = r.id
INNER JOIN dbo._模块信息 p ON p.id = r.pid
ORDER BY p.id, r., c.id;
COMMIT TRAN;

View File

@@ -215,12 +215,14 @@
<el-row :gutter="16">
<el-col :span="8">
<el-form-item label="单装数量(件)" prop="单装数量(件)">
<el-input-number v-model="form['单装数量(件)']" :min="0" :precision="2" :step="1" controls-position="right" style="width: 100%;" />
<!-- 修改人:Ld 修改时间:2026-08-08 10:24:44; 单装数量参与标准产能公式变化后立即重算 -->
<el-input-number v-model="form['单装数量(件)']" :min="0" :precision="2" :step="1" controls-position="right" style="width: 100%;" @change="refreshPriceFormula()" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="操作台数(台/人)" prop="操作台数">
<el-input-number v-model="form.操作台数" :min="0" :precision="2" :step="1" controls-position="right" style="width: 100%;" />
<!-- 修改人:Ld 修改时间:2026-08-08 10:24:44; 操作台数参与工价定额公式变化后立即重算 -->
<el-input-number v-model="form.操作台数" :min="0" :precision="2" :step="1" controls-position="right" style="width: 100%;" @change="refreshPriceFormula()" />
</el-form-item>
</el-col>
<el-col :span="8">
@@ -499,7 +501,7 @@ export default {
this.form.总时间s = this.getTotalTime(this.form)
this.refreshPriceFormula()
},
// 修改人:Ld 修改时间:2026-08-04 09:39:18; 按截图公式计算标准产能和工价定额,并同步旧字段兼容后端编辑过程
// 修改人:Ld 修改时间:2026-08-08 10:24:44; 按截图公式 I=F*3600/E*A、J=H/B/I 计算,并同步旧字段兼容后端编辑过程
refreshPriceFormula() {
if (!this.form) {
return
@@ -507,8 +509,10 @@ export default {
var totalTime = Number(this.form.总时间s || 0)
var workTime = Number(this.form['工作时间(时)'] || 0)
var dayWage = Number(this.form['日工资(元)'] || 0)
var capacity = totalTime === 0 ? 0 : workTime * 3600 / totalTime
var priceQuota = capacity === 0 ? 0 : dayWage / capacity
var loadingQuantity = Number(this.form['单装数量(件)'] || 0)
var operationCount = Number(this.form.操作台数 || 0)
var capacity = totalTime === 0 ? 0 : workTime * 3600 / totalTime * loadingQuantity
var priceQuota = capacity === 0 || operationCount === 0 ? 0 : dayWage / operationCount / capacity
this.form['标准产能(件/天)'] = Number(capacity.toFixed(4))
this.form.工价定额 = Number(priceQuota.toFixed(4))
this.form['日产能(件)'] = this.form['标准产能(件/天)']
@@ -872,6 +876,10 @@ export default {
param[15] = ['备注', this.form.备注]
param[16] = ['工序流水号', this.form.工序流水号]
param[17] = ['修改人', this.id]
// 修改人:Ld 修改时间:2026-08-08 10:24:44; 保存截图公式的 F、G、H 输入值,后端按新公式统一计算 I、J
param[18] = ['工作时间时', this.form['工作时间(时)']]
param[19] = ['宽放时间时', this.form['宽放时间(时)']]
param[20] = ['日工资元', this.form['日工资(元)']]
var Data = this.CreateData('12', '车间生产管理工艺_工序工价_编辑数据', param)
this.ExecDatabase(Data).then(response => {
if (response.data && response.data[0] && response.data[0].result === '1') {

View File

@@ -232,22 +232,6 @@
<!-- 修改人:Ld 修改时间:2026-08-04 09:16:54; 弹窗改为APS排产格式并按照操作者分组展示 -->
<el-dialog :visible.sync="machineTaskVisible" :close-on-click-modal="false" :title="machineTaskTitle" width="1200px" top="50px">
<div v-loading="machineTaskLoading" class="machine-aps">
<div class="machine-aps-toolbar">
<span class="machine-aps-toolbar-label">时间筛选</span>
<el-date-picker
v-model="machineTaskDateRange"
:default-time="['00:00:00', '23:59:59']"
end-placeholder="结束日期"
range-separator=""
size="small"
start-placeholder="开始日期"
style="width: 310px"
type="daterange"
value-format="yyyy-MM-dd"
@change="changeMachineTaskDateRange"/>
<el-button size="small" plain icon="el-icon-refresh-left" style="margin-left: 10px" @click="resetMachineTaskDateRange">重置</el-button>
<span class="machine-aps-toolbar-tip">按任务派工与完工时间区间筛选</span>
</div>
<div v-if="machineTaskDisplayData.length === 0 && !machineTaskLoading" class="machine-aps-empty">暂无后续已派工任务</div>
<div v-else class="machine-aps-scroll">
<div :style="{ width: machineApsInnerWidth + 'px' }" class="machine-aps-inner">
@@ -341,7 +325,6 @@ export default {
machineTaskLoading: false,
machineTaskTitle: '机床后续已派工任务',
machineTaskData: [],
machineTaskDateRange: [],
// 修改人:Ld 修改时间:2026-08-04 09:16:54; APS排产弹窗的固定轴尺寸保持展示稳定。
machineApsDayWidth: 88,
machineApsPersonWidth: 118,
@@ -503,27 +486,19 @@ export default {
}
})
},
// 修改人:Ld 修改时间:2026-08-04 14:30:24; 弹窗时间筛选后的任务集合,按派工时间与完工期限区间过滤
// 修改人:Ld 修改时间:2026-08-05 13:24:30; 方案三弹窗只显示今天及之后的任务,之前的任务不再展示
machineTaskDisplayData() {
if (!this.machineTaskDateRange || this.machineTaskDateRange.length !== 2) {
return this.machineTaskData
}
var startDate = this.parseApsDate(this.machineTaskDateRange[0])
var endDate = this.parseApsDate(this.machineTaskDateRange[1])
if (!startDate || !endDate) {
return this.machineTaskData
}
if (endDate.getTime() < startDate.getTime()) {
var tempDate = startDate
startDate = endDate
endDate = tempDate
}
var today = this.clearApsDate(new Date())
return this.machineTaskData.filter(row => {
var rowStart = this.parseApsDate(row.分配时间) || this.parseApsDate(row.精工期限)
var rowEnd = this.parseApsDate(row.精工期限) || rowStart
if (!rowStart) return false
if (!rowEnd) rowEnd = rowStart
return rowStart.getTime() <= endDate.getTime() && rowEnd.getTime() >= startDate.getTime()
return this.clearApsDate(rowEnd).getTime() >= today.getTime()
}).sort((a, b) => {
var aDate = this.parseApsDate(a.分配时间) || this.parseApsDate(a.精工期限) || today
var bDate = this.parseApsDate(b.分配时间) || this.parseApsDate(b.精工期限) || today
return this.clearApsDate(aDate).getTime() - this.clearApsDate(bDate).getTime()
})
}
},
@@ -607,6 +582,8 @@ export default {
_completedProcesses: 0,
// 修改人:Ld 修改时间:2026-08-04 08:56:51; 记录每个OP工序是否完成用于单元格标绿。
_completedOpMap: {},
// 修改人:Ld 修改时间:2026-08-05 10:18:41; 记录正在生产中的OP工序用于单元格标黄。
_producingOpMap: {},
...this.initializeProcessFields()
}
},
@@ -644,6 +621,9 @@ export default {
if (row._completedOpMap && row._completedOpMap[opKey]) {
return 'op-process-completed'
}
if (row._producingOpMap && row._producingOpMap[opKey]) {
return 'op-process-producing'
}
return ''
},
// 修改人:Ld 修改时间:2026-08-04 14:57:36; 合同编号优先取方案一真实关联合同号,没有时保留原提取关联值。
@@ -679,7 +659,6 @@ export default {
this.machineTaskData = []
this.machineTaskVisible = true
this.machineTaskLoading = true
this.machineTaskDateRange = []
var Data = this.CreateData('11', '精工车间_工况_分页查询', param)
this.ExecDatabase(Data).then(response => {
if (response.data && response.data.result) {
@@ -703,14 +682,6 @@ export default {
}
return value
},
// 修改人:Ld 修改时间:2026-08-04 14:30:24; 切换弹窗时间范围后刷新APS排产展示。
changeMachineTaskDateRange() {
this.$forceUpdate()
},
resetMachineTaskDateRange() {
this.machineTaskDateRange = []
this.$forceUpdate()
},
// 修改人:Ld 修改时间:2026-08-04 09:16:54; APS排产视图日期解析兼容后端日期字符串。
parseApsDate(value) {
if (!value) return null
@@ -763,9 +734,22 @@ export default {
} else {
group.状态 = '生产中'
}
this.markProducingProcess(group)
delete group._totalProcesses
delete group._completedProcesses
},
// 修改人:Ld 修改时间:2026-08-05 10:18:41; 生产中订单将第一个未完成OP工序标记为正在生产。
markProducingProcess(group) {
group._producingOpMap = {}
if (group.状态 !== '生产中') return
for (let i = 1; i <= this.processConfig.maxProcessCount; i++) {
var opKey = this.processConfig.processNamePattern.replace('{index}', i)
if (group[opKey] && !(group._completedOpMap && group._completedOpMap[opKey])) {
group._producingOpMap[opKey] = true
return
}
}
},
// 数据分组主逻辑
groupDataByOrder(data) {
const grouped = {}
@@ -803,7 +787,7 @@ export default {
this.filteredTableData.forEach((row, index) => {
data.push(this.buildProductionPlanExportRow(row, index))
})
var ws = XLSX.utils.aoa_to_sheet(data)
var ws = this.getProductionPlanSheetFromArray(data)
var range = XLSX.utils.decode_range(ws['!ref'])
ws['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: headers.length - 1 }}]
ws['!cols'] = this.getProductionPlanExportCols()
@@ -819,17 +803,56 @@ export default {
var opKey = headers[colIndex]
if (exportRow && exportRow._completedOpMap && exportRow._completedOpMap[opKey]) {
ws[cellAddress].s = this.getProductionPlanCompletedOpExportStyle()
} else if (exportRow && exportRow._producingOpMap && exportRow._producingOpMap[opKey]) {
ws[cellAddress].s = this.getProductionPlanProducingOpExportStyle()
}
}
}
}
ws['!autofilter'] = { ref: XLSX.utils.encode_range({ s: { r: 1, c: 0 }, e: { r: Math.max(1, range.e.r), c: headers.length - 1 }}) }
var wb = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(wb, ws, this.getProductionPlanExportSheetName())
var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'array' })
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), this.getProductionPlanExportFileName())
var sheetName = this.getProductionPlanExportSheetName()
var wb = { SheetNames: [sheetName], Sheets: {}, Props: {}}
wb.Sheets[sheetName] = ws
var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })
FileSaver.saveAs(new Blob([this.productionPlanStringToArrayBuffer(wbout)], { type: 'application/octet-stream' }), this.getProductionPlanExportFileName())
this.$message.success('导出成功')
},
// 修改人:Ld 修改时间:2026-08-05 08:13:25; 兼容项目当前 xlsx-style 版本,手动将二维数组转换为 worksheet。
getProductionPlanSheetFromArray(data) {
var ws = {}
var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 }}
for (let rowIndex = 0; rowIndex < data.length; rowIndex++) {
for (let colIndex = 0; colIndex < data[rowIndex].length; colIndex++) {
if (range.s.r > rowIndex) range.s.r = rowIndex
if (range.s.c > colIndex) range.s.c = colIndex
if (range.e.r < rowIndex) range.e.r = rowIndex
if (range.e.c < colIndex) range.e.c = colIndex
var value = data[rowIndex][colIndex]
if (value === null || value === undefined) continue
var cell = { v: value }
if (typeof value === 'number') {
cell.t = 'n'
} else if (typeof value === 'boolean') {
cell.t = 'b'
} else {
cell.t = 's'
}
ws[XLSX.utils.encode_cell({ r: rowIndex, c: colIndex })] = cell
}
}
if (range.s.c < 10000000) {
ws['!ref'] = XLSX.utils.encode_range(range)
}
return ws
},
productionPlanStringToArrayBuffer(value) {
var buffer = new ArrayBuffer(value.length)
var view = new Uint8Array(buffer)
for (let i = 0; i < value.length; i++) {
view[i] = value.charCodeAt(i) & 0xFF
}
return buffer
},
getProductionPlanExportHeaders() {
return ['序号', '状态', '合同编号', '订单编号', '收货人', '投产日期', '订单交货日期', '数量', '总工序', '实际 工序', '产品名称', '零件名称', '零件图号', '材料', '完成率', '当前状态或设备', 'OP010', 'OP020', 'OP030', 'OP040', 'OP050', 'OP060', 'OP070', 'OP080', 'OP090', 'OP100', 'OP110']
},
@@ -935,7 +958,7 @@ export default {
}
if (rowIndex === 1) {
baseStyle.font.bold = false
baseStyle.fill = { fgColor: { rgb: 'FFFFFF' }}
baseStyle.fill = { patternType: 'solid', fgColor: { rgb: 'FFFFFF' }}
return baseStyle
}
if (colIndex === 11 || colIndex === 12) {
@@ -958,9 +981,24 @@ export default {
return baseStyle
},
getProductionPlanCompletedOpExportStyle() {
// 修改人:Ld 修改时间:2026-08-05 08:13:25; xlsx-style 导出填充色指定 solid保证已完成工序绿色显示。
return {
font: { name: '微软雅黑', sz: 10, bold: false, color: { rgb: 'FFFFFF' }},
fill: { fgColor: { rgb: '67C23A' }},
fill: { patternType: 'solid', fgColor: { rgb: '67C23A' }},
alignment: { horizontal: 'center', vertical: 'center', wrapText: true },
border: {
top: { style: 'thin', color: { rgb: '000000' }},
bottom: { style: 'thin', color: { rgb: '000000' }},
left: { style: 'thin', color: { rgb: '000000' }},
right: { style: 'thin', color: { rgb: '000000' }}
}
}
},
// 修改人:Ld 修改时间:2026-08-05 10:18:41; xlsx-style 导出填充色指定 solid保证正在生产工序黄色显示。
getProductionPlanProducingOpExportStyle() {
return {
font: { name: '微软雅黑', sz: 10, bold: true, color: { rgb: '000000' }},
fill: { patternType: 'solid', fgColor: { rgb: 'FFC000' }},
alignment: { horizontal: 'center', vertical: 'center', wrapText: true },
border: {
top: { style: 'thin', color: { rgb: '000000' }},
@@ -1278,6 +1316,17 @@ export default {
border-radius: 2px;
}
/* 修改人:Ld 修改时间:2026-08-05 10:18:41; 生产中OP工序标黄不改变原表格布局。*/
.op-process-producing {
display: inline-block;
width: 100%;
min-height: 20px;
line-height: 20px;
color: #303133;
background-color: #FFC000;
border-radius: 2px;
}
/* 修改人:Ld 修改时间:2026-08-04 09:07:29; 保持当前状态列宽不变,仅增加机床可点击提示。 */
.machine-task-link {
width: 100%;
@@ -1294,27 +1343,6 @@ export default {
background: #fff;
}
.machine-aps-toolbar {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 12px;
border-bottom: 1px solid #DCDFE6;
background: #FAFBFC;
}
.machine-aps-toolbar-label {
color: #303133;
font-size: 12px;
font-weight: bold;
}
.machine-aps-toolbar-tip {
margin-left: 4px;
color: #909399;
font-size: 12px;
}
.machine-aps-empty {
height: 460px;
line-height: 460px;

View File

@@ -596,6 +596,8 @@ export default {
// 确保orderName1已加载
if (this.orderName1.length === 0) {
await new Promise(resolve => {
// 修改人:Ld 修改时间:2026-08-05 09:35:00; 补全订单列表查询参数初始化,避免跳转查询时报 param 未定义。
var param = []
var Data = this.CreateData('11', '生产任务查询_订单信息_列表_查询数据', param)
this.ExecDatabase(Data).then(response => {
for (let i = 0; i < response.data.length; i++) {
@@ -861,6 +863,11 @@ export default {
submit() {
this.$refs['form'].validate((valid) => {
if (valid) {
// 修改人:Ld 修改时间:2026-08-05 09:35:00; 投产数修改时同步校验有效数值,避免空值绕过前端表单。
if (!Number.isFinite(Number(this.form.投产数)) || Number(this.form.投产数) <= 0) {
this.$message.warning('投产数不能为空且必须大于0')
return
}
if (this.productionNum === this.form.投产数) {
this.$message.warning('数量未发生改变')
} else {
@@ -908,7 +915,9 @@ export default {
this.$message.warning('设备不能为空')
return
}
if (row.分配数 === 0) {
// 修改人:Ld 修改时间:2026-08-05 09:35:00; 派工数量为空或非正数时直接拦截,避免空数量进入任务分配表。
if (!Number.isFinite(Number(row.分配数)) || Number(row.分配数) <= 0) {
this.$message.warning('分配数不能为空且必须大于0')
return
}
if (this.loading2) {

View File

@@ -4,21 +4,30 @@
<div class="dispatch-shell">
<section class="filter-panel">
<div class="filter-grid">
<el-select
v-model="orderNameValue"
:remote-method="getOrderName"
<div class="native-order-field">
<!-- 修改人:Ld 修改时间:2026-08-08 14:53:45; 订单号改为原生输入框确保手机软键盘可唤起 -->
<input
v-model="orderNameText"
class="native-order-input"
type="search"
inputmode="search"
autocomplete="off"
placeholder="订单号"
size="small"
filterable
clearable
remote
@change="pageCurrent = 1; getProductName(); searchTable()">
<el-option
v-for="item in orderName1"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
@focus="orderSuggestVisible = true"
@input="handleOrderInput(orderNameText)"
@keydown.enter.prevent="handleOrderEnter">
<button v-if="orderNameText" class="native-order-clear" type="button" @click="handleOrderClear">×</button>
<div v-if="orderSuggestVisible && filteredOrderList.length > 0" class="native-order-list">
<button
v-for="item in filteredOrderList"
:key="item.orderValue"
type="button"
class="native-order-option"
@mousedown.prevent="handleOrderSelect(item)">
{{ item.label }}
</button>
</div>
</div>
<el-select
v-model="productNameValue"
placeholder="产品/部件"
@@ -233,7 +242,10 @@ export default {
return {
// 修改人:Ld 修改时间:2026-07-14 13:12:40; 移动端派工组件状态独立维护,避免影响桌面端页面。
activeTab: 'available',
// 修改人:Ld 修改时间:2026-08-08 14:53:45; 订单号移动端改为原生输入框,解决 Element 输入组件无法唤起手机软键盘问题。
orderNameText: '',
orderNameValue: '',
orderSuggestVisible: false,
orderName1: [],
productNameValue: '',
productName: [],
@@ -275,7 +287,19 @@ export default {
computed: {
...mapGetters([
'id'
])
]),
filteredOrderList() {
const query = this.orderNameText ? String(this.orderNameText).toLowerCase() : ''
return this.orderName1.filter(item => {
return !query || String(item.label).toLowerCase().indexOf(query) > -1
}).slice(0, 50).map(item => {
return {
label: item.label,
value: item.label,
orderValue: item.value
}
})
}
},
watch: {
machineValue(val) {
@@ -338,6 +362,46 @@ export default {
}
})
},
handleOrderSelect(item) {
this.orderNameText = item.label
this.orderNameValue = item.orderValue
this.orderSuggestVisible = false
this.pageCurrent = 1
this.getProductName()
this.searchTable()
},
handleOrderInput(value) {
const selected = this.orderName1.find(item => item.label === value)
if (selected) {
this.orderNameValue = selected.value
} else {
this.orderNameValue = ''
this.productNameValue = ''
this.productName = []
}
},
handleOrderClear() {
this.orderNameText = ''
this.orderNameValue = ''
this.productNameValue = ''
this.productName = []
this.orderSuggestVisible = false
this.pageCurrent = 1
this.searchTable()
},
handleOrderEnter() {
const selected = this.orderName1.find(item => item.label === this.orderNameText)
if (selected) {
this.handleOrderSelect({
label: selected.label,
orderValue: selected.value
})
} else {
this.orderSuggestVisible = false
this.pageCurrent = 1
this.searchTable()
}
},
getProductName() {
this.productNameValue = ''
this.productName = []
@@ -466,8 +530,9 @@ export default {
this.$message.warning('设备不能为空')
return
}
if (Number(row.分配数) === 0) {
this.$message.warning('分配数不能为0')
// 修改人:Ld 修改时间:2026-08-05 09:35:00; 派工数量为空或非正数时直接拦截,避免空数量进入任务分配表。
if (!Number.isFinite(Number(row.分配数)) || Number(row.分配数) <= 0) {
this.$message.warning('分配数不能为空且必须大于0')
return
}
if (this.loadingSubmit) {
@@ -534,6 +599,11 @@ export default {
submit() {
this.$refs['form'].validate((valid) => {
if (valid) {
// 修改人:Ld 修改时间:2026-08-05 09:35:00; 投产数修改时同步校验有效数值,避免空值绕过前端表单。
if (!Number.isFinite(Number(this.form.投产数)) || Number(this.form.投产数) <= 0) {
this.$message.warning('投产数不能为空且必须大于0')
return
}
if (this.productionNum === this.form.投产数) {
this.$message.warning('数量未发生改变')
return
@@ -689,6 +759,83 @@ export default {
min-width: 0;
}
.native-order-field {
position: relative;
z-index: 20;
width: 100%;
min-width: 0;
box-sizing: border-box;
}
.native-order-input {
width: 100%;
height: 32px;
min-width: 0;
padding: 0 34px 0 15px;
border: 1px solid #dcdfe6;
border-radius: 4px;
outline: none;
box-sizing: border-box;
color: #606266;
font-size: 13px;
line-height: 32px;
background: #fff;
-webkit-appearance: none;
}
.native-order-input:focus {
border-color: #409eff;
}
.native-order-clear {
position: absolute;
top: 1px;
right: 4px;
width: 30px;
height: 30px;
padding: 0;
border: none;
outline: none;
color: #c0c4cc;
font-size: 20px;
line-height: 30px;
background: transparent;
}
.native-order-list {
position: absolute;
top: 36px;
right: 0;
left: 0;
z-index: 30;
max-height: 260px;
overflow: auto;
border: 1px solid #dcdfe6;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
background: #fff;
}
.native-order-option {
display: block;
width: 100%;
min-height: 34px;
padding: 0 12px;
border: none;
border-bottom: 1px solid #f0f2f5;
outline: none;
box-sizing: border-box;
color: #606266;
font-size: 13px;
line-height: 34px;
text-align: left;
background: #fff;
}
.native-order-option:active {
background: #ecf5ff;
}
.quick-actions {
display: flex;
flex-wrap: wrap;

View File

@@ -4,9 +4,8 @@ export const name1_config = `OP1000`
export const name3_config = `OP2000`
export const name4_config = `OP9999`
// 修改人:Ld 修改时间:2026-08-03 16:53:10; 方案一当前仅部署测试库,前端接口切换到测试环境以匹配新增存储过程。
var url = `http://192.168.1.27:8030` // 测试环境 接口端口号 http://192.168.1.27:8031 测试环境管理系统 用户名称:0001 密码:654321
// var url = `http://192.168.1.27:8010` // 正式环境 接口端口号 http://192.168.1.27:8001 正式环境管理系统 用户名称:0000 密码:0000
// var url = `http://192.168.1.27:8030` // 测试环境 接口端口号 http://192.168.1.27:8031 测试环境管理系统 用户名称:0001 密码:654321
var url = `http://192.168.1.27:8010` // 正式环境 接口端口号 http://192.168.1.27:8001 正式环境管理系统 用户名称:0000 密码:0000
var url1 = `http://192.168.1.27:10006` // 立库数据库的接口端口号
// var url = `http://127.0.0.1:10250`
// var url = `http://124.220.15.242:8602`