ration_template.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Zhong
  6. * @date 2018/11/28
  7. * @version
  8. */
  9. /*
  10. * 定额下模板关联
  11. * */
  12. const RationTemplate = (function () {
  13. let curRation = null;
  14. //当前定额下的定额模板关联数据
  15. let templateData = [];
  16. let templateSheet = null;
  17. //重新设置templateData
  18. function setTemplateData(newData) {
  19. templateData = commonUtil.isDef(newData) && Array.isArray(newData) ? newData : [];
  20. }
  21. let setting = {
  22. header:[
  23. {headerName:"关联类别",headerWidth:110,dataCode:"type", dataType: "String", hAlign: "left", formatter: "@"},
  24. {headerName:"编码",headerWidth:90,dataCode:"code", dataType: "String", hAlign: "left", formatter: "@"},
  25. {headerName:"名称",headerWidth:240,dataCode:"name", dataType: "String", hAlign: "left", formatter: "@"},
  26. {headerName:"具体位置",headerWidth:90,dataCode:"billsLocation", dataType: "String", hAlign: "left", formatter: "@"}
  27. ],
  28. view:{},
  29. };
  30. //渲染时方法,停止渲染
  31. //@param {Object}sheet {Function}func @return {void}
  32. function renderSheetFunc(sheet, func){
  33. sheet.suspendEvent();
  34. sheet.suspendPaint();
  35. if(func){
  36. func();
  37. }
  38. sheet.resumeEvent();
  39. sheet.resumePaint();
  40. }
  41. const items = ['模板关联', '超高关联'];
  42. //设置下拉单元格
  43. //@return {void}
  44. function setComboCells() {
  45. if (!templateSheet) {
  46. return;
  47. }
  48. let combo = sheetCommonObj.getDynamicCombo();
  49. combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.text);
  50. templateSheet.getRange(-1, 0, -1, 1).cellType(combo);
  51. }
  52. //有效数据
  53. //@param {String}dataCode {String}text @return {String}
  54. function validateData(dataCode, text) {
  55. //类别只能为规定的两种关联,否则将类别自动恢复为''
  56. if (dataCode === 'type') {
  57. if (text !== '' && !items.includes(text)) {
  58. text = '';
  59. }
  60. }
  61. return text;
  62. }
  63. //从当前表格获取数据
  64. //@return {Array}
  65. function getDataFromSheet() {
  66. let rst = [];
  67. if (!templateSheet) {
  68. return rst;
  69. }
  70. let rowCount = templateSheet.getRowCount(),
  71. colCount = templateSheet.getColumnCount();
  72. for (let row = 0; row < rowCount; row++) {
  73. let rowData = {type: '', code: '', name: '', billsLocation: ''},
  74. rowExistData = false;
  75. for (let col = 0; col < colCount; col++) {
  76. let text = templateSheet.getValue(row, col),
  77. dataCode = setting.header[col]['dataCode'];
  78. text = _isDef(text) ? text : '';
  79. text = validateData(dataCode, text);
  80. if (text !== '') {
  81. rowExistData = true;
  82. if (dataCode === 'code') {//编码没有小写,自动转化为大写
  83. text = text.toString().toUpperCase();
  84. }
  85. rowData[dataCode] = text;
  86. } else {
  87. if (dataCode === 'code') {
  88. templateSheet.setValue(row, col + 1, '');
  89. }
  90. }
  91. }
  92. //不为空行
  93. if (rowExistData) {
  94. rst.push(rowData);
  95. }
  96. }
  97. return rst;
  98. }
  99. //编辑,定额编号自动匹配定额名称,匹配过程在后端进行,前端进行名称的更新输出
  100. //@return {void}
  101. function edit() {
  102. if (!curRation) {
  103. return;
  104. }
  105. let sheetData = getDataFromSheet();
  106. CommonAjax.post('/rationRepository/api/updateRationTemplate',
  107. {rationRepId: getQueryString('repository'), rationID: curRation.ID, templateData: sheetData}, function (rstData) {
  108. templateData = rstData;
  109. curRation.rationTemplateList = templateData;
  110. renderSheetFunc(templateSheet, function () {
  111. sheetCommonObj.showData(templateSheet, setting, templateData);
  112. });
  113. }, function () {
  114. renderSheetFunc(templateSheet, function () {
  115. sheetCommonObj.showData(templateSheet, setting, templateData);
  116. });
  117. });
  118. }
  119. let events = {
  120. onEnterCell: function (sender, args) {
  121. args.sheet.repaint();
  122. },
  123. onEditStarting: function (sender, args) {
  124. let dataCode = setting.header[args.col]['dataCode'];
  125. if (dataCode === 'name') {
  126. args.cancel = true;
  127. }
  128. },
  129. onEditEnded: function (sender, args) {
  130. edit();
  131. },
  132. onRangeChanged: function (sender, args) {
  133. edit();
  134. }
  135. };
  136. //重新绑定del建
  137. //@return {void}
  138. function bindRationTempDel() {
  139. if (locked || !templateSheet) {
  140. return;
  141. }
  142. let workBook = templateSheet.getParent();
  143. workBook.commandManager().register('rationTempDel', function () {
  144. renderSheetFunc(templateSheet, function () {
  145. let sels = templateSheet.getSelections();
  146. for (let sel of sels) {
  147. sel.row = sel.row === -1 ? 0 : sel.row;
  148. sel.col = sel.col === -1 ? 0 : sel.col;
  149. for (let row = sel.row; row < sel.rowCount + sel.row; row++) {
  150. for (let col = sel.col; col < sel.colCount + sel.col; col++) {
  151. templateSheet.setValue(row, col, '');
  152. }
  153. }
  154. }
  155. });
  156. edit();
  157. });
  158. workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
  159. workBook.commandManager().setShortcutKey('rationTempDel', GC.Spread.Commands.Key.del, false, false, false, false);
  160. }
  161. //建表
  162. //@param {Object}sheet @return {void}
  163. function buildSheet(sheet) {
  164. templateSheet = sheet;
  165. sheetCommonObj.initSheet(templateSheet, setting, 30);
  166. templateSheet.options.isProtected = true;
  167. setComboCells();
  168. const Events = GC.Spread.Sheets.Events;
  169. sheet.bind(Events.EditStarting, events.onEditStarting);
  170. sheet.bind(Events.EditEnded, events.onEditEnded);
  171. sheet.bind(Events.RangeChanged, events.onRangeChanged);
  172. sheet.bind(Events.EnterCell, events.onEnterCell);
  173. }
  174. //更改模板关联表锁定状态
  175. //@param {Boolean}locked @return {void}
  176. function changeLockMode(locked) {
  177. if (templateSheet) {
  178. if (!locked) {
  179. templateSheet.getRange(-1, 0, -1, 4).locked(false);
  180. //templateSheet.getRange(-1, 3, -1, 1).locked(false);
  181. } else {
  182. templateSheet.getRange(-1, 0, -1, 4).locked(true);
  183. //templateSheet.getRange(-1, 3, -1, 1).locked(true);
  184. }
  185. }
  186. }
  187. //变更定额
  188. function rationInitSel(ration) {
  189. curRation = ration ? ration : null;
  190. changeLockMode(!ration);
  191. sheetCommonObj.cleanData(templateSheet, setting, -1);
  192. if (ration) {
  193. setTemplateData(ration.rationTemplateList);
  194. sheetCommonObj.showData(templateSheet, setting, templateData);
  195. } else {
  196. setTemplateData([]);
  197. }
  198. }
  199. return {buildSheet, rationInitSel, bindRationTempDel, events}
  200. })();