taskDecomposition.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. $(function(){
  2. leftAutoHeight();
  3. $("#layout").ligerLayout({ leftWidth: 510,
  4. onHeightChanged:function(){
  5. leftAutoHeight();
  6. },
  7. onLeftCollapse : function(isHidden){
  8. $(window).resize();
  9. }
  10. });
  11. $("#taskContent").xheditor({tools:"simple",height:"400"});
  12. initPlanStartTime();
  13. initPlanFinTime();
  14. initPlanStartDate();
  15. initPlanFinDate();
  16. showProjeNodeListTab();
  17. $("#saveBtn").bind("click", function(){
  18. submitTask(true);
  19. });
  20. loadUserTree("create");
  21. $("#pageloading").hide();
  22. });
  23. var isGettingData = false; // 获取数据时,需要控制重复发请求时使用
  24. function loadUserTree(action){
  25. if(action == "create"){
  26. loadTypeTree("developUserBtn",{type:"user",tab:7,backId:"developUserId",backName:"developUserName",root:projId});
  27. }else{
  28. loadTypeTree("developUserBtn",{type:"singleuser",tab:7,backId:"developUserId",backName:"developUserName",root:projId});
  29. }
  30. }
  31. function showProjeNodeListTab(){
  32. var curProjNodeId; // 项目当前阶段id
  33. var projNodeListTabManager = $("#projNodeListTab").ligerTab({height:""});
  34. $("#projNodeId").find("option").each(function(index, opt){
  35. var jqueryOpt = $(opt);
  36. var projNodeId = jqueryOpt.val();
  37. var projNodeName = jqueryOpt.text();
  38. var title = jqueryOpt.attr("title");
  39. projNodeListTabManager.addTabItem({
  40. tabid : "projNode_" + projNodeId,
  41. text: projNodeName,
  42. showClose:false
  43. });
  44. if(jqueryOpt.attr("selected")){
  45. curProjNodeId = projNodeId;
  46. }
  47. });
  48. // 绑定选择事件必须在创建好tab以后,否则将出现重复调用列表查询
  49. projNodeListTabManager.set("onAfterSelectTabItem",showTaskDecompositionNodeList2Table);
  50. // 自动显示项目当前阶段的任务分解情况
  51. projNodeListTabManager.selectTabItem("projNode" + "_" + curProjNodeId);
  52. }
  53. function showTaskDecompositionNodeList2Table(){
  54. var projNodeListTabManager = $("#projNodeListTab").ligerGetTabManager();
  55. var projNodeId = projNodeListTabManager.getSelectedTabItemID().split("_")[1];
  56. var taskDecompositionNodeListTableId = "decompositionNodeList_" + projNodeId;
  57. buildTaskDecompositionNodeListTable(taskDecompositionNodeListTableId);
  58. // 自动将任务填写区域的项目阶段id设置为当前选中的阶段
  59. $("#projNodeId").val(projNodeId);
  60. $("#projNodeId").change();
  61. }
  62. // 当修改、新增任务分解节点时调用
  63. function refreshTaskDecompositionNodeTable(projNodeId){
  64. $("#projNodeListTab").ligerGetTabManager().selectTabItem("projNode" + "_" + projNodeId);
  65. }
  66. function changeListTable() {
  67. if($("#taskDecompositionId").val() == ''){
  68. var uri = "TaskDecompositionAction.do?task=createTaskDecomposition&projId=" + $('#taskDecompositionId').find("option:selected").attr("projId");
  69. addTab(getCurWindowId(),"新增任务分解", uri, true,true);
  70. }else {
  71. var uri = "TaskDecompositionAction.do?task=editTaskDecomposition&taskDecompositionId=" + $("#taskDecompositionId").val();
  72. addTab(getCurWindowId(),"继续任务分解", uri, true,true);
  73. }
  74. }
  75. function buildTaskDecompositionNodeListTable(taskDecompositionNodeListTableId){
  76. var projNodeListTabManager = $("#projNodeListTab").ligerGetTabManager();
  77. var projNodeId = taskDecompositionNodeListTableId.split("_")[1];
  78. var viewUnprovTask = $("#viewUnprovTask").attr("checked");
  79. var taskDecompositionNodeListTable = $("#" + taskDecompositionNodeListTableId);
  80. var param = {"taskDecompositionId" : $("#taskDecompositionId").val(), "projNodeId" : projNodeId, "viewUnprovTask" : viewUnprovTask};
  81. if(taskDecompositionNodeListTable.size() == 0){
  82. // 等于0时,表示该列表尚未创建
  83. $("li[tabid='" + projNodeListTabManager.getSelectedTabItemID() + "']").after('<li><input type=\"checkbox\" value=\"1\" id=\"viewUnprovTask\" onclick=\"showTaskDecompositionNodeList2Table()\"/><label for=\"viewUnprovTask\">' +
  84. '隐藏已派发</label></li>')
  85. $("div[tabid='" + projNodeListTabManager.getSelectedTabItemID() + "']").append("<div id='"+taskDecompositionNodeListTableId+"'></div>");
  86. // 创建表格
  87. $("#" + taskDecompositionNodeListTableId).ligerGrid({
  88. columns: [
  89. { display: '任务名称', name: 'task_name', align: 'left', width: 140
  90. ,render: function (row){
  91. var html = '<span title="'+row.task_name+'">' + row.task_name + '</span>';
  92. return html;
  93. }
  94. },
  95. { display: '负责人', name: 'develop_user',minWidth:60, width:60 ,align: 'center'
  96. ,render: function (row){
  97. var html = '<a href="#" onclick="seeUser(' + row.develop_user_id + ')">' + row.develop_user + '</a>';
  98. return html;
  99. }
  100. },
  101. // { display: '工期', name: 'plan_proj_time', width:50,align: 'center' },
  102. { display: '计划开始时间', name: 'plan_start_date', width:85,align: 'center' , format:'yyyy-MM-dd hh:mm:ss'},
  103. { display: '计划完成时间', name: 'plan_fin_date', width:85,align: 'center' , format:'yyyy-MM-dd hh:mm:ss' },
  104. { display: '任务派发', name: 'prov_task_state_text', width:60,align: 'center'
  105. ,render: function (row)
  106. {
  107. var html = "";
  108. if(row.prov_task_state){
  109. if(row.prov_task_lose_flag == 0){
  110. html = displayTaskState4User(row, false);
  111. }else{
  112. html = "已撤销";
  113. }
  114. }else{
  115. html = "未派发";
  116. }
  117. return html;
  118. }
  119. },
  120. { display: '操作', name: '', width:95,align: 'center'
  121. ,render: function (row, index)
  122. {
  123. var html = '';
  124. if(row.prov_task_state || isLock == "true"){
  125. if(row.prov_task_lose_flag == 0){
  126. switch (row.prov_task_state) {
  127. case "1" :
  128. case "2" :
  129. case "3" :
  130. case "4" :
  131. case "6" : html += '<a href="javascript:;" onclick="editTaskDecompositionNode('+row.universalid+')">修改</a>&nbsp;';break;
  132. default: break;
  133. }
  134. }
  135. html += '<a href="javascript:;" onclick="seeTaskDecompositionNode('+row.universalid+')">查看</a>';
  136. }else{
  137. html += '<a href="javascript:;" onclick="editTaskDecompositionNode('+row.universalid+')">修改</a>&nbsp;'
  138. html += '<a href="javascript:;" onclick="deleteTaskDecompositionNode('+ row.universalid +','+ index +')">删除</a>';
  139. }
  140. return html;
  141. }
  142. }
  143. ],
  144. pageSize:20,
  145. parms : param,
  146. url: "TaskDecompositionAction.do?task=getTaskDecompositionNodeList" ,
  147. pageParmName: 'curPage',
  148. pagesizeParmName: 'pageSize',
  149. width: '99.5%',
  150. height: '99%',
  151. checkbox: false,
  152. rownumbers:true,
  153. enabledSort:true,
  154. method:"post",
  155. frozenRownumbers:true,
  156. onAfterShowData:function(){
  157. },
  158. onError:function(err){
  159. alert("获取数据失败,请刷新页面后重试!");
  160. }
  161. });
  162. }else{
  163. // 已经创建的情况下只刷新列表
  164. param.url="TaskDecompositionAction.do?task=getTaskDecompositionNodeList&time=" + new Date().getTime();
  165. $("#" + taskDecompositionNodeListTableId).ligerGetGridManager().set("parms", param);
  166. $("#" + taskDecompositionNodeListTableId).ligerGetGridManager().loadData();
  167. }
  168. }
  169. function submitTask(isAdd){
  170. var isPass = checkForm();
  171. if(isPass == true){
  172. var taskJson = {projId:projId,
  173. taskDecompositionNodeId:$("#taskDecompositionNodeId").val(),
  174. taskName:encodeURI($("#taskName").val()),
  175. projNodeId:$("#projNodeId").val(),
  176. taskType:$("#taskType").val(),
  177. taskContent:$("#taskContent").val(),
  178. developUserId:$("#developUserId").val(),
  179. planStartDate:$("#planStartDate").val(),
  180. planStartTime:$("#planStartTime").val(),
  181. planFinDate:$("#planFinDate").val(),
  182. planFinTime:$("#planFinTime").val(),
  183. taskPriority:$("#taskPriority").val(),
  184. taskLevel:$("#taskLevel").val(),
  185. planManHour:$("#planManHour").val(),
  186. taskDoc:getTaskDocId(),
  187. taskDecompositionId:$("#taskDecompositionId").val()};
  188. $.ajax({
  189. type:"POST",
  190. url:"TaskDecompositionAction.do?task=saveTaskDecompositionNode&time=" + new Date().getTime(),
  191. timeout:30000,
  192. cache:false,
  193. dataType:"json",
  194. data:taskJson,
  195. beforeSend:function(){
  196. $(":button").attr("disabled", true);
  197. $("#noticeMsg").html("正在保存中,请稍后……").show();
  198. },
  199. success:function(data){
  200. var error = data.error;
  201. if(error){
  202. showAjaxError(null, error);
  203. $("#noticeMsg").html("").hide();
  204. }else{
  205. refreshTaskDecompositionNodeTable(taskJson.projNodeId);
  206. if(isAdd){
  207. $("#taskName").val("");
  208. $("#taskContent").val("");
  209. editViewFileHtml("", "taskDoc");
  210. }
  211. $("#noticeMsg").html("保存成功!").fadeOut("slow");
  212. openSaveAndProvDialog(); //保存任务分解并派发任务
  213. }
  214. },
  215. error:function(err){
  216. $("#noticeMsg").html("").hide();
  217. showAjaxError(err);
  218. },
  219. complete:function(){
  220. $(":button").attr("disabled", false);
  221. }
  222. });
  223. // taskJson.projId encodeURI clearControl
  224. }
  225. }
  226. function editTaskDecompositionNode(taskDecompositionNodeId){
  227. if(isGettingData == true){
  228. return;
  229. }
  230. $.ajax({
  231. type:"POST",
  232. url:"TaskDecompositionAction.do?task=editTaskDecompositionNode&time=" + new Date().getTime(),
  233. timeout:30000,
  234. cache:false,
  235. dataType:"json",
  236. data:{"taskDecompositionNodeId":taskDecompositionNodeId},
  237. beforeSend:function(){
  238. $(":button").attr("disabled", true);
  239. $("#noticeMsg").html("正在获取数据,请稍后……").show();
  240. $("#layout").ligerGetLayoutManager().setLeftCollapse(false);
  241. isGettingData = true;
  242. },
  243. success:function(data){
  244. var error = data.error;
  245. if(error){
  246. showAjaxError(null, error);
  247. $("#noticeMsg").html("").hide();
  248. }else{
  249. $("#noticeMsg").fadeOut("slow");
  250. resetTaskForm();
  251. fillTaskForm(data.success, 2);
  252. // 编辑任务时只允许选择一个责任人
  253. loadUserTree("update");
  254. }
  255. },
  256. error:function(err){
  257. $("#noticeMsg").html("").hide();
  258. showAjaxError(err);
  259. },
  260. complete:function(){
  261. $(":button").attr("disabled", false);
  262. isGettingData = false;
  263. }
  264. });
  265. }
  266. function seeTaskDecompositionNode(taskDecompositionNodeId){
  267. if(isGettingData == true){
  268. return;
  269. }
  270. $.ajax({
  271. type:"POST",
  272. url:"TaskDecompositionAction.do?task=editTaskDecompositionNode&time=" + new Date().getTime(),
  273. timeout:30000,
  274. cache:false,
  275. dataType:"json",
  276. data:{"taskDecompositionNodeId":taskDecompositionNodeId},
  277. beforeSend:function(){
  278. $(":button").attr("disabled", true);
  279. $("#layout").ligerGetLayoutManager().setLeftCollapse(false);
  280. $("#noticeMsg").html("正在获取数据,请稍后……").show();
  281. isGettingData = true;
  282. },
  283. success:function(data){
  284. var error = data.error;
  285. if(error){
  286. showAjaxError(null, error);
  287. $("#noticeMsg").html("").hide();
  288. }else{
  289. $("#noticeMsg").fadeOut("slow");
  290. resetTaskForm();
  291. fillTaskForm(data.success, 0);
  292. // 查看的任务不允许提交保存
  293. $("#saveBtn").attr("disabled" ,true);
  294. }
  295. },
  296. error:function(err){
  297. $("#noticeMsg").html("").hide();
  298. showAjaxError(err);
  299. },
  300. complete:function(){
  301. $(":button").attr("disabled", false);
  302. $("#saveBtn").attr("disabled" ,true);
  303. $("#developUserBtn").attr("disabled" ,true);
  304. isGettingData = false;
  305. }
  306. });
  307. }
  308. function deleteTaskDecompositionNode(taskDecompositionNodeId, index){
  309. if(confirm("是否删除该项任务?")){
  310. $.ajax({
  311. type:"POST",
  312. url:"TaskDecompositionAction.do?task=deleteTaskDecompositionNode&time=" + new Date().getTime(),
  313. timeout:30000,
  314. cache:false,
  315. dataType:"json",
  316. data:{"taskDecompositionNodeId":taskDecompositionNodeId},
  317. beforeSend:function(){
  318. $(":button").attr("disabled", true);
  319. $("#noticeMsg").html("正在删除,请稍后……").show();
  320. },
  321. success:function(data){
  322. var error = data.error;
  323. if(error){
  324. showAjaxError(null, error);
  325. $("#noticeMsg").html("").hide();
  326. }else{
  327. $("#noticeMsg").html("删除成功!").fadeOut("slow");
  328. var curTable = getCurTaskDecompositionNodeListTable();
  329. curTable.remove(curTable.getRow(index));
  330. resetTaskForm();
  331. }
  332. },
  333. error:function(err){
  334. $("#noticeMsg").html("").hide();
  335. showAjaxError(err);
  336. },
  337. complete:function(){
  338. $(":button").attr("disabled", false);
  339. }
  340. });
  341. }
  342. }
  343. /**
  344. * 获取当前任务分解节点列表表格对象(ligerUi)
  345. */
  346. function getCurTaskDecompositionNodeListTable(){
  347. var projNodeListTabManager = $("#projNodeListTab").ligerGetTabManager();
  348. var projNodeId = projNodeListTabManager.getSelectedTabItemID().split("_")[1];
  349. var taskDecompositionNodeListTableId = "decompositionNodeList_" + projNodeId;
  350. return $("#" + taskDecompositionNodeListTableId).ligerGetGridManager();
  351. }
  352. function save(){
  353. $.ajax({
  354. type:"POST",
  355. url:"TaskDecompositionAction.do?task=saveTaskDecomposition&time=" + new Date().getTime(),
  356. timeout:30000,
  357. cache:false,
  358. dataType:"json",
  359. data:{"taskDecompositionId":$("#taskDecompositionId").val()},
  360. beforeSend:function(){
  361. $(":button").attr("disabled", true);
  362. $.ligerDialog.waitting("正在提交中,请稍候...");
  363. },
  364. success:function(data){
  365. var error = data.error;
  366. if(error){
  367. showAjaxError(null, error);
  368. }else{
  369. $.ligerDialog.open({content:"保存成功!", "title":"保存成功", "type":"success",allowClose:false,
  370. buttons: [ { text: '确定', onclick: function (item, dialog) { refreshWindow(); } } ]
  371. });
  372. }
  373. },
  374. error:function(err){
  375. showAjaxError(err);
  376. },
  377. complete:function(){
  378. $.ligerDialog.closeWaitting();
  379. $(":button").attr("disabled", false);
  380. }
  381. });
  382. }
  383. var saveAndSubmitDialogContent = '<div id="saveAndSubmitDialog" class="forum-container2">'
  384. + '<table class="dialogTable">'
  385. + '<tr><td class="left-text">标题<font color="red">*</font>:</td>'
  386. + '<td><textarea rows="6" cols="45" id="saveAndSubmitTitle"></textarea>'
  387. + '<div id="saveAndSubmitTitleMsg"></div></td></tr>'
  388. + '<tr><td class="left-text">审核人<font color="red">*</font>:</td>'
  389. + '<td><select id="verifyUser">'
  390. + '<option value="0">部门主管审核</option>'
  391. + '<option value="1">自定义</option>'
  392. + '</select>&nbsp;'
  393. + '<input type="text" id="verifyUserName" class="input" readonly="readonly" style="width:130px;"/>&nbsp;'
  394. + '<input type="hidden" id="verifyUserId" />'
  395. + '<input type="button" id="verifyUserSelectBtn" value="请选择" class="l-button" style="display:none"/>'
  396. + '<div id="verifyUserIdMsg" ></div></td></tr>'
  397. + '<tr><td class="l-table-edit-text" style="font-weight: bold">提醒方式:</td>'
  398. + '<td class="l-table-edit-td" nowrap="nowrap" id="saveAndSubmitMsg"></td></tr>'
  399. + '<tr><td colspan="2" style="text-align: center"><br/>'
  400. + '<input type="button" id="verifyUserSubmitBtn" value="提交" class="l-button" />&nbsp;&nbsp;&nbsp;&nbsp;'
  401. + '<input type="button" id="verifyUserCancelBtn" value="取消" class="l-button" />'
  402. + '</td></tr>'
  403. + '</table></div>';
  404. var saveAndSubmitDialog;
  405. function openSaveAndSubmitDialog(){
  406. if(saveAndSubmitDialog == undefined){
  407. saveAndSubmitDialog = $.ligerDialog.open({
  408. content: saveAndSubmitDialogContent,
  409. width:450,
  410. modal: true,
  411. title:"保存并提交审核",
  412. allowClose:true,
  413. isHidden:false,
  414. onClose:function(dialog, options){
  415. saveAndSubmitDialog = undefined;
  416. return true;
  417. }
  418. });
  419. // 创建提醒方式
  420. tmsMsgRemindUtil.createPanel({id:"saveAndSubmitMsg", panelId:"saveAndSubmitMsgPanel"});
  421. // 初始化对话框数据
  422. if(!deptMgrName || !deptMgrId){
  423. deptMgrName = "您的部门没有设置主管";
  424. deptMgrId = "";
  425. }
  426. $("#verifyUserName").val(deptMgrName);
  427. $("#verifyUserId").val(deptMgrId);
  428. $("#verifyUser").bind("change", function(){
  429. var selectValue = $("#verifyUser").val();
  430. if(selectValue == 0){
  431. $("#verifyUserName").val(deptMgrName);
  432. $("#verifyUserId").val(deptMgrId);
  433. $("#verifyUserSelectBtn").hide();
  434. }else{
  435. $("#verifyUserName").val("");
  436. $("#verifyUserId").val("");
  437. $("#verifyUserSelectBtn").show();
  438. loadTypeTree("verifyUserSelectBtn",{type:"singleuser",tab:"1,2",backId:"verifyUserId",backName:"verifyUserName"});
  439. }
  440. });
  441. $("#verifyUserSubmitBtn").bind("click", saveAndSubmit);
  442. $("#verifyUserCancelBtn").bind("click", function(){saveAndSubmitDialog.close();});
  443. }else{
  444. cancelTaskDialog.show();
  445. }
  446. }
  447. function saveAndSubmit(){
  448. var rs = $.validate({
  449. name : "saveAndSubmitTitle",
  450. model : [
  451. {type : "require",
  452. msg : "请填写标题!",
  453. msgBox: "saveAndSubmitTitleMsg"
  454. },
  455. {type : "len",
  456. min : 0,
  457. max : 100,
  458. msg : "标题须少于100个字符,一个汉字占2个字符!",
  459. msgBox: "saveAndSubmitTitleMsg"
  460. }]
  461. });
  462. rs = $.validate({
  463. name : "verifyUserId",
  464. model : [ {
  465. type : "require",
  466. msg : "请选择审核人!",
  467. msgBox: "verifyUserIdMsg"
  468. }]
  469. }) && rs;
  470. if(rs){
  471. var title = encodeURI($("#saveAndSubmitTitle").text());
  472. var verifyUserId = $("#verifyUserId").val() * -1;
  473. var msgType = tmsMsgRemindUtil.getSelectResult("saveAndSubmitMsgPanel");
  474. $.ajax({
  475. type:"POST",
  476. url:"TaskDecompositionAction.do?task=saveAndSubmitTaskDecomposition&time=" + new Date().getTime(),
  477. timeout:30000,
  478. cache:false,
  479. dataType:"json",
  480. data:{"taskDecompositionId":$("#taskDecompositionId").val(), title:title, projId:projId, verifyUserId:verifyUserId, msgType:msgType},
  481. beforeSend:function(){
  482. $(":button").attr("disabled", true);
  483. saveAndSubmitDialog.hidden();
  484. $.ligerDialog.waitting("正在提交中,请稍候...");
  485. },
  486. success:function(data){
  487. var error = data.error;
  488. if(error){
  489. saveAndSubmitDialog.show();
  490. showAjaxError(null, error);
  491. }else{
  492. $.ligerDialog.open({content:"提交成功!", "title":"提交成功", "type":"success",allowClose:false,
  493. buttons: [ { text: '确定', onclick: function (item, dialog) { refreshWindow(); } }
  494. ]
  495. });
  496. }
  497. },
  498. error:function(err){
  499. saveAndSubmitDialog.show();
  500. showAjaxError(err);
  501. },
  502. complete:function(){
  503. $.ligerDialog.closeWaitting();
  504. $(":button").attr("disabled", false);
  505. }
  506. });
  507. }
  508. }
  509. var saveAndProvContent = '<div id="saveAndProvDialog" class="forum-container2">'
  510. + '<table class="dialogTable">'
  511. + '<tr><td class="left-text">提示:</td><td class="save-and-prov-notice">当前所有<font color=\"red\">未派发</font>的任务将被统一派发给对应的负责人办理。<br/>请选择提醒方式,点击确定后开始派发。</td></tr>'
  512. + '<tr><td class="left-text">提醒方式:</td>'
  513. + '<td class="l-table-edit-td" nowrap="nowrap" id="saveAndProvDialogMsg"></tr>'
  514. + '<tr><td colspan="2" style="text-align: center"><br/>'
  515. + '<input type="button" id="saveAndProvSubmitBtn" value="确定" class="l-button" />&nbsp;&nbsp;&nbsp;&nbsp;'
  516. + '<input type="button" id="saveAndProvCancelBtn" value="取消" class="l-button" />'
  517. + '</td></tr>'
  518. + '</table></div>';
  519. var saveAndProvDialog;
  520. function openSaveAndProvDialog(){
  521. if(saveAndProvDialog == undefined){
  522. saveAndProvDialog = $.ligerDialog.open({
  523. content: saveAndProvContent,
  524. width: 450,
  525. modal: true,
  526. title: "保存并派发任务",
  527. allowClose: true,
  528. isHidden: false,
  529. onClose: function(dialog, options){
  530. saveAndProvDialog = undefined;
  531. return true;
  532. }
  533. });
  534. // 创建提醒方式
  535. tmsMsgRemindUtil.createPanel({id:"saveAndProvDialogMsg", panelId:"saveAndProvDialogMsgPanel"});
  536. $("#saveAndProvSubmitBtn").bind("click", function(){saveAndProv();});
  537. $("#saveAndProvCancelBtn").bind("click", function(){saveAndProvDialog.close();});
  538. }else{
  539. saveAndProvDialog.show();
  540. }
  541. }
  542. function saveAndProv(){
  543. var msgType = tmsMsgRemindUtil.getSelectResult("saveAndProvDialogMsgPanel");
  544. $.ajax({
  545. type:"POST",
  546. url:"TaskDecompositionAction.do?task=saveAndProvTask&time=" + new Date().getTime(),
  547. timeout:30000,
  548. cache:false,
  549. dataType:"json",
  550. data:{"taskDecompositionId":$("#taskDecompositionId").val(), msgType:msgType},
  551. beforeSend:function(){
  552. $(":button").attr("disabled", true);
  553. saveAndProvDialog.hidden();
  554. $.ligerDialog.waitting("当派发任务较多时,处理时间会比较慢,请耐心等待...");
  555. },
  556. success:function(data){
  557. var error = data.error;
  558. if(error){
  559. saveAndProvDialog.show();
  560. showAjaxError(null, error);
  561. }else{
  562. $.ligerDialog.open({content:"提交成功!", "title":"提交成功", "type":"success",allowClose:false,
  563. buttons: [{text: '确定',
  564. onclick: function(item, dialog){
  565. refreshWindow();
  566. }
  567. }]
  568. });
  569. }
  570. },
  571. error:function(err){
  572. saveAndProvDialog.show();
  573. showAjaxError(err);
  574. },
  575. complete:function(){
  576. $.ligerDialog.closeWaitting();
  577. $(":button").attr("disabled", false);
  578. }
  579. });
  580. }
  581. ///////////////////////////////////
  582. //////////// 页面控制//////////////
  583. ///////////////////////////////////
  584. function leftAutoHeight(){
  585. $("#taskForm").css("height", $(window).height()- 40 + "px");
  586. }
  587. function initPlanStartDate(initValue){
  588. var id = "planStartDate";
  589. if(initValue){
  590. document.getElementById(id).value = initValue;
  591. }else{
  592. document.getElementById(id).value = getDates(new Date());
  593. }
  594. $("#" + id).ligerDateEditor({ labelAlign: 'left', width:140});
  595. }
  596. function initPlanFinDate(initValue){
  597. var id = "planFinDate";
  598. if(initValue){
  599. document.getElementById(id).value = initValue;
  600. }else{
  601. document.getElementById(id).value = getDates(new Date());
  602. }
  603. $("#" + id).ligerDateEditor({ labelAlign: 'left', width:140});
  604. }
  605. function initPlanStartTime(initValue){
  606. var id = "planStartTime";
  607. createHourOption4Select(id);
  608. if(initValue){
  609. document.getElementById(id).value = initValue;
  610. }else{
  611. document.getElementById(id).value = defaultWorkStartTime;
  612. }
  613. // $("#" + id).ligerComboBox({width:70,slide:false}); 性能消耗太大
  614. }
  615. function initPlanFinTime(initValue){
  616. var id = "planFinTime";
  617. createHourOption4Select("planFinTime");
  618. if(initValue){
  619. document.getElementById(id).value = initValue;
  620. }else{
  621. document.getElementById(id).value = defaultWorkEndTime;
  622. }
  623. // $("#" + id).ligerComboBox({width:70,slide:false}); 性能消耗太大
  624. }
  625. // 修改者 yanwp 2013-4-12 任务分解
  626. function onchange4DevelopUser(){
  627. var developUserId = $("#developUserId").val();
  628. if(developUserId && developUserId.indexOf(",") != -1){
  629. if(developUserId.split(",").length > 21){ //任务分解 个人上限判断
  630. $("#developUserWarn").show();
  631. $("#developUserNotice").hide();
  632. $("#saveBtn").attr("disabled", true);
  633. }else{
  634. $("#developUserNotice").show();
  635. $("#developUserWarn").hide();
  636. $("#saveBtn").attr("disabled", false);
  637. }
  638. }else{
  639. $("#developUserWarn").hide();
  640. $("#developUserNotice").hide();
  641. $("#saveBtn").attr("disabled", false);
  642. }
  643. }
  644. function getTaskDocId(){
  645. var taskDocList = document.getElementsByName("taskDoc");
  646. var taskDoc = "";
  647. for(var i = 0; i < taskDocList.length; i++){
  648. taskDoc += "," + taskDocList[i].value;
  649. }
  650. if(taskDoc.length > 0){
  651. taskDoc = taskDoc.substring(1, taskDoc.length);
  652. }
  653. return taskDoc;
  654. }
  655. function checkForm() {
  656. var rs = $.validate({
  657. name : "projNodeId",
  658. model : [ {
  659. type : "require",
  660. msg : "请选择项目阶段!",
  661. msgBox : "projNodeIdMsg"
  662. }]
  663. });
  664. rs = $.validate({
  665. name : "taskName",
  666. model : [ {
  667. type : "require",
  668. msg : "请填写任务名称!",
  669. msgBox: "taskNameMsg"
  670. } , {
  671. type : "len",
  672. min : 1,
  673. max : 40,
  674. msg : "任务名称须少于20个汉字!",
  675. msgBox: "taskNameMsg"
  676. }]
  677. }) && rs;
  678. rs = $.validate({
  679. name : "taskType",
  680. model : [ {
  681. type : "require",
  682. msg : "请选择任务类型!",
  683. msgBox: "taskTypeMsg"
  684. }]
  685. }) && rs;
  686. rs = $.validate({
  687. name : "taskContent",
  688. model : [ {
  689. type : "require",
  690. msg : "请填写任务描述!",
  691. msgBox:"taskContentMsg"
  692. },
  693. // {
  694. // type : "len",
  695. // min : 1,
  696. // max : 4000,
  697. // msg : "任务描述内容太长,请减少到2000个汉字以内!",
  698. // msgBox:"taskContentMsg"
  699. // }
  700. ]
  701. }) && rs;
  702. rs = $.validate({
  703. name : "planStartDate",
  704. model : [ {
  705. type : "require",
  706. msg : "请填写计划开始时间!",
  707. msgBox:"planStartDateBox"
  708. }]
  709. }) && rs;
  710. rs = $.validate({
  711. name : "planFinDate",
  712. model : [ {
  713. type : "require",
  714. msg : "请填写计划结束始时间!",
  715. msgBox:"planFinDateMsg"
  716. }]
  717. }) && rs;
  718. rs = $.validate({
  719. name : "developUserName",
  720. model : [ {
  721. type : "require",
  722. msg : "请选择责任人!",
  723. msgBox:"developUserNameMsg"
  724. } ]
  725. }) && rs;
  726. rs = $.validate({
  727. name : "planManHour",
  728. model : [ {
  729. type : "regex",
  730. regex: new RegExp("[1-9]\d{0,}"),
  731. msg : "工时必须是大于0的数字"
  732. } ]
  733. }) && rs;
  734. var planStartDate = $('#planStartDate').val();
  735. var planFinDate=$('#planFinDate').val();
  736. var newtime=new Date(planStartDate.split("-")[0],planStartDate.split("-")[1],planStartDate.split("-")[2],"00","00","00");
  737. var oldtime=new Date(planFinDate.split("-")[0],planFinDate.split("-")[1],planFinDate.split("-")[2],"00","00","00");
  738. var diff = (oldtime.valueOf()-newtime.valueOf())/(1000*3600*24) ;
  739. var days=parseInt(diff,10);
  740. if(days<0){
  741. alert('计划开始时间与计划结束时间选择不对');
  742. return false;
  743. }
  744. if (rs) {
  745. return true;
  746. }
  747. return false;
  748. }
  749. function fillTaskForm(taskDecompositionNode, isEdit){
  750. if(taskDecompositionNode){
  751. $("#taskDecompositionNodeId").val(taskDecompositionNode.universalid);
  752. $("#taskName").val(taskDecompositionNode.task_name);
  753. $("#projNodeId").val(taskDecompositionNode.proj_node_id);
  754. $("#taskType").val(taskDecompositionNode.task_type);
  755. $("#taskContent").val(taskDecompositionNode.task_content);
  756. $("#taskPriority").val(taskDecompositionNode.task_priority);
  757. $("#taskLevel").val(taskDecompositionNode.task_level);
  758. $("#planManHour").val(taskDecompositionNode.plan_man_hour);
  759. $("#developUserId").val("-" + taskDecompositionNode.develop_user_id);
  760. $("#developUserName").val(taskDecompositionNode.develop_user);
  761. // 日期值需要特殊处理
  762. $("#planStartDate").val(taskDecompositionNode.plan_start_date.substring(0, 10));
  763. $("#planStartTime").val(taskDecompositionNode.plan_start_date.substring(11, 19)); //.ligerGetComboBoxManager().setSelect(); 性能消耗太大
  764. $("#planFinDate").val(taskDecompositionNode.plan_fin_date.substring(0, 10));
  765. $("#planFinTime").val(taskDecompositionNode.plan_fin_date.substring(11, 19)); //.ligerGetComboBoxManager().setSelect(); 性能消耗太大
  766. // 按钮名称修改
  767. $("#saveBtn").attr("value", "更新任务到列表");
  768. $("#saveBtn").unbind("click");
  769. $("#saveBtn").bind("click", function(){
  770. submitTask(false);
  771. });
  772. // 附件处理
  773. var taskDoc = "";
  774. var taskDocList = taskDecompositionNode.taskDocList;
  775. for(var i = 0; i < taskDocList.length; i++){
  776. taskDoc += ','+taskDocList[i].file_id;
  777. }
  778. if(taskDoc.length > 0){
  779. taskDoc = taskDoc.substring(1, taskDoc.length);
  780. }
  781. editViewFileHtml(taskDoc, "taskDoc", isEdit, 12);
  782. }
  783. }
  784. function resetTaskForm(){
  785. $("#taskDecompositionNodeId").val("");
  786. $("#taskName").val("");
  787. $("#projNodeId").val("");
  788. $("#taskType").val(defaultTaskTypeValue);
  789. $("#taskContent").val("");
  790. $("#taskPriority").val(defaultTaskPriorityValue);
  791. $("#taskLevel").val(defaultTaskLevelValue);
  792. $("#planManHour").val(defaultManHour);
  793. $("#developUserId").val("");
  794. $("#developUserName").val("");
  795. // 日期值需要特殊处理
  796. $("#planStartDate").val(getDates(new Date()));
  797. $("#planStartTime").val(defaultWorkStartTime); //.ligerGetComboBoxManager().setSelect(); 性能消耗太大
  798. $("#planFinDate").val(getDates(new Date()));
  799. $("#planFinTime").val(defaultWorkEndTime); //.ligerGetComboBoxManager().setSelect(); 性能消耗太大
  800. // 按钮状态
  801. $("#resettn").attr("disabled", false);
  802. $("#saveBtn").attr("disabled", false);
  803. $("#saveBtn").attr("value", "新增任务到列表");
  804. $("#developUserBtn").attr("disabled" ,false);
  805. $("#saveBtn").unbind("click");
  806. $("#saveBtn").bind("click", function(){
  807. submitTask(false);
  808. });
  809. // 附件控件状态
  810. editViewFileHtml("", "taskDoc");
  811. // 调整选择人员模式
  812. loadUserTree("create");
  813. // 清空提示信息
  814. clearSingelMsg("taskName");
  815. clearMsgBox("taskNameMsg");
  816. clearSingelMsg("projNodeId");
  817. clearMsgBox("projNodeIdMsg");
  818. clearSingelMsg("taskType");
  819. clearMsgBox("taskTypeMsg");
  820. clearSingelMsg("taskContent");
  821. clearMsgBox("taskContentMsg");
  822. clearSingelMsg("planStartDate");
  823. clearMsgBox("planStartDateMsg");
  824. clearSingelMsg("planFinDate");
  825. clearMsgBox("planFinDateMsg");
  826. clearSingelMsg("developUserName");
  827. clearMsgBox("developUserNameMsg");
  828. clearSingelMsg("planManHour");
  829. clearMsgBox("planManHourMsg");
  830. }
  831. function displayTaskState4User(row, isDevelopUser){
  832. var taskState = row.prov_task_state;
  833. var colorRGB = getTaskStateColor(taskState);
  834. return "<span style='color:" + colorRGB +"'>" + getTaskStateText(taskState, isDevelopUser) + "</span>";
  835. }
  836. function onchange4ProjNode(source){
  837. try {
  838. var title = ($(source).find("option:selected").attr("title"));
  839. var startDate = title.split("至")[0];
  840. $("#planStartDate").val(startDate);
  841. } catch (e) {
  842. }
  843. }