queryDataViewTemplate.ftl 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. <#--显示字段-->
  2. <#assign fields=sysQueryView.fieldSettings>
  3. <#--字段Map-->
  4. <#assign metaMap=sysQueryView.fieldMap>
  5. <#assign factFieldMap=sysQueryView.factFieldMap>
  6. <#--是否显示行号-->
  7. <#assign showRowsNum="false">
  8. <#--是否初始化查询-->
  9. <#assign initQuery="false">
  10. <#--是否初始化查询-->
  11. <#assign pageSize=sysQueryView.pageSize>
  12. <#--是否分组-->
  13. <#assign supportGroup="false">
  14. <#if (sysQueryView.supportGroup==1)>
  15. <#assign supportGroup="true">
  16. </#if>
  17. <#if (sysQueryView.showRowsNum==1)>
  18. <#assign showRowsNum="true">
  19. </#if>
  20. <#if (sysQueryView.initQuery==1)>
  21. <#assign initQuery="true">
  22. </#if>
  23. <#--生成colModel对象-->
  24. <#function getField field>
  25. <#assign meta=field.metaField>
  26. <#assign sort="false" >
  27. <#assign frozen="false" >
  28. <#assign align=field.align >
  29. <#assign alarmSetting=meta.alarmSetting >
  30. <#assign formater=meta.formater>
  31. <#assign url=meta.url >
  32. <#if (field.sortAble==1)>
  33. <#assign sort="true" >
  34. </#if>
  35. <#if (field.frozen==1)>
  36. <#assign frozen="true" >
  37. </#if>
  38. <#if ( align?exists && align=="" )>
  39. <#assign align="center" >
  40. </#if>
  41. <#assign rtn>{label:"${meta.fieldDesc}",name:"${meta.name}",index:'${meta.fieldName}',
  42. sortable:${sort},frozen:${frozen},align:"${align}"
  43. <#if (field.summaryType?exists && field.summaryType?trim!="") >
  44. ,summaryType:"${field.summaryType}"
  45. </#if>
  46. <#if (field.summaryTemplate?exists && field.summaryTemplate?trim!="") >
  47. ,summaryTemplate:"${field.summaryTemplate}"
  48. </#if>
  49. <#if (field.width?exists && field.width != 0) >
  50. ,width:${field.width}
  51. </#if>
  52. <#if (formater?exists && formater?trim!="" )>
  53. ,formatter:${meta.name}_Formater
  54. <#elseif (alarmSetting?exists && alarmSetting?trim!="" )>
  55. ,formatter:${meta.name}_AlarmFormater
  56. <#elseif ( url?exists && url?trim!="" )>
  57. ,formatter:${meta.name}_UrlFormater
  58. </#if>
  59. }</#assign>
  60. <#return rtn>
  61. </#function>
  62. <#--获取条件-->
  63. <#function getCondition condition>
  64. <#assign rtn="">
  65. <#list condition as con>
  66. <#assign operate=con.op >
  67. <#if (operate=="=") >
  68. <#assign operate="==" >
  69. </#if>
  70. <#if con_index==0>
  71. <#assign rtn="cellvalue" + operate + con.val >
  72. <#else>
  73. <#assign rtn=rtn + " && cellvalue" + operate + con.val >
  74. </#if>
  75. </#list>
  76. <#return rtn>
  77. </#function>
  78. <#--生成格式化函数-->
  79. <#macro genFormaterFunction>
  80. <#list fields as field>
  81. <#assign meta=field.metaField>
  82. <#assign alarmSetting=meta.alarmSetting >
  83. <#assign formater=meta.formater>
  84. <#assign url=meta.url >
  85. <#if (formater?exists && formater?trim!="") >
  86. function ${meta.name}_Formater(cellvalue, options, rowObject){
  87. ${formater};
  88. }
  89. <#elseif (alarmSetting?exists && alarmSetting?trim!="") >
  90. <#assign alarm=alarmSetting?eval >
  91. function ${meta.name}_AlarmFormater(cellvalue, options, rowObject){
  92. if(options.rowId=="" || options.rowId.indexOf("gridList")>-1){
  93. return cellvalue;
  94. }
  95. <#list alarm as item>
  96. if(${getCondition(item.condition)}){
  97. return "<span style='color:${item.color};font-weight:bold;'>" + cellvalue +"</span>";
  98. }
  99. </#list>
  100. return cellvalue;
  101. }
  102. <#elseif (url?exists && url?trim!="") >
  103. function ${meta.name}_UrlFormater(cellvalue, options, rowObject){
  104. var url=__ctx + "${url}";
  105. //url=url.replace("{${meta.name}}",cellvalue);
  106. url=replaceUrl(url,rowObject);
  107. return "<a href='"+url+"' target='_blank'>"+cellvalue+"</a>";
  108. }
  109. </#if>
  110. </#list>
  111. </#macro>
  112. <#--生成查询控件-->
  113. <#macro getController field>
  114. <#assign fieldName=field.fieldName>
  115. <#assign dataType=field.dataType>
  116. <#assign content=field.controlContent>
  117. <#switch field.controlType>
  118. <#case "1">
  119. <#if (dataType=="varchar")>
  120. <input type="text" name="Q_${fieldName}" class="inputText" />
  121. <#elseif (dataType=="number")>
  122. <input type="text" name="Q_${fieldName}" class="inputText" validate="{number:true}" />
  123. </#if>
  124. <#break>
  125. <#case "3">
  126. <input lablename="${fieldName}" class="dicComboTree" nodekey="${content}" validate="{empty:false}" name="${fieldName}" height="150" width="125" />
  127. <#break>
  128. <#case "4"><#--用户单选选择器 -->
  129. <input type="hidden" name="Q_${fieldName}" class="inputText">
  130. <input type="text" readonly="readonly" class="inputText" name="${fieldName}" >
  131. <input type="button" onclick="__Selector__.selectUser({self:this});" value="...">
  132. <#break>
  133. <#case "5"><#--角色多选选择器 -->
  134. <input type="hidden" name="Q_${fieldName}" >
  135. <input type="text" style="width: 250px" readonly="readonly" class="inputText">
  136. <input type="button" onclick="__Selector__.selectRole({self:this,isSingle:false});" value="...">
  137. <#break>
  138. <#case "6"><#--组织多选选择器 -->
  139. <input type="hidden" name="Q_${fieldName}" >
  140. <input type="text" style="width: 250px" readonly="readonly" class="inputText" name="${fieldName}" >
  141. <input type="button" onclick="__Selector__.selectOrg({self:this,isSingle:false});" value="...">
  142. <#break>
  143. <#case "7"><#--岗位多选选择器 -->
  144. <input type="hidden" name="Q_${fieldName}" >
  145. <input type="text" style="width: 250px" readonly="readonly" class="inputText" name="${fieldName}">
  146. <input type="button" onclick="__Selector__.selectPos({self:this,isSingle:false});" value="...">
  147. <#break>
  148. <#case "8"><#--人员多选选择器 -->
  149. <input type="hidden" name="Q_${fieldName}" >
  150. <input type="text" style="width: 250px" readonly="readonly" class="inputText" name="${fieldName}" >
  151. <input type="button" onclick="__Selector__.selectUser({self:this,isSingle:false});" value="...">
  152. <#break>
  153. <#case "17"><#--角色单选选择器 -->
  154. <input type="hidden" name="Q_${fieldName}" >
  155. <input type="text" readonly="readonly" class="inputText" name="Q_${fieldName}" >
  156. <input type="button" onclick="__Selector__.selectRole({self:this});" value="...">
  157. <#break>
  158. <#case "18"><#--组织单选选择器 -->
  159. <input type="hidden" name="Q_${fieldName}">
  160. <input type="text" readonly="readonly" class="inputText" name="${fieldName}">
  161. <input type="button" onclick="__Selector__.selectOrg({self:this});" value="...">
  162. <#break>
  163. <#case "19"><#--岗位单选选择器 -->
  164. <input type="hidden" name="Q_${fieldName}" >
  165. <input type="text" readonly="readonly" class="inputText" name="${fieldName}" >
  166. <input type="button" onclick="__Selector__.selectPos({self:this});" value="...">
  167. <#break>
  168. <#case "11"><#--下拉列表框 -->
  169. <#assign options=content?eval>
  170. <select name="Q_${fieldName}" >
  171. <option value="">全部</option>
  172. <#list options as opt>
  173. <option value="${opt.optionKey}">${opt.optionValue}</option>
  174. </#list>
  175. </select>
  176. <#break>
  177. <#case "12"><#-- 自定对话框 -->
  178. <#assign dg=content?eval>
  179. <input type="text" id="Q_${fieldName}" name="Q_${fieldName}" class="inputText" />
  180. <input type="button" onclick="showCustomDialog('${dg.dialog}','${dg.resultField}','Q_${fieldName}')" value="..." dialog="">
  181. <#break>
  182. </#switch>
  183. </#macro>
  184. <#--日期条件查询框-->
  185. <#macro genDate con>
  186. <#assign fieldName=con.name>
  187. <#assign operate=con.operate>
  188. <#if (operate==7)>
  189. 从:
  190. <input type="text" name="Q_begin${fieldName}" readonly="readonly" class="wdateTime inputText" />
  191. </li><li>到:
  192. <input type="text" name="Q_end${fieldName}" readonly="readonly" class="wdateTime inputText" />
  193. <#else>
  194. <input type="text" name="Q_${fieldName}" readonly="readonly" class="wdateTime inputText" />
  195. </#if>
  196. </#macro>
  197. <#--数字条件查询框-->
  198. <#macro genNumber con>
  199. <#assign fieldName=con.name>
  200. <#assign operate=con.operate>
  201. <#assign field=factFieldMap[fieldName]>
  202. <#assign controlType=field.controlType>
  203. <#if (operate==7)>
  204. 从:
  205. <input type="text" name="Q_begin${fieldName}" class="inputText" validate="{number:true}" />
  206. </li><li>到:
  207. <input type="text" name="Q_end${fieldName}" class="inputText" validate="{number:true}" />
  208. <#else>
  209. <@getController field />
  210. </#if>
  211. </#macro>
  212. <#macro genCondition con>
  213. <#assign fieldName=con.name>
  214. <#assign operate=con.operate>
  215. <#assign field=factFieldMap[fieldName]>
  216. <#assign controlType=field.controlType>
  217. <#assign dataType=field.dataType>
  218. <li>
  219. <span class="label">${field.fieldDesc}:</span>
  220. <#switch dataType>
  221. <#case "varchar"><#--字符串-->
  222. <#case "text">
  223. <@getController field />
  224. <#break>
  225. <#--数字-->
  226. <#case "number">
  227. <@genNumber con/>
  228. <#break>
  229. <#--日期-->
  230. <#case "date">
  231. <@genDate con/>
  232. <#break>
  233. </#switch>
  234. </li>
  235. </#macro>
  236. <#macro addCtx url><#if (!url?contains('http://') && !url?contains('https://') ) ><#noparse>${ctx}</#noparse></#if>${url}</#macro>
  237. <script type="text/javascript">
  238. <#--调用生成格式化函数体-->
  239. <@genFormaterFunction/>
  240. $(function () {
  241. $("#gridList").jqGrid({
  242. url:__ctx + '/platform/system/sysQueryView/data_${sysQueryView.sqlAlias}/${sysQueryView.alias}.ht',
  243. datatype: "json",
  244. mtype:"POST",//提交方式
  245. height: '100%',
  246. postData:postData,
  247. autowidth:true,
  248. jsonReader:{
  249. root: "rows",// json中代表实际模型数据的入口
  250. total: "total", // json中代表总页数的数据
  251. page: "page", // json中代表当前页码的数据
  252. records: "records",// json中代表数据行总数的数据
  253. repeatitems : false// 如果设为false,则jqGrid在解析json时,会根据name来搜索对应的数据元素(即可以json中元素可以不按顺序);而所使用的name是来自于colModel中的name设定。
  254. },
  255. colModel:[
  256. <#assign idx=0>
  257. <#list fields as field>
  258. <#--隐藏列不显示-->
  259. <#if (field.hidden==0)>
  260. <#if (idx >0) >,</#if>
  261. ${getField(field)}
  262. <#assign idx=idx +1>
  263. </#if>
  264. </#list>
  265. <#if (rowButtons?exists && rowButtons?size>0) >
  266. ,{label:"管理", align:"center",formatter:managerFormatter}
  267. </#if>
  268. ],
  269. //行号
  270. rownumbers:${showRowsNum},
  271. <#if (sortField?exists && sortField?trim!="") >
  272. sortname:"${sortField}",
  273. sortorder:"${sortSeq}",
  274. </#if>
  275. rownumWidth:20,
  276. viewrecords:true,
  277. //初始是否查询
  278. search:${initQuery},
  279. //上分页条
  280. //toppager :"#pagerNav",
  281. <#if (sysQueryView.needPage==1)>
  282. rowNum: ${pageSize},
  283. rowList: [5,10,20,30],
  284. recordtext:"总记录数:{2}",
  285. pager: "#pagerNav",
  286. prmNames:{page:"page",rows:"pageSize",sort:"sortField",order:"orderSeq",search:"initSearch"},
  287. <#else>
  288. prmNames:{sort:"sortField",order:"orderSeq",search:"initSearch"},
  289. rowNum: 10000,
  290. </#if>
  291. //列排序
  292. //direction : "rtl",
  293. /*
  294. grouping:true,
  295. groupingView : {
  296. groupField : ['category','amount'],
  297. //是否显示到列表
  298. groupColumnShow :[ true,true],
  299. groupText : ['<b> 国家: {0} {1} </b>','<b> 人品: {0} </b>'],
  300. groupSummary : [false,true],
  301. groupOrder:['asc','desc']
  302. },*/
  303. <#if (supportGroup?exists && supportGroup=="true" )>
  304. grouping:${supportGroup},
  305. groupingView : ${sysQueryView.groupSetting},
  306. </#if>
  307. caption: "${sysQueryView.name}"
  308. });
  309. $("#gridList").jqGrid('setFrozenColumns');
  310. doResize();
  311. $("#btnSearch").click(function(){
  312. search();
  313. });
  314. });
  315. <#--管理列-->
  316. <#if ( rowButtons?size>0) >
  317. function managerFormatter(cellvalue, options, rowObject){
  318. <#--输出JSON数组-->
  319. <#assign idx=0>
  320. var aryJson=[<#list rowButtons as btn>
  321. <#if (btn.inRow) >
  322. <#if (idx==0)>
  323. {url:'${btn.urlPath}',name:"${btn.name}",triggerType:"${btn.triggerType}"}
  324. <#else>
  325. ,{url:"${btn.urlPath}",name:"${btn.name}",triggerType:"${btn.triggerType}"}
  326. </#if>
  327. <#assign idx=idx+1>
  328. </#if>
  329. </#list>];
  330. var sb="";
  331. for(var i=0;i<aryJson.length;i++){
  332. var obj=aryJson[i];
  333. var url=obj.url;
  334. var name=obj.name;
  335. if(obj.triggerType=="onclick"){
  336. sb+= "<a href='#' onclick='"+url+"' >"+name+"</a>";
  337. }
  338. else{
  339. url=replaceUrl(url,rowObject);
  340. if(!url.startWith("http")){
  341. url =__ctx + url;
  342. }
  343. sb+= "<a href='"+url+"' target='_blank'>"+name+"</a>";
  344. }
  345. }
  346. return sb;
  347. }
  348. </#if>
  349. </script>
  350. <div class="hide-panel" id="panelTop">
  351. <div class="panel-top">
  352. <div class="tbar-title">
  353. <span class="tbar-label">${sysQueryView.name}</span>
  354. </div>
  355. <div class="panel-toolbar">
  356. <div class="toolBar">
  357. <div class="group"><a class="link search" id="btnSearch"><span></span>查询</a></div>
  358. <div class="l-bar-separator"></div>
  359. <#--导航栏工具条-->
  360. <#if (navButtons?exists && navButtons?size>0) >
  361. <#list navButtons as btn>
  362. <div class="group"><a class="link ok" <#if btn.triggerType=="href">href="${btn.urlPath}"</#if> <#if btn.triggerType=="onclick">onclick="${btn.urlPath}"</#if> ><span></span>${btn.name}</a></div>
  363. <div class="l-bar-separator"></div>
  364. </#list>
  365. </#if>
  366. <div class="group"><a class="link reset" onclick="$.clearQueryForm()"><span></span>重置</a></div>
  367. </div>
  368. </div>
  369. <#--条件工具条-->
  370. <#if (conditions?size > 0)>
  371. <div class="panel-search">
  372. <form id="searchForm" method="post" >
  373. <ul class="row">
  374. <#list conditions as con >
  375. <@genCondition con/>
  376. </#list>
  377. </ul>
  378. </form>
  379. </div>
  380. </#if>
  381. </div>
  382. </div>
  383. <div class="panel-body">
  384. <table id="gridList" style="width:600px"></table>
  385. <#if (sysQueryView.needPage==1)>
  386. <div id="pagerNav"></div>
  387. </#if>
  388. </div>