20260511214503

This commit is contained in:
oneao committed 2026-05-11 21:45:04 +08:00
1 parent 364d29dbaa
commit e98740192d
9 files changed
+2451 -875

No files matched your search

+68 -436
View File
@@ -17,7 +17,7 @@
<script type="text/javascript" src="js/datagrid-drag/datagrid-dnd.js"></script>
<script type="text/javascript" src="js/datagrid-drag/datagrid-head.js"></script>
<script type="text/javascript" src="jsys/chinesetopy.js"></script>
<script type="text/javascript" src="js/draft-page-manager.js"></script>
<script type="text/javascript" src="js/feegrid-manager.js"></script>
<style>
.g3-label-width {
width: 80px;
@@ -230,8 +230,7 @@
</div>
</div>
<div id="subgridPager" class="easyui-pagination"
style="margin: 6px 0px;background:#efefef;border:1px solid #ccc;"></div>
<div class="g3-form-row" style="height: 30px; width: 99%; display: flex; align-items: center; gap: 20px;">
<div class="g3-form-col" id="ed_div_total" style="flex: 1; min-width: 200px;">
@@ -280,36 +279,14 @@
var subdata_zdfees = new Array();
var mainData = {};
/**
* 子表草稿态 + 分页管理模块
* 使用独立模块 draft-page-manager.js 管理
*
* 职责:
* - 草稿池:insertRows / updateRows / deleteRows(保存提交用)
* - 行展示态:行对象上的 _rowState(insert | update | delete | '')
* - 分页:remoteTotal(服务端)+ insertRows 混排
* - UI 勾选:selectedRows 唯一真相源(跨页)
*/
var draftManager = window.DraftPageManager.createDraftManager({
keyField: 'subid',
pageSize: 50
});
/**
* 修剪当前页选中状态(配合 clearChecked 使用)
*/
function pruneSelectedRowsForCurrentPage() {
var rows = $('#feegrid').datagrid('getRows');
draftManager.removeSelectionForRows(rows);
}
let subSummary = {
// 分币种
moneyTypes: [],
// 折合总金额
totalAmount: 0
};
// DataGrid 管理器实例
var gridManager;
$(function () {
SetEnterFocus();
@@ -389,8 +366,7 @@
// configColumn('feegrid',subviewtable,'local');
if (strid != "") {
loaddata(strid);
// loaddata_detail('feegrid', subviewtable, strid, '');
loaddata_sub()
gridManager.loadPage(1);
calcw_fee();
} else {
console.log("走到了这里");
@@ -494,148 +470,34 @@
field: 'bcheck'
});
$('#feegrid').datagrid({
idField: 'subid',
fit: true,
remoteSort: false,
multiSort: true,
//multiSort :true,
singleSelect: true,
//ctrlSelect:true,
selectOnCheck: false,
checkOnSelect: false,
rownumbers: true,
// onDblClickRow:function(rowIndex, rowData){openDatayw(rowData);},
//onClickRow : onClickRow_con,
// onBeginEdit:onBeginEdit_con,
toolbar: '#tb_con',
columns: [columnfield],
// pagination : false,
// 创建 DataGridManager(自动初始化 datagrid 和分页器)
gridManager = createDataGridManager({
gridId: 'feegrid',
keyField: 'subid',
pageSize: 50,
autoRowHeight: false,
//pageList:[50,100,200,500],
LoadSelkeyID: undefined,
rowStyler: function (index, row) {
if (row._rowState === 'insert') {
return 'background-color: #f6ffed;';
} else if (row._rowState === 'update') {
return 'background-color: #fffbe6;';
} else if (row._rowState === 'delete') {
return 'background-color: #fff1f0;';
}
return '';
},
onLoadSuccess: function (data) {
$.messager.progress('close');
if ($('#feegrid').datagrid('options').LoadSelkeyID != undefined) {
var rows = $('#feegrid').datagrid("getRows");
if (rows.length > 0) {
$('#b_dw_id').val(rows[0].mx_dw_id);
$('#v_dwname').val(rows[0].v_mx_dw_name);
if (rows[0].b_mycompany_id != undefined && rows[0].b_mycompany_id != '') {
$('#b_mycompany_id').val(rows[0].b_mycompany_id);
}
if (rows[0].v_mycompanyname != undefined && rows[0].v_mycompanyname != '') {
$('#v_mycompanyname').val(rows[0].v_mycompanyname);
}
}
$('#feegrid').datagrid('options').LoadSelkeyID = undefined;
}
$('.datagrid-body tr').each(function () {
var rowIndex = $(this).attr('datagrid-row-index');
if (rowIndex !== undefined) {
var row = $('#feegrid').datagrid('getRows')[parseInt(rowIndex)];
if (row && row._rowState === 'delete') {
$(this).addClass('datagrid-row-delete');
} else {
$(this).removeClass('datagrid-row-delete');
}
}
});
syncFeeGridChecksFromSubState();
viewName: subviewtable,
orderField: 'father ASC, mx_xh ASC, b_id ASC',
baseSearchCondition: "mx_zdorderid='" + strid + "'",
selectAllBtn: '#btn_select_all',
selectAllText: '全部选中',
unselectAllText: '全部反选',
userid: '',
onLoadSuccess: function (rows) {
calcw_selfee();
},
onAfterEdit: function (rowIndex, row, changes) {
if (Object.keys(changes).length === 0) {
return;
}
if (draftManager.isInsertRow(row) || draftManager.isInInsertRows(row)) {
if (!row._rowState) {
row._rowState = 'insert';
}
} else if (!draftManager.isDeleteRow(row)) {
row._rowState = 'update';
draftManager.addToUpdateRows(row);
}
calcw_fee();
},
onCheckAll: function () {
draftManager.setAllChecked(true);
draftManager.clearExcludedRows();
calcw_selfee()
},
onUncheckAll: function () {
draftManager.setAllChecked(false);
draftManager.clearExcludedRows();
draftManager.clearSelectedRows();
calcw_selfee()
},
onCheck: function (index, row) {
if (draftManager.isAllChecked()) {
draftManager.removeExcludedRow(row);
} else {
draftManager.addSelectedRow(row);
}
calcw_selfee()
},
onUncheck: function (index, row) {
if (draftManager.isAllChecked()) {
draftManager.addExcludedRow(row);
} else {
draftManager.removeSelectedRow(row);
}
calcw_selfee()
}
}).datagrid("columnMoving");
$('#feegrid').datagrid('getPanel').find('.datagrid-body').on('scroll.datagrid', function (e) {
if (editIndex_con != undefined) {
$('#feegrid').datagrid('endEdit', editIndex_con);
editIndex_con = undefined;
}
})
$('#subgridPager').pagination({
total: draftManager.getPagination().total,
pageSize: draftManager.getPagination().pageSize,
pageNumber: draftManager.getPagination().pageNumber,
pageList: [50, 100, 200],
onSelectPage: function (pageNumber, pageSize) {
draftManager.setPageNumber(pageNumber);
draftManager.setPageSize(pageSize);
loaddata_sub();
},
onChangePageSize: function (pageSize) {
draftManager.setPageNumber(1);
draftManager.setPageSize(pageSize);
if (!draftManager.isAllChecked()) {
$('#feegrid').datagrid('clearChecked');
draftManager.clearSelectedRows();
}
calcw_selfee()
loaddata_sub();
onSelectionChange: function () {
calcw_selfee();
}
});
// configColumn('feegrid',subviewtable,'local');
gridManager.setColumns(columnfield);
}
// configColumn('feegrid',subviewtable,'local');
function openData(id, hstype) {
var e = window.event || e;
if (e.stopPropagation) {
@@ -649,227 +511,8 @@
}
}
// ========== 子表:分页请求、与 insertRows 合并、行态恢复、刷新 ==========
// 拉取当前页:纯 insert 尾段走本地切片;否则 Ajax 后 merge 尾段 insert
function loaddata_sub() {
$('#feegrid').datagrid('loading');
$('#subgridPager').css({
'pointer-events': 'none',
'opacity': '0.6'
});
$('#subgridPager').pagination('loading');
var pagination = draftManager.getPagination();
var pageNumber = pagination.pageNumber;
var pageSize = pagination.pageSize;
var remoteTotal = pagination.remoteTotal;
var insertRows = draftManager.getInsertRows();
if (!strid) {
var pageData = [];
if (insertRows.length > 0) {
var startInInsert = (pageNumber - 1) * pageSize;
var endInInsert = startInInsert + pageSize;
pageData = insertRows.slice(startInInsert, endInInsert);
}
$('#feegrid').datagrid('loadData', pageData);
$('#subgridPager').pagination('refresh', {
total: insertRows.length,
pageNumber: pageNumber,
pageSize: pageSize
});
$('#feegrid').datagrid('loaded');
$('#subgridPager').css({
'pointer-events': '',
'opacity': ''
});
$('#subgridPager').pagination('loaded');
return;
}
if (remoteTotal > 0 && draftManager.isInsertOnlyPage(pageNumber)) {
var startInInsert = (pageNumber - 1) * pageSize - remoteTotal;
var endInInsert = startInInsert + pageSize;
var pageData = insertRows.slice(startInInsert, endInInsert);
$('#feegrid').datagrid('loadData', pageData);
$('#subgridPager').pagination('refresh', {
total: draftManager.getActualTotal(),
pageNumber: pageNumber,
pageSize: pageSize
});
$('#feegrid').datagrid('loaded');
$('#subgridPager').css({
'pointer-events': '',
'opacity': ''
});
$('#subgridPager').pagination('loaded');
return;
}
var searchcondition = "mx_zdorderid='" + strid + "'";
var searchparam = {
viewname: subviewtable,
searchcondition: searchcondition,
userid: '',
orderfield: 'father ASC, mx_xh ASC, b_id ASC',
keyfield: 'subid',
page: pagination.pageNumber,
rows: pagination.pageSize
};
$.ajax({
type: 'post',
url: 'jsp/searchdatapagenew.jsp',
cache: false,
data: searchparam,
dataType: 'json',
success: function (result) {
draftManager.setRemoteTotal(result.total);
draftManager.setCurrentRemoteRows(result.rows);
draftManager.restoreRowStates(result.rows);
var pageData = draftManager.buildPageData(result.rows, pageNumber);
$('#feegrid').datagrid('loadData', pageData);
var newPagination = draftManager.getPagination();
$('#subgridPager').pagination('refresh', {
total: newPagination.total,
pageNumber: newPagination.pageNumber,
pageSize: newPagination.pageSize
});
},
error: function () {
console.log('分页加载失败');
},
complete: function () {
$('#feegrid').datagrid('loaded');
$('#subgridPager').css({
'pointer-events': '',
'opacity': ''
});
$('#subgridPager').pagination('loaded');
}
});
}
// buildCurrentPageData 和 restoreRowStates 已移至 draft-page-manager.js 模块中
// 新增费用等后:若页码越界则纠页,否则重载
function refreshCurrentPage() {
var currentPage = draftManager.getPagination().pageNumber;
var totalPages = draftManager.getTotalPages();
if (currentPage > totalPages) {
draftManager.setPageNumber(totalPages);
$('#subgridPager').pagination('select', totalPages);
} else {
loaddata_sub();
}
}
// 仅重绘当前内存行(保存行软删后),会 clearChecked,并同步修剪 selectedRows
function refreshCurrentPageDisplay() {
var currentRows = $('#feegrid').datagrid('getRows');
$('#feegrid').datagrid('loadData', currentRows);
$('#feegrid').datagrid('clearChecked');
pruneSelectedRowsForCurrentPage();
calcw_selfee();
}
// 撤销删除后:重绘并恢复勾选与业务侧选中金额
function refreshCurrentPageAfterUndo() {
var currentRows = $('#feegrid').datagrid('getRows');
$('#feegrid').datagrid('loadData', currentRows);
syncFeeGridChecksFromSubState();
calcw_selfee();
}
// 物理删除 insert 行等后:按展示条数纠正页码并重载
function refreshCurrentPageAfterDelete() {
var pagination = draftManager.getPagination();
var currentPage = pagination.pageNumber;
var pageSize = pagination.pageSize;
var displayTotal = draftManager.getDisplayTotal();
var totalPages = Math.ceil(displayTotal / pageSize);
if (currentPage > totalPages && totalPages > 0) {
draftManager.setPageNumber(totalPages);
$('#subgridPager').pagination('select', totalPages);
} else if (displayTotal === 0) {
$('#feegrid').datagrid('loadData', []);
$('#subgridPager').pagination('refresh', {
total: 0,
pageNumber: 1,
pageSize: pageSize
});
} else {
loaddata_sub();
}
$('#feegrid').datagrid('clearChecked');
pruneSelectedRowsForCurrentPage();
calcw_selfee();
}
// 根据 selectedRows 主键集合,打勾/取消当前可见行(跨页真相源)
function syncFeeGridChecksFromSubState() {
var rows = $('#feegrid').datagrid('getRows');
var selKeys = {};
var selectedRows = draftManager.getSelectedRows();
for (var s = 0; s < selectedRows.length; s++) {
selKeys[draftManager.getRowKey(selectedRows[s])] = true;
}
var excludedKeys = {};
var excludedRows = draftManager.getExcludedRows();
for (var e = 0; e < excludedRows.length; e++) {
excludedKeys[draftManager.getRowKey(excludedRows[e])] = true;
}
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
var key = draftManager.getRowKey(row);
if (draftManager.isAllChecked()) {
if (excludedKeys[key]) {
$('#feegrid').datagrid('uncheckRow', i);
} else {
$('#feegrid').datagrid('checkRow', i);
}
} else {
if (selKeys[key]) {
$('#feegrid').datagrid('checkRow', i);
} else {
$('#feegrid').datagrid('uncheckRow', i);
}
}
}
}
function toggleSelectAll() {
if (draftManager.isAllChecked()) {
draftManager.setAllChecked(false);
draftManager.clearExcludedRows();
draftManager.clearSelectedRows();
$('#feegrid').datagrid('clearChecked');
$('#btn_select_all').val('全部选中');
} else {
draftManager.setAllChecked(true);
draftManager.clearExcludedRows();
var rows = $('#feegrid').datagrid('getRows');
for (var i = 0; i < rows.length; i++) {
$('#feegrid').datagrid('checkRow', i);
}
$('#btn_select_all').val('全部反选');
}
gridManager.toggleSelectAll();
}
//////////-------feegrid-----------
@@ -920,8 +563,8 @@
// 草稿:已保存行标记删除 → 仍计入 DB 汇总,需扣回;本地新增 insertRows → 尚未进 DB,需加上
var dIdx;
var deleteRows = draftManager.getDeleteRows();
var insertRows = draftManager.getInsertRows();
var deleteRows = gridManager.getDeleteRows();
var insertRows = gridManager.getInsertRows();
for (dIdx = 0; dIdx < deleteRows.length; dIdx++) {
applyFeeRowToMoneyTypeGroups(groupMap, deleteRows[dIdx], -1);
}
@@ -981,7 +624,7 @@
}
function calcDeleteFee() {
var deleteRows = draftManager.getDeleteRows();
var deleteRows = gridManager.getDeleteRows();
var deleteGroupMap = {};
for (var i = 0; i < deleteRows.length; i++) {
@@ -1025,7 +668,7 @@
// 计算选中行的金额(仅业务有效行)
function calcw_selfee() {
var rows = draftManager.getValidSelectedRows();
var rows = gridManager.getValidSelectedRows();
var irow = rows.length;
@@ -1254,9 +897,8 @@
loaddata(strid);
endEditing_con();
draftManager.reset();
loaddata_sub();
gridManager.reset();
gridManager.loadPage(1);
calcw_fee();
var formobj = app.serializeObject2($('#zdskform'));
@@ -1374,7 +1016,7 @@
var ywidMap = {};
var deleteRows = draftManager.getDeleteRows();
var deleteRows = gridManager.getDeleteRows();
if (deleteRows) {
for (let d of deleteRows) {
if (!d || !d.subid) {
@@ -1387,7 +1029,7 @@
}
}
var insertRows = draftManager.getInsertRows();
var insertRows = gridManager.getInsertRows();
if (insertRows) {
for (let r of insertRows) {
if (!r || !r.subid) {
@@ -1647,7 +1289,7 @@
console.log('主表变化');
return true;
} else {
if (draftManager.getInsertRows().length > 0 || draftManager.getUpdateRows().length > 0 || draftManager.getDeleteRows().length > 0) {
if (gridManager.getInsertRows().length > 0 || gridManager.getUpdateRows().length > 0 || gridManager.getDeleteRows().length > 0) {
return true;
}
return false;
@@ -1711,19 +1353,19 @@
for (var i = 0; i < result.length; i++) {
var r = result[i];
var rk = draftManager.getRowKey(r);
var dup = draftManager.getInsertRows().some(function (x) {
return draftManager.getRowKey(x) === rk;
var rk = gridManager.getDraftManager().getRowKey(r);
var dup = gridManager.getInsertRows().some(function (x) {
return gridManager.getDraftManager().getRowKey(x) === rk;
});
if (!dup) {
if (!r._rowState) {
r._rowState = 'insert';
}
draftManager.addInsertRow(r);
gridManager.addInsertRows(r);
}
}
refreshCurrentPage();
gridManager.refreshCurrentPage();
calcw_fee();
}
},
@@ -1763,30 +1405,30 @@
for (var i = 0; i < rows.length; i++) {
var r = rows[i];
var rk = draftManager.getRowKey(r);
var dup = draftManager.getInsertRows().some(function (x) {
return draftManager.getRowKey(x) === rk;
var rk = gridManager.getDraftManager().getRowKey(r);
var dup = gridManager.getInsertRows().some(function (x) {
return gridManager.getDraftManager().getRowKey(x) === rk;
});
if (!dup) {
if (!r._rowState) {
r._rowState = 'insert';
}
draftManager.addInsertRow(r);
gridManager.addInsertRows(r);
}
}
refreshCurrentPage();
gridManager.refreshCurrentPage();
calcw_fee();
}
////////////////////////////////////////////////////////////
// 子表草稿:标记删除或移除 insert(数据源 getActualSelectedRows)
// 子表草稿:标记删除或移除 insert(数据源 getValidSelectedRows)
function removeit() {
$.messager.confirm("操作提示", '您确定要删除勾选的费用吗?', function (r) {
if (r) {
endEditing_con();
var selectedRows = draftManager.getValidSelectedRows();
var selectedRows = gridManager.getValidSelectedRows();
if (selectedRows.length === 0) {
$.messager.alert('提示', '请选择要删除的行(已标记删除的行请使用「撤销删除」)', 'warning');
@@ -1806,33 +1448,30 @@
var hasInsertDelete = false;
var dm = gridManager.getDraftManager();
for (var i = selectedRows.length - 1; i >= 0; i--) {
var row = selectedRows[i];
if (draftManager.isInsertRow(row) || draftManager.isInInsertRows(row)) {
draftManager.removeInsertRow(row);
draftManager.removeFromUpdateRows(row);
if (dm.isInsertRow(row) || dm.isInInsertRows(row)) {
gridManager.removeInsertRow(row);
hasInsertDelete = true;
} else {
var delKey = draftManager.getRowKey(row);
var wasUpdate = draftManager.getUpdateRows().some(function (rr) {
return draftManager.getRowKey(rr) === delKey;
var delKey = dm.getRowKey(row);
var wasUpdate = gridManager.getUpdateRows().some(function (rr) {
return dm.getRowKey(rr) === delKey;
});
row._undoRowState = wasUpdate ? 'update' : '';
row._rowState = 'delete';
draftManager.addToDeleteRows(row);
draftManager.removeFromUpdateRows(row);
gridManager.addDeleteRow(row);
}
draftManager.removeSelectedRow(row);
}
calcw_fee();
if (hasInsertDelete) {
refreshCurrentPageAfterDelete();
gridManager.refreshAfterDelete();
} else {
refreshCurrentPageDisplay();
gridManager.refreshDisplay();
}
}
})
@@ -1844,13 +1483,14 @@
var pageRows = $('#feegrid').datagrid('getRows');
var targets = [];
var selKeys = {};
var selectedRows = draftManager.getSelectedRows();
var dm = gridManager.getDraftManager();
var selectedRows = gridManager.getSelectedRows();
for (var sk = 0; sk < selectedRows.length; sk++) {
selKeys[draftManager.getRowKey(selectedRows[sk])] = true;
selKeys[dm.getRowKey(selectedRows[sk])] = true;
}
var hasSelectionOnPage = false;
for (var hp = 0; hp < pageRows.length; hp++) {
if (selKeys[draftManager.getRowKey(pageRows[hp])]) {
if (selKeys[dm.getRowKey(pageRows[hp])]) {
hasSelectionOnPage = true;
break;
}
@@ -1862,14 +1502,14 @@
}
}
} else {
var delSel = draftManager.getDeletedSelectedRows();
var delSel = dm.getDeletedSelectedRows();
var delKeys = {};
for (var dv = 0; dv < delSel.length; dv++) {
delKeys[draftManager.getRowKey(delSel[dv])] = true;
delKeys[dm.getRowKey(delSel[dv])] = true;
}
for (var v = 0; v < pageRows.length; v++) {
var pr = pageRows[v];
if (pr._rowState === 'delete' && delKeys[draftManager.getRowKey(pr)]) {
if (pr._rowState === 'delete' && delKeys[dm.getRowKey(pr)]) {
targets.push(pr);
}
}
@@ -1883,18 +1523,10 @@
if (row._rowState !== 'delete') {
continue;
}
var prev = row._undoRowState;
draftManager.removeFromDeleteRows(row);
if (prev === 'update') {
row._rowState = 'update';
draftManager.addToUpdateRows(row);
} else {
row._rowState = '';
}
delete row._undoRowState;
gridManager.removeDeleteRow(row);
}
calcw_fee();
refreshCurrentPageAfterUndo();
gridManager.refreshAfterUndo();
}
// 批量删除
@@ -1930,7 +1562,7 @@
var zdorderid = $('#b_id').val();
var url;
var i = 0;
var rows = draftManager.getValidSelectedRows();
var rows = gridManager.getValidSelectedRows();
if (rows.length <= 0) {
var moneyid = $('#b_money_id').val();
url = "jcwzd/editskd.jsp?zdorderid=" + zdorderid + "&moneyid=" + moneyid;
@@ -2005,7 +1637,7 @@
}
var i = 0;
var url;
var rows = draftManager.getValidSelectedRows();
var rows = gridManager.getValidSelectedRows();
/* if (rows.length<=0){
return false;
};
@@ -2340,7 +1972,7 @@
});
}
function locked_ys() {
var rows = draftManager.getValidSelectedRows();
var rows = gridManager.getValidSelectedRows();
var locked_idarr = new Array();
var updaterows = new Array();
for (var i in rows) {
@@ -2359,7 +1991,7 @@
}
}
function locked_cw() {
var rows = draftManager.getValidSelectedRows();
var rows = gridManager.getValidSelectedRows();
var locked_idarr = new Array();
var updaterows = new Array();
for (var i in rows) {
@@ -2378,7 +2010,7 @@
}
}
function unlocked_cw() {
var rows = draftManager.getValidSelectedRows();
var rows = gridManager.getValidSelectedRows();
var locked_idarr = new Array();
var updaterows = new Array();
for (var i in rows) {