|
|
@@ -0,0 +1,197 @@
|
|
|
+'use strict';
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ *
|
|
|
+ * @author Zhong
|
|
|
+ * @date 2018/11/28
|
|
|
+ * @version
|
|
|
+ */
|
|
|
+/*
|
|
|
+* 定额下模板关联
|
|
|
+* */
|
|
|
+
|
|
|
+const RationTemplate = (function () {
|
|
|
+ let curRation = null;
|
|
|
+ function _isDef(v) {
|
|
|
+ return typeof v !== 'undefined' && v !== null;
|
|
|
+ }
|
|
|
+ //当前定额下的定额模板关联数据
|
|
|
+ let templateData = [];
|
|
|
+ let templateSheet = null;
|
|
|
+ //重新设置templateData
|
|
|
+ function setTemplateData(newData) {
|
|
|
+ templateData = _isDef(newData) && Array.isArray(newData) ? newData : [];
|
|
|
+ }
|
|
|
+ let setting = {
|
|
|
+ header:[
|
|
|
+ {headerName:"关联类别",headerWidth:110,dataCode:"type", dataType: "String", hAlign: "left", formatter: "@"},
|
|
|
+ {headerName:"编码",headerWidth:90,dataCode:"code", dataType: "String", hAlign: "left", formatter: "@"},
|
|
|
+ {headerName:"名称",headerWidth:240,dataCode:"name", dataType: "String", hAlign: "left", formatter: "@"},
|
|
|
+ {headerName:"具体位置",headerWidth:90,dataCode:"billsLocation", dataType: "String", hAlign: "left", formatter: "@"}
|
|
|
+ ],
|
|
|
+ view:{},
|
|
|
+ };
|
|
|
+ //渲染时方法,停止渲染
|
|
|
+ //@param {Object}sheet {Function}func @return {void}
|
|
|
+ function renderSheetFunc(sheet, func){
|
|
|
+ sheet.suspendEvent();
|
|
|
+ sheet.suspendPaint();
|
|
|
+ if(func){
|
|
|
+ func();
|
|
|
+ }
|
|
|
+ sheet.resumeEvent();
|
|
|
+ sheet.resumePaint();
|
|
|
+ }
|
|
|
+ const items = ['模板关联', '超高关联'];
|
|
|
+ //设置下拉单元格
|
|
|
+ //@return {void}
|
|
|
+ function setComboCells() {
|
|
|
+ if (!templateSheet) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let combo = sheetCommonObj.getDynamicCombo();
|
|
|
+ combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.text);
|
|
|
+ templateSheet.getRange(-1, 0, -1, 1).cellType(combo);
|
|
|
+ }
|
|
|
+ //有效数据
|
|
|
+ //@param {String}dataCode {String}text @return {String}
|
|
|
+ function validateData(dataCode, text) {
|
|
|
+ //类别只能为规定的两种关联,否则将类别自动恢复为''
|
|
|
+ if (dataCode === 'type') {
|
|
|
+ if (text !== '' && !items.includes(text)) {
|
|
|
+ text = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return text;
|
|
|
+ }
|
|
|
+ //从当前表格获取数据
|
|
|
+ //@return {Array}
|
|
|
+ function getDataFromSheet() {
|
|
|
+ let rst = [];
|
|
|
+ if (!templateSheet) {
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+ let rowCount = templateSheet.getRowCount(),
|
|
|
+ colCount = templateSheet.getColumnCount();
|
|
|
+ for (let row = 0; row < rowCount; row++) {
|
|
|
+ let rowData = {type: '', code: '', name: '', billsLocation: ''},
|
|
|
+ rowExistData = false;
|
|
|
+ for (let col = 0; col < colCount; col++) {
|
|
|
+ let text = templateSheet.getValue(row, col),
|
|
|
+ dataCode = setting.header[col]['dataCode'];
|
|
|
+ text = _isDef(text) ? text : '';
|
|
|
+ text = validateData(dataCode, text);
|
|
|
+ if (text !== '') {
|
|
|
+ rowExistData = true;
|
|
|
+ rowData[dataCode] = text;
|
|
|
+ } else {
|
|
|
+ if (dataCode === 'code') {
|
|
|
+ templateSheet.setValue(row, col + 1, '');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //不为空行
|
|
|
+ if (rowExistData) {
|
|
|
+ rst.push(rowData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+ //编辑,定额编号自动匹配定额名称,匹配过程在后端进行,前端进行名称的更新输出
|
|
|
+ //@return {void}
|
|
|
+ function edit() {
|
|
|
+ if (!curRation) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let sheetData = getDataFromSheet();
|
|
|
+ CommonAjax.post('/rationRepository/api/updateRationTemplate',
|
|
|
+ {rationRepId: getQueryString('repository'), rationID: curRation.ID, templateData: sheetData}, function (rstData) {
|
|
|
+ templateData = rstData;
|
|
|
+ curRation.rationTemplateList = templateData;
|
|
|
+ renderSheetFunc(templateSheet, function () {
|
|
|
+ sheetCommonObj.showData(templateSheet, setting, templateData);
|
|
|
+ });
|
|
|
+ }, function () {
|
|
|
+ renderSheetFunc(templateSheet, function () {
|
|
|
+ sheetCommonObj.showData(templateSheet, setting, templateData);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ let events = {
|
|
|
+ onEnterCell: function (sender, args) {
|
|
|
+ args.sheet.repaint();
|
|
|
+ },
|
|
|
+ onEditEnded: function (sender, args) {
|
|
|
+ edit();
|
|
|
+ },
|
|
|
+ onRangeChanged: function (sender, args) {
|
|
|
+ edit();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ //重新绑定del建
|
|
|
+ //@return {void}
|
|
|
+ function bindRationTempDel() {
|
|
|
+ if (!templateSheet) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let workBook = templateSheet.getParent();
|
|
|
+ workBook.commandManager().register('rationTempDel', function () {
|
|
|
+ renderSheetFunc(templateSheet, function () {
|
|
|
+ let sels = templateSheet.getSelections();
|
|
|
+ for (let sel of sels) {
|
|
|
+ sel.row = sel.row === -1 ? 0 : sel.row;
|
|
|
+ sel.col = sel.col === -1 ? 0 : sel.col;
|
|
|
+ for (let row = sel.row; row < sel.rowCount + sel.row; row++) {
|
|
|
+ for (let col = sel.col; col < sel.colCount + sel.col; col++) {
|
|
|
+ templateSheet.setValue(row, col, '');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ edit();
|
|
|
+ });
|
|
|
+ workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
|
|
|
+ workBook.commandManager().setShortcutKey('rationTempDel', GC.Spread.Commands.Key.del, false, false, false, false);
|
|
|
+ }
|
|
|
+ //建表
|
|
|
+ //@param {Object}sheet @return {void}
|
|
|
+ function buildSheet(sheet) {
|
|
|
+ templateSheet = sheet;
|
|
|
+ sheetCommonObj.initSheet(templateSheet, setting, 30);
|
|
|
+ templateSheet.options.isProtected = true;
|
|
|
+ setComboCells();
|
|
|
+ const Events = GC.Spread.Sheets.Events;
|
|
|
+ sheet.bind(Events.EditEnded, events.onEditEnded);
|
|
|
+ sheet.bind(Events.RangeChanged, events.onRangeChanged);
|
|
|
+ sheet.bind(Events.EnterCell, events.onEnterCell);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更改模板关联表锁定状态
|
|
|
+ //@param {Boolean}locked @return {void}
|
|
|
+ function changeLockMode(locked) {
|
|
|
+ if (templateSheet) {
|
|
|
+ if (!locked) {
|
|
|
+ templateSheet.getRange(-1, 0, -1, 2).locked(false);
|
|
|
+ templateSheet.getRange(-1, 3, -1, 1).locked(false);
|
|
|
+ } else {
|
|
|
+ templateSheet.getRange(-1, 0, -1, 2).locked(true);
|
|
|
+ templateSheet.getRange(-1, 3, -1, 1).locked(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //变更定额
|
|
|
+ function rationInitSel(ration) {
|
|
|
+ curRation = ration ? ration : null;
|
|
|
+ changeLockMode(!ration);
|
|
|
+ sheetCommonObj.cleanData(templateSheet, setting, -1);
|
|
|
+ if (ration) {
|
|
|
+ setTemplateData(ration.rationTemplateList);
|
|
|
+ sheetCommonObj.showData(templateSheet, setting, templateData);
|
|
|
+ } else {
|
|
|
+ setTemplateData([]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {buildSheet, rationInitSel, bindRationTempDel, events}
|
|
|
+})();
|