ledger.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. /**
  2. * 台账相关js
  3. *
  4. * @author Mai
  5. * @date 2018/02/05
  6. * @version
  7. */
  8. $(document).ready(function() {
  9. autoFlashHeight();
  10. const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]);
  11. SpreadJsObj.addDeleteBind(ledgerSpread);
  12. const ledgerTree = createNewPathTree({
  13. id: 'ledger_id',
  14. pid: 'ledger_pid',
  15. order: 'order',
  16. level: 'level',
  17. rootId: -1,
  18. keys: ['id', 'tender_id', 'ledger_id']
  19. });
  20. ledgerTree.loadDatas(ledger);
  21. SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), {
  22. cols: [
  23. {title: '项目节编号', field: 'code', width: 150, cellType: 'tree'},
  24. {title: '清单编号', field: 'b_code', width: 80},
  25. {title: '名称', field: 'name', width: 230},
  26. {title: '单位', field: 'unit', width: 50},
  27. {title: '单价', field: 'unit_price', width: 60, type: 'Number'},
  28. {title: '数量', field: 'quantity', width: 60, type: 'Number'},
  29. {title: '金额', field: 'total_price', width: 60, type: 'Number'},
  30. {title: '施工图原设计', field: 'design', width: 60},
  31. {title: '图(册)号', field: 'drawingCode', width: 80},
  32. {title: '备注', field: 'memo', width: 100}
  33. ],
  34. treeCol: 0,
  35. emptyRows: 3,
  36. headRows: 2,
  37. headRowHeight: [40, 40],
  38. defaultRowHeight: 21,
  39. });
  40. SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), 'tree', ledgerTree);
  41. const treeOperationObj = {
  42. /**
  43. * 刷新顶部按钮是否可用
  44. * @param sheet
  45. * @param selections
  46. */
  47. refreshOperationValid: function (sheet, selections) {
  48. const setObjEnable = function (obj, enable) {
  49. if (enable) {
  50. obj.removeClass('disabled');
  51. } else {
  52. obj.addClass('disabled');
  53. }
  54. };
  55. const row = selections[0].row;
  56. const tree = sheet.zh_tree;
  57. if (!tree) { return; }
  58. const node = sheet.zh_tree.nodes[row];
  59. setObjEnable($('#delete'), node);
  60. setObjEnable($('#up-move'), node && node.order > 1);
  61. setObjEnable($('#down-move'), node && !tree.isLastSibling(node));
  62. setObjEnable($('#up-level'), node && tree.getParent(node));
  63. setObjEnable($('#down-level'), node && node.order > 1);
  64. },
  65. refreshTree: function (sheet, data) {
  66. SpreadJsObj.massOperationSheet(sheet, function () {
  67. const tree = sheet.zh_tree;
  68. // 处理删除
  69. if (data.delete) {
  70. for (const d of data.delete) {
  71. sheet.deleteRows(tree.nodes.indexOf(d), 1);
  72. }
  73. }
  74. // 处理新增
  75. if (data.create) {
  76. const newNodes = data.create;
  77. if (newNodes) {
  78. newNodes.sort(function (a, b) {
  79. const aIndex = tree.nodes.indexOf(a);
  80. const bIndex = tree.nodes.indexOf(b);
  81. return aIndex - bIndex;
  82. });
  83. for (const node of newNodes) {
  84. const index = tree.nodes.indexOf(node);
  85. sheet.addRows(index, 1);
  86. SpreadJsObj.reLoadRowData(sheet, index, 1);
  87. }
  88. }
  89. }
  90. // 处理更新
  91. if (data.update) {
  92. const rows = [];
  93. for (const u of data.update) {
  94. rows.push(tree.nodes.indexOf(u));
  95. }
  96. SpreadJsObj.reLoadRowsData(sheet, rows);
  97. }
  98. // 处理展开
  99. if (data.expand) {
  100. for (const e of data.expand) {
  101. const children = tree.getChildren(e);
  102. for (const child of children) {
  103. sheet.setRowVisible(tree.nodes.indexOf(child), child.visible);
  104. }
  105. }
  106. }
  107. });
  108. },
  109. /**
  110. * 新增节点
  111. * @param spread
  112. */
  113. addNode: function (spread) {
  114. const self = this;
  115. const sheet = spread.getActiveSheet();
  116. const row = sheet.getSelections()[0].row;
  117. const tree = sheet.zh_tree;
  118. if (!tree) { return; }
  119. const node = sheet.zh_tree.nodes[row];
  120. if (!node) { return; }
  121. SpreadJsObj.massOperationSheet(sheet, function () {
  122. tree.baseOperation('base-operation', node, 'add', function (result) {
  123. self.refreshTree(sheet, result);
  124. self.refreshOperationValid(sheet, sheet.getSelections());
  125. });
  126. });
  127. },
  128. /**
  129. * 删除选中节点
  130. * @param spread
  131. */
  132. deleteNode: function (spread) {
  133. const self = this;
  134. const sheet = spread.getActiveSheet();
  135. const row = sheet.getSelections()[0].row;
  136. const tree = sheet.zh_tree;
  137. if (!tree) { return; }
  138. const node = sheet.zh_tree.nodes[row];
  139. if (!node) { return; }
  140. const count = ledgerTree.getPosterity(node).length;
  141. tree.baseOperation('base-operation', node, 'delete', function (result) {
  142. sheet.deleteRows(row, count + 1);
  143. for (const data of result.update) {
  144. SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
  145. }
  146. self.refreshOperationValid(sheet, sheet.getSelections());
  147. });
  148. },
  149. /**
  150. * 上移选中节点
  151. * @param spread
  152. */
  153. upMove: function (spread) {
  154. const self = this;
  155. const sheet = spread.getActiveSheet();
  156. const sel = sheet.getSelections()[0];
  157. const row = sel.row;
  158. const tree = sheet.zh_tree;
  159. if (!tree) { return; }
  160. const node = tree.nodes[row];
  161. if (!node) { return; }
  162. tree.baseOperation('base-operation', node, 'up-move', function (result) {
  163. for (const data of result.update) {
  164. SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
  165. }
  166. sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
  167. self.refreshOperationValid(sheet, sheet.getSelections());
  168. //sheet.moveTo(row, -1, tree.nodes.indexOf(node), -1, tree.getPosterity(node).length + 1, -1, GC.Spread.Sheets.CopyToOptions.value);
  169. });
  170. },
  171. /**
  172. * 下移选中节点
  173. * @param spread
  174. */
  175. downMove: function (spread) {
  176. const self = this;
  177. const sheet = spread.getActiveSheet();
  178. const sel = sheet.getSelections()[0];
  179. const row = sel.row;
  180. const tree = sheet.zh_tree;
  181. if (!tree) { return; }
  182. const node = tree.nodes[row];
  183. if (!node) { return; }
  184. tree.baseOperation('base-operation', node, 'down-move', function (result) {
  185. for (const data of result.update) {
  186. SpreadJsObj.reLoadRowData(sheet, tree.nodes.indexOf(data), tree.getPosterity(data).length + 1);
  187. }
  188. sheet.setSelection(tree.nodes.indexOf(node), sel.col, sel.rowCount, sel.colCount);
  189. self.refreshOperationValid(sheet, sheet.getSelections());
  190. });
  191. },
  192. /**
  193. * 升级选中节点
  194. * @param spread
  195. */
  196. upLevel: function (spread) {
  197. const self = this;
  198. const sheet = spread.getActiveSheet();
  199. const row = sheet.getSelections()[0].row;
  200. const tree = sheet.zh_tree;
  201. if (!tree) { return; }
  202. const node = tree.nodes[row];
  203. if (!node) { return; }
  204. tree.baseOperation('base-operation', node, 'up-level', function (result) {
  205. self.refreshTree(sheet, result);
  206. self.refreshOperationValid(sheet, sheet.getSelections());
  207. });
  208. },
  209. /**
  210. * 降级选中节点
  211. * @param spread
  212. */
  213. downLevel: function (spread) {
  214. const self = this;
  215. const sheet = spread.getActiveSheet();
  216. const row = sheet.getSelections()[0].row;
  217. const tree = sheet.zh_tree;
  218. if (!tree) { return; }
  219. const node = tree.nodes[row];
  220. if (!node) { return; }
  221. tree.baseOperation('base-operation', node, 'down-level', function (result) {
  222. self.refreshTree(sheet, result);
  223. self.refreshOperationValid(sheet, sheet.getSelections());
  224. });
  225. },
  226. /**
  227. * 编辑单元格响应事件
  228. * @param {Object} e
  229. * @param {Object} info
  230. */
  231. editEnded: function (e, info) {
  232. if (info.sheet.zh_setting) {
  233. const col = info.sheet.zh_setting.cols[info.col];
  234. const sortData = info.sheet.zh_dataType === 'tree' ? info.sheet.zh_tree.nodes : info.sheet.zh_data;
  235. const node = sortData[info.row];
  236. const data = {
  237. id: node.id,
  238. tender_id: node.tender_id,
  239. ledger_id: node.ledger_id
  240. };
  241. data[col.field] = col.type === 'Number' ? parseFloat(info.editingText) : info.editingText;
  242. info.sheet.zh_tree.update('update', data, function (result) {
  243. const rows = [];
  244. for (const r of result) {
  245. rows.push(sortData.indexOf(r));
  246. }
  247. SpreadJsObj.reLoadRowsData(info.sheet, rows);
  248. });
  249. }
  250. },
  251. /**
  252. * 粘贴单元格响应事件
  253. * @param e
  254. * @param info
  255. */
  256. clipboardPasted: function (e, info) {
  257. if (info.sheet.zh_setting && info.sheet.zh_dataType === 'tree') {
  258. const sortData = info.sheet.zh_tree.nodes;
  259. const datas = [], nodes = [];
  260. for (let iRow = 0; iRow < info.cellRange.rowCount; iRow ++) {
  261. const curRow = info.cellRange.row + iRow;
  262. const node = sortData[curRow];
  263. if (node) {
  264. const data = info.sheet.zh_tree.getNodeKeyData(node);
  265. for (let iCol = 0; iCol < info.cellRange.colCount; iCol++) {
  266. const curCol = info.cellRange.col + iCol;
  267. const colSetting = info.sheet.zh_setting.cols[curCol];
  268. data[colSetting.field] = info.sheet.getText(curRow, curCol);
  269. }
  270. datas.push(data);
  271. nodes.push(node);
  272. }
  273. }
  274. info.sheet.zh_tree.update('update', datas, function (result) {
  275. const rows = [];
  276. for (const data of result) {
  277. rows.push(sortData.indexOf(data));
  278. }
  279. SpreadJsObj.reLoadRowsData(info.sheet, rows);
  280. });
  281. }
  282. },
  283. /**
  284. * 删除按钮响应事件
  285. * @param sheet
  286. */
  287. deletePress: function (sheet) {
  288. if (sheet.zh_setting && sheet.zh_dataType === 'tree') {
  289. const sortData = sheet.zh_tree.nodes;
  290. const datas = [], nodes = [];
  291. const sel = sheet.getSelections()[0];
  292. for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
  293. const node = sortData[iRow];
  294. if (node) {
  295. const data = sheet.zh_tree.getNodeKeyData(node);
  296. for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
  297. const colSetting = sheet.zh_setting.cols[iCol];
  298. data[colSetting.field] = null;
  299. }
  300. datas.push(data);
  301. nodes.push(node);
  302. }
  303. }
  304. sheet.zh_tree.update('update-info', datas, function (result) {
  305. const rows = [];
  306. for (const data of result) {
  307. rows.push(sortData.indexOf(data));
  308. }
  309. SpreadJsObj.reLoadRowsData(sheet, rows);
  310. });
  311. }
  312. },
  313. /**
  314. * 粘贴整块
  315. * @param spread
  316. * @param block
  317. */
  318. pasteBlock: function (spread, block) {
  319. const self = this;
  320. const sheet = spread.getActiveSheet();
  321. const row = sheet.getSelections()[0].row;
  322. const tree = sheet.zh_tree;
  323. if (!tree) { return; }
  324. const node = tree.nodes[row];
  325. if (!node) { return; }
  326. tree.pasteBlock('paste-block', node, block, function (result) {
  327. self.refreshTree(sheet, result);
  328. self.refreshOperationValid(sheet, sheet.getSelections());
  329. });
  330. }
  331. };
  332. ledgerSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e, info) {
  333. treeOperationObj.refreshOperationValid(info.sheet, info.newSelections);
  334. });
  335. ledgerSpread.bind(GC.Spread.Sheets.Events.EditEnded, treeOperationObj.editEnded);
  336. ledgerSpread.bind(GC.Spread.Sheets.Events.ClipboardPasted, treeOperationObj.clipboardPasted);
  337. SpreadJsObj.addDeleteBind(ledgerSpread, treeOperationObj.deletePress);
  338. ledgerSpread.bind(GC.Spread.Sheets.Events.ClipboardChanging, function (e, info) {
  339. const copyText = SpreadJsObj.getFilterCopyText(info.sheet);
  340. });
  341. ledgerSpread.bind(GC.Spread.Sheets.Events.ClipboardChanged, function (e, info) {
  342. console.log(info.copyData.text);
  343. });
  344. ledgerSpread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (e, info) {
  345. });
  346. // 绑定 删除等 顶部按钮
  347. $('#delete').click(function () {
  348. treeOperationObj.deleteNode(ledgerSpread);
  349. });
  350. $('#up-move').click(function () {
  351. treeOperationObj.upMove(ledgerSpread);
  352. });
  353. $('#down-move').click(function () {
  354. treeOperationObj.downMove(ledgerSpread);
  355. });
  356. $('#up-level').click(function () {
  357. treeOperationObj.upLevel(ledgerSpread);
  358. });
  359. $('#down-level').click(function () {
  360. treeOperationObj.downLevel(ledgerSpread);
  361. });
  362. treeOperationObj.refreshOperationValid(ledgerSpread.getActiveSheet(), ledgerSpread.getActiveSheet().getSelections());
  363. // 右键菜单
  364. $.contextMenu({
  365. selector: '#ledger-spread',
  366. build: function ($trigger, e) {
  367. const target = SpreadJsObj.safeRightClickSelection($trigger, e, ledgerSpread);
  368. return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
  369. },
  370. items: {
  371. 'create': {
  372. name: '新增',
  373. icon: 'fa-sign-in',
  374. callback: function (key, opt) {
  375. treeOperationObj.addNode(ledgerSpread);
  376. },
  377. visible: function(key, opt){
  378. const sheet = ledgerSpread.getActiveSheet();
  379. const selection = sheet.getSelections();
  380. const row = selection[0].row;
  381. const select = ledgerTree.nodes[row];
  382. return select;
  383. }
  384. },
  385. 'delete': {
  386. name: '删除',
  387. icon: 'fa-remove',
  388. callback: function (key, opt) {
  389. treeOperationObj.deleteNode(ledgerSpread);
  390. },
  391. visible: function (key, opt) {
  392. const sheet = ledgerSpread.getActiveSheet();
  393. const selection = sheet.getSelections();
  394. const row = selection[0].row;
  395. const select = ledgerTree.nodes[row];
  396. return select;
  397. }
  398. },
  399. 'copyBlock': {
  400. name: '复制整块',
  401. icon: 'fa-files-o',
  402. callback: function (key, opt) {
  403. /*ledgerSpread.commandManager().execute({
  404. cmd:"copy",
  405. sheetName:ledgerSpread.getActiveSheet().name()
  406. });*/
  407. treeOperationObj.block = [];
  408. const copyBlockList = [];
  409. const sheet = ledgerSpread.getActiveSheet();
  410. const sel = sheet.getSelections()[0];
  411. let iRow = sel.row;
  412. const pid = sheet.zh_tree.nodes[iRow].ledger_pid;
  413. while (iRow < sel.row + sel.rowCount) {
  414. const node = sheet.zh_tree.nodes[iRow];
  415. if (node.ledger_pid !== pid) {
  416. toast('error: 仅可同时选中同层节点', 'error', 'exclamation-circle');
  417. return;
  418. }
  419. copyBlockList.push(node.ledger_id);
  420. iRow += sheet.zh_tree.getPosterity(node).length + 1;
  421. }
  422. treeOperationObj.block = copyBlockList;
  423. },
  424. visible: function (key, opt) {
  425. const sheet = ledgerSpread.getActiveSheet();
  426. const selection = sheet.getSelections();
  427. const row = selection[0].row;
  428. const select = ledgerTree.nodes[row];
  429. return select;
  430. }
  431. },
  432. 'pasteBlock': {
  433. name: '粘贴',
  434. icon: 'fa-clipboard',
  435. disabled: function (key, opt) {
  436. const block = treeOperationObj.block || [];
  437. return block.length <= 0 && false;
  438. },
  439. callback: function (key, opt) {
  440. const block = treeOperationObj.block || [];
  441. if (block.length > 0) {
  442. treeOperationObj.pasteBlock(ledgerSpread, block);
  443. } else {
  444. document.execCommand('paste');
  445. }
  446. }
  447. }
  448. }
  449. });
  450. let stdChapter, stdBills, dealBills;
  451. // 展开收起标准清单
  452. $('a', '#side-menu').bind('click', function () {
  453. const tab = $(this), tabPanel = $(tab.attr('content'));
  454. const showSideTools = function (show) {
  455. if (show) {
  456. $('.c-body.col-12').removeClass('col-12').addClass('col-8');
  457. $('.c-body.col-0').removeClass('col-0').addClass('col-4').show();
  458. } else {
  459. $('.c-body.col-8').removeClass('col-8').addClass('col-12');
  460. $('.c-body.col-4').removeClass('col-4').addClass('col-0').hide();
  461. }
  462. }
  463. if (!tab.hasClass('active')) {
  464. $('a', '#side-menu').removeClass('active');
  465. tab.addClass('active');
  466. showSideTools(tab.hasClass('active'));
  467. $('.tab-content .tab-pane').hide();
  468. tabPanel.show();
  469. if (tab.attr('content') === '#std-chapter' && !stdChapter) {
  470. stdChapter = new stdLib($('#std-chapter-spread')[0], 'chapter', {
  471. id: 'chapter_id',
  472. pid: 'pid',
  473. order: 'order',
  474. level: 'level',
  475. rootId: -1,
  476. keys: ['id', 'list_id', 'chapter_id'],
  477. }, {
  478. cols: [
  479. {title: '项目节编号', field: 'code', width: 120, readOnly: true, cellType: 'tree'},
  480. {title: '名称', field: 'name', width: 230, readOnly: true},
  481. {title: '单位', field: 'unit', width: 50, readOnly: true}
  482. ],
  483. treeCol: 0,
  484. emptyRows: 0
  485. });
  486. stdChapter.loadLib(1);
  487. } else if (tab.attr('content') === '#std-bills' && !stdBills) {
  488. stdBills = new stdLib($('#std-bills-spread')[0], 'bills', {
  489. id: 'bill_id',
  490. pid: 'pid',
  491. order: 'order',
  492. level: 'level',
  493. rootId: -1,
  494. keys: ['id', 'list_id', 'bill_id']
  495. }, {
  496. cols: [
  497. {title: '清单编号', field: 'code', width: 120, readOnly: true, cellType: 'tree'},
  498. {title: '名称', field: 'name', width: 230, readOnly: true},
  499. {title: '单位', field: 'unit', width: 50, readOnly: true}
  500. ],
  501. treeCol: 0,
  502. emptyRows: 0
  503. });
  504. stdBills.loadLib(1);
  505. } else if (tab.attr('content') === '#deal-bills' && !dealBills) {
  506. dealBills = new DealBills($('#deal-bills-spread')[0], {
  507. cols: [
  508. {title: '清单编号', field: 'code', width: 120, readOnly: true, cellType: 'tree'},
  509. {title: '名称', field: 'name', width: 230, readOnly: true},
  510. {title: '单位', field: 'unit', width: 50, readOnly: true},
  511. {title: '单价', field: 'unit_price', width: 50, readOnly: true},
  512. {title: '数量', field: 'quantity', width: 50, readOnly: true},
  513. ],
  514. emptyRows: 0,
  515. });
  516. dealBills.loadData();
  517. }
  518. } else {
  519. tab.removeClass('active');
  520. showSideTools(tab.hasClass('active'));
  521. tabPanel.hide();
  522. }
  523. ledgerSpread.refresh();
  524. });
  525. class stdLib {
  526. constructor(obj, stdType, treeSetting, spreadSetting) {
  527. this.obj = obj;
  528. this.url = '/std/' + stdType;
  529. this.treeSetting = treeSetting;
  530. treeSetting.preUrl = this.url;
  531. this.spreadSetting = spreadSetting;
  532. this.spread = SpreadJsObj.createNewSpread(this.obj);
  533. SpreadJsObj.initSheet(this.spread.getActiveSheet(), this.spreadSetting);
  534. this.spread.getActiveSheet().bind(GC.Spread.Sheets.Events.CellDoubleClick, function (e, info) {
  535. const stdSheet = info.sheet;
  536. const mainSheet = ledgerSpread.getActiveSheet();
  537. if (!stdSheet.zh_setting || !stdSheet.zh_tree || !mainSheet.zh_tree) { return; }
  538. const stdTree = stdSheet.zh_tree;
  539. const stdNode = stdTree.nodes[info.row];
  540. const mainTree = mainSheet.zh_tree;
  541. const sel = mainSheet.getSelections()[0];
  542. const mainNode = mainTree.nodes[sel.row];
  543. if (!stdNode) { return; }
  544. mainTree.postData('add-by-std', mainNode, {
  545. tender_id: mainNode.tender_id,
  546. stdType: stdType,
  547. stdLibId: stdNode.list_id,
  548. stdNode: stdTree.getNodeKey(stdNode)
  549. }, function (result) {
  550. treeOperationObj.refreshTree(mainSheet, result);
  551. treeOperationObj.refreshOperationValid(mainSheet, mainSheet.getSelections());
  552. });
  553. });
  554. this.pathTree = createNewPathTree(this.treeSetting);
  555. }
  556. loadLib (listId) {
  557. const self = this;
  558. postData(this.url+'/get-data', {list_id: listId}, function (data) {
  559. self.pathTree.loadDatas(data);
  560. SpreadJsObj.loadSheetData(self.spread.getActiveSheet(), 'tree', self.pathTree);
  561. });
  562. }
  563. };
  564. class DealBills {
  565. constructor (obj, spreadSetting) {
  566. const self = this;
  567. this.obj = obj;
  568. this.url = '/deal';
  569. this.spreadSetting = spreadSetting;
  570. this.spread = SpreadJsObj.createNewSpread(this.obj);
  571. SpreadJsObj.initSheet(this.spread.getActiveSheet(), this.spreadSetting);
  572. $('#upload-deal-bills').click(function () {
  573. const file = $('#deal-bills-file')[0];
  574. const formData = new FormData();
  575. formData.append('file', file.files[0]);
  576. postDataWithFile(self.url+'/upload-excel', formData, function (data) {
  577. SpreadJsObj.loadSheetData(self.spread.getActiveSheet(), 'data', data);
  578. $('#upload-deal').modal('hide');
  579. }, function () {
  580. $('#upload-deal').modal('hide');
  581. });
  582. })
  583. }
  584. loadData () {
  585. const self = this;
  586. postData(this.url+'/get-data', {}, function (data) {
  587. SpreadJsObj.loadSheetData(self.spread.getActiveSheet(), 'data', data);
  588. });
  589. }
  590. }
  591. });