'use strict'; /** * 材料调差 - 调差工料 * * @author Mai * @date 2019/1/16 * @version */ function loadUpdateMaterials(newMaterial, fields) { const newMaterials = newMaterial instanceof Array ? newMaterial : [newMaterial]; for (const nm of newMaterials) { const om = _.find(materialBillsData, {id: nm.id}); for (const prop in nm) { if (!fields || fields.indexOf(prop) >= 0) { om[prop] = nm[prop]; } } } } // function DatePickerCellType() { // } // DatePickerCellType.prototype = new GC.Spread.Sheets.CellTypes.Base(); // DatePickerCellType.prototype.createEditorElement = function () { // //Create input presenter. // var input = document.createElement("input"); // return input; // }; // DatePickerCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect) { // //Initialize input editor. // if (editorContext) { // const $editor = $(editorContext); // GC.Spread.Sheets.CellTypes.Base.prototype.activateEditor.apply(this, arguments); // $editor.datepicker({ // language: 'zh', // }); // $editor.css("position", "absolute"); // $editor.attr("gcUIElement", "gcEditingInput"); // $(".ui-datepicker").attr("gcUIElement", "gcEditingInput"); // } // } // // DatePickerCellType.prototype.deactivateEditor = function (editorContext) { // // //Remove input editor when end editor status. // // if (editorContext) { // // var element = editorContext; // // $(element).datepicker().data('datepicker').hide(); // // $(element).datepicker().data('datepicker').destroy(); // // // $(element).datepicker("hide"); // // // $(element).datepicker("destroy"); // // } // // GC.Spread.Sheets.CellTypes.Base.prototype.deactivateEditor.apply(this, arguments) // // }; // // DatePickerCellType.prototype.setEditorValue = function (editor, value) { // // //Sync value from Cell value to editor value. // // console.log($(editor), value); // // // $(editor).datepicker("setDate", value); // // $(editor).datepicker().data('datepicker').selectDate(value); // // }; // // DatePickerCellType.prototype.getEditorValue = function (editor) { // // //Sync value from editor value to cell value. // // $(editor).datepicker({ // // onSelect: function onSelect(fd, date) { // // console.log(fd); // // $(editor).val(fd); // // } // // }); // // // return $(editor).datepicker("getDate"); // // return $(editor).val(); // // }; // DatePickerCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect) { // if (editorContext) { // const $editor = $(editorContext); // $editor.css("width", cellRect.width - 1); // $editor.css("height", cellRect.height - 3); // } // }; function resetTpTable() { const rate = $('#changeRate').val(); const bqhs = ZhCalc.round(ZhCalc.mul(m_tp, 1+rate/100), 2); const jzbqhs = ZhCalc.round(ZhCalc.mul(ZhCalc.add(pre_tp, m_tp), 1+rate/100), 2); $('#tp_set').find('td').eq(1).text(ZhCalc.round(m_tp, 2)); $('#tp_set').find('td').eq(2).text(ZhCalc.round(ZhCalc.add(pre_tp, m_tp), 2)); $('#rate_set').find('td').eq(1).text(bqhs !== 0 ? bqhs : ''); $('#rate_set').find('td').eq(2).text(jzbqhs !== 0 ? jzbqhs : ''); } $(document).ready(() => { autoFlashHeight(); const materialSpread = SpreadJsObj.createNewSpread($('#material-spread')[0]); const materialSpreadSetting = { cols: [ {title: '调差类型', colSpan: '1', rowSpan: '2', field: 't_type', hAlign: 1, width: 80, formatter: '@', readOnly: 'readOnly.isEdit', cellType: 'customizeCombo', comboItems: materialType.t_type, cellTypeKey: 1}, {title: '编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.isEdit'}, {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 180, formatter: '@', readOnly: 'readOnly.isEdit'}, {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: 'readOnly.isEdit'}, {title: '规格', colSpan: '1', rowSpan: '2', field: 'spec', hAlign: 0, width: 180, formatter: '@', readOnly: 'readOnly.isEdit'}, {title: '工料分类', colSpan: '1', rowSpan: '2', field: 'm_type', hAlign: 1, width: 60, readOnly: 'readOnly.isEdit', cellType: 'customizeCombo', comboItems: materialType.m_type, cellTypeKey: 2}, {title: '本期应耗数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 100, type: 'Number', readOnly: true}, {title: '基准价', colSpan: '1', rowSpan: '2', field: 'basic_price', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit'}, {title: '基准时间', colSpan: '1', rowSpan: '2', field: 'basic_times', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.isEdit'}, {title: '本期信息价|单价', colSpan: '3|1', rowSpan: '1|1', field: 'msg_tp', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit'}, {title: '|时间', colSpan: '|1', rowSpan: '|1', field: 'msg_times', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.isEdit'}, {title: '|价差', colSpan: '1', rowSpan: '1|1', field: 'msg_spread', hAlign: 2, width: 60, type: 'Number', readOnly: true, getValue: 'getValue.msg_spread'}, {title: '本期材料调差|上涨幅度(%)', colSpan: '4|1', rowSpan: '1|1', field: 'm_up_risk', hAlign: 2, width: 100, type: 'Number', readOnly: 'readOnly.isEdit'}, {title: '|下跌幅度(%)', colSpan: '|1', rowSpan: '|1', field: 'm_down_risk', hAlign: 2, width: 100, type: 'Number', readOnly: 'readOnly.isEdit'}, {title: '|有效价差', colSpan: '|1', rowSpan: '|1', field: 'm_spread', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.m_spread'}, {title: '|调整金额', colSpan: '|1', rowSpan: '1|1', field: 'm_tp', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.m_tp'}, {title: '截止上期调差金额', colSpan: '1', rowSpan: '2', field: 'pre_tp', hAlign: 2, width: 120, type: 'Number', readOnly: true}, {title: '备注', colSpan: '1', rowSpan: '2', field: 'remark', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.remark'}, ], emptyRows: 0, headRows: 2, headRowHeight: [25, 25], defaultRowHeight: 21, headerFont: '12px 微软雅黑', font: '12px 微软雅黑', readOnly: readOnly, }; const spCol = _.find(materialSpreadSetting.cols, {field: 'quantity'}); spCol.readOnly = true; spCol.cellType = 'activeImageBtn'; spCol.normalImg = '#ellipsis-icon'; spCol.indent = 5; spCol.showImage = function (data) { // return !readOnly && data.t_type === 2 && data.mid === materialID; return data.t_type === 2; }; materialSpreadSetting.imageClick = function (data) { if (data.t_type === 2) { $('#bcyy').modal('show'); $('#materialbillsId').val(data.id); $('#expr').val(data.expr); if (!readOnly && data.mid === materialID) { $('#expr').attr('readOnly', false); $('#expr_btn').show(); $('#expr_select').show(); } else { $('#expr').attr('readOnly', true); $('#expr_btn').hide(); $('#expr_select').hide(); } } }; const materialBase = { isEdit: function (data) { if (data.t_type === 2) { return data.mid === materialID; } else { const mlInfo = materialListData.find(function (item) { return item.mb_id === data.id; }); return data.mid === materialID && mlInfo === undefined; } }, // isStage: function (data) { // return data.mid === materialID; // } } const materialCol = { getValue: { msg_spread: function (data) { return ZhCalc.round(ZhCalc.sub(data.msg_tp, data.basic_price), 2); }, m_spread : function (data) { const msg_spread = materialCol.getValue.msg_spread(data); const cor = msg_spread >= 0 ? ZhCalc.mul(data.basic_price, ZhCalc.div(data.m_up_risk, 100)) : ZhCalc.mul(data.basic_price, ZhCalc.div(data.m_down_risk, 100)); return Math.abs(msg_spread) > Math.abs(cor) ? (msg_spread > 0 ? ZhCalc.round(ZhCalc.sub(msg_spread, cor), 2) : ZhCalc.round(ZhCalc.add(msg_spread, cor), 2)) : 0; }, m_tp: function (data) { return ZhCalc.round(ZhCalc.mul(materialCol.getValue.m_spread(data), data.quantity), 2); } }, readOnly: { isEdit: function (data) { return !(!readOnly && materialBase.isEdit(data)); }, remark: function () { return readOnly; }, }, }; SpreadJsObj.initSpreadSettingEvents(materialSpreadSetting, materialCol); SpreadJsObj.initSheet(materialSpread.getActiveSheet(), materialSpreadSetting); SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData); const materialSpreadObj = { refreshActn: function () { const setObjEnable = function (obj, enable) { if (enable) { obj.removeClass('disabled'); } else { obj.addClass('disabled'); } }; const sheet = materialSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); // 还需判断是否已被调差清单调用 setObjEnable($('#del'), !readOnly && select && materialBase.isEdit(select)); }, add: function () { const sheet = materialSpread.getActiveSheet(); postData(window.location.pathname + '/save', {type: 'add'}, function (result) { if (result) { materialBillsData.push(result); sheet.addRows(materialBillsData.length - 1, 1); SpreadJsObj.reLoadRowData(sheet, materialBillsData.length - 1); sheet.setSelection(materialBillsData.length - 1, 0, 1, 1); materialSpreadObj.refreshActn(); } }); }, del: function () { const sheet = materialSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); postData(window.location.pathname + '/save', {type: 'del', id: select.id}, function (result) { m_tp = result.m_tp; resetTpTable(); const index = materialBillsData.indexOf(select); materialBillsData.splice(index, 1); sheet.deleteRows(index, 1); SpreadJsObj.reLoadSheetData(materialSpread.getActiveSheet()); const sel = sheet.getSelections(); sheet.setSelection(index > 0 ? index - 1 : 0, sel.length > 0 ? sel[0].col : 0, 1, 1); materialSpreadObj.refreshActn(); }); }, selectionChanged: function (e, info) { materialSpreadObj.refreshActn(); const sel = info.sheet.getSelections()[0]; const col = info.sheet.zh_setting.cols[sel.col]; const data = SpreadJsObj.getSelectObject(info.sheet); materialSpreadObj.setReadOnly(true); }, editEnded: function (e, info) { if (info.sheet.zh_setting) { const select = SpreadJsObj.getSelectObject(info.sheet); const col = info.sheet.zh_setting.cols[info.col]; // 未改变值则不提交 const validText = info.editingText ? trimInvalidChar(info.editingText) : null; console.log(validText); const orgValue = select[col.field]; if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) { SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } // 判断部分值是否输入的是数字判断和数据计算 if (col.field === 'basic_price') { if (isNaN(validText)) { toastr.error('不能输入其它非数字类型字符'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } const num = parseFloat(validText); if (validText !== null && (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num))) { toastr.error('请输入大于0并且小于3位小数的浮点数'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } } if (col.field === 'msg_tp') { if (isNaN(validText)) { toastr.error('不能输入其它非数字类型字符'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } const num = parseFloat(validText); if (validText !== null && (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num))) { toastr.error('请输入大于0并且小于3位小数的浮点数'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } } if (col.field === 'm_up_risk') { // 只能输入正整数 if (isNaN(validText)) { toastr.error('不能输入其它非数字类型字符'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } const num = parseFloat(validText); if (validText !== null && (num < 0 || num > 100 || !/^\d+$/.test(num))) { toastr.error('只能输入0-100的正整数'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } } if (col.field === 'm_down_risk') { // 只能输入正整数 if (isNaN(validText)) { toastr.error('不能输入其它非数字类型字符'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } const num = parseFloat(validText); if (validText !== null && (num < 0 || num > 100 || !/^\d+$/.test(num))) { toastr.error('只能输入0-100的正整数'); SpreadJsObj.reLoadRowData(info.sheet, info.row); return; } } if (col.field === 't_type') { if (validText === 1) { select.quantity = null; select.expr = null; select.m_tp = null; } } select[col.field] = validText; select.msg_spread = materialCol.getValue.msg_spread(select); select.m_spread = materialCol.getValue.m_spread(select); select.m_tp = materialCol.getValue.m_tp(select); // 更新至服务器 postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) { m_tp = result.m_tp; resetTpTable(); SpreadJsObj.reLoadRowData(info.sheet, info.row); }, function () { select[col.field] = orgValue; SpreadJsObj.reLoadRowData(info.sheet, info.row); }); } }, // clipboardPasted(e, info) { // console.log(info) // if (info.sheet.zh_setting) { // const select = SpreadJsObj.getSelectObject(info.sheet); // const col = info.sheet.zh_setting.cols[info.col]; // // 未改变值则不提交 // const validText = info.editingText ? trimInvalidChar(info.editingText) : null; // console.log(validText); // const orgValue = select[col.field]; // if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) { // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // // 判断部分值是否输入的是数字判断和数据计算 // if (col.field === 'basic_price') { // if (isNaN(validText)) { // toastr.error('不能输入其它非数字类型字符'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // const num = parseFloat(validText); // if (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num)) { // toastr.error('请输入大于0并且小于3位小数的浮点数'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // } // if (col.field === 'msg_tp') { // if (isNaN(validText)) { // toastr.error('不能输入其它非数字类型字符'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // const num = parseFloat(validText); // if (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num)) { // toastr.error('请输入大于0并且小于3位小数的浮点数'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // } // if (col.field === 'm_up_risk') { // // 只能输入正整数 // if (isNaN(validText)) { // toastr.error('不能输入其它非数字类型字符'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // const num = parseFloat(validText); // if (num < 0 || num > 100 || !/^\d+$/.test(num)) { // toastr.error('只能输入0-100的正整数'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // } // if (col.field === 'm_down_risk') { // // 只能输入正整数 // if (isNaN(validText)) { // toastr.error('不能输入其它非数字类型字符'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // const num = parseFloat(validText); // if (num < 0 || num > 100 || !/^\d+$/.test(num)) { // toastr.error('只能输入0-100的正整数'); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // return; // } // } // if (col.field === 't_type') { // if (validText === 1) { // select.quantity = null; // select.expr = null; // select.m_tp = null; // } // } // select[col.field] = validText; // select.msg_spread = materialCol.getValue.msg_spread(select); // select.m_spread = materialCol.getValue.m_spread(select); // select.m_tp = materialCol.getValue.m_tp(select); // // 更新至服务器 // postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) { // m_tp = result.m_tp; // resetTpTable(); // SpreadJsObj.reLoadRowData(info.sheet, info.row); // }, function () { // select[col.field] = orgValue; // SpreadJsObj.reLoadRowData(info.sheet, info.row); // }); // } // }, setReadOnly: function(readOnly) { SpreadJsObj.resetFieldReadOnly(materialSpread.getActiveSheet(), 'msg_spread', 'm_spread', 'm_tp', 'pre_tp', readOnly); } }; materialSpreadObj.refreshActn(); materialSpread.bind(spreadNS.Events.SelectionChanged, materialSpreadObj.selectionChanged); // materialSpread.bind(spreadNS.Events.ClipboardPasted, materialSpreadObj.clipboardPasted); // const sheet = materialSpread.getActiveSheet(); // sheet.suspendPaint(); // var range = sheet.getRange(-1, 8, -1, 1); // console.log(range); // range.cellType(new DatePickerCellType()); // // range.formatter("yyyy-MM-dd"); // sheet.resumePaint(); if (!readOnly) { $('#add').click(materialSpreadObj.add); $('#del').click(materialSpreadObj.del); materialSpread.bind(spreadNS.Events.EditEnded, materialSpreadObj.editEnded); // 右键菜单 $.contextMenu({ selector: '#material-spread', build: function ($trigger, e) { const target = SpreadJsObj.safeRightClickSelection($trigger, e, materialSpread); return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader; }, items: { 'create': { name: '新增材料', icon: 'fa-sign-in', callback: function (key, opt) { materialSpreadObj.add(materialSpread.getActiveSheet()); }, }, 'delete': { name: '删除材料', icon: 'fa-remove', callback: function (key, opt) { materialSpreadObj.del(materialSpread.getActiveSheet()); }, disabled: function (key, opt) { const sheet = materialSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); materialSpreadObj.refreshActn(); if (!readOnly && select && materialBase.isEdit(select)) { return false; } else { return true; } } }, } }); $('#changeRate').change(function () { const rate = parseInt($(this).val()); postData(window.location.pathname + '/save', { type:'rate', rate: rate }, function (result) { const bqhs = ZhCalc.round(ZhCalc.mul(m_tp, 1+rate/100), 2); const jzbqhs = ZhCalc.round(ZhCalc.mul(ZhCalc.add(pre_tp, m_tp), 1+rate/100), 2); $('#rate_set').find('td').eq(1).text(bqhs !== 0 ? bqhs : ''); $('#rate_set').find('td').eq(2).text(jzbqhs !== 0 ? jzbqhs : ''); }); }); $('#expr_select button').on('click', function () { const code = $(this).text(); $('#expr').val($('#expr').val() + code); }); const ExprObj = { _checkExprValid(expr, invalidParam) { if (!expr) return [true, null]; const param = []; let num = '', base = ''; for (let i = 0, iLen = expr.length; i < iLen; i++) { if (/^[\d\.%]+/.test(expr[i])) { if (base !== '') { param.push({type: 'base', value: base}); base = ''; } num = num + expr[i]; } else if (/^[a-z]/.test(expr[i])) { if (num !== '') { param.push({type: 'num', value: num}); base = ''; } base = base + expr[i]; } else if (expr[i] === '(') { if (num !== '') { param.push({type: 'num', value: num}); base = ''; } if (base !== '') { param.push({type: 'base', value: base}); base = ''; } param.push({type: 'left', value: '('}); } else if (expr[i] === ')') { if (num !== '') { param.push({type: 'num', value: num}); base = ''; } if (base !== '') { param.push({type: 'base', value: base}); base = ''; } param.push({type: 'right', value: ')'}); } else if (/^[\+\-*\/]/.test(expr[i])) { if (num !== '') { param.push({type: 'num', value: num}); base = ''; } if (base !== '') { param.push({type: 'base', value: base}); base = ''; } param.push({type: 'calc', value: expr[i]}); } else { return [false, '输入的表达式含有非法字符: ' + expr[i]]; } } if (num !== '') { param.push({type: 'num', value: num}); base = ''; } if (base !== '') { param.push({type: 'base', value: base}); base = ''; } if (param.length === 0) return true; if (param.length > 1) { if (param[0].value === '-') { param[1].value = '-' + param[1]; } param.unshift(); } const iLen = param.length; let iLeftCount = 0, iRightCount = 0; for (const [i, p] of param.entries()) { if (p.type === 'calc') { if (i === 0 || i === iLen - 1) return [false, '输入的表达式非法:计算符号' + p.value + '前后应有数字或计算基数']; } if (p.type === 'num') { num = p.value.replace('%', ''); if (p.value.length - num.length > 1) return [false, '输入的表达式非法:' + p.value + '不是一个有效的数字']; num = _.toNumber(num); if (num === undefined || num === null || _.isNaN(num)) return [false, '输入的表达式非法:' + p.value + '不是一个有效的数字']; if (i > 0) { if (param[i - 1].type !== 'calc') { return [false, '输入的表达式非法:' + p.value + '前应有运算符']; } else if (param[i - 1].value === '/' && num === 0) { return [false, '输入的表达式非法:请勿除0']; } } } if (p.type === 'base') { const baseParam = _.find(calcBase, {code: p.value}); if (!baseParam) return [false, '输入的表达式非法:不存在计算基数' + p.value]; if (invalidParam && invalidParam.indexOf(p.value) >= 0) return [false, '不可使用计算基数' + p.value]; if (i > 0 && param[i - 1].type === 'calc') return [false, '输入的表达式非法:' + p.value + '前应有运算符']; } if (p.type === 'left') { iLeftCount += 1; if (i !== 0 && param[i-1].type !== 'calc') return [false, '输入的表达式非法:(前应有运算符']; } if (p.type === 'right') { iRightCount += 1; if (i !== iLen - 1 && param[i+1].type !== 'calc') return [false, '输入的表达式非法:)后应有运算符']; if (iRightCount > iLeftCount) return [false, '输入的表达式非法:")"前无对应的"("']; } } if (iLeftCount > iRightCount) return [false, '输入的表达式非法:"("后无对应的")"']; return [true, '']; }, _checkExpr: function (text) { if (text) { const num = _.toNumber(text); if (num) { console.log(num); } else { const expr = text.replace('=', '').toLowerCase(); const [valid, msg] = this._checkExprValid(expr); if (!valid) return [valid, msg]; } } return [true, '']; }, }; $('#expr_btn').click(function () { const expr = $('#expr').val(); // 判断表达式格式 const [valid, msg] = ExprObj._checkExpr(expr); if (!valid) { toastr.error(msg); } postData(window.location.pathname + '/save', { type:'expr', id: $('#materialbillsId').val(), expr: expr }, function (result) { m_tp = result.m_tp; resetTpTable(); const sheet = materialSpread.getActiveSheet(); const select = SpreadJsObj.getSelectObject(sheet); const index = materialBillsData.indexOf(select); materialBillsData.splice(index, 1, result.info); SpreadJsObj.reLoadRowData(sheet, index); $('#bcyy').modal('hide'); }); }) } else { // SpreadJsObj.forbiddenSpreadContextMenu('#material-spread', materialSpread); } $.subMenu({ menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list', toMenu: '#to-menu', toMiniMenu: '#to-mini-menu', key: 'menu.1.0.0', miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1', callback: function (info) { if (info.mini) { $('.panel-title').addClass('fluid'); $('#sub-menu').removeClass('panel-sidebar'); } else { $('.panel-title').removeClass('fluid'); $('#sub-menu').addClass('panel-sidebar'); } autoFlashHeight(); materialSpread.refresh(); } }); }); // // const pasteExpr = function (e, obj) { // let text = e.clipboardData.getData('text'); // e.preventDefault(); // text = trimInvalidChar(_.trim(text)); // const start = obj.selectionStart, end = obj.selectionEnd; // obj.value = obj.value.substr(0, start) + text + obj.value.substring(end, obj.value.length); // obj.selectionStart = start + text.length; // obj.selectionEnd = start + text.length; // };