20260512212217
This commit is contained in:
1 parent
c81f78880e
commit
d2a0f90080
2 files changed
+389
No files matched your search
@@ -0,0 +1,85 @@
|
||||
# 计划:在 addInsertRows 中添加跳转到新增行第一页的功能
|
||||
|
||||
## 需求分析
|
||||
|
||||
在 `addInsertRows` 函数执行后,自动跳转到新增行所在的第一个页面。如果当前页已经是新增行所在的页,则不进行跳转。
|
||||
|
||||
## 代码分析
|
||||
|
||||
### 相关函数位置
|
||||
|
||||
* **addInsertRows**: [feegrid-manager.js:832-843](file:///d:/workspace/code/jsp/js/feegrid-manager.js#L832-L843)
|
||||
|
||||
* **loadPage**: [feegrid-manager.js:644-743](file:///d:/workspace/code/jsp/js/feegrid-manager.js#L644-L743)
|
||||
|
||||
* **pagination 状态**: state.pagination(包含 pageNumber, pageSize, remoteTotal)
|
||||
|
||||
### 数据结构理解
|
||||
|
||||
1. `state.cacheManager.getInsertRows()` - 获取所有新增行(draftState === 'add')
|
||||
2. `state.pagination.remoteTotal` - 远程数据的总条数
|
||||
3. 新增行始终位于所有数据的最末端(即 remoteTotal 之后)
|
||||
|
||||
### 分页计算逻辑
|
||||
|
||||
* 总数据量 = remoteTotal + insertRows.length
|
||||
|
||||
* 新增行的起始位置 = remoteTotal
|
||||
|
||||
* 新增行第一行所在的页码 = Math.ceil((remoteTotal + 1) / pageSize)
|
||||
|
||||
* 或者:Math.floor(remoteTotal / pageSize) + 1
|
||||
|
||||
## 实现步骤
|
||||
|
||||
### Step 1: 修改 addInsertRows 函数
|
||||
|
||||
在 `addInsertRows(rows)` 函数末尾添加逻辑:
|
||||
|
||||
1. 获取所有新增行 `insertRows = state.cacheManager.getInsertRows()`
|
||||
2. 如果 `insertRows.length === 0`,直接返回(不应该发生,但做防御性检查)
|
||||
3. 计算新增行第一行所在的页码:
|
||||
|
||||
* `var remoteTotal = state.pagination.remoteTotal`
|
||||
|
||||
* `var pageSize = state.pagination.pageSize`
|
||||
|
||||
* `var firstInsertPage = Math.floor(remoteTotal / pageSize) + 1`
|
||||
|
||||
* (或者 `Math.ceil((remoteTotal + 1) / pageSize)`)
|
||||
4. 获取当前页码 `var currentPage = state.pagination.pageNumber`
|
||||
5. 如果 `firstInsertPage !== currentPage`,则调用 `loadPage(firstInsertPage)` 跳转
|
||||
|
||||
### Step 2: 代码放置位置
|
||||
|
||||
在 `addInsertRows` 函数的 for 循环之后(行842之后),在函数结束的大括号之前(行843之前)插入新逻辑。
|
||||
|
||||
## 预期代码变更
|
||||
|
||||
```javascript
|
||||
function addInsertRows(rows) {
|
||||
if (!$.isArray(rows)) rows = [rows];
|
||||
var cm = state.cacheManager;
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
var key = cm.getRowKey(row);
|
||||
if (!cm.getRowFromCache(key)) {
|
||||
cm.setRowToCache(row, true);
|
||||
}
|
||||
}
|
||||
|
||||
// 新增:跳转到新增行所在的第一页
|
||||
var insertRows = state.cacheManager.getInsertRows();
|
||||
if (insertRows.length > 0) {
|
||||
var remoteTotal = state.pagination.remoteTotal;
|
||||
var pageSize = state.pagination.pageSize;
|
||||
var firstInsertPage = Math.floor(remoteTotal / pageSize) + 1;
|
||||
var currentPage = state.pagination.pageNumber;
|
||||
if (firstInsertPage !== currentPage) {
|
||||
loadPage(firstInsertPage);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user