queryMulVar.jsp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. <%@page language="java" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title></title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <%@include file="/commons/include/form.jsp"%>
  8. <link rel="stylesheet" type="text/css" href="../input.css">
  9. <script type="text/javascript" src="${ctx}/js/ueditor2/dialogs/internal.js"></script>
  10. <script type="text/javascript" src="${ctx}/js/jquery/plugins/jquery.dragdiv.js"></script>
  11. <link rel="stylesheet" href="${ctx}/js/jquery/plugins/jquery.dragdiv.css" type="text/css" />
  12. <link rel="stylesheet" href="${ctx}/js/tree/zTreeStyle.css" type="text/css" />
  13. <script type="text/javascript" src="${ctx}/js/tree/jquery.ztree.js"></script>
  14. <script type="text/javascript" src="${ctx}/js/util/easyTemplate.js"></script>
  15. <script type="text/javascript" src="${ctx}/js/util/json2.js"></script>
  16. <style type="text/css">
  17. .field-ul {
  18. width: 95%;
  19. height: 95%;
  20. margin: 0;
  21. padding: 0;
  22. overflow-y: auto;
  23. overflow-x: hidden;
  24. }
  25. .fields-div {
  26. float: left;
  27. border: 1px solid #828790;
  28. width: 160px;
  29. height: 260px;
  30. overflow: auto;
  31. }
  32. .domBtnDiv {
  33. display: block;
  34. margin-left: 5px;
  35. float: left;
  36. width: 380px;
  37. height: 260px;
  38. background-color: powderblue;
  39. overflow-y: auto;
  40. overflow-x: hidden;
  41. }
  42. #fieldContainer{
  43. height:70px;
  44. overflow-y:auto;
  45. overflow-x:hidden;
  46. }
  47. #fieldTable{
  48. margin:0;
  49. }
  50. </style>
  51. <script type="text/javascript">
  52. var obj = $(editor.curInput);
  53. var curNode = obj;
  54. var parent = obj.parent();
  55. if(!curNode.is('select'))
  56. curNode=parent;
  57. var dragDiv;
  58. var selectOpt=[];
  59. var setting = {
  60. edit : {
  61. enable : true,
  62. showRemoveBtn : false,
  63. showRenameBtn : false,
  64. drag : {}
  65. },
  66. data : {
  67. keep : {
  68. parent : true,
  69. leaf : true
  70. },
  71. simpleData : {
  72. enable : true
  73. }
  74. },
  75. view : {
  76. selectedMulti : false
  77. }
  78. };
  79. $(function() {
  80. $(".button-td").bind("mouseenter mouseleave", function() {
  81. $(this).toggleClass("button-td-hover");
  82. });
  83. getDialogs();
  84. $('.fieldCheck','.fieldTr').live("click",function(){
  85. $(this).siblings('.fielddiv').each(function(){
  86. if($(this).css('display')!='none'){
  87. $(this).hide() ;
  88. }else{
  89. $(this).show() ;
  90. }
  91. });
  92. });
  93. });
  94. //编辑时绑定数据
  95. function bindData(dialogStr) {
  96. var dialogObj=dialogStr.replaceAll("'","\"");
  97. var dialog = $.parseJSON(dialogObj);
  98. if (!dialog)
  99. return;
  100. $("#dialog-type").find("option[value='" + dialog.name + "']").each(
  101. function() {
  102. $(this).attr("selected", "selected");
  103. dialogChange();
  104. });
  105. var key = dialog.binding.key;
  106. var value = dialog.binding.value;
  107. var target = [ {
  108. id : 'key',
  109. value : key
  110. }, {
  111. id : 'value',
  112. value : value
  113. } ];
  114. for ( var i = 0, t; t = target[i++];) {
  115. var item = $("span.item-span[itemId='" + t.id + "']").toggleClass(
  116. "item-span item-span-Disabled");
  117. if (item.length > 0) {
  118. var node = {
  119. id : t.id,
  120. name : item.text()
  121. };
  122. addNode(t.value, node);
  123. }
  124. }
  125. var dialogQueryArr = dialog.query;
  126. if(dialogQueryArr && dialogQueryArr.length>0){
  127. for(var i=0;i<dialogQueryArr.length;i++){
  128. var isMain = dialogQueryArr[i].isMain ;
  129. $(":text#"+dialogQueryArr[i].condition,".fieldTr").each(function(){
  130. $(this).siblings(".fieldCheck").click() ;
  131. $(this).siblings('div.fielddiv').children('select').find("option[value='"+dialogQueryArr[i].trigger+"']").each(function(){
  132. $(this).attr("selected","selected");
  133. });
  134. if(dialogQueryArr[i].initValue!=''){
  135. $(this).siblings('div.fielddiv').children(':text').val(dialogQueryArr[i].initValue);
  136. }else{
  137. $(this).siblings('div.fielddiv').children(':text').val("--预设值--");
  138. }
  139. });
  140. }
  141. }
  142. };
  143. //添加树节点
  144. function addNode(id, node) {
  145. var zTree = $.fn.zTree.getZTreeObj('fields-tree');
  146. if (!zTree)
  147. return;
  148. var parentNode = zTree.getNodeByParam("id", id, null);
  149. if (parentNode)
  150. zTree.addNodes(parentNode, node);
  151. };
  152. //获取自定义查询
  153. function getDialogs() {
  154. var url = __ctx + '/platform/bpm/bpmFormQuery/getAllQueries.ht';
  155. $.get(url,function(data) {
  156. if (data) {
  157. for ( var i = 0, c; c = data[i++];) {
  158. var opt = $('<option value="'+c.alias+'" fields="'+c.returnFields+'" conditionfield="'+c.conditionfield+'" conditions="'+
  159. c.conditionFields+'" istable="'+c.istable+'" objname="'+c.objname+'" dsname="'+c.dsalias+'" >'+ c.name + '</option>');
  160. opt.data("fields", c.resultfield);
  161. opt.data("conditionfield",c.conditionfield);
  162. $("#dialog-type").append(opt);
  163. }
  164. getFileds(editor.tableId);
  165. }
  166. });
  167. };
  168. //选择不同的查询
  169. function dialogChange() {
  170. var condition_field = $("#condition-field");
  171. condition_field.empty();
  172. var dia = $("#dialog-type").find("option:selected");
  173. var v = dia.data("fields");
  174. var condStr = dia.data("conditionfield");
  175. if (v) {
  176. var nodes = [];
  177. var fields = $.parseJSON(v);
  178. for ( var i = 0; i < fields.length; i++) {
  179. var f = fields[i];
  180. nodes.push({
  181. id : f.field,
  182. pid : 0,
  183. name : f.comment,
  184. isParent : true,
  185. open : true
  186. });
  187. }
  188. $("span.item-span-Disabled").each(function() {
  189. $(this).toggleClass("item-span-Disabled");
  190. $(this).toggleClass("item-span");
  191. });
  192. var tree = $.fn.zTree.init($("#fields-tree"), setting, nodes);
  193. //设置拖拽 树对象
  194. if (dragDiv)
  195. dragDiv.dragdiv('bind', 'fields-tree');
  196. }
  197. if (condStr) {
  198. $('#fieldTable').empty();
  199. var jsonObj = $.parseJSON(condStr), html="";
  200. var conditionfield= [];
  201. for(var i=0; i<jsonObj.length;i++){
  202. if(jsonObj[i].defaultType=="1"){
  203. conditionfield.push(jsonObj[i]);
  204. }
  205. }
  206. //对于值是输入框的,生成“绑定参数”下拉框选项
  207. if(typeof(conditionfield)!="undefined" && conditionfield!=""){
  208. var template = $('textarea#templateTr').val() ;
  209. var templateTrHtml = easyTemplate(template,conditionfield).toString();
  210. $('#fieldTable').append(templateTrHtml);
  211. if(selectOpt.length!=0){
  212. for(var j=0;j<selectOpt.length;j++){
  213. $('#inputPanel table').find('.fieldSelect').append(selectOpt[j]);
  214. }
  215. }
  216. }
  217. }
  218. }
  219. dialog.onok = function() {
  220. var name = $("#dialog-type").val();
  221. if (!name) {
  222. curNode.removeAttr("selectquery");
  223. return;
  224. };
  225. var bindingKey = '';
  226. var bindingValue = '';
  227. var zTree = $.fn.zTree.getZTreeObj("fields-tree"),
  228. nodes = zTree.getNodes();
  229. for ( var i = 0, c; c = nodes[i++];) {
  230. if (!c.children)
  231. continue;
  232. while (child = c.children.pop()) {
  233. if (child.id == 'key') {
  234. bindingKey = c.id;
  235. } else if (child.id == 'value') {
  236. bindingValue = c.id;
  237. }
  238. }
  239. };
  240. if (!bindingKey) {
  241. alert('请选择Key');
  242. return false;
  243. };
  244. if (!bindingValue) {
  245. alert('请选择值');
  246. return false;
  247. };
  248. var binding = {
  249. key : bindingKey,
  250. value : bindingValue
  251. }
  252. //处理类型是输入框
  253. var queryArr = [] ;
  254. $(':checkbox:checked','table .fieldTr').each(function(){
  255. var queryObj = {} ;
  256. queryObj.condition = $(this).siblings(':text').attr('id') ;
  257. var selectobj=$(this).siblings('div.fielddiv').children('select').find("option:selected");
  258. queryObj.trigger = selectobj.val();
  259. queryObj.controlType=selectobj.attr('controlType');
  260. queryObj.isMain = selectobj.attr('isMain') ;
  261. var initvalue=$(this).siblings('div.fielddiv').children(':text').val();
  262. if(initvalue=="--预设值--"){
  263. initvalue="";
  264. }
  265. queryObj.initValue=initvalue;
  266. queryArr.push(queryObj);
  267. });
  268. var json={
  269. name:name,
  270. binding:binding,
  271. query:queryArr};
  272. var json2 = JSON2.stringify(json).replaceAll("\"","'") ;
  273. curNode.get(0).setAttribute("selectquery", json2);
  274. };
  275. //初始化字段面板
  276. function initFieldsDiv(data) {
  277. var mainTable = data.table, data = {};
  278. var item = [];
  279. for ( var i = 0, c; c = mainTable.fieldList[i++];){
  280. if (c.isHidden != 0)
  281. continue;
  282. //字段的name与当前需要绑定的字段的id相同这不添加进去
  283. if(removeObj(curNode,c.fieldName))
  284. continue;
  285. var type=c.controlType;
  286. item.push({
  287. name : c.fieldDesc,
  288. id : c.fieldName,
  289. ctype : type
  290. });
  291. }
  292. //子表字段,返回一个全称作为id
  293. var subItems = [];
  294. for ( var i = 0, c; c = mainTable.subTableList[i++];) {
  295. var sub = {};
  296. tableName ="s:"+c.tableName+":";
  297. for ( var y = 0, t; t = c.fieldList[y++];) {
  298. if(removeObj(curNode,t.fieldName))
  299. continue;
  300. var type=t.controlType;
  301. subItems.push({
  302. name : t.fieldDesc,
  303. id : tableName+t.fieldName,
  304. ctype : type
  305. });
  306. }
  307. }
  308. //生成“绑定参数”行
  309. if(item){
  310. opt = '<optgroup label="主表字段"></optgroup>';
  311. selectOpt.push(opt);
  312. for(var i=0, c;c=item[i++];){
  313. opt='<option value="'+c.id+'" controlType="'+c.ctype+'" ismain=true >' + c.name+ '</option>';
  314. selectOpt.push(opt);
  315. }
  316. }
  317. var parentTableClass = $(editor.curInput).closest('div[type="subtable"]');
  318. if (!parentTableClass || parentTableClass.length > 0) {
  319. //若为空,表示主表,则隐藏子表字段
  320. opt = '<optgroup label="子表字段"></optgroup>';
  321. selectOpt.push(opt);
  322. for(var i=0, c;c=subItems[i++];){
  323. opt='<option value="'+c.id+'" controlType="'+c.ctype+'" ismain=false >' + c.name+ '</option>';
  324. selectOpt.push(opt);
  325. }
  326. }
  327. var items = [ {
  328. name : '值',
  329. id : 'value'
  330. }, {
  331. name : 'key',
  332. id : 'key'
  333. } ];
  334. data.items = items;
  335. dragDiv = $(".domBtnDiv").dragdiv('init', {
  336. data : data
  337. });
  338. var dialogStr = curNode.get(0).getAttribute("selectquery");
  339. if (dialogStr) {
  340. bindData(dialogStr);
  341. }
  342. };
  343. //加载字段面板
  344. function getFileds(tableId) {
  345. if (tableId) {
  346. var url = __ctx
  347. + '/platform/form/bpmFormTable/getTableById.ht?tableId='
  348. + tableId;
  349. $.post(url, function(data) {
  350. initFieldsDiv(data);
  351. });
  352. } else { //编辑器设计表单时获取字段并验证字段
  353. var html = editor.getContent();
  354. var params = {};
  355. params.html = html;
  356. params.formDefId = editor.formDefId;
  357. $.post(__ctx + '/platform/form/bpmFormDef/validDesign.ht', params,
  358. function(data) {
  359. if (data.valid) {
  360. initFieldsDiv(data);
  361. } else {
  362. alert(data.errorMsg);
  363. }
  364. });
  365. }
  366. };
  367. //解码单引号和双引号
  368. function htmlDecode(str) {
  369. return str.replace(/\&quot\;/g, '\"').replace(/\&\#39\;/g, '\'');
  370. };
  371. //如果字段的name与当前做级联设置的字段id一样,就不添加进去
  372. function removeObj(obj,id){
  373. var external = obj.parent("span").attr("external");
  374. if(external){
  375. external=htmlDecode(external).replaceAll("'","\"");
  376. var queryJson = JSON2.parse(external);
  377. return queryJson.name==id;
  378. }else{
  379. return false;
  380. }
  381. }
  382. function showSearch(obj,type){
  383. if(type){
  384. if(obj.value=="")
  385. obj.value="--预设值--";
  386. }else{
  387. if(obj.value=="--预设值--")
  388. obj.value="";
  389. }
  390. }
  391. </script>
  392. </head>
  393. <body>
  394. <div id="inputPanel">
  395. <fieldset class="base">
  396. <legend>
  397. <var id="lang_search_setting"></var>
  398. </legend>
  399. <table width="90%">
  400. <tr>
  401. <th><var id="lang_choose_search"></var>:</th>
  402. <td colspan="2">
  403. <select id="dialog-type" onchange="dialogChange()">
  404. <option value="0"></option>
  405. </select>
  406. </td>
  407. </tr>
  408. <tr>
  409. <td colspan="3">
  410. <div id="fieldContainer">
  411. <table id="fieldTable" width="90%">
  412. </table>
  413. </div>
  414. </td>
  415. </tr>
  416. </table>
  417. </fieldset>
  418. <fieldset class="base">
  419. <legend>
  420. <var id="lang_return_setting"></var>
  421. </legend>
  422. <div class="fields-div">
  423. <ul id="fields-tree" class="ztree field-ul"></ul>
  424. </div>
  425. <div class="domBtnDiv"></div>
  426. </fieldset>
  427. </div>
  428. <textarea id="templateTr" style="display:none;">
  429. <#list data as a>
  430. <tr class="fieldTr">
  431. <td >
  432. <input type="checkbox" style="width:10%;float:left;" class="fieldCheck" />
  433. <!-- 条件字段 -->
  434. <input type="text" class="conditionField" style="width:25%;float:left;margin-right: 5px;" value="\${a.field}" readonly id="\${a.field}"/>
  435. <div class="fielddiv" style="display:none;">
  436. <select class="fieldSelect" style="width:30%;margin-right: 5px;">
  437. <option value="-1" controlType="-1" >--请选择--</option>
  438. </select>
  439. <input type="text" class="fieldValue" style="width:25%" value="--预设值--" onfocus="if (value==defaultValue)value=''" onblur="if(!value)value=defaultValue"/>
  440. </div>
  441. </td>
  442. </tr>
  443. </#list>
  444. </textarea>
  445. </body>
  446. </html>