std_bills_lib.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  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. loadStdBillsLib: function () {
  41. let i, select = $('#stdBillsLibSelect');
  42. select.empty();
  43. let bills_lib = projectInfoObj.projectInfo.engineeringInfo.bill_lib;
  44. bills_lib.forEach(function (data) {
  45. var option = $('<option>').val(data.id).text(data.name);
  46. select.append(option);
  47. });
  48. if (select.children.length !== 0) {
  49. billsLibObj.loadStdBills(select.val());
  50. }
  51. },
  52. loadStdBills: function (stdBillsLibID) {
  53. var that = this;
  54. var stdBillsJobData, stdBillsFeatureData, stdBills;
  55. var stdBillsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
  56. var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(stdBillsTree, billsLibObj.stdBillsSpread.getActiveSheet(), billsLibObj.stdBillsTreeSetting);
  57. var findData = function (value, field, Array) {
  58. var i = 0;
  59. for (i = 0; i < Array.length - 1; i++) {
  60. if (value[field] === Array[i][field]) {
  61. return Array[i];
  62. }
  63. }
  64. return null;
  65. };
  66. var getBillsJobs = function (node) {
  67. var jobs = [], i, jobData = null;
  68. if (stdBillsJobData && node && node.data.jobs) {
  69. for (i = 0; i < node.data.jobs.length; i++) {
  70. jobData = findData(node.data.jobs[i], 'id', stdBillsJobData);
  71. if (jobData) {
  72. jobs.push(jobData);
  73. }
  74. }
  75. }
  76. return jobs;
  77. };
  78. var getBillsFeatures = function (node) {
  79. var features = [], i, featureData = null;
  80. if (stdBillsFeatureData && node && node.data.items) {
  81. for (i = 0; i < node.data.items.length; i++) {
  82. featureData = findData(node.data.items[i], 'id', stdBillsFeatureData);
  83. if (featureData) {
  84. features.push(featureData);
  85. }
  86. }
  87. }
  88. return features;
  89. };
  90. var showJobs = function (jobs) {
  91. SheetDataHelper.loadSheetHeader(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet());
  92. SheetDataHelper.loadSheetData(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet(), jobs);
  93. };
  94. var showFeatures = function (features) {
  95. SheetDataHelper.loadSheetHeader(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet());
  96. SheetDataHelper.loadSheetData(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet(), features);
  97. };
  98. var showJobsAndFeatures = function (node) {
  99. $('#stdBillsJobTab').show();
  100. $('#stdBillsRemarkTab').hide();
  101. billsLibObj.checkBillsRelaSpread();
  102. showJobs(getBillsJobs(node));
  103. showFeatures(getBillsFeatures(node));
  104. };
  105. var showBillsRemark = function (node) {
  106. $('#stdBillsJobTab').hide();
  107. $('#stdBillsRemarkTab').show();
  108. $('#stdBillsRemark').text(node && node.data.recharge ? node.data.recharge : '');
  109. };
  110. var showBillsRela = function (node) {
  111. if (node && node.children.length === 0) {
  112. showJobsAndFeatures(node);
  113. } else {
  114. showBillsRemark(node);
  115. }
  116. };
  117. CommonAjax.post('/stdBillsEditor/getJobContent', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  118. stdBillsJobData = datas;
  119. }, function () {
  120. stdBillsJobData = [];
  121. });
  122. CommonAjax.post('/stdBillsEditor/getItemCharacter', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  123. stdBillsFeatureData = datas;
  124. }, function () {
  125. stdBillsFeatureData = [];
  126. });
  127. CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  128. stdBills = datas;
  129. stdBillsTree.loadDatas(stdBills);
  130. stdBillsTreeController.showTreeData();
  131. showBillsRela(stdBillsTree.firstNode());
  132. stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, showBillsRela);
  133. that.stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {
  134. if (stdBillsTree.items[args.row].children.length === 0) {
  135. //特征及内容转化
  136. pageCCOprObj.setItemContentNode(stdBillsTree.items[args.row], getBillsJobs(stdBillsTree.items[args.row]), getBillsFeatures(stdBillsTree.items[args.row]));
  137. ProjectController.addBills(projectObj.project, projectObj.mainController, stdBillsTree.items[args.row]);
  138. }
  139. });
  140. }, function () {
  141. that.stdBillsSpread.unbind(GC.Spread.Sheets.Events.CellDoubleClick);
  142. });
  143. $('#stdBillsSearch>span>button').click(function () {
  144. var keyword = $('#stdBillsSearch>input').val();
  145. if (!keyword || keyword === '') {return}
  146. var result = stdBillsTree.items.filter(function (item) {
  147. var codeIs = item.data.code ? item.data.code.indexOf(keyword) !== -1 : false;
  148. var nameIs = item.data.name ? item.data.name.indexOf(keyword) !== -1 : false;
  149. return codeIs || nameIs;
  150. });
  151. result.sort(function (x, y) {
  152. return x.serialNo() - y.serialNo();
  153. });
  154. if (result.length !== 0) {
  155. var sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();
  156. stdBillsTreeController.setTreeSelected(result[0]);
  157. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
  158. $('#nextStdBills').show();
  159. $('#nextStdBills').click(function () {
  160. var cur = stdBillsTree.selected, resultIndex = result.indexOf(cur), sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();
  161. if (resultIndex === result.length - 1) {
  162. stdBillsTreeController.setTreeSelected(result[0]);
  163. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
  164. } else {
  165. stdBillsTreeController.setTreeSelected(result[resultIndex + 1]);
  166. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[resultIndex + 1].serialNo(), sel[0].col, 1, 1);
  167. }
  168. });
  169. } else {
  170. $('#nextStdBills').hide();
  171. }
  172. $('#stdBillsSearchResultCount').text('搜索结果:' + result.length);
  173. $('#stdBillsSearchResult').show();
  174. });
  175. },
  176. stdBillsTreeSetting: {
  177. "treeCol": 0,
  178. "emptyRows":0,
  179. "headRows":1,
  180. "headRowHeight":[
  181. 40
  182. ],
  183. "defaultRowHeight": 21,
  184. "cols":[{
  185. "width":150,
  186. "readOnly": true,
  187. "head":{
  188. "titleNames":["项目编码"],
  189. "spanCols":[1],
  190. "spanRows":[1],
  191. "vAlign":[1],
  192. "hAlign":[1],
  193. "font":["Arial"]
  194. },
  195. "data":{
  196. "field":"code",
  197. "vAlign":1,
  198. "hAlign":0,
  199. "font":"Arial"
  200. }
  201. }, {
  202. "width":120,
  203. "readOnly": true,
  204. "head":{
  205. "titleNames":["项目名称"],
  206. "spanCols":[1],
  207. "spanRows":[1],
  208. "vAlign":[1],
  209. "hAlign":[1],
  210. "font":["Arial"]
  211. },
  212. "data":{
  213. "field":"name",
  214. "vAlign":1,
  215. "hAlign":0,
  216. "font":"Arial"
  217. }
  218. }, {
  219. "width":40,
  220. "readOnly": true,
  221. "head":{
  222. "titleNames":["计量单位"],
  223. "spanCols":[1],
  224. "spanRows":[1],
  225. "vAlign":[1],
  226. "hAlign":[1],
  227. "font":["Arial"],
  228. "wordWrap": true
  229. },
  230. "data":{
  231. "field":"unit",
  232. "vAlign":1,
  233. "hAlign":1,
  234. "font":"Arial"
  235. }
  236. }, {
  237. "width":100,
  238. "readOnly": true,
  239. "showHint": true,
  240. "head":{
  241. "titleNames":["工程量计算规则"],
  242. "spanCols":[1],
  243. "spanRows":[1],
  244. "vAlign":[1],
  245. "hAlign":[1],
  246. "font":["Arial"]
  247. },
  248. "data":{
  249. "field":"ruleText",
  250. "vAlign":1,
  251. "hAlign":0,
  252. "font":"Arial"
  253. }
  254. }]
  255. },
  256. jobsSetting: {
  257. "emptyRows":0,
  258. "headRows":1,
  259. "headRowHeight":[25],
  260. "defaultRowHeight": 21,
  261. "cols":[{
  262. "width":200,
  263. "readOnly":true,
  264. "head":{
  265. "titleNames":["工作内容"],
  266. "spanCols":[1],
  267. "spanRows":[1],
  268. "vAlign":[1],
  269. "hAlign":[1],
  270. "font":["Arial"]
  271. },
  272. "data":{
  273. "field":"content",
  274. "vAlign":0,
  275. "hAlign":3,
  276. "font":"Arial"
  277. }
  278. }]
  279. },
  280. featuresSetting: {
  281. "emptyRows":0,
  282. "headRows":1,
  283. "headRowHeight":[25],
  284. "defaultRowHeight": 21,
  285. "cols":[{
  286. "width":200,
  287. "readOnly":true,
  288. "head":{
  289. "titleNames":["项目特征"],
  290. "spanCols":[1],
  291. "spanRows":[1],
  292. "vAlign":[1],
  293. "hAlign":[1],
  294. "font":["Arial"]
  295. },
  296. "data":{
  297. "field":"content",
  298. "vAlign":0,
  299. "hAlign":3,
  300. "font":"Arial"
  301. }
  302. }]
  303. }
  304. };
  305. function addEventOnResize(fn){
  306. let originFn = window.onresize;
  307. window.onresize =function () {
  308. originFn && originFn();
  309. fn();
  310. }
  311. }
  312. addEventOnResize(billsLibObj.refreshSettingForHint);
  313. $('#stdBillsTab').bind('click', function () {
  314. refreshSubSpread();//subSpread、jobSpread、itemSpread显示问题
  315. $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  316. var select = $('#stdBillsLibSelect');
  317. billsLibObj.refreshBillsSpread();
  318. billsLibObj.refreshBillsRelaSpread();
  319. billsLibObj.checkBillsSpread();
  320. if (select[0].options.length === 0) {
  321. billsLibObj.loadStdBillsLib();
  322. };
  323. });
  324. $('#stdBillsLibSelect').change(function () {
  325. var select = $(this);
  326. if (this.children.length !== 0) {
  327. LoadStdBills(select.val());
  328. }
  329. });
  330. $('#closeSearchStdBills').click(function () {
  331. $('#stdBillsSearchResult').hide();
  332. $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  333. });