project_view.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. /**
  2. * Created by Mai on 2017/6/21.
  3. */
  4. var projectObj = {
  5. project: null,
  6. mainSpread: null,
  7. mainController: null,
  8. gljSpreed:null,
  9. checkCommonField: function (editingText, colSetting) {
  10. let value;
  11. if (colSetting.data.decimal) {
  12. value = Number(editingText);
  13. if (number_util.isNumber(value)) {
  14. value = value.toDecimal(colSetting.data.decimal);
  15. } else {
  16. value = null;
  17. alert('当前输入的数据类型不正确,请重新输入。');
  18. }
  19. } else {
  20. value = info.editingText;
  21. }
  22. return value;
  23. },
  24. checkQuantityField: function (editingText, colSetting) {
  25. let value = Number(editingText);
  26. if (!value) {
  27. let exp = new Expression('');
  28. exp.Expression(editingText);
  29. value = exp.Evaluate();
  30. }
  31. if (value) {
  32. value = value.toDecimal(colSetting.data.decimal);
  33. } else {
  34. value = null;
  35. alert('当前输入的数据类型不正确,请重新输入。');
  36. }
  37. return value;
  38. },
  39. checkSpreadEditingText: function (editingText, colSetting) {
  40. if (colSetting.data.field === 'quantity') {
  41. return this.checkQuantityField(editingText, colSetting);
  42. } else {
  43. return this.checkCommonField(editingText, colSetting);
  44. }
  45. },
  46. mainSpreadEditEnded: function (sender, info) {
  47. let project = projectObj.project;
  48. let node = project.mainTree.items[info.row];
  49. let colSetting = projectObj.mainController.setting.cols[info.col];
  50. let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
  51. let value = projectObj.checkSpreadEditingText(info.editingText, colSetting);
  52. if (colSetting.data.wordWrap) {
  53. info.sheet.autoFitRow(info.row);
  54. }
  55. if (value) {
  56. if (node.sourceType === project.Bills.getSourceType()) {
  57. project.Bills.updateField(node.source, fieldName, value);
  58. } else if (node.sourceType === project.Ration.getSourceType()) {
  59. project.Ration.updateField(node.source, fieldName, value);
  60. } else if (node.sourceType === project.VolumePrice.getSourceType()) {
  61. project.VolumePrice.updateField(node.source, fieldName, value);
  62. }
  63. }
  64. projectObj.mainController.refreshTreeNode([node]);
  65. },
  66. checkMainSpread: function () {
  67. if (!this.mainSpread) {
  68. this.mainSpread = SheetDataHelper.createNewSpread($('#billsSpread')[0]);
  69. this.mainSpread.getActiveSheet().selectionPolicy(GC.Spread.Sheets.SelectionPolicy.single);
  70. }
  71. },
  72. refreshMainSpread: function () {
  73. if (this.mainSpread) {
  74. this.mainSpread.refresh();
  75. }
  76. },
  77. loadProjectData: function () {
  78. var that = this;
  79. this.project = PROJECT.createNew(scUrlUtil.GetQueryString('project'), userID);
  80. this.project.loadDatas(function (err) {
  81. if (!err) {
  82. BillsGridSetting.cols.forEach(function (col) {
  83. col.data.splitFields = col.data.field.split('.');
  84. if (col.data.getText && Object.prototype.toString.apply(col.data.getText) === "[object String]") {
  85. col.data.getText = MainTreeCol.getEvent(col.data.getText);
  86. }
  87. if (col.readOnly && Object.prototype.toString.apply(col.readOnly) === "[object String]") {
  88. col.readOnly = MainTreeCol.getEvent(col.readOnly);
  89. }
  90. if (col.data.digit && Object.prototype.toString.apply(col.data.digit) === "[object String]") {
  91. col.data.decimal = that.project.getDecimal(col.data.digit);
  92. col.data.formatter = MainTreeCol.getNumberFormatter(col.data.decimal);
  93. }
  94. });
  95. that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), BillsGridSetting);
  96. that.mainController.showTreeData();
  97. that.mainController.bind('refreshBaseActn', function (tree) {
  98. var setButtonValid = function (valid, btn) {
  99. if (valid) {
  100. btn.removeClass('disabled');
  101. } else {
  102. btn.addClass('disabled');
  103. }
  104. };
  105. let selected = tree.selected;
  106. let canUpLevel = function (node) {
  107. if (selected && selected.depth() > 0 && selected.canUpLevel()) {
  108. if (selected.sourceType === that.project.Bills.getSourceType()) {
  109. return (!selected.nextSibling) || (selected.children.length === 0) || (selected.source.children.length > 0);
  110. } else {
  111. return false;
  112. }
  113. } else {
  114. return false;
  115. }
  116. };
  117. let canDownLevel = function (node) {
  118. if (selected && selected.depth() > 0 && selected.canDownLevel()) {
  119. if (selected.sourceType === that.project.Bills.getSourceType()) {
  120. return (selected.preSibling.children.length === 0) || (selected.preSibling.source.children.length > 0);
  121. } else {
  122. return false;
  123. }
  124. } else {
  125. return false;
  126. }
  127. };
  128. setButtonValid(canUpLevel(selected), $('#upLevel'));
  129. setButtonValid(canDownLevel(selected), $('#downLevel'));
  130. setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
  131. setButtonValid(selected && (selected.depth() > 0) && selected.canDownMove(), $('#downMove'));
  132. setButtonValid(selected, $('#delete'));
  133. });
  134. /* if(!projectObj.gljSpreed){
  135. projectObj.gljSpreed = gljView.buildSheet($("#gljSpread")[0]);
  136. that.loadGLJSpreadContextMenu();
  137. }*/
  138. that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
  139. gljOprObj.showDataIfRationSelect(node);
  140. // CSL.2017.07.25
  141. if (SubActiveSheetNameIs('JSCX')) {
  142. if (node.sourceType === that.project.Bills.getSourceType()) {
  143. rationCalcView.clearData();
  144. } else if (node.sourceType==='ration') {
  145. rationCalcView.showData(node);
  146. } else {
  147. rationCalcView.clearData();
  148. }
  149. }
  150. });
  151. that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
  152. that.loadMainSpreadContextMenu();
  153. }
  154. else {
  155. }
  156. });
  157. },
  158. loadMainSpreadContextMenu: function () {
  159. var project = this.project, spread = this.mainSpread, controller = this.mainController;
  160. $.contextMenu({
  161. selector: '#billsSpread',
  162. build: function ($trigger, e) {
  163. var target = SheetDataHelper.safeRightClickSelection($trigger, e, spread);
  164. controller.setTreeSelected(controller.tree.items[target.row]);
  165. return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
  166. },
  167. items: {
  168. "insertBills": {
  169. name: "插入清单",
  170. icon: 'fa-sign-in',
  171. disabled: function () {
  172. return project.mainTree.selected ? project.mainTree.selected.sourceType !== project.Bills.getSourceType() : false;
  173. },
  174. callback: function (key, opt) {
  175. ProjectController.addBills(project, controller);
  176. }
  177. },
  178. "insertRation": {
  179. name: "插入定额",
  180. icon: 'fa-sign-in',
  181. disabled: function () {
  182. var selected = project.mainTree.selected;
  183. if (selected) {
  184. if (selected.sourceType === project.Ration.getSourceType()) {
  185. return false;
  186. } else if (selected.sourceType === project.Bills.getSourceType()) {
  187. if (selected.source.children.length === 0) {
  188. return selected.children.length !== 0 ? selected.firstChild().sourceType !== project.Ration.getSourceType() : false;
  189. } else {
  190. return true;
  191. }
  192. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  193. return true;
  194. };
  195. } else {
  196. return true;
  197. }
  198. },
  199. callback: function (key, opt) {
  200. ProjectController.addRation(project, controller);
  201. }
  202. },
  203. "insertLJ": {
  204. name: "插入量价",
  205. icon: 'fa-sign-in',
  206. disabled: function () {
  207. var selected = project.mainTree.selected;
  208. if (selected) {
  209. if (selected.sourceType === project.Ration.getSourceType()) {
  210. return true;
  211. } else if (selected.sourceType === project.Bills.getSourceType()) {
  212. if (selected.source.children.length === 0) {
  213. return selected.children.length !== 0 ? selected.firstChild().sourceType !== project.VolumePrice.getSourceType() : false;
  214. } else {
  215. return true;
  216. }
  217. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  218. return false;
  219. };
  220. } else {
  221. return true;
  222. }
  223. },
  224. callback: function (key, opt) {
  225. ProjectController.addVolumePrice(project, controller);
  226. }
  227. },
  228. "spr1": '--------',
  229. "delete": {
  230. name: '删除',
  231. icon: 'fa-remove',
  232. disabled: function () {
  233. var selected = project.mainTree.selected;
  234. return !selected;
  235. },
  236. callback: function () {
  237. var selected = controller.tree.selected;
  238. if (selected) {
  239. if (selected.sourceType === project.Bills.getSourceType()) {
  240. project.Bills.deleteBills(selected.source);
  241. controller.delete();
  242. } else if (selected.sourceType === project.Ration.getSourceType()) {
  243. project.Ration.delete(selected.source);
  244. controller.delete();
  245. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  246. project.VolumePrice.delete(selected.source);
  247. controller.delete();
  248. };
  249. }
  250. }
  251. },
  252. "spr2":'--------',
  253. "calculateAll_RationContent": {
  254. name: '造价计算(子目含量取费)',
  255. callback: function () {
  256. ProjectController.calculateAll(project, controller, rationContent);
  257. }
  258. },
  259. "calculateAll_RationPrice": {
  260. name: '造价计算(子目单价取费)',
  261. callback: function () {
  262. ProjectController.calculateAll(project, controller, rationPrice);
  263. }
  264. },
  265. "calculateAll_RationPriceConverse": {
  266. name: '造价计算(子目单价取费-反算)',
  267. callback: function () {
  268. ProjectController.calculateAll(project, controller, rationPriceConverse);
  269. }
  270. },
  271. "calculateAll_BillsPrice": {
  272. name: '造价计算(清单单价取费)',
  273. callback: function () {
  274. ProjectController.calculateAll(project, controller, billsPrice);
  275. }
  276. }
  277. }
  278. });
  279. }
  280. };
  281. $('#insert').click(function () {
  282. var controller = projectObj.mainController, project = projectObj.project;
  283. var selected = controller.tree.selected;
  284. if (!selected || selected.sourceType === project.Bills.getSourceType()) {
  285. ProjectController.addBills(project, controller);
  286. } else if (selected.sourceType === project.Ration.getSourceType()) {
  287. ProjectController.addRation(project, controller);
  288. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  289. ProjectController.addVolumePrice(project, controller);
  290. }
  291. });
  292. $('#delete').click(function () {
  293. var controller = projectObj.mainController, project = projectObj.project;
  294. var selected = controller.tree.selected;
  295. if (selected) {
  296. if (selected.sourceType === project.Bills.getSourceType()) {
  297. project.Bills.deleteBills(selected.source);
  298. controller.delete();
  299. } else if (selected.sourceType === project.Ration.getSourceType()) {
  300. project.Ration.delete(selected.source);
  301. controller.delete();
  302. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  303. project.VolumePrice.delete(selected.source);
  304. controller.delete();
  305. };
  306. }
  307. });
  308. $('#upLevel').click(function () {
  309. var controller = projectObj.mainController, project = projectObj.project;
  310. var selected = controller.tree.selected;
  311. if (selected && selected.sourceType === project.Bills.getSourceType()) {
  312. project.Bills.upLevelBills(selected.source);
  313. controller.upLevel();
  314. }
  315. });
  316. $('#downLevel').click(function () {
  317. var controller = projectObj.mainController, project = projectObj.project;
  318. var selected = controller.tree.selected;
  319. if (selected && selected.sourceType === project.Bills.getSourceType()) {
  320. project.Bills.downLevelBills(selected.source);
  321. controller.downLevel();
  322. }
  323. });
  324. $('#upMove').click(function () {
  325. var controller = projectObj.mainController, project = projectObj.project;
  326. var selected = controller.tree.selected, pre, preSerialNo;
  327. if (selected.sourceType === project.Bills.getSourceType()) {
  328. project.Bills.upMoveBills(selected.source);
  329. controller.upMove();
  330. } else if (selected.sourceType === project.Ration.getSourceType()) {
  331. project.Ration.changePos(selected.source, selected.preSibling.source);
  332. controller.upMove();
  333. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  334. project.VolumePrice.changePos(selected.source, selected.preSibling.source);
  335. controller.upMove();
  336. }
  337. });
  338. $('#downMove').click(function () {
  339. var controller = projectObj.mainController, project = projectObj.project;
  340. var selected = controller.tree.selected, next, nextSerialNo;
  341. if (selected.sourceType === project.Bills.getSourceType()) {
  342. project.Bills.downMoveBills(selected.source);
  343. controller.downMove();
  344. } else if (selected.sourceType === project.Ration.getSourceType()) {
  345. project.Ration.changePos(selected.source, selected.nextSibling.source);
  346. controller.downMove();
  347. } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
  348. project.VolumePrice.changePos(selected.source, selected.nextSibling.source);
  349. controller.downMove();
  350. }
  351. });