rpt_contract.js 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. const rptContract = (function(){
  2. let contractSpread, contractSheet, contractTree;
  3. const initSpread = function() {
  4. if (!contractSpread) {
  5. contractSpread = SpreadJsObj.createNewSpread($('#rpt-contract-spread')[0]);
  6. contractSheet = contractSpread.getActiveSheet();
  7. SpreadJsObj.initSheet(contractSheet, {
  8. cols: [
  9. {title: '选择', colSpan: '1', rowSpan: '1', field: 'selected', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'},
  10. {title: '编号', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 120, formatter: '@', cellType: 'tree'},
  11. {title: '合同编号', colSpan: '1', rowSpan: '1', field: 'c_code', hAlign: 0, width: 120, formatter: '@'},
  12. {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 200, formatter: '@'},
  13. ],
  14. emptyRows: 0,
  15. headRows: 1,
  16. headRowHeight: [32],
  17. defaultRowHeight: 21,
  18. headerFont: '12px 微软雅黑',
  19. font: '12px 微软雅黑',
  20. readOnly: true,
  21. });
  22. contractSpread.bind(spreadNS.Events.ButtonClicked, function(e, info) {
  23. if (!info.sheet.zh_setting || !info.sheet.zh_tree) return;
  24. const col = info.sheet.zh_setting.cols[info.col];
  25. if (col.field !== 'selected') return;
  26. const node = SpreadJsObj.getSelectObject(info.sheet);
  27. node.selected = !node.selected;
  28. if (node.children && node.children.length > 0) {
  29. const posterity = info.sheet.zh_tree.getPosterity(node);
  30. for (const p of posterity) {
  31. p.selected = node.selected;
  32. }
  33. SpreadJsObj.reLoadRowData(info.sheet, info.row, posterity.length + 1);
  34. } else {
  35. SpreadJsObj.reLoadRowData(info.sheet, info.row, 1);
  36. }
  37. if (node.selected) {
  38. const rows = [];
  39. const parents = info.sheet.zh_tree.getAllParents(node);
  40. for (const p of parents) {
  41. p.selected = true;
  42. rows.push(info.sheet.zh_tree.getNodeIndex(p));
  43. }
  44. SpreadJsObj.reLoadRowsData(info.sheet, rows);
  45. }
  46. });
  47. $('#select-contract').on('shown.bs.modal', function() {
  48. contractSpread.refresh();
  49. });
  50. }
  51. };
  52. const loadContractTree = function(type, contractType, tid) {
  53. postData(`/sp/${spid}/load`, { filter: 'contract', type, contractType, tid }, function(result) {
  54. contractTree = createNewPathTree('base', { id: 'contract_id', pid: 'contract_pid', order: 'order', level: 'level', fullPath: 'full_path', rootId: -1 });
  55. contractTree.loadDatas(result.contract);
  56. SpreadJsObj.loadSheetData(contractSheet, SpreadJsObj.DataType.Tree, contractTree);
  57. });
  58. };
  59. const update = function() {
  60. const updateData = {
  61. contractTree: contractTree.nodes.filter(x => {
  62. return x.c_code === undefined;
  63. }).map(x => {
  64. return {id: x.id, selected: x.selected};
  65. }),
  66. contract: contractTree.nodes.filter(x => {
  67. return x.c_code !== undefined;
  68. }).map(x => {
  69. return {id: x.id, selected: x.selected};
  70. })
  71. };
  72. postData(`/sp/${spid}/save`, { updateType: 'contract', updateData }, function(result) {
  73. $('#select-contract').modal('hide');
  74. });
  75. };
  76. const showContract = function(type, contractType, id) {
  77. initSpread();
  78. loadContractTree(type, contractType, id);
  79. $('#select-contract').modal('show');
  80. };
  81. return { showContract, update };
  82. })();