std_bills_lib.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. /**
  2. * Standard Bills Lib
  3. * Created by Mai on 2017/5/16.
  4. */
  5. var billsLibObj = {
  6. doAfterLoadBills: null, //外部设置拉取清单数据后的回调
  7. stdBillsTree: null,
  8. stdBillsSpread: null,
  9. stdBillsJobSpread: null,
  10. stdBillsFeatureSpread: null,
  11. refreshSettingForHint: function () {
  12. TREE_SHEET_HELPER.initSetting($('#stdBillsSpread')[0], billsLibObj.stdBillsTreeSetting);
  13. },
  14. checkBillsSpread: function () {
  15. if (!this.stdBillsSpread) {
  16. this.stdBillsSpread = SheetDataHelper.createNewSpread($('#stdBillsSpread')[0]);
  17. sheetCommonObj.spreadDefaultStyle(this.stdBillsSpread);
  18. this.stdBillsSpread.getSheet(0).name('stdBillsLib_bills');
  19. // 刷新setting中记录的spread的位置
  20. this.refreshSettingForHint();
  21. }
  22. },
  23. refreshBillsSpread: function () {
  24. if (this.stdBillsSpread) {
  25. this.stdBillsSpread.refresh();
  26. }
  27. },
  28. checkBillsRelaSpread: function () {
  29. if (!this.stdBillsJobSpread) {
  30. this.stdBillsJobSpread = SheetDataHelper.createNewSpread($('#stdBillsJobs')[0]);
  31. sheetCommonObj.spreadDefaultStyle(this.stdBillsJobSpread);
  32. }
  33. if (!this.stdBillsFeatureSpread) {
  34. this.stdBillsFeatureSpread = SheetDataHelper.createNewSpread($('#stdBillsFeatures')[0]);
  35. sheetCommonObj.spreadDefaultStyle(this.stdBillsFeatureSpread);
  36. }
  37. },
  38. refreshBillsRelaSpread: function () {
  39. if (this.stdBillsJobSpread) {
  40. this.stdBillsJobSpread.refresh();
  41. }
  42. if (this.stdBillsFeatureSpread) {
  43. this.stdBillsFeatureSpread.refresh();
  44. }
  45. },
  46. clearHighLight: function (spread) {
  47. if (spread) {
  48. let sheet = spread.getActiveSheet();
  49. sheet.suspendPaint();
  50. let orgColor = optionsOprObj.getOption('COLOROPTS', 'DEFAULT').backColor;
  51. sheet.getRange(0, -1, sheet.getRowCount(), -1, GC.Spread.Sheets.SheetArea.viewport).backColor(orgColor);
  52. sheet.resumePaint();
  53. }
  54. },
  55. setTagForHint: function (nodes) {
  56. let sheet = this.stdBillsSpread.getActiveSheet();
  57. sheet.suspendPaint();
  58. sheet.suspendEvent();
  59. for(let node of nodes){
  60. sheet.setTag(node.serialNo(), 2, node.data.ruleText ? node.data.ruleText : '');
  61. }
  62. sheet.resumePaint();
  63. sheet.resumeEvent();
  64. },
  65. loadStdBillsLib: function () {
  66. let i, select = $('#stdBillsLibSelect');
  67. select.empty();
  68. let bills_lib = projectObj.project.projectInfo.engineeringInfo.bill_lib;
  69. let selectedBillsLib = sessionStorage.getItem('stdBillsLib');
  70. bills_lib.forEach(function (data) {
  71. var option = $('<option>').val(data.id).text(data.name);
  72. if(selectedBillsLib && data.id == selectedBillsLib){
  73. option.attr('selected', 'selected');
  74. }
  75. select.append(option);
  76. });
  77. if (select.children.length !== 0) {
  78. billsLibObj.loadStdBills(select.val());
  79. }
  80. },
  81. sortJobsAndFeatures: function (arr) {
  82. arr.sort(function (a, b) {
  83. let rst = 0;
  84. if(a.serialNo > b.serialNo) rst = 1;
  85. else if(a.serialNo < b.serialNo) rst = -1;
  86. return rst;
  87. });
  88. },
  89. findData: function (value, field, Array) {
  90. var i = 0;
  91. for (i = 0; i < Array.length; i++) {
  92. if (value[field] == Array[i][field]) {
  93. return Array[i];
  94. }
  95. }
  96. return null;
  97. },
  98. getBillsJobs: function (stdBillsJobData, node) {
  99. var jobs = [], i, jobData = null;
  100. if (stdBillsJobData && node && node.data.jobs) {
  101. for (i = 0; i < node.data.jobs.length; i++) {
  102. jobData = this.findData(node.data.jobs[i], 'id', stdBillsJobData);
  103. if (jobData) {
  104. jobData.serialNo = node.data.jobs[i].serialNo;
  105. jobs.push(jobData);
  106. }
  107. }
  108. }
  109. this.sortJobsAndFeatures(jobs);
  110. return jobs;
  111. },
  112. getBillsFeatures: function (stdBillsFeatureData, node) {
  113. var features = [], i, featureData = null;
  114. if (stdBillsFeatureData && node && node.data.items) {
  115. for (i = 0; i < node.data.items.length; i++) {
  116. featureData = this.findData(node.data.items[i], 'id', stdBillsFeatureData);
  117. if (featureData) {
  118. featureData.serialNo = node.data.items[i].serialNo;
  119. features.push(featureData);
  120. }
  121. }
  122. }
  123. this.sortJobsAndFeatures(features);
  124. return features;
  125. },
  126. insertBills: function (stdBillsJobData, stdBillsFeatureData, node) {
  127. if(projectObj.project.projectInfo.property.lockBills == true && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
  128. return false;
  129. }
  130. $.bootstrapLoading.start();
  131. //设置清单备注
  132. if(node.parent && node.parent.data.recharge){
  133. node.data.comments = node.parent.data.recharge;
  134. }
  135. //特征及内容转化
  136. pageCCOprObj.setItemContentNode(node, this.getBillsJobs(stdBillsJobData, node), this.getBillsFeatures(stdBillsFeatureData, node), node.data.name);
  137. if (/\//.test(node.data.unit)) {
  138. let existB = projectObj.project.Bills.sameStdCodeBillsData(node.data.code);
  139. if (existB) {
  140. let std = JSON.parse(JSON.stringify(node.data));
  141. std.unit = existB.unit;
  142. let canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, std);
  143. if(canAdd === false && $.bootstrapLoading.isLoading()){
  144. $.bootstrapLoading.end();
  145. }
  146. } else {
  147. ConfirmModal.stdBillsUnit.check(node.data, function (std) {
  148. let canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, std);
  149. if(canAdd === false && $.bootstrapLoading.isLoading()){
  150. $.bootstrapLoading.end();
  151. }
  152. }, function () {
  153. if($.bootstrapLoading.isLoading()){
  154. $.bootstrapLoading.end();
  155. }
  156. });
  157. }
  158. } else {
  159. let canAdd = ProjectController.addBills(projectObj.project, projectObj.mainController, node.data);
  160. if(canAdd === false && $.bootstrapLoading.isLoading()){
  161. $.bootstrapLoading.end();
  162. }
  163. }
  164. return true;
  165. },
  166. showBillsRela: function (node) {
  167. if (node && node.children.length === 0) {
  168. billsLibObj.showJobsAndFeatures(node);
  169. } else {
  170. billsLibObj.showBillsRemark(node);
  171. }
  172. },
  173. showJobs:function (jobs) {
  174. SheetDataHelper.loadSheetHeader(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet());
  175. SheetDataHelper.loadSheetData(billsLibObj.jobsSetting, billsLibObj.stdBillsJobSpread.getActiveSheet(), jobs);
  176. },
  177. showFeatures: function (features) {
  178. SheetDataHelper.loadSheetHeader(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet());
  179. SheetDataHelper.loadSheetData(billsLibObj.featuresSetting, billsLibObj.stdBillsFeatureSpread.getActiveSheet(), features);
  180. },
  181. showJobsAndFeatures: function (node) {
  182. $('#stdBillsJobTab').show();
  183. $('#stdBillsRemarkTab').hide();
  184. billsLibObj.refreshBillsRelaSpread();
  185. billsLibObj.checkBillsRelaSpread();
  186. this.showJobs(billsLibObj.getBillsJobs(billsLibObj.stdBillsJobData, node));
  187. this.showFeatures(billsLibObj.getBillsFeatures(billsLibObj.stdBillsFeatureData, node));
  188. },
  189. showBillsRemark: function (node) {
  190. $('#stdBillsJobTab').hide();
  191. $('#stdBillsRemarkTab').show();
  192. $('#stdBillsRemark').text(node && node.data.recharge ? node.data.recharge : '');
  193. },
  194. loadStdBills: function (stdBillsLibID) {
  195. var that = this;
  196. var stdBills;
  197. if(that.stdBillsTree){
  198. that.stdBillsTree = null;
  199. }
  200. that.stdBillsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
  201. var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(that.stdBillsTree, billsLibObj.stdBillsSpread.getActiveSheet(), billsLibObj.stdBillsTreeSetting);
  202. $.bootstrapLoading.start();
  203. CommonAjax.post('/stdBillsEditor/getJobContent', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  204. that.stdBillsJobData = datas;
  205. }, function () {
  206. that.stdBillsJobData = [];
  207. });
  208. CommonAjax.post('/stdBillsEditor/getItemCharacter', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  209. that.stdBillsFeatureData = datas;
  210. }, function () {
  211. that.stdBillsFeatureData = [];
  212. });
  213. CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
  214. stdBills = datas;
  215. that.stdBillsTree.loadDatas(stdBills);
  216. //读取展开收起状态
  217. let currentExpState = sessionStorage.getItem('stdBillsLibExpState');
  218. if(currentExpState){
  219. that.stdBillsTree.setExpandedByState(that.stdBillsTree.items, currentExpState);
  220. }
  221. //非叶子节点默认收起
  222. else{
  223. that.stdBillsTree.setRootExpanded(that.stdBillsTree.roots, false);
  224. }
  225. stdBillsTreeController.showTreeData();
  226. //billsLibObj.setTagForHint(that.stdBillsTree.items);
  227. that.showBillsRela(that.stdBillsTree.firstNode());
  228. stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.showBillsRela);
  229. that.stdBillsSpread.unbind(GC.Spread.Sheets.Events.CellDoubleClick);
  230. that.stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {
  231. let selectNode = that.stdBillsTree.items[args.row];
  232. let name = selectNode.data.name;
  233. if (that.stdBillsTree.items[args.row].children.length === 0) {
  234. billsLibObj.insertBills(that.stdBillsJobData, that.stdBillsFeatureData, selectNode);
  235. }
  236. else{
  237. let me = billsLibObj;
  238. let node = that.stdBillsTree.items[args.row];
  239. if (!node || node.children.length === 0)
  240. return;
  241. node.setExpanded(!node.expanded);
  242. //设置展开收起状态
  243. sessionStorage.setItem('stdBillsLibExpState', that.stdBillsTree.getExpState(that.stdBillsTree.items));
  244. TREE_SHEET_HELPER.massOperationSheet(args.sheet, function () {
  245. let iCount = node.posterityCount(), i, child;
  246. for (i = 0; i < iCount; i++) {
  247. child = that.stdBillsTree.items[args.row + i + 1];
  248. args.sheet.setRowVisible(args.row + i + 1, child.visible, args.sheetArea);
  249. }
  250. args.sheet.invalidateLayout();
  251. });
  252. args.sheet.repaint();
  253. }
  254. });
  255. if(that.doAfterLoadBills){
  256. that.doAfterLoadBills();
  257. }
  258. $.bootstrapLoading.end();
  259. }, function () {
  260. that.stdBillsSpread.unbind(GC.Spread.Sheets.Events.CellDoubleClick);
  261. $.bootstrapLoading.end();
  262. });
  263. $('#stdBillsSearch>div>button').click(function () {
  264. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  265. var keyword = $('#stdBillsSearch>input').val();
  266. if (!keyword || keyword === '') {
  267. $('#stdBillsSearchResult').hide();
  268. return;
  269. }
  270. var result = that.stdBillsTree.items.filter(function (item) {
  271. var codeIs = item.data.code ? item.data.code.indexOf(keyword) !== -1 : false;
  272. var nameIs = item.data.name ? item.data.name.indexOf(keyword) !== -1 : false;
  273. return codeIs || nameIs;
  274. });
  275. result.sort(function (x, y) {
  276. return x.serialNo() - y.serialNo();
  277. });
  278. if (result.length !== 0) {
  279. //展开搜索出来的节点
  280. billsLibObj.expandSearchNodes(result);
  281. //设置记住展开
  282. sessionStorage.setItem('stdBillsLibExpState', that.stdBillsTree.getExpState(that.stdBillsTree.items));
  283. TREE_SHEET_HELPER.massOperationSheet(billsLibObj.stdBillsSpread.getActiveSheet(), function () {
  284. var sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();
  285. stdBillsTreeController.setTreeSelected(result[0]);
  286. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
  287. for (let node of result) {
  288. billsLibObj.stdBillsSpread.getActiveSheet().getRange(node.serialNo(), -1, 1, -1).backColor('lemonChiffon');
  289. }
  290. });
  291. billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[0].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);
  292. $('#nextStdBills').show();
  293. $('#nextStdBills').unbind('click');
  294. $('#nextStdBills').bind('click', function () {
  295. var cur = that.stdBillsTree.selected, resultIndex = result.indexOf(cur), sel = billsLibObj.stdBillsSpread.getActiveSheet().getSelections();
  296. if (resultIndex === result.length - 1) {
  297. stdBillsTreeController.setTreeSelected(result[0]);
  298. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
  299. billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[0].serialNo(), GC.Spread.Sheets.VerticalPosition.top);
  300. } else {
  301. stdBillsTreeController.setTreeSelected(result[resultIndex + 1]);
  302. billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[resultIndex + 1].serialNo(), sel[0].col, 1, 1);
  303. billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[resultIndex + 1].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);
  304. }
  305. });
  306. } else {
  307. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  308. $('#nextStdBills').hide();
  309. }
  310. $('#stdBillsSearchResultCount').text('搜索结果:' + result.length);
  311. $('#stdBillsSearchResult').show();
  312. });
  313. },
  314. expandSearchNodes: function(nodes){
  315. let that = this;
  316. TREE_SHEET_HELPER.massOperationSheet(billsLibObj.stdBillsSpread.getActiveSheet(), function () {
  317. function expParentNode(node){
  318. if(node.parent){
  319. expParentNode(node.parent);
  320. if(!node.parent.expanded){
  321. node.parent.setExpanded(true);
  322. }
  323. }
  324. }
  325. for(let node of nodes){
  326. expParentNode(node);
  327. }
  328. TREE_SHEET_HELPER.refreshTreeNodeData(that.stdBillsTreeSetting, that.stdBillsSpread.getActiveSheet(), that.stdBillsTree.roots, true);
  329. TREE_SHEET_HELPER.refreshNodesVisible(that.stdBillsTree.roots, that.stdBillsSpread.getActiveSheet(), true);
  330. });
  331. },
  332. locateAtBills: function (code) {
  333. let nineCode = code.substring(0, 9);
  334. let items = this.stdBillsTree.items;
  335. let locateBills = _.find(items, function(item){
  336. return item.data.code === nineCode;
  337. });
  338. if(locateBills){
  339. this.expandSearchNodes([locateBills]);
  340. sessionStorage.setItem('stdBillsLibExpState', this.stdBillsTree.getExpState(this.stdBillsTree.items));
  341. }
  342. let stdBillsSheet = this.stdBillsSpread.getActiveSheet();
  343. let locateRow = locateBills ? locateBills.serialNo() : 0;
  344. stdBillsSheet.setActiveCell(locateRow, 0);
  345. this.showBillsRela(locateBills);
  346. stdBillsSheet.showRow(locateRow, GC.Spread.Sheets.VerticalPosition.center);
  347. },
  348. stdBillsTreeSetting: {
  349. "emptyRowHeader": true,
  350. "rowHeaderWidth": 15,
  351. "treeCol": 0,
  352. "emptyRows":0,
  353. "headRows":1,
  354. "headRowHeight":[
  355. 40
  356. ],
  357. "defaultRowHeight": 21,
  358. "cols":[{
  359. "width":140,
  360. "readOnly": true,
  361. "head":{
  362. "titleNames":["项目编码"],
  363. "spanCols":[1],
  364. "spanRows":[1],
  365. "vAlign":[1],
  366. "hAlign":[1],
  367. "font":["Arial"]
  368. },
  369. "data":{
  370. "field":"code",
  371. "vAlign":1,
  372. "hAlign":0,
  373. "font":"Arial"
  374. }
  375. }, {
  376. "width":190,
  377. "readOnly": true,
  378. "head":{
  379. "titleNames":["项目名称"],
  380. "spanCols":[1],
  381. "spanRows":[1],
  382. "vAlign":[1],
  383. "hAlign":[1],
  384. "font":["Arial"]
  385. },
  386. "data":{
  387. "field":"name",
  388. "vAlign":1,
  389. "hAlign":0,
  390. "font":"Arial"
  391. }
  392. }, {
  393. "width":45,
  394. "readOnly": true,
  395. "showHint": true,
  396. "head":{
  397. "titleNames":["计量单位"],
  398. "spanCols":[1],
  399. "spanRows":[1],
  400. "vAlign":[1],
  401. "hAlign":[1],
  402. "font":["Arial"],
  403. "wordWrap": true
  404. },
  405. "data":{
  406. "field":"unit",
  407. "vAlign":1,
  408. "hAlign":1,
  409. "font":"Arial"
  410. }
  411. }/*, {
  412. "width":100,
  413. "readOnly": true,
  414. "showHint": true,
  415. "head":{
  416. "titleNames":["工程量计算规则"],
  417. "spanCols":[1],
  418. "spanRows":[1],
  419. "vAlign":[1],
  420. "hAlign":[1],
  421. "font":["Arial"]
  422. },
  423. "data":{
  424. "field":"ruleText",
  425. "vAlign":1,
  426. "hAlign":0,
  427. "font":"Arial"
  428. }
  429. }*/]
  430. },
  431. jobsSetting: {
  432. "emptyRows":0,
  433. "headRows":1,
  434. "rowHeaderWidth": 15,
  435. "headRowHeight":[25],
  436. "defaultRowHeight": 21,
  437. "cols":[{
  438. "width":160,
  439. "readOnly":true,
  440. "head":{
  441. "titleNames":["工作内容"],
  442. "spanCols":[1],
  443. "spanRows":[1],
  444. "vAlign":[1],
  445. "hAlign":[1],
  446. "font":["Arial"]
  447. },
  448. "data":{
  449. "field":"content",
  450. "vAlign":0,
  451. "hAlign":3,
  452. "font":"Arial"
  453. }
  454. }]
  455. },
  456. featuresSetting: {
  457. "emptyRows":0,
  458. "headRows":1,
  459. "rowHeaderWidth": 15,
  460. "headRowHeight":[25],
  461. "defaultRowHeight": 21,
  462. "cols":[{
  463. "width":160,
  464. "readOnly":true,
  465. "head":{
  466. "titleNames":["项目特征"],
  467. "spanCols":[1],
  468. "spanRows":[1],
  469. "vAlign":[1],
  470. "hAlign":[1],
  471. "font":["Arial"]
  472. },
  473. "data":{
  474. "field":"content",
  475. "vAlign":0,
  476. "hAlign":3,
  477. "font":"Arial"
  478. }
  479. }]
  480. }
  481. };
  482. function addEventOnResize(fn){
  483. let originFn = window.onresize;
  484. window.onresize =function () {
  485. originFn && originFn();
  486. fn();
  487. }
  488. }
  489. addEventOnResize(billsLibObj.refreshSettingForHint);
  490. //赋初始高度
  491. if($('#stdBillsSpread').height() === 0 || $('#qd').find('.bottom-content').height() === 0){
  492. $('#stdBillsSpread').height($(window).height()-$(".header").height()-$(".toolsbar").height()-$(".tools-bar-height-q").height()-312);
  493. $('#qd').find('.bottom-content').find('.p-0').height(270);
  494. }
  495. $('#stdBillsTab').bind('click', function () {
  496. if(!projectReadOnly){
  497. refreshSubSpread();//subSpread、jobSpread、itemSpread显示问题
  498. var select = $('#stdBillsLibSelect');
  499. billsLibObj.refreshBillsSpread();
  500. billsLibObj.refreshBillsRelaSpread();
  501. billsLibObj.checkBillsSpread();
  502. if (select[0].options.length === 0) {
  503. billsLibObj.loadStdBillsLib();
  504. };
  505. }
  506. });
  507. $('#stdBillsLibSelect').change(function () {
  508. $('#stdBillsSearchResult').hide();
  509. //$(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  510. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  511. var select = $(this);
  512. if (this.children.length !== 0) {
  513. //设置sessionStorage
  514. let billsLibId = select.val();
  515. sessionStorage.setItem('stdBillsLib', billsLibId);
  516. //清除展开收起状态sessionStorage
  517. sessionStorage.removeItem('stdBillsLibExpState');
  518. billsLibObj.loadStdBills(billsLibId);
  519. }
  520. });
  521. //搜索框回车
  522. $('#stdBillsSearch>input').bind('keypress', function (event) {
  523. if(event.keyCode === 13){
  524. $(this).blur();
  525. $('#stdBillsSearch>div>button').click();
  526. }
  527. });
  528. // 关闭搜索结果
  529. $('#closeSearchStdBills').click(function () {
  530. $('#stdBillsSearchResult').hide();
  531. $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() - $(".tools-bar-height-q").height() - 202);
  532. billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
  533. billsLibObj.refreshBillsSpread();
  534. billsLibObj.refreshBillsRelaSpread();
  535. });