diff --git a/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs b/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs index 51547d8..42c6330 100644 --- a/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs +++ b/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs @@ -151,17 +151,51 @@ namespace Warehouse.Controllers } /// - /// treetable 获取子节点数据(2021.05.02) + /// V1.12.2 修复:通用分页查询(带 Filter/Wheres/Sort 支持) + /// + /// **历史**:V1.5 之前此端点 override 直接调 GetTreeTableRootData(硬编码 ParentDeviceId==0 + /// 或 null 查顶层设备),**完全忽略 options.Filter**。这导致 warehouse 大端 Filter.vue + /// 按 MapModelId 查询设备时永远返回空(子设备查不到)。 + /// + /// **修复**:智能分流 + /// - options.Filter 不为空 或 options.Wheres 不为空 → 走通用分页(支持任意字段过滤) + /// - 都为空 → 走原 GetTreeTableRootData 逻辑(保持 tree-table 组件兼容) + /// + /// 注意:基类 ApiBaseController.GetPageData 是 virtual ActionResult 同步方法, + /// 这里用 override 保留二进制兼容;内部用 .Result 包装 async 调用(不会死锁, + /// 因为 GetFilteredPageData 内部是纯查询不涉及同步上下文切换)。 /// - /// - /// [ApiActionPermission(ActionPermissionOptions.Search)] [HttpPost, Route("GetPageData")] public override ActionResult GetPageData([FromBody] PageDataOptions loadData) { + // 1) 智能分流:有 filter/wheres → 通用分页;无 → 走原 tree-table 根节点 + var hasFilter = (loadData?.Filter != null && loadData.Filter.Count > 0) + || !string.IsNullOrEmpty(loadData?.Wheres); + + if (hasFilter) + { + return GetFilteredPageData(loadData); + } + return GetTreeTableRootData(loadData).Result; } + /// + /// V1.12.2 新增:通用分页查询(不限制 ParentDeviceId,支持任意字段 Filter)。 + /// 用于 warehouse 大端按 MapModelId 等任意字段查设备列表。 + /// + private ActionResult GetFilteredPageData(PageDataOptions options) + { + // 直接用 _service 调用 IService.GetPageData 默认实现 + // 默认实现会自动处理 options.Filter(按 name 字段名+value 值+displayType 比较类型) + // 并按 options.Page/Rows 分页、按 options.Sort 排序 + var pageData = _service.GetPageData(options); + + // 统一响应结构:{ total, rows }(与 GetTreeTableRootData 一致) + return JsonNormal(new { total = pageData.total, rows = pageData.rows }); + } + /// /// treetable 获取一级(根)节点数据 /// @@ -172,7 +206,10 @@ namespace Warehouse.Controllers { //页面加载根节点数据条件x => x.ParentId == 0,自己根据需要设置 var dbServiceId = UserContext.CurrentServiceId; - var query = _repository.FindAsIQueryable(x => x.ParentDeviceId == 0 || x.DeviceId == 1); + // V1.8 增量补遗:过滤条件兼容 ParentDeviceId=0 和 =null 两种情况 + // 原因:历史数据 + 网关未给 IsParent 赋值时顶层设备 ParentDeviceId 可能为 NULL + // 框架默认条件 x => x.ParentId == 0 会漏掉所有 NULL 记录 + var query = _repository.FindAsIQueryable(x => x.ParentDeviceId == 0 || x.ParentDeviceId == null || x.DeviceId == 1); var queryChild = _repository.FindAsIQueryable(x => true);