Files
yl/MES_Manage_View_V20/MES_技术分析报告.md
2026-05-23 14:07:11 +08:00

757 lines
30 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MES_Manage_View_V20 软件项目技术分析报告
> **项目名称**: MacroinfManage_MES (MES_Manage_View_V20)
> **版本**: v1.1.0
> **日期**: 2026-05-18
> **作者**: MESWORK
> **描述**: 山东元利科技有限公司制造执行系统(MES)管理视图平台
---
## 目录
1. [项目概述](#1-项目概述)
2. [技术架构路线](#2-技术架构路线)
3. [前端技术详细分析](#3-前端技术详细分析)
4. [数据库 script.sql 详细解析](#4-数据库-scriptsql-详细解析)
5. [程序问题分析报告](#5-程序问题分析报告)
---
## 1. 项目概述
| 属性 | 内容 |
|------|------|
| 项目名称 | MacroinfManage_MES (MES_Manage_View_V20) |
| 版本 | v1.1.0 |
| 基础模板 | vue-element-admin (PanJiaChen) |
| 数据库 | Microsoft SQL Server 2019 (兼容级别150) |
| 数据库名 | YL_MESDB |
| 外部集成 | SAP Business One (跨库查询) |
| 设备通信 | MQTT 4.3.7 (物联网设备实时数据) |
---
## 2. 技术架构路线
```
┌──────────────────────────────────────────────────────────────────┐
│ 前端层 (Frontend) │
│ Vue 2.7.16 + Element UI 2.15.14 + Webpack 5 │
│ ├── Vue Router 3.6.5 (权限动态路由) │
│ ├── Vuex 3.6.2 (全局状态管理) │
│ ├── Axios 0.21.4 (HTTP 通信) │
│ ├── ECharts 5.4.3 (数据可视化/看板) │
│ ├── FullCalendar 6.1.x (排产日历) │
│ ├── MQTT 4.3.7 (设备实时数据/物联网通信) │
│ └── xlsx / jspdf / docxtemplater (报表导出) │
├──────────────────────────────────────────────────────────────────┤
│ 中间层 (Middleware) │
│ ├── ASP.NET / Node.js 后端API服务 │
│ └── 存储过程调用 (后端直接调用SQL Server存储过程) │
├──────────────────────────────────────────────────────────────────┤
│ 数据库层 (Database) │
│ Microsoft SQL Server 2019 (兼容级别150) │
│ 数据库名: YL_MESDB │
│ ├── 30+ 数据表 │
│ ├── 20+ 视图 │
│ ├── 1 用户自定义函数 │
│ ├── 60+ 存储过程 │
│ └── 外部数据源: SAP.SBO_YL (SAP Business One) │
├──────────────────────────────────────────────────────────────────┤
│ 外部集成 (Integration) │
│ ├── SAP Business One (ERP系统跨数据库查询) │
│ │ ├── SAP.SBO_YL.dbo.UBT_OITM (物料主数据) │
│ │ ├── SAP.SBO_YL.dbo.UBT_WW_MES_OPORandOPCH (采购订单) │
│ │ └── SAP.SBO_YL.dbo.OWOR / OWR1 / OWR4 (生产订单) │
│ ├── 设备PLC/SCADA (通过MQTT协议采集实时数据) │
│ └── 文件服务器 (图纸/附件存储) │
└──────────────────────────────────────────────────────────────────┘
```
---
## 3. 前端技术详细分析
### 3.1 核心框架与依赖
| 类别 | 技术 | 版本 | 用途 |
|------|------|------|------|
| 框架 | Vue.js | 2.7.16 | SPA 核心框架 |
| UI库 | Element UI | 2.15.14 | 企业级UI组件 |
| 路由 | Vue Router | 3.6.5 | 动态权限路由 |
| 状态管理 | Vuex | 3.6.2 | 全局状态 |
| HTTP | Axios | 0.21.4 | API通信 |
| 图表 | ECharts | 5.4.3 | 看板/统计图表 |
| 日历 | FullCalendar | 6.1.17 | 排产甘特视图 |
| IoT | MQTT.js | 4.3.7 | 设备实时数据订阅 |
| 构建 | Webpack | 5.89.0 | 模块打包 |
| PDF | jsPDF / html2canvas | 2.5.1 / 1.4.1 | PDF导出 |
| Excel | xlsx | 0.18.5 | 表格导入导出 |
| Word | docxtemplater | 3.42.0 | Word模板生成 |
| 条码 | qrcode | 1.5.3 | 二维码生成 |
| PDF预览 | pdfjs-dist | 5.1.91 | 图纸在线预览 |
### 3.2 项目目录结构 (src/)
```
src/
├── main.js # 入口文件,全局注册
├── App.vue # 根组件
├── permission.js # 路由守卫/权限控制
├── api/ # API接口层
│ └── login.js # 登录/密码修改API
├── router/
│ ├── index.js # 路由配置
│ ├── getTreeData.js # 动态菜单树生成
│ └── menuComponentModule.js # 菜单组件映射
├── store/
│ ├── index.js # Vuex Store 入口
│ └── modules/
│ ├── app.js # 应用全局状态
│ ├── user.js # 用户状态(登录/登出)
│ ├── login.js # 登录时间跟踪
│ ├── permission.js # 权限路由状态
│ └── tagsView.js # 标签页状态
├── views/ # 业务视图模块
│ ├── layout/ # 布局组件
│ ├── login/ # 登录页
│ ├── dashboard/ # 看板首页
│ └── [业务模块]/ # 各MES业务模块
├── components/ # 公用组件
├── styles/ # 全局样式
├── utils/
│ ├── auth.js # Token管理(Cookie)
│ ├── request.js # Axios实例配置
│ └── curd.js # 通用增删改查
├── directive/ # 自定义指令
│ └── el-dragDialog/ # 对话框拖拽指令
├── icons/ # SVG图标
└── vendor/ # 第三方工具(htmlToPdf)
```
### 3.3 权限控制机制
```
1. 用户登录 → 后端验证用户名/密码 → 返回角色列表
2. 选择登录角色 → setToken(角色编号) → Cookie存储
3. 路由守卫 permission.js 拦截:
├── 无Token → 重定向 /login
└── 有Token → GetInfo() → getTreeData() 构建动态路由树
→ GenerateRoutes → router.addRoutes()
```
---
## 4. 数据库 script.sql 详细解析
### 4.1 数据库基础配置
```sql
: YL_MESDB
: D:\sqlData\YL_MESDB.mdf ( ~6.9GB, 64MB)
: D:\sqlDataLog\YL_MESDB_log.ldf ( ~263GB, 2048GB)
: 150 (SQL Server 2019)
: FULL ()
: DATABASE_DEFAULT
```
### 4.2 核心业务表一览
#### 生产计划与任务
| 表名 | 主键 | 说明 |
|------|------|------|
| `MES_接口_生产计划` | 订单编号 (int) | 从ERP同步的生产订单主表 |
| `MES_接口_生产计划_生产任务` | AID (bigint) | 工序级任务拆分表UK: (订单编号+订单行号+订单拆分内码) |
| `MES_接口_生产计划_生产任务_子任务` | AID | 子任务(二次派工) |
| `MES_接口_工艺路线主数据` | AID (int) | 工艺路线主数据接口表 |
**`MES_接口_生产计划_生产任务` 关键字段**:
| 字段 | 类型 | 说明 |
|------|------|------|
| 任务状态 | int | 0-待执行, 1-可执行, 2-已开工, 4-已完成 |
| 加工状态 | int | 2-辅助开始, 3-辅助结束, 4-开始加工, 5-暂停, 6-报工 |
| 指派对象/编号 | nvarchar(50) | 分配的工位/设备名称与编号 |
| 指派数量 | decimal(16,2) | 本序计划生产数量 |
| 二次派工 | nvarchar(500) | 多人协作分配(逗号分隔人员ID) |
| 进度 | decimal(16,2) | 完成百分比 |
#### 资源与人员
| 表名 | 主键 | 说明 |
|------|------|------|
| `MES_资源主数据` | VisCode (nvarchar(50)) | 设备/工位主数据(SAP同步) |
| `登录基础数据_人员信息` | Personnel_Number (int) | 人员账号表, UK: account |
| `登录基础数据_角色信息` | Roles_number (int) | 角色定义表 |
| `登录基础数据_人员权限角色` | ID (int) | 人员-角色多对多关联 |
| `登录基础数据_二级菜单` | IDD (int) | 菜单/路由配置表 |
| `登录基础数据_部门` | 部门编号 (int) | 组织架构 |
| `工位人员绑定表` | 绑定编号 (int) | 工位-人员绑定关系 |
| `班次表` | 班次编号 (nvarchar(50)) | 班次定义(白班07:45-16:30, 夜班16:30-00:40) |
| `班次人员绑定表` | 绑定ID (int) | 人员-班次绑定 |
#### 操作记录与工时
| 表名 | 主键 | 说明 |
|------|------|------|
| `YL_加工中心_操作记录表` | AID (int) | **核心操作记录表**,含暂停/恢复/报工全流程 |
| `YL_加工中心_报工记录` | AID (int) | 报工确认记录(生产工时/辅助工时) |
| `生产管理_工时校验_校验工时表` | AID (int) | 工时审核校验(上传工时 vs 系统计算工时) |
**操作记录表关键字段**: `总时长`, `暂停总时长`, `实际工时` = 总时长 - 暂停总时长
| 操作类别 | 说明 |
|----------|------|
| 收料 | 物料接收确认 |
| 开始加工 / 辅助开始 | 生产/辅助启动 |
| 暂停 | 暂停加工 |
| 报工 / 辅助结束 | 完成报工 |
| 首检 | 首件质量检验 |
| 加班 / 休息日加班 / 法定休息日加班 | 加班工时记录 |
#### 质量管理
| 表名 | 主键 | 说明 |
|------|------|------|
| `YL_质量检验_质检记录` | QT_AID (bigint) | 质检主记录 |
| `YL_质量检验_质检记录_检测零件` | LJ_AID (bigint) | 每个被检零件的检测结果(1合格/0不合格) |
| `YL_质量检验_质检记录_检测数据` | AID (bigint) | 检测项目明细(理论值/上限/下限/实测值) |
| `YL_质量检验_检测标准` | AID (int) | 各物料工序的检测标准 |
| `YL_质量检验_量具信息` | AID (int) | 量具台账 |
| `YL_质量检验_不合格品处理` | FlowAID (int) | 不合格品处理流程(让步放行申请) |
| `YL_质量检验_不合格品处理_处理节点` | (FlowAID, FlowNodeID) | 审批流程节点 |
| 检测类型编号 | 质检类型 |
|-------------|----------|
| 1 | 首检自检 |
| 3 | 序检自检 |
| 6 | 收检 (跨工序接收检验) |
| 8 | 终检 (最终检验) |
#### 设备管理
| 表名 | 主键 | 说明 |
|------|------|------|
| `YL_设备管理_设备台账` | 设备ID (int) | 设备主数据, UK: 设备编号 |
| `YL_设备管理_维修记录` | AID (int) | 设备故障维修记录 |
| `YL_设备管理_工时记录` | ID (int) | 设备循环时间采集记录 |
| `YL_设备管理_设备生产状态_Moby` | AID | 设备实时生产状态 |
| `YL_设备管理_设备生产状态_Moby_历史记录` | AID | 设备状态变更历史 |
| `基础数据_设备工位点检表` | 设备流水号 (int) | 设备点检清单 |
#### 实时监控与历史数据
| 表名 | 主键 | 说明 |
|------|------|------|
| `CaChe_Var` | AID (int) | 设备变量实时缓存 |
| `历史_设备数据_定时` | AID (bigint) | 设备变量历史数据 |
| `历史_工位设备状态每分钟记录` | AID_N (bigint) | 每分工位状态快照(含电流/电压/功率) |
| `报警_记录_历史` | AID (int) | 报警历史记录 |
| `报警_记录_历史_缓存` | AID (int) | 当前活跃报警缓存 |
| `设备信息缓存表` | (无主键) | 工位任务信息缓存 |
| `记录_日志_项目运行日志` | AID (bigint) | API请求/响应日志 |
| `_日志` | ID (int) | 用户操作审计日志 |
#### 工艺与技术文档
| 表名 | 主键 | 说明 |
|------|------|------|
| `基础表_工序` | 工艺编号 (int) | 工序基础数据 |
| `车间生产管理工艺_零件工序_工艺库` | id (int) | 标准工艺路线库 |
| `车间生产管理工艺_零件生产工艺_工艺库` | id (int) | 生产订单关联工艺库(含订单编号) |
| `物料基础数据_零件图纸` | id (int) | 零件图纸文件元数据 |
| `物料基础数据_工艺图纸` | id (int) | 工艺图纸文件元数据 |
| `物料基础数据_零件图纸删除记录` | ID (int) | 图纸删除审计日志 |
#### 工作流与审批
| 表名 | 主键 | 说明 |
|------|------|------|
| `流程表` | 流程ID (int) | 审批流程主表 |
| `流程节点表` | 节点ID (int) | 审批流程节点 |
| `流程完成记录表` | 完成记录ID (int) | 流程完成记录 |
| `流程转办表` | 转办ID (int) | 审批转办记录 |
| `审批记录表` | 记录ID (int) | 审批意见记录 |
#### 其他
| 表名 | 说明 |
|------|------|
| `物料数据` | 物料主数据缓存 |
| `BOM数据` | BOM物料清单 |
| `YL_基础表_数据字典` | 全局数据字典(操作类别/班次/报工确认等) |
| `Attachments` | 文件附件管理 |
| `质量检验_质检任务_SAP` | SAP来料检验任务 |
### 4.3 关键视图分析
| 视图名称 | 功能描述 |
|----------|----------|
| `View_生产订单_MES` | **核心视图**:联合生产计划+生产任务+资源+图纸的完整视图 |
| `View_生产订单全部包括已关闭` | 同上但不过滤已关闭订单 |
| `View_生产工时视图` | 整合操作记录+校验工时+生产订单的多表联查 |
| `View_校验后的生产工时` | 仅显示已校验通过的生产工时 |
| `v_CurrentProductionStatus` | **当前生产状态看板**:机加+装配UNION含人员名称聚合 |
| `View_外协报表视图` | 外协工序完整报表联查SAP采购数据(s.含税行总计, s.供应商名称) |
| `View_设备工位人员` | 设备-工位-人员-班次四维关联视图 |
| `View_标准工艺视图` | 标准工艺+零件+工序关联 |
| `View_生产工艺视图` | 生产订单工艺+物料+订单状态 |
| `View_质检明细` | 质检记录+工位+合同号完整明细 |
| `View_外协质检` | 外协收检记录视图 |
| `View_装配信息` | 装配送检数/质检合格数统计 |
| `View_生产订单完工` | 复杂完工判定逻辑(合格数+不合格数=计划数量) |
| `View_终检状态` | 终检记录关联 |
| `View_账号权限信息` | 人员-角色-菜单完整权限链路 |
| `登录基础数据_管理人员权限视图` | 角色-人员-部门多维视图 |
| `计划任务视图` | 工艺编号+订单编号+物料名称 |
### 4.4 用户自定义函数 (UDF)
#### `计算班次重叠秒数`
```sql
(@ datetime, @ datetime,
@ time, @ time) RETURNS int
```
- 逐日循环计算打卡时间和班次时间的重叠秒数
- 支持跨天班次(如夜班16:30-00:30)
- 限制最大3天计算范围防止无限循环
- 用于工时计算和加班判断
### 4.5 关键存储过程分析
#### 生产排产
| 存储过程 | 功能 |
|----------|------|
| `MES_OrderPlanned_SingleTaskPlanned` | **核心排产逻辑**:单任务拆分。当计划数量>指派数量时创建拆分任务;当计划数量<指派数量时删除未分配任务 |
| `MES_OrderPlanned_Finish` | 批量排产确认通过OPENJSON解析JSON任务列表更新指派信息 |
| `MES_OrderPlanned_EditTaskPlanned` | 动态SQL编辑任务排产字段 |
| `MES_OrderPlanned_ChildTask_Add` | 子任务(二次派工)新增 |
| `MES_OrderPlanned_Query` / `_Queryzp` | 排产查询(自制件/装配件) |
| `__Reset_ProductOrder` | 重置订单(排产或加工中心数据) |
#### 加工中心操作
| 存储过程 | 功能 |
|----------|------|
| `MES_ProductTask_MaterialRecieved` | 收料操作:更新收料数量,当收料>0时任务状态变为可执行 |
| `MES_ProductTask_WorkingStart` | 开始加工:任务状态变为已开工(2),自动同步上序合格数作为收料数 |
| `MES_ProductTask_Rest` | 暂停操作:加工状态变为暂停 |
| `MES_ProductTask_ProdReport` | **报工核心**:含完整加班计算(白班/夜班拆分、休息日/法定休息日处理)、捆绑报工、前序不合格数处理、报工记录双插入(生产工时+辅助工时) |
| `MES_ProductTask_HelpStart` | 辅助开始 |
| `MES_ProductTask_HelpEnd` | 辅助结束:含加班时长计算、班次判断、特殊加班人员处理 |
| `MES_ProductTask_FirstCheck` | 首检操作 |
| `MES_ProductTask_Excutable` | 标记任务为可执行 |
| `MES_ProductTask_SendInspection` | 送检(装配报工) |
| `MES_ProductCenter_OptRecord_Save` | **操作记录保存核心**:处理暂停/开始/报工的联动逻辑,计算工时 |
| `MES_ProductCenter_OptRecords` | 操作记录查询 |
#### 人员工时(装配)
| 存储过程 | 功能 |
|----------|------|
| `MES_人员工时记录_开始` | 装配人员开始加工记录 |
| `MES_人员工时记录_结束` | 装配人员结束加工:含白班/加班/休息日完整计算,生成报工记录和加班记录 |
| `MES_人员工时记录_检查是否存在` | 检查是否有未结束的开始记录 |
| `MES_人员工时记录_获取进行中任务` | 按用户ID获取进行中的装配任务 |
#### 质量管理
| 存储过程 | 功能 |
|----------|------|
| `MES_QulityInspection_ReceiveCheck` | **收检处理**:事务性写入质检记录,总检测数=计划生产数时自动完成任务,收检合格后触发下一工序可执行 |
| `MES_QulityInspection_FinalCheck` | 终检记录 |
| `MES_QulityInspection_CheckItemData_Save` | **检测数据保存**:事务性三级写入(质检主表→零件表→检测数据表),支持批量零件检测 |
| `MES_QulityInspection_FirstCheckRecords` | 首检记录查询 |
| `MES_QulityInspection_RoundCheck` | 巡检操作 |
| `MES_QulityInspection_ProcessCheck` | 序检操作 |
| `MES_QulityInspection_GetItemStandard` | 获取检测标准 |
| `MES_QulityInspection_GetInspectionDetails` | 获取检测明细数据 |
| `MES_QulityInspection_GetInspectionParts` | 获取检测零件列表 |
| `MES_QulityInspection_NGPart_Add` | 不合格品处理流程发起 |
| `MES_QulityInspection_NGPart_FlowNode_Add` | 审批节点新增 |
| `MES_QulityInspection_NGPart_FlowNode_Update` | 审批节点完成 |
| `MES_QulityInspection_NGPart_Finish` | 不合格品处理流程结束 |
#### 设备管理与实时监控
| 存储过程 | 功能 |
|----------|------|
| `MES_DeviceAdmin_BaseInfo` | 设备台账新增 |
| `MES_DeviceAdmin_RepairRecords_Add/Query` | 维修记录增查 |
| `MES_DeviceAdmin_DeviceProductState_Update` | 设备生产状态更新(含历史记录) |
| `Event_CaChe_Var_Update` | 设备变量实时缓存更新(含循环时间触发工时记录) |
| `Event_Device_Insert_CurrInfo` | 设备数据历史写入 |
| `Event_Device_Update_CurrInfo` | 设备变量当前值更新 |
| `Event_StationStatus_Insert/Update` | 工位状态记录/更新 |
| `Event_Alarm_Start/End` | 报警开始/结束处理(含缓存→历史迁移) |
| `Event_Log_Request/Respond` | API请求/响应日志 |
#### 登录与用户
| 存储过程 | 功能 |
|----------|------|
| `MES_登录_工号密码验证` | 用户登录验证(查询基础表_用户角色) |
| `MES_登录_工位与名称_查询` | 获取工位列表(来自View_基础数据_工位) |
| `MES_登录_班次信息` | 获取班次数据字典 |
| `Prog_MES_GetDictionar_ByType` | 按类别获取数据字典 |
#### 系统工具
| 存储过程 | 功能 |
|----------|------|
| `___DB_BAK` | 数据库全量备份到 C:\_MW\数据库\ |
| `_日志_增加` | 用户操作日志插入 |
| `p_PopFirstWord` | 逗号分隔字符串解析工具函数 |
### 4.6 外部系统集成 (SAP Business One)
```
跨数据库查询链路:
├── SAP.SBO_YL.dbo.UBT_OITM → 物料主数据(编码/名称/品牌)
├── SAP.SBO_YL.dbo.UBT_WW_MES_OPORandOPCH → 采购订单(供应商/含税单价/材质)
├── SAP.SBO_YL.dbo.OWOR → 生产订单(ERP侧)
├── SAP.SBO_YL.dbo.OWR1 → 生产订单行
└── SAP.SBO_YL.dbo.OWR4 → 生产订单阶段
```
### 4.7 核心数据流
```
ERP(SAP)订单下发
MES_接口_生产计划 (订单同步)
排产 (MES_OrderPlanned_SingleTaskPlanned)
│ └── 任务拆分/工位指派/计划时间设定
MES_接口_生产计划_生产任务 (工序级任务)
├── 收料 → 任务状态: 0(待执行) → 1(可执行)
├── 开始加工 → 任务状态: 1 → 2(已开工)
│ │
│ ├── 暂停/恢复循环 (关联开始记录 ↔ 关联暂停记录)
│ │
│ └── 报工 → 计算工时(总时长-暂停总时长)
│ │
│ ├── 生成报工记录(生产工时+辅助工时)
│ ├── 判断加班(白班/夜班拆分/休息日)
│ └── 任务状态: 2 → 4(已完成)
├── 首检 → 巡检 → 序检 (质检环节)
├── 收检 (MES_QulityInspection_ReceiveCheck)
│ │ 合格数触发下一工序可执行
│ └── 任务状态 → 4(已完成)
└── 终检 → 完工判定
```
---
## 5. 程序问题分析报告
### 🔴 严重问题 (Critical)
#### 问题 1SQL注入漏洞 — 60+个存储过程
**位置**: `script.sql` 中几乎所有动态SQL存储过程
所有使用 `sp_executesql` 拼接 `@whereStr` 的存储过程都存在SQL注入风险。用户输入直接通过字符串拼接插入SQL语句
```sql
-- MES_OrderPlanned_Query (line 3303)
if(@<>'') set @selectStrWhere = @selectStrWhere
+ ' and [合同号] like ''%'+@+'%'''
```
**受影响的存储过程 (部分列表)**:
- `MES_OrderPlanned_Query` / `MES_OrderPlanned_Queryzp`
- `MES_ProductAdmin_Query` / `MES_ProductAdmin_GetRptRecords`
- `MES_ProductCenter_OptRecords`
- `MES_QulityInspection_CheckRecord_Query`
- `MES_QulityInspection_FirstCheckRecords`
- `MES_QulityInspection_MeasuringTool`
- `MES_QulityInspection_GetTask`
- `MES_ProductCenter_GetTask` / `MES_ProductCenter_GetTask_zp`
**修复建议**: 统一使用参数化查询模式:
```sql
SET @SQL = @SQL + ' AND [合同号] LIKE ''%'' + @合同号 + ''%'''
EXEC sp_executesql @SQL, N'@合同号 nvarchar(50)', @ = @
```
---
#### 问题 2明文密码存储于Cookie
**位置**: `src/views/login/index.vue` line 243-246
```javascript
setCookie(username, password, checked) {
Cookie.set('username', username, { expires: 7 })
Cookie.set('password', password, { expires: 7 }) // ❌ 明文密码存7天
Cookie.set('checked', checked, { expires: 7 })
}
```
密码以明文存储在客户端Cookie中持续7天可被XSS攻击轻易窃取。
---
#### 问题 3Axios已知CVE漏洞版本
**位置**: `package.json` line 17
```json
"axios": "^0.21.4"
```
axios 0.21.4 存在已知安全漏洞 CVE-2021-3749 (ReDoS攻击),当前最新版本为 1.7.x。
---
#### 问题 4开发代理绕过HTTPS证书验证 + 死代码配置
**位置**: `config/index.js` line 18-19, 37-38
```javascript
proxyTable: {
'/api/b1s': {
target: 'https://192.168.2.90:50000', // SAP B1
secure: false, // ❌ 跳过SSL证书验证 — 中间人攻击风险
},
'/openapi/v1': {
target: 'http://192.168.2.90:8082',
pathRewrite: {
'^/api/tm': '/openapi/v1' // ❌ 死代码:/openapi/v1 永远不会匹配 /api/tm
}
}
}
```
第二个代理的 pathRewrite 规则永远无法触发。
---
#### 问题 5登录密码拼在URL参数中
**位置**: `src/api/login.js` line 13
```javascript
param: `用户名=${username}&密码=${password}`
```
密码作为URL查询参数传输会被代理服务器日志、浏览器历史记录记录。
---
### 🟠 高优先级问题 (High)
#### 问题 6修改密码验证器Bug (复制粘贴错误)
**位置**: `src/views/login/index.vue` line 119-130
```javascript
const validateValue = (rules, value, callback) => {
// ❌ 三个条件都检查同一个字段 — 明显的复制粘贴bug
if (typeof (this.form.againPassword) === 'string' ||
typeof (this.form.againPassword) === 'string' ||
typeof (this.form.againPassword) === 'string') {
callback(new Error('请输入英文字母组合')) // ❌ 字符串类型反而报错?
}
// ❌ 下面代码永远不会执行已callback但未return
if (this.form.newPassword !== this.form.againPassword) {
callback(new Error('两次输入密码不同'))
}
}
```
该验证器应用于所有4个密码字段导致密码修改功能**完全无法正常工作**。
---
#### 问题 7Vuex Action中 this.$router 为undefined
**位置**: `src/store/modules/user.js` line 44-45
```javascript
Login({ commit }, userInfo) {
login(username, userInfo.password).then(response => {
if (data.length === 0 || data.result === '0') {
Message.error('账号或密码错误,请重新登录')
this.$router.push({ path: '/login' }) // ❌ Vuex action中this不是Vue组件实例
}
```
在Vuex action中使用 `this.$router` 会抛出 `TypeError: Cannot read properties of undefined`
---
#### 问题 8GetInfo 硬编码角色为 'admin'
**位置**: `src/store/modules/user.js` line 83
```javascript
GetInfo({ commit, state }) {
getInfo(state.token).then(response => {
commit('SET_ROLES', 'admin') // ❌ 无视后端返回的真实角色数据
resolve(response)
})
}
```
所有登录用户都被授予 `'admin'` 角色。`permission.js` 第13行 `roles.indexOf('admin') >= 0` 对所有用户放行,导致权限控制完全失效。
---
#### 问题 9登录错误被静默吞掉
**位置**: `src/views/login/index.vue` line 198-200
```javascript
}).catch(() => {
this.loading = false // ❌ 无任何错误提示
})
```
网络故障或服务器错误时用户看不到任何反馈。
---
#### 问题 10Webpack开发服务器强制HTTPS但无有效证书
**位置**: `build/webpack.dev.conf.js` line 31
```javascript
devServer: {
https: true, // ❌ 未配置证书 → 浏览器报安全错误
```
本地开发时浏览器会因自签名证书阻止访问。
---
### 🟡 中优先级问题 (Medium)
#### 问题 11Vue 2 已于 2023年12月 EOL
Vue 2.x 不再接收安全补丁和新功能。建议规划迁移至 Vue 3。
#### 问题 12生产环境暴露 Source Map
**位置**: `config/index.js` line 110
```javascript
devtool: 'source-map', // 生产环境暴露完整源码
```
用户可通过浏览器开发者工具查看未压缩的完整源码。
#### 问题 13`__Reset_ProductOrder` 存储过程执行 TRUNCATE
**位置**: `script.sql` line 2288-2289
```sql
truncate table YL_加工中心_操作记录表
truncate table YL_加工中心_报工记录
```
`@optType=1` 时无条件清空全部操作记录和报工记录,误调用将导致数据永久丢失且无法回滚。
#### 问题 14数据库日志文件初始263GB
**位置**: `script.sql` line 9
```sql
LOG ON
(NAME = N'YL_MESDB_log', FILENAME = N'D:\sqlDataLog\YL_MESDB_log.ldf',
SIZE = 269688832KB) -- 约263GB
```
恢复模式为FULL但只有全量备份没有事务日志备份日志文件会持续增长直至磁盘占满。
#### 问题 15依赖项问题
**位置**: `package.json` line 26
```json
"install": "^0.13.0" // ❌ "install"是一个真实的npm包但不应作为项目依赖
```
这是脚手架残留或误操作引入。
#### 问题 16关键ESLint规则被关闭
**位置**: `.eslintrc.js` line 83, 153
```javascript
'no-console': 'off',
'no-unused-vars': ['off', { ... }]
```
大量 `console.log` 残留于生产代码,未使用变量不提示。
---
### 🟢 低优先级/建议 (Low)
| # | 问题 | 位置 |
|---|------|------|
| 17 | `vue$` alias 指向 `vue.esm.js` 而非 `vue.runtime.esm.js` | `webpack.base.conf.js` line 32 |
| 18 | webpack dev 使用 `cache.type: 'filesystem'` 可能引起缓存过期问题 | `webpack.dev.conf.js` line 24 |
| 19 | `devServer` 配置使用 Webpack 4 风格 (static/publicPath) | `webpack.dev.conf.js` |
| 20 | `CopyWebpackPlugin` v11 API 已弃用 patterns 外层写法 | `webpack.dev.conf.js` line 61 |
| 21 | SCSS loader 使用 Dart Sass 但配置了 `indentedSyntax: true` | `webpack.base.conf.js` line 165 |
| 22 | 登录页用户名变更时清空密码 (可能非预期行为) | `login/index.vue` line 182 |
| 23 | `config/index.js` 第9行 `networkInterfaces['WLAN']` 硬编码,可能在乙太网卡环境出错 | `config/index.js` line 9 |
| 24 | Vue-loader 配置文件为空对象,未配置任何选项 | `build/vue-loader.conf.js` |
---
### 📊 问题汇总统计
| 级别 | 数量 | 影响 |
|------|------|------|
| 🔴 Critical | 5 | 安全漏洞、数据泄露风险 |
| 🟠 High | 5 | 功能Bug、权限失效、运行时错误 |
| 🟡 Medium | 6 | 可维护性、稳定性风险 |
| 🟢 Low | 7 | 代码质量、最佳实践 |
| **总计** | **23** | |
---
### 🔧 优先修复路线图
**第1阶段 (立即)**:
1. 修复所有SQL注入漏洞 → 动态SQL改用参数化查询
2. 移除Cookie明文密码 → 仅存Token
3. 修复 `validateValue` 验证器Bug
**第2阶段 (本周)**:
4. 升级 axios 到 1.7.x
5. 修复 `GetInfo` 硬编码 admin 角色
6. 修复 `this.$router` 在 Vuex 中的调用
**第3阶段 (本月)**:
7. 配置事务日志定期备份策略
8. 修复 webpack 生产环境 source-map 泄露
9.`__Reset_ProductOrder` 添加安全防护(备份确认/权限限制)
**第4阶段 (规划)**:
10. 规划 Vue 3 迁移路线图
11. 清理无用依赖和死代码
12. 恢复 ESLint 关键规则并修复代码
---
> 📅 报告生成日期: 2026-05-18
> 📝 分析范围: 全项目静态代码分析 (前端 + 数据库)