copyProject.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const copyProject = (function () {
  2. const projectType = commonConstants.projectType;
  3. let curCopySelTree = null; //拷贝工程建设项目选项树
  4. function setEng(projID){
  5. let engQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], projType: projectType.Engineering, userID: userID, ParentID: projID};
  6. CommonAjax.post('/pm/api/getProjectsByQuery', {user_id: userID, query: engQuery, options: '-_id -property'}, function (rstData) {
  7. $('#copyShare_selectEng').empty();
  8. for(let eng of rstData){
  9. let opt = $('<option>').val(eng.ID).text(eng.name);
  10. $('#copyShare_selectEng').append(opt);
  11. }
  12. });
  13. }
  14. function getFileHierarchyInfo(treeData){
  15. curCopySelTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1});
  16. curCopySelTree.loadDatas(treeData);
  17. let items = curCopySelTree.items;
  18. let rst = [];
  19. function getFileHierarchyName(node){
  20. let nodeName = node.data.name;
  21. let name = [];
  22. while (node.parent){
  23. name.push(node.parent.data.name ? node.parent.data.name : '');
  24. node = node.parent;
  25. }
  26. name = name.reverse();
  27. name.push(nodeName);
  28. return name.join('\\');
  29. }
  30. for(let node of items){
  31. if(node.children.length === 0 ){//project
  32. rst.push({ID: node.data.ID, fileHierarchyName: getFileHierarchyName(node)})
  33. }
  34. }
  35. return rst;
  36. }
  37. //设置拷贝工程下拉选择
  38. //@return {void}
  39. function setCopyModal(){
  40. //获取建设项目
  41. let projQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], projType: {$in: [projectType.Project, projectType.Folder]}, userID: userID};
  42. CommonAjax.post('/pm/api/getProjectsByQuery', {user_id: userID, query: projQuery, options: '-_id'}, function (rstData) {
  43. let fileHierarchyData = getFileHierarchyInfo(rstData);
  44. $('#copyShare_selectProj').empty();
  45. for(let proj of fileHierarchyData){
  46. let opt = $('<option>').val(proj.ID).text(proj.fileHierarchyName);
  47. $('#copyShare_selectProj').append(opt);
  48. }
  49. //初始选择
  50. if(fileHierarchyData.length > 0){
  51. setEng(fileHierarchyData[0].ID);
  52. }
  53. });
  54. }
  55. //拷贝分享的工程
  56. //@param {Object}selected {Number}parentID @return {void}
  57. async function copyShareProject(projectInfo, projID, engID){
  58. try {
  59. if(!engID || !projectInfo){
  60. return;
  61. }
  62. let copyMap = {copy: null, update: null};
  63. let newName = $('#copyShare_name').val();
  64. if (!newName) {
  65. $('#copyShareTender-info').text('单位工程名称不可为空');
  66. $('#copyShareTender-info').show();
  67. return;
  68. }
  69. //获取单项工程的单位工程
  70. let tenderQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], userID: userID, ParentID: engID};
  71. const rstData = await ajaxPost('/pm/api/getProjectsByQuery', {user_id: userID, query: tenderQuery, options: '-_id -property'}, false, 10000);
  72. let updateTender = null;
  73. for(let tender of rstData){
  74. if(tender.name === newName){
  75. $('#copyShareTender-info').text('已存在同名单位工程');
  76. $('#copyShareTender-info').show();
  77. return;
  78. }
  79. if(tender.NextSiblingID == -1){
  80. updateTender = tender;
  81. }
  82. }
  83. //更新前节点
  84. if(updateTender){
  85. copyMap.update = {query: {ID: updateTender.ID}};
  86. }
  87. //拷贝
  88. let copyData = {
  89. userID: userID,
  90. ID: projectInfo.ID,
  91. NextSiblingID: -1,
  92. ParentID: engID,
  93. name: newName,
  94. shareInfo: [],
  95. compilation: projectInfo.compilation,
  96. createDateTime: projectInfo.createDateTime,
  97. fileVer: projectInfo.fileVer ? projectInfo.fileVer : '',
  98. projType: projectInfo.projType,
  99. property: {},
  100. recentDateTime: projectInfo.recentDateTime,
  101. fullFolder: projectInfo.fullFolder
  102. };
  103. copyData.property.rootProjectID = projID;
  104. copyMap.copy = {document: copyData};
  105. $('#copyShare').modal('hide');
  106. $.bootstrapLoading.progressStart('拷贝项目', true);
  107. $("#progress_modal_body").text('正在拷贝项目,请稍候……');
  108. await ajaxPost('/pm/api/copyProjects', {projectMap: copyMap, user_id: userID, tenderCount: 1});
  109. const compilationID = projectInfo.compilation;
  110. importProcessChecking(null, null, ()=> socket.emit('pmTreeChange', { userID, compilationID}));
  111. } catch (err) {
  112. alert(err);
  113. }
  114. }
  115. async function importProcessChecking(key, processingFunc = null, completeFunc = null, immediately = false) {
  116. let count = 0;
  117. immediately ? checking() : setTimeout(checking, 2000);
  118. async function checking() {
  119. let result = await ajaxPost("/pm/api/importProcessChecking", { key: key, user_id: userID });
  120. if (result.error == 1) {
  121. let message = result.msg ? result.msg : result.message;
  122. setTimeout(function () {
  123. $.bootstrapLoading.progressEnd();//不做这个的话太快,页面不会自动关闭
  124. }, 500);
  125. alert(message);
  126. if (completeFunc) {
  127. completeFunc(result.data);
  128. }
  129. } else if (result.error == 0) {
  130. if (result.status == "processing") {
  131. // 只调用一次
  132. if (processingFunc && count === 0) {
  133. processingFunc(result);
  134. }
  135. count++;
  136. setTimeout(checking, 2000);
  137. } else if (result.status == "complete") {
  138. if (completeFunc) {
  139. completeFunc(result.data);
  140. }
  141. $.bootstrapLoading.progressEnd();
  142. //refreshAllPage();
  143. }
  144. }
  145. }
  146. }
  147. function eventListener(){
  148. //关闭拷贝工程
  149. $('#copyShare').on('hidden.bs.modal', function () {
  150. $('#copyShareProj-info').hide();
  151. $('#copyShareEng-info').hide();
  152. });
  153. //打开拷贝工程
  154. $('#copyShare').on('shown.bs.modal', function () {
  155. setCopyModal();
  156. //更改显示名称
  157. $('#copyShare_name').val(projectObj.project.projectInfo.name);
  158. });
  159. //拷贝工程改变选择建设项目
  160. $('#copyShare_selectProj').change(function () {
  161. $('#copyShareProj-info').hide();
  162. $('#copyShareEng-info').hide();
  163. $('#copyShareTender-info').hide();
  164. let curSelID = $(this).select().val();
  165. setEng(parseInt(curSelID));
  166. });
  167. //拷贝工程改变选择单项工程
  168. $('#copyShare_selectEng').change(function () {
  169. $('#copyShareTender-info').hide();
  170. });
  171. //确认拷贝
  172. $('#copyShare_confirm').click(function () {
  173. let selProj = $('#copyShare_selectProj').select().val();
  174. if(!selProj){
  175. $('#copyShareProj-info').show();
  176. return;
  177. }
  178. //目标建设项目的计税方法与单位工程的一致时,才可拷贝
  179. if (curCopySelTree) {
  180. let projectNode = curCopySelTree.nodes[curCopySelTree.prefix + selProj];
  181. if (!projectNode || !projectNode.data.property || projectNode.data.property.taxType != projectObj.project.property.taxType){
  182. alert('当前单位工程计税方法与目标建设项目不一致,不可复制。');
  183. return;
  184. }
  185. }
  186. let selEng = $('#copyShare_selectEng').select().val();
  187. if(!selEng){
  188. $('#copyShareEng-info').show();
  189. return;
  190. }
  191. copyShareProject(projectObj.project.projectInfo, parseInt(selProj), parseInt(selEng));
  192. });
  193. }
  194. return{eventListener}
  195. })()
  196. $(document).ready(function () {
  197. console.log("hehe")
  198. copyProject.eventListener();
  199. });