iframe src更改事件检测?_windows安全事件id汇总

本文列举了各种安全事件ID及其对应的事件描述,涵盖了系统启动关闭、权限变更、账户操作等多个方面,对于理解和排查系统安全事件十分有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

918bc7f8d00d60a7a850a26ca963aa9b.png
EVENT_ID	           安全事件信息
1100	-----      事件记录服务已关闭
1101	-----      审计事件已被运输中断。
1102	-----      审核日志已清除
1104	-----      安全日志现已满
1105	-----      事件日志自动备份
1108	-----      事件日志记录服务遇到错误
4608	-----      Windows正在启动
4609	-----      Windows正在关闭
4610	-----      本地安全机构已加载身份验证包
4611	-----      已向本地安全机构注册了受信任的登录进程
4612	-----      为审计消息排队分配的内部资源已经用尽,导致一些审计丢失。
4614	-----      安全帐户管理器已加载通知包。
4615	-----      LPC端口使用无效
4616	-----      系统时间已更改。
4618	-----      已发生受监视的安全事件模式
4621	-----      管理员从CrashOnAuditFail恢复了系统
4622	-----      本地安全机构已加载安全包。
4624	-----      帐户已成功登录
4625	-----      帐户无法登录
4626	-----      用户/设备声明信息
4627	-----      集团会员信息。
4634	-----      帐户已注销
4646	-----      IKE DoS防护模式已启动
4647	-----      用户启动了注销
4648	-----      使用显式凭据尝试登录
4649	-----      检测到重播攻击
4650	-----      建立了IPsec主模式安全关联
4651	-----      建立了IPsec主模式安全关联
4652	-----      IPsec主模式协商失败
4653	-----      IPsec主模式协商失败
4654	-----      IPsec快速模式协商失败
4655	-----      IPsec主模式安全关联已结束
4656	-----      请求了对象的句柄
4657	-----      注册表值已修改
4658	-----      对象的句柄已关闭
4659	-----      请求删除对象的句柄
4660	-----      对象已删除
4661	-----      请求了对象的句柄
4662	-----      对对象执行了操作
4663	-----      尝试访问对象
4664	-----      试图创建一个硬链接
4665	-----      尝试创建应用程序客户端上下文。
4666	-----      应用程序尝试了一个操作
4667	-----      应用程序客户端上下文已删除
4668	-----      应用程序已初始化
4670	-----      对象的权限已更改
4671	-----      应用程序试图通过TBS访问被阻止的序号
4672	-----      分配给新登录的特权
4673	-----      特权服务被召唤
4674	-----      尝试对特权对象执行操作
4675	-----      SID被过滤掉了
4688	-----      已经创建了一个新流程
4689	-----      一个过程已经退出
4690	-----      尝试复制对象的句柄
4691	-----      请求间接访问对象
4692	-----      尝试备份数据保护主密钥
4693	-----      尝试恢复数据保护主密钥
4694	-----      试图保护可审计的受保护数据
4695	-----      尝试不受保护的可审计受保护数据
4696	-----      主要令牌已分配给进程
4697	-----      系统中安装了一项服务
4698	-----      已创建计划任务
4699	-----      计划任务已删除
4700	-----      已启用计划任务
4701	-----      计划任务已禁用
4702	-----      计划任务已更新
4703	-----      令牌权已经调整
4704	-----      已分配用户权限
4705	-----      用户权限已被删除
4706	-----      为域创建了新的信任
4707	-----      已删除对域的信任
4709	-----      IPsec服务已启动
4710	-----      IPsec服务已禁用
4711	-----      PAStore引擎(1%)
4712	-----      IPsec服务遇到了潜在的严重故障
4713	-----      Kerberos策略已更改
4714	-----      加密数据恢复策略已更改
4715	-----      对象的审核策略(SACL)已更改
4716	-----      可信域信息已被修改
4717	-----      系统安全访问权限已授予帐户
4718	-----      系统安全访问已从帐户中删除
4719	-----      系统审核策略已更改
4720	-----      已创建用户帐户
4722	-----      用户帐户已启用
4723	-----      尝试更改帐户的密码
4724	-----      尝试重置帐户密码
4725	-----      用户帐户已被禁用
4726	-----      用户帐户已删除
4727	-----      已创建启用安全性的全局组
4728	-----      已将成员添加到启用安全性的全局组中
4729	-----      成员已从启用安全性的全局组中删除
4730	-----      已删除启用安全性的全局组
4731	-----      已创建启用安全性的本地组
4732	-----      已将成员添加到启用安全性的本地组
4733	-----      成员已从启用安全性的本地组中删除
4734	-----      已删除已启用安全性的本地组
4735	-----      已启用安全性的本地组已更改
4737	-----      启用安全性的全局组已更改
4738	-----      用户帐户已更改
4739	-----      域策略已更改
4740	-----      用户帐户已被锁定
4741	-----      已创建计算机帐户
4742	-----      计算机帐户已更改
4743	-----      计算机帐户已删除
4744	-----      已创建禁用安全性的本地组
4745	-----      已禁用安全性的本地组已更改
4746	-----      已将成员添加到已禁用安全性的本地组
4747	-----      已从安全性已禁用的本地组中删除成员
4748	-----      已删除安全性已禁用的本地组
4749	-----      已创建一个禁用安全性的全局组
4750	-----      已禁用安全性的全局组已更改
4751	-----      已将成员添加到已禁用安全性的全局组中
4752	-----      成员已从禁用安全性的全局组中删除
4753	-----      已删除安全性已禁用的全局组
4754	-----      已创建启用安全性的通用组
4755	-----      启用安全性的通用组已更改
4756	-----      已将成员添加到启用安全性的通用组中
4757	-----      成员已从启用安全性的通用组中删除
4758	-----      已删除启用安全性的通用组
4759	-----      创建了一个安全禁用的通用组
4760	-----      安全性已禁用的通用组已更改
4761	-----      已将成员添加到已禁用安全性的通用组中
4762	-----      成员已从禁用安全性的通用组中删除
4763	-----      已删除安全性已禁用的通用组
4764	-----      组类型已更改
4765	-----      SID历史记录已添加到帐户中
4766	-----      尝试将SID历史记录添加到帐户失败
4767	-----      用户帐户已解锁
4768	-----      请求了Kerberos身份验证票证(TGT)
4769	-----      请求了Kerberos服务票证
4770	-----      更新了Kerberos服务票证
4771	-----      Kerberos预身份验证失败
4772	-----      Kerberos身份验证票证请求失败
4773	-----      Kerberos服务票证请求失败
4774	-----      已映射帐户以进行登录
4775	-----      无法映射帐户以进行登录
4776	-----      域控制器尝试验证帐户的凭据
4777	-----      域控制器无法验证帐户的凭据
4778	-----      会话重新连接到Window Station
4779	-----      会话已与Window   Station断开连接
4780	-----      ACL是在作为管理员组成员的帐户上设置的
4781	-----      帐户名称已更改
4782	-----      密码哈希帐户被访问
4783	-----      创建了一个基本应用程序组
4784	-----      基本应用程序组已更改
4785	-----      成员已添加到基本应用程序组
4786	-----      成员已从基本应用程序组中删除
4787	-----      非成员已添加到基本应用程序组
4788	-----      从基本应用程序组中删除了非成员。
4789	-----      基本应用程序组已删除
4790	-----      已创建LDAP查询组
4791	-----      基本应用程序组已更改
4792	-----      LDAP查询组已删除
4793	-----      密码策略检查API已被调用
4794	-----      尝试设置目录服务还原模式管理员密码
4797	-----      试图查询帐户是否存在空白密码
4798	-----      枚举了用户的本地组成员身份。
4799	-----      已枚举启用安全性的本地组成员身份
4800	-----      工作站已锁定
4801	-----      工作站已解锁
4802	-----      屏幕保护程序被调用
4803	-----      屏幕保护程序被解雇了
4816	-----      RPC在解密传入消息时检测到完整性违规
4817	-----      对象的审核设置已更改。
4818	-----      建议的中央访问策略不授予与当前中央访问策略相同的访问权限
4819	-----      计算机上的中央访问策略已更改
4820	-----      Kerberos票证授予票证(TGT)被拒绝,因为该设备不符合访问控制限制
4821	-----      Kerberos服务票证被拒绝,因为用户,设备或两者都不符合访问控制限制
4822	-----      NTLM身份验证失败,因为该帐户是受保护用户组的成员
4823	-----      NTLM身份验证失败,因为需要访问控制限制
4824	-----      使用DES或RC4进行Kerberos预身份验证失败,因为该帐户是受保护用户组的成员
4825	-----      用户被拒绝访问远程桌面。默认情况下,仅当用户是Remote
                   Desktop Users组或Administrators组的成员时才允许用户进行连接
4826	-----      加载引导配置数据
4830	-----      SID历史记录已从帐户中删除
4864	-----      检测到名称空间冲突
4865	-----      添加了受信任的林信息条目
4866	-----      已删除受信任的林信息条目
4867	-----      已修改受信任的林信息条目
4868	-----      证书管理器拒绝了挂起的证书请求
4869	-----      证书服务收到重新提交的证书请求
4870	-----      证书服务撤销了证书
4871	-----      证书服务收到发布证书吊销列表(CRL)的请求
4872	-----      证书服务发布证书吊销列表(CRL)
4873	-----      证书申请延期已更改
4874	-----      一个或多个证书请求属性已更改。
4875	-----      证书服务收到关闭请求
4876	-----      证书服务备份已启动
4877	-----      证书服务备份已完成
4878	-----      证书服务还原已开始
4879	-----      证书服务恢复已完成
4880	-----      证书服务已启动
4881	-----      证书服务已停止
4882	-----      证书服务的安全权限已更改
4883	-----      证书服务检索到存档密钥
4884	-----      证书服务将证书导入其数据库
4885	-----      证书服务的审核筛选器已更改
4886	-----      证书服务收到证书请求
4887	-----      证书服务批准了证书请求并颁发了证书
4888	-----      证书服务拒绝了证书请求
4889	-----      证书服务将证书请求的状态设置为挂起
4890	-----      证书服务的证书管理器设置已更改。
4891	-----      证书服务中的配置条目已更改
4892	-----      证书服务的属性已更改
4893	-----      证书服务存档密钥
4894	-----      证书服务导入并存档了一个密钥
4895	-----      证书服务将CA证书发布到Active Directory域服务
4896	-----      已从证书数据库中删除一行或多行
4897	-----      启用角色分离
4898	-----      证书服务加载了一个模板
4899	-----      证书服务模板已更新
4900	-----      证书服务模板安全性已更新
4902	-----      已创建每用户审核策略表
4904	-----      尝试注册安全事件源
4905	-----      尝试取消注册安全事件源
4906	-----      CrashOnAuditFail值已更改
4907	-----      对象的审核设置已更改
4908	-----      特殊组登录表已修改
4909	-----      TBS的本地策略设置已更改
4910	-----      TBS的组策略设置已更改
4911	-----      对象的资源属性已更改
4912	-----      每用户审核策略已更改
4913	-----      对象的中央访问策略已更改
4928	-----      建立了Active  Directory副本源命名上下文
4929	-----      已删除Active  Directory副本源命名上下文
4930	-----      已修改Active  Directory副本源命名上下文
4931	-----      已修改Active  Directory副本目标命名上下文
4932	-----      已开始同步Active  Directory命名上下文的副本
4933	-----      Active  Directory命名上下文的副本的同步已结束
4934	-----      已复制Active  Directory对象的属性
4935	-----      复制失败开始
4936	-----      复制失败结束
4937	-----      从副本中删除了一个延迟对象
4944	-----      Windows防火墙启动时,以下策略处于活动状态
4945	-----      Windows防火墙启动时列出了规则
4946	-----      已对Windows防火墙例外列表进行了更改。增加了一条规则
4947	-----      已对Windows防火墙例外列表进行了更改。规则被修改了
4948	-----      已对Windows防火墙例外列表进行了更改。规则已删除
4949	-----      Windows防火墙设置已恢复为默认值
4950	-----      Windows防火墙设置已更改
4951	-----      规则已被忽略,因为Windows防火墙无法识别其主要版本号
4952	-----      已忽略规则的某些部分,因为Windows防火墙无法识别其次要版本号
4953	-----      Windows防火墙已忽略规则,因为它无法解析规则
4954	-----      Windows防火墙组策略设置已更改。已应用新设置
4956	-----      Windows防火墙已更改活动配置文件
4957	-----      Windows防火墙未应用以下规则
4958	-----      Windows防火墙未应用以下规则,因为该规则引用了此计算机上未配置的项目
4960	-----      IPsec丢弃了未通过完整性检查的入站数据包
4961	-----      IPsec丢弃了重放检查失败的入站数据包
4962	-----      IPsec丢弃了重放检查失败的入站数据包
4963	-----      IPsec丢弃了应该受到保护的入站明文数据包
4964	-----      特殊组已分配给新登录
4965	-----      IPsec从远程计算机收到一个包含不正确的安全参数索引(SPI)的数据包。
4976	-----      在主模式协商期间,IPsec收到无效的协商数据包。
4977	-----      在快速模式协商期间,IPsec收到无效的协商数据包。
4978	-----      在扩展模式协商期间,IPsec收到无效的协商数据包。
4979	-----      建立了IPsec主模式和扩展模式安全关联。
4980	-----      建立了IPsec主模式和扩展模式安全关联
4981	-----      建立了IPsec主模式和扩展模式安全关联
4982	-----      建立了IPsec主模式和扩展模式安全关联
4983	-----      IPsec扩展模式协商失败
4984	-----      IPsec扩展模式协商失败
4985	-----      交易状态已发生变化
5024	-----      Windows防火墙服务已成功启动
5025	-----      Windows防火墙服务已停止
5027	-----      Windows防火墙服务无法从本地存储中检索安全策略
5028	-----      Windows防火墙服务无法解析新的安全策略。
5029	-----      Windows防火墙服务无法初始化驱动程序
5030	-----      Windows防火墙服务无法启动
5031	-----      Windows防火墙服务阻止应用程序接受网络上的传入连接。
5032	-----      Windows防火墙无法通知用户它阻止应用程序接受网络上的传入连接
5033	-----      Windows防火墙驱动程序已成功启动
5034	-----      Windows防火墙驱动程序已停止
5035	-----      Windows防火墙驱动程序无法启动
5037	-----      Windows防火墙驱动程序检测到严重的运行时错 终止
5038	-----      代码完整性确定文件的图像哈希无效
5039	-----      注册表项已虚拟化。
5040	-----      已对IPsec设置进行了更改。添加了身份验证集。
5041	-----      已对IPsec设置进行了更改。身份验证集已修改
5042	-----      已对IPsec设置进行了更改。身份验证集已删除
5043	-----      已对IPsec设置进行了更改。添加了连接安全规则
5044	-----      已对IPsec设置进行了更改。连接安全规则已修改
5045	-----      已对IPsec设置进行了更改。连接安全规则已删除
5046	-----      已对IPsec设置进行了更改。添加了加密集
5047	-----      已对IPsec设置进行了更改。加密集已被修改
5048	-----      已对IPsec设置进行了更改。加密集已删除
5049	-----      IPsec安全关联已删除
5050	-----      尝试使用对INetFwProfile.FirewallEnabled的调用以编程方式禁用Windows防火墙(FALSE
5051	-----      文件已虚拟化
5056	-----      进行了密码自检
5057	-----      加密原语操作失败
5058	-----      密钥文件操作
5059	-----      密钥迁移操作
5060	-----      验证操作失败
5061	-----      加密操作
5062	-----      进行了内核模式加密自检
5063	-----      尝试了加密提供程序操作
5064	-----      尝试了加密上下文操作
5065	-----      尝试了加密上下文修改
5066	-----      尝试了加密功能操作
5067	-----      尝试了加密功能修改
5068	-----      尝试了加密函数提供程序操作
5069	-----      尝试了加密函数属性操作
5070	-----      尝试了加密函数属性操作
5071	-----      Microsoft密钥分发服务拒绝密钥访问
5120	-----      OCSP响应程序服务已启动
5121	-----      OCSP响应程序服务已停止
5122	-----      OCSP响应程序服务中的配置条目已更改
5123	-----      OCSP响应程序服务中的配置条目已更改
5124	-----      在OCSP  Responder Service上更新了安全设置
5125	-----      请求已提交给OCSP  Responder Service
5126	-----      签名证书由OCSP  Responder Service自动更新
5127	-----      OCSP吊销提供商成功更新了吊销信息
5136	-----      目录服务对象已修改
5137	-----      已创建目录服务对象
5138	-----      目录服务对象已取消删除
5139	-----      已移动目录服务对象
5140	-----      访问了网络共享对象
5141	-----      目录服务对象已删除
5142	-----      添加了网络共享对象。
5143	-----      网络共享对象已被修改
5144	-----      网络共享对象已删除。
5145	-----      检查网络共享对象以查看是否可以向客户端授予所需的访问权限
5146	-----      Windows筛选平台已阻止数据包
5147	-----      限制性更强的Windows筛选平台筛选器阻止了数据包
5148	-----      Windows过滤平台检测到DoS攻击并进入防御模式; 与此攻击相关的数据包将被丢弃。
5149	-----      DoS攻击已经消退,正常处理正在恢复。
5150	-----      Windows筛选平台已阻止数据包。
5151	-----      限制性更强的Windows筛选平台筛选器阻止了数据包。
5152	-----      Windows筛选平台阻止了数据包
5153	-----      限制性更强的Windows筛选平台筛选器阻止了数据包
5154	-----      Windows过滤平台允许应用程序或服务在端口上侦听传入连接
5155	-----      Windows筛选平台已阻止应用程序或服务侦听端口上的传入连接
5156	-----      Windows筛选平台允许连接
5157	-----      Windows筛选平台已阻止连接
5158	-----      Windows筛选平台允许绑定到本地端口
5159	-----      Windows筛选平台已阻止绑定到本地端口
5168	-----      SMB  / SMB2的Spn检查失败。
5169	-----      目录服务对象已修改
5170	-----      在后台清理任务期间修改了目录服务对象
5376	-----      已备份凭据管理器凭据
5377	-----      Credential  Manager凭据已从备份还原
5378	-----      策略不允许请求的凭据委派
5440	-----      Windows筛选平台基本筛选引擎启动时出现以下callout
5441	-----      Windows筛选平台基本筛选引擎启动时存在以下筛选器
5442	-----      Windows筛选平台基本筛选引擎启动时,存在以下提供程序
5443	-----      Windows筛选平台基本筛选引擎启动时,存在以下提供程序上下文
5444	-----      Windows筛选平台基本筛选引擎启动时,存在以下子层
5446	-----      Windows筛选平台标注已更改
5447	-----      Windows筛选平台筛选器已更改
5448	-----      Windows筛选平台提供程序已更改
5449	-----      Windows筛选平台提供程序上下文已更改
5450	-----      Windows筛选平台子层已更改
5451	-----      建立了IPsec快速模式安全关联
5452	-----      IPsec快速模式安全关联已结束
5453	-----      与远程计算机的IPsec协商失败,因为未启动IKE和AuthIP  IPsec密钥模块(IKEEXT)服务
5456	-----      PAStore引擎在计算机上应用了Active  Directory存储IPsec策略
5457	-----      PAStore引擎无法在计算机上应用Active  Directory存储IPsec策略
5458	-----      PAStore引擎在计算机上应用了Active  Directory存储IPsec策略的本地缓存副本
5459	-----      PAStore引擎无法在计算机上应用Active  Directory存储IPsec策略的本地缓存副本
5460	-----      PAStore引擎在计算机上应用了本地注册表存储IPsec策略
5461	-----      PAStore引擎无法在计算机上应用本地注册表存储IPsec策略
5462	-----      PAStore引擎无法在计算机上应用某些活动IPsec策略规则
5463	-----      PAStore引擎轮询活动IPsec策略的更改并检测不到任何更改
5464	-----      PAStore引擎轮询活动IPsec策略的更改,检测到更改并将其应用于IPsec服务
5465	-----      PAStore Engine收到强制重新加载IPsec策略的控件并成功处理控件
5466	-----      PAStore引擎轮询Active  Directory IPsec策略的更改,确定无法访问Active Directory,并将使用Active Directory
IPsec策略的缓存副本
5467	-----      PAStore引擎轮询Active Directory IPsec策略的更改,确定可以访问Active Directory,并且未找到对策略的更改
5468	-----      PAStore引擎轮询Active Directory IPsec策略的更改,确定可以访问Active Directory,找到策略更改并应用这些更改
5471	-----      PAStore引擎在计算机上加载了本地存储IPsec策略
5472	-----      PAStore引擎无法在计算机上加载本地存储IPsec策略
5473	-----      PAStore引擎在计算机上加载了目录存储IPsec策略
5474	-----      PAStore引擎无法在计算机上加载目录存储IPsec策略
5477	-----      PAStore引擎无法添加快速模式过滤器
5478	-----      IPsec服务已成功启动
5479	-----      IPsec服务已成功关闭
5480	-----      IPsec服务无法获取计算机上的完整网络接口列表
5483	-----      IPsec服务无法初始化RPC服务器。无法启动IPsec服务
5484	-----      IPsec服务遇到严重故障并已关闭
5485	-----      IPsec服务无法在网络接口的即插即用事件上处理某些IPsec筛选器
5632	-----      已请求对无线网络进行身份验证
5633	-----      已请求对有线网络进行身份验证
5712	-----      尝试了远程过程调用(RPC)
5888	-----      COM +目录中的对象已被修改
5889	-----      从COM +目录中删除了一个对象
5890	-----      一个对象已添加到COM +目录中
6144	-----      组策略对象中的安全策略已成功应用
6145	-----      处理组策略对象中的安全策略时发生一个或多个错误
6272	-----      网络策略服务器授予用户访问权限
6273	-----      网络策略服务器拒绝访问用户
6274	-----      网络策略服务器放弃了对用户的请求
6275	-----      网络策略服务器放弃了用户的记帐请求
6276	-----      网络策略服务器隔离了用户
6277	-----      网络策略服务器授予用户访问权限,但由于主机未满足定义的健康策略而将其置于试用期
6278	-----      网络策略服务器授予用户完全访问权限,因为主机符合定义的健康策略
6279	-----      由于重复失败的身份验证尝试,网络策略服务器锁定了用户帐户
6280	-----      网络策略服务器解锁了用户帐户
6281	-----      代码完整性确定图像文件的页面哈希值无效...
6400	-----      BranchCache:在发现内容可用性时收到格式错误的响应。
6401	-----      BranchCache:从对等方收到无效数据。数据被丢弃。
6402	-----      BranchCache:提供数据的托管缓存的消息格式不正确。
6403	-----      BranchCache:托管缓存发送了对客户端消息的错误格式化响应以提供数据。
6404	-----      BranchCache:无法使用配置的SSL证书对托管缓存进行身份验证。
6405	-----      BranchCache:发生了事件ID%1的%2个实例。
6406	-----      %1注册到Windows防火墙以控制以下过滤:
6408	-----      已注册的产品%1失败,Windows防火墙现在正在控制%2的过滤。
6409	-----      BranchCache:无法解析服务连接点对象
6410	-----      代码完整性确定文件不满足加载到进程中的安全性要求。这可能是由于使用共享部分或其他问题
6416	-----      系统识别出新的外部设备。
6417	-----      FIPS模式加密自检成功
6418	-----      FIPS模式加密自检失败
6419	-----      发出了禁用设备的请求
6420	-----      设备已禁用
6421	-----      已发出请求以启用设备
6422	-----      设备已启用
6423	-----      系统策略禁止安装此设备
6424	-----      在事先被政策禁止之后,允许安装此设备
8191	-----      最高系统定义的审计消息值
------------------------ bancai.html ------------------------ <!DOCTYPE html> <html lang=“en”> <head> <meta charset=“UTF-8”> <meta name=“viewport” content=“width=device-width, initial-scale=1.0”> <title>板材数据管理</title> <!-- 引入 Bootstrap CSS --> <link href=“https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css” rel=“stylesheet”> <!-- 引入 jQuery --> <script src=“https://code.jquery.com/jquery-3.6.0.min.js”></script> </head> <body> <div class=“container mt-4”> <h1 class=“mb-4”>板材数据管理</h1> <!-- 搜索框 --> <div class="row mb-3"> <div class="col-md-6"> <div class="input-group"> <input type="text" class="form-control" id="searchInput" placeholder="搜索材质、木皮或厚度..."> <button class="btn btn-outline-secondary" type="button" id="searchBtn"> <i class="bi bi-search"></i> 搜索 </button> </div> </div> <div class="col-md-6 text-end"> <button class="btn btn-primary" id="addBancaiBtn">添加新板材</button> </div> </div> <table class="table table-striped mt-3" id="bancaiTable"> <thead> <tr> <th>ID</th> <th>材质</th> <th>木皮1</th> <th>木皮2</th> <th>厚度</th> <th>操作</th> </tr> </thead> <tbody> <!-- 数据将通过 DataManager 加载 --> </tbody> </table> </div> <!-- 模态框保持不变 --> <div class=“modal fade” id=“bancaiModal” tabindex=“-1” aria-hidden=“true”> <div class=“modal-dialog modal-lg”> <div class=“modal-content”> <div class=“modal-header”> <h5 class=“modal-title” id=“modalTitle”>板材详情</h5> <button type=“button” class=“btn-close” data-bs-dismiss=“modal” aria-label=“Close”></button> </div> <div class=“modal-body”> <form id=“bancaiForm”> <input type=“hidden” id=“bancaiId”> <div class=“mb-3”> <label class=“form-label”>材质</label> <select class=“form-select” id=“caizhiSelect” name=“caizhi”></select> </div> <div class=“mb-3”> <label class=“form-label”>木皮1</label> <select class=“form-select” id=“mupi1Select” name=“mupi1”></select> </div> <div class=“mb-3”> <label class=“form-label”>木皮2</label> <select class=“form-select” id=“mupi2Select” name=“mupi2”></select> </div> <div class=“mb-3”> <label class=“form-label”>厚度</label> <input type=“number” step=“0.01” class=“form-control” id=“houdu” name=“houdu”> </div> </form> </div> <div class=“modal-footer”> <button type=“button” class=“btn btn-secondary” data-bs-dismiss=“modal”>关闭</button> <button type=“button” class=“btn btn-primary” id=“saveBtn”>保存</button> </div> </div> </div> </div> <!-- 引入 Bootstrap JS --> <script src=“https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js”></script> <script type=“module” src=“…/js/bancai.js”></script> <!-- 改为模块方式导入 --> </body> </html> ------------------------ bancai.js ------------------------ // bancai.js $(document).ready(function () { const modal = new bootstrap.Modal(‘#bancaiModal’); let currentMode = ‘view’; let caizhiList = []; let mupiList = []; let currentSearchText = ‘’; // 从父窗口获取 DataManager let dataManager = null; // 等待父窗口的 DataManager 准备就绪 async function waitForDataManager() { return new Promise((resolve, reject) => { if (window.parent && window.parent.dataManager) { resolve(window.parent.dataManager); } else { reject(new Error('无法从父窗口获取 DataManager')); } }); } window.addEventListener('message', (event) => { if (event.data === 'DataManagerReady') { initialize(); } }); // 初始化函数 async function initialize() { try { dataManager = await waitForDataManager(); if (!dataManager || typeof dataManager.fetchAll !== 'function') { throw new Error('无效的 DataManager 实例'); } // 解构需要的方法和属性 // const { addEntity, dataManager.deleteEntity, deleteEntity, fetchAll } = dataManager; // 确保数据已加载 await dataManager.fetchAll(); // 更新材质和木皮选项 updateOptions(); // 渲染板材表格 refreshTable(); } catch (error) { console.error('初始化失败:', error); alert('系统初始化失败,请刷新页面或联系管理员'); } } // 更新材质和木皮选项 function updateOptions() { caizhiList = dataManager.data.caizhis; updateSelectOptions('#caizhiSelect', caizhiList); mupiList = dataManager.data.mupis.map(m => ({ ...m, name: m.you ? `${m.name}(油漆)` : m.name, })); updateSelectOptions('#mupi1Select', mupiList); updateSelectOptions('#mupi2Select', mupiList); } // 更新下拉框选项 function updateSelectOptions(selector, data) { $(selector).empty(); data.forEach(item => { $(selector).append(`<option value="${item.id}">${item.name}</option>`); }); } // 刷新表格 function refreshTable() { const filteredData = filterBancais(currentSearchText); renderBancaiTable(filteredData); } // 搜索过滤 function filterBancais(searchText) { if (!searchText) return dataManager.data.bancais; return dataManager.data.bancais.filter(bancai => { const caizhiName = bancai.caizhi?.name || ''; const mupi1Name = bancai.mupi1?.name || ''; const mupi2Name = bancai.mupi2?.name || ''; const houdu = bancai.houdu.toString(); return [ caizhiName.toLowerCase(), mupi1Name.toLowerCase(), mupi2Name.toLowerCase(), houdu.toLowerCase(), ].some(field => field.includes(searchText.toLowerCase())); }); } // 渲染表格 function renderBancaiTable(bancais) { const $tbody = $('#bancaiTable tbody'); $tbody.empty(); bancais.forEach(bancai => { const caizhiName = bancai.caizhi?.name || '未知'; const mupi1Name = bancai.mupi1?.name || '未知'; const mupi2Name = bancai.mupi2?.name || '未知'; const row = ` <tr data-id="${bancai.id}"> <td>${bancai.id}</td> <td>${caizhiName}</td> <td>${mupi1Name} ${bancai.mupi1?.you ? '(油漆)' : ''}</td> <td>${mupi2Name} ${bancai.mupi2?.you ? '(油漆)' : ''}</td> <td>${bancai.houdu}</td> <td> <button class="btn btn-sm btn-info view-btn">查看</button> <button class="btn btn-sm btn-warning edit-btn">编辑</button> <button class="btn btn-sm btn-danger delete-btn">删除</button> </td> </tr> `; $tbody.append(row); }); bindTableEvents(); } // 绑定表格事件 function bindTableEvents() { $('.view-btn').click(function () { const id = $(this).closest('tr').data('id'); openModalForBancai(id, 'view'); }); $('.edit-btn').click(function () { const id = $(this).closest('tr').data('id'); openModalForBancai(id, 'edit'); }); $('.delete-btn').click(function () { const id = $(this).closest('tr').data('id'); deleteBancai(id); }); } // 添加按钮事件 $('#addBancaiBtn').click(function () { $('#bancaiForm')[0].reset(); $('#modalTitle').text('添加新板材'); currentMode = 'add'; enableForm(true); updateOptions(); modal.show(); }); // 搜索按钮事件 $('#searchBtn').click(function () { currentSearchText = $('#searchInput').val(); refreshTable(); }); // 输入框实搜索 $('#searchInput').on('input', function () { currentSearchText = $(this).val(); refreshTable(); }); // 打开弹窗显示板材数据 function openModalForBancai(id, mode) { const bancai = dataManager.data.bancais.find(b => b.id === id); if (!bancai) return; currentMode = mode; $('#bancaiId').val(bancai.id); $('#caizhiSelect').val(bancai.caizhi.id); $('#mupi1Select').val(bancai.mupi1.id); $('#mupi2Select').val(bancai.mupi2.id); $('#houdu').val(bancai.houdu); $('#modalTitle').text(mode === 'view' ? '板材详情' : '编辑板材'); enableForm(mode === 'edit'); modal.show(); } // 启用/禁用表单 function enableForm(enable) { $('#caizhiSelect').prop('disabled', !enable); $('#mupi1Select').prop('disabled', !enable); $('#mupi2Select').prop('disabled', !enable); $('#houdu').prop('disabled', !enable); $('#saveBtn').toggle(enable); } // 保存按钮点击事件 $('#saveBtn').click(async function () { const formData = { id: $('#bancaiId').val(), caizhiId: parseInt($('#caizhiSelect').val()), mupi1Id: parseInt($('#mupi1Select').val()), mupi2Id: parseInt($('#mupi2Select').val()), houdu: parseFloat($('#houdu').val()), }; try { if (currentMode === 'add') { await dataManager.addEntity('bancai', formData); } else { await dataManager.updateEntity('bancai', formData); } refreshTable(); modal.hide(); } catch (error) { console.error('操作失败:', error); alert('操作失败,请重试'); } }); // 删除板材 async function deleteBancai(id) { if (!confirm('确定要删除此板材吗?')) return; try { await deleteEntity('bancai', id); refreshTable(); } catch (error) { console.error('删除失败:', error); alert('删除失败,请重试'); } } // 初始化应用 //initialize(); }); ------------------------ DataManager.js ------------------------ //{ 实体类的关联和属性列表 // “entities”: { // “Dingdan”: { // “properties”: { // “id”: “Integer”, // “number”: “String”, // “xiadan”: “Date”, // “jiaohuo”: “Date”, // “dingdan_chanpins”: “List<Dingdan_chanpin> (OneToMany)”, // “dingdan_chanpins_zujians”: “List<Dingdan_chanpin_zujian> (OneToMany)” // }, // “relations”: [ // “关联订单产品(Dingdan_chanpin)”, // “关联订单组件(Dingdan_chanpin_zujian)” // ] // }, // “Dingdan_chanpin”: { // “properties”: { // “id”: “Integer”, // “shuliang”: “Integer” // }, // “relations”: [ // “多对一关联订单(Dingdan)”, // “多对一关联产品(Chanpin)” // ] // }, // “Dingdan_chanpin_zujian”: { // “properties”: { // “id”: “Integer”, // “shuliang”: “Integer” // }, // “relations”: [ // “多对一关联订单(Dingdan)”, // “多对一关联组件(Chanpin_zujian)”, // “多对一关联板材(Bancai)” // ] // }, // “Jinhuo”: { // “properties”: { // “id”: “Integer”, // “shuliang”: “Integer”, // “date”: “Date” // }, // “relations”: [ // “多对一关联订单(Dingdan)”, // “多对一关联产品(Chanpin)”, // “多对一关联组件(Zujian)”, // “多对一关联板材(Bancai)”, // “多对一关联用户(User)” // ] // }, // “Kucun”: { // “properties”: { // “id”: “Integer”, // “shuliang”: “Long” // }, // “relations”: [ // “一对一关联板材(Bancai)” // ] // }, // “Mupi”: { // “properties”: { // “id”: “Integer”, // “name”: “String”, // “you”: “Boolean” // }, // “relations”: [ // “被板材关联(Bancai - mupi1/mupi2)” // ] // }, // “User”: { // “properties”: { // “id”: “Integer”, // “name”: “String”, // “andy”: “String”, // “pass”: “String”, // “role”: “int” // } // }, // “Zujian”: { // “properties”: { // “id”: “Integer”, // “name”: “String” // }, // “relations”: [ // “一对多关联产品组件(Chanpin_zujian)” // ] // }, // “Bancai”: { // “properties”: { // “id”: “Integer”, // “houdu”: “Double” // }, // “relations”: [ // “多对一关联材质(Caizhi)”, // “多对一关联木皮(Mupi - mupi1/mupi2)”, // “一对一关联库存(Kucun)” // ] // }, // “Caizhi”: { // “properties”: { // “id”: “Integer”, // “name”: “String” // }, // “relations”: [ // “一对多关联板材(Bancai)” // ] // }, // “Chanpin”: { // “properties”: { // “id”: “Integer”, // “bianhao”: “String” // }, // “relations”: [ // “一对多关联订单产品(Dingdan_chanpin)”, // “一对多关联产品组件(Chanpin_zujian)” // ] // }, // “Chanpin_zujian”: { // “properties”: { // “id”: “Integer”, // “one_howmany”: “Double” // }, // “relations”: [ // “多对一关联产品(Chanpin)”, // “多对一关联组件(Zujian)”, // “多对一关联板材(Bancai)” // ] // } // }, // “relationsSummary”: [ // “订单(Dingdan) 1:N 订单产品(Dingdan_chanpin)”, // “订单(Dingdan) 1:N 订单组件(Dingdan_chanpin_zujian)”, // “产品(Chanpin) 1:N 产品组件(Chanpin_zujian)”, // “组件(Zujian) 1:N 产品组件(Chanpin_zujian)”, // “板材(Bancai) 1:1 库存(Kucun)”, // “材质(Caizhi) 1:N 板材(Bancai)” // ] //} /** 数据管理器类,负责与后端API通信并管理数据 */ class DataManager { constructor(baseUrl) { this.baseUrl = baseUrl; this.data = { bancais: [], dingdans: [], mupis: [], chanpins: [], kucuns: [], dingdan_chanpin_zujians: [], chanpin_zujians: [], zujians: [], caizhis: [], dingdan_chanpins: [], users: [] }; this.isSyncing = false; this.lastSync = null; // 回调注册表 this.callbacks = { // 全局回调 all: [], // 按实体类型分类的回调 bancais: [], dingdan: [], mupi: [], chanpin: [], kucun: [], dingdan_chanpin_zujian: [], chanpin_zujian: [], zujian: [], caizhi: [], dingdan_chanpin: [], user: [] // …其他实体 }; } /** 获取所有数据 @returns {Promise<boolean>} 是否成功 */ async fetchAll() { console.log(this) try { const response = await fetch(${this.baseUrl}/app/all); if (!response.ok) throw new Error(‘Network response was not ok’); const result = await response.json(); if (result.status !== 200) throw new Error(result.text || ‘API error’); // 更新本地数据 Object.keys(this.data).forEach(key => { if (result.data[key]) { this.data[key] = result.data[key]; } }); this.lastSync = new Date(); return true; } catch (error) { console.error(‘Fetch error:’, error); return false; } } /** 解析数据关联关系,将ID引用转换为对象引用 @param {Object} data - 从后端加载的原始数据 @returns {Object} - 处理后的数据,包含完整的对象关联 */ function resolveDataReferences(data) { // 创建ID映射表 const idMaps = {}; Object.keys(data).forEach(key => { idMaps[key] = new Map(); data[key].forEach(item => idMaps[key].set(item.id, item)); }); // 处理多对一和一对一关系 const resolveRef = (source, sourceKey, targetKey, propertyName) => { source.forEach(item => { if (item[propertyName] && item[propertyName].id) { const refId = item[propertyName].id; const target = idMaps[targetKey]?.get(refId); if (target) { item[propertyName] = target; // 建立反向引用(一对多关系) if (!target[sourceKey]) target[sourceKey] = []; if (!target[sourceKey].includes(item)) { target[sourceKey].push(item); } } } }); }; // 处理一对多关系(直接创建关联数组) const resolveOneToMany = (sourceKey, targetKey, propertyName) => { const sourceItems = data[sourceKey]; sourceItems.forEach(source => { if (!source[propertyName]) source[propertyName] = []; }); data[targetKey].forEach(target => { if (target[sourceKey]?.id) { const sourceId = target[sourceKey].id; const source = idMaps[sourceKey]?.get(sourceId); if (source && source[propertyName]) { source[propertyName].push(target); } } }); }; // 处理特定关联关系 // 订单 ↔ 订单产品 (1:N) resolveOneToMany('dingdans', 'dingdan_chanpins', 'dingdan_chanpins'); resolveRef(data.dingdan_chanpins, 'dingdans', 'dingdans', 'dingdan'); // 订单 ↔ 订单组件 (1:N) resolveOneToMany('dingdans', 'dingdan_chanpin_zujians', 'dingdan_chanpin_zujians'); resolveRef(data.dingdan_chanpin_zujians, 'dingdans', 'dingdans', 'dingdan'); // 产品 ↔ 产品组件 (1:N) resolveOneToMany('chanpins', 'chanpin_zujians', 'chanpin_zujians'); resolveRef(data.chanpin_zujians, 'chanpins', 'chanpins', 'chanpin'); // 组件 ↔ 产品组件 (1:N) resolveOneToMany('zujians', 'chanpin_zujians', 'chanpin_zujians'); resolveRef(data.chanpin_zujians, 'zujians', 'zujians', 'zujian'); // 材质 ↔ 板材 (1:N) resolveOneToMany('caizhis', 'bancais', 'bancais'); resolveRef(data.bancais, 'caizhis', 'caizhis', 'caizhi'); // 板材 ↔ 库存 (1:1) resolveRef(data.bancais, 'kucuns', 'kucuns', 'kucun'); resolveRef(data.kucuns, 'bancais', 'bancais', 'bancai'); // 板材 ↔ 木皮 (多对一) resolveRef(data.bancais, 'mupis', 'mupis', 'mupi1'); resolveRef(data.bancais, 'mupis', 'mupis', 'mupi2'); // 订单产品 ↔ 产品 (多对一) resolveRef(data.dingdan_chanpins, 'chanpins', 'chanpins', 'chanpin'); // 订单组件 ↔ 组件 (多对一) resolveRef(data.dingdan_chanpin_zujians, 'chanpin_zujians', 'chanpin_zujians', 'chanpin_zujian'); // 订单组件 ↔ 板材 (多对一) resolveRef(data.dingdan_chanpin_zujians, 'bancais', 'bancais', 'bancai'); // 进货 ↔ 相关实体 (多对一) ['dingdans', 'chanpins', 'zujians', 'bancais', 'users'].forEach(entity => { resolveRef(data.jinhuos, entity, entity, entity.slice(0, -1)); }); return data; } /** 注册回调函数 @param {string} entity - 实体类型(如’bancai’)或’all’表示全局回调 @param {Function} callback - 回调函数,参数为(operation, data) */ registerCallback(entity, callback) { if (!this.callbacks[entity]) { this.callbacks[entity] = []; } this.callbacks[entity].push(callback); } /** 移除回调函数 @param {string} entity - 实体类型单数性质 @param {Function} callback - 要移除的回调函数 */ unregisterCallback(entity, callback) { if (!this.callbacks[entity]) return; const index = this.callbacks[entity].indexOf(callback); if (index !== -1) { this.callbacks[entity].splice(index, 1); } } /** 触发回调 @param {string} operation - 操作类型(‘add’, ‘update’, ‘delete’) @param {string} entity - 实体类型单数性质 @param {Object} data - 相关数据 */ triggerCallbacks(operation, entity, data) { // 触发全局回调 this.callbacks.all.forEach(cb => cb(operation, entity, data)); // 触发特定实体回调 if (this.callbacks[entity]) { this.callbacks[entity].forEach(cb => cb(operation, data)); } } /** 执行CRUD操作并触发回调 */ async crudOperation(operation, entity, data) { try { const response = await fetch(${this.baseUrl}/app/${operation}/${entity}, { method: ‘POST’, headers: {‘Content-Type’: ‘application/json’}, body: JSON.stringify(data) }); if (!response.ok) throw new Error(‘Network response was not ok’); const result = await response.json(); if (result.status !== 200) throw new Error(result.text || ‘API error’); // 触发操作成功的回调 this.triggerCallbacks(operation, entity, data); // 自动同步数据 this.syncData(); return result; } catch (error) { console.error(‘CRUD error:’, error); // 触发操作失败的回调 this.triggerCallbacks(${operation}_error, entity, { data, error: error.message }); throw error; } } /** 执行CRUD操作 @param {string} operation - ‘add’, ‘delete’, ‘update’ @param {string} entity - 实体名称单数性质(小写) @param {Object} data - 要发送的数据 @returns {Promise<Object>} 响应结果 */ async crudOperation(operation, entity, data) { try { const response = await fetch(${this.baseUrl}/app/${operation}/${entity}, { method: ‘POST’, headers: {‘Content-Type’: ‘application/json’}, body: JSON.stringify(data) }); if (!response.ok) throw new Error('Network response was not ok'); const result = await response.json(); if (result.status !== 200) throw new Error(result.text || 'API error'); // 触发操作成功的回调 this.triggerCallbacks(operation, entity, data); // 自动同步数据 this.syncData(); return result; } catch (error) { console.error(‘CRUD error:’, error); // 触发操作失败的回调 this.triggerCallbacks(${operation}_error, entity, { data, error: error.message }); throw error; } } /** 自动同步数据(防止频繁请求) */ async syncData() { if (this.isSyncing) return; // 距离上次同步超过5秒才执行新同步 if (this.lastSync && new Date() - this.lastSync < 5000) { setTimeout(() => this.syncData(), 5000 - (new Date() - this.lastSync)); return; } this.isSyncing = true; try { await this.fetchAll(); } finally { this.isSyncing = false; } } /** 添加实体 @param {string} entity - 实体名称单数性质 @param {Object} data - 实体数据 */ async addEntity(entity, data) { return this.crudOperation(‘add’, entity, data); } /** 更新实体 @param {string} entity - 实体名称单数性质 @param {Object} data - 实体数据(必须包含id) */ async updateEntity(entity, data) { return this.crudOperation(‘update’, entity, data); } /** 删除实体 @param {string} entity - 实体名称单数性质 @param {number} id - 实体ID */ async deleteEntity(entity, id) { return this.crudOperation(‘delete’, entity, {id}); } } export { DataManager }; // 创建单例实例 //const dataManager = new DataManager(‘http://127.0.0.1:8080/KuCun2’); //// 初始化获取所有数据 //dataManager.fetchAll().then(() => { // console.log(‘Initial data loaded’); //}); // 导出数据对象,外部可以直接访问 data.bancais, data.dingdans 等 //export const data = dataManager.data; //// 导出操作方法 //export const addEntity = dataManager.addEntity.bind(dataManager); //export const updateEntity = dataManager.updateEntity.bind(dataManager); //export const deleteEntity = dataManager.deleteEntity.bind(dataManager); //export const fetchAll = dataManager.fetchAll.bind(dataManager);只修改api格式问题 发送api格式为{属性:“”,关联对象:{“id”:0},关联对象集:[{“id”:0},{“id”:1}]}
最新发布
06-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值