FieldsManage.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. /**
  2. * 字段管理。
  3. * @returns {FieldsManage}
  4. */
  5. FieldsManage=function(){
  6. {
  7. this.Fields=[];
  8. }
  9. /**
  10. * 设置字段
  11. */
  12. this.setFields=function(aryFields){
  13. this.Fields=aryFields;
  14. };
  15. /**
  16. * 添加字段。
  17. */
  18. this.addField=function(field){
  19. var rtn=this.isFieldExist(field.fieldName);
  20. if(rtn) return ;
  21. this.Fields.push(field);
  22. };
  23. this.delField=function(fieldName){
  24. for(var i=this.Fields.length-1;i>=0;i--){
  25. var field=this.Fields[i];
  26. if(field.fieldName.toLowerCase()==fieldName.toLowerCase()){
  27. this.Fields.splice(i,1);
  28. }
  29. }
  30. };
  31. /**
  32. * 更新字段。
  33. */
  34. this.updField=function(field){
  35. for(var i=this.Fields.length-1;i>=0;i--){
  36. var tmp=this.Fields[i];
  37. if(tmp.fieldName.toLowerCase()==field.fieldName.toLowerCase()){
  38. var defaults=this.Fields[i];
  39. field= $.extend({}, defaults, field);
  40. this.Fields[i]=field;
  41. }
  42. }
  43. };
  44. /**
  45. * 替换列字段。
  46. * oldFieldName:原来字段名称。
  47. * 代替的字段对象。
  48. */
  49. this.replaceByFieldName=function(oldFieldName,field){
  50. for(var i=0;i<this.Fields.length;i++){
  51. var tmpField=this.Fields[i];
  52. if(tmpField.fieldName.toLowerCase()==oldFieldName.toLowerCase()){
  53. var defaults=this.Fields[i];
  54. field= $.extend({}, defaults, field);
  55. this.Fields[i]=field;
  56. };
  57. };
  58. };
  59. /**
  60. * 判断字段是否存在。
  61. */
  62. this.isFieldExist=function(name){
  63. for(var i=0;i<this.Fields.length;i++){
  64. var field=this.Fields[i];
  65. var fieldName=field.fieldName.toLowerCase();
  66. name=name.toLowerCase();
  67. //判断选择控件。(用户,组织,岗位,角色)
  68. var rtn=this.isExecutorSelector(field.controlType);
  69. if(rtn){
  70. var fieldId=fieldName +"id";
  71. if(fieldName==name || fieldId==name){
  72. return true;
  73. }
  74. }
  75. else{
  76. if(fieldName==name){
  77. return true;
  78. }
  79. }
  80. }
  81. return false;
  82. };
  83. /**
  84. * 是否选择器。
  85. */
  86. this.isExecutorSelector =function(ctlType){
  87. ctlType=parseInt(ctlType);
  88. if(ctlType==4 || ctlType==8 || ctlType==17 || ctlType==5 || ctlType==18
  89. || ctlType==6 || ctlType==19 || ctlType==7)
  90. return true;
  91. return false;
  92. };
  93. /**
  94. * 将字段向上或向下移动。
  95. */
  96. this.moveField=function(fieldName,isUp){
  97. //获取索引
  98. var idx=this.getFieldIndex(fieldName);
  99. if(idx==-1)
  100. return false;
  101. var next=0;
  102. var canMove=false;
  103. if(isUp){
  104. if(idx>0){
  105. next=idx-1;
  106. canMove=true;
  107. }
  108. }
  109. else{
  110. if(idx<this.Fields.length-1){
  111. next=idx+1;
  112. canMove=true;
  113. }
  114. }
  115. //交换位置。
  116. if( canMove){
  117. var temp=this.Fields[idx];
  118. this.Fields[idx]=this.Fields[next];
  119. this.Fields[next]=temp;
  120. }
  121. return canMove;
  122. };
  123. /**
  124. * 根据字段名获取索引。
  125. */
  126. this.getFieldIndex=function(fieldName){
  127. for(var i=0;i<this.Fields.length;i++){
  128. var field=this.Fields[i];
  129. if(field.fieldName.toLowerCase()==fieldName.toLowerCase()){
  130. return i;
  131. }
  132. }
  133. return -1;
  134. };
  135. /**
  136. * 根据字段名称取得字段。
  137. */
  138. this.getFieldByName=function(fieldName){
  139. for(var i=0;i<this.Fields.length;i++){
  140. var field=this.Fields[i];
  141. if(field.fieldName.toLowerCase()==fieldName.toLowerCase()){
  142. return field;
  143. }
  144. }
  145. return null;
  146. };
  147. /**
  148. * 根据索引取得字段。
  149. */
  150. this.getFieldByIndex=function(idx){
  151. idx=parseInt(idx);
  152. if(idx>=0 && idx<this.Fields.length){
  153. return this.Fields[idx];
  154. }
  155. return null;
  156. };
  157. /**
  158. * 取得复选框。
  159. */
  160. this.getCheckBox=function(field,optionType){
  161. return "<input type='checkbox' name='"+optionType+"' "+((field[optionType]==1)?"checked":"")+"/>";
  162. };
  163. /**
  164. * 取得字段类型。
  165. */
  166. this.getFieldType=function(field){
  167. var fieldType=field.fieldType;
  168. if(fieldType=="varchar"){
  169. fieldType= fieldType + "(" + field.charLen +")";
  170. }
  171. else if(fieldType=="number"){
  172. var intLen=field.intLen;
  173. var decimalLen=field.decimalLen;
  174. if(decimalLen==0){
  175. fieldType= fieldType + "(" + intLen +")";
  176. }
  177. else{
  178. fieldType= fieldType + "(" + intLen +"," + decimalLen+")";
  179. }
  180. }
  181. return fieldType;
  182. };
  183. /**
  184. * 获取html
  185. */
  186. this.getHtml=function(conf){
  187. conf=conf || {showDel:true};
  188. var sb=new StringBuffer();
  189. for(var i=0;i<this.Fields.length;i++){
  190. var clsName=(i%2==0)?"odd":"even";
  191. var field=this.Fields[i];
  192. var fieldType=this.getFieldType(field);
  193. //隐藏字段不显示
  194. if(field.isHidden==1 ) continue;
  195. var del= ((field.isDeleted==0)?" ":"√"),isDel = ((field.isDeleted==0)?false:true);
  196. sb.append("<tr fieldName='"+field.fieldName+"' class='");
  197. sb.append(clsName);
  198. sb.append("'>");
  199. var desc = field.fieldDesc;
  200. sb.append("<td class='editField' name='fieldName' >"+this.delStyle(field.fieldName,isDel)+"</s></td>");
  201. if(desc.length>15){
  202. desc=desc.substr(0,15)+"...";
  203. }
  204. sb.append("<td class='editField' name='fieldDesc' "+"title='"+field.fieldDesc+"' >"+this.delStyle(desc,isDel)+"</td>");
  205. sb.append("<td>"+fieldType+"</td>");
  206. sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isRequired") +"</td>");
  207. sb.append("<td style='text-align:center;' name='Listtd'>"+this.getCheckBox(field,"isList")+"</td>");
  208. if(fieldType.indexOf('clob')!=-1 || isHideFlowVar(field.controlType)){
  209. sb.append("<td style='text-align:center;'>&nbsp;</td>");
  210. }else{
  211. sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isFlowVar") +"</td>");
  212. }
  213. if(conf.showDel){
  214. sb.append("<td style='text-align:center;'>"+del+"</td>");
  215. }
  216. // sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isReference") +"</td>");
  217. // sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"ccisread") +"</td>");
  218. // if(fieldType.indexOf('number')!=-1){
  219. // sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isShowComdify")+"</td>");
  220. // }else{
  221. // sb.append("<td style='text-align:center;'>&nbsp;</td>");
  222. // }
  223. sb.append("<td>" +((field.isDeleted==0)?"<a href='#"+field.fieldName+"' name='editColumn' >编辑</a>":" ")+"</td>");
  224. sb.append("</tr>");
  225. }
  226. return sb.toString();
  227. };
  228. /**
  229. * 获取指定列名的Element
  230. */
  231. this.getFieldItem=function(fieldName,showDel){
  232. var sb=new StringBuffer();
  233. for(var i=0;i<this.Fields.length;i++){
  234. var field=this.Fields[i];
  235. if(field.fieldName!=fieldName){
  236. continue;
  237. }
  238. var clsName=(i%2==0)?"odd":"even";
  239. var fieldType=this.getFieldType(field);
  240. //隐藏字段不显示
  241. if(field.isHidden==1 ) continue;
  242. var del= ((field.isDeleted==0)?" ":"√"),isDel = ((field.isDeleted==0)?false:true);
  243. sb.append("<tr fieldName='"+field.fieldName+"' class='");
  244. sb.append(clsName);
  245. sb.append("'>");
  246. sb.append("<td class='editField' name='fieldName' >"+this.delStyle(field.fieldName,isDel)+"</s></td>");
  247. sb.append("<td class='editField' name='fieldDesc'>"+this.delStyle(field.fieldDesc,isDel)+"</td>");
  248. sb.append("<td>"+fieldType+"</td>");
  249. sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isRequired") +"</td>");
  250. sb.append("<td style='text-align:center;' name='Listtd'>"+this.getCheckBox(field,"isList")+"</td>");
  251. if(fieldType.indexOf('clob')!=-1 || isHideFlowVar(field.controlType)){
  252. sb.append("<td style='text-align:center;'>&nbsp;</td>");
  253. }else{
  254. sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isFlowVar") +"</td>");
  255. }
  256. if(showDel==1){
  257. sb.append("<td style='text-align:center;' name='showdel'>"+del+"</td>");
  258. }
  259. // sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isReference") +"</td>");
  260. // sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"ccisread") +"</td>");
  261. // if(fieldType.indexOf('number')!=-1){
  262. // sb.append("<td style='text-align:center;'>"+this.getCheckBox(field,"isShowComdify")+"</td>");
  263. // }else{
  264. // sb.append("<td style='text-align:center;'>&nbsp;</td>");
  265. // }
  266. sb.append("<td>" +((field.isDeleted==0)?"<a href='#' name='editColumn' >编辑</a>":" ")+"</td>");
  267. sb.append("</tr>");
  268. }
  269. return $(sb.toString());
  270. };
  271. /**
  272. * 删除字段
  273. */
  274. this.delStyle = function(name,isDel){
  275. if(isDel)
  276. return '<s>'+name+'</s>';
  277. return name
  278. };
  279. };
  280. var isEdited = false;
  281. /**
  282. * 表的行操作
  283. */
  284. if (typeof TableRow == 'undefined') {
  285. TableRow = {};
  286. }
  287. /**
  288. * 设置列管理对象。
  289. * @param fieldManage
  290. */
  291. TableRow.setFieldManage=function(fieldManage){
  292. TableRow.fieldManage=fieldManage;
  293. };
  294. /**
  295. * 设置字段名是否允许编辑
  296. * @param allowEditColName
  297. */
  298. TableRow.setAllowEditColName=function(allowEditColName){
  299. TableRow.allowEditColName=allowEditColName;
  300. };
  301. TableRow.setIsExternal=function(isExternal){
  302. TableRow.isExternal=isExternal;
  303. };
  304. TableRow.isEdit=false;
  305. /**
  306. * 是否编辑。
  307. */
  308. TableRow.setIsEdit=function(_isEdit){
  309. TableRow.isEdit=_isEdit;
  310. }
  311. /**
  312. * 删除行
  313. */
  314. TableRow.del=function(){
  315. var objTr=$("#tableColumnItem>tbody .over");
  316. if(objTr.length==0) {
  317. $.ligerDialog.warn('还没有选中列!','提示');
  318. return;
  319. };
  320. var fieldName=objTr.attr("fieldName");
  321. var field=TableRow.fieldManage.getFieldByName(fieldName);
  322. if(field.isRequired){
  323. $.ligerDialog.warn('该列为必填列,不能删除!','提示');
  324. return;
  325. }
  326. TableRow.fieldManage.delField(fieldName);
  327. objTr.remove();
  328. };
  329. /**
  330. * 移动行
  331. */
  332. TableRow.move=function(direct){
  333. var objTr=$("#tableColumnItem>tbody .over");
  334. if(objTr.length==0) return;
  335. var fieldName=objTr.attr("fieldName");
  336. var rtn=TableRow.fieldManage.moveField(fieldName,direct);
  337. if(!rtn) return;
  338. if(direct){
  339. var prevObj=objTr.prev();
  340. objTr.insertBefore(prevObj);
  341. }
  342. else{
  343. var nextObj=objTr.next();
  344. objTr.insertAfter(nextObj);
  345. }
  346. };
  347. /**
  348. * 添加列。
  349. */
  350. TableRow.addColumn=function(isMain){
  351. var isEdit=TableRow.isEdit;
  352. ColumnDialog({isAdd:true,isMain:isMain,fieldManage:TableRow.fieldManage,isExternal:0, callBack:function(field){
  353. isEdited = true;
  354. var rtn=TableRow.fieldManage.isFieldExist(field.fieldName);
  355. if(rtn) return false;
  356. TableRow.fieldManage.addField(field);
  357. //$("#tableColumnItem>tbody").empty();
  358. var newTr = $(TableRow.fieldManage.getFieldItem(field.fieldName,TableRow.allowEditColName?0:1));
  359. newTr.addClass("newColumn");
  360. newTr.attr('style','background-color:FFE2D7;')
  361. newtd = newTr.find("td[name='fieldDesc']");
  362. newtd.attr("title",field.fieldDesc)
  363. var desc= field.fieldDesc;
  364. if(desc.length>15){
  365. desc=desc.substr(0,15)+"...";
  366. }
  367. newtd.html(desc);
  368. $("#tableColumnItem>tbody").append(newTr);
  369. handisList();
  370. return true;
  371. }});
  372. };
  373. handisList=function(){
  374. var ismain=$("input[name='isMain']:checked").val();
  375. var objTd=$("td[name='Listtd']");
  376. var objTh=$("th[name='Listth']");
  377. if(ismain=='1'){
  378. objTd.show();
  379. objTh.show();
  380. }else{
  381. objTh.hide();
  382. objTd.hide();
  383. }
  384. }
  385. /**
  386. * 编辑字段
  387. */
  388. TableRow.editField=function(fieldName,isMain){
  389. var tmpField=TableRow.fieldManage.getFieldByName(fieldName);
  390. if(tmpField==null) return;
  391. //当前编辑的行
  392. var curTr =$("tr[fieldname="+fieldName+"]","#tableColumnItem>tbody");
  393. //最初,是否是流程变量
  394. var isFlowVar = $("[name=isFlowVar]",curTr).data("isFlowVar");
  395. ColumnDialog({isAdd:false,
  396. isMain:isMain,
  397. allowEditColName:TableRow.allowEditColName||curTr.hasClass("newColumn"),
  398. fieldManage:TableRow.fieldManage,
  399. field:tmpField,
  400. isFlowVar:isFlowVar,
  401. isExternal:TableRow.isExternal,
  402. callBack:function(field){
  403. if(TableRow.fieldManage.isFieldExist(field.fieldName)){
  404. TableRow.fieldManage.updField(field);
  405. }
  406. else{
  407. TableRow.fieldManage.replaceByFieldName(fieldName,field);
  408. }
  409. //$("#tableColumnItem>tbody").empty();
  410. var showDel=1;
  411. if(TableRow.allowEditColName || TableRow.isExternal==1){
  412. showDel=0;
  413. }
  414. var newTr = $(TableRow.fieldManage.getFieldItem(field.fieldName,showDel));
  415. if(curTr.length>0){
  416. $("[name=isFlowVar]",newTr).data("isFlowVar",isFlowVar);
  417. if(!TableRow.allowEditColName){
  418. if(isFlowVar){
  419. $("[name=isFlowVar]:checked",newTr).each(function(){
  420. var _this = $(this);
  421. _this.attr("disabled","disabled");
  422. });
  423. }
  424. }
  425. curTr.replaceWith(newTr);
  426. }else{
  427. newTr.data("isFlowVar",isFlowVar);
  428. $("#tableColumnItem>tbody").append(newTr);
  429. }
  430. if(tableId!=0){
  431. isEdited = true;
  432. $("#tableColumnItem>tbody>tr:[fieldname="+field.fieldName+"]").attr('style','background-color:#FFE2D7;');
  433. }
  434. handisList();
  435. return true;
  436. }});
  437. };
  438. /**
  439. * 编辑列名及注释
  440. */
  441. TableRow.editNameComment=function(tdObj){
  442. var trObj=tdObj.parent();
  443. var idx=$("#tableColumnItem>tbody>tr").index(trObj);
  444. var field=TableRow.fieldManage.getFieldByIndex(idx);
  445. var fieldName=tdObj.attr("name");
  446. //字段名称不允许编辑
  447. if(!TableRow.allowEditColName && !trObj.hasClass("newColumn")){
  448. //field.fieldId为undefined表示新添加的字段,否则为原来的字段。
  449. if(fieldName=="fieldName" )
  450. return ;
  451. }
  452. var hasInput=tdObj.has("input").length==1;
  453. if(!hasInput){
  454. var txtObj=$("<input type='text' class='inputText' maxlength='20' size='20' value='"+tdObj.text()+"' />");
  455. if(tdObj.attr("title")){
  456. txtObj=$("<input type='text' class='inputText' maxlength='20' size='20' value='"+tdObj.attr("title")+"' />");
  457. }
  458. txtObj.blur(function(){
  459. var tmpObj=$(this);
  460. var val=tmpObj.val();
  461. if(tmpObj.parent().attr("title")){
  462. tmpObj.parent().attr("title",val);
  463. }
  464. if(val.length>15){
  465. val=val.substr(0,15)+"...";
  466. }
  467. tmpObj.parent().text(val);
  468. tmpObj.remove();
  469. field[fieldName]=val;
  470. if(tableId!=0){
  471. isEdited = true;
  472. $("#tableColumnItem>tbody>tr:[fieldname="+field.fieldName+"]").attr('style','background-color:#FFE2D7;');
  473. }
  474. });
  475. tdObj.empty();
  476. tdObj.append(txtObj);
  477. txtObj.focus();
  478. }
  479. };
  480. /**
  481. * 编辑字段的选项。
  482. */
  483. TableRow.editFieldOption=function (chkObj){
  484. var fieldName=chkObj.attr("name");
  485. var checked=chkObj.attr("checked");
  486. var trObj=chkObj.parents("tr");
  487. var idx=$("#tableColumnItem>tbody>tr").index(trObj);
  488. var field=TableRow.fieldManage.getFieldByIndex(idx);
  489. field[fieldName]=(checked!=undefined)?1:0;
  490. };
  491. //根据字段描述生成字段名
  492. function autoGetKey(inputObj){
  493. var subject=$(inputObj).val();
  494. if($.trim(subject).length<1) return;
  495. $.ajax({
  496. url: __ctx + '/platform/form/bpmFormTable/getFieldKey.ht',
  497. //async:false,
  498. type:'POST',
  499. data: ({subject : subject}),
  500. success: function(data){
  501. var json=eval('('+data+')');
  502. if(json.result==1 && $.trim($('#fieldName').val()).length<1 ){
  503. $('#fieldName').val(json.message);
  504. validateField().form();
  505. }
  506. }
  507. });
  508. }