merge_peg.js 5.7 KB

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