pm_main.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. /**
  2. * 项目管理相关js
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/8/22
  6. * @version
  7. */
  8. let Tree = null;
  9. let movetoZTree = null;
  10. let copytoZTree = null;
  11. let projectType = {
  12. folder: 'Folder',
  13. tender: 'Tender',
  14. project: 'Project',
  15. engineering: 'Engineering'
  16. };
  17. let ProjTreeSetting = {
  18. tree: {
  19. id: 'ID',
  20. pid: 'ParentID',
  21. nid: 'NextSiblingID',
  22. btnColumn: 1,
  23. nullId: -1
  24. },
  25. columns: [
  26. {
  27. head: '',
  28. data: '',
  29. width: '40',
  30. event: {}
  31. },
  32. {
  33. head: '工程列表',
  34. data: 'name',
  35. width: '78%',
  36. event: {
  37. getText: function (html, node, text) {
  38. let className = '';
  39. switch (node.data.projType) {
  40. case projectType.folder:
  41. className = "fa fa-folder-open-o";
  42. break;
  43. case projectType.tender:
  44. className = "fa fa-sticky-note-o";
  45. break;
  46. case projectType.project:
  47. className = "fa fa-cubes";
  48. break;
  49. case projectType.engineering:
  50. className = "fa fa-cube";
  51. break;
  52. }
  53. let icon = '<i class ="tree-icon '+ className +'"></i>';
  54. html.push((node && node.data && node.data.projType === projectType.folder) ? '&nbsp;' : '');
  55. html.push('<a ');
  56. if (node && node.data) {
  57. //html.push('href="/main?project=', node.id(), '"');
  58. html.push('href="javacript:void(0);"');
  59. }
  60. html.push('>', icon, '&nbsp;', text, '<a>');
  61. },
  62. getIcon: function (html, node) {
  63. // html.push('<i class ="tree-icon '+ className +'"></i>');
  64. // if (node.data.projType === 'Tender') {
  65. // html.push('<span class="poj-icon">└</span>');
  66. // }
  67. },
  68. tdBindEvent: function (td, node) {
  69. if (node.data.projType === projectType.tender) {
  70. $('a:eq(1)', td).bind('click', function () {
  71. BeforeOpenProject(node.id(), {'fullFolder': GetFullFolder(node.parent)}, function () {
  72. window.location.href = '/main?project=' + node.id();
  73. });
  74. return false;
  75. });
  76. }
  77. }
  78. }
  79. },
  80. {
  81. head: '最近使用',
  82. data: 'lastDateTime',
  83. width: '10%',
  84. event: {
  85. getText: function (html, node, text) {
  86. if (node.data.projType === projectType.tender) {
  87. html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
  88. }
  89. }
  90. }
  91. },
  92. {
  93. head: '创建日期',
  94. data: 'createDateTime',
  95. width: '10%',
  96. event: {
  97. getText: function (html, node, text) {
  98. if (node.data.projType === projectType.tender) {
  99. html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
  100. }
  101. }
  102. }
  103. }
  104. ],
  105. viewEvent: {
  106. beforeSelect: function (node) {
  107. if (node && node.row) {
  108. $('td:eq(0)', node.row).children().remove();
  109. }
  110. },
  111. onSelectNode: function (node) {
  112. // 新建文件夹 是否可见
  113. if (node.data.projType === projectType.tender) {
  114. $('#addFolderBtn').hide();
  115. } else {
  116. $('#addFolderBtn').show();
  117. }
  118. // 重命名可见
  119. $('#renameBtn').show();
  120. // 删除可见
  121. $('#delBtn').show();
  122. // 移动到、复制到、共享、协同 是否可见
  123. if (node.data.projType === projectType.tender) {
  124. $('#movetoBtn').show();
  125. $('#copytoBtn').show();
  126. $('#shareBtn').show();
  127. $('#cooperateBtn').show();
  128. } else {
  129. $('#movetoBtn').hide();
  130. $('#copytoBtn').hide();
  131. $('#shareBtn').hide();
  132. $('#cooperateBtn').hide();
  133. }
  134. $('td:eq(0)', node.row).append($('<i class="fa fa-sort" data-toggle="tooltip" data-placement="top" title="长安拖动"></i>'));
  135. }
  136. }
  137. };
  138. $(document).ready(function() {
  139. init();
  140. // 新增建设项目点击
  141. $('#addProjBtn').click(function () {
  142. if (Tree) {
  143. $('#add-add-project-dialog').modal('show');
  144. }
  145. });
  146. // 新增建设项目操作
  147. $('#addProjOk').click(function () {
  148. AddProject();
  149. });
  150. // 新增单项项目点击
  151. $("#add-engineering-btn").click(function() {
  152. let selectedItem = Tree.selected();
  153. try {
  154. if (selectedItem === null) {
  155. throw '请选择要添加到的项目工程';
  156. }
  157. let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : '';
  158. if (selectedType !== projectType.project) {
  159. throw '单项项目只能添加到建设项目中';
  160. }
  161. $("#add-engineering-dialog").modal("show");
  162. } catch (error) {
  163. alert(error);
  164. }
  165. });
  166. // 新增单项工程操作
  167. $("#add-engineering-confirm").click(function() {
  168. AddEngineering();
  169. });
  170. // 新增单位工程点击
  171. $("#add-tender-btn").click(function() {
  172. let selectedItem = Tree.selected();
  173. try {
  174. if (selectedItem === null) {
  175. throw '请选择要添加到的单项工程';
  176. }
  177. let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : '';
  178. if (selectedType !== projectType.engineering) {
  179. throw '单项项目只能添加到单项工程中';
  180. }
  181. $("#add-tender-dialog").modal("show");
  182. } catch (error) {
  183. alert(error);
  184. }
  185. });
  186. // 新增单位工程
  187. $("#add-tender-confirm").click(function() {
  188. AddTender();
  189. });
  190. });
  191. /**
  192. * 初始化数据
  193. *
  194. * @return {void}
  195. */
  196. function init() {
  197. let table = $('#ProjTree');
  198. $('thead', table).remove();
  199. $('tbody', table).remove();
  200. GetAllProjectData(function (data) {
  201. Tree = $.fn.treeTable.init(table, ProjTreeSetting, data);
  202. });
  203. }
  204. /**
  205. * 新增建设项目
  206. *
  207. * @return {boolean}
  208. */
  209. function AddProject() {
  210. let name = $('#project-name').val();
  211. if (name === '') {
  212. alert('请填写工程');
  213. return false;
  214. }
  215. GetNewProjectId(function(IDs) {
  216. let typeInfo = {
  217. updateType: 'new',
  218. projectType: projectType.project
  219. };
  220. let updateData = GetUpdateData(Tree._root, Tree.firstNode(), name, IDs.lowID, typeInfo);
  221. Tree.maxNodeId(IDs.lowID - 1);
  222. UpdateProjectData(updateData, function (datas) {
  223. datas.forEach(function (data) {
  224. let parent = null;
  225. let next = null;
  226. if (data.updateType === 'new') {
  227. parent = data.updateData.parentId === -1 ? Tree._root : Tree.findNode(data.updateData.parentId);
  228. next = data.updateData.nextId === -1 ? null : Tree.findNode(data.updateData.nextId);
  229. Tree.addNodeData(data.updateData, parent, next);
  230. }
  231. });
  232. $('#add-project-dialog').modal('hide');
  233. });
  234. });
  235. }
  236. /**
  237. * 新增同级元素
  238. *
  239. * @param {String} name
  240. * @param {String} type
  241. * @param {function} callback
  242. * @return {void}
  243. */
  244. function AddSiblingsItem(name, type, callback) {
  245. let parent = Tree.selected();
  246. let next = Tree.selected().firstChild();
  247. GetNewProjectId(function(IDs) {
  248. let typeInfo = {
  249. updateType: 'new',
  250. projectType: type
  251. };
  252. let updateData = GetUpdateData(parent, next, name, IDs.lowID, typeInfo);
  253. Tree.maxNodeId(IDs.lowID - 1);
  254. UpdateProjectData(updateData, function(datas){
  255. datas.forEach(function (data) {
  256. if (data.updateType === 'new') {
  257. Tree.addNodeData(data.updateData, parent, next);
  258. }
  259. });
  260. callback();
  261. });
  262. });
  263. }
  264. /**
  265. * 新增单项工程
  266. *
  267. * @return {boolean}
  268. */
  269. function AddEngineering() {
  270. let name = $('#engineering-name').val();
  271. if (name === '') {
  272. alert('请填写单项工程名称');
  273. return false;
  274. }
  275. AddSiblingsItem(name, projectType.engineering, function() {
  276. $("#add-engineering-dialog").modal("hide");
  277. });
  278. }
  279. /**
  280. * 新增单位工程
  281. *
  282. * @return {boolean}
  283. */
  284. function AddTender() {
  285. let name = $('#tender-name').val();
  286. if (name === '') {
  287. alert('请填写单位工程名称');
  288. return false;
  289. }
  290. AddSiblingsItem(name, projectType.tender, function() {
  291. $("#add-tender-dialog").modal("hide");
  292. });
  293. }
  294. /**
  295. * 组织更新数据
  296. *
  297. * @param {Object} parent
  298. * @param {Object} next
  299. * @param {String} name
  300. * @param {Object} type
  301. * @return {Object}
  302. */
  303. function GetUpdateData(parent, next, name, newId, type) {
  304. let data = [];
  305. let updateData = {};
  306. updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType;
  307. updateData['updateData'] = {};
  308. updateData['updateData'][Tree.setting.tree.id] = newId;
  309. updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
  310. updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
  311. updateData['updateData']['name'] = name;
  312. updateData['updateData']['projType'] = type.projectType !== undefined ? type.projectType : 'Tender';
  313. data.push(updateData);
  314. return data;
  315. }
  316. /**
  317. * 获取需要更新的前节点
  318. *
  319. * @param {Object} parent
  320. * @param {Object} next
  321. * @return {Object}
  322. */
  323. function GetNeedUpdatePreNode(parent, next) {
  324. if (next) {
  325. return next.preSibling();
  326. } else if (parent) {
  327. return parent.firstChild();
  328. } else {
  329. return null;
  330. }
  331. }
  332. /**
  333. * 获取最新id
  334. *
  335. * @param {function} callback
  336. * @return {void}
  337. */
  338. function GetNewProjectId(callback) {
  339. CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function(data) {
  340. callback(data);
  341. });
  342. }