3.9K Star 18.4K Fork 5.3K

卓源软件 / JeeSite 4.x and 5.x

 / 详情

主子表,子表提交数据缺失问题

已完成
创建于  
2021-02-18 10:44

该问题是怎么引起的?

版本4.0.8,代码生成主子表,子表设置初始不可编辑,新增记录提交时发现总有一条记录丢失不提交,设置editGridInitAllRowEdit为true时,数据不丢失,应该是bug。

重现步骤

1、子表前端界面

<script>
$("#AssignDataGrid").dataGrid({
	data: ${toJson(ZktimeAttsum.AttenceAssignList)},
	datatype: "local", // 设置本地数据
	autoGridHeight: function () {
		return 'auto'
	}, // 设置自动高度

	// 设置数据表格列
	columnModel: [
		{header: '状态', name: 'status', editable: true, hidden: true},
		{header: '主键', name: 'id', editable: true, hidden: true},
		{header: '${text('考勤记录')}', name: 'zkid.id', editable: true, hidden: true},
		{
			header: '${text('项目/系统')}', name: 'ProjectSystem', width: 150,
			formatter: function (val, obj, row, act) {
				return js.val(row, 'ProjectSystem.id') + '|' + js.val(row, 'ProjectInfo.projectName')+'/'+js.val(row, 'SystemInfo.sysName');
			}, editable: true, edittype: "custom", editoptions: {
				custom_element: function (val, editOptions) {
					return js.template('treeselectTpl', {
						id: 'sys_' + editOptions.id, title: '项目/系统',
						name: 'ProjectSystem.id', value: val.split('|')[0],
						labelName: 'SystemInfo.sysName', labelValue: val.split('|')[1],
						url: '${ctx}//project/ProjectInfo/proSysList', cssClass: ''
					});
				}
			}
		},
		{
			header: '${text('工时')}', name: 'offhour', width: 40,
			edittype: 'text',
			editable: true,
			editoptions: {'class': 'form-control number required'}
		},
		{header:'${text('更新人')}', name:'updateBy', hidden: true},
		{header:'${text('更新人')}', name:'updateByName', index:'a.user_name', width:50, align:"center"},
		{
			header:'${text('操作')}',
			name:'actions',
			width:80,
			sortable:false,
			fixed:true,
			formatter:function (val, obj, row, act) {
			    //记录只允许修改一次
				var actions = [];
				if(row.updateBy == 'system'){
					actions.push('<a href="#" onclick="$(\'#AssignDataGrid\').dataGrid(\'editRow\',\''+obj.rowId+'\',{keys:true,focusField:true});return false;"><i class="fa fa-pencil"></i></a>&nbsp;');
				}
				if (val == 'new') {
					actions.push('<a href="#" onclick="js.confirm(\'${text('你确认要删除这条数据吗?')}\', function(){$(\'#AssignDataGrid\').dataGrid(\'delRowData\',\'' + obj.rowId + '\')});return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
				} else {
					if(row.updateBy == 'system'){
						actions.push('<a href="#" onclick="js.confirm(\'${text('你确认要删除这条数据吗?')}\', function(){$(\'#AssignDataGrid\').dataGrid(\'setRowData\',\'' + obj.rowId + '\',null,{display:\'none\'})});$(\'#' + obj.rowId + '_status\').val(\'' + Global.STATUS_DELETE + '\');return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
					}
				}
				return actions.join('');
			},editoptions: {defaultValue: 'new'}}],
// 编辑表格参数
	editGrid: true,				// 是否是编辑表格
	editGridInitRowNum: 1,		// 编辑表格的初始化新增行数
	editGridInitAllRowEdit: false,		//初始不可编辑
	editGridAddRowBtn: $('#AssignDataGridAddRowBtn'),	// 子表增行按钮
	editGridAddRowInitData: {id: '', status: Global.STATUS_NORMAL},	// 新增行的时候初始化的数据

// 编辑表格的提交数据参数
	editGridInputFormListName: 'AttenceAssignList', // 提交的数据列表名
	editGridInputFormListAttrs:'status,id,zkid.id,ProjectSystem.id,offhour,', // 提交数据列表的属性字段
// 加载成功后执行事件
	ajaxSuccess:function (data) {

	}
});
</script>

2、子表表格初始化界面如下(新增了一条记录)
输入图片说明

3、点击提交后,后台接收到6条记录,应该是7条记录
输入图片说明

报错信息

评论 (2)

random 创建了任务
random 关联仓库设置为卓源软件/JeeSite 4.2
random 修改了描述
random 修改了描述
展开全部操作日志

不开启editGridInitAllRowEdit的话,原数据来的6条数据就不会生成输入框。你通过 f12 看提交后台的参数是什么,应该没有这6条数据。你从后台查看到的6条数据是 Controller 里 get 方法合并的数据。第7条数据没有,请 f12 确认提交的内容,发上来。

确实是get方法合并的数据,提交的时候只提交了有输入框的数据,get方法合并的时候把新纪录从list0开始覆盖,不知道这个能不能调整为从list已有数据尾部追加?业务功能上的需要,目前用的笨方法,又从数据库中全部查出来做的判断 :joy:

卓源软件 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
6732 thinkgem 1651893329 5437878 zhen yuan 1616375251
Java
1
https://gitee.com/thinkgem/jeesite4.git
git@gitee.com:thinkgem/jeesite4.git
thinkgem
jeesite4
JeeSite 4.x and 5.x

搜索帮助