editGrid.ftl 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <#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">
  2. <#if readonly == "true">
  3. <#global grid_readonly="true">
  4. <#else>
  5. <#global grid_readonly="false">
  6. </#if>
  7. <#if editType == "inline">
  8. <#assign cellEdit="true">
  9. <#elseif editType == "form">
  10. <#assign cellEdit="false">
  11. </#if>
  12. <#if hasPager == "true">
  13. <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;">
  14. <div id="gridPager" style="display:inline-block;"></div>
  15. </div>
  16. </#if>
  17. <table id="${id}"></table>
  18. <div id="${id}_editGrid"></div>
  19. <script type="text/javascript">
  20. function ${id}_gridRemove(rowId){
  21. if (rowId) {
  22. waf("#${id}").wafGrid('delRow', rowId);
  23. }
  24. }
  25. function ${id}_gridEdit(rowId){
  26. var rowdatas = waf("#${id}").getRowRealData(rowId);
  27. waf("#${id}").wafGrid('editForm',rowId,rowdatas);
  28. var event = document.createEvent('HTMLEvents');
  29. event.initEvent("editComplete_${id}", true, true);
  30. event.eventType = 'message';
  31. document.dispatchEvent(event);
  32. }
  33. $(function() {
  34. var colNames = [],
  35. colModel = [],
  36. dataGrid_option = {},
  37. columnModel = '',
  38. datatype = 'json',
  39. cellEdit = ${cellEdit},
  40. grid_readonly = ${grid_readonly}
  41. <#nested>
  42. <#if readonly == "false" && editType == "form">
  43. <@gridColumn name="operatorColumn" label='${freemarkerMultLan.msg068!"freemarkerMultLan.msg068"}' width="120" editable="false" >
  44. <@linkButton id="editButton" caption='${freemarkerMultLan.msg071!"freemarkerMultLan.msg071"}' onclick="${id}_gridEdit"> </@linkButton>
  45. <@linkButton id="removeButton" caption='${freemarkerMultLan.msg067!"freemarkerMultLan.msg067"}' onclick="${id}_gridRemove"></@linkButton>
  46. </@gridColumn>
  47. <#elseif editType == "inline" && isShowJumpButton == "true">
  48. <@gridColumn name="operatorColumn" label='${freemarkerMultLan.msg068!"freemarkerMultLan.msg068"}' width="120" editable="false" >
  49. <@linkButton id="jumpButton" caption='查看模板字段' onclick="jumpPage"></@linkButton>
  50. </@gridColumn>
  51. </#if>
  52. <#if grid_readonly == "false">
  53. <#local multiselect="true">
  54. </#if>
  55. var url = shr.getContextPath();
  56. url += '/dynamic.do?method=getListData&columnModel='+columnModel+"&sorterItems=${sorterItems}";
  57. <#if query != "">
  58. url = url + '&query=${query}';
  59. </#if>
  60. <#if uipk != "">
  61. url = url + '&uipk=${uipk}';
  62. </#if>
  63. dataGrid_option = {
  64. url:url,
  65. colNames: colNames,
  66. jsonReader : {
  67. repeatitems: false
  68. },
  69. sorterItems:"${sorterItems}",
  70. colModel: colModel,
  71. columnModel: columnModel,
  72. rowNum:${rowNum},
  73. customPager:'#gridPager',
  74. hasPager:${hasPager},
  75. rowList: ${rowList},
  76. cellEdit : !grid_readonly,
  77. height: 'auto',
  78. autowidth: true,
  79. viewrecords: true,
  80. cellsubmit:"clientArray",
  81. multiselect: ${multiselect},
  82. _type_:"EditGrid",
  83. shrinkToFit: ${shrinkToFit},
  84. mtype:"post",
  85. recordtext:'({0}-{1})/{2}',
  86. gridview: true,
  87. pginput: true,
  88. rownumbers:${rownumbers},
  89. footerrow: true,
  90. userDataOnFooter: true,
  91. clientFooter: ${clientFooter},
  92. serverFooter: ${serverFooter},
  93. sumColModel: ${sumColModel},
  94. pagerpos: 'center',
  95. recordpos: 'left',
  96. pginputpos: 'right',
  97. keyOptions: {
  98. addNewRowForLastCell: false,
  99. loop:true
  100. }
  101. };
  102. <#if remoteDataSource == "true">
  103. dataGrid_option.datatype = "local";
  104. <#else>
  105. <#if entrys != "">
  106. dataGrid_option.data = ${entrys};
  107. jsBinder.searchDataForFront = ${entrys};
  108. dataGrid_option.datatype = "local";
  109. <#else>
  110. dataGrid_option.datatype = "${datatype}";
  111. </#if>
  112. </#if>
  113. dataGrid_option.loadComplete = function(ret){
  114. if($("#${pager}").html() == "" && "${hasPager}" == "true"){
  115. $("#${id}").setCustomPager("#${pager}");
  116. }
  117. shr.setIframeHeight();
  118. $('#${pager}_left').click(function(){
  119. $('.ui-pg-selbox').show();
  120. $(this).children('.ui-paging-info').hide();
  121. });
  122. <#if loadComplete != "">
  123. if ($.isFunction(${loadComplete})) {
  124. ${loadComplete}.call(this, ret);
  125. }
  126. </#if>
  127. };
  128. var $editGrid = waf("#${id}");
  129. jsBinder.gridId = "#${id}";
  130. jsBinder.remoteDataSource = "${remoteDataSource}";
  131. $editGrid.jqGrid(dataGrid_option).jqGrid("setFrozenColumns");
  132. $editGrid.jqGrid('reloadGrid');
  133. $editGrid.jqGrid("resizeGrid",{base:$editGrid,offset:0});
  134. waf(window).resize(function(){
  135. waf.ieHack.hackResize(function(e){
  136. $editGrid.jqGrid("resizeGrid",{base:$editGrid,offset:0});
  137. },$editGrid);
  138. });
  139. });
  140. </script>
  141. </#macro>
  142. <#--
  143. -->
  144. <#-- grid列属性配置
  145. sensitiveRule 脱敏配置,格式:sensitiveRule="{'isOpen':true|false,'name':''}" name 脱敏规则名称;动态列表配置格式{'sensitiveRule':{'isOpen':true|false,'name':''}}
  146. -->
  147. <#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="">
  148. <#if fieldPermEntrysForm(model, name, entryName)>
  149. colNames.push("${label}");
  150. var columnOptions = {name: "${name}",label:"${label}", frozen:${frozen},width: ${width},thalign:"${thalign}", align: "${align}" , hidden: ${hidden}, key:${key},editable:${editable}, sorttype:"${sorttype}"};
  151. if(cellEdit == false){
  152. columnOptions.editable = false;
  153. }
  154. <#if grid_readonly == "false" && editable == "false">
  155. columnOptions.classes = 'disabled';
  156. </#if>
  157. <#if sensitiveRule != "">
  158. columnOptions.sensitiveRule = ${sensitiveRule};
  159. </#if>
  160. <#if sortable != "">
  161. columnOptions.sortable = ${sortable};
  162. </#if>
  163. <#if customformatter != "">
  164. columnOptions.formatter = ${customformatter};
  165. </#if>
  166. <#if customparam != "">
  167. columnOptions.customparam = ${customparam};
  168. </#if>
  169. <#if formatoptions != "">
  170. columnOptions.formatoptions = ${formatoptions};
  171. </#if>
  172. <#if formatter != "">
  173. columnOptions.formatter = "${formatter}";
  174. </#if>
  175. <#if rowspan != "">
  176. columnOptions.rowspan = ${rowspan};
  177. </#if>
  178. <#if fieldspan != "">
  179. columnOptions.fieldspan = ${fieldspan};
  180. </#if>
  181. <#if sortKey != "">
  182. columnOptions.sortKey = ${sortKey};
  183. </#if>
  184. <#nested>
  185. colModel.push(columnOptions);
  186. if(columnOptions.formatter == "promptBox"){
  187. if(dataGrid_option.datatype == "json"){
  188. columnModel += columnOptions.name+".*,";
  189. columnOptions.name = columnOptions.name+".*";
  190. }else{
  191. columnModel += columnOptions.name+",";
  192. }
  193. }else{
  194. columnModel += columnOptions.name + ",";
  195. }
  196. </#if>
  197. </#macro>
  198. <#--
  199. 新增表格编辑多语言字段解析,对应grid.wafeditor.js celleditor.shrMultiLangBox
  200. -->
  201. <#macro multiLangBox maxlength="" trimAll="false">
  202. columnOptions.formatter = "shrMultiLangBox";
  203. <#if maxlength != "">
  204. columnOptions.editoptions = {inputJson:{maxlength:${maxlength},trimAll:${trimAll}}};
  205. <#else>
  206. columnOptions.editoptions = {};
  207. </#if>
  208. columnOptions.edittype = "shrMultiLangBox";
  209. <#nested>
  210. </#macro>
  211. <#--
  212. 新增表格编辑多语言字段解析,对应grid.wafeditor.js celleditor.shrMultiLangArea
  213. -->
  214. <#macro multiLangArea maxlength="" trimAll="false">
  215. <#if maxlength != "">
  216. columnOptions.editoptions = {inputJson:{maxlength:${maxlength},trimAll:${trimAll}}};
  217. <#else>
  218. columnOptions.editoptions = {};
  219. </#if>
  220. columnOptions.edittype = "shrMultiLangArea";
  221. <#nested>
  222. </#macro>
  223. <#macro text maxlength="">
  224. <#if maxlength != "">
  225. columnOptions.editoptions = {inputJson:{maxlength:${maxlength}}};
  226. <#else>
  227. columnOptions.editoptions = {};
  228. </#if>
  229. columnOptions.edittype = "shrtext";
  230. <#nested>
  231. </#macro>
  232. <#macro checkbox>
  233. columnOptions.formatter = "checkbox";
  234. columnOptions.edittype = "checkbox";
  235. columnOptions.editoptions = {};
  236. <#nested>
  237. </#macro>
  238. <#--
  239. decimalPrecision:视图配置数值小数位,此配置优先
  240. ignoreDecimalFormatter:忽略数值格式化,显示数据库原始值
  241. roundType:四舍五入方式
  242. -->
  243. <#macro numberField decimalPrecision="" formatType="number" ignoreDecimalFormatter="false" roundType="round">
  244. columnOptions.formatter = "numberfield";
  245. columnOptions.edittype = "numberfield";
  246. columnOptions.editoptions = {inputJson:{id:"txt_"+columnOptions.name,name:columnOptions.name,decimalPrecision:${decimalPrecision},formatType:"${formatType}",ignoreDecimalFormatter:${ignoreDecimalFormatter},roundType:"${roundType}"}};
  247. <#nested>
  248. </#macro>
  249. <#macro textarea maxlength="">
  250. columnOptions.formatter = "shrTextArea";
  251. columnOptions.edittype = "shrTextArea";
  252. <#if maxlength != "">
  253. columnOptions.editoptions = {inputJson:{maxlength:${maxlength}}};
  254. <#else>
  255. columnOptions.editoptions = {};
  256. </#if>
  257. <#nested>
  258. </#macro>
  259. <#macro select enumSource="">
  260. columnOptions.formatter = "shrselect";
  261. columnOptions.edittype = "shrselect";
  262. columnOptions.editoptions = {selectJson:{id:"selStatus",name:"status",enumSource:"${enumSource}"},enumSource:{},urlSource:shr.getContextPath() + "/selectEnum.do?method=getSelectEnumData&enumSource=${enumSource}"};
  263. <#nested>
  264. </#macro>
  265. <#macro datePicker dateFormat="">
  266. columnOptions.formatter = "datepicker";
  267. columnOptions.edittype = "shrdatepicker";
  268. columnOptions.editoptions = {datepickerjson:{id:"dp_autoSize",name:"dp_autoSize",dateFormat:"${dateFormat}"}};
  269. columnOptions.editoptions.validateJson = {errMsg:"dateISO:'${freemarkerMultLan.msg070!"freemarkerMultLan.msg070"}'",rules:"dateISO:true",validatetrigger:"focus keyup datachange"};
  270. <#nested>
  271. </#macro>
  272. <#--
  273. showTimeZoneForCtrl: bos提供参数showTimeZoneForCtrl,如果为false,则不转换;不支持视图配置。
  274. isAutoTimeZoneTrans: 视图配置优先,视图配置为false则不转换;视图未配置,元数据字段扩展属性isAutoTimeZoneTrans配置为false则不转换;其他情况需要转换。
  275. isShowUTC:时区是否显示isShowUTC
  276. isReadonlyUTC:时区是否可编辑isReadonlyUTC
  277. isRemoveSeconds: true,//配置是否去除时间格式化中的秒
  278. isRemoveDay: false,//配置是否去除日期格式化中的天
  279. ctrlType:格式化类型 TimeStamp/Date/Time,配合utcUser中pattern使用
  280. -->
  281. <#macro dateTimePicker dateTimeFormat="yyyy-MM-dd HH:mm" minuteStep ="" showTimeZoneForCtrl="true" isAutoTimeZoneTrans="true" isShowUTC="true" isReadonlyUTC="true" isRemoveSeconds="true" isRemoveDay="false" ctrlType="">
  282. <#if ctrlType == "TimeStamp">
  283. columnOptions.width = 255;
  284. </#if>
  285. columnOptions.formatter = 'shrDateTimePicker';
  286. columnOptions.edittype = 'shrDateTimePicker';
  287. 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}"}};
  288. <#nested>
  289. </#macro>
  290. <#--
  291. --集团管控新增参数说明 2017/07/11 tiangang_yang
  292. -- isHRBaseItem 判断是否是s-HR集团管控基础资料,是:true,不是:false,必须写的参数
  293. -- filterConfig 过滤配置框 可选
  294. -- bizFilterFields 业务单据需要过滤的字段属性名称,如:hrOrgUnit,name。多个用逗号隔开 ,可选,不传默认业务组织:hrOrgUnit
  295. -- f7ReKeyValue 获取F7界面存放key和name的字段,以键值对字符串形式传入,如果不传入,其他类型的F7不变,基础资料默认:BaseInfo.id:BaseInfo.name,可选
  296. -- isTree ="false" F7是左树右表,取数逻辑公共
  297. -- treeUrl = "" F7是左树右表,取数逻辑根据url来取
  298. -- isEnableExpFilter="" F7默认不启用过滤表达式过滤 add by tiangang_yang on 2021/03/09
  299. --pgSizes="true" ,为false就隐藏表格的分页控件 add by jacky_xiang on 2021/09/08
  300. --dataShowMode="layout" ,f7的打开方式,默认为layout即弹出方式,还可配置为下拉方式。 add by jacky_xiang on 2021/11/09
  301. -->
  302. <#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">
  303. columnOptions.formatter = "promptBox";
  304. columnOptions.edittype = "promptBox";
  305. var f7Json = {subWidgetName:"shrPromptGrid",searchFields:"${searchFields}"};
  306. 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}"};
  307. <#if afterOnchangeClearFields != "">
  308. f7Json.afterOnchangeClearFields = "${afterOnchangeClearFields}";
  309. </#if>
  310. <#if displayFormat != "">
  311. f7Json.displayFormat = '{${displayFormat}}';
  312. </#if>
  313. <#if isHROrg != "">
  314. f7Json.isHROrg = ${isHROrg};
  315. </#if>
  316. <#if isAdminOrg != "">
  317. f7Json.isAdminOrg = ${isAdminOrg};
  318. </#if>
  319. <#if searchLikePattern != "">
  320. f7Json.searchLikePattern = "${searchLikePattern}";
  321. </#if>
  322. <#if isEnableExpFilter != "">
  323. f7Json.subWidgetOptions.isEnableExpFilter = ${isEnableExpFilter};
  324. </#if>
  325. <#if isHRBaseItem == "true">
  326. f7Json.subWidgetOptions.isHRBaseItem = ${isHRBaseItem};
  327. <#if filterConfig == "">
  328. f7Json.subWidgetOptions.filterConfig = [{name:'isComUse',value:true,alias:'${freemarkerMultLan.msg065!"freemarkerMultLan.msg065"}',widgetType:'checkbox'}];
  329. <#else>
  330. f7Json.subWidgetOptions.filterConfig = ${filterConfig};
  331. </#if>
  332. <#if bizFilterFields == "">
  333. f7Json.subWidgetOptions.bizFilterFields = "hrOrgUnit";
  334. <#else>
  335. f7Json.subWidgetOptions.bizFilterFields = "${bizFilterFields}";
  336. </#if>
  337. <#if f7ReKeyValue == "">
  338. f7Json.subWidgetOptions.f7ReKeyValue = "BaseInfo.id:BaseInfo.name";
  339. <#else>
  340. f7Json.subWidgetOptions.f7ReKeyValue = "${f7ReKeyValue}";
  341. </#if>
  342. f7Json.subWidgetName = 'specialPromptGrid';
  343. </#if>
  344. columnOptions.editoptions = {f7Json:f7Json};
  345. <#--columnOptions.editoptions.f7Json.subWidgetOptions = {title:columnOptions.label,uipk:"${uipk}",query:"${query}",filter:"${filter}"};-->
  346. <#nested>
  347. </#macro>
  348. <#macro linkButton id="" onclick="" tagClass="" caption="">
  349. if(columnOptions.formatoptions == null){
  350. columnOptions.formatoptions = [];
  351. }
  352. columnOptions.formatter = "operations";
  353. columnOptions.formatoptions.push({linkJson:{caption:"${caption}",id:"${id}",onclick:"${onclick}",tagClass:"${tagClass}"},onclick:"${onclick}",visible:true});
  354. <#nested>
  355. </#macro>
  356. <#macro validator rules="" errMsg="" validatetrigger="focus keyup datachange">
  357. <#if grid_readonly == "false">
  358. var validateJson = columnOptions.editoptions.validateJson;
  359. if(validateJson == null){
  360. columnOptions.editoptions.validateJson = {errMsg:"${errMsg}",rules:"${rules}",validatetrigger:"${validatetrigger}"};
  361. }else{
  362. columnOptions.editoptions.validateJson = {errMsg:validateJson.errMsg+",${errMsg}",rules:validateJson.rules+",${rules}",validatetrigger:"${validatetrigger}"};
  363. }
  364. if(columnOptions.editoptions.validateJson.rules.indexOf('required:true') >= 0 && columnOptions.editable && cellEdit){
  365. columnOptions.classes = 'required';
  366. }
  367. </#if>
  368. </#macro>
  369. <#--
  370. rowNum:分录分页显示页数
  371. rowList:分录分页选项,确定每页数据条数
  372. -->
  373. <#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">
  374. <@ctrl.row>
  375. <@ctrl.cell colSpan=12>
  376. <div class="editGrid-cont" id="${gridId}_cont">
  377. <@e.editGridToolbar gridId="${gridId}" showImport="${showImport}" showExport="${showExport}" hasPager="${hasPager}" showSearch="{showSearch}" readonly="${readonly}" />
  378. <@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}">
  379. <#nested>
  380. </@e.editGrid>
  381. </div>
  382. <script>
  383. $('#${gridId}_cont').data('editType', '${editType}');
  384. </script>
  385. </@ctrl.cell>
  386. <#-- 占位 -->
  387. <@ctrl.cell colSpan=1 />
  388. </@ctrl.row>
  389. </#macro>
  390. <#macro editGridToolbar gridId readonly="" showImport="false" showExport="false" hasPager="false" showSearch="false">
  391. <#if readonly != "true">
  392. <span class=" shr-toolbar">
  393. <div class="editGrid-toolbar">
  394. <@ctrl.button id="addRow_${gridId}" name="addRow" value='${freemarkerMultLan.msg058!"freemarkerMultLan.msg058"}' actionBinding="addRowAction" class="shrbtn-primary" />
  395. <@ctrl.button id="deleteRow_${gridId}" name="deleteRow" value='${freemarkerMultLan.msg067!"freemarkerMultLan.msg067"}' actionBinding="deleteRowAction" />
  396. <#if showImport == "true">
  397. <@ctrl.button id="import" name="import" value='${freemarkerMultLan.msg098!"freemarkerMultLan.msg098"}' actionBinding="importAction" />
  398. </#if>
  399. <#if showExport == "true">
  400. <div class="btn-group">
  401. <@ctrl.dropDownButton id="export" name="export" value='${freemarkerMultLan.msg099!"freemarkerMultLan.msg099"}' >
  402. <@ctrl.dropDownBtnLi actionBinding="customAction" name="exportCurrent" subAction="exportCurrentAction" id="exportCurrent${uuid}" permItemId="${getButtonBindPermItemId('exportCurrent','')}" value='${freemarkerMultLan.msg100!"freemarkerMultLan.msg100"}' class="null" />
  403. <@ctrl.dropDownBtnLi actionBinding="customAction" name="exportToExcelEntry" subAction="exportToExcelEntryAction" id="exportToExcelEntry${uuid}" permItemId="${getButtonBindPermItemId('exportToExcelEntry','')}" value='${freemarkerMultLan.msg101!"freemarkerMultLan.msg101"}' class="null" />
  404. </@ctrl.dropDownButton>
  405. </div>
  406. </#if>
  407. <#if showSearch == "true">
  408. <span style="color:red;margin-left:100px;">注意!修改数据后请先【保存】后再操作"搜索"或"翻页",否则会造成数据修改不生效!</span>
  409. </#if>
  410. </div>
  411. </span>
  412. </#if>
  413. </#macro>