edit.jsp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  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. <script type="text/javascript" src="${ctx}/js/ueditor2/dialogs/internal.js"></script>
  9. <link rel="stylesheet" type="text/css" href="../edit.css">
  10. <link rel="stylesheet" type="text/css" href="${ctx}/styles/default/css/form.css">
  11. <link rel="stylesheet" type="text/css" href="${ctx}/js/tree/zTreeStyle.css"/>
  12. <script type="text/javascript" src="${ctx}/js/util/loadjscss.js"></script>
  13. <script type="text/javascript" src="${ctx}/js/tree/jquery.ztree.js"></script>
  14. <script type="text/javascript" src="${ctx}/js/lg/plugins/ligerComboBox.js"></script>
  15. <script type="text/javascript" src="${ctx}/js/hotent/CustomValid.js"></script>
  16. <script type="text/javascript" src="${ctx}/js/hotent/platform/system/Share.js"></script>
  17. <script type="text/javascript"src="${ctx}/js/hotent/platform/system/ScriptDialog.js"></script>
  18. <script type="text/javascript" src="${ctx}/js/conf/orgUserConf.js"></script>
  19. <script type="text/javascript">
  20. var oldElement,valid;
  21. $(function() {
  22. $(".button-td").bind("mouseenter mouseleave",function(){
  23. $(this).toggleClass("button-td-hover");
  24. });
  25. JsLoader.LoadCount=1;
  26. //获取所有数据字典列表
  27. JsLoader.Load(__ctx + "/js/lg/plugins/htCatCombo.js","javascript1");
  28. if (editor.curInputHtml) {
  29. var content=editor.curInputHtml.replace(/#validrule#/g,function(){
  30. getAllRules();
  31. return '正在获取验证规则...';
  32. }).replace(/#serialnum#/g,function(){
  33. return '正在获取流水号...';
  34. });
  35. $("#inputPanel").html(content);
  36. }
  37. valid = $("#inputPanel").form();
  38. init();
  39. handOrgUser();
  40. });
  41. function handOrgUser(){
  42. var selectObj = $("#fromType");
  43. for(var i=0 ; i<orgUserConfJson.length;i++){
  44. var json = orgUserConfJson[i];
  45. if(json){
  46. var opt = $("<option>").val(json.value).text(json.title);
  47. opt.attr("type",json.type);
  48. selectObj.append(opt);
  49. }
  50. }
  51. }
  52. function initOptionArray(json) {
  53. var tbody = $('#option-table>tbody');
  54. if (typeof(json)!=undefined && json!=null && json != '' && json.length>0){ //有数据时
  55. for ( var i = 0, c; c = json[i++];) {
  56. var newTr = addColumn(c);
  57. tbody.append(newTr);
  58. }
  59. }else{
  60. var data ={key:" ",value:"--请选择--"}; //key 为一个空格
  61. var newTr = addColumn(data);
  62. tbody.append(newTr);
  63. }
  64. /* if (!json)return;
  65. var tbody = $('#option-table>tbody');
  66. for ( var i = 0, c; c = json[i++];) {
  67. var newTr = addColumn(c);
  68. tbody.append(newTr);
  69. } */
  70. };
  71. function getOptionData(){
  72. var optionAry = [];
  73. $("tr.editable-tr",$("#option-table")).each(function(){
  74. var me = $(this),
  75. optionKey = $("input[name='optionKey']",me).val(),
  76. optionValue = $("input[name='optionValue']",me).val(),
  77. isDefault = $("input[name='isDefault']:checked",me).val();
  78. if(isDefault != "1"){
  79. isDefault="0"
  80. }
  81. optionAry.push({key:optionKey,value:optionValue,isDefault:isDefault});
  82. });
  83. return optionAry;
  84. };
  85. /**
  86. * 终止事件冒泡
  87. * @param {[type]} e [description]
  88. * @return {[type]} [description]
  89. */
  90. function stopBubble(e) {
  91. if (e && e.stopPropagation) e.stopPropagation();
  92. else window.event.cancelBubble = true;
  93. };
  94. /**
  95. * 添加选项
  96. * @param {[json]} data [数据]
  97. * @return {[type]} [description]
  98. */
  99. function addColumn(data){
  100. var hiddenTable = $("#hiddenTable"),
  101. tmpTr = $("tr.editable-tr",hiddenTable),
  102. newTr = tmpTr.clone();
  103. if( data.key == ' ' || (data.value).indexOf("请选择")>-1 ){
  104. $("input[name='optionKey']",newTr).val(data.key);
  105. $("input[name='optionValue']",newTr).val(data.value);
  106. $("input[name='optionKey']",newTr).attr("readonly","readonly");
  107. $("input[name='optionValue']",newTr).attr("readonly","readonly");
  108. }else{
  109. $("input[name='optionKey']",newTr).val(data.key);
  110. $("input[name='optionValue']",newTr).val(data.value);
  111. if(data.isDefault=="1"){
  112. $("input[name='isDefault']",newTr).attr("checked","checked");
  113. }
  114. }
  115. /* if(data){
  116. $("input[name='optionKey']",newTr).val(data.key);
  117. $("input[name='optionValue']",newTr).val(data.value);
  118. } */
  119. return newTr;
  120. };
  121. function init(){
  122. if($(editor.target).is('td')){
  123. var comment=$(editor.target).prev().text().replace(':','').trim();
  124. if($("#inputPanel").find('input[eid="tablememo"]').size()>0){
  125. var $comment=$("#inputPanel").find('input[eid="tablememo"]');
  126. }else{
  127. var $comment=$("#inputPanel").find('input[eid="comment"]');
  128. }
  129. if(comment){
  130. $comment.val(comment);
  131. getKeyName($comment);
  132. }
  133. }
  134. //判断是否是子表,是子表的就把显示到列表的字段隐藏起来,否则则显示
  135. var subDiv=$(editor.target).parents("div.subtable");
  136. if(subDiv.length!=0){
  137. $("label[name='Listlabel']").hide();
  138. $("label[name='QueryLabel']").hide();
  139. }
  140. $('#isDateString').bind('change',function(){
  141. if($('#isDateString').attr('checked')=="checked"){
  142. $('#dateStrFormat').parents('span:first').show();
  143. }else{
  144. $('#dateStrFormat').parents('span:first').hide();
  145. }
  146. });
  147. $("#option-table>tbody").delegate('tr.editable-tr','mouseover mouseleave', function(e) {
  148. if (e.type == 'mouseover') {
  149. $(this).addClass('hover');
  150. } else {
  151. $(this).removeClass('hover');
  152. }
  153. });
  154. $("#option-table>tbody").delegate('a.remove-bnt','click',function(e){
  155. stopBubble(e);
  156. var me = $(this),
  157. tr = me.parents('tr.editable-tr');
  158. tr.remove();
  159. });
  160. $("a.add").click(function() {
  161. var data = {
  162. key: "",
  163. value: ""
  164. }, newTr = addColumn(data);
  165. var tbody = $('#option-table>tbody');
  166. tbody.append(newTr);
  167. });
  168. $("#fromType").change(function(){
  169. var me = $(this);
  170. var opt = me.find('option:selected');
  171. var type = opt.attr("type");
  172. if(type =='script'){
  173. var fromTypeScriptTr = $("#fromTypeScriptTr").show();
  174. }else{
  175. var fromTypeScriptTr = $("#fromTypeScriptTr").hide();
  176. }
  177. })
  178. }
  179. //获取所有验证规则
  180. function getAllRules(){
  181. var url=__ctx+"/platform/form/bpmFormRule/getAllRules.ht";
  182. $.get(url,function(data){
  183. if(!data)return;
  184. var html=['<th>验证规则:</th><td colspan="3"><select eid="content" prenode="valueFrom"><option value="">无</option>'];
  185. for(var i=0,c;c=data[i++];){
  186. html.push('<option value="'+c.name+'">'+c.name+'</option>');
  187. }
  188. html.push('</select></td></td>');
  189. $(".valuefrom0").html(html.join(''));
  190. getAllSerialnum();
  191. });
  192. };
  193. //获取所有流水号
  194. function getAllSerialnum(){
  195. var url=__ctx+"/platform/system/identity/getAllIdentity.ht";
  196. $.get(url,function(data){
  197. if(!data)return;
  198. var html=['<th>流水号:</th><td colspan="3"><select eid="content" prenode="valueFrom">'];
  199. for(var i=0,c;c=data[i++];){
  200. html.push('<option value="'+c.alias+'">'+c.name+'</option>');
  201. }
  202. html.push('</select><label><input eid="isShowidentity" type="checkbox" name="isShowidentity" id="isShowidentity" > 是否显示在启动流程中</label></td>');
  203. $(".valuefrom3").html(html.join(''));
  204. bindData();
  205. });
  206. };
  207. //加载完inputPanel的内容以后触发该事件
  208. function initComplete(){
  209. $("[eid='type']").bind("change",typeChange);
  210. $("[eid='value']").bind("change",valueChange);
  211. $("#isQuery").bind("click",conditionChange);
  212. $("[eid='searchFrom']").bind("change",searchFromChange);
  213. typeChange.call($("[eid='type']")[0]);
  214. };
  215. function conditionChange(){
  216. $(".condition_tr").toggleClass("hidden");
  217. };
  218. //值类型变化
  219. function typeChange(){
  220. $(".dbformat_td").html(getFormatHtml($(this).val()));
  221. var curInputType = editor.curInputType;
  222. if(curInputType=="onlinetext"||curInputType=="attachement"||curInputType=="pictureshowcontrol"){//附件设置长度为2000
  223. $("[eid='length']").val('2000');
  224. }
  225. if(curInputType=="processinstance") {
  226. $('.valuefrom0').hide();
  227. $("[eid='length']").val('2000');
  228. }
  229. };
  230. //值来源变化
  231. function valueChange(){
  232. var val = $(this).val();
  233. $("tr[class^='valuefrom']").each(function(){
  234. if($(this).attr('class').indexOf(val)>-1){
  235. $(this).removeClass('hidden');
  236. }
  237. else{
  238. $(this).addClass('hidden');
  239. }
  240. });
  241. var curInputType = editor.curInputType;
  242. if(curInputType=="processinstance" && '12'.indexOf(val)>-1) {
  243. $('.trScriptID').removeClass('hidden');
  244. }else{
  245. $('.trScriptID').addClass('hidden');
  246. }
  247. };
  248. //查询条件值来源变化
  249. function searchFromChange(){
  250. var val = $(this).val();
  251. if(val=="fromForm")
  252. $(".searchValue-td").addClass('hidden');
  253. else
  254. $(".searchValue-td").removeClass('hidden');
  255. };
  256. //修改状态下的初始化
  257. function bindData(){
  258. oldElement = null;
  259. if(!editor.curInputElement)return;
  260. var externalStr= $(editor.curInputElement).attr("external");
  261. externalStr = htmlDecode(externalStr);
  262. var external=eval("("+externalStr+")");
  263. //是否有 select 标签(下拉控件)
  264. if($("select",$(editor.curInputElement)).length ==1){
  265. if(typeof(external.options)==undefined || external.options==null || external.options == '' && external.options.length==0){
  266. external.options = new Array(); //当下拉空格为空时,设置一个空的默认值
  267. var data ={key:" ",value:"--请选择--"}; //key 为一个空格
  268. external.options.push(data)
  269. }
  270. }
  271. oldElement = editor.curInputElement;
  272. editor.curInputElement=null;
  273. bind(external);
  274. if($('#isDateString').attr('checked')=="checked"){
  275. $('#dateStrFormat').parents('span:first').show();
  276. }
  277. if($('#isCoin').attr('checked')=="checked"){
  278. //货币选择事件
  279. selectCoinChange($('#isCoin'),'isShowComdify','coinValue')
  280. }
  281. if(external.scope){
  282. var scope = external.scope;
  283. if(scope.type == 'script'){
  284. $("#fromType").val("");
  285. $("#fromTypeScriptTr").show();
  286. $("#fromScript").val(scope.value);
  287. }else{
  288. $("#fromType").val(scope.value);
  289. }
  290. }
  291. }
  292. //递归绑定值
  293. function bind(d){
  294. for (var k in d){
  295. var val= d[k];
  296. console.info(k,val);
  297. if(typeof val == 'object' && val != null){
  298. if(k=='options'){
  299. initOptionArray(val);
  300. }
  301. else{
  302. if(k!='scope'){
  303. bind(val);
  304. }
  305. }
  306. }
  307. else if(val===1){
  308. $("[eid='"+k+"']").attr("checked","checked");
  309. if(k=='isQuery'){
  310. conditionChange();
  311. }
  312. if(editor.canEditColumnNameAndType){
  313. if(k=='displayDate')
  314. $("[eid='"+k+"']").attr("disabled","disabled");
  315. }
  316. }
  317. else{
  318. if(k=='options'){
  319. var options = [],
  320. optAry = val.split('#newline#'),
  321. opt;
  322. while(opt=optAry.shift()){
  323. options.push({key:opt,value:opt});
  324. }
  325. initOptionArray(options);
  326. continue;
  327. }
  328. $("#"+k+":hidden").val(val);
  329. $("[eid='"+k+"']:visible").val(val);
  330. if(k==="dateStrFormat"){
  331. $("[eid='"+k+"']").val(val);
  332. }
  333. if(k=='type'){
  334. typeChange.call($("[eid='"+k+"']")[0]);
  335. }
  336. if(k=='value'){
  337. valueChange.call($("[eid='"+k+"']")[0]);
  338. }
  339. if(k=='searchFrom'){
  340. searchFromChange.call($("[eid='"+k+"']")[0]);
  341. }
  342. if(editor.canEditColumnNameAndType){
  343. if(k=='name'||k=='type'||k=='length'||k=='intLen'||k=='decimalLen'||k=='format'){//编辑时不能修改字段的这些属性
  344. $("[eid='"+k+"']").attr("disabled","disabled");
  345. }
  346. }
  347. }
  348. }
  349. }
  350. //选择货币事件
  351. function selectCoinChange(obj,cId,sId){
  352. if($(obj).is (":checked")){
  353. $('#'+cId).attr('checked','checked');
  354. $('#'+cId).attr('disabled','disabled');
  355. $('#'+sId).show();
  356. }else{
  357. $('#'+cId).attr('checked',false);
  358. $('#'+cId).attr('disabled',false);
  359. $('#'+sId).hide();
  360. }
  361. }
  362. //切换数据格式
  363. function getFormatHtml(type){
  364. var html=[''];
  365. switch(type){
  366. case 'varchar':
  367. html.push('长度:<input eid="length" prenode="dbType" style="width:60px;" type="text" value="50"/>');
  368. $(".defaultValue_tr").removeClass('hidden');
  369. break;
  370. case 'number':
  371. html.push('<label for="isShowComdify">千分位:<input id="isShowComdify" prenode="dbType" type="checkbox" eid="isShowComdify" value="1"></label>'
  372. +'<label for="isCoin">货币:<input id="isCoin" eid="isCoin" type="checkbox" value="1" onchange="selectCoinChange(this,\'isShowComdify\',\'coinValue\')"></label>'
  373. +'<select id="coinValue" prenode="dbType" eid="coinValue" style="width:80px;display:none"><option value="¥">¥人民币</option><option value="$">$美元</option></select>'
  374. +'<label>整数位:<input eid="intLen" prenode="dbType" style="width:30px;" type="text" value="14"/> 小数位:<input eid="decimalLen" prenode="dbType" style="width:25px;" type="text" value="0"/></label>'
  375. +'<label>数字范围:<input eid="minValue" prenode="dbType" style="width:30px;" type="text" value="0"/>,<input eid="maxValue" prenode="dbType" style="width:25px;" type="text" value="0"/></label>'
  376. );
  377. $(".defaultValue_tr").addClass('hidden');
  378. break;
  379. case 'date':
  380. html.push('<select eid="format" prenode="dbType"><option value="yyyy-MM-dd">yyyy-MM-dd</option><option value="yyyy-MM-dd HH:mm:ss">yyyy-MM-dd HH:mm:ss</option><option value="yyyy-MM-dd HH:mm:00">yyyy-MM-dd HH:mm:00</option><option value="HH:mm:ss">HH:mm:ss</option></select><br /><label for="displayDate"><input id="displayDate" eid="displayDate" prenode="dbType" type="checkbox" />当前时间</label>');
  381. $(".defaultValue_tr").addClass('hidden');
  382. break;
  383. }
  384. return html.join('');
  385. };
  386. dialog.onok = function() {
  387. var rtn=valid.valid();
  388. if(!rtn)return false;
  389. var data=[];
  390. $("#inputPanel").find("*:visible").each(function(){
  391. var id = $(this).attr("eid"),
  392. val = $(this).val(),
  393. dictType=$("#dictType").val(),
  394. prenode = $(this).attr("prenode");
  395. if($(this).attr("type")){
  396. if($(this).attr("type")=="checkbox"||$(this).attr("type")=="radio"){
  397. val = (!!$(this).attr("checked")) ? 1 : 0;
  398. }
  399. }
  400. //数据字典取值
  401. if(dictType){
  402. data.push({id:'dictType',val:dictType});
  403. }
  404. if((id&&val)||(id&&val==0)){
  405. var item = {id:id,val:val};
  406. if(prenode) item.prenode = prenode;
  407. data.push(item);
  408. }
  409. });
  410. var options = getOptionData();
  411. if(options && options.length > 0){
  412. data.push({id:'options',val:options});
  413. }
  414. var scope = getUserScope();
  415. if(scope){
  416. data.push({id:'scope',val:scope});
  417. }
  418. //回填字段名
  419. if($(editor.target).is('td')){
  420. var comment = $("#inputPanel").find('input[eid="comment"]').val();
  421. if(comment){
  422. var target = $(editor.target).prev();
  423. if(target && target.hasClass("formTitle")){
  424. if($("span",target).length==0 && $("div", target).length==0){
  425. target.text(comment+":");
  426. }
  427. }
  428. }
  429. }
  430. editor.execCommand(editor.curInputType,data,oldElement);
  431. };
  432. //解码单引号和双引号
  433. function htmlDecode(str){
  434. return str.replace(/\&quot\;/g, '\"').replace(/\&\#39\;/g, '\'');
  435. };
  436. function getUserScope(){
  437. var scope = "";
  438. var opt = $("select#fromType").find('option:selected');
  439. if(opt[0]){
  440. scope={};
  441. var fromType = opt.attr("type");
  442. var typeVal = null;
  443. if(fromType == 'script'){
  444. typeVal = $("#fromScript").val();
  445. typeVal = typeVal.replace(/\'/g, '\"');
  446. }else{
  447. typeVal = opt.val();
  448. }
  449. scope.type = fromType;
  450. scope.value = typeVal;
  451. }
  452. return scope;
  453. };
  454. function getKeyName(obj){
  455. var value=$(obj).val()
  456. Share.getPingyin({
  457. input:value,
  458. postCallback:function(data){
  459. if($(obj).attr("eid").value=="tablememo"){
  460. var inputObj= $("input[eid='tablename']");
  461. }else{
  462. var inputObj= $("input[eid='name']");
  463. }
  464. if(inputObj.val().length<1){
  465. inputObj.val(data.output);
  466. }
  467. }
  468. });
  469. }
  470. //自动生成子表的表名
  471. function getTableName(obj){
  472. var value=$(obj).val()
  473. Share.getPingyin({
  474. input:value,
  475. postCallback:function(data){
  476. var inputObj= $("input[eid='tablename']");
  477. if(inputObj.val().length<1){
  478. inputObj.val(data.output);
  479. }
  480. }
  481. });
  482. }
  483. //调用常用脚本对话框
  484. function addScript(obj){
  485. var _this = $(obj);
  486. var target = _this.closest('td').find('textarea')[0];
  487. ScriptDialog({
  488. callback:function(data){
  489. jQuery.insertText(target,data);
  490. }
  491. });
  492. };
  493. //处理人员选择器单选时显示当前人员
  494. function handCurUser(obj){
  495. var me=$(obj);
  496. var checked=me.attr('checked');
  497. var curUserCheckbox=me.parent('label').next();
  498. if(checked){
  499. curUserCheckbox.show();
  500. }else{
  501. curUserCheckbox.hide();
  502. }
  503. };
  504. </script>
  505. </head>
  506. <body>
  507. <div id="inputPanel">
  508. </div>
  509. </body>
  510. </html>