Jelajahi Sumber

提交e签宝模板页面js

heyuan 4 minggu lalu
induk
melakukan
adaa629d31

+ 435 - 0
freemarker/lib/core/editGrid.ftl

@@ -0,0 +1,435 @@
+<#macro editGrid id="grid" query="" view_model="" uipk="" onSelectRow="" remoteDataSource="false"  showImport="false" showExport="false" showSearch="false"  entrys="" loadComplete="" rowNum="50" rowList="[50,100,200]" pager="gridPager" hasPager="false" readonly="false" sorterItems="" shrinkToFit="true" datatype="json" multiselect="false" editType="inline" clientFooter="false" sumColModel="[]" serverFooter="false"  rownumbers="true" isShowJumpButton="false">
+
+<#if readonly == "true">
+	<#global grid_readonly="true">
+<#else>
+	<#global grid_readonly="false">
+</#if>
+
+<#if editType == "inline">
+	<#assign cellEdit="true">
+<#elseif editType == "form">
+	<#assign cellEdit="false">
+</#if>
+<#if hasPager == "true">
+	<div class="shrPage span3" style="text-align: right;width: 100%;min-height: 30px;box-sizing: border-box;float: inherit;margin-left: 0;max-width: inherit;">	
+		<div id="gridPager" style="display:inline-block;"></div>			
+	</div>
+</#if>
+<table id="${id}"></table>
+<div id="${id}_editGrid"></div>
+
+<script type="text/javascript">
+	function ${id}_gridRemove(rowId){
+		if (rowId) {
+			waf("#${id}").wafGrid('delRow', rowId);
+		}
+	}
+	function ${id}_gridEdit(rowId){
+		 var rowdatas = waf("#${id}").getRowRealData(rowId);
+		 waf("#${id}").wafGrid('editForm',rowId,rowdatas);
+		 var event = document.createEvent('HTMLEvents');
+		 	 event.initEvent("editComplete_${id}", true, true);
+			 event.eventType = 'message';
+			 document.dispatchEvent(event);
+	}
+    $(function() {
+        var colNames = [],
+			colModel = [],
+			dataGrid_option = {},
+			columnModel = '',
+			datatype = 'json',
+			cellEdit = ${cellEdit},
+			grid_readonly = ${grid_readonly}
+		<#nested>
+		
+		<#if readonly == "false" && editType == "form">
+			<@gridColumn name="operatorColumn" label='${freemarkerMultLan.msg068!"freemarkerMultLan.msg068"}' width="120" editable="false" >
+				<@linkButton id="editButton" caption='${freemarkerMultLan.msg071!"freemarkerMultLan.msg071"}' onclick="${id}_gridEdit">	</@linkButton>
+				<@linkButton id="removeButton" caption='${freemarkerMultLan.msg067!"freemarkerMultLan.msg067"}' onclick="${id}_gridRemove"></@linkButton>
+			</@gridColumn>
+		<#elseif editType == "inline" && isShowJumpButton == "true">
+			<@gridColumn name="operatorColumn" label='${freemarkerMultLan.msg068!"freemarkerMultLan.msg068"}' width="120" editable="false" >
+				<@linkButton id="jumpButton" caption='查看模板字段' onclick="jumpPage"></@linkButton>
+			</@gridColumn>
+		</#if>
+		<#if grid_readonly == "false">
+			<#local multiselect="true">
+		</#if>
+				
+		var url = shr.getContextPath();
+			url += '/dynamic.do?method=getListData&columnModel='+columnModel+"&sorterItems=${sorterItems}";
+		<#if query != "">
+			url = url + '&query=${query}';
+		</#if>
+		<#if uipk != "">
+			url = url + '&uipk=${uipk}';
+		</#if>
+
+		dataGrid_option = {
+		   	url:url,
+			colNames: colNames,
+			jsonReader : {
+				 repeatitems: false
+			},
+			sorterItems:"${sorterItems}",
+			colModel: colModel,		
+			columnModel: columnModel,	
+			rowNum:${rowNum},	
+			customPager:'#gridPager',			 
+			hasPager:${hasPager},			
+			rowList: ${rowList},
+			cellEdit : !grid_readonly, 
+		   	height: 'auto',
+		   	autowidth: true,
+		    viewrecords: true,
+		    cellsubmit:"clientArray",
+		    multiselect: ${multiselect},
+		    _type_:"EditGrid",
+		    shrinkToFit: ${shrinkToFit},
+		    mtype:"post",
+		    recordtext:'({0}-{1})/{2}',
+		    gridview: true,
+		    pginput: true,
+		    rownumbers:${rownumbers},
+			footerrow: true,
+			userDataOnFooter: true,
+			clientFooter: ${clientFooter},
+			serverFooter: ${serverFooter},
+			sumColModel: ${sumColModel},
+			pagerpos: 'center',
+			recordpos: 'left',
+			pginputpos: 'right',
+		    keyOptions: {
+     				addNewRowForLastCell: false,
+     				loop:true
+			}
+		};
+		
+		<#if remoteDataSource == "true">
+			dataGrid_option.datatype = "local"; 
+		<#else>
+			<#if entrys != "">
+				dataGrid_option.data = ${entrys};
+				jsBinder.searchDataForFront = ${entrys};
+				dataGrid_option.datatype = "local";
+			<#else>
+				dataGrid_option.datatype = "${datatype}";
+			</#if>
+		</#if>
+		
+		dataGrid_option.loadComplete = function(ret){
+			if($("#${pager}").html() == "" && "${hasPager}" == "true"){
+				$("#${id}").setCustomPager("#${pager}");
+			}
+			
+			shr.setIframeHeight();
+			
+			$('#${pager}_left').click(function(){
+	        	$('.ui-pg-selbox').show();
+	        	$(this).children('.ui-paging-info').hide();
+	        });
+	        
+	        <#if loadComplete != "">
+	        	if ($.isFunction(${loadComplete})) {
+	        		${loadComplete}.call(this, ret);
+	        	}	        	
+	        </#if>			
+		};
+		var $editGrid = waf("#${id}");
+		jsBinder.gridId = "#${id}";
+		jsBinder.remoteDataSource = "${remoteDataSource}";
+        $editGrid.jqGrid(dataGrid_option).jqGrid("setFrozenColumns");
+		$editGrid.jqGrid('reloadGrid');		
+        $editGrid.jqGrid("resizeGrid",{base:$editGrid,offset:0});
+        waf(window).resize(function(){
+            waf.ieHack.hackResize(function(e){
+                $editGrid.jqGrid("resizeGrid",{base:$editGrid,offset:0});
+            },$editGrid);
+        });
+    });
+</script>
+</#macro>
+
+<#-- 
+-->
+<#-- grid列属性配置  
+	sensitiveRule 脱敏配置,格式:sensitiveRule="{'isOpen':true|false,'name':''}" name 脱敏规则名称;动态列表配置格式{'sensitiveRule':{'isOpen':true|false,'name':''}}
+-->
+<#macro gridColumn entryName name label width=150 align="left" frozen="false" hidden="false" key="false" editable="true" formatoptions="" customformatter="" customparam="" formatter="" rowspan="" fieldspan="" required="false" sortKey="" sorttype="" uipk="" ctrl="" sortable="true" thalign="left" sensitiveRule="">
+	<#if fieldPermEntrysForm(model, name, entryName)>
+	colNames.push("${label}");
+	var columnOptions = {name: "${name}",label:"${label}", frozen:${frozen},width: ${width},thalign:"${thalign}", align: "${align}" , hidden: ${hidden}, key:${key},editable:${editable}, sorttype:"${sorttype}"};
+	if(cellEdit == false){
+		columnOptions.editable = false;
+	}
+	<#if grid_readonly == "false" && editable == "false">
+		columnOptions.classes = 'disabled';
+	</#if>
+	<#if sensitiveRule != "">
+		columnOptions.sensitiveRule = ${sensitiveRule};
+	</#if>
+	<#if sortable != "">
+		columnOptions.sortable = ${sortable};
+	</#if>
+	<#if customformatter != "">
+		columnOptions.formatter = ${customformatter};
+	</#if>
+	<#if customparam != "">
+		columnOptions.customparam = ${customparam};
+	</#if>
+	<#if formatoptions != "">
+		columnOptions.formatoptions = ${formatoptions};
+	</#if> 
+	<#if formatter != "">
+		columnOptions.formatter = "${formatter}";
+	</#if>
+	<#if rowspan != "">
+		columnOptions.rowspan = ${rowspan};
+	</#if>
+	<#if fieldspan != "">
+		columnOptions.fieldspan = ${fieldspan};
+	</#if>
+	<#if sortKey != "">
+		columnOptions.sortKey = ${sortKey};
+	</#if>
+	<#nested>
+	colModel.push(columnOptions);
+	if(columnOptions.formatter == "promptBox"){
+		if(dataGrid_option.datatype == "json"){
+			columnModel += columnOptions.name+".*,";
+			columnOptions.name = columnOptions.name+".*";
+		}else{
+			columnModel += columnOptions.name+",";
+		}
+	}else{
+		columnModel += columnOptions.name + ",";
+	}
+	</#if>
+</#macro>
+
+<#-- 
+	新增表格编辑多语言字段解析,对应grid.wafeditor.js celleditor.shrMultiLangBox
+  -->
+<#macro multiLangBox maxlength="" trimAll="false">
+	columnOptions.formatter = "shrMultiLangBox";
+	<#if maxlength != "">
+		columnOptions.editoptions = {inputJson:{maxlength:${maxlength},trimAll:${trimAll}}};
+	<#else>
+		columnOptions.editoptions = {};
+	</#if>
+	columnOptions.edittype = "shrMultiLangBox";
+	<#nested>
+</#macro>
+
+<#-- 
+	新增表格编辑多语言字段解析,对应grid.wafeditor.js celleditor.shrMultiLangArea
+  -->
+<#macro multiLangArea maxlength="" trimAll="false">
+	<#if maxlength != "">
+		columnOptions.editoptions = {inputJson:{maxlength:${maxlength},trimAll:${trimAll}}};
+	<#else>
+		columnOptions.editoptions = {};
+	</#if>
+	columnOptions.edittype = "shrMultiLangArea";
+	<#nested>
+</#macro>
+
+<#macro text maxlength="">
+	<#if maxlength != "">
+		columnOptions.editoptions = {inputJson:{maxlength:${maxlength}}};
+	<#else>
+		columnOptions.editoptions = {};
+	</#if>
+	columnOptions.edittype = "shrtext";
+	<#nested>
+</#macro>
+<#macro checkbox>
+	columnOptions.formatter = "checkbox";
+	columnOptions.edittype = "checkbox";
+	columnOptions.editoptions = {};
+	<#nested>
+</#macro>
+<#-- 
+	decimalPrecision:视图配置数值小数位,此配置优先
+	ignoreDecimalFormatter:忽略数值格式化,显示数据库原始值
+	roundType:四舍五入方式
+  -->
+<#macro numberField decimalPrecision="" formatType="number" ignoreDecimalFormatter="false" roundType="round">
+	columnOptions.formatter = "numberfield";
+	columnOptions.edittype = "numberfield";
+	columnOptions.editoptions = {inputJson:{id:"txt_"+columnOptions.name,name:columnOptions.name,decimalPrecision:${decimalPrecision},formatType:"${formatType}",ignoreDecimalFormatter:${ignoreDecimalFormatter},roundType:"${roundType}"}};
+	<#nested>
+</#macro>
+<#macro textarea maxlength="">
+	columnOptions.formatter = "shrTextArea";
+	columnOptions.edittype = "shrTextArea";
+	<#if maxlength != "">
+		columnOptions.editoptions = {inputJson:{maxlength:${maxlength}}};
+	<#else>
+		columnOptions.editoptions = {};
+	</#if>
+	<#nested>
+</#macro>
+<#macro select enumSource="">
+	columnOptions.formatter = "shrselect";
+	columnOptions.edittype = "shrselect";
+	columnOptions.editoptions = {selectJson:{id:"selStatus",name:"status",enumSource:"${enumSource}"},enumSource:{},urlSource:shr.getContextPath() + "/selectEnum.do?method=getSelectEnumData&enumSource=${enumSource}"};
+	<#nested>
+</#macro>
+<#macro datePicker dateFormat="">
+	columnOptions.formatter = "datepicker";
+	columnOptions.edittype = "shrdatepicker";
+	columnOptions.editoptions = {datepickerjson:{id:"dp_autoSize",name:"dp_autoSize",dateFormat:"${dateFormat}"}};
+	columnOptions.editoptions.validateJson = {errMsg:"dateISO:'${freemarkerMultLan.msg070!"freemarkerMultLan.msg070"}'",rules:"dateISO:true",validatetrigger:"focus keyup datachange"};
+	<#nested>
+</#macro>
+
+<#-- 
+	showTimeZoneForCtrl: bos提供参数showTimeZoneForCtrl,如果为false,则不转换;不支持视图配置。
+	isAutoTimeZoneTrans: 视图配置优先,视图配置为false则不转换;视图未配置,元数据字段扩展属性isAutoTimeZoneTrans配置为false则不转换;其他情况需要转换。
+	isShowUTC:时区是否显示isShowUTC
+	isReadonlyUTC:时区是否可编辑isReadonlyUTC
+	isRemoveSeconds: true,//配置是否去除时间格式化中的秒
+	isRemoveDay: false,//配置是否去除日期格式化中的天
+	ctrlType:格式化类型 TimeStamp/Date/Time,配合utcUser中pattern使用
+  -->
+<#macro dateTimePicker dateTimeFormat="yyyy-MM-dd HH:mm" minuteStep ="" showTimeZoneForCtrl="true" isAutoTimeZoneTrans="true" isShowUTC="true" isReadonlyUTC="true"  isRemoveSeconds="true" isRemoveDay="false" ctrlType="">
+	<#if ctrlType == "TimeStamp"> 
+		columnOptions.width = 255;
+	</#if>
+	columnOptions.formatter = 'shrDateTimePicker';
+	columnOptions.edittype = 'shrDateTimePicker';
+	columnOptions.editoptions = {datepickerjson:{id:"dp_autoSize",name:"dp_autoSize",minuteStep:"${minuteStep}",showTimeZoneForCtrl:${showTimeZoneForCtrl},isAutoTimeZoneTrans:${isAutoTimeZoneTrans},isShowUTC:${isShowUTC},isReadonlyUTC:${isReadonlyUTC},isRemoveSeconds:${isRemoveSeconds},isRemoveDay:${isRemoveDay},ctrlType:"${ctrlType}"}};
+	<#nested>
+</#macro>
+
+<#--
+	--集团管控新增参数说明 2017/07/11 tiangang_yang
+	-- isHRBaseItem     判断是否是s-HR集团管控基础资料,是:true,不是:false,必须写的参数
+	-- filterConfig     过滤配置框 可选
+	-- bizFilterFields  业务单据需要过滤的字段属性名称,如:hrOrgUnit,name。多个用逗号隔开 ,可选,不传默认业务组织:hrOrgUnit
+	-- f7ReKeyValue     获取F7界面存放key和name的字段,以键值对字符串形式传入,如果不传入,其他类型的F7不变,基础资料默认:BaseInfo.id:BaseInfo.name,可选
+	-- isTree ="false"  F7是左树右表,取数逻辑公共
+	-- treeUrl = "" F7是左树右表,取数逻辑根据url来取
+	-- isEnableExpFilter="" F7默认不启用过滤表达式过滤 add by tiangang_yang on 2021/03/09
+	--pgSizes="true" ,为false就隐藏表格的分页控件 add by jacky_xiang on 2021/09/08
+	--dataShowMode="layout" ,f7的打开方式,默认为layout即弹出方式,还可配置为下拉方式。 add by jacky_xiang on 2021/11/09
+	-->
+<#macro promptBox query="" uipk="" filter="" class=""  readonly="" multiselect="false" isTree ="false"  treeUrl = "" searchFields="" isHRBaseItem = "false" bizFilterFields = "" f7ReKeyValue = "" filterConfig="" afterOnchangeClearFields="" displayFormat="" isHROrg="false" isAdminOrg="false" isContainLowerOrg="false" searchLikePattern="any"  isEnableExpFilter="" pgSizes="true" dataShowMode="layout">
+	columnOptions.formatter = "promptBox";
+	columnOptions.edittype = "promptBox";
+	var f7Json = {subWidgetName:"shrPromptGrid",searchFields:"${searchFields}"};
+	f7Json.subWidgetOptions = {title:columnOptions.label,uipk:"${uipk}",query:"${query}",filter:"${filter}",multiselect:${multiselect},isTree:${isTree},treeUrl:"${treeUrl}",isContainLowerOrg:${isContainLowerOrg},isAdminOrg:${isAdminOrg},pgSizes:${pgSizes},f7SearchConfig:${getF7SearchConfig(uipk,displayFormat)},dataShowMode:"${dataShowMode}"};
+	<#if afterOnchangeClearFields != "">
+		f7Json.afterOnchangeClearFields = "${afterOnchangeClearFields}";
+	</#if>
+	<#if displayFormat != "">
+		f7Json.displayFormat = '{${displayFormat}}';
+	</#if>
+	<#if isHROrg != "">
+		f7Json.isHROrg = ${isHROrg};
+	</#if>
+	<#if isAdminOrg != "">
+		f7Json.isAdminOrg = ${isAdminOrg};
+	</#if>
+	<#if searchLikePattern != "">
+		f7Json.searchLikePattern = "${searchLikePattern}";
+	</#if>
+	<#if isEnableExpFilter != "">
+			f7Json.subWidgetOptions.isEnableExpFilter = ${isEnableExpFilter};
+		</#if>
+	<#if isHRBaseItem == "true">
+		f7Json.subWidgetOptions.isHRBaseItem = ${isHRBaseItem};
+		<#if filterConfig == "">
+			f7Json.subWidgetOptions.filterConfig = [{name:'isComUse',value:true,alias:'${freemarkerMultLan.msg065!"freemarkerMultLan.msg065"}',widgetType:'checkbox'}];
+		<#else>
+			f7Json.subWidgetOptions.filterConfig = ${filterConfig};
+		</#if>
+		<#if bizFilterFields == "">
+			f7Json.subWidgetOptions.bizFilterFields = "hrOrgUnit";
+		<#else>
+			f7Json.subWidgetOptions.bizFilterFields = "${bizFilterFields}";
+		</#if>
+		
+		<#if f7ReKeyValue == "">
+			f7Json.subWidgetOptions.f7ReKeyValue = "BaseInfo.id:BaseInfo.name";
+		<#else>
+			f7Json.subWidgetOptions.f7ReKeyValue = "${f7ReKeyValue}";
+		</#if>
+		f7Json.subWidgetName = 'specialPromptGrid';
+	</#if>
+	columnOptions.editoptions = {f7Json:f7Json};
+	<#--columnOptions.editoptions.f7Json.subWidgetOptions = {title:columnOptions.label,uipk:"${uipk}",query:"${query}",filter:"${filter}"};-->
+	<#nested>
+</#macro>
+
+<#macro linkButton id="" onclick="" tagClass="" caption="">
+	if(columnOptions.formatoptions == null){
+		columnOptions.formatoptions = [];
+	}
+	columnOptions.formatter = "operations";
+	columnOptions.formatoptions.push({linkJson:{caption:"${caption}",id:"${id}",onclick:"${onclick}",tagClass:"${tagClass}"},onclick:"${onclick}",visible:true});
+	<#nested>
+</#macro>
+
+<#macro validator rules="" errMsg="" validatetrigger="focus keyup datachange">
+	<#if grid_readonly == "false">
+		var validateJson = columnOptions.editoptions.validateJson;
+		if(validateJson == null){
+			columnOptions.editoptions.validateJson = {errMsg:"${errMsg}",rules:"${rules}",validatetrigger:"${validatetrigger}"};
+		}else{
+			columnOptions.editoptions.validateJson = {errMsg:validateJson.errMsg+",${errMsg}",rules:validateJson.rules+",${rules}",validatetrigger:"${validatetrigger}"};
+		}
+		if(columnOptions.editoptions.validateJson.rules.indexOf('required:true') >= 0 && columnOptions.editable && cellEdit){
+			columnOptions.classes = 'required';
+		}
+	</#if>
+</#macro>
+
+<#-- 
+	rowNum:分录分页显示页数
+	rowList:分录分页选项,确定每页数据条数
+  -->
+<#macro editGridContainer gridId readonly="" entryName="entrys" hasPager="false" shrinkToFit="true" remoteDataSource="false" showImport="false" showExport="false" showSearch="false"  editType="inline" rownumbers="true" rowNum="50" rowList="[50,100,200]" isShowJumpButton="false">	
+	<@ctrl.row>
+		<@ctrl.cell colSpan=12>
+			<div class="editGrid-cont" id="${gridId}_cont">
+				<@e.editGridToolbar gridId="${gridId}" showImport="${showImport}" showExport="${showExport}" hasPager="${hasPager}" showSearch="{showSearch}" readonly="${readonly}" />
+				<@e.editGrid id="${gridId}" entrys="${collectionFormater(model, entryName,remoteDataSource)}" hasPager="${hasPager}" remoteDataSource="${remoteDataSource}" readonly="${readonly}" shrinkToFit="${shrinkToFit}" editType="${editType}" rownumbers="${rownumbers}" rowNum="${rowNum}" rowList="${rowList}" isShowJumpButton="${isShowJumpButton}">
+					<#nested>
+				</@e.editGrid>
+			</div>
+			<script>
+				$('#${gridId}_cont').data('editType', '${editType}');
+			</script>
+		</@ctrl.cell>
+		<#-- 占位 -->
+		<@ctrl.cell colSpan=1 />
+	</@ctrl.row>
+</#macro>
+
+<#macro editGridToolbar gridId readonly="" showImport="false" showExport="false" hasPager="false" showSearch="false">
+	<#if readonly != "true">	
+	<span class=" shr-toolbar">
+		<div class="editGrid-toolbar">
+			<@ctrl.button id="addRow_${gridId}" name="addRow" value='${freemarkerMultLan.msg058!"freemarkerMultLan.msg058"}' actionBinding="addRowAction" class="shrbtn-primary" />
+			<@ctrl.button id="deleteRow_${gridId}" name="deleteRow" value='${freemarkerMultLan.msg067!"freemarkerMultLan.msg067"}' actionBinding="deleteRowAction" />
+			<#if showImport == "true">
+				<@ctrl.button id="import" name="import" value='${freemarkerMultLan.msg098!"freemarkerMultLan.msg098"}' actionBinding="importAction" />
+			</#if> 
+			<#if showExport == "true">
+				<div class="btn-group">
+					<@ctrl.dropDownButton id="export" name="export" value='${freemarkerMultLan.msg099!"freemarkerMultLan.msg099"}' >
+						<@ctrl.dropDownBtnLi actionBinding="customAction" name="exportCurrent" subAction="exportCurrentAction" id="exportCurrent${uuid}" permItemId="${getButtonBindPermItemId('exportCurrent','')}" value='${freemarkerMultLan.msg100!"freemarkerMultLan.msg100"}' class="null"  />
+	                	<@ctrl.dropDownBtnLi actionBinding="customAction" name="exportToExcelEntry" subAction="exportToExcelEntryAction" id="exportToExcelEntry${uuid}" permItemId="${getButtonBindPermItemId('exportToExcelEntry','')}" value='${freemarkerMultLan.msg101!"freemarkerMultLan.msg101"}' class="null"  />
+					</@ctrl.dropDownButton>
+				</div>
+			</#if>
+			<#if showSearch == "true">
+				<span style="color:red;margin-left:100px;">注意!修改数据后请先【保存】后再操作"搜索"或"翻页",否则会造成数据修改不生效!</span>
+			</#if>
+		</div>
+	</span>
+	</#if>
+</#macro>

+ 16 - 0
js/addon/custom/js/adminOrgEx.js

@@ -0,0 +1,16 @@
+shr.defineClass("shr.org.adminOrgListEx", shr.org.adminOrgList, {
+    initalizeDOM : function () {
+        shr.org.adminOrgListEx.superClass.initalizeDOM.call(this);
+      },
+      synchronousOrgAction:function(){
+		var selectedIds = this.getSelectedIds();
+		if (!selectedIds) {
+			return;
+		}
+		this.doRemoteWithBatchAction({
+				method: "synchronousOrg",
+				id: selectedIds
+		});
+		
+      }
+})

+ 53 - 0
js/addon/custom/js/beisen/syncperson/employeeDynListEx.js

@@ -0,0 +1,53 @@
+/**
+ * 北森应聘者
+ */
+shr.defineClass("shr.custom.EmployeeDynListEx", shr.emp.EmployeeDynList, {
+	initalizeDOM: function () {
+		shr.custom.EmployeeDynListEx.superClass.initalizeDOM.call(this);
+		var _self = this;
+	},
+	/**
+	 * 同步人员至北森
+	 */
+	syncPersonToBeisenAction: function () {
+		var that = this;
+		var $grid = $(this.gridId);
+		var billIds = $("#grid").jqGrid("getSelectedRows");
+		if (billIds.length <= 0) {
+			shr.showWarning({
+				message: "请先选中一行数据!",
+				hideAfter: 5
+			})
+			return;
+		}
+		shr.showConfirm("是否确认同步!!", function () {
+			// that.remoteCall({
+			// 	method: 'syncPersonToBeisen',
+			// 	param: {
+			// 		billId: billIds.toString(),
+			// 	},
+			// 	success: function (data) {
+			// 		$grid.jqGrid("reloadGrid");
+			// 	}
+			// });
+			// shr.showSuccess({
+			// 	message: "正在后台执行,请稍后....",
+			// 	hideAfter: 5
+			// })
+			that.defaultBatchActionHandle("syncPersonToBeisen");
+
+		});
+		
+	},
+	synBeiSenPersonAction:function(){
+		var selectedIds = this.getSelectedIds();
+		if (!selectedIds) {
+			return;
+		}
+		this.doRemoteWithBatchAction({
+				method: "synBeiSenPerson",
+				ids: selectedIds
+		});
+	}
+});
+

+ 58 - 0
js/addon/custom/js/eSign/ESignGlobalStatusOverviewList.js

@@ -0,0 +1,58 @@
+shr.defineClass("shr.esign.ESignGlobalStatusOverviewList", shr.framework.List, {
+    initalizeDOM: function () {
+        var _self = this;
+
+        shr.esign.ESignGlobalStatusOverviewList.superClass.initalizeDOM.call(this);
+        if(_self.initData&&_self.initData.custom_params){
+        }
+
+    },
+    /**
+     *撤销签署流程
+     */
+    revoke_by_fileAction: function () {
+        var _self = this;
+        var selectedIds = this.getSelectedIds();
+        _self.doRemoteWithBatchAction({
+            method: 'revoke_by_file',
+            billId: selectedIds
+        });
+    },
+    /**
+     *基于文件发起签署
+     */
+    create_by_fileAction: function () {
+        var _self = this;
+        var selectedIds = this.getSelectedIds();
+        _self.doRemoteWithBatchAction({
+            method: 'create_by_file',
+            billId: selectedIds
+        });
+    },
+    /**
+     *催签流程中签署人
+     */
+    urge_by_fileAction: function () {
+        var _self = this;
+
+        var selectedIds = this.getSelectedIds();
+        _self.doRemoteWithBatchAction({
+            method: 'urge_by_file',
+            billId: selectedIds
+        });
+    },
+    /**
+     *  审批
+     */
+    enableAction: function () {
+        var _self = this;
+        var parentVal = this.getUrlParam('rowid');
+        var selectedIds = this.getSelectedIds();
+
+        _self.doRemoteWithBatchAction({
+            method: 'disable',
+            billId: selectedIds,
+            rowid:parentVal
+        });
+    },
+})

+ 65 - 0
js/addon/custom/js/eSign/eSignTemplateEdit.js

@@ -0,0 +1,65 @@
+
+shr.defineClass("shr.custom.ESignTemplateEdit", shr.framework.Edit, {
+	initalizeDOM: function () {
+		var self = this;
+		shr.custom.ESignTemplateEdit.superClass.initalizeDOM.call(this);
+	},
+	/**
+	 * 同步模板字段
+	 */
+	syncTemplateFieldsAction: function () {
+		$.block.show({
+			text: '正在生成递延台账数据,请稍候...'
+		});
+		_self.remoteCall({
+			method: "syncTemplateFields",
+			param: {
+				billID: billIds.join(",")
+			},
+			success: function (resp) {
+				waf("#entrys").jqGrid('reloadGrid');
+			},
+			complete(resp) {
+				$.block.hide();
+			},
+		});
+
+	},
+})
+function jumpPage(rowId, gid, action, pos, fun, mbid) {
+	console.log(rowId)
+	var url = shr.getContextPath() + shr.dynamicURL;
+	var params = {
+		uipk: "com.kingdee.eas.custom.esign.app.ESignTemplateFileEntryField.list",
+		serviceId: shr.getUrlRequestParam("serviceId"),
+		parentId: rowId
+	};
+	var operationDialog = $("#operationDialog");
+	operationDialog.children("iframe").attr('src', shr.appendParam(url, params));
+	operationDialog.children("iframe").css('display', 'block');
+	operationDialog.dialog({
+		autoOpen: true,
+		title: 'e签宝模板字段',
+		width: 1200,
+		minWidth: 1000,
+		height: 600,
+		minHeight: 600,
+		modal: true,
+		resizable: false,
+		position: {
+			my: 'center center',
+			at: 'center center',
+			of: window
+		},
+		open: function () {
+		},
+		close: function () {
+
+		},
+		buttons: {
+			"关闭": function () {
+				$(this).dialog("close");
+			}
+		}
+	})
+}

+ 111 - 0
js/addon/custom/js/empPreEntryEditEx.js

@@ -0,0 +1,111 @@
+shr.defineClass("shr.custom.EmpPreEntryEditEx",shr.emp.EmpPreEntryEdit, {
+
+	initalizeDOM: function() {
+		shr.custom.EmpPreEntryEditEx.superClass.initalizeDOM.call(this);
+		
+		var self = this;
+		//$('#addNew').hide();
+		
+	},
+	sentEmailAction:function(){
+		
+			var self = this;
+			
+			self.sentEmail();
+			
+		},
+	sentEmail:function(){
+		  var _self = this;
+		  var billIds = _self.billId
+	     // var billIds = $("#grid").jqGrid("getSelectedRows");
+		  if (billIds == undefined || billIds.length==0) {
+	        shr.showWarning({message:jsBizMultLan.emp_empPreEntryList_i18n_9});
+			return ;
+	    }else {
+	    	//shr.showWarning("发送成功!");
+			
+		}
+		
+	       _self.remoteCall({
+				method: 'sentEmail',
+				async:false,
+				param: {
+					personId:billIds.toString()
+				},
+				success: function (res) {
+					
+					if(res.status==1){
+						shr.showWarning({message:res.rsinfo+"发送邮件失败!"});
+						//shr.showInfo({message:res+"发送失败!"});
+					}else{
+						shr.showInfo({message:"发送成功!"});
+						$('#notifyStatus').shrSelect('setValue','hasSend');
+						
+					}
+					 
+				}
+			});
+			
+	  },
+	
+	createcodeAction:function(){
+		
+			var self = this;
+			
+			self.createQrcode();
+			
+		},
+	
+	
+
+ createQrcode:function(){
+		  var _self = this;
+	     
+	       _self.remoteCall({
+				method: 'getQRCode',
+				async:false,
+				param: {
+					personId:_self.billId
+				},
+				success: function (res) {
+			const imgWindow = window.open('')
+			imgWindow && imgWindow.document.write("<img src='"+res+"' style='display: flex; margin: 0 auto'/>")
+			//修改导入按钮为调用平台的方法
+				}
+			});
+			
+	  },
+	  
+getPcUrlAction:function(){
+
+	var self = this;
+	 _self.remoteCall({
+				method: 'getPcUrl',
+				async:false,
+				param: {
+					personId:_self.billId
+				},
+				success: function (res) {
+			//alert(res);
+			shr.showWarning({
+        message:res //'获取不到预入职员工id,预入职员工ID为空。'
+      });
+			
+			//const imgWindow = window.open('')
+			//imgWindow && imgWindow.document.write("<img src='"+res+"' style='display: flex; margin: 0 auto'/>")
+			//修改导入按钮为调用平台的方法
+				}
+			});
+	
+},
+
+
+
+
+
+
+
+
+
+
+});

+ 131 - 0
js/addon/custom/js/empPreEntryListEx.js

@@ -0,0 +1,131 @@
+shr.defineClass("shr.custom.EmpPreEntryListEx",shr.emp.EmpPreEntryList, {
+
+	initalizeDOM: function() {
+		shr.custom.EmpPreEntryListEx.superClass.initalizeDOM.call(this);
+		
+		var self = this;
+		//$('#addNew').hide();
+		
+	},
+	sentEmailAction:function(){
+		
+			var self = this;
+			
+			self.sentEmail();
+			
+		},
+	
+	
+
+ sentEmail:function(){
+		  var _self = this;
+	      var billIds = $("#grid").jqGrid("getSelectedRows");
+		  if (billIds == undefined || billIds.length==0) {
+	        shr.showWarning({message:jsBizMultLan.emp_empPreEntryList_i18n_9});
+			return ;
+	    }else {
+	    	//shr.showWarning("发送成功!");
+			
+		}
+		
+	       _self.remoteCall({
+				method: 'sentEmail',
+				async:false,
+				param: {
+					personId:billIds.toString()
+				},
+				success: function (res) {
+					
+					if(res.status==1){
+						shr.showWarning({message:res.rsinfo+"发送邮件失败!"});
+						//shr.showInfo({message:res+"发送失败!"});
+					}else{
+						shr.showInfo({message:"发送成功!"});
+					}
+					 
+				}
+			});
+			
+	  },
+	  
+	  
+	createcodeAction:function(){
+
+		var self = this;
+		
+		self.createQrcode();
+		
+	},
+	
+	
+
+ createQrcode:function(){
+ 	
+		  var _self = this;
+		  debugger;
+	       var billIds = $("#grid").jqGrid("getSelectedRows");
+		  if (billIds == undefined || billIds.length==0) {
+	        shr.showWarning({message:jsBizMultLan.emp_empPreEntryList_i18n_9});
+			return ;
+	      }
+		  if(billIds.length>1){
+			 shr.showWarning({message:"请只选择一条数据!"});
+			 return ; 
+		  }
+		//  alert(billIds.toString());
+	       _self.remoteCall({
+				method: 'getQRCode',
+				async:false,
+				param: {
+					personId:billIds.toString()
+				},
+				success: function (res) {
+			const imgWindow = window.open('')
+			imgWindow && imgWindow.document.write("<img src='"+res+"' style='display: flex; margin: 0 auto'/>")
+			//修改导入按钮为调用平台的方法
+				}
+			});
+			
+	  },
+	  
+getPcUrlAction:function(){
+
+	var self = this;
+	
+	 var billIds = $("#grid").jqGrid("getSelectedRows");
+		  if (billIds == undefined || billIds.length==0) {
+	        shr.showWarning({message:jsBizMultLan.emp_empPreEntryList_i18n_9});
+			return ;
+	      }
+		  if(billIds.length>1){
+			 shr.showWarning({message:"请只选择一条数据!"});
+			 return ; 
+		  }
+	
+	 self.remoteCall({
+				method: 'getPcUrl',
+				async:false,
+				param: {
+					personId:billIds.toString()
+				},
+				success: function (res) {
+			
+			shr.showWarning({
+        message:res //'获取不到预入职员工id,预入职员工ID为空。'
+      });
+			
+			//const imgWindow = window.open('')
+			//imgWindow && imgWindow.document.write("<img src='"+res+"' style='display: flex; margin: 0 auto'/>")
+			//修改导入按钮为调用平台的方法
+				}
+			});
+	
+}
+
+
+
+
+
+
+
+});

+ 23 - 0
js/addon/custom/js/positionListEx.js

@@ -0,0 +1,23 @@
+shr.defineClass("shr.org.PositionListEx", shr.org.PositionList, {
+	initalizeDOM : function () {
+      shr.org.PositionListEx.superClass.initalizeDOM.call(this);
+	  
+  	},
+	
+	syncEnableAction:function(){
+		var selectedIds = this.getSelectedIds();
+		if (!selectedIds) {
+			return;
+		}
+        var selectedId = $("#grid").jqGrid("getSelectedRow");
+        if (selectedId == undefined ) {
+            return ;
+        }
+        var _self = this;
+		this.doRemoteWithBatchAction({
+				method: "syncEnable",
+				billId: selectedIds
+		});
+	},
+	
+});

+ 152 - 0
src/com/kingdee/shr/base/syssetting/web/templatetranslator/freemarker/EditGridTranslator.java

@@ -0,0 +1,152 @@
+package com.kingdee.shr.base.syssetting.web.templatetranslator.freemarker;
+
+import com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo;
+import com.kingdee.shr.base.syssetting.web.templatetranslator.IElementTranslatorStore;
+import com.kingdee.shr.base.syssetting.web.templatetranslator.TemplateTranslateException;
+import com.kingdee.util.StringUtils;
+import org.jdom.Element;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description 编辑表格模板转换器
+ * @Date 2025/11/25 10:56
+ * @Created by 禾源
+ */
+public class EditGridTranslator extends GridTranslator {
+    /**
+     * 翻译表格(Grid)类型的元素,根据其属性和上下文信息生成对应的模板字符串。
+     *
+     * @param element  表示当前要翻译的DOM元素,通常是一个grid组件
+     * @param viewInfo 包含视图相关信息的对象,用于获取类型等配置信息
+     * @param store    用于存储或查找翻译器的仓库对象
+     * @return 返回经过处理后的模板字符串,表示该grid在界面中的呈现方式
+     * @throws TemplateTranslateException 当模板翻译过程中出现错误时抛出异常
+     */
+    public String translateGrid(
+            Element element,
+            UIViewInfo viewInfo,
+            IElementTranslatorStore store
+    ) throws TemplateTranslateException {
+        Map<String, Object> options = new HashMap();
+        String fieldName = null;
+        String type = viewInfo.getType();
+
+        // 根据视图类型判断是否需要设置字段名,默认为"entrys"
+        if ("form".equalsIgnoreCase(type)) {
+            fieldName = element.getAttributeValue("name");
+            if (StringUtils.isEmpty(fieldName)) {
+                fieldName = "entrys";
+            }
+        }
+
+        // 若存在字段名,则将其作为gridId和entryName放入选项中
+        if (!StringUtils.isEmpty(fieldName)) {
+            options.put("gridId", fieldName);
+            options.put("entryName", fieldName);
+        }
+
+        // 处理readonly属性:若元素有此属性则复制,否则使用默认占位符
+        if (element.getAttribute("readonly") != null) {
+            TranslatorUtil.copyAttribute(element, options, "readonly");
+        } else {
+            options.put("readonly", "${readonly}");
+        }
+
+        // 可选属性直接拷贝到options中
+        if (element.getAttribute("hasPager") != null) {
+            TranslatorUtil.copyAttribute(element, options, "hasPager");
+        }
+
+        if (element.getAttribute("sortKey") != null) {
+            TranslatorUtil.copyAttribute(element, options, "sortKey");
+            String sortKey = element.getAttributeValue("sortKey");
+            if (!StringUtils.isEmpty(sortKey)) {
+                options.put("sortKey", sortKey);
+            }
+        }
+
+        // 拷贝一系列通用属性至options映射中
+        TranslatorUtil.copyAttribute(element, options, "editType");
+        TranslatorUtil.copyAttribute(element, options, "shrinkToFit");
+        TranslatorUtil.copyAttribute(element, options, "rownumbers");
+        TranslatorUtil.copyAttribute(element, options, "rowNum");
+        TranslatorUtil.copyAttribute(element, options, "rowList");
+        TranslatorUtil.copyAttribute(element, options, "showImport");
+        TranslatorUtil.copyAttribute(element, options, "showExport");
+        TranslatorUtil.copyAttribute(element, options, "remoteDataSource");
+        TranslatorUtil.copyAttribute(element, options, "showSearch");
+        //扩展属性: 是否跳转页面
+        TranslatorUtil.copyAttribute(element, options, "isShowJumpButton");
+
+        // 特殊处理key列相关逻辑
+        this.handleKeyColumn(element);
+
+        // 获取并移除noAction与colspan属性,避免干扰后续操作
+        String noAction = element.getAttributeValue("noAction");
+        element.removeAttribute("noAction");
+        element.removeAttribute("colspan");
+
+        // 判断是否启用动作功能,并选择不同的容器模板进行渲染
+        return "true".equalsIgnoreCase(noAction) ?
+                this.convertFieldString("e", "editGrid", element, this.translateChildren(element, viewInfo, store)) :
+                this.convertFieldString("e", "editGridContainer", options, this.translateChildren(element, viewInfo, store));
+    }
+
+
+    /**
+     * 处理元素中的关键列配置
+     *
+     * @param element 包含列配置的元素对象
+     */
+    private void handleKeyColumn(Element element) {
+        // 获取所有column子元素
+        List columns = element.getChildren("column");
+        boolean hasKey = false;
+        Element column = null;
+        int i = 0;
+
+        // 遍历所有列,查找是否已存在关键列
+        for (int size = columns.size(); i < size; ++i) {
+            column = (Element) columns.get(i);
+            if ("true".equalsIgnoreCase(column.getAttributeValue("key"))) {
+                hasKey = true;
+                break;
+            }
+        }
+
+        // 如果没有找到关键列,则创建一个默认的关键列配置
+        if (!hasKey) {
+            column = new Element("column");
+            column.setAttribute("name", "id");
+            column.setAttribute("key", "true");
+            column.setAttribute("editable", "false");
+            column.setAttribute("hidden", "true");
+            element.addContent(column);
+        }
+
+    }
+
+
+    /**
+     * 检查跨度是否已满
+     *
+     * @return true表示跨度已满,false表示跨度未满
+     */
+    public boolean isSpanFull() {
+        return true;
+    }
+
+
+    /**
+     * 检查是否需要重新布局
+     *
+     * @return 布局需求状态,true表示需要重新布局,false表示不需要重新布局
+     */
+    public boolean requireLayout() {
+        return true;
+    }
+
+}