std_bills_lib.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. /**
  2. * Standard Bills Lib
  3. * Created by Mai on 2017/5/16.
  4. */
  5. var billsLibObj = {
  6. stdBillsSpread: null,
  7. stdBillsJobSpread: null,
  8. stdBillsFeatureSpread: null,
  9. refreshSettingForHint: function () {
  10. TREE_SHEET_HELPER.initSetting($('#stdBillsSpread')[0], billsLibObj.stdBillsTreeSetting);
  11. },
  12. checkBillsSpread: function () {
  13. if (!this.stdBillsSpread) {
  14. this.stdBillsSpread = SheetDataHelper.createNewSpread($('#stdBillsSpread')[0]);
  15. // 刷新setting中记录的spread的位置
  16. this.refreshSettingForHint();
  17. }
  18. },
  19. refreshBillsSpread: function () {
  20. if (this.stdBillsSpread) {
  21. this.stdBillsSpread.refresh();
  22. }
  23. },
  24. checkBillsRelaSpread: function () {
  25. if (!this.stdBillsJobSpread) {
  26. this.stdBillsJobSpread = SheetDataHelper.createNewSpread($('#stdBillsJobs')[0]);
  27. }
  28. if (!this.stdBillsFeatureSpread) {
  29. this.stdBillsFeatureSpread = SheetDataHelper.createNewSpread($('#stdBillsFeatures')[0]);
  30. }
  31. },
  32. refreshBillsRelaSpread: function () {
  33. if (this.stdBillsJobSpread) {
  34. this.stdBillsJobSpread.refresh();
  35. }
  36. if (this.stdBillsFeatureSpread) {
  37. this.stdBillsFeatureSpread.refresh();
  38. }
  39. },
  40. clearHighLight: function (spread) {
  41. if (spread) {
  42. let sheet = spread.getActiveSheet();
  43. sheet.suspendPaint();
  44. sheet.getRange(0, -1, sheet.getRowCount(), -1, GC.Spread.Sheets.SheetArea.viewport).backColor(undefined);
  45. sheet.resumePaint();
  46. }
  47. },
  48. loadStdBillsLib: function () {
  49. let i, select = $('#stdBillsLibSelect');
  50. select.empty();
  51. let bills_lib = projectInfoObj.projectInfo.engineeringInfo.bill_lib;
  52. bills_lib.forEach(function (data) {
  53. var option = $('<option>').val(data.id).text(data.name);
  54. select.append(option);
  55. });
  56. if (select.children.length !== 0) {
  57. billsLibObj.loadStdBills(select.val());
  58. }
  59. },
  60. loadStdBills: function (stdBillsLibID) {
  61. var that = this;
  62. var stdBillsJobData, stdBillsFeatureData, stdBills;
  63. var stdBillsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
  64. var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(stdBillsTree, billsLibObj.stdBillsSpread.getActiveSheet(), billsLibObj.stdBillsTreeSetting);
  65. var findData = function (value, field, Array) {
  66. var i = 0;
  67. for (i = 0; i < Array.length; i++) {
  68. if (value[field] === Array[i][field]) {
  69. return Array[i];
  70. }
  71. }
  72. return null;
  73. };
  74. let sortJobsAndFeatures = function (arr) {
  75. arr.sort(function (a, b) {
  76. let rst = 0;
  77. if(a.serialNo > b.serialNo) rst = 1;
  78. else if(a.serialNo < b.serialNo) rst = -1;
  79. return rst;
  80. });
  81. };
  82. var getBillsJobs = function (node) {
  83. var jobs = [], i, jobData = null;
  84. if (stdBillsJobData && node && node.data.jobs) {
  85. for (i = 0; i < node.data.jobs.length; i++) {
  86. jobData = findData(node.data.jobs[i], 'id', stdBillsJobData);
  87. if (jobData) {
  88. jobData.serialNo = node.data.jobs[i].serialNo;
  89. jobs.push(jobData);
  90. }
  91. }
  92. }
  93. sortJobsAndFeatures(jobs);
  94. return jobs;
  95. };
  96. var getBillsFeatures = function (node) {
  97. var features = [], i, featureData = null;
  98. if (stdBillsFeatureData && node && node.data.items) {
  99. for (i = 0; i < node.data.items.length; i++) {
  100. featureData = findData(node.data.items[i], 'id', stdBillsFeatureData);
  101. if (featureData) {
  102. featureData.serialNo = node.data.items[i].serialNo;
  103. features.push(featureData);
  104. }
  105. }
  106. }
  107. sortJobsAndFeatures(features);
  108. return features;
  109. };
  110. var showJobs = function (jobs) {
  111. SheetDataHelper.loadSheetHeader(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet());
  112. SheetDataHelper.loadSheetData(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet(), jobs);
  113. };
  114. var showFeatures = function (features) {
  115. SheetDataHelper.loadSheetHeader(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet());
  116. SheetDataHelper.loadSheetData(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet(), features);
  117. };
  118. var showJobsAndFeatures = function (node) {
  119. $('#stdBillsJobTab').show();
  120. $('#stdBillsRemarkTab').hide();
  121. billsLibObj.refreshBillsRelaSpread();
  122. billsLibObj.checkBillsRelaSpread();
  123. sortJobsAndFeatures(getBillsJobs(node));
  124. showJobs(getBillsJobs(node));
  125. showFeatures(getBillsFeatures(node));
  126. };
  127. var showBillsRemark = function (node) {
  128. $('#stdBillsJobTab').hide();
  129. $('#stdBillsRemarkTab').show();
  130. $('#stdBillsRemark').text(node && node.data.recharge ? node.data.recharge : '');
  131. };
  132. var showBillsRela = function (node) {
  133. if (node && node.children.length === 0) {
  134. showJobsAndFeatures(node);
  135. } else {
  136. showBillsRemark(node);
  137. }
  138. };
  139. CommonAjax.post('/stdBillsEditor/getJobContent', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  140. stdBillsJobData = datas;
  141. }, function () {
  142. stdBillsJobData = [];
  143. });
  144. CommonAjax.post('/stdBillsEditor/getItemCharacter', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  145. stdBillsFeatureData = datas;
  146. }, function () {
  147. stdBillsFeatureData = [];
  148. });
  149. CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  150. stdBills = datas;
  151. stdBillsTree.loadDatas(stdBills);
  152. stdBillsTreeController.showTreeData();
  153. showBillsRela(stdBillsTree.firstNode());
  154. stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, showBillsRela);
  155. that.stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {
  156. let selectNode = stdBillsTree.items[args.row];
  157. if (stdBillsTree.items[args.row].children.length === 0) {
  158. //特征及内容转化
  159. pageCCOprObj.setItemContentNode(stdBillsTree.items[args.row], getBillsJobs(stdBillsTree.items[args.row]), getBillsFeatures(stdBillsTree.items[args.row]));
  160. if (/\//.test(selectNode.data.unit)) {
  161. let existB = projectObj.project.Bills.sameStdCodeBillsData(selectNode.data.code);
  162. if (existB) {
  163. let std = JSON.parse(JSON.stringify(selectNode.data));
  164. std.unit = existB.unit;
  165. ProjectController.addBills(projectObj.project, projectObj.mainController, std);
  166. } else {
  167. ConfirmModal.stdBillsUnit.check(selectNode.data, function (std) {
  168. ProjectController.addBills(projectObj.project, projectObj.mainController, std);
  169. });
  170. }
  171. } else {
  172. ProjectController.addBills(projectObj.project, projectObj.mainController, selectNode.data);
  173. }
  174. }
  175. });
  176. }, function () {
  177. that.stdBillsSpread.unbind(GC.Spread.Sheets.Events.CellDoubleClick);
  178. });
  179. $('#stdBillsSearch>span>button').click(function () {
  180. var keyword = $('#stdBillsSearch>input').val();
  181. if (!keyword || keyword === '') {return}
  182. var result = stdBillsTree.items.filter(function (item) {
  183. var codeIs = item.data.code ? item.data.code.indexOf(keyword) !== -1 : false;
  184. var nameIs = item.data.name ? item.data.name.indexOf(keyword) !== -1 : false;
  185. return codeIs || nameIs;
  186. });
  187. result.sort(function (x, y) {
  188. return x.serialNo() - y.serialNo();
  189. });
  190. if (result.length !== 0) {
  191. var sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();
  192. stdBillsTreeController.setTreeSelected(result[0]);
  193. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
  194. for (let node of result) {
  195. billsLibObj.stdBillsSpread.getActiveSheet().getRange(node.serialNo(), -1, 1, -1).backColor('lemonChiffon');
  196. }
  197. $('#nextStdBills').show();
  198. $('#nextStdBills').click(function () {
  199. var cur = stdBillsTree.selected, resultIndex = result.indexOf(cur), sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();
  200. if (resultIndex === result.length - 1) {
  201. stdBillsTreeController.setTreeSelected(result[0]);
  202. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
  203. } else {
  204. stdBillsTreeController.setTreeSelected(result[resultIndex + 1]);
  205. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[resultIndex + 1].serialNo(), sel[0].col, 1, 1);
  206. }
  207. });
  208. } else {
  209. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  210. $('#nextStdBills').hide();
  211. }
  212. $('#stdBillsSearchResultCount').text('搜索结果:' + result.length);
  213. $('#stdBillsSearchResult').show();
  214. });
  215. },
  216. stdBillsTreeSetting: {
  217. "treeCol": 0,
  218. "emptyRows":0,
  219. "headRows":1,
  220. "headRowHeight":[
  221. 40
  222. ],
  223. "defaultRowHeight": 21,
  224. "cols":[{
  225. "width":160,
  226. "readOnly": true,
  227. "head":{
  228. "titleNames":["项目编码"],
  229. "spanCols":[1],
  230. "spanRows":[1],
  231. "vAlign":[1],
  232. "hAlign":[1],
  233. "font":["Arial"]
  234. },
  235. "data":{
  236. "field":"code",
  237. "vAlign":1,
  238. "hAlign":0,
  239. "font":"Arial"
  240. }
  241. }, {
  242. "width":150,
  243. "readOnly": true,
  244. "head":{
  245. "titleNames":["项目名称"],
  246. "spanCols":[1],
  247. "spanRows":[1],
  248. "vAlign":[1],
  249. "hAlign":[1],
  250. "font":["Arial"]
  251. },
  252. "data":{
  253. "field":"name",
  254. "vAlign":1,
  255. "hAlign":0,
  256. "font":"Arial"
  257. }
  258. }, {
  259. "width":50,
  260. "readOnly": true,
  261. "head":{
  262. "titleNames":["计量单位"],
  263. "spanCols":[1],
  264. "spanRows":[1],
  265. "vAlign":[1],
  266. "hAlign":[1],
  267. "font":["Arial"],
  268. "wordWrap": true
  269. },
  270. "data":{
  271. "field":"unit",
  272. "vAlign":1,
  273. "hAlign":1,
  274. "font":"Arial"
  275. }
  276. }, {
  277. "width":100,
  278. "readOnly": true,
  279. "showHint": true,
  280. "head":{
  281. "titleNames":["工程量计算规则"],
  282. "spanCols":[1],
  283. "spanRows":[1],
  284. "vAlign":[1],
  285. "hAlign":[1],
  286. "font":["Arial"]
  287. },
  288. "data":{
  289. "field":"ruleText",
  290. "vAlign":1,
  291. "hAlign":0,
  292. "font":"Arial"
  293. }
  294. }]
  295. },
  296. jobsSetting: {
  297. "emptyRows":0,
  298. "headRows":1,
  299. "headRowHeight":[25],
  300. "defaultRowHeight": 21,
  301. "cols":[{
  302. "width":160,
  303. "readOnly":true,
  304. "head":{
  305. "titleNames":["工作内容"],
  306. "spanCols":[1],
  307. "spanRows":[1],
  308. "vAlign":[1],
  309. "hAlign":[1],
  310. "font":["Arial"]
  311. },
  312. "data":{
  313. "field":"content",
  314. "vAlign":0,
  315. "hAlign":3,
  316. "font":"Arial"
  317. }
  318. }]
  319. },
  320. featuresSetting: {
  321. "emptyRows":0,
  322. "headRows":1,
  323. "headRowHeight":[25],
  324. "defaultRowHeight": 21,
  325. "cols":[{
  326. "width":160,
  327. "readOnly":true,
  328. "head":{
  329. "titleNames":["项目特征"],
  330. "spanCols":[1],
  331. "spanRows":[1],
  332. "vAlign":[1],
  333. "hAlign":[1],
  334. "font":["Arial"]
  335. },
  336. "data":{
  337. "field":"content",
  338. "vAlign":0,
  339. "hAlign":3,
  340. "font":"Arial"
  341. }
  342. }]
  343. }
  344. };
  345. function addEventOnResize(fn){
  346. let originFn = window.onresize;
  347. window.onresize =function () {
  348. originFn && originFn();
  349. fn();
  350. }
  351. }
  352. addEventOnResize(billsLibObj.refreshSettingForHint);
  353. $('#stdBillsTab').bind('click', function () {
  354. refreshSubSpread();//subSpread、jobSpread、itemSpread显示问题
  355. $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  356. var select = $('#stdBillsLibSelect');
  357. billsLibObj.refreshBillsSpread();
  358. billsLibObj.refreshBillsRelaSpread();
  359. billsLibObj.checkBillsSpread();
  360. if (select[0].options.length === 0) {
  361. billsLibObj.loadStdBillsLib();
  362. };
  363. });
  364. $('#stdBillsLibSelect').change(function () {
  365. $('#stdBillsSearchResult').hide();
  366. $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  367. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  368. var select = $(this);
  369. if (this.children.length !== 0) {
  370. billsLibObj.loadStdBills(select.val());
  371. }
  372. });
  373. // 关闭搜索结果
  374. $('#closeSearchStdBills').click(function () {
  375. $('#stdBillsSearchResult').hide();
  376. $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  377. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  378. });