Przeglądaj źródła

feat: 定额库编辑器,子目换算数量支持输入公式

vian 1 rok temu
rodzic
commit
8fb97f718d
1 zmienionych plików z 158 dodań i 135 usunięć
  1. 158 135
      web/maintain/ration_repository/js/coe.js

+ 158 - 135
web/maintain/ration_repository/js/coe.js

@@ -28,7 +28,7 @@ $(document).ready(function () {
     leftElesObj.left = $('#leftContent');
     leftElesObj.right = $('#mainContent');
     let maxEval = `$('#zmhsContent').is(':visible') ? $('#dataRow').width() - $('#zmhsContent').width() - 300 : $('#dataRow').width()  - 300`;
-    SlideResize.horizontalSlide(leftElesObj, {min: 300, max: maxEval}, function () {
+    SlideResize.horizontalSlide(leftElesObj, { min: 300, max: maxEval }, function () {
         refreshALlWorkBook();
         sectionTreeObj.loadRateWidth();
     });
@@ -50,12 +50,12 @@ $(document).ready(function () {
     rightElesObj.left = $('#mainContent');
     rightElesObj.right = $('#zmhsContent');
     let maxEvalRight = `$('#dataRow').width() - $('#leftContent').width() - 200`;
-    SlideResize.horizontalSlide(rightElesObj, {min: 200, max: maxEvalRight}, function () {
+    SlideResize.horizontalSlide(rightElesObj, { min: 200, max: maxEvalRight }, function () {
         refreshALlWorkBook();
     });
     //设置水平拖动条的宽度
     //@param {Object dom}resize滚动条
-    function setResizeWidth (resize) {
+    function setResizeWidth(resize) {
         const fixedWidth = 10;
         //跟滚动条同层的其他节点
         let bros = resize.parent().children();
@@ -77,7 +77,7 @@ $(document).ready(function () {
         let leftContentKey = `${moduleName}${$('#leftContent').attr('id')}Width`,
             mainContentKey = `${moduleName}${$('#mainContent').attr('id')}Width`,
             zmhsContentKey = `${moduleName}${$('#zmhsContent').attr('id')}Width`;
-        let zmhsWidth = getLocalCache(zmhsContentKey) ? getLocalCache(zmhsContentKey) :$('#zmhsContent')[0].style.width,
+        let zmhsWidth = getLocalCache(zmhsContentKey) ? getLocalCache(zmhsContentKey) : $('#zmhsContent')[0].style.width,
             mainContentWidth = $('#mainContent')[0].style.width,
             leftContentWidth;
         zmhsWidth = parseFloat(zmhsWidth.replace('%', ''));
@@ -107,11 +107,11 @@ $(document).ready(function () {
         sectionTreeObj.loadRateWidth();
     }
     $('#zmhs').click(function () {
-        if(!$(this).hasClass('active')){
+        if (!$(this).hasClass('active')) {
             $(this).addClass('active');
             refreshAfterZmhs(true);
             $('#zmhsContent').show();
-            if(!coeOprObj.workBook){
+            if (!coeOprObj.workBook) {
                 pageObj.initPage();
             }
             refreshALlWorkBook();
@@ -167,14 +167,14 @@ function loadZmhsAdjSize(resizeObj) {
     });
 }
 var pageObj = {
-    initPage: function (){
+    initPage: function () {
         coeOprObj.buildSheet($('#mainSpread')[0]);
         gljAdjOprObj.buildSheet($('#contentSpread')[0]);
         coeOprObj.getCoeList();
         gljAdjOprObj.getGljItemsOcc();
         lockUtil.lockSpreads([coeOprObj.workBook, gljAdjOprObj.workBook], locked);
     },
-    showData: function(sheet, setting, data) {
+    showData: function (sheet, setting, data) {
         let me = pageObj, ch = GC.Spread.Sheets.SheetArea.viewport;
         sheet.suspendPaint();
         sheet.suspendEvent();
@@ -184,16 +184,16 @@ var pageObj = {
             var hAlign = "left", vAlign = "center";
             if (setting.header[col].hAlign) {
                 hAlign = setting.header[col].hAlign;
-            } else if (setting.header[col].dataType !== "String"){
+            } else if (setting.header[col].dataType !== "String") {
                 hAlign = "right";
             }
-            if(setting.header[col].readOnly){
+            if (setting.header[col].readOnly) {
                 sheet.getRange(-1, col, -1, 1).locked(true);
             }
-            else{
+            else {
                 sheet.getRange(-1, col, -1, 1).locked(false);
             }
-            vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;
+            vAlign = setting.header[col].vAlign ? setting.header[col].vAlign : vAlign;
             sheetCommonObj.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);
             if (setting.header[col].formatter) {
                 sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
@@ -216,17 +216,17 @@ let coeOprObj = {
     currentMaxNo: null,
     setting: {
         header: [
-            {headerName:"编号", headerWidth:50, dataCode:"serialNo", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"名称", headerWidth:200, dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center", readOnly: false},
-            {headerName:"内容", headerWidth:150, dataCode:"content", dataType: "String", hAlign: "left", vAlign: "center", readOnly: false},
-            {headerName:"原人材机编码", headerWidth:90, dataCode:"original_code", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"可选人材机编码", headerWidth:150, dataCode:"option_codes", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false}
+            { headerName: "编号", headerWidth: 50, dataCode: "serialNo", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false },
+            { headerName: "名称", headerWidth: 200, dataCode: "name", dataType: "String", hAlign: "left", vAlign: "center", readOnly: false },
+            { headerName: "内容", headerWidth: 150, dataCode: "content", dataType: "String", hAlign: "left", vAlign: "center", readOnly: false },
+            { headerName: "原人材机编码", headerWidth: 90, dataCode: "original_code", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false },
+            { headerName: "可选人材机编码", headerWidth: 150, dataCode: "option_codes", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false }
         ]
     },
     buildSheet: function (container) {
         let me = coeOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
-        sheetCommonObj.bindEscKey(me.workBook, [{sheet: me.workBook.getSheet(0), editStarting: null, editEnded: me.onEditEnded}]);
+        sheetCommonObj.bindEscKey(me.workBook, [{ sheet: me.workBook.getSheet(0), editStarting: null, editEnded: me.onEditEnded }]);
         me.workSheet = me.workBook.getSheet(0);
         me.workSheet.options.isProtected = true;
         me.onDelOpr(me.workBook, me.setting);
@@ -237,7 +237,7 @@ let coeOprObj = {
         me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
     },
     onSelectionChanged: function (sender, info) {
-        if(info.oldSelections.length === 0 && info.newSelections.length > 0 || info.oldSelections[0].row !== info.newSelections[0].row){
+        if (info.oldSelections.length === 0 && info.newSelections.length > 0 || info.oldSelections[0].row !== info.newSelections[0].row) {
             const row = info.newSelections[0].row;
             coeOprObj.coeSelInit(row);
         }
@@ -245,11 +245,11 @@ let coeOprObj = {
     coeSelInit: function (row) {
         const me = coeOprObj;
         const adj = gljAdjOprObj;
-        if(row < me.currentCoeList.length){
+        if (row < me.currentCoeList.length) {
             me.currentCoe = me.currentCoeList[row];
             adj.currentGljAdjList = me.currentCoe.coes;
             adj.buildDynamicComboBox(adj.workSheet);
-        } else{
+        } else {
             me.currentCoe = null;
             adj.currentGljAdjList = [];
             adj.buildBaseCell(adj.workSheet);
@@ -261,42 +261,42 @@ let coeOprObj = {
     },
     onEditEnded: function (sender, args) {
         let me = coeOprObj, addArr = [], updateArr = [], dataCode = me.setting.header[args.col].dataCode;
-        if(args.editingText && args.editingText.toString().trim().length > 0){
+        if (args.editingText && args.editingText.toString().trim().length > 0) {
             let inputT = args.editingText.toString().trim();
             //update
-            if(args.row < me.currentCoeList.length){
+            if (args.row < me.currentCoeList.length) {
                 let updateObj = me.currentCoeList[args.row];
-                if(updateObj[dataCode] != inputT){
-                    if(dataCode === 'serialNo'){
-                        if(me.isInt(inputT) && !me.hasTisNo(me.currentCoeList, inputT)){
+                if (updateObj[dataCode] != inputT) {
+                    if (dataCode === 'serialNo') {
+                        if (me.isInt(inputT) && !me.hasTisNo(me.currentCoeList, inputT)) {
                             me.currentMaxNo = me.currentMaxNo >= inputT ? me.currentMaxNo : inputT;
                             updateObj[dataCode] = inputT;
                             updateArr.push(updateObj);
                             me.save([], updateArr, [], true);
                         }
-                        else if(!me.isInt(inputT)){
+                        else if (!me.isInt(inputT)) {
                             alert('编号只能为整数!');
                             args.sheet.setValue(args.row, args.col, updateObj[dataCode] + '');
                         }
-                        else if(me.hasTisNo(me.currentCoeList, inputT)){
+                        else if (me.hasTisNo(me.currentCoeList, inputT)) {
                             alert('该编号已存在!');
                             args.sheet.setValue(args.row, args.col, updateObj[dataCode] + '');
                         }
                     }
                     else {
                         updateObj[dataCode] = inputT;
-                        me.setOptionList(dataCode,inputT,updateObj);
+                        me.setOptionList(dataCode, inputT, updateObj);
                         updateArr.push(updateObj);
                         me.save([], updateArr, [], true);
                     }
                 }
             }
             //insert
-            else{
+            else {
                 let newCoe = {};
                 newCoe.libID = pageOprObj.rationLibId;
-                if(dataCode === 'serialNo'){
-                    if(me.isInt(inputT) && !me.hasTisNo(me.currentCoeList, inputT)){
+                if (dataCode === 'serialNo') {
+                    if (me.isInt(inputT) && !me.hasTisNo(me.currentCoeList, inputT)) {
                         me.currentMaxNo = me.currentMaxNo >= inputT ? me.currentMaxNo : inputT;
                         newCoe[dataCode] = inputT;
                         addArr.push(newCoe);
@@ -304,19 +304,19 @@ let coeOprObj = {
                             me.updateCurrentCoeList(result);
                         });
                     }
-                    else if(!me.isInt(inputT)){
+                    else if (!me.isInt(inputT)) {
                         args.sheet.setValue(args.row, args.col, '');
                         alert('编号只能为整数!');
                     }
-                    else if(me.hasTisNo(me.currentCoeList, inputT)){
+                    else if (me.hasTisNo(me.currentCoeList, inputT)) {
                         args.sheet.setValue(args.row, args.col, '');
                         alert('该编号已存在!');
                     }
                 }
-                else{
+                else {
                     newCoe.serialNo = ++me.currentMaxNo;
                     newCoe[dataCode] = inputT;
-                    me.setOptionList(dataCode,inputT,newCoe);
+                    me.setOptionList(dataCode, inputT, newCoe);
                     addArr.push(newCoe);
                     me.save(addArr, [], [], true, function (result) {
                         me.updateCurrentCoeList(result);
@@ -325,21 +325,21 @@ let coeOprObj = {
             }
         }
     },
-    setOptionList:function (dataCode,inputT,obj) {
-        if(dataCode == "option_codes"){//所选人材的情况,要获取人材机下拉列表
+    setOptionList: function (dataCode, inputT, obj) {
+        if (dataCode == "option_codes") {//所选人材的情况,要获取人材机下拉列表
             inputT = inputT.replace(/[\s\r\n]/g, "")//去掉空格换行等字符
             let optionList = [];
             let options = inputT.split("|");
-            for(let code of options){
-                let name = gljAdjOprObj.getGljName(code,gljAdjOprObj.gljList,true);
-                if(name) optionList.push({text:name,value:code});
+            for (let code of options) {
+                let name = gljAdjOprObj.getGljName(code, gljAdjOprObj.gljList, true);
+                if (name) optionList.push({ text: name, value: code });
             }
             obj.option_list = optionList;
         }
     },
     onClipboardPasting: function (sender, info) {
         let me = coeOprObj, maxCol = info.cellRange.col + info.cellRange.colCount - 1;
-        if(maxCol > me.setting.header.length){
+        if (maxCol > me.setting.header.length) {
             info.cancel = true;
         }
     },
@@ -347,14 +347,14 @@ let coeOprObj = {
         let me = coeOprObj, addArr = [], updateArr = [];
         let items = sheetCommonObj.analyzePasteData(me.setting, info);
         let uniqItems = me.makeUniqItems(items);
-        for(let i = 0, len = uniqItems.length; i < len; i++){
+        for (let i = 0, len = uniqItems.length; i < len; i++) {
             let row = i + info.cellRange.row;
             //update
-            if(row < me.currentCoeList.length){
+            if (row < me.currentCoeList.length) {
                 let updateObj = me.currentCoeList[row];
-                for(let attr in uniqItems[i]){
-                    if(attr === 'serialNo'){
-                        if(me.isInt(uniqItems[i][attr]) && !me.hasTisNo(me.currentCoeList, uniqItems[i][attr])){
+                for (let attr in uniqItems[i]) {
+                    if (attr === 'serialNo') {
+                        if (me.isInt(uniqItems[i][attr]) && !me.hasTisNo(me.currentCoeList, uniqItems[i][attr])) {
                             me.currentMaxNo = me.currentMaxNo >= uniqItems[i][attr] ? me.currentMaxNo : uniqItems[i][attr];
                             updateObj[attr] = uniqItems[i][attr];
                         }
@@ -367,7 +367,7 @@ let coeOprObj = {
             }
             //insert
             else {
-                if(typeof uniqItems[i].serialNo !== 'undefined' && uniqItems[i] && me.isInt(uniqItems[i].serialNo) && !me.hasTisNo(me.currentCoeList, uniqItems[i].serialNo)){
+                if (typeof uniqItems[i].serialNo !== 'undefined' && uniqItems[i] && me.isInt(uniqItems[i].serialNo) && !me.hasTisNo(me.currentCoeList, uniqItems[i].serialNo)) {
                     me.currentMaxNo = me.currentMaxNo >= uniqItems[i].serialNo ? me.currentMaxNo : uniqItems[i].serialNo;
                 }
                 else {
@@ -377,7 +377,7 @@ let coeOprObj = {
                 addArr.push(uniqItems[i]);
             }
         }
-        if(addArr.length > 0 || updateArr.length > 0){
+        if (addArr.length > 0 || updateArr.length > 0) {
             me.save(addArr, updateArr, [], true, function (result) {
                 me.updateCurrentCoeList(result);
             });
@@ -390,21 +390,21 @@ let coeOprObj = {
             let sheet = workBook.getSheet(0);
             let sels = sheet.getSelections();
             let idx = sels[0].row;
-            for(let i = 0, len = sels.length; i < len; i++){
-                if(idx > sels[i].row){
+            for (let i = 0, len = sels.length; i < len; i++) {
+                if (idx > sels[i].row) {
                     idx = sels[i].row;
                 }
-                if(sels[i].colCount === setting.header.length){//can del
-                    for(let r = 0, rLen = sels[i].rowCount; r < rLen; r++){
+                if (sels[i].colCount === setting.header.length) {//can del
+                    for (let r = 0, rLen = sels[i].rowCount; r < rLen; r++) {
                         let row = sels[i].row + r;
-                        if(row < me.currentCoeList.length){
-                            deleteArr.push({libID: me.currentCoeList[row].libID, ID: me.currentCoeList[row].ID});
+                        if (row < me.currentCoeList.length) {
+                            deleteArr.push({ libID: me.currentCoeList[row].libID, ID: me.currentCoeList[row].ID });
                         }
                     }
                     me.currentCoeList.splice(sels[i].row, sels[i].rowCount);
                 }
             }
-            if(deleteArr.length > 0){
+            if (deleteArr.length > 0) {
                 me.save([], [], deleteArr, true);
                 me.currentCoe = typeof me.currentCoeList[idx] !== 'undefined' ? me.currentCoeList[idx] : null;
                 that.currentGljAdjList = me.currentCoe ? me.currentCoe.coes : [];
@@ -419,18 +419,18 @@ let coeOprObj = {
         const me = this;
         $.contextMenu({
             selector: '#mainSpread',
-            build: function($triggerElement, e){
+            build: function ($triggerElement, e) {
                 //控制允许右键菜单在哪个位置出现
                 const target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.workBook);
                 const sheet = me.workBook.getSheet(0);
-                if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
-                    if(typeof target.row !== 'undefined'){
+                if (target.hitTestType === 3) {//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
+                    if (typeof target.row !== 'undefined') {
                         //控制按钮是否可用
                         sheet.setActiveCell(target.row, target.col);
                         me.coeSelInit(target.row);
                     }
                     return {
-                        callback: function(){},
+                        callback: function () { },
                         items: {
                             getReference: {
                                 name: '查找引用',
@@ -446,7 +446,7 @@ let coeOprObj = {
                         }
                     };
                 }
-                else{
+                else {
                     return false;
                 }
             }
@@ -478,20 +478,20 @@ let coeOprObj = {
     //粘贴的数据,编号唯一化,去除编号重复的项
     makeUniqItems: function (items) {
         let rst = [];
-        for(let i = 0, len = items.length; i < len; i++){
-            if(typeof items[i].serialNo !== 'undefined' && items[i].serialNo){
-                if(rst.length === 0){
+        for (let i = 0, len = items.length; i < len; i++) {
+            if (typeof items[i].serialNo !== 'undefined' && items[i].serialNo) {
+                if (rst.length === 0) {
                     rst.push(items[i]);
                 }
-                else{
+                else {
                     let isExist = false;
-                    for(let j = 0, jLen = rst.length; j < jLen; j++){
-                        if(items[i].serialNo === rst[j].serialNo){
+                    for (let j = 0, jLen = rst.length; j < jLen; j++) {
+                        if (items[i].serialNo === rst[j].serialNo) {
                             isExist = true;
                             break;
                         }
                     }
-                    if(!isExist){
+                    if (!isExist) {
                         rst.push(items[i]);
                     }
                 }
@@ -507,8 +507,8 @@ let coeOprObj = {
     },
     hasTisNo: function (coeList, newSerialNo) {
         let rst = false;
-        for(let i = 0, len = coeList.length; i < len; i++){
-            if(coeList[i].serialNo == newSerialNo){
+        for (let i = 0, len = coeList.length; i < len; i++) {
+            if (coeList[i].serialNo == newSerialNo) {
                 rst = true;
                 break;
             }
@@ -517,15 +517,15 @@ let coeOprObj = {
     },
     updateCurrentCoeList: function (newCoeList) {
         let me = coeOprObj;
-        if(newCoeList){
+        if (newCoeList) {
             me.currentCoeList = me.currentCoeList.concat(newCoeList);
         }
     },
     sortCoeList: function (coeList) {
         coeList.sort(function (a, b) {
             let rst = 0;
-            if(a.serialNo > b.serialNo) rst = 1;
-            else if(a.serialNo < b.serialNo) rst = -1;
+            if (a.serialNo > b.serialNo) rst = 1;
+            else if (a.serialNo < b.serialNo) rst = -1;
             return rst;
         });
     },
@@ -534,19 +534,19 @@ let coeOprObj = {
         $.ajax({
             type: 'post',
             url: '/rationRepository/api/getCoeList',
-            data: {libID: pageOprObj.rationLibId},
+            data: { libID: pageOprObj.rationLibId },
             dataType: 'json',
-            timeout:20000,
+            timeout: 20000,
             success: function (result) {
-                if(!result.error){
+                if (!result.error) {
                     me.currentCoeList = result.data;
                     me.sortCoeList(me.currentCoeList);
-                    me.currentMaxNo =  me.currentCoeList.length > 0 ? me.currentCoeList[me.currentCoeList.length - 1].serialNo : 0;
+                    me.currentMaxNo = me.currentCoeList.length > 0 ? me.currentCoeList[me.currentCoeList.length - 1].serialNo : 0;
                     pageObj.showData(me.workSheet, me.setting, me.currentCoeList);
                     me.workSheet.clearSelection();
                 }
             },
-            error:function(err){
+            error: function (err) {
                 alert("内部程序错误!");
             }
         });
@@ -554,19 +554,19 @@ let coeOprObj = {
     save: function (addArr, updateArr, deleteArr, refresh, callback) {
         let me = coeOprObj;
         $.ajax({
-            type:"POST",
-            url:"api/saveCoeList",
-            data: {data: JSON.stringify({addArr: addArr, updateArr: updateArr, deleteArr: deleteArr})},
-            dataType:"json",
-            timeout:5000,
-            success:function(result){
+            type: "POST",
+            url: "api/saveCoeList",
+            data: { data: JSON.stringify({ addArr: addArr, updateArr: updateArr, deleteArr: deleteArr }) },
+            dataType: "json",
+            timeout: 5000,
+            success: function (result) {
                 if (result.error) {
                     alert(result.message);
-                } else{
-                    if(callback){
-                        if(result.message === 'mixed'){
-                            for(let i = 0, len = result.data.length; i < len; i++){
-                                if(result.data[i][0] === 'addSc'){
+                } else {
+                    if (callback) {
+                        if (result.message === 'mixed') {
+                            for (let i = 0, len = result.data.length; i < len; i++) {
+                                if (result.data[i][0] === 'addSc') {
                                     result.data = result.data[i][1];
                                     break;
                                 }
@@ -574,20 +574,39 @@ let coeOprObj = {
                         }
                         callback(result.data);
                     }
-                    if(refresh){
+                    if (refresh) {
                         me.sortCoeList(me.currentCoeList);
                         me.currentMaxNo = me.currentCoeList.length > 0 ? me.currentCoeList[me.currentCoeList.length - 1].serialNo : 0;
                         pageObj.showData(me.workSheet, me.setting, me.currentCoeList);
                     }
                 }
             },
-            error:function(err){
+            error: function (err) {
                 alert("内部程序错误!");
             }
         });
     }
 };
 
+// 验证数量的有效性:可以输入数值,也可以输入表达式,eg: [人材机编码]*1.5+1
+const validateAmount = (amountStr) => {
+    if (!amountStr) {
+        return true;
+    }
+    let str = amountStr.replace(/\s/g, '');
+    if (!str) {
+        return true;
+    }
+    try {
+        str = amountStr.replace(/\s/g, '').replace(/\[\d+\]/g, '0');
+        eval(str);
+
+    } catch (error) {
+        return false;
+    }
+    return true;
+}
+
 let gljAdjOprObj = {
     workBook: null,
     workSheet: null,
@@ -596,28 +615,28 @@ let gljAdjOprObj = {
 
     setting: {
         header: [
-            {headerName:"调整类型", headerWidth:80, dataCode:"coeType", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"人材机编码", headerWidth:80, dataCode:"gljCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false},
+            { headerName: "调整类型", headerWidth: 80, dataCode: "coeType", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false },
+            { headerName: "人材机编码", headerWidth: 80, dataCode: "gljCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false },
             // readOnly: true --> false,需要兼容粘贴列包含只读项
-            {headerName:"名称", headerWidth:100, dataCode:"gljName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"操作符", headerWidth:60, dataCode:"operator", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false},
-            {headerName:"数量", headerWidth:80, dataCode:"amount", dataType: "String", hAlign: "center", vAlign: "center" , readOnly: false},
-            {headerName:"替换为编码", headerWidth:80, dataCode:"replaceCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false},
+            { headerName: "名称", headerWidth: 100, dataCode: "gljName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false },
+            { headerName: "操作符", headerWidth: 60, dataCode: "operator", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false },
+            { headerName: "数量", headerWidth: 80, dataCode: "amount", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false },
+            { headerName: "替换为编码", headerWidth: 80, dataCode: "replaceCode", dataType: "String", formatter: '@', hAlign: "center", vAlign: "center", readOnly: false },
             // readOnly: true --> false
-            {headerName:"替换为名称", headerWidth:100, dataCode:"replaceName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false}
+            { headerName: "替换为名称", headerWidth: 100, dataCode: "replaceName", dataType: "String", hAlign: "center", vAlign: "center", readOnly: false }
         ],
         comboItems: {
             //调整类型下拉菜单
-            coeType: ['定额', '人工', '材料', '机械', '主材', '设备', '单个工料机','替换人材机',"所选人材机"],
+            coeType: ['定额', '人工', '材料', '机械', '主材', '设备', '单个工料机', '替换人材机', "所选人材机"],
             //操作符下拉菜单
-            operator: ['+', '-', '*', '/', '=','+*','-*']
+            operator: ['+', '-', '*', '/', '=', '+*', '-*']
         }
     },
     buildSheet: function (container) {
         let me = gljAdjOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 3);
         me.workSheet = me.workBook.getSheet(0);
-        sheetCommonObj.bindEscKey(me.workBook, [{sheet: me.workBook.getSheet(0), editStarting: me.onEditStart, editEnded: me.onEditEnded}]);
+        sheetCommonObj.bindEscKey(me.workBook, [{ sheet: me.workBook.getSheet(0), editStarting: me.onEditStart, editEnded: me.onEditEnded }]);
         me.workSheet.options.isProtected = true;
         me.onDelOpr(me.workBook, me.setting);
         me.workSheet.clearSelection();
@@ -691,36 +710,36 @@ let gljAdjOprObj = {
     onEditEnded: function (sender, args) {
         let me = gljAdjOprObj, isUpdate = false,
             dataCode = me.setting.header[args.col].dataCode;
-        if(args.editingText && args.editingText.toString().trim().length > 0){
-            if(dataCode === 'amount' &&  isNaN(args.editingText)){
+        if (args.editingText && args.editingText.toString().trim().length > 0) {
+            if (dataCode === 'amount' && !validateAmount(args.editingText)) {
                 alert("只能输入数值!");
                 args.sheet.setValue(args.row, args.col, typeof me.currentGljAdjList[args.row] !== 'undefined' && typeof me.currentGljAdjList[args.row][dataCode] !== 'undefined'
                     ? me.currentGljAdjList[args.row][dataCode] + '' : '');
             }
             else {
                 //update
-                if(args.row < me.currentGljAdjList.length && args.editingText.toString().trim() !== me.currentGljAdjList[args.row][dataCode]){
+                if (args.row < me.currentGljAdjList.length && args.editingText.toString().trim() !== me.currentGljAdjList[args.row][dataCode]) {
                     let updateObj = me.currentGljAdjList[args.row];
-                    if(dataCode === 'gljCode' && typeof updateObj.coeType !== 'undefined' && (updateObj.coeType === '单个工料机'||updateObj.coeType === '替换人材机')){
+                    if (dataCode === 'gljCode' && typeof updateObj.coeType !== 'undefined' && (updateObj.coeType === '单个工料机' || updateObj.coeType === '替换人材机')) {
                         let gljName = me.getGljName(args.editingText, me.gljList);
-                        if(gljName){
+                        if (gljName) {
                             updateObj.gljCode = args.editingText;
                             updateObj.gljName = gljName;
                             isUpdate = true;
                         } else {
-                            alert("不存在编号为"+ args.editingText +"的工料机");
+                            alert("不存在编号为" + args.editingText + "的工料机");
                         }
-                    }else if(dataCode === 'replaceCode' && typeof updateObj.coeType !== 'undefined' && updateObj.coeType === '替换人材机'){
+                    } else if (dataCode === 'replaceCode' && typeof updateObj.coeType !== 'undefined' && updateObj.coeType === '替换人材机') {
                         let gljName = me.getGljName(args.editingText, me.gljList);
-                        if(gljName){
+                        if (gljName) {
                             updateObj.replaceCode = args.editingText;
                             updateObj.replaceName = gljName;
                             isUpdate = true;
                         } else {
-                            alert("不存在编号为"+ args.editingText +"的工料机");
+                            alert("不存在编号为" + args.editingText + "的工料机");
                         }
                     }
-                    else if(dataCode === 'coeType'){
+                    else if (dataCode === 'coeType') {
                         isUpdate = true;
                         updateObj[dataCode] = args.editingText;
                         updateObj.gljCode = '';
@@ -728,19 +747,19 @@ let gljAdjOprObj = {
                         updateObj.replaceCode = '';
                         updateObj.replaceName = '';
                     }
-                    else if(dataCode !== 'gljCode') {
+                    else if (dataCode !== 'gljCode') {
                         isUpdate = true;
                         updateObj[dataCode] = args.editingText;
                     }
                 }
                 //insert
-                else if(args.row >= me.currentGljAdjList.length){
+                else if (args.row >= me.currentGljAdjList.length) {
                     isUpdate = true;
                     let newAdjGlj = {};
                     newAdjGlj[dataCode] = args.editingText;
                     me.currentGljAdjList.push(newAdjGlj);
                 }
-                if(isUpdate){
+                if (isUpdate) {
                     coeOprObj.save([], [coeOprObj.currentCoe], [], false, function () {
                         console.log(me.currentGljAdjList);
                         me.show(me.currentGljAdjList);
@@ -785,9 +804,13 @@ let gljAdjOprObj = {
                 }
             },
             amount: function (v, cur, tar) {
-                if (!isNaN(v)) {
+                /* if (!isNaN(v)) {
+                    tar.amount = v;
+                } */
+                if (validateAmount(v)) {
                     tar.amount = v;
                 }
+
             },
             operator: function (v, cur, tar) {
                 if (v === '' || me.setting.comboItems.operator.includes(v)) {
@@ -809,12 +832,12 @@ let gljAdjOprObj = {
             }
         };
         let rst = [];
-        for(let i = 0, len = pasteItems.length; i < len; i++){
+        for (let i = 0, len = pasteItems.length; i < len; i++) {
             let row = i + info.cellRange.row;
             let target = {},
                 curObj = me.currentGljAdjList[row],
                 pasteItem = pasteItems[i];
-            if(row < me.currentGljAdjList.length){
+            if (row < me.currentGljAdjList.length) {
                 target.index = row;//要有下标做为匹配的依据,不然在复制多行并且某个单元格是只读的情况下,这里返回的updateList个数会比选中的行数少,造成更新行和实际不匹配的情况
             }
             for (let pasteKey in pasteItem) {
@@ -822,7 +845,7 @@ let gljAdjOprObj = {
                     rules[pasteKey](pasteItem[pasteKey], curObj, target);
                 }
             }
-            if(Object.keys(target).length > 0){
+            if (Object.keys(target).length > 0) {
                 rst.push(target);
             }
         }
@@ -832,20 +855,20 @@ let gljAdjOprObj = {
         let me = gljAdjOprObj, row;
         let items = sheetCommonObj.analyzePasteData(me.setting, info);
         let validData = me.getValidPasteData(items, info);
-        for(let i = 0, len = validData.length; i < len; i++){
+        for (let i = 0, len = validData.length; i < len; i++) {
             row = i + info.cellRange.row;
             //update
-            if(row < me.currentGljAdjList.length && typeof validData[i].index !=='undefined'){
+            if (row < me.currentGljAdjList.length && typeof validData[i].index !== 'undefined') {
                 let updateObj = me.currentGljAdjList[validData[i].index];//这里改成读取下标
-                delete  validData[i].index; //清除下标
+                delete validData[i].index; //清除下标
                 Object.assign(updateObj, validData[i])
             }
             //insert
-            else{
+            else {
                 me.currentGljAdjList.push(validData[i]);
             }
         }
-        if(validData.length > 0){
+        if (validData.length > 0) {
             coeOprObj.save([], [coeOprObj.currentCoe], [], false, function () {
                 me.show(me.currentGljAdjList);
             });
@@ -860,15 +883,15 @@ let gljAdjOprObj = {
             let sheet = workBook.getSheet(0);
             let sels = sheet.getSelections();
             let isUpdate = false;
-            for(let i = 0, len = sels.length; i < len; i++){
-                if(sels[i].colCount === setting.header.length){//can del
-                    if(sels[i].row < me.currentGljAdjList.length){
+            for (let i = 0, len = sels.length; i < len; i++) {
+                if (sels[i].colCount === setting.header.length) {//can del
+                    if (sels[i].row < me.currentGljAdjList.length) {
                         isUpdate = true;
                         me.currentGljAdjList.splice(sels[i].row, sels[i].rowCount);
                     }
                 }
             }
-            if(isUpdate){
+            if (isUpdate) {
                 coeOprObj.save([], [coeOprObj.currentCoe], [], false, function () {
                     me.show(me.currentGljAdjList);
                 });
@@ -877,11 +900,11 @@ let gljAdjOprObj = {
         workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
         workBook.commandManager().setShortcutKey('gljAdjDel', GC.Spread.Commands.Key.del, false, false, false, false);
     },
-    getGljName: function (gljCode, gljList,withSpecs) {//withSpecs 是否带上规格型号
+    getGljName: function (gljCode, gljList, withSpecs) {//withSpecs 是否带上规格型号
         let rst = null;
-        for(let i = 0, len = gljList.length; i < len; i++){
-            if(gljCode === gljList[i].code){
-                rst = withSpecs == true ?gljList[i].name +" - "+gljList[i].specs :gljList[i].name;
+        for (let i = 0, len = gljList.length; i < len; i++) {
+            if (gljCode === gljList[i].code) {
+                rst = withSpecs == true ? gljList[i].name + " - " + gljList[i].specs : gljList[i].name;
                 break;
             }
         }
@@ -896,17 +919,17 @@ let gljAdjOprObj = {
         $.ajax({
             type: 'post',
             url: '/stdGljRepository/api/getGljItemsOccupied',
-            data: {repId: pageOprObj.gljLibId, occupation: '-_id code name specs'},
+            data: { repId: pageOprObj.gljLibId, occupation: '-_id code name specs' },
             dataType: 'json',
             timeout: 5000,
-            success:function(result){
+            success: function (result) {
                 if (result.error) {
                     alert(result.message);
-                } else{
+                } else {
                     me.gljList = result.data;
                 }
             },
-            error:function(err){
+            error: function (err) {
                 alert("内部程序错误!");
             }
         });