merge_peg.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. 'use strict';
  2. /**
  3. * 依赖jQuery, lodash, spreadjs,请放在spreadjs_zh.js之后
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const NewMergePeg = function (setting) {
  10. const spread = SpreadJsObj.createNewSpread($('#mp-spread')[0]);
  11. const sheet = spread.getActiveSheet();
  12. const spreadSetting = {
  13. cols: [
  14. {title: '起始桩号', field: 'start-peg', hAlign: 0, width: 80, formatter: '@'},
  15. {title: '终止桩号', field: 'end-peg', hAlign: 0, width: 80, formatter: '@'},
  16. {title: '位置', field: 'peg-pos', hAlign: 0, width: 60, formatter: '@'},
  17. {title: '合并结果', field: 'peg', hAlign: 0, width: 180, formatter: '@'},
  18. ],
  19. emptyRows: 3,
  20. headRows: 1,
  21. headRowHeight: [32],
  22. headerFont: '12px 微软雅黑',
  23. font: '12px 微软雅黑',
  24. };
  25. const findCol = function (field) {
  26. return _.findIndex(spreadSetting.cols, function (c) {return c.field === field});
  27. };
  28. const spCol = findCol('start-peg'), epCol = findCol('end-peg'), posCol = findCol('peg-pos'), pegCol = findCol('peg');
  29. SpreadJsObj.initSheet(sheet, spreadSetting);
  30. sheet.setColumnWidth(0, 30, spreadNS.SheetArea.rowHeader);
  31. const spreadObj = {
  32. mergePeg(row) {
  33. const withPos = $('#mp-with-pos')[0].checked
  34. const sprChar = '~', withSprChar = $('#mp-with-spr-char')[0].checked;
  35. const mergeRow = function (row) {
  36. const startPeg = _.trim(sheet.getText(row, spCol));
  37. const endPeg = _.trim(sheet.getText(row, epCol));
  38. let peg;
  39. if (startPeg !== '') {
  40. peg = endPeg !== ''
  41. ? (withSprChar && endPeg.indexOf(sprChar) !== 0 ? startPeg + sprChar + endPeg : startPeg + endPeg)
  42. : startPeg;
  43. } else {
  44. peg = endPeg !== '' ? endPeg : '';
  45. }
  46. if (withPos) {
  47. peg = _.trim(sheet.getText(row, posCol)) + peg;
  48. }
  49. sheet.setText(row, pegCol, peg);
  50. };
  51. if (row) {
  52. const rows = row instanceof Array ? row : [row];
  53. if (row instanceof Array) {
  54. for (const r of rows) {
  55. mergeRow(r)
  56. }
  57. }
  58. } else {
  59. for (let iRow = 0, iLen = sheet.getRowCount(); iRow < iLen; iRow++) {
  60. mergeRow(iRow);
  61. }
  62. }
  63. },
  64. getPegs() {
  65. const result = [];
  66. for (let iRow = 0, iLen = sheet.getRowCount(); iRow < iLen; iRow++) {
  67. const peg = sheet.getText(iRow, pegCol);
  68. if (peg !== '') {
  69. result.push({name: peg});
  70. }
  71. }
  72. return result;
  73. },
  74. editStarting(e, info) {
  75. if (!info.sheet.zh_setting) return;
  76. const col = info.sheet.zh_setting.cols[info.col];
  77. switch (col.field) {
  78. case 'peg':
  79. info.cancel = true;
  80. break;
  81. }
  82. },
  83. clipboardPasted: function (e, info) {
  84. spreadObj.mergePeg();
  85. },
  86. deletePress: function (sheet) {
  87. if (!sheet.zh_setting) return;
  88. const sel = sheet.getSelections()[0], row = [];
  89. for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
  90. for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
  91. if (iCol !== pegCol) {
  92. sheet.setText(iRow, iCol, '');
  93. }
  94. }
  95. row.push(iRow);
  96. }
  97. spreadObj.mergePeg(row);
  98. },
  99. editEnded: function (e, info) {
  100. spreadObj.mergePeg(info.row);
  101. },
  102. cut: function (sheet, sel, callback) {
  103. if (!sheet || !sel) return;
  104. callback();
  105. const rows = [];
  106. for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
  107. for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
  108. sheet.setText(iRow, iCol, '');
  109. }
  110. rows.push(iRow);
  111. }
  112. spreadObj.mergePeg(rows);
  113. }
  114. };
  115. spread.bind(spreadNS.Events.EditStarting, spreadObj.editStarting);
  116. spread.bind(spreadNS.Events.ClipboardPasted, spreadObj.clipboardPasted);
  117. spread.bind(spreadNS.Events.EditEnded, spreadObj.editEnded);
  118. SpreadJsObj.addDeleteBind(spread, spreadObj.deletePress);
  119. SpreadJsObj.addCutEvents(spread, spreadObj.cut);
  120. // 勾选位置
  121. $('#mp-with-pos').click(() => {spreadObj.mergePeg();});
  122. // 勾选桩号连接符
  123. $('#mp-with-spr-char').click(function () {
  124. if (this.checked) {
  125. $('#mp-spr-char').show();
  126. } else {
  127. $('#mp-spr-char').hide();
  128. }
  129. spreadObj.mergePeg();
  130. });
  131. // 选择连接符
  132. $('select', '#merge-peg').change(() => {spreadObj.mergePeg()});
  133. // 初始化窗口
  134. $('#merge-peg').on('show.bs.modal', function () {
  135. sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(),
  136. spreadNS.SheetArea.viewport, spreadNS.StorageType.data);
  137. });
  138. $('#merge-peg').on('shown.bs.modal', function () {
  139. spread.refresh();
  140. });
  141. $('#mp-ok').click(() => {
  142. if (setting.callback) {
  143. setting.callback(spreadObj.getPegs());
  144. }
  145. $('#merge-peg').modal('hide');
  146. });
  147. const showModal = function () {
  148. $('#merge-peg').modal('show');
  149. };
  150. return {show: showModal};
  151. };