pm_main.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. /**
  2. * Created by Mai on 2017/2/24.
  3. */
  4. var Tree = null, movetoZTree = null, copytoZTree = null;
  5. var ProjTreeSetting = {
  6. columns: [
  7. {
  8. head: '',
  9. data: '',
  10. static: true,
  11. width: '40',
  12. event: {}
  13. },
  14. {
  15. head: '工程列表',
  16. data: 'name',
  17. static: false,
  18. width: '78%',
  19. event: {
  20. getUrl: function (node) {
  21. if (node && node.data && node.data.projType === 'Tender') {
  22. return '/main?project='+node.id();
  23. }
  24. }
  25. }
  26. },
  27. {
  28. head: '最近使用',
  29. data: 'lastDateTime',
  30. static: false,
  31. width: '10%',
  32. event: {
  33. textFormat: function (date) {
  34. return date ? new Date(date).Format('yyyy-MM-dd') : '';
  35. }
  36. }
  37. },
  38. {
  39. head: '创建日期',
  40. data: 'createDateTime',
  41. static: false,
  42. width: '10%',
  43. event: {
  44. textFormat: function (date) {
  45. return date ? new Date(date).Format('yyyy-MM-dd') : '';
  46. }
  47. }
  48. }
  49. ],
  50. viewEvent: {
  51. beforeSelect: function (node) {
  52. if (node && node.row) {
  53. $('td:eq(0)', node.row).children().remove();
  54. }
  55. },
  56. onSelectNode: function (node) {
  57. // 新建文件夹 是否可见
  58. if (node.data.projType === 'Tender') {
  59. $('#addFolderBtn').hide();
  60. } else {
  61. $('#addFolderBtn').show();
  62. }
  63. // 重命名可见
  64. $('#renameBtn').show();
  65. // 删除可见
  66. $('#delBtn').show();
  67. // 移动到、复制到、共享、协同 是否可见
  68. if (node.data.projType === 'Tender') {
  69. $('#movetoBtn').show();
  70. $('#copytoBtn').show();
  71. $('#shareBtn').show();
  72. $('#cooperateBtn').show();
  73. } else {
  74. $('#movetoBtn').hide();
  75. $('#copytoBtn').hide();
  76. $('#shareBtn').hide();
  77. $('#cooperateBtn').hide();
  78. }
  79. $('td:eq(0)', node.row).append($('<i class="fa fa-sort" data-toggle="tooltip" data-placement="top" title="长安拖动"></i>'));
  80. }
  81. }
  82. }
  83. // 从服务器拉取数据
  84. var LoadProjTree = function () {
  85. var table = $('#ProjTree');
  86. $('thead', table).remove();
  87. $('tbody', table).remove();
  88. GetAllProjectData(function (data) {
  89. Tree = $.fn.treeTable.init(table, ProjTreeSetting, data);
  90. });
  91. };
  92. var GetNeedUpdatePreNode = function (parent, next) {
  93. if (parent && parent.id() !== -1) {
  94. if (next && next.preSibling()) {
  95. return next.preSibling();
  96. } else {
  97. return parent.lastChild();
  98. }
  99. } else {
  100. return null;
  101. }
  102. };
  103. var GetPreNodeUpdateData = function (pre, nid) {
  104. var data = {};
  105. data['updateType'] = 'update';
  106. data['updateData'] = {id: pre.id(), nextId: nid};
  107. return data;
  108. }
  109. // 获取新建项目数据
  110. var GetAddProjUpdateData = function (parent, next, name) {
  111. var datas = [], updateData, pre, newId = Tree.maxNodeId() + 1;
  112. updateData = {};
  113. updateData['updateType'] = 'new';
  114. updateData['updateData'] = {};
  115. updateData['updateData']['id'] = newId;
  116. updateData['updateData']['parentId'] = parent ? parent.id() : -1;
  117. updateData['updateData']['nextId'] = next ? next.id() : -1;
  118. updateData['updateData']['name'] = name;
  119. updateData['updateData']['projType'] = 'Tender';
  120. datas.push(updateData);
  121. return datas;
  122. };
  123. var GetAddFolderProjUpdateData = function (parent, next, folderName1, folderName2, name) {
  124. var datas = [], updateData, folderData1, folderData2, pre, newId = Tree.maxNodeId() + 1;
  125. var addUpdateData = function (parentId, nextId, name, projType) {
  126. var data = {};
  127. data['updateType'] = 'new';
  128. data['updateData'] = {};
  129. data['updateData']['id'] = newId;
  130. data['updateData']['parentId'] = parentId;
  131. data['updateData']['nextId'] = nextId;
  132. data['updateData']['name'] = name;
  133. data['updateData']['projType'] = projType;
  134. newId += 1;
  135. datas.push(data);
  136. return data;
  137. }
  138. folderData1 = addUpdateData(parent.id(), next ? next.id() : -1, folderName1, 'Folder');
  139. folderData2 = addUpdateData(folderData1.updateData.id, -1, folderName2, 'Folder');
  140. addUpdateData(folderData2.updateData.id, -1, name, 'Tender');
  141. return datas;
  142. };
  143. // 获取新建文件夹数据
  144. var GetAddForlderUpdateData = function (parent, next, folderName) {
  145. var datas = [], updateData, pre, newId = Tree.maxNodeId() + 1;
  146. updateData = {};
  147. updateData['updateType'] = 'new';
  148. updateData['updateData'] = {};
  149. updateData['updateData']['id'] = newId;
  150. updateData['updateData']['parentId'] = parent ? parent.id() : -1;
  151. updateData['updateData']['nextId'] = next ? next.id() : -1;
  152. updateData['updateData']['name'] = folderName;
  153. updateData['updateData']['projType'] = 'Folder';
  154. datas.push(updateData);
  155. pre = GetNeedUpdatePreNode(parent, next);
  156. if (pre) {
  157. datas.push(GetPreNodeUpdateData(pre, newId));
  158. }
  159. return datas;
  160. };
  161. var GetNextChangeUpdateData = function (datas, node, next) {
  162. var data = null;
  163. if (node && node.id() !== -1) {
  164. data = {};
  165. data['updateType'] = 'update';
  166. data['updateData'] = {};
  167. data['updateData']['id'] = node.id();
  168. data['updateData']['nextId'] = next ? next.id() : -1;
  169. datas.push(data);
  170. }
  171. return data;
  172. }
  173. var GetFullName = function (node) {
  174. var fullName = [],
  175. cur = node;
  176. while (cur && cur.data) {
  177. fullName.unshift(cur.data.name);
  178. cur = cur.parent;
  179. }
  180. return fullName;
  181. }
  182. var GetDeleteUpdateData = function (node) {
  183. var datas = [], updateData,
  184. pre = node.preSibling(),
  185. deleteNodeData = function (node) {
  186. var data = {};
  187. data['updateType'] = 'delete';
  188. data['updateData'] = {};
  189. data['updateData']['id'] = node.id();
  190. data['updateData']['deleted'] = true;
  191. if (node.data.projType === 'Tender') {
  192. data['updateData']['deleteFullFolder'] = GetFullName(node.parent);
  193. }
  194. return data;
  195. },
  196. addDeleteChildren = function (children) {
  197. children.forEach(function(child){
  198. datas.push(deleteNodeData(child));
  199. addDeleteChildren(child.children);
  200. });
  201. };
  202. if (pre && pre.id() !== -1) {
  203. updateData = {};
  204. updateData['updateType'] = 'update';
  205. updateData['updateData'] = {};
  206. updateData['updateData']['id'] = pre.id();
  207. updateData['updateData']['nextId'] = node ? node.nid() : -1;
  208. datas.push(updateData);
  209. }
  210. datas.push(deleteNodeData(node));
  211. addDeleteChildren(node.children);
  212. return datas;
  213. };
  214. var GetMoveUpdateData = function (node, parent, next) {
  215. var datas = [], updateData;
  216. updateData = GetNextChangeUpdateData(datas, node.preSibling(), node.nextSibling);
  217. if (next) {
  218. updateData = GetNextChangeUpdateData(datas, next.preSibling(), node);
  219. }
  220. updateData = {};
  221. updateData['updateType'] = 'update';
  222. updateData['updateData'] = {};
  223. updateData['updateData']['id'] = node.id();
  224. updateData['updateData']['parentId'] = parent ? parent.id() : -1;
  225. updateData['updateData']['nextId'] = next ? next.id() : -1;
  226. datas.push(updateData);
  227. return datas;
  228. };
  229. var GetCopyUpdateData = function (node, parent, next){
  230. var datas = [], updateData, pre;
  231. updateData = {};
  232. updateData['updateType'] = 'new';
  233. updateData['updateData'] = {};
  234. updateData['updateData']['id'] = node.tree.maxNodeId() + 1;
  235. updateData['updateData']['parentId'] = parent ? parent.id() : -1;
  236. updateData['updateData']['nextId'] = next ? next.id() : -1;
  237. updateData['updateData']['name'] = node.data.name;
  238. updateData['updateData']['projType'] = node.data.projType;
  239. datas.push(updateData);
  240. pre = GetNeedUpdatePreNode(parent, next);
  241. if (pre) {
  242. updateData = {};
  243. updateData['updateType'] = 'update';
  244. updateData['updateData'] = {};
  245. updateData['updateData']['id'] = pre.id();
  246. updateData['updateData']['nextId'] = node.tree.maxNodeId() + 1;
  247. datas.push(updateData);
  248. }
  249. return datas;
  250. }
  251. var ConvertTreeToZtree = function (Tree, zTreeObj, filterNode) {
  252. var setting = {
  253. data: {
  254. simpleData: {
  255. enable:true,
  256. idKey: "id",
  257. pIdKey: "pId",
  258. rootPId: "-1"
  259. }
  260. }},
  261. zTreeData = [],
  262. exportNodesData = function (nodes) {
  263. nodes.forEach(function (node) {
  264. if (node !== filterNode) {
  265. var data = {};
  266. data['id'] = node.data['id'];
  267. data['pId'] = node.pid();// === -1 ? 0 : node.pid();
  268. data['name'] = node.data['name'];
  269. data['isParent'] = node.data.projType === 'Folder';//(node.data.projType === 'Folder' && node.children.length === 0);
  270. data['open'] = node.data.projType === 'Folder';//node.children.length !== 0;
  271. zTreeData.push(data);
  272. exportNodesData(node.children);
  273. }
  274. })
  275. };
  276. exportNodesData(Tree._root.children);
  277. return $.fn.zTree.init(zTreeObj, setting, zTreeData);
  278. };
  279. var GetTargetTreeNode = function (zTreeObj) {
  280. var ztree_selected;
  281. if (zTreeObj && Tree) {
  282. ztree_selected = zTreeObj.getSelectedNodes().length === 0 ? null : zTreeObj.getSelectedNodes()[0];
  283. return ztree_selected ? Tree.findNode(ztree_selected.id) : null;
  284. } else {
  285. return null;
  286. }
  287. };
  288. var AddFolderChildValid = function (node) {
  289. if (node.data.projType === 'Folder') {
  290. if (node.children.length === 0) {
  291. return true;
  292. } else {
  293. return (node.firstChild().data.projType === 'Folder');
  294. }
  295. } else {
  296. return false;
  297. }
  298. };
  299. var AddTenderChildValid = function (node) {
  300. if (node.data.projType === 'Folder') {
  301. if (node.children.length === 0) {
  302. return true;
  303. } else {
  304. return (node.firstChild().data.projType === 'Tender');
  305. }
  306. } else {
  307. return false;
  308. }
  309. };
  310. LoadProjTree();
  311. $('#movetoBtn').hide();
  312. $('#copytoBtn').hide();
  313. $('#shareBtn').hide();
  314. $('#cooperateBtn').hide();
  315. // 新建文件夹
  316. $('#addFolderBtn').click(function () {
  317. if (Tree) {
  318. $('#addFolder').modal('show');
  319. }
  320. });
  321. $('#addFolderOk').click(function () {
  322. var form = $('#addFolder');
  323. var name = $('#folder-name-input').val();
  324. var updateData, parent, next;
  325. if (name) {
  326. if (Tree.selected()) {
  327. if (Tree.selected().children.length === 0 || Tree.selected().firstChild().data.projType === 'Folder') {
  328. parent = Tree.selected();
  329. next = Tree.selected().firstChild();
  330. } else {
  331. parent = Tree.selected().parent;
  332. next = Tree.selected().nextSibling;
  333. }
  334. } else {
  335. parent = Tree._root;
  336. next = Tree.firstNode();
  337. }
  338. updateData = GetAddForlderUpdateData(parent, next, name);
  339. UpdateProjectData(updateData, function(datas){
  340. datas.forEach(function (data) {
  341. if (data.updateType === 'new') {
  342. Tree.addNodeData(data.updateData, parent, next);
  343. }
  344. });
  345. form.modal('hide');
  346. });
  347. }
  348. });
  349. // 新建工程
  350. var AddProj = function () {
  351. var name = $('#tenderName').val(), updateData, parent, next;
  352. if (name !== '') {
  353. // if (Tree.selected()){
  354. // if (Tree.selected().data.projType === 'Tender') {
  355. // parent = Tree.selected().parent;
  356. // next = Tree.selected().next;
  357. // } else {
  358. // if (Tree.selected().firstNode.data.projType === 'Tender') {
  359. // parent = Tree.selected();
  360. // next = Tree.selected().firstNode();
  361. // } else {
  362. // return;
  363. // }
  364. // }
  365. // } else {
  366. // parent = Tree._root();
  367. // next = Tree.firstNode();
  368. // }
  369. updateData = GetAddProjUpdateData(Tree._root, Tree.firstNode(), name);
  370. UpdateProjectData(updateData, function (datas) {
  371. datas.forEach(function (data) {
  372. var parent, next;
  373. if (data.updateType === 'new') {
  374. parent = data.updateData.parentId === -1 ? Tree._root : Tree.findNode(data.updateData.parentId);
  375. next = data.updateData.nextId === -1 ? null : Tree.findNode(data.updateData.nextId);
  376. Tree.addNodeData(data.updateData, parent, next);
  377. }
  378. });
  379. $('#addProj').modal('hide');
  380. });
  381. }
  382. }
  383. var AddFolderProj = function () {
  384. var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val(), updateData;
  385. if (nameB !== '' && nameX !== '' && name !== '') {
  386. updateData = GetAddFolderProjUpdateData(Tree._root, Tree.firstNode(), nameB, nameX, name);
  387. UpdateProjectData(updateData, function (datas) {
  388. datas.forEach(function (data) {
  389. var parent, next;
  390. if (data.updateType === 'new') {
  391. parent = data.updateData.parentId === -1 ? Tree._root : Tree.findNode(data.updateData.parentId);
  392. next = data.updateData.nextId === -1 ? null : Tree.findNode(data.updateData.nextId);
  393. Tree.addNodeData(data.updateData, parent, next);
  394. }
  395. });
  396. $('#addProj').modal('hide');
  397. });
  398. }
  399. }
  400. $('#addProjBtn').click(function () {
  401. if (Tree) {
  402. $('#addProj').modal('show');
  403. }
  404. });
  405. $('#addProjOk').click(function () {
  406. var hasFolder = $('#isAddFolder>input').is(':checked');
  407. if (hasFolder) {
  408. AddFolderProj();
  409. } else {
  410. AddProj();
  411. }
  412. });
  413. $('#isAddFolder').change(function () {
  414. if ($('input',this).is(':checked')) {
  415. $('#moreinfo').collapse('show');
  416. } else {
  417. $('#moreinfo').collapse('hide');
  418. }
  419. });
  420. // 重命名
  421. $('#renameBtn').click(function() {
  422. if (Tree && Tree.selected()) {
  423. $('#rename').modal('show');
  424. }
  425. })
  426. $('#rename').on('show.bs.modal', function () {
  427. $('#newName').attr('placeholder', Tree.selected().data.name);
  428. });
  429. $('#renameOk').click(function () {
  430. var select = Tree.selected(),
  431. newName = $('#newName').val(),
  432. form = $('#rename');
  433. if (select && newName !== select.data.name) {
  434. RenameProject(select.id(), newName, function () {
  435. form.modal('hide');
  436. select.data.name = newName;
  437. Tree.refreshNodesDom([select]);
  438. });
  439. } else {
  440. form.modal('hide');
  441. }
  442. });
  443. // 删除
  444. $('#delBtn').click(function() {
  445. if (Tree && Tree.selected()) {
  446. $('#del').modal('show');
  447. }
  448. });
  449. $('#del').on('show.bs.modal', function() {
  450. var hasTenderChild = function (children) {
  451. var i;
  452. for (i = 0; i < children.length; i++) {
  453. if (children[i].children.length === 0) {
  454. if (children[i].data.projType === 'Tender') {
  455. return true;
  456. }
  457. } else if (hasTenderChild(children[i].children)) {
  458. return true;
  459. }
  460. }
  461. return false;
  462. };
  463. if (Tree.selected().children.length == 0) {
  464. $('#tenderHint').show();
  465. $('#tenderHint').text('删除 "' + Tree.selected().data.name +'" ?');
  466. $('#folderHint').hide();
  467. } else {
  468. $('#tenderHint').hide();
  469. $('#folderHint').show();
  470. $('#folderHint').text('删除 "'+ Tree.selected().data.name +'" 以及它包含的子项?');
  471. }
  472. if (hasTenderChild([Tree.selected()])) {
  473. $('#restoreHint').show();
  474. } else {
  475. $('#restoreHint').hide();
  476. }
  477. });
  478. $('#deleteProjOk').click(function () {
  479. var updateData, form = $('#del');
  480. if (Tree) {
  481. updateData = GetDeleteUpdateData(Tree.selected());
  482. UpdateProjectData(updateData, function () {
  483. form.modal('hide');
  484. Tree.removeNode(Tree.selected());
  485. });
  486. }
  487. });
  488. // 移动至
  489. $('#movetoBtn').click(function () {
  490. if (Tree && Tree.selected()) {
  491. $('#moveto').modal('show');
  492. }
  493. });
  494. $('#moveto').on('show.bs.modal', function () {
  495. movetoZTree = ConvertTreeToZtree(Tree, $('#treeDemo'), Tree.selected());
  496. });
  497. $('#movetoOk').click(function () {
  498. var updateData, form = $('#moveto'),
  499. target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo')),
  500. parent, next, cur = Tree.selected();
  501. if (target) {
  502. if (target.data.projType === 'Tender') {
  503. parent = target.parent;
  504. next = target.nextSibling;
  505. } else {
  506. parent = target;
  507. next = target.firstChild();
  508. }
  509. if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
  510. updateData = GetMoveUpdateData(Tree.selected(), parent, next);
  511. UpdateProjectData(updateData, function (data) {
  512. form.modal('hide');
  513. Tree.move(Tree.selected(), parent, next);
  514. });
  515. } else {
  516. form.modal('hide');
  517. }
  518. } else {
  519. form.modal('hide');
  520. }
  521. })
  522. // 复制到
  523. $('#copytoBtn').click(function () {
  524. if (Tree && Tree.selected()) {
  525. $('#copyto').modal('show');
  526. }
  527. });
  528. $('#copyto').on('show.bs.modal', function () {
  529. copytoZTree = ConvertTreeToZtree(Tree, $('#treeDemo2'));
  530. });
  531. $('#copytoOk').click(function() {
  532. var updateData, form = $('#copyto'),
  533. target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo2')),
  534. parent, next, cur = Tree.selected();
  535. if (target && (target.data.projType === 'Tender' || target.children.length === 0 || target.firstChild().data.projType === 'Tender')) {
  536. if (target.data.projType === 'Tender') {
  537. parent = target.parent;
  538. next = target.nextSibling;
  539. } else {
  540. parent = target;
  541. next = target.firstChild();
  542. }
  543. if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
  544. updateData = GetCopyUpdateData(Tree.selected(), parent, next);
  545. UpdateProjectData(updateData, function (data) {
  546. form.modal('hide');
  547. data.forEach(function (nodeData) {
  548. if (nodeData.updateType === 'new') {
  549. Tree.addNodeData(nodeData.updateData, parent, next);
  550. }
  551. });
  552. });
  553. } else {
  554. form.modal('hide');
  555. }
  556. } else {
  557. form.modal('hide');
  558. }
  559. });