dialog.jsp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  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. <f:link href="tree/zTreeStyle.css"></f:link>
  10. <script type="text/javascript" src="${ctx}/js/ueditor2/dialogs/internal.js"></script>
  11. <script type="text/javascript" src="${ctx}/js/jquery/plugins/jquery.dragdiv.js"></script>
  12. <link rel="stylesheet" href="${ctx}/js/jquery/plugins/jquery.dragdiv.css" type="text/css" />
  13. <link rel="stylesheet" href="${ctx}/js/tree/zTreeStyle.css" type="text/css" />
  14. <script type="text/javascript" src="${ctx}/js/tree/jquery.ztree.js"></script>
  15. <script type="text/javascript" src="${ctx}/js/util/easyTemplate.js"></script>
  16. <script type="text/javascript" src="${ctx}/js/util/json2.js"></script>
  17. <script type="text/javascript" src="${ctx}/js/lg/plugins/ligerTab.js"></script>
  18. <style type="text/css">
  19. .field-ul {
  20. width: 95%;
  21. height: 95%;
  22. margin: 0;
  23. padding: 0;
  24. overflow-y: auto;
  25. overflow-x: hidden;
  26. }
  27. .fields-div {
  28. float: left;
  29. border: 1px solid #828790;
  30. width: 160px;
  31. height: 260px;
  32. overflow: auto;
  33. }
  34. .domBtnDiv {
  35. display: block;
  36. margin-left:5px;
  37. float:left;
  38. width:340px;
  39. height:260px;
  40. background-color: powderblue;
  41. overflow-y: auto;
  42. overflow-x: hidden;
  43. }
  44. #fieldContainer{
  45. height:70px;
  46. overflow-y:auto;
  47. overflow-x:hidden;
  48. }
  49. #fieldTable{
  50. margin:0;
  51. }
  52. </style>
  53. </head>
  54. <body>
  55. <div class="panel-top">
  56. <a href="#" class="link add" onclick="addToTab(this);">添加子查询</a>
  57. <input type="text" size="10" class="inputText">
  58. <div class="l-bar-separator"></div>
  59. </div>
  60. </div>
  61. <div id="inputPanel">
  62. <div tabid="dialog" title="自定义对话框">
  63. <fieldset class="base">
  64. <legend><var id="lang_dialog_setting"></var></legend>
  65. <table width="90%" style="border: thin;">
  66. <tr hidden="true">
  67. <th>权限继承</th>
  68. <td>
  69. <select id="permissionExtend">
  70. </select>
  71. </td>
  72. <td>弹出框显示权限将继承该字段的权限</td>
  73. </tr>
  74. <tr>
  75. <th>选择对话框</th>
  76. <td>
  77. <select id="dialog-type" onchange="dialogChange()">
  78. <option value="0"></option>
  79. </select>
  80. </td>
  81. <td>&nbsp;</td>
  82. </tr>
  83. <tr>
  84. <th>查询条件:</th>
  85. <td colspan="2">
  86. <div id="fieldContainer" style="height:60px;">
  87. <table id="fieldTable" width="90%">
  88. </table>
  89. </div>
  90. </td>
  91. </tr>
  92. </table>
  93. </fieldset>
  94. <fieldset class="base">
  95. <legend><var id="lang_return_setting"></var></legend>
  96. <div class="fields-div">
  97. <ul id="fields-tree-dialog" class="ztree field-ul"></ul>
  98. </div>
  99. <div class="domBtnDiv">
  100. </div>
  101. </fieldset>
  102. </div>
  103. </div>
  104. <textarea id="templateOption" style="display:none;">
  105. <#list data as o>
  106. <option value="\${o.field}">\${o.field}</option>
  107. </#list>
  108. </textarea>
  109. <textarea id="subtableTemplateOption" style="display:none;">
  110. <#list data as o>
  111. <option value="\${o.tableName}">\${o.tableDesc}</option>
  112. </#list>
  113. </textarea>
  114. <textarea id="queryTemplateTr" style="display:none;">
  115. <#list data as a>
  116. <tr class="fieldTr" style="height: 30px;">
  117. <td >
  118. <input type="checkbox" style="width:10%;float:left;" class="fieldCheck" onclick="fieldCheckToggle(this)"/>
  119. <!-- 条件字段 -->
  120. <input type="text" class="conditionField" style="width:25%;float:left;margin-right: 5px;" value="\${a.field}" readonly id="\${a.field}"/>
  121. <div class="fielddiv" style="display:none;">
  122. <select class="fieldSelect" style="width:30%;margin-right: 5px;">
  123. <option value="-1" controlType="-1" >--请选择--</option>
  124. </select>
  125. <input type="text" class="fieldValue" style="width:25%" value="--预设值--" onfocus="if (value==defaultValue)value=''" onblur="if(!value)value=defaultValue"/>
  126. </div>
  127. </td>
  128. </tr>
  129. </#list>
  130. </textarea>
  131. <div id="inputPanelTemplate" class="hidden">
  132. <fieldset class="base">
  133. <legend>
  134. 查询设置
  135. </legend>
  136. <table width="90%">
  137. <tr style="height: 30px;">
  138. <th>联动查询设置:</th>
  139. <td colspan="2">
  140. <select id="linkageType" style="width:60px;">
  141. <option value="0">不联动</option>
  142. <option value="1">回车联动</option>
  143. <option value="2">值改变联动</option>
  144. </select>
  145. 对象选择:
  146. <select id="linkageField" style="width:30%;">
  147. <option value="0">--请选择--</option>
  148. </select>
  149. </td>
  150. </tr>
  151. <tr style="height: 30px;">
  152. <th>查询类型:</th>
  153. <td colspan="2">
  154. <select id="query-type" class="query-type">
  155. <option value="0">--请选择--</option>
  156. <option value="querybtn">自定义查询</option>
  157. <option value="aliasbtn">别名脚本</option>
  158. </select>
  159. </td>
  160. </tr>
  161. <tr style="height: 30px;">
  162. <th>选择查询:</th>
  163. <td colspan="2">
  164. <select id="dialog-type" class="dialog-type" onchange="queryDialogChange()">
  165. <option value="0"></option>
  166. </select>
  167. </td>
  168. </tr>
  169. <tr>
  170. <th>查询条件:</th>
  171. <td colspan="2">
  172. <div id="fieldContainer" style="height:60px;">
  173. <table id="fieldTable" width="90%">
  174. </table>
  175. </div>
  176. </td>
  177. </tr>
  178. </table>
  179. </fieldset>
  180. <fieldset class="base">
  181. <legend>
  182. 回填值设置
  183. </legend>
  184. <div class="fields-div">
  185. <ul id="fields-tree" class="ztree field-ul"></ul>
  186. </div>
  187. <div class="domBtnDiv"></div>
  188. </fieldset>
  189. </div>
  190. <script type="text/javascript">
  191. var obj = $(editor.curInput);
  192. var bodyObj=obj.parents('body');
  193. var setting = {
  194. edit: {
  195. enable: true,
  196. showRemoveBtn: false,
  197. showRenameBtn: false,
  198. drag:{}
  199. },
  200. data: {
  201. keep: {
  202. parent: true,
  203. leaf: true
  204. },
  205. simpleData: {
  206. enable: true
  207. }
  208. },
  209. view: {
  210. selectedMulti: false
  211. }
  212. };
  213. var dragDivCache={};
  214. var currentTabId = 'dialog';
  215. var tab;
  216. var selectOptCache=[];
  217. var isMainTable;
  218. var currentTableName;
  219. $(function() {
  220. // 当前操作表是否为主表,表名字
  221. getCurrentTableType();
  222. $('div').delegate('.query-type', 'change', function(){
  223. var qyerType = $(this).val();
  224. getDialogByType(qyerType);
  225. });
  226. $("#inputPanel").ligerTab({
  227. height:'570',
  228. onBeforeSelectTabItem:function(tabid){
  229. currentTabId=tabid;
  230. },
  231. onAfterRemoveTabItem:function(tabid){
  232. currentTabId=tab.getSelectedTabItemID();
  233. tab.selectTabItem(currentTabId);
  234. },
  235. onAfterAddTabItem:function(tabid){
  236. var currentDiv = getCurrentTab();
  237. var divContent = currentDiv.html();
  238. if(!divContent){
  239. var content = $('#inputPanelTemplate').clone();
  240. content.find('#fields-tree').attr('id', 'fields-tree-'+tabid);
  241. currentDiv.html(content.html());
  242. }
  243. }
  244. });
  245. //获取tab的引用
  246. tab = $("#inputPanel").ligerGetTabManager();
  247. getDialogs();
  248. });
  249. function fieldCheckToggle(obj){
  250. $(obj).siblings('select.fieldSelect, div.fielddiv').toggle();
  251. }
  252. function getCurrentTab(){
  253. return $('#inputPanel div[tabid="'+currentTabId+'"]');
  254. }
  255. //添加到tab或者刷新
  256. function addToTab(obj){
  257. //回显时为直接title,获取则从input中获取
  258. if($(obj).attr("class"))
  259. var text = $(obj).next().val();
  260. else var text = obj;
  261. if(text=='')text = null;
  262. tab.addTabItem({text:text});
  263. };
  264. //编辑时绑定数据
  265. function bindData(dialog, tabId) {
  266. if(!dialog)return;
  267. var currentDiv = $('#inputPanel div[tabid="'+tabId+'"]');
  268. var dialogType = dialog.type;
  269. if(dialogType != 'dialog'){
  270. $('.query-type', currentDiv).val(dialogType);
  271. /* getDialogByType(dialogType); */
  272. var linkage = dialog.linkage;
  273. if(linkage){
  274. $('#linkage', currentDiv).attr('checked', 'checked');
  275. $('#linkage', currentDiv).trigger('click');
  276. }
  277. }
  278. $("#dialog-type", currentDiv).val(dialog.name);
  279. $("#dialog-type", currentDiv).trigger('change');
  280. var field;
  281. while(field=dialog.fields.pop()){
  282. var src=field.src,
  283. targets=field.target,target;
  284. if(targets)
  285. while(target=targets.pop()){
  286. var item = $("span.item-span[itemId='"+target+"']", currentDiv).toggleClass("item-span item-span-Disabled");
  287. if(item.length>0){
  288. item.each(function(){
  289. var node = {id:target, name: $(this).text()};
  290. addNode(src,node);
  291. });
  292. }
  293. }
  294. }
  295. var dialogQueryArr = dialog.query;
  296. for(var i=0;i<dialogQueryArr.length;i++){
  297. var dialogQueryObj = dialogQueryArr[i];
  298. var isMain = dialogQueryObj.isMain ;
  299. $(":text#"+dialogQueryObj.condition,currentDiv).each(function(){
  300. $(this).siblings(".fieldCheck").click() ;
  301. $(this).siblings('div.fielddiv').children('select').find("option[value='"+dialogQueryObj.trigger+"']").each(function(){
  302. var self = $(this);
  303. self.attr("selected","selected");
  304. var value = self.val();
  305. });
  306. if(dialogQueryObj.initValue!=''){
  307. $(this).siblings('div.fielddiv').children(':text').val(dialogQueryObj.initValue);
  308. }else{
  309. $(this).siblings('div.fielddiv').children(':text').val("--预设值--");
  310. }
  311. });
  312. }
  313. //{linkType:linkType,linkTarget:linkTarget.val(),isMain:linkTarget.attr("ismain")}
  314. var linkMessage = dialog.linkMessage ;
  315. if(linkMessage){
  316. $("#linkageType",currentDiv).val(linkMessage.linkType);
  317. $("#linkageField",currentDiv).val(linkMessage.linkTarget);
  318. }
  319. var subtableName = dialog.subtableName;
  320. if(dialogType == 'dialog'){
  321. var isAddRow = dialog.isAddRow;
  322. }
  323. };
  324. //添加树节点
  325. function addNode(id,node){
  326. var zTree = $.fn.zTree.getZTreeObj('fields-tree-'+currentTabId);
  327. if(!zTree)return;
  328. var parentNode = zTree.getNodeByParam("id",id,null);
  329. if(parentNode) zTree.addNodes(parentNode,node);
  330. };
  331. //获取自定义查询
  332. var queryCache = {};
  333. function getDialogByType(qyerType) {
  334. var targetObj = getCurrentTab();
  335. var cache = queryCache[qyerType];
  336. var dialogType = $("#dialog-type", targetObj);
  337. var url = '';
  338. if(qyerType == 'querybtn'){
  339. url = '/platform/bpm/bpmFormQuery/getAllQueries.ht';
  340. }else if(qyerType == 'aliasbtn'){
  341. url = '/platform/system/aliasScript/getAllAliasScripts.ht?enable=0&isReturnValue=1&scriptType=default';
  342. }
  343. if(!url) return;
  344. dialogType.empty();
  345. dialogType.append('<option value="0">--请选择--</option>');
  346. if(cache){
  347. for(var i=0;i<cache.length;i++){
  348. dialogType.append(cache[i].clone());
  349. }
  350. dialogType.trigger('change');
  351. var domBtnDiv = dragDivCache[currentTabId];
  352. if(!domBtnDiv) getFileds();
  353. return;
  354. }
  355. cache = [];
  356. $.ajax({
  357. url: __ctx+url,
  358. type: 'POST',
  359. dataType: 'json',
  360. async: false,
  361. error: function(){alert('请求超时');},
  362. success: function(data){
  363. if (!data) return;
  364. if(qyerType == 'querybtn'){
  365. for ( var i = 0, c; c = data[i++];) {
  366. var opt = $('<option value="'+c.alias+'" fields="'+c.returnFields
  367. +'" istable="'+c.istable+'" objname="'+c.objname+'" dsname="'+c.dsalias+'" >'+ c.name + '</option>');
  368. opt.attr("resultfield", c.resultfield.replaceAll('\"', "'"));
  369. opt.attr("conditionfield",c.conditionfield.replaceAll('\"', "'"));
  370. dialogType.append(opt);
  371. cache.push(opt);
  372. }
  373. }else if(qyerType == 'aliasbtn'){
  374. for ( var i = 0, c; c = data[i++];) {
  375. var opt = $('<option value="'+c.aliasName+'" fields="'+c.returnFields
  376. +'">'+ c.aliasDesc + '</option>');
  377. var argument = c.argument;
  378. if(!argument) argument = '{}';
  379. var returnParamJson = c.returnParamJson;
  380. if(!returnParamJson) returnParamJson = '{}';
  381. opt.attr("conditionfield", argument.replaceAll('\"', "'"));
  382. opt.attr("resultfield",returnParamJson.replaceAll('\"', "'"));
  383. dialogType.append(opt);
  384. cache.push(opt);
  385. }
  386. }
  387. getFileds(editor.tableId);
  388. queryCache[qyerType] = cache;
  389. }
  390. });
  391. };
  392. //获取自定义对话框 //增加获取树形对话框
  393. function getDialogs(){
  394. var url = __ctx + '/platform/form/bpmFormDialog/getAllDialogs.ht';
  395. $.ajax({
  396. url: url,
  397. type: 'POST',
  398. dataType: 'json',
  399. async: true,
  400. error: function(){alert('请求超时');},
  401. success: function(data){
  402. if (data) {
  403. var currentDiv = getCurrentTab();
  404. for(var i=0,c;c=data[i++];){
  405. var opt = $('<option value="'+c.alias+'" fields="'+c.returnFields
  406. +'" istable="'+c.istable+'" objname="'+c.objname+'" dsname="'+c.dsalias+'" >'+c.name+'</option>');
  407. opt.data("fields",c.resultfield);
  408. opt.data("conditionfield",c.conditionfield);
  409. $("#dialog-type", currentDiv).append(opt);
  410. }
  411. }
  412. //组合对话框
  413. var combiDialogUrl = __ctx + '/platform/form/bpmFormDialogCombinate/getAllCombDialog.ht';
  414. $.ajax({
  415. url: combiDialogUrl,
  416. type: 'POST',
  417. dataType: 'json',
  418. async: false,
  419. error: function(){alert('请求超时');},
  420. success: function(data){
  421. if (data) {
  422. var currentDiv = getCurrentTab();
  423. for(var i=0,c;c=data[i++];){
  424. var opt = $('<option value="'+c.alias+'" type="combi" '
  425. +'" istable="'+c.listDialog.istable+'" objname="'+c.listDialog.objname+'" dsname="'+c.listDialog.dsalias+'" >'+c.name+'</option>');
  426. opt.data("fields",c.listDialog.resultfield);
  427. opt.data("conditionfield",c.listDialog.conditionfield);
  428. $("#dialog-type", currentDiv).append(opt);
  429. }
  430. getFileds(editor.tableId);
  431. }
  432. }
  433. });
  434. }
  435. });
  436. };
  437. //选择不同的对话框
  438. function dialogChange(){
  439. var currentDiv = getCurrentTab();
  440. var dia=$("#dialog-type", currentDiv).find("option:selected");
  441. var v = dia.data("fields");
  442. var c = dia.data("conditionfield");
  443. if(v){
  444. var nodes=[];
  445. var fields = $.parseJSON(v);
  446. for(var i=0;i<fields.length;i++){
  447. var f=fields[i];
  448. nodes.push({id:f.field,pid:0,name:f.comment,isParent: true, open:true});
  449. }
  450. bindFieldsTree(setting, nodes);
  451. }
  452. if(c){
  453. var conditionfield = $.parseJSON(c);
  454. //生成查询参数设置框
  455. changeConditionParam(conditionfield,currentDiv);
  456. }
  457. }
  458. function bindFieldsTree(setting, nodes){
  459. var currentDiv = getCurrentTab();
  460. $("span.item-span-Disabled", currentDiv).each(function(){
  461. $(this).toggleClass("item-span-Disabled");
  462. $(this).toggleClass("item-span");
  463. });
  464. var tree = $.fn.zTree.init($("#fields-tree-"+currentTabId, currentDiv), setting, nodes);
  465. //设置拖拽 树对象
  466. var dragDiv = dragDivCache[currentTabId];
  467. if(dragDiv)dragDiv.dragdiv('bind','fields-tree-'+currentTabId);
  468. }
  469. //选择不同的查询
  470. function queryDialogChange(){
  471. var currentDiv = getCurrentTab();
  472. var condition_field = $("#condition-field", currentDiv);
  473. condition_field.empty();
  474. var dia = $("#dialog-type", currentDiv).find(":selected");
  475. var v = dia.attr("resultfield");
  476. var condStr = dia.attr("conditionfield");
  477. var type = $("#query-type", currentDiv).val();
  478. if (v) {
  479. var nodes = [];
  480. var fields = eval("("+v+")");
  481. var idName = 'field';
  482. var name = 'comment';
  483. if(type == 'aliasbtn'){
  484. idName = 'fieldName';
  485. name = 'fieldDesc';
  486. }
  487. for ( var i = 0; i < fields.length; i++) {
  488. var f = fields[i];
  489. nodes.push({
  490. id : f[idName],
  491. pid : 0,
  492. name : f[name],
  493. isParent : true,
  494. open : true
  495. });
  496. }
  497. bindFieldsTree(setting, nodes);
  498. }
  499. if (condStr) {
  500. var jsonObj = eval("("+condStr+")");
  501. changeConditionParam(jsonObj,currentDiv,type);
  502. }
  503. }
  504. //根据参数绑定字段
  505. function changeConditionParam(jsonObj,currentDiv,type){
  506. if (jsonObj) {
  507. $('#fieldTable', currentDiv).empty();
  508. var conditionfield= [];
  509. for(var i=0,obj;obj=jsonObj[i++];){
  510. if(obj.defaultType=="1" || obj.defaultType=="4"|| obj.defaultType=="5"){
  511. obj.defaultValue="";
  512. conditionfield.push(obj);
  513. }else if(type == 'aliasbtn'){
  514. obj.field = obj.paraName;
  515. conditionfield.push(obj);
  516. }
  517. }
  518. //对于值是输入框的,生成“绑定参数”下拉框选项
  519. if(typeof(conditionfield)!="undefined" && conditionfield!=""){
  520. var template = $('textarea#queryTemplateTr').val();
  521. var templateTrHtml = easyTemplate(template,conditionfield).toString();
  522. $('#fieldTable', currentDiv).append(templateTrHtml);
  523. if(selectOptCache.length!=0){
  524. var fieldSelect = $('td .fieldSelect, #linkageField', currentDiv);
  525. fieldSelect.empty();
  526. for(var j=0;j<selectOptCache.length;j++){
  527. fieldSelect.append(selectOptCache[j]);
  528. }
  529. }
  530. }
  531. }
  532. }
  533. dialog.onok = function() {
  534. //循环构建TAB页数据
  535. var jsonArr = [];
  536. $('div[tabid]').each(function(){
  537. jsonArr = buildJsonResult(this, jsonArr);
  538. });
  539. $(editor.curInput).removeAttr("eventBtn");
  540. if(jsonArr.length<1) return;
  541. var json = JSON2.stringify(jsonArr).replaceAll("\"","'") ;
  542. if(${not empty param.type}){
  543. editor.curInput.setAttribute("ht-customerdialog",json);
  544. return ;
  545. }
  546. editor.curInput.setAttribute("eventBtn",json);
  547. //设置该弹出框权限继承自那个字段
  548. var permissionExtend = $("#permissionExtend").val();
  549. if(permissionExtend){
  550. //主表绑定主表权限,后台处理
  551. //子表前端js 控制
  552. if(isMainTable) editor.curInput.setAttribute("name",permissionExtend);
  553. else editor.curInput.setAttribute("permissionName",permissionExtend);
  554. }
  555. editor.curInput = null;
  556. };
  557. function buildJsonResult(obj, jsonArr){
  558. var currentTab = $(obj);
  559. var tabId = currentTab.attr('tabid');
  560. var tabName = $($("li[tabid="+tabId+"]").children()[0]).text();
  561. var dialogType=$("#dialog-type", currentTab).val();
  562. if(!dialogType || dialogType == '0') return jsonArr;
  563. var zTree = $.fn.zTree.getZTreeObj("fields-tree-"+tabId);
  564. var nodes=zTree.getNodes(),fields=[];
  565. for(var i=0,c;c=nodes[i++];){
  566. if(!c.children)continue;
  567. var target=[],child=null, sub = {};
  568. while(child=c.children.pop()){
  569. target.push(child.id);
  570. }
  571. if(target.length>0){
  572. sub.src=c.id;
  573. sub.target=target;
  574. }
  575. fields.push(sub);
  576. }
  577. var queryArr = [] ;
  578. $('table .fieldTr :checkbox:checked',currentTab).each(function(){
  579. var queryObj = {} ;
  580. //获取查询参数
  581. queryObj.condition = $(this).siblings(':text').attr('id');
  582. var selectobj=$(this).siblings('div.fielddiv').children('select').find(":selected");
  583. queryObj.trigger = selectobj.val();
  584. queryObj.controlType = selectobj.attr('controlType');
  585. queryObj.isMain = selectobj.attr('isMain');
  586. var initvalue=$(this).siblings('div.fielddiv').children(':text').val();
  587. if(initvalue=="--预设值--"){
  588. initvalue="";
  589. }
  590. queryObj.initValue=initvalue;
  591. queryArr.push(queryObj);
  592. });
  593. var resultData = {'name': dialogType, 'fields':fields, 'query':queryArr,tabName:tabName};
  594. //如果是子表内按钮,不可以添加行
  595. var isAddRow = isMainTable; //$('#addSubTableRow', currentTab).is(':checked');
  596. resultData.isAddRow = isAddRow;
  597. if('dialog' == tabId){
  598. resultData.type = 'dialog';
  599. //如果为组合对话框,则修改类型
  600. var queryType = $("#dialog-type option:selected'",currentTab).attr("type");
  601. if("combi" ==queryType) resultData.type = "combiDialog";
  602. }else {
  603. resultData.type = $("#query-type", currentTab).val();
  604. //添加联动设置
  605. var linkType = $("#linkageType",currentTab).val();
  606. var linkTarget = $("#linkageField",currentTab);
  607. if(linkTarget)
  608. var isMain = linkTarget.find("option:selected").attr("ismain");
  609. resultData.linkMessage = {linkType:linkType,linkTarget:linkTarget.val(),isMain:isMain};
  610. }
  611. jsonArr.push(resultData);
  612. return jsonArr;
  613. }
  614. // eventBtn数组缓存
  615. var eventBtnCache = [];
  616. //初始化字段面板
  617. function initFieldsDiv(data){
  618. var mainTable = data.table, data = {};
  619. data.name = mainTable.tableDesc + '('+editor.getLang("customdialog.main")+')';
  620. data.id = mainTable.tableName;
  621. data.desc = mainTable.tableId;
  622. var formMainField=mainTable.tableName?$(bodyObj).find('[name*="'+mainTable.tableName+'"]'):[];
  623. var items = [];
  624. for ( var i = 0, c; c = mainTable.fieldList[i++];) {
  625. //if(c.isHidden!=0) continue ;
  626. //判断当前字段是否在表单上显示,如果存在这显示,
  627. if(formMainField.length != 0 && removeObj(formMainField,c.fieldName))continue;
  628. // 如果是手机表单
  629. if(${not empty param.type}){
  630. var fieldName ="data-main-"+c.fieldName;
  631. }else{
  632. var fieldName =mainTable.tableName+"-"+c.fieldName;
  633. }
  634. var itemObj = {name : c.fieldDesc,id : fieldName};
  635. var type=c.controlType;
  636. if(typeof type != 'undefined' && type != '') itemObj.ctype = type;
  637. items.push(itemObj);
  638. }
  639. var currentDiv = getCurrentTab();
  640. var selectOpt = [];
  641. //并且有字段信息,并且selectOptCache缓存还不存在,则产生缓存 ---- 取消 当前不是自定义对话框模式,
  642. if(items && selectOptCache.length<=0){
  643. var opt = '<optgroup label="主表字段"></optgroup>';
  644. selectOpt.push(opt);
  645. for(var i=0, c;c=mainTable.fieldList[i++];){
  646. opt='<option value="'+c.fieldName+'" controlType="'+c.controlType+'" ismain=true >' + c.fieldDesc+ '</option>';
  647. selectOpt.push(opt);
  648. }
  649. }
  650. if(!isMainTable) items=[];
  651. var allSubItems = [];
  652. for ( var i = 0, c; c = mainTable.subTableList[i++];) {
  653. //如果当前按钮为子表,去除其他子表
  654. if(!isMainTable && c.tableName != currentTableName) continue;
  655. var sub = {};
  656. sub.name = c.tableDesc + '('+editor.getLang("customdialog.sub")+')';
  657. sub.id = c.tableName;
  658. sub.desc = c.tableId;
  659. var currSubField=$(bodyObj).find('[name*="'+c.tableName+'"]');
  660. var subItems = [];
  661. for ( var y = 0, t; t = c.fieldList[y++];) {
  662. //判断当前字段是否在表单上显示,如果存在这显示,不存在这不显示
  663. if(formMainField.length != 0 && removeObj(currSubField,t.fieldName))continue;
  664. //手机端和电脑端不同
  665. if(${not empty param.type}){
  666. var fieldName ="data-"+c.tableName +"-"+t.fieldName
  667. }else {
  668. var fieldName =c.tableName+"-"+t.fieldName
  669. }
  670. var itemObj = {name : t.fieldDesc,id : fieldName,tableName: c.tableName};
  671. var type=t.controlType;
  672. if(typeof type != 'undefined' && type != '') itemObj.ctype = type;
  673. subItems.push(itemObj);
  674. }
  675. sub.items = subItems;
  676. items.push(sub);
  677. allSubItems = allSubItems.concat(subItems);
  678. }
  679. var dialogType = $('#dialog-type', currentDiv).val();
  680. var parentTableClass = $(editor.curInput).closest('div[type="subtable"]');
  681. if((!parentTableClass || parentTableClass.length<=0) && currentTabId == 'dialog'){
  682. //若为空,表示主表,则隐藏子表字段
  683. $('.subField', currentDiv).each(function(){
  684. $(this).closest('.fieldTr').hide() ;
  685. })
  686. }
  687. else if(!isMainTable || parentTableClass.length>0 && selectOptCache.length<=0){
  688. opt = '<optgroup label="子表字段"></optgroup>';
  689. selectOpt.push(opt);
  690. for(var i=0, c;c=allSubItems[i++];){
  691. //如果是子表情况,将其他子表数据排除
  692. if(c.tableName == currentTableName){
  693. opt='<option value="'+c.id+'" controlType="'+c.ctype+'" ismain=false >' + c.name+ '</option>';
  694. selectOpt.push(opt);
  695. }
  696. }
  697. }
  698. if(selectOpt.length>0) {
  699. selectOptCache = selectOpt;
  700. //联动框
  701. var linkAgeSelect = $("#linkageField",currentDiv);
  702. if(linkAgeSelect)
  703. for(var j=0;j<selectOptCache.length;j++){
  704. linkAgeSelect.append(selectOptCache[j]);
  705. }
  706. //弹出框权限追随框
  707. var permissionExtend = $("#permissionExtend",currentDiv);
  708. if(permissionExtend && permissionExtend.length>0){
  709. $(permissionExtend).parent().parent()[0].hidden = false;
  710. for(var j=0;j<selectOptCache.length;j++){
  711. var isMain = $(selectOptCache[j]).attr("ismain");
  712. //子表显示子表字段,主表显示主表字段
  713. if(!isMain||(isMainTable && "true" == isMain)||
  714. (!isMainTable && "false" == isMain)){
  715. permissionExtend.append(selectOptCache[j]);
  716. }
  717. }
  718. }
  719. var permissionName="";
  720. if(isMainTable)permissionName = obj.attr("name");
  721. else permissionName = obj.attr("permissionName");
  722. $(permissionExtend).val(permissionName);
  723. }
  724. data.items = items;
  725. //初始化字段面板
  726. var dragDiv = $(".domBtnDiv", currentDiv).dragdiv('init',{data : data});
  727. dragDivCache[currentTabId] = dragDiv;
  728. if(eventBtnCache.length<1){// 编辑时第一次循环
  729. if(${not empty param.type})
  730. var dialogStr = $(editor.curInput).get(0).getAttribute('ht-customerdialog');
  731. else var dialogStr = $(editor.curInput).get(0).getAttribute('eventBtn');
  732. if (dialogStr) {
  733. var jsonArr = eval("("+dialogStr+")");
  734. if(!jsonArr) return;
  735. eventBtnCache = jsonArr;
  736. for(var i=0;i<jsonArr.length;i++){
  737. var jsonObj = jsonArr[i];
  738. var dialogType = jsonObj.type;
  739. var tabId = 'dialog';
  740. if(dialogType == 'querybtn'){
  741. addToTab(jsonObj.tabName);
  742. tabId = currentTabId;
  743. }
  744. bindData(jsonObj, tabId);
  745. }
  746. }
  747. }
  748. };
  749. //加载字段面板
  750. var filedDataCache;
  751. function getFileds(tableId) {
  752. if(filedDataCache){
  753. initFieldsDiv(filedDataCache);
  754. return;
  755. }
  756. if(tableId){
  757. var url = __ctx
  758. + '/platform/form/bpmFormTable/getTableById.ht?tableId='
  759. + tableId;
  760. $.ajax({
  761. url: url,
  762. type: 'POST',
  763. dataType: 'json',
  764. async: false,
  765. error: function(){alert('请求超时');},
  766. success: function(data){
  767. filedDataCache = data;
  768. initFieldsDiv(data);
  769. }
  770. });
  771. }
  772. else{ //编辑器设计表单时获取字段并验证字段
  773. var html = editor.getContent();
  774. var params={};
  775. params.html=html;
  776. params.formDefId=editor.formDefId;
  777. $.ajax({
  778. url: __ctx + '/platform/form/bpmFormDef/validDesign.ht',
  779. type: 'POST',
  780. data:params,
  781. dataType: 'json',
  782. async: false,
  783. error: function(){alert('请求超时');},
  784. success: function(data){
  785. if(data.valid){
  786. filedDataCache = data;
  787. initFieldsDiv(data);
  788. }
  789. else{
  790. alert(data.errorMsg);
  791. }
  792. }
  793. });
  794. }
  795. };
  796. //判断当前字段是否在表单上显示,如果存在这显示,不存在这不显示
  797. function removeObj(obj,fieldName){
  798. //当前表单所有字段
  799. var AllField=$(obj);
  800. for( var i=0 ;i<AllField.length; i++){
  801. var formName=$(AllField[i]).attr("name");
  802. if(!formName)continue;
  803. var name=formName.split(":");
  804. if(name[2]==fieldName){
  805. return false;
  806. }else{
  807. continue;
  808. }
  809. }
  810. return true;
  811. };
  812. //获取当前操作对象
  813. function getCurrentTableType(){
  814. var tbody = obj.parents('tbody');
  815. if(!tbody) return;
  816. var input = $('input',tbody)[1];
  817. if(!input) return;
  818. var name = input.name.split(":");
  819. if(name.length < 2){
  820. if(obj.parents("div[type='subtable']").length >0){
  821. isMainTable = false;
  822. currentTableName = obj.parents("div[type='subtable']").attr("tablename").toLowerCase();
  823. }
  824. else {
  825. isMainTable = true;
  826. }
  827. return;
  828. }
  829. isMainTable = name[0] == 'm';
  830. currentTableName = name[1];
  831. }
  832. </script>
  833. </body>
  834. </html>