DataTemplateEdit.js 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085
  1. /**
  2. * 数据模板构造方法
  3. */
  4. var DataTemplateEdit = function() {
  5. }
  6. // 属性及函数
  7. DataTemplateEdit.prototype = {
  8. /**
  9. * 初始化
  10. */
  11. init : function() {
  12. var _self = this;
  13. this.initDisplaySetting();
  14. this.initConditionField();
  15. this.initSortField();
  16. this.initFilter();
  17. this.initExportField();
  18. this.initManageField();
  19. this.selectTr();
  20. // 绑定选择条件点击事件
  21. $("#selectCondition").click(function() {
  22. _self.selectCondition(_self)
  23. });
  24. // 绑定选择排序点击事件
  25. $("#selectSort").click(function() {
  26. _self.selectSort(_self)
  27. });
  28. },
  29. initDisplaySetting : function() {
  30. var tbl = '#displayFieldTbl';
  31. // 处理选择
  32. this.handChange(tbl);
  33. this.handClick(tbl);
  34. var tr = $($("#displayFieldTemplate .table-detail tbody")[0]).clone(true,
  35. true);
  36. var displayFieldVal = $("#displayField").val();
  37. if ($.isEmpty(displayFieldVal))
  38. return;
  39. var displayField = $.parseJSON(displayFieldVal),
  40. sb = new StringBuffer(),
  41. fieldRightEl = $("[var='fieldRight']", tr),
  42. hideFieldRightEl = $('<td var="fieldRight" class="hidden"></td>');
  43. for (var i = 0, c; c = displayField[i++];) {
  44. $("[var='index']", tr).html(i);
  45. $("[var='name']", tr).html(c.name);
  46. $("input[var='type']", tr).attr("value", c.type);
  47. $("input[var='style']", tr).attr("value", c.style);
  48. $("input[var='desc']", tr).attr("value", c.desc);
  49. for (var j = 0, k; k = c.right[j++];) {
  50. var rightHtml = this.getHtmlTd(k);
  51. if (k.s == 0) {
  52. if(!k.srid)
  53. fieldRightEl.html(rightHtml);
  54. else{
  55. hideFieldRightEl.html(rightHtml);
  56. fieldRightEl.after(hideFieldRightEl);
  57. }
  58. } else if (k.s == 1) {
  59. $("[var='printRight']", tr).html(rightHtml);
  60. }
  61. }
  62. sb.append(tr.html());
  63. }
  64. $(tbl).append(sb.toString());
  65. },
  66. /**
  67. * 设置每行的显示的权限
  68. *
  69. * @param v
  70. * 权限简称
  71. * @param full
  72. * 权限全称
  73. */
  74. getHtmlTd : function(k) {
  75. var v = k.type,
  76. rightId = k.id,
  77. rightName = k.name,
  78. rightScript = k.script,
  79. srid = k.srid||"",
  80. source = k.source?JSON.stringify(k.source).replaceAll("\"","\'"):"";
  81. if(rightScript||rightScript=="undefined")
  82. rightScript = "";
  83. var aryTd = [
  84. '<select name="displayFieldRight" class="change_right" var="right" >',
  85. '<option value="none" '
  86. + (v == 'none' ? 'selected="selected"' : '')
  87. + ' >无</option>',
  88. '<option value="everyone"'
  89. + (v == 'everyone' ? 'selected="selected"' : '')
  90. + '>所有人</option>',
  91. '<option value="user"'
  92. + (v == 'user' ? 'selected="selected"' : '')
  93. + '>用户</option>',
  94. '<option value="role"'
  95. + (v == 'role' ? 'selected="selected"' : '')
  96. + '>角色</option>',
  97. '<option value="org"'
  98. + (v == 'org' ? 'selected="selected"' : '')
  99. + '>组织</option>',
  100. '<option value="orgMgr"'
  101. + (v == 'orgMgr' ? 'selected="selected"' : '')
  102. + '>组织负责人</option>',
  103. '<option value="pos"'
  104. + (v == 'pos' ? 'selected="selected"' : '')
  105. + '>岗位</option>',
  106. '<option value="script"'
  107. + (v == 'script' ? 'selected="selected"' : '')
  108. + '>脚本</option>',
  109. '</select>',
  110. '<span name="displayFieldRight_span" '
  111. + (v == 'script' || v == 'none' || v == 'everyone'
  112. ? 'style="display: none;" '
  113. : '') + '>',
  114. '<input type="hidden" var="rightId" value="' + rightId + '">',
  115. '<textarea readonly="readonly" var="rightName" cols="40" rows="3">'
  116. + rightName + '</textarea>',
  117. '<a class="link-get" href="javascript:;"><span class="link-btn">选择</span></a>',
  118. '</span>',
  119. '<span class="displayFieldRight_script_span" '
  120. + (v != 'script' ? 'style="display: none;" ' : '')
  121. + '>',
  122. '<textarea cols="40" rows="3" var="rightScript" >'+ rightScript + '</textarea>',
  123. '<input type="hidden" var="srid" value="' + srid + '" />',
  124. '<input type="hidden" var="source" value=\"' + source + '\" />',
  125. '<a href="javascript:;" name="btnScript" class="link var" title="常用脚本" onclick="__DataTemplate__.selectScript(this,false)">常用脚本</a>',
  126. '</span>'];
  127. return aryTd.join('');
  128. },
  129. /**
  130. * 选中行或反选
  131. *
  132. * @return void
  133. */
  134. selectTr : function() {
  135. $("tr.odd,tr.even").each(function() {
  136. $(this).bind("mousedown", function(event) {
  137. if (event.target.tagName == "TD") {
  138. var strFilter = 'input:checkbox[class="pk"],input:radio[class="pk"]';
  139. var obj = $(this).find(strFilter);
  140. if (obj.length == 1) {
  141. var state = obj.attr("checked");
  142. obj.attr("checked", !state);
  143. }
  144. }
  145. });
  146. });
  147. },
  148. /**
  149. * 处理选择改变
  150. */
  151. handChange : function(obj) {
  152. var _self = this;
  153. $(obj).delegate("select.change_right", "change", function() {
  154. var me = $(this), spanObj = me.next(), nextSpanObj = spanObj.next();
  155. _self.showSpan(me.val(), spanObj);
  156. var txtObj = $("textarea", spanObj), idObj = $("input:hidden",
  157. spanObj);
  158. txtObj.val("");
  159. idObj.val("");
  160. var nextTxtObj = $("textarea", nextSpanObj);
  161. nextTxtObj.val("");
  162. });
  163. },
  164. /**
  165. * 显示权限的span
  166. */
  167. showSpan : function(permissionType, spanObj) {
  168. switch (permissionType) {
  169. case "user" :
  170. case "role" :
  171. case "org" :
  172. case "orgMgr" :
  173. case "pos" :
  174. spanObj.show();
  175. spanObj.next().hide();
  176. break;
  177. case "script" :
  178. spanObj.hide();
  179. spanObj.next().show();
  180. break;
  181. case "everyone" :
  182. case "none" :
  183. spanObj.hide();
  184. spanObj.next().hide();
  185. break;
  186. }
  187. },
  188. /**
  189. * 处理选择
  190. */
  191. handClick : function(obj) {
  192. $(obj).delegate("a.link-get", "click", function() {
  193. var me = $(this), txtObj = me.prev(), idObj = txtObj.prev(), selObj = me
  194. .parent().prev(), selType = selObj.val();
  195. // 选择回调
  196. var callback = function(ids, names) {
  197. txtObj.val(names);
  198. idObj.val(ids);
  199. };
  200. switch (selType) {
  201. case "user" :
  202. UserDialog({
  203. callback : callback
  204. });
  205. break;
  206. case "role" :
  207. RoleDialog({
  208. callback : callback
  209. });
  210. break;
  211. case "org" :
  212. case "orgMgr" :
  213. OrgDialog({
  214. callback : callback
  215. });
  216. break;
  217. case "pos" :
  218. PosDialog({
  219. callback : callback
  220. });
  221. break;
  222. }
  223. });
  224. },
  225. //====导出字段=====
  226. initExportField:function(){
  227. var tbl = '#exportFieldTbl';
  228. // 处理选择
  229. this.handChange(tbl);
  230. this.handClick(tbl);
  231. var tr = $($("#exportFieldTemplate .table-detail")[0]).clone(true,
  232. true);
  233. var tabletr = $($("#exportFieldTemplate .table-list")[0]).clone(true,
  234. true);
  235. var tableVal = $("#exportField").val();
  236. if ($.isEmpty(tableVal))
  237. return;
  238. var table = $.parseJSON(tableVal);
  239. var sb = new StringBuffer(),
  240. exportRightEl = $("[var='exportRight']", tr),
  241. hideFieldRightEl = $('<td var="exportRight" class="hidden"></td>');
  242. for (var l = 0, t; t = table[l++];) {
  243. $("input[var='tablename']", tabletr).val(t.tableName);
  244. $("input[var='tabledesc']", tabletr).val(t.tableDesc);
  245. $("input[var='ismain']", tabletr).val(t.isMain);
  246. $("[var='table']", tabletr).html(t.tableDesc+'('+t.tableName+")");
  247. sb.append(tabletr.html());
  248. for (var i = 0, c; c = t.fields[i++];) {
  249. $("[var='index']", tr).html(i);
  250. $("[var='name']", tr).html(c.name);
  251. $("input[var='type']", tr).attr("value", c.type);
  252. $("input[var='style']", tr).attr("value", c.style);
  253. $("input[var='desc']", tr).attr("value", c.desc);
  254. $("input[var='tablename']", tr).attr("value", c.tableName);
  255. $("input[var='ismain']", tr).attr("value", c.isMain);
  256. for (var j = 0, k; k = c.right[j++];) {
  257. var rightHtml = this.getHtmlTd(k);
  258. if (k.s == 2) {
  259. if(!k.srid)
  260. exportRightEl.html(rightHtml);
  261. else{
  262. hideFieldRightEl.html(rightHtml);
  263. exportRightEl.after(hideFieldRightEl);
  264. }
  265. }
  266. }
  267. sb.append(tr.html());
  268. }
  269. }
  270. $(tbl).append(sb.toString());
  271. },
  272. // =====================查询条件==============================================================================
  273. /**
  274. * 初始化条件字段
  275. */
  276. initConditionField : function() {
  277. var conditionFieldVal = $("#conditionField").val();
  278. if ($.isEmpty(conditionFieldVal))
  279. return;
  280. var conditionField = $.parseJSON(conditionFieldVal);
  281. for (var i = 0, c; c = conditionField[i++];) {
  282. var tr = this.constructConditionTr(c);
  283. $("#conditionTbl tbody").append(tr);
  284. }
  285. },
  286. /**
  287. * 选择条件
  288. *
  289. */
  290. selectCondition : function(_self) {
  291. var conditionType = $("input[name='conditionType']:checked").val();
  292. $("#condition-columnsTbl input:[name='select']:checked")
  293. .each(function() {
  294. var me = $(this), na = me.attr("fieldname"), ty = me
  295. .attr("fieldtype"), cm = me.attr("fielddesc"), ct = me
  296. .attr("controltype"),obj= $("#conditionTbl");
  297. if(_self.isExistName(obj,'name',na)){
  298. var condition = {
  299. na : na,
  300. ty : ty,
  301. op : 1,
  302. cm : cm,
  303. va : "",
  304. vf : 1,
  305. ct : ct,
  306. qt : _self.getQueryType(ty, 1)
  307. };
  308. var tr = _self.constructConditionTr(condition);
  309. $("#conditionTbl tbody").append(tr);
  310. }
  311. });
  312. },
  313. /**
  314. * 构造条件的列
  315. *
  316. * @param {}
  317. * condition
  318. * @return {}
  319. */
  320. constructConditionTr : function(condition) {
  321. var ty = condition.ty, na = condition.na, cm = condition.cm, op = condition.op, va = condition.va, vf = condition.vf;
  322. // 控件类型
  323. ct = condition.ct;
  324. // 查询类型
  325. qt = condition.qt;
  326. // 联合类型
  327. //var jtTd = this.constructTag("td");
  328. //var jtSelect = this.constructTag("select", {
  329. // name : "jt"
  330. //}); // $("<select name='conditionJoinType'></select>");
  331. //jtSelect.append(this.constructOption(jt, "AND"));
  332. // jtSelect.append(this.constructOption(jt, "OR"));
  333. //jtTd.append(jtSelect);
  334. // 名称
  335. var naTd = this.constructTag("td", {"var":"name"}, na);
  336. // 注解
  337. var cmTd = this.constructTag("td");
  338. var cmInput = this.constructTag("input", {
  339. name : "cm",
  340. value : cm,
  341. type : "text",
  342. 'class' : "inputText"
  343. });
  344. cmTd.append(cmInput);
  345. var hiddenInput = this.constructTag("input", {
  346. type : "hidden",
  347. value : JSON2.stringify(condition)
  348. });
  349. cmTd.append(hiddenInput);
  350. var ctTd = this.constructTag("td");
  351. var ctSelect = this.constructTag("select", {
  352. name : "ct",
  353. style : "width:70px;"
  354. });
  355. ctSelect = this.getCtSelect(ctSelect, ct, ty);
  356. ctTd.append(ctSelect);
  357. // 条件
  358. var opTd = this.constructTag("td");
  359. var opSelect = this.constructTag("select", {
  360. name : "op",
  361. style : "width:70px;"
  362. });
  363. opSelect = this.getOpSelect(opSelect, op, ty);
  364. opTd.append(opSelect);
  365. // 值来源
  366. var vfTd = this.constructTag("td");
  367. var vfSelect = this.constructTag("select", {
  368. name : "vf",
  369. onchange : "__DataTemplate__.selectValueFrom(this)"
  370. });
  371. vfSelect.append(this.constructOption(vf, 1, "表单输入"));
  372. // vfSelect.append(this.constructOption(vf, 2, "固定值"));
  373. // vfSelect.append(this.constructOption(vf, 3, "脚本"));
  374. // vfSelect.append(this.constructOption(vf, 4, "变量"));
  375. vfSelect.append(this.constructOption(vf, 5, "动态传入"));
  376. vfTd.append(vfSelect);
  377. // 值
  378. var vaTd = this.constructTag("td");
  379. var a = this.constructTag("a", {
  380. href : '#',
  381. name : 'btnScript',
  382. 'class' : 'hide link var',
  383. title : '常用脚本',
  384. onclick : "__DataTemplate__.selectScript(this,true)"
  385. }, "常用脚本");
  386. var vaInput = {};
  387. if (vf == 1) {
  388. vaInput = this.constructTag("input", {
  389. name : "va",
  390. type : "text",
  391. 'class' : "hide",
  392. readonly : "readonly"
  393. });
  394. } else if (vf == 2) {
  395. vaInput = this.constructTag("input", {
  396. name : 'va',
  397. type : 'text'
  398. });
  399. } else if (vf == 3) {
  400. vaInput = this.constructTag("textarea", {
  401. name : 'va'
  402. });
  403. a.show();
  404. }else if (vf == 5) {
  405. vaInput = this.constructTag("input", {
  406. name : "va",
  407. 'class' : "hide",
  408. });
  409. }else {
  410. vaInput = this.constructTag("select", {
  411. name : "va"
  412. });
  413. var parameters = this.getParameters();
  414. for (var i = 0; i < parameters.length; i++) {
  415. p = parameters[i];
  416. vaInput.append(this.constructTag("option", {
  417. value : p.na
  418. }, p.cm + "(" + p.na + ")"));
  419. }
  420. }
  421. vaInput.val(va);
  422. vaTd.append(a);
  423. vaTd.append(vaInput);
  424. // 管理
  425. var manageTd = this.constructTag("td");
  426. var moveupA = this.constructTag("a", {
  427. href : "#",
  428. 'class' : "link moveup",
  429. onclick : '__DataTemplate__.moveTr(this,true)'
  430. }, "");
  431. var movedownA = this.constructTag("a", {
  432. href : "#",
  433. 'class' : "link movedown",
  434. onclick : '__DataTemplate__.moveTr(this,false)'
  435. }, "");
  436. var deleteA = this.constructTag("a", {
  437. href : "#",
  438. 'class' : "link del",
  439. onclick : '__DataTemplate__.delTr(this)'
  440. }, "");
  441. manageTd.append(moveupA).append(movedownA).append(deleteA);
  442. var tr = this.constructTag("tr");
  443. tr.append(naTd).append(cmTd).append(ctTd).append(opTd)
  444. .append(vfTd).append(vaTd).append(manageTd);
  445. return tr;
  446. },
  447. // TODO
  448. getCtSelect : function(ctSelect, ct, ty) {
  449. var _self = this;
  450. if (ty == 'date') {
  451. ctSelect.append(_self.constructOption(ct, '15', '日期控件'));
  452. } else {
  453. $(controlList).each(function(i, d) {
  454. switch (d.key) {
  455. case '1' :
  456. case '2' :
  457. case '9' :
  458. case '10' :
  459. case '16' :
  460. case '21' :
  461. ctSelect
  462. .append(_self.constructOption(ct, '1', d.value));
  463. break;
  464. default :
  465. ctSelect.append(_self.constructOption(ct, d.key,
  466. d.value));
  467. break;
  468. }
  469. });
  470. }
  471. return ctSelect;
  472. },
  473. getOpSelect : function(opSelect, op, ty) {
  474. switch (ty) {
  475. case 'varchar' :
  476. opSelect.append(this.constructOption(op, "1", "="));
  477. opSelect.append(this.constructOption(op, "2", "!="));
  478. opSelect.append(this.constructOption(op, "3", "like"));
  479. //opSelect.append(this.constructOption(op, "4", "左like"));
  480. //opSelect.append(this.constructOption(op, "5", "右like"));
  481. break;
  482. case 'number' :
  483. case 'int' :
  484. opSelect.append(this.constructOption(op, "1", "="));
  485. opSelect.append(this.constructOption(op, "2", ">"));
  486. opSelect.append(this.constructOption(op, "3", "<"));
  487. opSelect.append(this.constructOption(op, "4", ">="));
  488. opSelect.append(this.constructOption(op, "5", "<="));
  489. break;
  490. case 'date' :
  491. opSelect.append(this.constructOption(op, "6", "日期范围"));
  492. opSelect.append(this.constructOption(op, "1", "="));
  493. opSelect.append(this.constructOption(op, "2", ">"));
  494. opSelect.append(this.constructOption(op, "3", "<"));
  495. opSelect.append(this.constructOption(op, "4", ">="));
  496. opSelect.append(this.constructOption(op, "5", "<="));
  497. break;
  498. default :
  499. opSelect.append(this.constructOption(op, "1", "="));
  500. opSelect.append(this.constructOption(op, "2", ">"));
  501. opSelect.append(this.constructOption(op, "3", "<"));
  502. opSelect.append(this.constructOption(op, "4", ">="));
  503. opSelect.append(this.constructOption(op, "5", "<="));
  504. }
  505. return opSelect;
  506. },
  507. /**
  508. * 构造选项
  509. */
  510. constructOption : function(cond1, cond2, text) {
  511. if (!text)
  512. text = cond2;
  513. var option = this.constructTag("option", {
  514. value : cond2
  515. }, text);
  516. if (cond1 == cond2)
  517. option.attr("selected", "selected");
  518. return option;
  519. },
  520. /**
  521. * 值来源更改事件处理
  522. */
  523. selectValueFrom : function(obj) {
  524. var tr = $(obj).closest("tr");
  525. var a = tr.find("a:[name='btnScript']");
  526. a.hide();
  527. var vf = $(obj).val();
  528. var valueInput;
  529. if (vf == 1) {
  530. valueInput = this.constructTag("input", {
  531. name : 'va',
  532. type : "text",
  533. 'class' : "hide",
  534. readonly : "readonly"
  535. });
  536. } else if (vf == 2) {
  537. valueInput = this.constructTag("input", {
  538. name : 'va',
  539. type : "text"
  540. });
  541. } else if (vf == 3) {
  542. a.show();
  543. valueInput = this.constructTag("textarea", {
  544. name : "va"
  545. });
  546. } else {
  547. valueInput = this.constructTag("select", {
  548. name : "va"
  549. });
  550. var parameters = this.getParameters();
  551. for (var i = 0; i < parameters.length; i++) {
  552. var p = parameters[i];
  553. valueInput.append(this.constructTag("option", {
  554. value : p.na
  555. }, p.cm + "(" + p.na + ")"));
  556. }
  557. }
  558. tr.find("[name='va']").replaceWith(valueInput);
  559. },
  560. /**
  561. * 取得参数设置
  562. */
  563. getParameterSetting : function() {
  564. var setting = {
  565. fieldSetting : new Array(),
  566. conditionField : new Array(),
  567. parameters : new Array()
  568. };
  569. // get field setting
  570. // setting.fieldSetting= getFields();
  571. // 取条件字段
  572. // var conditions=getConditions();
  573. // setting.conditionField=conditions;
  574. // //取自定义变量
  575. // var parameters=getParameters();
  576. // setting.parameters=parameters;
  577. return setting;
  578. },
  579. /**
  580. * 构造标签
  581. */
  582. constructTag : function(name, props, text) {
  583. var tag = $("<" + name + "></" + name + ">");
  584. if (props) {
  585. for (var key in props) {
  586. tag.attr(key, props[key]);
  587. }
  588. }
  589. if (text) {
  590. tag.text(text);
  591. }
  592. return tag;
  593. },
  594. /**
  595. * 返回查询条件
  596. *
  597. * @param {}
  598. * type
  599. * @param {}
  600. * op
  601. */
  602. getQueryType : function(type, op) {
  603. var qt = "S";
  604. switch (type) {
  605. case 'varchar' :
  606. if (op) {
  607. switch (op) {
  608. case 1 :
  609. case 2 :
  610. qt = 'S';
  611. break
  612. case 3 :
  613. qt = 'SL';
  614. break
  615. case 4 :
  616. qt = 'SLL';
  617. break
  618. case 5 :
  619. qt = 'SLR';
  620. break
  621. default :
  622. qt = 'S';
  623. break
  624. }
  625. }
  626. break;
  627. case 'number' :
  628. qt = 'L';
  629. break;
  630. case 'int' :
  631. qt = 'N';
  632. break;
  633. case 'date' :
  634. if (op == 6)
  635. qt = 'DR';
  636. else
  637. qt = 'DL';
  638. break;
  639. default :
  640. qt = 'S';
  641. break;
  642. }
  643. return qt;
  644. },
  645. // =====================排序==============================================================================
  646. /**
  647. * 初始化排序
  648. */
  649. initSortField : function() {
  650. var tr = $($("#sortTemplate .table-detail tr")[0]).clone(true, true);
  651. var sortFieldVal = $("#sortField").val();
  652. if ($.isEmpty(sortFieldVal))
  653. return;
  654. var sortField = $.parseJSON(sortFieldVal);
  655. for (var i = 0, c; c = sortField[i++];) {
  656. try {
  657. $("[var='name']", tr).html(c.name);
  658. $("[var='desc']", tr).html(c.desc);
  659. $("[var='source']", tr).val(c.source);
  660. // 修复jquery clone的下拉赋值的bug。
  661. $("[var='sort']", tr).val(c.sort);;
  662. } catch (e) {
  663. }
  664. var tr1 = tr.clone(true, true);
  665. $("#sortTbl tbody").append(tr1);
  666. }
  667. },
  668. /**
  669. * 选择排序
  670. *
  671. * @param {}
  672. * _self
  673. */
  674. selectSort : function(_self) {
  675. var tr = $($("#sortTemplate .table-detail tr")[0]).clone(true, true);
  676. $("#sort-columnsTbl input:[name='select']:checked").each(function() {
  677. var me = $(this), name = me.attr("fieldname"), desc = me
  678. .attr("fielddesc");
  679. var obj = $('#sortTbl');
  680. // 查找该字段是否存在
  681. if (_self.isExistName(obj,'name',name)) {
  682. $("[var='name']", tr).html(name);
  683. $("[var='desc']", tr).html(desc);
  684. var tr1 = tr.clone(true, true);
  685. $("#sortTbl tbody").append(tr1);
  686. }
  687. });
  688. },
  689. /**
  690. * 判断选择是否存在
  691. */
  692. isExistName : function(obj,o,name) {
  693. var rtn = true;
  694. obj.find("[var='"+o+"']").each(function() {
  695. var me = $(this), n = me.html();
  696. if (n == name) {
  697. rtn = false;
  698. return true;
  699. }
  700. });
  701. return rtn;
  702. },
  703. // =====================管理列==============================================================================
  704. /**
  705. * 初始化管理
  706. */
  707. initManageField : function() {
  708. this.handChange('#manageTbl');
  709. this.handClick('#manageTbl');
  710. this.handSelect('#manageTbl');
  711. var tr = $($("#manageTemplate .table-detail tr")[0]).clone(true, true);
  712. var manageFieldVal = $("#manageField").val();
  713. if ($.isEmpty(manageFieldVal))
  714. return;
  715. var manageField = $.parseJSON(manageFieldVal);
  716. var sb = new StringBuffer(),
  717. manageRight = $("[var='manageRight']", tr),
  718. hideFieldRightEl = $('<td var="manageRight" class="hidden"></td>');
  719. for (var i = 0, c; c = manageField[i++];) {
  720. $("input[var='desc']", tr).val(c.desc);
  721. $("select[var='name']", tr).val(c.name);
  722. for (var j = 0, k; k = c.right[j++];) {
  723. var rightHtml = this.getHtmlTd(k);
  724. if(!k.srid)
  725. manageRight.html(rightHtml);
  726. else{
  727. hideFieldRightEl.html(rightHtml);
  728. manageRight.after(hideFieldRightEl);
  729. }
  730. }
  731. var tr1 = tr.clone(true, true);
  732. $("#manageTbl tbody").append(tr1);
  733. }
  734. },
  735. addManage : function() {
  736. var tr = $($("#manageTemplate .table-detail tr")[0]).clone(true, true);
  737. var rightHtml = this.getHtmlTd({type:"none"});
  738. $("[var='manageRight']", tr).html(rightHtml);
  739. $("#manageTbl tbody").append(tr);
  740. },
  741. delManage : function() {
  742. this.delSelectTr("manageTbl");
  743. },
  744. // =====================过滤条件==============================================================================
  745. /**
  746. * 初始化过滤条件
  747. */
  748. initFilter : function() {
  749. this.handChange('#filterTbl');
  750. this.handClick('#filterTbl');
  751. var tr = $($("#filterTemplate .table-detail tr")[0]).clone(true, true);
  752. var filterFieldVal = $("#filterField").val();
  753. if ($.isEmpty(filterFieldVal))
  754. return;
  755. var filterField = $.parseJSON(filterFieldVal);
  756. var sb = new StringBuffer();
  757. for (var i = 0, c; c = filterField[i++];) {
  758. var filter = {};
  759. filter.name = c.name;
  760. filter.key = c.key;
  761. filter.type = c.type;
  762. filter.condition = c.condition;
  763. filter.right = c.right;
  764. this.addFilterTr(tr, filter)
  765. }
  766. },
  767. /**
  768. * 增加过滤行的tr
  769. *
  770. * @param {}
  771. * tr
  772. * @param {}
  773. * conf
  774. */
  775. addFilterTr : function(tr, conf) {
  776. var name = conf.name, key = conf.key, type = conf.type,condition = conf.condition, right = conf.right;
  777. if(condition&& typeof condition =="object")
  778. condition = JSON.stringify(condition);
  779. if(typeof right == "object" && !right[0])
  780. right = [right];
  781. $("[var='name']", tr).html(name);
  782. $("[var='key']", tr).html(key);
  783. $("[var='type']", tr).val(type);
  784. $("[var='typeshow']", tr).html(type==2?'SQL':'条件脚本');
  785. $("[var='condition']", tr).val(condition);
  786. var filterRightEl = $("[var='filterRight']", tr),
  787. hideFieldRightEl = $('<td var="filterRight" class="hidden"></td>');
  788. for (var j = 0, k; k = right[j++];) {
  789. var rightHtml = this.getHtmlTd(k);
  790. if(!k.srid)
  791. filterRightEl.html(rightHtml);
  792. else{
  793. hideFieldRightEl.html(rightHtml);
  794. filterRightEl.after(hideFieldRightEl);
  795. }
  796. }
  797. var tr1 = tr.clone(true, true);
  798. $("#filterTbl tbody").append(tr1);
  799. },
  800. /**
  801. * 增加过滤条件
  802. */
  803. addFilter : function(conf) {
  804. var _self = this, tableId = $('#tableId').val(), source = $('#source')
  805. .val(), tr = $($("#filterTemplate .table-detail tr")[0]).clone(
  806. true, true);
  807. var right = {};
  808. right.type = 'none';
  809. right.id = '';
  810. right.name = '';
  811. right.script = '';
  812. this.filterDialog({
  813. tableId : tableId,
  814. source : source,
  815. callback : function(rtn) {
  816. if (rtn) {
  817. var filter = {},
  818. type= rtn.type,
  819. condition = (type==2?rtn.condition:JSON2.stringify(rtn.condition));
  820. filter.name = rtn.name;
  821. filter.key = rtn.key;
  822. filter.type = type;
  823. filter.condition = condition;
  824. filter.right = right;
  825. _self.addFilterTr(tr, filter);
  826. }
  827. }
  828. });
  829. },
  830. /**
  831. * 过滤的窗口
  832. *
  833. * @param {}
  834. * conf
  835. */
  836. filterDialog : function(conf) {
  837. var dialogWidth = 750;
  838. var dialogHeight = 500;
  839. conf = $.extend({}, {
  840. dialogWidth : dialogWidth,
  841. dialogHeight : dialogHeight,
  842. help : 0,
  843. status : 0,
  844. scroll : 0,
  845. center : 1
  846. }, conf);
  847. var winArgs = "dialogWidth=" + conf.dialogWidth + "px;dialogHeight="
  848. + conf.dialogHeight + "px;help=" + conf.help + ";status="
  849. + conf.status + ";scroll=" + conf.scroll + ";center="
  850. + conf.center;
  851. var url = __ctx
  852. + "/platform/form/bpmDataTemplate/filterDialog.ht?tableId="
  853. + conf.tableId;
  854. url = url.getNewUrl();
  855. /*var rtn = window.showModalDialog(url, conf, winArgs);
  856. if (rtn && conf.callback) {
  857. conf.callback.call(this, rtn);
  858. }*/
  859. /*KILLDIALOG*/
  860. var that =this;
  861. DialogUtil.open({
  862. height:conf.dialogHeight,
  863. width: conf.dialogWidth,
  864. title : '过滤的窗口',
  865. url: url,
  866. isResize: true,
  867. //自定义参数
  868. conf: conf,
  869. sucCall:function(rtn){
  870. if (rtn && conf.callback) {
  871. conf.callback.call(that, rtn);
  872. }
  873. }
  874. });
  875. },
  876. /**
  877. * 删除过滤条件
  878. */
  879. delFilter : function() {
  880. this.delSelectTr("filterTbl");
  881. },
  882. /**
  883. * 编辑过滤条件
  884. */
  885. editFilter : function(obj) {
  886. var tr = $(obj).parents("tr"), filter = {};
  887. filter.name = $("[var='name']", tr).html();
  888. filter.key = $("[var='key']", tr).html();
  889. filter.type = $("[var='type']", tr).val();
  890. filter.condition = $("[var='condition']", tr).val();
  891. this.editFilterDialog(tr, filter)
  892. },
  893. /**
  894. * 编辑过滤条件窗口
  895. *
  896. * @param {}
  897. * tr
  898. * @param {}
  899. * filter
  900. */
  901. editFilterDialog : function(tr, filter) {
  902. var _self = this,
  903. tableId = $('#tableId').val(),
  904. source = $('#source').val();
  905. this.filterDialog({
  906. tableId : tableId,
  907. source : source,
  908. filter : filter,
  909. callback : function(rtn) {
  910. if (rtn) {
  911. var type =rtn.type;
  912. var condition = (type==2?rtn.condition:JSON2.stringify(rtn.condition));
  913. $("[var='name']", tr).html(rtn.name);
  914. $("[var='key']", tr).html(rtn.key);
  915. $("[var='type']", tr).val(type);
  916. $("[var='typeshow']", tr).html(type==2?'SQL':'条件脚本');
  917. $("[var='condition']", tr).val(condition);
  918. }
  919. }
  920. });
  921. },
  922. // =====================通用的处理方法==============================================================================
  923. /**
  924. * 切换分页
  925. */
  926. switchNeedPage : function(obj) {
  927. var me = $(obj), pagSize = $("#spanPageSize");
  928. var isNeedPage = me.val();
  929. if (isNeedPage == 1) {
  930. pagSize.show();
  931. } else {
  932. pagSize.hide();
  933. }
  934. },
  935. /**
  936. * 删除TR
  937. */
  938. delTr : function(obj) {
  939. $(obj).closest("tr").remove();
  940. },
  941. /**
  942. * 删除选择的tr
  943. *
  944. * @param {}
  945. * obj 选择的tr的ID
  946. */
  947. delSelectTr : function(obj) {
  948. var _self = this;
  949. $("#" + obj + " input:[name='select']:checked").each(function() {
  950. _self.delTr(this);
  951. });
  952. },
  953. /**
  954. * 上下移动
  955. *
  956. * @param {}
  957. * obj
  958. * @param {}
  959. * isUp 是否上移
  960. */
  961. moveTr : function(obj, isUp) {
  962. var thisTr = $(obj).parents("tr");
  963. if (isUp) {
  964. var prevTr = $(thisTr).prev();
  965. if (prevTr) {
  966. thisTr.insertBefore(prevTr);
  967. }
  968. } else {
  969. var nextTr = $(thisTr).next();
  970. if (nextTr) {
  971. thisTr.insertAfter(nextTr);
  972. }
  973. }
  974. },
  975. /**
  976. * 选择脚本
  977. *
  978. * @param {}
  979. * obj
  980. */
  981. selectScript : function(obj, isNext) {
  982. var linkObj = $(obj), txtObj = {};
  983. if (isNext)
  984. txtObj = linkObj.next()[0];
  985. else
  986. txtObj = linkObj.prev()[0];
  987. if (txtObj) {
  988. ScriptDialog({
  989. callback : function(script) {
  990. $.insertText(txtObj, script);
  991. }
  992. });
  993. }
  994. },
  995. /**
  996. * 处理选择字段赋值
  997. *
  998. * @param {}
  999. * obj
  1000. */
  1001. handSelect : function(obj) {
  1002. $(obj).delegate("select[var='name']", "change", function() {
  1003. var me = $(this), text = me.children('option:selected').text();
  1004. tr = me.closest("tr");
  1005. var desc = $("[var='desc']", tr);
  1006. desc.val(text);
  1007. });
  1008. }
  1009. };
  1010. var __DataTemplate__ = new DataTemplateEdit();// 默认生成一个对象
  1011. /**
  1012. * 控件类型。 16是隐藏域 4 用户单选,8,用户多选, 17,角色单选,5,角色多选, 18,组织单选,6,组织多选 19,岗位单选,7,岗位多选
  1013. *
  1014. */
  1015. var controlList = [{
  1016. key : '1',
  1017. value : '单行文本框'
  1018. }, {
  1019. key : '15',
  1020. value : '日期控件'
  1021. }, {
  1022. key : '3',
  1023. value : '数据字典'
  1024. }, {
  1025. key : '11',
  1026. value : '下拉选项'
  1027. }, {
  1028. key : '4',
  1029. value : '人员选择器(单选)'
  1030. }, {
  1031. key : '17',
  1032. value : '角色选择器(单选)'
  1033. }, {
  1034. key : '18',
  1035. value : '组织选择器(单选)'
  1036. }, {
  1037. key : '19',
  1038. value : '岗位选择器(单选)'
  1039. }];