123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- '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;
- if (dataCode === 'code') {//编码没有小写,自动转化为大写
- text = text.toString().toUpperCase();
- }
- 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();
- },
- onEditStarting: function (sender, args) {
- let dataCode = setting.header[args.col]['dataCode'];
- if (dataCode === 'name') {
- args.cancel = true;
- }
- },
- onEditEnded: function (sender, args) {
- edit();
- },
- onRangeChanged: function (sender, args) {
- edit();
- }
- };
- //重新绑定del建
- //@return {void}
- function bindRationTempDel() {
- if (locked || !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.EditStarting, events.onEditStarting);
- 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, 4).locked(false);
- //templateSheet.getRange(-1, 3, -1, 1).locked(false);
- } else {
- templateSheet.getRange(-1, 0, -1, 4).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}
- })();
|