nupglt.ftl 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <#-- 提取java枚举类型-->
  2. <#assign GtType={
  3. "LABEL":"01",
  4. "INPUT":"02",
  5. "TEXTAREA":"03",
  6. "COMBOBOX":"05",
  7. "DATEPICKER":"06",
  8. "RADIOBOX":"08",
  9. "CHECKBOX":"09",
  10. "BUTTON":"10",
  11. "LINK":"11",
  12. "IMG":"12",
  13. "SFZ":"18",
  14. "READONLY":"read"
  15. }>
  16. <#-- 准备单选控件的值-->
  17. <#assign inputSets= {
  18. <#--子类型:[type类型,class名称,最大长度] -->
  19. "p":["text","postbox",6],<#-- 邮件编码-->
  20. "n":["text","numberbox",50],<#-- 只能输入数字-->
  21. "c":["text","chinessbox",50],<#-- 只能输入中文-->
  22. "f":["text","floatbox",50],<#-- 只能输入浮点数-->
  23. "d":["text","yearmonthbox",6],<#-- 只能输入YYYYMM格式的日期-->
  24. "t":["text","timebox",8],<#-- 只能输入时间格式-->
  25. "s":["text","datetime",19],<#-- 只能输入日期+时间 格式-->
  26. "m":["password","textbox",50],<#-- 密码输入框-->
  27. "x":["text","notpastebox",50],<#-- 不能粘贴的输入框-->
  28. " ":["text","textbox",50],<#-- 默认-->
  29. "b":["text","textbox",50]<#-- 默认-->
  30. }>
  31. <#--准备 生成TD所需的表头定义列(过滤多列表头,仅保留最后有效的一列)-->
  32. <#if (parameters.options.frozenColumns > 0) >
  33. <#assign v_fixHead = parameters.lastHeaderRow[0..(parameters.options.frozenColumns-1)] >
  34. <#assign v_colHead = parameters.lastHeaderRow[(parameters.options.frozenColumns)..]![] >
  35. <#else>
  36. <#assign v_fixHead = [] >
  37. <#assign v_colHead = parameters.lastHeaderRow >
  38. </#if>
  39. <#assign colNames=(parameters.options.data.headers![])>
  40. <#--macro 生成TD-->
  41. <#macro GT_TD v_input_comp v_data_one v_row_pos v_col_pos>
  42. <#assign v_type="">
  43. <#assign v_subtype=" ">
  44. <#assign v_readOnly=((v_input_comp.readOnly!"")=="true")?string("readonly=\"readonly\"","") />
  45. <#assign v_addClass=(v_col_pos==0)?string("nupfirstcollum","")>
  46. <#if !(v_input_comp.type??)>
  47. <#assign v_type="02">
  48. <#else>
  49. <#assign v_type=v_input_comp.type?substring(0, 2)>
  50. <#if (v_input_comp.type?length>2)>
  51. <#assign v_subtype=v_input_comp.type?substring(2, 3)>
  52. </#if>
  53. </#if>
  54. <#--设置为不可编辑-->
  55. <#if (v_readOnly!="")>
  56. <#assign v_type="read">
  57. </#if>
  58. <#assign v_comp={
  59. "type":v_type,
  60. "subtype":v_subtype!" ",
  61. "tip":v_input_comp.tip!"",
  62. "pname":colNames[v_col_pos]!"",
  63. "rows":v_input_comp.rows!"",
  64. "cus":v_input_comp.cus!"",
  65. "vld":v_input_comp.vld!"",
  66. "label":v_input_comp.label!"",
  67. "value":v_input_comp.value!"",
  68. "text":v_input_comp.text!"",
  69. "colNum":v_input_comp.colNum!"10",
  70. "align":v_input_comp.align!"center",
  71. "onselect":v_input_comp.onselect!""
  72. }>
  73. <#if (v_input_comp.maxlength??)>
  74. <#assign v_comp = v_comp + {"maxlength":v_input_comp.maxlength}>
  75. </#if>
  76. <td field="${colNames[v_col_pos]}" align="${v_comp.align}" class=fwnupgrid-td>
  77. <#assign compValue = v_data_one["_DIC_"+colNames[v_col_pos]]!"">
  78. <#assign hiddenValue = v_data_one[colNames[v_col_pos]]!"">
  79. <#if compValue=="">
  80. <#assign compValue = v_data_one[colNames[v_col_pos]]!"">
  81. </#if>
  82. <#--全部的控件都不用NAME 用rw来表示行 用nd来表示列名,目的为了减少submit时提交的数据量-->
  83. <#--myclass 用来新增一行的时候 重新将class=myclass 目的是为了初始化控件-->
  84. <#switch v_comp.type!"">
  85. <#case GtType.READONLY>
  86. <#case GtType.LABEL>
  87. <#assign inputTmp=inputSets[v_comp.subtype!" "]>
  88. <label class="${v_addClass}" rw="${v_row_pos}" nd="${v_comp.pname}" value="${hiddenValue}">${compValue}</label>
  89. <input title="${v_comp.tip!""}" type="hidden" class="${inputTmp[1]} ${v_addClass}" myclass="${inputTmp[1]} ${v_addClass}" maxlength="${v_comp.maxlength!inputTmp[2]}" rw="${v_row_pos}" nd="${v_comp.pname}" value="${hiddenValue}" vldStr="${v_comp.vld!""}" ${v_comp.cus!""} ${v_readOnly}/>
  90. <#break>
  91. <#case GtType.INPUT ><#--处理单行输入控件-->
  92. <#assign inputTmp=inputSets[v_comp.subtype!" "]>
  93. <#if (compValue?is_sequence)>
  94. <#assign compValue=(compValue[0]?string)!"">
  95. </#if>
  96. <input title="${v_comp.tip!""}" type="${inputTmp[0]}" class="${inputTmp[1]} ${v_addClass}" myclass="${inputTmp[1]} ${v_addClass}" maxlength="${v_comp.maxlength!inputTmp[2]}" rw="${v_row_pos}" nd="${v_comp.pname}" value="${compValue}" vldStr="${v_comp.vld!""}" ${v_comp.cus!""} ${v_readOnly}/>
  97. <#break>
  98. <#case GtType.SFZ ><#--处理身份证 -->
  99. <#if (compValue?is_sequence)>
  100. <#assign compValue=(compValue[0]?string)!"">
  101. </#if>
  102. <input type="text" title="${v_comp.tip!""}" class="idcardbox ${v_addClass}" myclass="idcardbox ${v_addClass}" maxlength="${v_comp.maxlength!19}" rw="${v_row_pos}" nd="${v_comp.pname}" value="${compValue}" vldStr="${v_comp.vld!""}" ${v_comp.cus!""} ${v_readOnly}/>
  103. <#break>
  104. <#case GtType.TEXTAREA ><#--处理多行输入控件 -->
  105. <#if (compValue?is_sequence)>
  106. <#assign compValue=(compValue[0]?string)!"">
  107. </#if>
  108. <textarea class="textareabox ${v_addClass}" myclass="textareabox ${v_addClass}" title="${v_comp.tip!""}" rows="${v_comp.rows!3}" rw="${v_row_pos}" nd="${v_comp.pname}" vldStr="${v_comp.vld!((v_comp.label!"")+"="+"l(0-150)")}" ${v_comp.cus!""} ${v_readOnly}>${compValue}</textarea>
  109. <#break>
  110. <#case GtType.DATEPICKER ><#--处理日期控件 -->
  111. <#if (compValue?is_sequence)>
  112. <#assign compValue=(compValue[0]?string)!"">
  113. </#if>
  114. <input type="text" class="datebox ${v_addClass}" myclass="datebox ${v_addClass}" title="${v_comp.tip!""}" rw="${v_row_pos}" nd="${v_comp.pname}" vldStr="${v_comp.vld!""}" maxlength="${v_comp.maxlength!50}" value="${compValue}" ${v_comp.cus!""} ${v_readOnly}/>
  115. <#break>
  116. <#case GtType.BUTTON ><#--处理按钮-->
  117. <#if (compValue?is_sequence)>
  118. <#assign compValue=(compValue[0]?string)!"">
  119. </#if>
  120. <a class="buttonlink ${v_addClass}" myclass="buttonlink ${v_addClass}" ${v_readOnly} ${v_comp.cus!""} rw="${v_row_pos}" nd="${v_comp.pname}" title="${v_comp.tip!""}" >${compValue}</a>
  121. <#break>
  122. <#case GtType.CHECKBOX >
  123. <#-- 取控件的值-->
  124. <#if (hiddenValue?is_sequence)>
  125. <#assign hiddenValue=(hiddenValue[0]?string)!"">
  126. </#if>
  127. <#-- 单checkbox处理 -->
  128. <input title="${v_comp.tip!""}" type="checkbox" class="checkbox ${v_addClass}" ${v_comp.cus!""} name="${v_comp.pname}"
  129. myclass="checkbox ${v_addClass}" rw="${v_row_pos}" nd="${v_comp.pname!""}" value="${v_comp.value!""}"
  130. vldStr="${v_comp.vld!""}" ${(hiddenValue=(v_comp.value!""))?string("checked","")} ${v_readOnly}/>
  131. <#break>
  132. <#case GtType.RADIOBOX >
  133. <#if (hiddenValue?is_sequence)>
  134. <#assign hiddenValue=(hiddenValue[0]?string)!"">
  135. </#if>
  136. <#if (parameters.glt.dict[v_comp.pname])??>
  137. <#-- 字典项处理 -->
  138. <#assign dicts=parameters.options.data.dicts[v_comp.pname]!{}>
  139. <table border=0 cellspacing=0 cellpadding=0 class="inputSet">
  140. <#list dicts?keys?chunk(((v_comp.colNum)?number)!10) as subkeys>
  141. <tr>
  142. <#list subkeys as key>
  143. <td align="right" style="border:0">
  144. <label>${dicts[key]!""}<input title="${v_comp.tip!""}" type="radio" class="radio ${v_addClass}" ${v_comp.cus!""}
  145. myclass="radio ${v_addClass}" rw="${v_row_pos}" nd="${v_comp.pname!""}" name="${v_row_pos+(v_comp.pname!"")}" value="${key!""}"
  146. ${(hiddenValue=(key!""))?string("checked","")} ${v_readOnly}/></label>
  147. </td>
  148. </#list>
  149. </tr>
  150. </#list>
  151. </table>
  152. <#else>
  153. <label>${v_comp.text}<input type="radio" title="${v_comp.tip!""}" class="radio ${v_addClass}" myclass="radio ${v_addClass}"
  154. ${v_comp.cus!""} rw="${v_row_pos}" nd="${v_comp.pname}" name="${v_comp.pname}" value="${compValue!""}"
  155. vldStr="${v_comp.vld!""}" ${(hiddenValue=(v_comp.value!""))?string("checked","")} ${v_readOnly} /></label>
  156. </#if>
  157. <#break>
  158. <#case GtType.COMBOBOX>
  159. <#if v_comp.subtype!='b'>
  160. <#assign v_readOnly='readOnly=true'>
  161. </#if>
  162. <#assign inputTmp=inputSets[v_comp.subtype!" "]>
  163. <input type="text" class="${inputTmp[1]} ${v_addClass}" myclass="${inputTmp[1]} ${v_addClass}" title="${v_comp.tip!""}" cmb="true" rw="${v_row_pos}" nd="${v_comp.pname}_CMB" onfocus="${parameters.id}_combox(this,'${v_comp.pname}');" maxlength="${v_comp.maxlength!50}" value="${compValue}" ${v_comp.cus!""} ${v_readOnly} doselect="${v_comp.onselect!""}"<#rt>/>
  164. <input type="hidden" class="gltcom" myclass="gltcom" rw="${v_row_pos}" nd="${v_comp.pname}" vldStr="${v_comp.vld!""}" value="${hiddenValue}" />
  165. <#break>
  166. <#default>
  167. </#switch>
  168. </td>
  169. </#macro>
  170. <#--生成单行记录的函数 -->
  171. <#macro GLT_TR tr_rows_arr v_data_one irow>
  172. <tr class="gltDataTableTr" fwnupgrid-row-index=${irow}>
  173. <#list 0.. (parameters.options.nupRow-1) as repeatRowCnt >
  174. <#if ((tr_rows_arr?size)>0)>
  175. <#list tr_rows_arr as cols>
  176. <@GT_TD v_input_comp=cols
  177. v_data_one=v_data_one[repeatRowCnt]!{}
  178. v_row_pos=(irow+repeatRowCnt_index)
  179. v_col_pos=cols_index/>
  180. </#list>
  181. </#if>
  182. </#list>
  183. </tr>
  184. </#macro>
  185. <#assign ifixcol=0>
  186. <#--生成整个表单记录的函数 -->
  187. <#macro GLT_DATA v_data_arr >
  188. <#assign emptyComp={}>
  189. <#if ((v_data_arr?size)>0)>
  190. <#list v_data_arr?chunk((parameters.options.nupRow),emptyComp) as nupRows>
  191. <#assign nupRows2=nupRows>
  192. <@GLT_TR tr_rows_arr=v_colHead
  193. v_data_one=nupRows2
  194. irow=(nupRows_index*parameters.options.nupRow)
  195. />
  196. </#list>
  197. <#else>
  198. <@GLT_TR v_colHead {} 0 />
  199. </#if>
  200. </#macro>
  201. <#-- 输出列标题 函数-->
  202. <#macro GLT_COL v_head_row isFixed>
  203. <#list v_head_row as col><#--列数据生成 -->
  204. <th nowrap="nowrap" rowspan=${col.rowspan!1} colspan=${col.colspan!1} <#if col.align??> _al=${col.align}</#if> sortable=${col.sortable!'true'}
  205. <#if col.width??>style="width=${col.width}"</#if> <#if (col.lastRowIndex??)>lastRowIndex="${col.lastRowIndex}" </#if>
  206. <#if isFixed>class=fwnupgrid-th-fixed<#else>class=fwdatagrid-th</#if> >
  207. <#if !(col.lastRowIndex??)><#--标题组生成方式 -->
  208. <#if col.checkbox??><#--生成checkbox -->
  209. <input type=checkbox class=fwnupgrid-header-check>
  210. <#else>
  211. ${col.title!""}
  212. </#if>
  213. <#else><#--非标题组生成方式 -->
  214. <#if col.checkbox??><#--生成checkbox -->
  215. <input type=checkbox class=fwnupgrid-header-check>
  216. <#else>
  217. <span>${col.title!""}</span>
  218. <span class=fwnupgrid-sort-icon>&nbsp;</span>
  219. </#if>
  220. </#if>
  221. </th>
  222. </#list>
  223. </#macro>
  224. <#macro GLT_HEADER v_head_colHead>
  225. <tr class=fwnupgrid-header-tr>
  226. <#list 1.. parameters.options.nupRow as repeatRowCnt >
  227. <#list v_head_colHead as row>
  228. <@GLT_COL row false/>
  229. <#break>
  230. </#list>
  231. </#list>
  232. </tr>
  233. </#macro>
  234. <#-- 开始生成多记录表脚本-->
  235. <#if parameters.hasTitle!true >
  236. <fieldset class="fieldset2" align="center" style="cursor:default;width:${parameters.width!"100%"}" >
  237. <legend class="legend" style="cursor:hand;" >
  238. <span onclick="_FW.oFtl.fnShowTable('img_${parameters.id}_grid','${parameters.id}')" >
  239. <img id="img_${parameters.id}_grid" src="${request.contextPath}/themes/default/images/query_icon_right.gif">
  240. </span>
  241. <span title="单击展开或收缩" onclick="_FW.oFtl.fnShowTable('img_${parameters.id}_grid','${parameters.id}')">
  242. ${parameters.title!(parameters.glt.title!'')}
  243. </span>
  244. </legend>
  245. </#if>
  246. <div align="left" style="width:100%" id="${parameters.id}" >
  247. <div class="fwnupgrid"> <!-- 整个grid的外层 -->
  248. <div class="fwnupgrid-wrap"> <!-- 整个grid的覆盖区 -->
  249. <#assign buildPage=(parameters.options.hasPage||(parameters.options.expbtn?length!"")>0) >
  250. <#if (["TOP","BOTH"]?seq_contains(parameters.pageAlign!"BOTTOM"))&&buildPage >
  251. <div class="fwdatagrid-pager"></div><!-- 整个grid的分页区 -->
  252. </#if>
  253. <div class="fwnupgrid-view"> <!-- 整个grid的数据区 -->
  254. <table border=0 cellspacing=0 cellpadding=0 width=100%>
  255. <thead>
  256. <@GLT_HEADER parameters.glt.colHead />
  257. </thead>
  258. <tbody>
  259. <@GLT_DATA parameters.options.data.rows />
  260. </tbody>
  261. </table>
  262. </div>
  263. <#if (["BOTTOM","BOTH"]?seq_contains(parameters.pageAlign!"BOTTOM"))&&buildPage >
  264. <div class="fwnupgrid-pager"></div><!-- 整个grid的分页区 -->
  265. </#if>
  266. </div>
  267. </div>
  268. <input type="hidden" name="_multiple" />
  269. </div>
  270. <#if parameters.hasTitle!true >
  271. </fieldset>
  272. </#if>
  273. <#-- 生成多记录表对应js脚本的区域-->
  274. <script language="javascript">
  275. $(function(){
  276. if($(${parameters.id}).data('_init')){return;}
  277. //标志已经初始化,无需重新初始化
  278. $(${parameters.id}).data('_init',true);
  279. <#if !(parameters.showContent!true)>
  280. _FW.oFtl.fnShowTable('img_${parameters.id}_grid','${parameters.id}');
  281. </#if>
  282. $("#${parameters.id}").fwnupgrid(${tojson(parameters.options)});
  283. _FW.oFtl.fnInitObject('${parameters.id}');
  284. });
  285. function ${parameters.id}_combox(input,combox){
  286. //只读的不处理
  287. if(input.className.indexOf('readOnly')!=-1)return;
  288. $("#${parameters.id}").fwnupgrid("showComBox",input,"${parameters.id}_"+combox);
  289. }
  290. </script>