SysTableManageEdit.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296
  1. /**
  2. *双击不选中文本
  3. */
  4. var clearSelection = function () {
  5. if(document.selection && document.selection.empty) {
  6. document.selection.empty();
  7. }
  8. else if(window.getSelection) {
  9. var sel = window.getSelection();
  10. sel.removeAllRanges();
  11. }
  12. };
  13. /**
  14. *切换不同过滤条件的界面
  15. */
  16. function switchConditionType(type){
  17. if(type==1){
  18. $(".condition-conds-build").show();
  19. $(".condition-conds-script").hide();
  20. $("#condition-columnsTbl th:nth-child(1),#condition-columnsTbl td:nth-child(1)").show();
  21. $("#condition-columnsTbl tbody tr").unbind("dblclick");
  22. $("#condition-columnsTbl tbody tr").qtip("destroy");
  23. }else{
  24. $(".condition-conds-build").hide();
  25. $(".condition-conds-script").show();
  26. $("#condition-columnsTbl th:nth-child(1),#condition-columnsTbl td:nth-child(1)").hide();
  27. $("#condition-columnsTbl tbody tr").dblclick(function(){
  28. var text=$(this).find("[name='naTd']").text();
  29. var pos=conditonScriptEditor.getCursor();
  30. conditonScriptEditor.replaceRange(text,pos);
  31. });
  32. if(conditonScriptEditor){
  33. setTimeout(function(){
  34. conditonScriptEditor.refresh();
  35. },0);
  36. }
  37. $("#condition-columnsTbl tbody tr").qtip({
  38. content:"双击插入到脚本中",
  39. position: {
  40. target: 'mouse',
  41. viewport: $(window), // Keep it on-screen at all times if possible
  42. adjust: {
  43. x: 10, y: 10
  44. }
  45. }
  46. });
  47. }
  48. }
  49. /**
  50. * 选中行或反选
  51. * @return void
  52. **/
  53. function selectTr(){
  54. $("tr.odd,tr.even").each(function(){
  55. $(this).bind("mousedown",function(event){
  56. if(event.target.tagName=="TD"){
  57. var strFilter='input:checkbox[class="pk"],input:radio[class="pk"]';
  58. var obj=$(this).find(strFilter);
  59. if(obj.length==1){
  60. var state=obj.attr("checked");
  61. obj.attr("checked",!state);
  62. }
  63. }
  64. });
  65. });
  66. }
  67. /**
  68. *验证设置
  69. *@return void
  70. */
  71. function validate(){
  72. var tabid = tabcomp.getSelectedTabItemID();
  73. //validate base setting
  74. var valid = validateBaseSetting();
  75. if(valid.status!=0){
  76. if(tabid!="baseSetting"){
  77. pgmswitchta=true;
  78. tabcomp.selectTabItem("baseSetting");
  79. }
  80. if(valid.message){
  81. $.ligerDialog.error(valid.message,"Error");
  82. }
  83. return false;
  84. }
  85. //validate display setting
  86. valid = validateDisplaySetting();
  87. if(valid.status!=0){
  88. if(tabid!="displaySetting"){
  89. pgmswitchta=true;
  90. tabcomp.selectTabItem("displaySetting");
  91. }
  92. if(valid.message){
  93. $.ligerDialog.error(valid.message,"Error");
  94. }
  95. return false;
  96. }
  97. var valid = validateParameterSetting();
  98. if(valid.status!=0){
  99. if(tabid!="parameterSetting"){
  100. pgmswitchta=true;
  101. tabcomp.selectTabItem("parameterSetting");
  102. }
  103. if(valid.message){
  104. $.ligerDialog.error(valid.message,"Error");
  105. }
  106. return false;
  107. }
  108. valid = validateConditionSetting();
  109. if(valid.status!=0){
  110. if(tabid!="conditionSetting"){
  111. pgmswitchta=true;
  112. tabcomp.selectTabItem("conditionSetting");
  113. }
  114. if(valid.message){
  115. $.ligerDialog.error(valid.message,"Error");
  116. }
  117. return false;
  118. }
  119. return true;
  120. }
  121. /**
  122. * 验证基本设置
  123. * @return Object resultMsg={status,message}
  124. * resultMsg.status, 0-无错;1-有错
  125. * resultMsg.message, 出错消息
  126. */
  127. function validateBaseSetting(){
  128. var resultMsg={
  129. status:0,
  130. message:""
  131. };
  132. var frm=$('#sysTableManageForm').form();
  133. if(!frm.valid()){
  134. resultMsg.status=1;
  135. return resultMsg;
  136. }
  137. var dsAlias=$("#dsAlias").val();
  138. if(!dsAlias){
  139. resultMsg.status=2;
  140. resultMsg.message="请选择数据源!";
  141. return resultMsg;
  142. }
  143. var objName=$("#objName").val();
  144. if(!objName){
  145. resultMsg.status=3;
  146. resultMsg.message="请选择表/视图!";
  147. return resultMsg;
  148. }
  149. var objName=$("#templateId").val();
  150. if(!objName){
  151. resultMsg.status=4;
  152. resultMsg.message="请选择数据模板!";
  153. return resultMsg;
  154. }
  155. return resultMsg;
  156. }
  157. /**
  158. * 验证基本设置
  159. * @return Object resultMsg={status,message}
  160. * resultMsg.status, 0-无错;1-有错
  161. * resultMsg.message, 出错消息
  162. */
  163. function validateDisplaySetting(){
  164. var resultMsg={
  165. status:0,
  166. message:""
  167. };
  168. //取得参数
  169. var templen =$("#columnsTbl tbody [name='ds']:checked").length;
  170. if(templen<1){
  171. resultMsg.status=1;
  172. resultMsg.message="请选择显示字段!";
  173. }
  174. return resultMsg;
  175. }
  176. /**
  177. * 验证基本设置
  178. * @return Object resultMsg={status,message}
  179. * resultMsg.status, 0-无错;1-有错
  180. * resultMsg.message, 出错消息
  181. */
  182. function validateParameterSetting(){
  183. var resultMsg={
  184. status:0,
  185. message:""
  186. };
  187. var nas=[];
  188. var valid=0;
  189. var msg;
  190. $("#parameters-table tbody tr").each(function(){
  191. var tr=$(this);
  192. var na=tr.find("[name='na']").val();
  193. var cm=tr.find("[name='cm']").val()||cm;
  194. var ty=tr.find("[name='ty']").val();
  195. var vf=tr.find("[name='vf']").val();
  196. var va=tr.find("[name='va']").val();
  197. if (!/^[a-zA-Z_]{1}[\w\d_]*$/.test(na)) {
  198. resultMsg.status=1;
  199. resultMsg.message="变量名称必须由字母、下划线和数字组成,并由字母或下划线开头!";
  200. return false;
  201. }
  202. if($.inArray(na,nas)!=-1){
  203. resultMsg.status=2;
  204. resultMsg.message="变量名称不能重复!";
  205. return false;
  206. }
  207. nas.push(na);
  208. if(vf!=4&&vf!=1){
  209. if(!va){
  210. resultMsg.status=3;
  211. resultMsg.message="变量["+na+"<"+cm+">]的值不能为空!";
  212. return false;
  213. }
  214. }
  215. });
  216. return resultMsg;
  217. }
  218. /**
  219. * 验证基本设置
  220. * @return Object resultMsg={status,message}
  221. * resultMsg.status, 0-无错;1-有错
  222. * resultMsg.message, 出错消息
  223. */
  224. function validateConditionSetting(){
  225. var resultMsg={
  226. status:0,
  227. message:""
  228. };
  229. var conditionType=$("[name=conditionType]").val();
  230. if(conditionType==2){
  231. return resultMsg;
  232. }
  233. $("#conditionTbl tbody tr").each(function(){
  234. var tr=$(this);
  235. var field=$.parseJSON(tr.find("input[type='hidden']").val());
  236. var vf=tr.find("[name='vf']").val();
  237. var cm=tr.find("[name='cm']").val();
  238. var va=tr.find("[name='va']").val();
  239. if(vf!=1){
  240. if(!va){
  241. resultMsg.status=1;
  242. resultMsg.message="条件["+field.na+"<"+cm+">]的值不能为空!";
  243. return false;
  244. }
  245. }
  246. });
  247. return resultMsg;
  248. }
  249. /**
  250. * 自定义外部表单并提交
  251. * @return void
  252. */
  253. function customFormSubmit(options){
  254. var id=$("#id").val();
  255. var name=$("#name").val();
  256. var alias=$("#alias").val();
  257. var needPage=$("input[name='needPage']:checked").val();
  258. var pageSize=$("#pageSize").val();
  259. var isTable=$("#isTable").val();
  260. var objName=$("#objName").val();
  261. var displayField=$("#displayField").val();
  262. var conditionField=$("#conditionField").val();
  263. var dsName=$("#dsName").val();
  264. var dsAlias=$("#dsAlias").val();
  265. var dspTemplate="";
  266. var editable=$("input[name='editable']:checked").val();
  267. var conditionType=$("input[name='conditionType']:checked").val();
  268. var parameters=$("#parameters").val();
  269. var templateId=$("#templateId").val();
  270. var json={
  271. id:id,
  272. name:name,
  273. alias:alias,
  274. needPage:needPage,
  275. pageSize:pageSize,
  276. isTable:isTable,
  277. objName :objName,
  278. displayField:displayField ,
  279. conditionField:conditionField ,
  280. dsName:dsName ,
  281. dsAlias:dsAlias,
  282. dspTemplate:dspTemplate,
  283. editable:editable,
  284. conditionType:conditionType,
  285. parameters:parameters,
  286. templateId:templateId
  287. };
  288. var form = $('<form method="post" action="save.ht"></form>');
  289. var input = $("<input type='hidden' name='json'/>");
  290. input.val(JSON2.stringify(json));
  291. form.append(input);
  292. form.ajaxForm(options);
  293. form.submit();
  294. }
  295. /**
  296. *选择表或视图
  297. */
  298. function selectTable(){
  299. var dsName=$("#dsAlias").val();
  300. if(typeof(dsName)=='undefine' || dsName==""){
  301. $.ligerDialog.warn("请选择数据源!","提示信息");
  302. return false;
  303. }
  304. var url=__ctx +"/platform/system/sysTableManage/selectTable.ht?dsName="+dsName;
  305. var winArgs="dialogWidth=800px;dialogHeight=600px;help=0;status=0;scroll=1;center=1;resizable=1;";
  306. url=url.getNewUrl();
  307. //TODO 找不到页面
  308. var rtn=window.showModalDialog(url,{},winArgs);
  309. if(rtn){
  310. $("#objName").val(rtn.tableName);
  311. $("#isTable").val(rtn.tableType=='table'?1:0);
  312. resetParameterSetting();
  313. var fields = getTableColumns(dsName,rtn.tableName,rtn.tableType);
  314. initSetting({fields:fields});
  315. }
  316. }
  317. /**
  318. *获取表或视图的列
  319. */
  320. function getTableColumns(dsName,tableName,tableType){
  321. var params={
  322. dsName:dsName,
  323. tableName:tableName,
  324. tableType:tableType
  325. };
  326. var columns;
  327. var url=__ctx +"/platform/system/sysTableManage/getTableColumns.ht";
  328. $.ajax({
  329. url:url,
  330. data:params,
  331. async:false
  332. }).done(function(data){
  333. columns=data.columns;
  334. });
  335. return columns;
  336. }
  337. /**
  338. *初始化自定义表管理字段设置
  339. */
  340. function initSetting(settings,conditionType){
  341. var fields=settings.fields;
  342. var conds=settings.conds;
  343. var params=settings.params;
  344. initColumns(fields);
  345. initConditionSelCols(fields);
  346. $("#conditionTbl tbody").html("");
  347. if(params){
  348. initParameters(params);
  349. }
  350. if(conds){
  351. if(conditionType==1){
  352. initConditionFields(conds);
  353. }
  354. }
  355. jQuery.highlightTableRows();
  356. //选中行或反选
  357. selectTr();
  358. }
  359. /**
  360. *分页 不分页 切换
  361. */
  362. function switchNeedPage(){
  363. var isNeedPage=$("input:radio[name='needPage']:checked").val();
  364. if(isNeedPage>0){
  365. $("#spanPageSize").show();
  366. }
  367. else{
  368. $("#spanPageSize").hide();
  369. }
  370. }
  371. /**
  372. *从左边选择列作为条件
  373. */
  374. function selectCondition(){
  375. var conditionType=$("input[name='conditionType']:checked").val();
  376. $("#condition-columnsTbl input:[name='select']:checked").each(function(){
  377. var field=$.parseJSON($(this).closest("tr").find("input[type='hidden']").val());
  378. var na = field.na;
  379. var ty = field.ty;
  380. var cm = field.cm;
  381. var condition={
  382. jt:"AND",
  383. na:na,
  384. ty:ty,
  385. op:'=',
  386. cm:cm,
  387. va:"",
  388. vf:2
  389. };
  390. var tr = constructConditionTr(condition);
  391. $("#conditionTbl tbody").append(tr);
  392. });
  393. }
  394. function showResponse(responseText) {
  395. var obj = new com.hotent.form.ResultMessage(responseText);
  396. if (obj.isSuccess()) {
  397. $.ligerDialog.confirm( obj.getMessage()+",是否继续操作","提示信息", function(rtn) {
  398. if(rtn){
  399. this.close();
  400. }else{
  401. window.location.href = __ctx+"/platform/system/sysTableManage/list.ht";
  402. }
  403. });
  404. } else {
  405. $.ligerDialog.error(obj.getMessage(),"提示信息");
  406. }
  407. }
  408. /**
  409. *数据源改变事件处理
  410. */
  411. function dsAliasOnChangeHandler(obj){
  412. $("#dsName").val('');
  413. var dsAlias = $(obj).val();
  414. if(dsAlias){
  415. var dsName = $("#dsAlias option[value='"+dsAlias+"']").text();
  416. $("#dsName").val(dsName);
  417. }
  418. resetSelectTable();
  419. }
  420. /**
  421. *重置选择的表
  422. */
  423. function resetSelectTable(){
  424. $("#objName").val('');
  425. $("#isTable").val('');
  426. resetParameterSetting();
  427. }
  428. /**
  429. *重置参数设置
  430. */
  431. function resetParameterSetting(){
  432. $("#conditionTbl tbody").html("");
  433. $("#columnsTbl tbody").html("");
  434. }
  435. /**
  436. *初始化条件字段
  437. */
  438. function initConditionFields(confitionFields){
  439. $("#conditionTbl tbody").html("");
  440. for(var i=0;i<confitionFields.length;i++){
  441. var field=confitionFields[i];
  442. var jt=field.jt;
  443. var na = field.na;
  444. var ty=field.ty;
  445. var cm=field.cm;
  446. var op=field.op;
  447. var vf=field.vf;
  448. var va=field.va;
  449. var condition={
  450. jt:jt,
  451. na:na,
  452. ty:ty,
  453. cm:cm,
  454. op:op,
  455. vf:vf,
  456. va:va
  457. };
  458. var tr = constructConditionTr(condition);
  459. $("#conditionTbl tbody").append(tr);
  460. }
  461. }
  462. /**
  463. *构造条件的列
  464. */
  465. function constructConditionTr(condition){
  466. var jt=condition.jt;
  467. var ty=condition.ty;
  468. var na=condition.na;
  469. var cm=condition.cm;
  470. var op=condition.op;
  471. var va=condition.va;
  472. var vf=condition.vf;
  473. var constructOption=function(cond1,cond2,text){
  474. if(!text){
  475. text=cond2;
  476. }
  477. var option=constructTag("option",{value:cond2},text);
  478. if(cond1==cond2){
  479. option.attr("selected","selected");
  480. }
  481. return option;
  482. };
  483. //联合类型
  484. var jtTd =constructTag("td");
  485. var jtSelect =constructTag("select",{name:"jt"}); //$("<select name='conditionJoinType'></select>");
  486. jtSelect.append(constructOption(jt,"AND"));
  487. jtSelect.append(constructOption(jt,"OR"));
  488. jtTd.append(jtSelect);
  489. var hiddenInput=constructTag("input",{type:"hidden",value:JSON2.stringify(condition)});
  490. jtTd.append(hiddenInput);
  491. //名称
  492. var naTd = constructTag("td",{},na);
  493. //条件
  494. var opTd=constructTag("td");
  495. var opSelect =constructTag("select",{name:"op",style:"width:70px;"});
  496. switch(ty){
  497. case 'varchar':
  498. opSelect.append(constructOption(op,"="));
  499. opSelect.append(constructOption(op,"likeEnd"));
  500. opSelect.append(constructOption(op,"like"));
  501. // opSelect.append(constructOption(op,"in"));
  502. break;
  503. case 'number':
  504. opSelect.append(constructOption(op,"="));
  505. opSelect.append(constructOption(op,">"));
  506. opSelect.append(constructOption(op,"<"));
  507. opSelect.append(constructOption(op,">="));
  508. opSelect.append(constructOption(op,"<="));
  509. // opSelect.append(constructOption(op,"in"));
  510. break;
  511. case 'int':
  512. opSelect.append(constructOption(op,"="));
  513. opSelect.append(constructOption(op,">"));
  514. opSelect.append(constructOption(op,"<"));
  515. opSelect.append(constructOption(op,">="));
  516. opSelect.append(constructOption(op,"<="));
  517. // opSelect.append(constructOption(op,"in"));
  518. break;
  519. default:
  520. opSelect.append(constructOption(op,"="));
  521. opSelect.append(constructOption(op,">="));
  522. opSelect.append(constructOption(op,"<="));
  523. // opSelect.append(constructOption(op,"in"));
  524. opSelect.append(constructOption(op,"between"));
  525. }
  526. opTd.append(opSelect);
  527. //注解
  528. var cmTd=constructTag("td");
  529. var cmInput=constructTag("input",{name:"cm",value:cm,type:"text",'class':"inputText"});
  530. cmTd.append(cmInput);
  531. //值来源
  532. var vfTd=constructTag("td");
  533. var vfSelect =constructTag("select",{name:"vf",onchange:"selectValueFrom(this)"});
  534. // vfSelect.append(constructOption(vf,1,"输入"));
  535. vfSelect.append(constructOption(vf,2,"固定值"));
  536. vfSelect.append(constructOption(vf,3,"脚本"));
  537. vfSelect.append(constructOption(vf,4,"变量"));
  538. vfTd.append(vfSelect);
  539. //值
  540. var vaTd=constructTag("td");
  541. var a=constructTag("a",{href:'#',name:'btnScript','class':'hide link var',title:'常用脚本',onclick:"selectScript(this)"},"常用脚本");
  542. var vaInput;
  543. if(vf==1){
  544. vaInput=constructTag("input",{name:"va",type:"text",'class':"hide",readonly:"readonly"});
  545. }else if(vf==2){
  546. vaInput=constructTag("input",{name:'va',type:'text'});
  547. }else if(vf==3){
  548. a.show();
  549. vaInput=constructTag("textarea",{name:'va'});
  550. }else{
  551. vaInput=constructTag("select",{name:"va"});
  552. var parameters=getParameters();
  553. for(var i=0;i<parameters.length;i++){
  554. p=parameters[i];
  555. vaInput.append(constructTag("option",{value:p.na},p.cm+"("+p.na+")"));
  556. }
  557. }
  558. vaInput.val(va);
  559. vaTd.append(a);
  560. vaTd.append(vaInput);
  561. //管理
  562. var manageTd=constructTag("td");
  563. var deleteA=constructTag("a",{href:"#",'class':"link del",onclick:'delConditionTr(this)'},"删除");
  564. manageTd.append(deleteA);
  565. tr=constructTag("tr");
  566. tr.append(jtTd);
  567. tr.append(naTd);
  568. tr.append(opTd);
  569. tr.append(cmTd);
  570. tr.append(vfTd);
  571. tr.append(vaTd);
  572. tr.append(manageTd);
  573. return tr;
  574. }
  575. /**
  576. *初始化数据列的表
  577. */
  578. function initColumns(fields){
  579. var columnsTbl = $("#columnsTbl tbody").html("");
  580. for(var i=0;i<fields.length;i++){
  581. var field=fields[i];
  582. var tr = constructColumnTr(field);
  583. if(i%2==0){
  584. tr.addClass("even");
  585. }else{
  586. tr.addClass("odd");
  587. }
  588. columnsTbl.append(tr);
  589. }
  590. }
  591. /**
  592. * 初始化供条件过滤页面选择的数据/视图数据列信息
  593. */
  594. function initConditionSelCols(fields){
  595. var columnsTbl = $("#condition-columnsTbl tbody").html("");
  596. for(var i=0;i<fields.length;i++){
  597. var field=fields[i];
  598. var tr = constructConditionSelColTr(field);
  599. if(i%2==0){
  600. tr.addClass("even");
  601. }else{
  602. tr.addClass("odd");
  603. }
  604. columnsTbl.append(tr);
  605. }
  606. }
  607. /**
  608. *构造字段设置的列的<tr>
  609. */
  610. function constructColumnTr(field){
  611. var ty = field.ty;
  612. var na = field.na;
  613. var cm = field.cm||na;
  614. var ds=false;
  615. if(typeof(field.ds)!='undefined'){
  616. ds = field.ds;
  617. }
  618. // td field name
  619. var nameTd = constructTag("td",{},na);
  620. var hiddenInput=constructTag("input",{type:"hidden"});
  621. hiddenInput.val(JSON2.stringify(field));
  622. nameTd.append(hiddenInput);
  623. var typeTd=constructTag("td",{},(ty||"").toUpperCase());
  624. // td field comment
  625. var commentTd=constructTag("td");
  626. var commentInput=constructTag("input",{name:"cm",value:cm,'class':"inputText"});
  627. commentTd.append(commentInput);
  628. // td column select checkedbox
  629. var displayTd =constructTag("td");
  630. var dsInput = constructTag("input",{name:"ds",type:"checkbox",'class':"pk"});
  631. if(ds){
  632. dsInput.attr("checked","checked");
  633. }
  634. displayTd.append(dsInput);
  635. //Tr
  636. var tr=constructTag("tr");
  637. tr.append(displayTd);
  638. tr.append(nameTd);
  639. tr.append(typeTd);
  640. tr.append(commentTd);
  641. return tr;
  642. }
  643. /**
  644. *构造过滤条件的字段设置的列的<tr>
  645. */
  646. function constructConditionSelColTr(field){
  647. var ty = field.ty;
  648. var na = field.na;
  649. var cm = field.cm||na;
  650. //td checkbox
  651. var selectTd = constructTag("td");
  652. var selectInput = constructTag("input",{name:"select",type:"checkbox",'class':"pk"});
  653. selectTd.append(selectInput);
  654. // td field name
  655. var nameTd = constructTag("td",{name:"naTd"},na);
  656. var hiddenInput=constructTag("input",{type:"hidden"});
  657. hiddenInput.val(JSON2.stringify(field));
  658. nameTd.append(hiddenInput);
  659. // td field type
  660. var typeTd=constructTag("td",{},(ty||"").toUpperCase());
  661. //Tr
  662. var tr=constructTag("tr");
  663. tr.append(selectTd);
  664. tr.append(nameTd);
  665. tr.append(typeTd);
  666. return tr;
  667. }
  668. /**
  669. *删除选择的条件所有的表格的行
  670. */
  671. function delConditionTr(obj){
  672. $(obj).closest("tr").remove();
  673. }
  674. /**
  675. * 取得参数设置
  676. */
  677. function getParameterSetting(){
  678. var setting={
  679. fieldSetting:new Array(),
  680. conditionField:new Array(),
  681. parameters:new Array()
  682. };
  683. //get field setting
  684. setting.fieldSetting=getFields();
  685. //取条件字段
  686. var conditions=getConditions();
  687. setting.conditionField=conditions;
  688. //取自定义变量
  689. var parameters=getParameters();
  690. setting.parameters=parameters;
  691. return setting;
  692. }
  693. /**
  694. *取显示字段设置
  695. */
  696. function getFields(){
  697. var fields=[];
  698. $("#columnsTbl tbody tr").each(function(){
  699. var tr=$(this);
  700. var fieldSetting=$.parseJSON(tr.find("input:[type='hidden']").val());
  701. var cm = tr.find("[name='cm']").val();
  702. var ds = tr.find("[name='ds']").is(":checked");
  703. fieldSetting.cm=cm;
  704. fieldSetting.ds=ds;
  705. fields.push(fieldSetting);
  706. });
  707. return fields;
  708. }
  709. /**
  710. *取条件设置
  711. */
  712. function getConditions(){
  713. var conditions=new Array();
  714. //取条件类型
  715. var conditonType=$("input[name='conditionType']:checked").val();
  716. //如果为建立类型
  717. if(conditonType==1){
  718. $("#conditionTbl tbody tr").each(function(){
  719. var tr=$(this);
  720. var field=$.parseJSON(tr.find("input[type='hidden']").val());
  721. var jt=tr.find("[name='jt']").val();
  722. var op =tr.find("[name='op']").val();
  723. var vf =parseInt(tr.find("[name='vf']").val());
  724. var va =tr.find("[name='va']").val();
  725. var cm =tr.find("[name='cm']").val();
  726. field.jt=jt;
  727. field.op=op;
  728. field.vf=vf;
  729. field.va=va;
  730. field.cm=cm;
  731. conditions.push(field);
  732. });
  733. return conditions;
  734. }else{//如果是脚本类型
  735. var script=$("#conditionScript").val();
  736. return script;
  737. }
  738. }
  739. /**
  740. *取自定义变量设置
  741. */
  742. function getParameters(){
  743. var parameters=[];
  744. $("#parameters-table tbody tr").each(function(){
  745. var tr=$(this);
  746. var na=tr.find("[name='na']").val();
  747. var cm=tr.find("[name='cm']").val()||na;
  748. var ty=tr.find("[name='ty']").val();
  749. var vf=tr.find("[name='vf']").val();
  750. var va=tr.find("[name='va']").val();
  751. var parameter={
  752. na:na,
  753. cm:cm,
  754. ty:ty,
  755. vf:vf,
  756. va:va
  757. };
  758. parameters.push(parameter);
  759. });
  760. return parameters;
  761. }
  762. /**
  763. *值来源更改事件处理
  764. */
  765. function selectValueFrom(obj){
  766. var tr = $(obj).closest("tr");
  767. var a = tr.find("a:[name='btnScript']");
  768. a.hide();
  769. var vf = $(obj).val();
  770. var valueInput;
  771. if(vf==1){
  772. valueInput=constructTag("input",{name:'a',type:"text",'class':"hide",readonly:"readonly"});
  773. }else if(vf==2){
  774. valueInput=constructTag("input",{name:'va',type:"text"});
  775. }else if(vf==3){
  776. a.show();
  777. valueInput=constructTag("textarea",{name:"va"});
  778. }else {
  779. valueInput=constructTag("select",{name:"va"});
  780. var parameters=getParameters();
  781. for(var i=0;i<parameters.length;i++){
  782. p=parameters[i];
  783. valueInput.append(constructTag("option",{value:p.na},p.cm+"("+p.na+")"));
  784. }
  785. }
  786. tr.find("[name='va']").replaceWith(valueInput);
  787. }
  788. /**
  789. *脚本选择
  790. */
  791. function selectScript(obj) {
  792. var linkObj=$(obj);
  793. var txtObj=linkObj.next()[0];
  794. ScriptDialog({
  795. callback : function(script) {
  796. $.insertText(txtObj,script);
  797. }
  798. });
  799. }
  800. /**
  801. *添加自定义参数Tr
  802. */
  803. function addParameter(){
  804. var parameter={
  805. na:"",
  806. cm:"",
  807. ty:"varchar",
  808. vf:1,
  809. va:""
  810. };
  811. var tr = constructParameterTr(parameter);
  812. $("#parameters-table").append(tr);
  813. }
  814. /**
  815. *添加自定义参数Tr
  816. */
  817. function constructParameterTr(parameter){
  818. var na=parameter.na;
  819. var cm=parameter.cm;
  820. var ty=parameter.ty;
  821. var vf=parameter.vf;
  822. var va=parameter.va;
  823. var constructOption=function(cond1,cond2,text){
  824. if(!text){
  825. text=cond2;
  826. }
  827. var option=constructTag("option",{value:cond2},text);
  828. if(cond1==cond2){
  829. option.attr("selected","selected");
  830. }
  831. return option;
  832. };
  833. var tr=constructTag("tr");
  834. var nameTd=constructTag("td");
  835. var nameInput=constructTag("input",{name:"na",type:"text",'class':"inputText",value:na});
  836. nameTd.append(nameInput);
  837. var commentTd=constructTag("td");
  838. var commentInput=constructTag("input",{name:"cm",type:"text",'class':"inputText",value:cm});
  839. commentTd.append(commentInput);
  840. var typeTd=constructTag("td");
  841. var typeSelect=constructTag("select",{name:"ty"});
  842. typeSelect.append(constructOption(ty,"S","字符类型"));
  843. typeSelect.append(constructOption(ty,"L","整数类型"));
  844. // typeSelect.append(constructOption(ty,"N","Integer"));
  845. typeSelect.append(constructOption(ty,"DB","数字类型"));
  846. // typeSelect.append(constructOption(ty,"BD","BigDecimal"));
  847. // typeSelect.append(constructOption(ty,"FT","Float"));
  848. // typeSelect.append(constructOption(ty,"SN","Short"));
  849. typeSelect.append(constructOption(ty,"DL","日期类型"));
  850. typeTd.append(typeSelect);
  851. var valueFromTd=constructTag("td");
  852. var valueFromSelect=constructTag("select",{name:"vf",onchange:"paramValueFromChange(this)"});
  853. valueFromSelect.append(constructOption(vf,1,"输入"));
  854. valueFromSelect.append(constructOption(vf,2,"固定值"));
  855. valueFromSelect.append(constructOption(vf,3,"脚本"));
  856. valueFromTd.append(valueFromSelect);
  857. var valueTd=constructTag("td");
  858. var scriptBtn=$("<a style='display:none;' href='#' name='btnScript' class='link var' title='常用脚本' onclick='selectScript(this)'>常用脚本</a>");
  859. var valueInput;
  860. if(vf==1){
  861. valueInput=constructTag("input",{name:"va",type:"text",value:va,readonly:"readonly"});
  862. valueInput.hide();
  863. }else if(vf==2){
  864. valueInput=constructTag("input",{name:"va",type:"text",value:va,style:"width:96%"});
  865. }else{
  866. scriptBtn.show();
  867. valueInput=constructTag("textarea",{name:"va",value:va,style:"width:96%"});
  868. }
  869. valueTd.append(scriptBtn);
  870. valueTd.append(valueInput);
  871. //管理
  872. var manageTd=constructTag("td");
  873. var deleteA=constructTag("a",{onclick:"delConditionTr(this)",href:"#",'class':"link del"},"删除");
  874. manageTd.append(deleteA);
  875. tr.append(nameTd);
  876. tr.append(commentTd);
  877. tr.append(typeTd);
  878. tr.append(valueFromTd);
  879. tr.append(valueTd);
  880. tr.append(manageTd);
  881. return tr;
  882. }
  883. /**
  884. *值来源更改事件处理
  885. */
  886. function paramValueFromChange(obj){
  887. var tr = $(obj).closest("tr");
  888. var scriptBtn = tr.find("a:[name='btnScript']");
  889. scriptBtn.hide();
  890. var vf = $(obj).val();
  891. var valueInput;
  892. if(vf==1){
  893. valueInput=constructTag("input",{name:"va",type:"text",readonly:"readonly"});
  894. valueInput.hide();
  895. }else if(vf==2){
  896. valueInput=constructTag("input",{name:"va",type:"text",style:"width:96%"});
  897. }else{
  898. scriptBtn.show();
  899. valueInput=constructTag("textarea",{name:"va",style:"width:96%"});
  900. }
  901. tr.find("[name='va']").replaceWith(valueInput);
  902. }
  903. /**
  904. *构造标签
  905. */
  906. function constructTag(name,props,text){
  907. var tag = $("<"+name+"></"+name+">");
  908. if(props){
  909. for(var key in props){
  910. tag.attr(key,props[key]);
  911. }
  912. }
  913. if(text){
  914. tag.text(text);
  915. }
  916. return tag;
  917. }
  918. /**
  919. *Before Select Tab item event handler
  920. *@param tabid ligertab tab id
  921. *@return
  922. * false 阻止操作,否则继续
  923. */
  924. function onBeforeSelectTabItem(newtabid){
  925. if(pgmswitchta){
  926. pgmswitchta=false;
  927. return true;
  928. }
  929. var tabid = tabcomp.getSelectedTabItemID();
  930. if(newtabid=="baseSetting"){
  931. return true;
  932. }else if(newtabid=="displaySetting"){
  933. var valid = validateBaseSetting();
  934. if(valid.status!=0){
  935. if(tabid!="baseSetting"){
  936. pgmswitchta=true;
  937. tabcomp.selectTabItem("baseSetting");
  938. }
  939. if(valid.message){
  940. $.ligerDialog.error(valid.message,"Error");
  941. }
  942. return false;
  943. }
  944. }else if(newtabid=="parameterSetting"){
  945. return true;
  946. }else if(newtabid=="conditionSetting"){
  947. //没有使用setTimeout,不起会用,应该是CodeMirror与LigerUI有冲突
  948. setTimeout(function(){
  949. conditonScriptEditor.refresh();
  950. },0);
  951. var valid = validateBaseSetting();
  952. if(valid.status!=0){
  953. if(tabid!="baseSetting"){
  954. pgmswitchta=true;
  955. tabcomp.selectTabItem("baseSetting");
  956. }
  957. if(valid.message){
  958. $.ligerDialog.error(valid.message,"Error");
  959. }
  960. return false;
  961. }
  962. valid = validateParameterSetting();
  963. if(tabid!="parameterSetting"){
  964. pgmswitchta=true;
  965. tabcomp.selectTabItem("parameterSetting");
  966. }
  967. if(valid.status!=0){
  968. if(valid.message){
  969. $.ligerDialog.error(valid.message,"Error");
  970. }
  971. return false;
  972. }
  973. //更新条件中的值来源是变量的变量选择列表
  974. var parameters=getParameters();
  975. var vaInput=constructTag("select",{name:"va"});
  976. for(var i=0;i<parameters.length;i++){
  977. p=parameters[i];
  978. vaInput.append(constructTag("option",{value:p.na},p.cm+"("+p.na+")"));
  979. }
  980. $("#conditionTbl tbody select[name='vf']:[value='4']").each(function(){
  981. var tr=$(this).closest("tr");
  982. var oldVaInput = tr.find("[name='va']");
  983. var va=oldVaInput.val();
  984. vaInput.val(va);
  985. oldVaInput.replaceWith(vaInput);
  986. });
  987. //更新脚本条件编辑器上方的自变量列表
  988. initConditionSelParams();
  989. }
  990. return true;
  991. }
  992. /**
  993. *@param checkbox object
  994. *@return void
  995. */
  996. function selectAll(obj){
  997. if($(obj).attr("checked")){
  998. $(obj).closest("table").find("[name='ds']").each(function(){
  999. $(this).attr("checked","checked");
  1000. });
  1001. }else{
  1002. $(obj).closest("table").find("[name='ds']").each(function(){
  1003. $(this).removeAttr("checked");
  1004. });
  1005. }
  1006. }
  1007. /**
  1008. *初始化自定义参数
  1009. *@param 参数Object
  1010. *@return void
  1011. */
  1012. function initParameters(params){
  1013. for(var i=0;i<params.length;i++){
  1014. var parameter=params[i];
  1015. var tr = constructParameterTr(parameter);
  1016. $("#parameters-table tbody").append(tr);
  1017. }
  1018. }
  1019. /**
  1020. * 设置帮助信息
  1021. */
  1022. function helpInfoShow(obj,target){
  1023. var info = $("#"+target).html();
  1024. $.ligerDialog.open({
  1025. content:info,
  1026. width:500,
  1027. height:400,
  1028. modal:false,
  1029. showMin: false
  1030. });
  1031. }
  1032. /**
  1033. * 初始化条件过滤脚本编辑器上方的自定义参数选项选择
  1034. */
  1035. function initConditionSelParams(){
  1036. var parameters=getParameters();
  1037. var parametersDiv=$("#condition-script-div-parameters-list");
  1038. parametersDiv.html("");
  1039. for(var i=0;i<parameters.length;i++){
  1040. p=parameters[i];
  1041. var a=constructTag("a",{name:p.na,'class':'button',style:"margin:5px 10px",href:"#",onclick:"insertParameterToScript(this)"});
  1042. var content=""
  1043. +"<table class='table-detail'>"
  1044. +"<tr>"
  1045. +"<th colspan='2'><span class='green'>点击插入到脚本中</span></th>"
  1046. +"</tr>"
  1047. +"<tr>"
  1048. +"<th>名称</th>"
  1049. +"<td>"+p.na+"</td>"
  1050. +"</tr>"
  1051. +"<tr>"
  1052. +"<th>注释</th>"
  1053. +"<td>"+p.cm+"</td>"
  1054. +"</tr>"
  1055. +"<tr>"
  1056. +"<th>类型</th>"
  1057. +"<td>"+getType(p.ty)+"</td>"
  1058. +"</tr>"
  1059. +"</table>";
  1060. a.qtip({
  1061. content:content
  1062. });
  1063. var span=constructTag("span",{},p.cm);
  1064. a.append(span);
  1065. parametersDiv.append(a);
  1066. }
  1067. }
  1068. function insertParameterToScript(obj){
  1069. var text = $(obj).attr("name");
  1070. var pos=conditonScriptEditor.getCursor();
  1071. conditonScriptEditor.replaceRange(text,pos);
  1072. }
  1073. /**
  1074. * 类型简写到完全的表示形式
  1075. * @param type
  1076. * @returns 类型的完全表示
  1077. */
  1078. function getType(type)
  1079. {
  1080. var lType=type;
  1081. switch(type){
  1082. case "S":
  1083. lType="String";
  1084. break;
  1085. case "L":
  1086. lType="Long";
  1087. break;
  1088. case "N":
  1089. lType="Integer";
  1090. break;
  1091. case "DB":
  1092. lType="Double";
  1093. break;
  1094. case "BD":
  1095. lType="BigDecimal";
  1096. break;
  1097. case "FT":
  1098. lType="Float";
  1099. break;
  1100. case "SN":
  1101. lType="Short";
  1102. break;
  1103. case "DL":
  1104. lType="Date";
  1105. break;
  1106. }
  1107. return lType;
  1108. }
  1109. /**
  1110. * 验证输入的条件脚本
  1111. * @param obj
  1112. */
  1113. function validateConditionScript(obj){
  1114. var url=__ctx+"/platform/system/sysTableManage/parseConditionScript.ht";
  1115. var parameters=getParameters();
  1116. var inputs=[];
  1117. var inputnas=[];
  1118. for(var i=0;i<parameters.length;i++){
  1119. var p=parameters[i];
  1120. if(p.vf!=1){
  1121. continue;
  1122. }
  1123. var input;
  1124. if(p.ty=='DL'){
  1125. input = constructTag("input",{name:"Q_"+p.na+"_"+p.ty,onfocus:"datePicker(this)","class":"Wdate inputText"});
  1126. }else{
  1127. input = constructTag("input",{name:"Q_"+p.na+"_"+p.ty,"class":"inputText"});
  1128. }
  1129. var content=""
  1130. +"<table class='table-detail'>"
  1131. +"<tr>"
  1132. +"<th>名称</th>"
  1133. +"<td>"+p.na+"</td>"
  1134. +"</tr>"
  1135. +"<tr>"
  1136. +"<th>注释</th>"
  1137. +"<td>"+p.cm+"</td>"
  1138. +"</tr>"
  1139. +"<tr>"
  1140. +"<th>类型</th>"
  1141. +"<td>"+getType(p.ty)+"</td>"
  1142. +"</tr>"
  1143. +"</table>";
  1144. input.qtip({
  1145. show: {
  1146. event: 'focus'
  1147. },
  1148. hide: {
  1149. event: 'blur'
  1150. },
  1151. content:content
  1152. });
  1153. var tr=constructTag("tr");
  1154. var naTd=constructTag("td");
  1155. naTd.text(p.na);
  1156. var vaTd=constructTag("td");
  1157. vaTd.append(input);
  1158. tr.append(naTd);
  1159. tr.append(vaTd);
  1160. inputs.push(tr);
  1161. inputnas.push('');
  1162. }
  1163. var validate=function(vars){
  1164. vars=vars||{};
  1165. var script=conditonScriptEditor.getValue();
  1166. var params={
  1167. script:script,
  1168. parameters:JSON2.stringify(parameters)
  1169. };
  1170. $.extend(params,vars);
  1171. $.post(url,params,function(data){
  1172. // console.dir(JSON2.stringify(data));
  1173. if(data.status){
  1174. $.ligerDialog.success("结果:"+data.result,"在当前上下文,脚本执行成功");
  1175. }else{
  1176. $.ligerDialog.error(data.message,"当前上下文,解析条件脚本失败:");
  1177. }
  1178. });
  1179. };
  1180. if(inputs.length>0){
  1181. var table=$("<table class='table-detail'><tr><th style='text-align: center;'>变量名</th><th style='text-align: center;'>变量值</th></tr></table>");
  1182. for(var i=0;i<inputs.length;i++){
  1183. table.append(inputs[i]);
  1184. }
  1185. var form=$("<form id='dialog-input-parameter-form'>").append(table);
  1186. $.ligerDialog.open({
  1187. width:300,
  1188. height:350,
  1189. target:form,
  1190. buttons:[{
  1191. text:'确定',
  1192. onclick:function(item, dialog, index){
  1193. dialog.close();
  1194. var vars = serializeObject(form);
  1195. validate(vars);
  1196. }
  1197. }]
  1198. });
  1199. }else{
  1200. validate();
  1201. }
  1202. }
  1203. /**
  1204. * 从表单中取得表单输入的JSON
  1205. * @param form
  1206. * @returns Object
  1207. */
  1208. function serializeObject(form){
  1209. var o = {};
  1210. var a = $(form).serializeArray();
  1211. $.each(a, function() {
  1212. if (o[this.name]) {
  1213. if (!o[this.name].push) {
  1214. o[this.name] = [o[this.name]];
  1215. }
  1216. o[this.name].push(this.value || '');
  1217. } else {
  1218. o[this.name] = this.value || '';
  1219. }
  1220. });
  1221. return o;
  1222. }